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); } }
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); }
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); }
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); } } } }
public void copyExtensions(SequenceHeader sh) { sequenceExtension = sh.sequenceExtension; sequenceScalableExtension = sh.sequenceScalableExtension; sequenceDisplayExtension = sh.sequenceDisplayExtension; }