27 ui(8, sequence_header_code);
29 uir(12, horizontal_size_value);
30 uir(12, vertical_size_value);
35 uir(4, aspect_ratio_information);
36 uir(4, frame_rate_code);
37 ui(18, bit_rate_value);
41 ui(10, vbv_buffer_size_value);
42 ui(1, constrained_parameters_flag);
44 ui(1, load_intra_quantiser_matrix);
45 if (current->load_intra_quantiser_matrix) {
46 for (i = 0; i < 64; i++)
47 uirs(8, intra_quantiser_matrix[i], 1, i);
50 ui(1, load_non_intra_quantiser_matrix);
51 if (current->load_non_intra_quantiser_matrix) {
52 for (i = 0; i < 64; i++)
53 uirs(8, non_intra_quantiser_matrix[i], 1, i);
67 ui(8, user_data_start_code);
72 current->user_data_length = k /= 8;
75 if (!current->user_data_ref)
77 current->user_data = current->user_data_ref->data;
81 for (k = 0; k < current->user_data_length; k++)
93 HEADER(
"Sequence Extension");
95 ui(8, profile_and_level_indication);
96 ui(1, progressive_sequence);
98 ui(2, horizontal_size_extension);
99 ui(2, vertical_size_extension);
102 current->horizontal_size_extension << 12;
104 current->vertical_size_extension << 12;
107 ui(12, bit_rate_extension);
109 ui(8, vbv_buffer_size_extension);
111 ui(2, frame_rate_extension_n);
112 ui(5, frame_rate_extension_d);
122 HEADER(
"Sequence Display Extension");
126 ui(1, colour_description);
127 if (current->colour_description) {
129 #define READ_AND_PATCH(name) do { \ 131 if (current->name == 0) { \ 133 av_log(ctx->log_ctx, AV_LOG_WARNING, "%s in a sequence display " \ 134 "extension had the invalid value 0. Setting it to 2 " \ 135 "(meaning unknown) instead.\n", #name); \ 138 READ_AND_PATCH(colour_primaries);
140 READ_AND_PATCH(matrix_coefficients);
141 #undef READ_AND_PATCH 143 uir(8, colour_primaries);
145 uir(8, matrix_coefficients);
149 ui(14, display_horizontal_size);
151 ui(14, display_vertical_size);
161 HEADER(
"Group of Pictures Header");
163 ui(8, group_start_code);
179 ui(8, picture_start_code);
181 ui(10, temporal_reference);
182 uir(3, picture_coding_type);
185 if (current->picture_coding_type == 2 ||
186 current->picture_coding_type == 3) {
187 ui(1, full_pel_forward_vector);
188 ui(3, forward_f_code);
191 if (current->picture_coding_type == 3) {
192 ui(1, full_pel_backward_vector);
193 ui(3, backward_f_code);
196 ui(1, extra_bit_picture);
207 HEADER(
"Picture Coding Extension");
209 uir(4, f_code[0][0]);
210 uir(4, f_code[0][1]);
211 uir(4, f_code[1][0]);
212 uir(4, f_code[1][1]);
214 ui(2, intra_dc_precision);
215 ui(2, picture_structure);
216 ui(1, top_field_first);
217 ui(1, frame_pred_frame_dct);
218 ui(1, concealment_motion_vectors);
220 ui(1, intra_vlc_format);
221 ui(1, alternate_scan);
222 ui(1, repeat_first_field);
223 ui(1, chroma_420_type);
224 ui(1, progressive_frame);
227 if (current->repeat_first_field) {
228 if (current->top_field_first)
236 if (current->picture_structure == 1 ||
237 current->picture_structure == 2) {
240 if (current->repeat_first_field)
247 ui(1, composite_display_flag);
248 if (current->composite_display_flag) {
250 ui(3, field_sequence);
252 ui(7, burst_amplitude);
253 ui(8, sub_carrier_phase);
264 HEADER(
"Quant Matrix Extension");
266 ui(1, load_intra_quantiser_matrix);
267 if (current->load_intra_quantiser_matrix) {
268 for (i = 0; i < 64; i++)
269 uirs(8, intra_quantiser_matrix[i], 1, i);
272 ui(1, load_non_intra_quantiser_matrix);
273 if (current->load_non_intra_quantiser_matrix) {
274 for (i = 0; i < 64; i++)
275 uirs(8, non_intra_quantiser_matrix[i], 1, i);
278 ui(1, load_chroma_intra_quantiser_matrix);
279 if (current->load_chroma_intra_quantiser_matrix) {
280 for (i = 0; i < 64; i++)
281 uirs(8, intra_quantiser_matrix[i], 1, i);
284 ui(1, load_chroma_non_intra_quantiser_matrix);
285 if (current->load_chroma_non_intra_quantiser_matrix) {
286 for (i = 0; i < 64; i++)
287 uirs(8, chroma_non_intra_quantiser_matrix[i], 1, i);
299 HEADER(
"Picture Display Extension");
302 sis(16, frame_centre_horizontal_offset[i], 1, i);
304 sis(16, frame_centre_vertical_offset[i], 1, i);
318 ui(8, extension_start_code);
319 ui(4, extension_start_code_identifier);
321 switch (current->extension_start_code_identifier) {
324 (
ctx, rw, ¤t->data.sequence);
327 (
ctx, rw, ¤t->data.sequence_display);
330 (
ctx, rw, ¤t->data.quant_matrix);
333 (
ctx, rw, ¤t->data.picture_display);
336 (
ctx, rw, ¤t->data.picture_coding);
339 current->extension_start_code_identifier);
352 ui(8, slice_vertical_position);
355 ui(3, slice_vertical_position_extension);
358 ui(7, priority_breakpoint);
361 uir(5, quantiser_scale_code);
363 if (
nextbits(1, 1, current->slice_extension_flag)) {
364 ui(1, slice_extension_flag);
366 ui(1, slice_picture_id_enable);
367 ui(6, slice_picture_id);
375 for (k = 0;
nextbits(1, 1, bit); k++)
377 current->extra_information_length = k;
380 current->extra_information_ref =
382 if (!current->extra_information_ref)
384 current->extra_information = current->extra_information_ref->data;
385 for (k = 0; k < current->extra_information_length; k++) {
386 xui(1, extra_bit_slice, bit, 1, 1, 0);
387 xui(8, extra_information_slice[k],
388 current->extra_information[k], 0, 255, 1, k);
392 for (k = 0; k < current->extra_information_length; k++) {
393 xui(1, extra_bit_slice, 1, 1, 1, 0);
394 xui(8, extra_information_slice[k],
395 current->extra_information[k], 0, 255, 1, k);
400 ui(1, extra_bit_slice);
#define nextbits(width, compare, var)
static int FUNC() picture_coding_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawPictureCodingExtension *current)
uint8_t number_of_frame_centre_offsets
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int FUNC() extension_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawExtensionData *current)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static int FUNC() picture_display_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawPictureDisplayExtension *current)
#define xui(width, name, var, range_min, range_max, subs,...)
#define uirs(width, name, subs,...)
static int get_bits_left(GetBitContext *gb)
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define sis(width, name, subs,...)
static int FUNC() sequence_display_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceDisplayExtension *current)
static int FUNC() quant_matrix_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawQuantMatrixExtension *current)
uint8_t progressive_sequence
static int FUNC() picture_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawPictureHeader *current)
static const struct TransferCharacteristics transfer_characteristics[AVCOL_TRC_NB]
static int FUNC() user_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawUserData *current)
static int FUNC() slice_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSliceHeader *current)
static int FUNC() sequence_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceExtension *current)
#define uis(width, name, subs,...)
static int FUNC() sequence_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceHeader *current)
AVBufferRef * av_buffer_alloc(int size)
Allocate an AVBuffer of the given size using av_malloc().
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
static void skip_bits(GetBitContext *s, int n)
Context structure for coded bitstream operations.
static int FUNC() group_of_pictures_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawGroupOfPicturesHeader *current)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
void * priv_data
Format private data.