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);
148 infer(colour_primaries, 2);
150 infer(matrix_coefficients, 2);
153 ui(14, display_horizontal_size);
155 ui(14, display_vertical_size);
165 HEADER(
"Group of Pictures Header");
167 ui(8, group_start_code);
178 const char *element_name,
const char *marker_name)
186 for (k = 0;
nextbits(1, 1, bit); k++)
188 current->extra_information_length = k;
191 current->extra_information_ref =
193 if (!current->extra_information_ref)
195 current->extra_information = current->extra_information_ref->data;
199 for (k = 0; k < current->extra_information_length; k++) {
201 xuia(8, element_name,
202 current->extra_information[k], 0, 255, 1, k);
217 ui(8, picture_start_code);
219 ui(10, temporal_reference);
220 uir(3, picture_coding_type);
223 if (current->picture_coding_type == 2 ||
224 current->picture_coding_type == 3) {
225 ui(1, full_pel_forward_vector);
226 ui(3, forward_f_code);
229 if (current->picture_coding_type == 3) {
230 ui(1, full_pel_backward_vector);
231 ui(3, backward_f_code);
235 "extra_information_picture[k]",
"extra_bit_picture"));
246 HEADER(
"Picture Coding Extension");
248 uir(4, f_code[0][0]);
249 uir(4, f_code[0][1]);
250 uir(4, f_code[1][0]);
251 uir(4, f_code[1][1]);
253 ui(2, intra_dc_precision);
254 ui(2, picture_structure);
255 ui(1, top_field_first);
256 ui(1, frame_pred_frame_dct);
257 ui(1, concealment_motion_vectors);
259 ui(1, intra_vlc_format);
260 ui(1, alternate_scan);
261 ui(1, repeat_first_field);
262 ui(1, chroma_420_type);
263 ui(1, progressive_frame);
266 if (current->repeat_first_field) {
267 if (current->top_field_first)
275 if (current->picture_structure == 1 ||
276 current->picture_structure == 2) {
279 if (current->repeat_first_field)
286 ui(1, composite_display_flag);
287 if (current->composite_display_flag) {
289 ui(3, field_sequence);
291 ui(7, burst_amplitude);
292 ui(8, sub_carrier_phase);
303 HEADER(
"Quant Matrix Extension");
305 ui(1, load_intra_quantiser_matrix);
306 if (current->load_intra_quantiser_matrix) {
307 for (i = 0; i < 64; i++)
308 uirs(8, intra_quantiser_matrix[i], 1, i);
311 ui(1, load_non_intra_quantiser_matrix);
312 if (current->load_non_intra_quantiser_matrix) {
313 for (i = 0; i < 64; i++)
314 uirs(8, non_intra_quantiser_matrix[i], 1, i);
317 ui(1, load_chroma_intra_quantiser_matrix);
318 if (current->load_chroma_intra_quantiser_matrix) {
319 for (i = 0; i < 64; i++)
320 uirs(8, intra_quantiser_matrix[i], 1, i);
323 ui(1, load_chroma_non_intra_quantiser_matrix);
324 if (current->load_chroma_non_intra_quantiser_matrix) {
325 for (i = 0; i < 64; i++)
326 uirs(8, chroma_non_intra_quantiser_matrix[i], 1, i);
338 HEADER(
"Picture Display Extension");
341 sis(16, frame_centre_horizontal_offset[i], 1, i);
343 sis(16, frame_centre_vertical_offset[i], 1, i);
357 ui(8, extension_start_code);
358 ui(4, extension_start_code_identifier);
360 switch (current->extension_start_code_identifier) {
363 (
ctx, rw, ¤t->data.sequence);
366 (
ctx, rw, ¤t->data.sequence_display);
369 (
ctx, rw, ¤t->data.quant_matrix);
372 (
ctx, rw, ¤t->data.picture_display);
375 (
ctx, rw, ¤t->data.picture_coding);
378 current->extension_start_code_identifier);
391 ui(8, slice_vertical_position);
394 ui(3, slice_vertical_position_extension);
397 ui(7, priority_breakpoint);
400 uir(5, quantiser_scale_code);
402 if (
nextbits(1, 1, current->slice_extension_flag)) {
403 ui(1, slice_extension_flag);
405 ui(1, slice_picture_id_enable);
406 ui(6, slice_picture_id);
410 "extra_information_slice[k]",
"extra_bit_slice"));
422 ui(8, sequence_end_code);
#define nextbits(width, compare, var)
static int FUNC() picture_coding_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawPictureCodingExtension *current)
uint8_t number_of_frame_centre_offsets
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)
CHECK(-1) CHECK(-2)}}}}CHECK(1) CHECK(2)}}}}}if(diff0+diff1 > 0) temp-
#define uirs(width, name, subs,...)
static int get_bits_left(GetBitContext *gb)
#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() sequence_end(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceEnd *current)
static int FUNC() slice_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSliceHeader *current)
static int FUNC() sequence_extension(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceExtension *current)
static int FUNC() extra_information(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawExtraInformation *current, const char *element_name, const char *marker_name)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define uis(width, name, subs,...)
static int FUNC() sequence_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceHeader *current)
AVBufferRef * av_buffer_allocz(buffer_size_t 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.
#define bit(string, value)
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...
#define xuia(width, string, var, range_min, range_max, subs,...)
void * priv_data
Format private data.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
#define infer(name, value)