FFmpeg
Loading...
Searching...
No Matches
cbs_lcevc_syntax_template.c
Go to the documentation of this file.
1/*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
20{
21 int err;
22
23 // ISO/IEC 23094-2:2021/FDAM 1:2023(E) 7.3.12
24 while (byte_alignment(rw) != 0)
25 fixed(1, alignment_bit_equal_to_zero, 0);
26
27 return 0;
28}
29
31{
32 int err;
33
34 fixed(1, rbsp_stop_one_bit, 1);
35 while (byte_alignment(rw) != 0)
36 fixed(1, rbsp_alignment_zero_bit, 0);
37
38 return 0;
39}
40
43 uint32_t valid_type_mask)
44{
45 int err;
46
47 fixed(1, forbidden_zero_bit, 0);
48 fixed(1, forbidden_one_bit, 1);
49 ub(5, nal_unit_type);
50
51 if (!(1 << current->nal_unit_type & valid_type_mask)) {
52 av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid NAL unit type %d.\n",
53 current->nal_unit_type);
55 }
56
57 ub(9, reserved_flag);
58
59 return 0;
60}
61
65 int nal_unit_type))
66{
67 CodedBitstreamLCEVCContext *priv = ctx->priv_data;
68 int err;
69
70 HEADER("Global Config");
71
72 flag(processed_planes_type_flag);
73 ub(6, resolution_type);
74 ub(1, transform_type);
75 ub(2, chroma_sampling_type);
76 ub(2, base_depth_type);
77 ub(2, enhancement_depth_type);
78 flag(temporal_step_width_modifier_signalled_flag);
79 flag(predicted_residual_mode_flag);
80 flag(temporal_tile_intra_signalling_enabled_flag);
81 flag(temporal_enabled_flag);
82 ub(3, upsample_type);
83 flag(level1_filtering_signalled_flag);
84 ub(2, scaling_mode_level1);
85 ub(2, scaling_mode_level2);
86 ub(2, tile_dimensions_type);
87 ub(2, user_data_enabled);
88 flag(level1_depth_flag);
89 flag(chroma_step_width_flag);
90
91 if (current->processed_planes_type_flag) {
92 ub(4, planes_type);
93 ub(4, reserved_zeros_4bit);
94 } else
95 infer(planes_type, 0);
96
97 if (current->temporal_step_width_modifier_signalled_flag) {
98 ub(8, temporal_step_width_modifier);
99 }
100
101 if (current->upsample_type == 4) {
102 ub(16, upsampler_coeff1);
103 ub(16, upsampler_coeff2);
104 ub(16, upsampler_coeff3);
105 ub(16, upsampler_coeff4);
106 }
107
108 if (current->level1_filtering_signalled_flag) {
109 ub(4, level1_filtering_first_coefficient);
110 ub(4, level1_filtering_second_coefficient);
111 }
112
113 if (current->tile_dimensions_type > 0) {
114 if (current->tile_dimensions_type == 3) {
115 ub(16, custom_tile_width);
116 ub(16, custom_tile_height);
117 }
118 ub(5, reserved_zeros_5bit);
119 flag(compression_type_entropy_enabled_per_tile_flag);
120 ub(2, compression_type_size_per_tile);
121 }
122
123 if (current->resolution_type == 63) {
124 ub(16, custom_resolution_width);
125 ub(16, custom_resolution_height);
126 }
127 if (current->chroma_step_width_flag) {
128 ub(8, chroma_step_width_multiplier);
129 } else {
130 infer(chroma_step_width_multiplier, 64);
131 }
132
134
135 return 0;
136}
137
141 int nal_unit_type))
142{
143 CodedBitstreamLCEVCContext *priv = ctx->priv_data;
144 int err;
145
146 HEADER("Sequence Config");
147
148 ub(4, profile_idc);
149 ub(4, level_idc);
150 ub(2, sublevel_idc);
151 flag(conformance_window_flag);
152 ub(5, reserved_zeros_5bit);
153
154 if (current->profile_idc == 15 || current->level_idc == 15) {
155 ub(3, profile_idc);
156 ub(4, level_idc);
157 ub(1, reserved_zeros_1bit);
158 }
159 if (current->conformance_window_flag == 1) {
160 mb(conf_win_left_offset);
161 mb(conf_win_right_offset);
162 mb(conf_win_top_offset);
163 mb(conf_win_bottom_offset);
164 }
165
167
168 return 0;
169}
170
174 int nal_unit_type))
175{
176 CodedBitstreamLCEVCContext *priv = ctx->priv_data;
177 int nlayers, err;
178
179 HEADER("Picture Config");
180
181 if (!priv->gc)
182 return AVERROR_INVALIDDATA;
183
184 flag(no_enhancement_bit_flag);
185 if (current->no_enhancement_bit_flag == 0) {
186 ub(3, quant_matrix_mode);
187 flag(dequant_offset_signalled_flag);
188 flag(picture_type_bit_flag);
189 flag(temporal_refresh_bit_flag);
190 flag(step_width_sublayer1_enabled_flag);
191 ub(15, step_width_sublayer2);
192 flag(dithering_control_flag);
193 priv->dithering_control_flag = current->dithering_control_flag;
194 infer(temporal_signalling_present_flag, priv->gc->temporal_enabled_flag &&
195 !current->temporal_refresh_bit_flag);
196 } else {
197 infer(quant_matrix_mode, 0);
198 infer(dequant_offset_signalled_flag, 0);
199 ub(4, reserved_zeros_4bit);
200 flag(picture_type_bit_flag);
201 flag(temporal_refresh_bit_flag);
202 infer(step_width_sublayer1_enabled_flag, 0);
203 infer(dithering_control_flag, nal_unit_type == LCEVC_IDR_NUT
204 ? 0
205 : priv->dithering_control_flag);
206 priv->dithering_control_flag = current->dithering_control_flag;
207 flag(temporal_signalling_present_flag);
208 }
209
210 if (current->picture_type_bit_flag == 1) {
211 flag(field_type_bit_flag);
212 ub(7, reserved_zeros_7bit);
213 }
214
215 if (current->step_width_sublayer1_enabled_flag == 1) {
216 ub(15, step_width_sublayer1);
217 flag(level1_filtering_enabled_flag);
218 } else
219 infer(level1_filtering_enabled_flag, 0);
220
221 nlayers = priv->gc->transform_type ? 16 : 4;
222 if (current->quant_matrix_mode == 2 ||
223 current->quant_matrix_mode == 3 ||
224 current->quant_matrix_mode == 5) {
225 for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
226 ubs(8, qm_coefficient_0[layer_idx], 1, layer_idx);
227 }
228
229 if (current->quant_matrix_mode == 4 || current->quant_matrix_mode == 5) {
230 for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
231 ubs(8, qm_coefficient_1[layer_idx], 1, layer_idx);
232 }
233
234 if (current->dequant_offset_signalled_flag) {
235 flag(dequant_offset_mode_flag);
236 ub(7, dequant_offset);
237 }
238
239 if (current->dithering_control_flag == 1) {
240 ub(2, dithering_type);
241 ub(1, reserverd_zero);
242 if (current->dithering_type != 0) {
243 ub(5, dithering_strength);
244 } else {
245 ub(5, reserved_zeros_5bit);
246 }
247 }
248
250 av_refstruct_replace(&current->gc, priv->gc);
251
252 return 0;
253}
254
258 int nal_unit_type))
259{
260 CodedBitstreamLCEVCContext *priv = ctx->priv_data;
261 int nplanes, nlayers, err;
262#ifdef READ
263 int start = get_bits_count(rw);
264#endif
265
266 HEADER("Encoded Data");
267
268 if (!priv->gc || !priv->pc)
269 return AVERROR_INVALIDDATA;
270
271 nplanes = priv->gc->planes_type ? 3 : 1;
272 nlayers = priv->gc->transform_type ? 16 : 4;
273 for (int plane_idx = 0; plane_idx < nplanes; plane_idx++) {
274 if (priv->pc->no_enhancement_bit_flag == 0) {
275 for (int level_idx = 1; level_idx <= 2; level_idx++) {
276 for (int layer_idx = 0; layer_idx < nlayers; layer_idx++) {
277 ubs(1, surfaces_entropy_enabled_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
278 ubs(1, surfaces_rle_only_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
279 }
280 }
281 }
282 if (priv->pc->temporal_signalling_present_flag == 1) {
283 ubs(1, temporal_surfaces_entropy_enabled_flag[plane_idx], 1, plane_idx);
284 ubs(1, temporal_surfaces_rle_only_flag[plane_idx], 1, plane_idx);
285 }
286 }
287
289
290#ifdef READ
292 return AVERROR_INVALIDDATA;
293
294 int pos = get_bits_count(rw) - start;
295 int len = state->payload_size;
296
297 current->header_size = pos / 8;
298 current->data_size = len - pos / 8;
299 skip_bits_long(rw, current->data_size * 8);
300#else
302 current->data_size, 0);
303 if (err < 0)
304 return err;
305#endif
306
307 av_refstruct_replace(&current->sc, priv->sc);
308 av_refstruct_replace(&current->gc, priv->gc);
309 av_refstruct_replace(&current->pc, priv->pc);
310
311 return 0;
312}
313
315 LCEVCRawSEI *current, int payload_size)
316{
317 SEIRawMessage *message = &current->message;
318 int sei_type;
319 int i, err;
320
321 ub(8, payload_type);
322
323 if (current->payload_type == 1)
325 else if (current->payload_type == 2)
327 else if (current->payload_type == 4)
329 else if (current->payload_type == 5)
331 else {
332 uint8_t *data;
333
334#ifdef READ
335 current->payload_size = payload_size;
336 allocate(current->payload_ref, current->payload_size);
337 current->payload = current->payload_ref;
338#else
339 allocate(current->payload, current->payload_size);
340#endif
341 data = current->payload;
342
343 for (i = 0; i < current->payload_size; i++)
344 xu(8, reserved_sei_message_payload_byte[i], data[i], 0, 255, 1, i);
345
346 return 0;
347 }
348
349 message->payload_type = sei_type;
350 message->payload_size = payload_size;
351
353
354 return 0;
355}
356
359{
360 int err;
361
362 HEADER("VUI Parameters");
363
364 flag(aspect_ratio_info_present_flag);
365 if (current->aspect_ratio_info_present_flag) {
366 ub(8, aspect_ratio_idc);
367
368 if (current->aspect_ratio_idc == 255) {
369 ub(16, sar_width);
370 ub(16, sar_height);
371 }
372 } else {
373 infer(aspect_ratio_idc, 0);
374 }
375
376 flag(overscan_info_present_flag);
377 if (current->overscan_info_present_flag)
378 flag(overscan_appropriate_flag);
379 else
380 infer(overscan_appropriate_flag, 0);
381
382 flag(video_signal_type_present_flag);
383 if (current->video_signal_type_present_flag) {
384 u(3, video_format, 0, 5);
385 flag(video_full_range_flag);
386 flag(colour_description_present_flag);
387 if (current->colour_description_present_flag) {
388 ub(8, colour_primaries);
390 ub(8, matrix_coefficients);
391 } else {
392 infer(colour_primaries, 2);
394 infer(matrix_coefficients, 2);
395 }
396 } else {
397 infer(video_format, 5);
398 infer(video_full_range_flag, 0);
399 infer(colour_description_present_flag, 0);
400 infer(colour_primaries, 2);
402 infer(matrix_coefficients, 2);
403 }
404 flag(chroma_loc_info_present_flag);
405 if (current->chroma_loc_info_present_flag) {
406 ue(chroma_sample_loc_type_top_field, 0, 5);
407 ue(chroma_sample_loc_type_bottom_field, 0, 5);
408 } else {
409 infer(chroma_sample_loc_type_top_field, 0);
410 infer(chroma_sample_loc_type_bottom_field, 0);
411 }
412
413 return 0;
414}
415
419 int nal_unit_type))
420{
421 int i, err;
422
423 HEADER("Additional Info");
424
425 ub(8, additional_info_type);
426
427 if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_SEI) {
428 CHECK(FUNC(sei_payload)(ctx, rw, &current->sei, state->payload_size - 2));
429 } else if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_VUI)
430 CHECK(FUNC(vui_parameters)(ctx, rw, &current->vui));
431 else {
432 uint8_t *data;
433
434#ifdef READ
435 current->payload_size = state->payload_size - 1;
436 allocate(current->payload_ref, current->payload_size);
437 current->payload = current->payload_ref;
438#else
439 allocate(current->payload, current->payload_size);
440#endif
441 data = current->payload;
442
443 for (i = 0; i < current->payload_size; i++)
444 xu(8, additional_info_byte[i], data[i], 0, 255, 1, i);
445 }
446
447 return 0;
448}
449
453 int nal_unit_type))
454{
455 int err;
456
457 HEADER("Filler");
458
459
460#ifdef READ
461 while (show_bits(rw, 8) == 0xaa) {
462 fixed(8, filler_byte, 0xaa);
463 ++current->filler_size;
464 }
465 if (state->payload_size != current->filler_size)
466 return AVERROR_INVALIDDATA;
467
468#else
469 for (int i = 0; i < current->filler_size; i++)
470 fixed(8, filler_byte, 0xaa);
471#endif
472
473 return 0;
474}
475
478 int nal_unit_type)
479{
481 int err, i;
482
484 if (desc) {
486 .payload_type = current->payload_type,
487 .payload_size = current->payload_size,
488 .extension_present = current->extension_bit_length > 0,
489 };
490 int start_position, current_position, bits_written;
491
492#ifdef READ
494#endif
495
496 start_position = bit_position(rw);
497
498 CHECK(desc->READWRITE(ctx, rw, current->payload, &state, nal_unit_type));
499
500 current_position = bit_position(rw);
501 bits_written = current_position - start_position;
502
503 if (byte_alignment(rw) || state.extension_present ||
504 bits_written < 8 * current->payload_size) {
505 size_t bits_left;
506
507#ifdef READ
508 GetBitContext tmp = *rw;
509 int trailing_bits, trailing_zero_bits;
510
511 bits_left = 8 * current->payload_size - bits_written;
512 if (bits_left > 8)
515 if (trailing_bits == 0) {
516 // The trailing bits must contain a payload_bit_equal_to_one, so
517 // they can't all be zero.
518 // Don't error out as encodings following a faulty specification
519 // syntax trigger this.
520 av_log(ctx->log_ctx, AV_LOG_DEBUG, "Missing alignment bits in Process Block\n");
521 return 0;
522 }
523 trailing_zero_bits = ff_ctz(trailing_bits);
524 current->extension_bit_length =
525 bits_left - 1 - trailing_zero_bits;
526#endif
527
528 if (current->extension_bit_length > 0) {
529 allocate(current->extension_data,
530 (current->extension_bit_length + 7) / 8);
531
532 bits_left = current->extension_bit_length;
533 for (i = 0; bits_left > 0; i++) {
534 int length = FFMIN(bits_left, 8);
535 xu(length, reserved_payload_extension_data,
536 current->extension_data[i],
537 0, MAX_UINT_BITS(length), 0);
538 bits_left -= length;
539 }
540 }
541
542 fixed(1, payload_bit_equal_to_one, 1);
543 while (byte_alignment(rw))
544 fixed(1, payload_bit_equal_to_zero, 0);
545 }
546
547#ifdef WRITE
548 current->payload_size = (put_bits_count(rw) - start_position) / 8;
549#endif
550 } else {
551 uint8_t *data;
552
553#ifdef READ
554 allocate(current->payload_ref, current->payload_size);
555 current->payload = current->payload_ref;
556#else
557 allocate(current->payload, current->payload_size);
558#endif
559 data = current->payload;
560
561 for (i = 0; i < current->payload_size; i++)
562 xu(8, payload_byte[i], data[i], 0, 255, 1, i);
563 }
564
565 return 0;
566}
567
570 int nal_unit_type)
571{
573 int err, k;
574
575#ifdef READ
576 for (k = 0;; k++) {
577 int payload_size_type;
578 int payload_type;
579 uint32_t payload_size;
580 uint32_t tmp;
581 GetBitContext payload_gbc;
582
583 HEADER("Process Block");
584
585 xu(3, payload_size_type, tmp, 0, MAX_UINT_BITS(3), 0);
586 payload_size_type = tmp;
587 xu(5, payload_type, tmp, 0, MAX_UINT_BITS(5), 0);
588 payload_type = tmp;
589
590 if (payload_size_type == 6) {
591 av_log(ctx->log_ctx, AV_LOG_ERROR, "payload_size_type == 6\n");
592 return AVERROR_INVALIDDATA;
593 }
594
595 payload_size = payload_size_type;
596 if (payload_size_type == 7)
597 xmb(custom_byte_size, payload_size);
598
599 // There must be space remaining for the payload
600 if (payload_size > get_bits_left(rw) / 8) {
601 av_log(ctx->log_ctx, AV_LOG_ERROR,
602 "Invalid process block: payload_size too large "
603 "(%"PRIu32" bytes).\n", payload_size);
604 return AVERROR_INVALIDDATA;
605 }
606 CHECK(init_get_bits(&payload_gbc, rw->buffer,
607 get_bits_count(rw) + 8 * payload_size));
608 skip_bits_long(&payload_gbc, get_bits_count(rw));
609
611 block = &current->blocks[k];
612
613 block->payload_type = payload_type;
614 block->payload_size = payload_size;
615
616 CHECK(FUNC(process_block)(ctx, &payload_gbc, block, nal_unit_type));
617
618 skip_bits_long(rw, 8 * payload_size);
619
621 break;
622 }
623#else
624 for (k = 0; k < current->nb_blocks; k++) {
625 PutBitContext start_state;
626 uint32_t tmp;
627 int trace, i;
628
629 block = &current->blocks[k];
630
631 // We write the payload twice in order to find the size. Trace
632 // output is switched off for the first write.
633 trace = ctx->trace_enable;
634 ctx->trace_enable = 0;
635
636 start_state = *rw;
637 for (i = 0; i < 2; i++) {
638 *rw = start_state;
639
640 tmp = FFMIN(block->payload_size, 7);
641 if (tmp == 6)
642 tmp = 7;
643 xu(3, payload_size_type, tmp, 0, 7, 0);
644 xu(5, payload_type, block->payload_type, 0, MAX_UINT_BITS(5), 0);
645
646 if (tmp == 7)
647 xmb(custom_byte_size, block->payload_size);
648
649 err = FUNC(process_block)(ctx, rw, block, nal_unit_type);
650 ctx->trace_enable = trace;
651 if (err < 0)
652 return err;
653 }
654 }
655#endif
656
657 return 0;
658}
659
661 LCEVCRawNAL *current, int nal_unit_type)
662{
663 int err;
664
665 if (nal_unit_type == LCEVC_NON_IDR_NUT)
666 HEADER("Non IDR");
667 else
668 HEADER("IDR");
669
670 CHECK(FUNC(nal_unit_header)(ctx, rw, &current->nal_unit_header,
671 (1 << LCEVC_IDR_NUT) | (1 << LCEVC_NON_IDR_NUT)));
672
673 CHECK(FUNC(process_block_list) (ctx, rw, &current->process_block_list,
674 current->nal_unit_header.nal_unit_type));
675
677
678 return 0;
679}
#define FUNC(a)
#define bits_left
Definition bitstream.h:116
static int FUNC trailing_bits(CodedBitstreamContext *ctx, RWContext *rw, int nb_bits)
int ff_cbs_h2645_write_slice_data(CodedBitstreamContext *ctx, PutBitContext *pbc, const uint8_t *data, size_t data_size, int data_bit_start)
Definition cbs_h2645.c:265
int ff_cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
Definition cbs_h2645.c:217
#define allocate(name, size)
Definition cbs_h264.c:140
#define flag(name)
Definition cbs_h264.c:60
#define ue(name, range_min, range_max)
Definition cbs_h264.c:61
#define ub(width, name)
Definition cbs_h264.c:95
#define infer(name, value)
Definition cbs_h264.c:131
#define bit_position(rw)
Definition cbs_h264.c:137
#define byte_alignment(rw)
Definition cbs_h264.c:138
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define FUNC_SEI(name)
Definition cbs_h264.c:44
#define RWContext
Definition cbs_h264.c:93
#define xu(width, name, var, range_min, range_max, subs,...)
Definition cbs_h264.c:101
static int FUNC vui_parameters(CodedBitstreamContext *ctx, RWContext *rw, H264RawVUI *current, H264RawSPS *sps)
static int FUNC rbsp_trailing_bits(CodedBitstreamContext *ctx, RWContext *rw)
static int FUNC nal_unit_header(CodedBitstreamContext *ctx, RWContext *rw, H264RawNALUnitHeader *current, uint32_t valid_type_mask)
#define MAX_UINT_BITS(length)
int ff_cbs_lcevc_alloc_process_block_payload(LCEVCRawProcessBlock *block, const LCEVCProcessBlockTypeDescriptor *desc)
Allocate a new payload for the given Process Block.
Definition cbs_lcevc.c:522
#define mb(name)
Definition cbs_lcevc.c:95
#define xmb(name, var)
Definition cbs_lcevc.c:173
#define LCEVC_BLOCK_FUNC(name, args)
Definition cbs_lcevc.c:56
const LCEVCProcessBlockTypeDescriptor * ff_cbs_lcevc_process_block_find_type(CodedBitstreamContext *ctx, int payload_type)
Find the type descriptor for the given payload type.
Definition cbs_lcevc.c:808
int ff_cbs_lcevc_list_add(LCEVCRawProcessBlockList *list, int position)
Allocate a new empty Process Block in a block list at a given position.
Definition cbs_lcevc.c:549
static int FUNC process_block(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawProcessBlock *current, int nal_unit_type)
static int FUNC process_block_list(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawProcessBlockList *current, int nal_unit_type)
static int FUNC sei_payload(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawSEI *current, int payload_size)
static int FUNC nal(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawNAL *current, int nal_unit_type)
static int16_t block[64]
Definition dct.c:125
static struct @346255127015250356166251341105367306144006377143 state
static struct @111144215057303131116103221376075045141373005341 current
static int get_bits_left(GetBitContext *gb)
Definition get_bits.h:688
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition get_bits.h:280
static int get_bits_count(const GetBitContext *s)
Definition get_bits.h:254
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition get_bits.h:337
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition get_bits.h:373
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition get_bits.h:517
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
#define ff_ctz
Definition intmath.h:105
int profile_idc
Definition h264_levels.c:53
int(* filler)(InterplayACMContext *s, unsigned ind, unsigned col)
#define fixed(width, name, value)
Definition cbs_apv.c:75
#define u(width, name, range_min, range_max)
Definition cbs_apv.c:68
#define ubs(width, name, subs,...)
Definition cbs_apv.c:72
#define CHECK(call)
Definition cbs_apv.c:59
#define HEADER(name)
Definition cbs_apv.c:55
@ LCEVC_ADDITIONAL_INFO_TYPE_SEI
Definition lcevc.h:80
@ LCEVC_ADDITIONAL_INFO_TYPE_VUI
Definition lcevc.h:81
@ LCEVC_NON_IDR_NUT
Definition lcevc.h:60
@ LCEVC_IDR_NUT
Definition lcevc.h:61
static const struct TransferCharacteristics transfer_characteristics[]
const char * desc
Definition libsvtav1.c:83
#define FFMIN(a, b)
Definition macros.h:49
const char data[16]
Definition mxf.c:149
static int put_bits_count(PutBitContext *s)
Definition put_bits.h:90
void av_refstruct_replace(void *dstp, const void *src)
Ensure *dstp refers to the same object as src.
Definition refstruct.c:160
@ SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
Definition sei.h:34
@ SEI_TYPE_USER_DATA_UNREGISTERED
Definition sei.h:35
@ SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO
Definition sei.h:103
@ SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
Definition sei.h:96
unsigned int pos
Definition spdifenc.c:431
Context structure for coded bitstream operations.
Definition cbs.h:226
LCEVCRawGlobalConfig * gc
RefStruct references.
Definition cbs_lcevc.h:246
LCEVCRawSequenceConfig * sc
RefStruct references.
Definition cbs_lcevc.h:245
LCEVCRawPictureConfig * pc
RefStruct references.
Definition cbs_lcevc.h:247
const uint8_t * buffer
Definition get_bits.h:110
uint8_t temporal_enabled_flag
Definition cbs_lcevc.h:59
uint8_t temporal_signalling_present_flag
Definition cbs_lcevc.h:97
uint8_t no_enhancement_bit_flag
Definition cbs_lcevc.h:88
#define av_log(a,...)
static uint8_t tmp[40]
Definition aes_ctr.c:52
int level_idx
Definition av1_levels.c:30
int level_idc
Definition h264_levels.c:29
static AVFormatContext * ctx
Definition movenc.c:49
int len