Пример #1
0
        private PictureHeader readHeader(MemoryStream buffer)
        {
            PictureHeader ph = null;
            MemoryStream  segment;
            MemoryStream  fork = buffer.duplicate();

            while ((segment = MPEGUtil.nextSegment(fork)) != null)
            {
                int code = segment.getInt() & 0xff;
                if (code == MPEGConst.SEQUENCE_HEADER_CODE)
                {
                    SequenceHeader newSh = SequenceHeader.read(segment);
                    if (sh != null)
                    {
                        newSh.copyExtensions(sh);
                    }
                    sh = newSh;
                }
                else if (code == MPEGConst.GROUP_START_CODE)
                {
                    gh = GOPHeader.read(segment);
                }
                else if (code == MPEGConst.PICTURE_START_CODE)
                {
                    ph = PictureHeader.read(segment);
                }
                else if (code == MPEGConst.EXTENSION_START_CODE)
                {
                    int extType = segment.get(4) >> 4;
                    if (extType == SequenceHeader.Sequence_Extension || extType == SequenceHeader.Sequence_Scalable_Extension ||
                        extType == SequenceHeader.Sequence_Display_Extension)
                    {
                        SequenceHeader.readExtension(segment, sh);
                    }
                    else
                    {
                        PictureHeader.readExtension(segment, ph, sh);
                    }
                }
                else if (code == MPEGConst.USER_DATA_START_CODE)
                {
                    // do nothing
                }
                else
                {
                    break;
                }
                buffer.position(fork.position());
            }
            return(ph);
        }
Пример #2
0
        private static SequenceHeader getSequenceHeader(MemoryStream data)
        {
            MemoryStream segment = MPEGUtil.nextSegment(data);

            while (segment != null)
            {
                int marker = segment.getInt();
                if (marker == (0x100 | MPEGConst.SEQUENCE_HEADER_CODE))
                {
                    return(SequenceHeader.read(segment));
                }
                segment = MPEGUtil.nextSegment(data);
            }
            return(null);
        }