CSPspEmu.Hle.Formats.video.MpegPsDemuxer.ParsePacketizedStream C# (CSharp) Method

ParsePacketizedStream() public method

public ParsePacketizedStream ( Stream PacketStream ) : PacketizedStream
PacketStream Stream
return PacketizedStream
        public PacketizedStream ParsePacketizedStream(Stream PacketStream)
        {
            var c = (byte)PacketStream.ReadByte();
            //Console.WriteLine("c: 0x{0:X}", c);

            var PacketizedStream = default(PacketizedStream);

            // mpeg 2 PES
            if ((c & 0xC0) == 0x80)
            {
                var flags = (byte)PacketStream.ReadByte();
                var header_len = (byte)PacketStream.ReadByte();
                var HeaderStream = PacketStream.ReadStreamCopy(header_len);
                if (HeaderStream.Length != header_len) throw (new Exception("Didn't read the entire packet"));

                //PacketStream.Skip(header_len);

                //Console.WriteLine("flags: 0x{0:X}", flags);

                // Has PTS/DTS
                if ((flags & 0x80) != 0)
                {
                    PacketizedStream.dts = PacketizedStream.pts = HeaderStream.ReadStruct<TimeStamp>();

                    // Has DTS
                    // On PSP, video DTS is always 1 frame behind PTS
                    if ((flags & 0x40) != 0)
                    {
                        PacketizedStream.dts = HeaderStream.ReadStruct<TimeStamp>();
                    }

                    //Console.WriteLine("pts: {0}, dts: {1}", PacketizedStream.pts, PacketizedStream.dts);
                }
            }

            PacketizedStream.Stream = PacketStream.ReadStreamCopy();

            return PacketizedStream;
        }

Usage Example

Example #1
0
 public void ReadPacketizedElementaryStreamHeaderTest()
 {
     MpegPsDemuxer.Packet Packet;
     var MpegPsDemuxer = new MpegPsDemuxer(File.OpenRead("../../../TestInput/test.pmf").SliceWithLength(0x800));
     for (int n = 0; n < 32; n++)
     {
         Packet = MpegPsDemuxer.ReadPacketizedElementaryStreamHeader();
         //if ((Packet.Type & 0xFF0) == 0x1E0)
         //if (Packet.Type == 0x1E0)
         {
             Console.WriteLine("0x{0:X}", Packet.Type);
             MpegPsDemuxer.ParsePacketizedStream(Packet.Stream);
         }
     }
 }