static int FUNC(sequence_extension)(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceExtension *current) { CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data; int err; HEADER("Sequence Extension"); ui(8, profile_and_level_indication); ui(1, progressive_sequence); ui(2, chroma_format); ui(2, horizontal_size_extension); ui(2, vertical_size_extension); mpeg2->horizontal_size = (mpeg2->horizontal_size & 0xfff) | current->horizontal_size_extension << 12; mpeg2->vertical_size = (mpeg2->vertical_size & 0xfff) | current->vertical_size_extension << 12; mpeg2->progressive_sequence = current->progressive_sequence; ui(12, bit_rate_extension); marker_bit(); ui(8, vbv_buffer_size_extension); ui(1, low_delay); ui(2, frame_rate_extension_n); ui(5, frame_rate_extension_d); return 0; }
static int FUNC(picture_display_extension)(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawPictureDisplayExtension *current) { CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data; int err, i; HEADER("Picture Display Extension"); for (i = 0; i < mpeg2->number_of_frame_centre_offsets; i++) { ui(16, frame_centre_horizontal_offset[i]); marker_bit(); ui(16, frame_centre_vertical_offset[i]); marker_bit(); } return 0; }
static int FUNC(sequence_display_extension)(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceDisplayExtension *current) { int err; HEADER("Sequence Display Extension"); ui(3, video_format); ui(1, colour_description); if (current->colour_description) { ui(8, colour_primaries); ui(8, transfer_characteristics); ui(8, matrix_coefficients); } ui(14, display_horizontal_size); marker_bit(); ui(14, display_vertical_size); return 0; }
static int FUNC(sequence_header)(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceHeader *current) { CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data; int err, i; HEADER("Sequence Header"); ui(8, sequence_header_code); ui(12, horizontal_size_value); ui(12, vertical_size_value); mpeg2->horizontal_size = current->horizontal_size_value; mpeg2->vertical_size = current->vertical_size_value; ui(4, aspect_ratio_information); ui(4, frame_rate_code); ui(18, bit_rate_value); marker_bit(); ui(10, vbv_buffer_size_value); ui(1, constrained_parameters_flag); ui(1, load_intra_quantiser_matrix); if (current->load_intra_quantiser_matrix) { for (i = 0; i < 64; i++) uis(8, intra_quantiser_matrix[i], 1, i); } ui(1, load_non_intra_quantiser_matrix); if (current->load_non_intra_quantiser_matrix) { for (i = 0; i < 64; i++) uis(8, non_intra_quantiser_matrix[i], 1, i); } return 0; }
static void sequence_header() { int i; int pos; pos = ld->Bitcnt; horizontal_size = Get_Bits(12); vertical_size = Get_Bits(12); aspect_ratio_information = Get_Bits(4); frame_rate_code = Get_Bits(4); bit_rate_value = Get_Bits(18); marker_bit("sequence_header()"); vbv_buffer_size = Get_Bits(10); constrained_parameters_flag = Get_Bits(1); if((ld->load_intra_quantizer_matrix = Get_Bits(1))) { for (i=0; i<64; i++) ld->intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8); } else { for (i=0; i<64; i++) ld->intra_quantizer_matrix[i] = default_intra_quantizer_matrix[i]; } if((ld->load_non_intra_quantizer_matrix = Get_Bits(1))) { for (i=0; i<64; i++) ld->non_intra_quantizer_matrix[scan[ZIG_ZAG][i]] = Get_Bits(8); } else { for (i=0; i<64; i++) ld->non_intra_quantizer_matrix[i] = 16; } /* copy luminance to chrominance matrices */ for (i=0; i<64; i++) { ld->chroma_intra_quantizer_matrix[i] = ld->intra_quantizer_matrix[i]; ld->chroma_non_intra_quantizer_matrix[i] = ld->non_intra_quantizer_matrix[i]; } #ifdef VERBOSE if (Verbose_Flag > NO_LAYER) { printf("sequence header (byte %d)\n",(pos>>3)-4); if (Verbose_Flag > SEQUENCE_LAYER) { printf(" horizontal_size=%d\n",horizontal_size); printf(" vertical_size=%d\n",vertical_size); printf(" aspect_ratio_information=%d\n",aspect_ratio_information); printf(" frame_rate_code=%d",frame_rate_code); printf(" bit_rate_value=%d\n",bit_rate_value); printf(" vbv_buffer_size=%d\n",vbv_buffer_size); printf(" constrained_parameters_flag=%d\n",constrained_parameters_flag); printf(" load_intra_quantizer_matrix=%d\n",ld->load_intra_quantizer_matrix); printf(" load_non_intra_quantizer_matrix=%d\n",ld->load_non_intra_quantizer_matrix); } }