コード例 #1
0
ファイル: SequenceHeader.cs プロジェクト: billliwawa/net7mma
        public static void readExtension(MemoryStream bb, SequenceHeader sh)
        {
            m_hasExtensions = true;

            BitReader inb     = new BitReader(bb);
            int       extType = inb.readNBit(4);

            switch (extType)
            {
            case Sequence_Extension:
                sh.sequenceExtension = SequenceExtension.read(inb);
                break;

            case Sequence_Scalable_Extension:
                sh.sequenceScalableExtension = SequenceScalableExtension.read(inb);
                break;

            case Sequence_Display_Extension:
                sh.sequenceDisplayExtension = SequenceDisplayExtension.read(inb);
                break;

            default:
                throw new Exception("Unsupported extension: " + extType);
            }
        }
コード例 #2
0
        public static PictureDisplayExtension read(BitReader bits, SequenceExtension se, PictureCodingExtension pce)
        {
            PictureDisplayExtension pde = new PictureDisplayExtension();

            pde.frame_centre_offsets = new Point[numberOfFrameCentreOffsets(se, pce)];
            for (int i = 0; i < pde.frame_centre_offsets.Length; i++)
            {
                int frame_centre_horizontal_offset = bits.readNBit(16);
                bits.read1Bit();
                int frame_centre_vertical_offset = bits.readNBit(16);
                bits.read1Bit();
                pde.frame_centre_offsets[i] = new Point(frame_centre_horizontal_offset, frame_centre_vertical_offset);
            }
            return(pde);
        }
コード例 #3
0
        public static SequenceExtension read(BitReader inb)
        {
            SequenceExtension se = new SequenceExtension();

            se.profile_and_level         = inb.readNBit(8);
            se.progressive_sequence      = inb.read1Bit();
            se.chroma_format             = inb.readNBit(2);
            se.horizontal_size_extension = inb.readNBit(2);
            se.vertical_size_extension   = inb.readNBit(2);
            se.bit_rate_extension        = inb.readNBit(12);
            se.vbv_buffer_size_extension = inb.readNBit(8);
            se.low_delay = inb.read1Bit();
            se.frame_rate_extension_n = inb.readNBit(2);
            se.frame_rate_extension_d = inb.readNBit(5);

            return(se);
        }
コード例 #4
0
 private static int numberOfFrameCentreOffsets(SequenceExtension se, PictureCodingExtension pce)
 {
     if (se == null || pce == null)
     {
         throw new ArgumentException("PictureDisplayExtension requires SequenceExtension"
                                     + " and PictureCodingExtension to be present");
     }
     if (se.progressive_sequence == 1)
     {
         if (pce.repeat_first_field == 1)
         {
             if (pce.top_field_first == 1)
             {
                 return(3);
             }
             else
             {
                 return(2);
             }
         }
         else
         {
             return(1);
         }
     }
     else
     {
         if (pce.picture_structure != PictureCodingExtension.Frame)
         {
             return(1);
         }
         else
         {
             if (pce.repeat_first_field == 1)
             {
                 return(3);
             }
             else
             {
                 return(2);
             }
         }
     }
 }
コード例 #5
0
ファイル: SequenceHeader.cs プロジェクト: billliwawa/net7mma
 public void copyExtensions(SequenceHeader sh)
 {
     sequenceExtension         = sh.sequenceExtension;
     sequenceScalableExtension = sh.sequenceScalableExtension;
     sequenceDisplayExtension  = sh.sequenceDisplayExtension;
 }