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;
}