FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
cbs_sei_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  SEIRawFillerPayload *current,
22 {
23  int err, i;
24 
25  HEADER("Filler Payload");
26 
27 #ifdef READ
28  current->payload_size = state->payload_size;
29 #endif
30 
31  for (i = 0; i < current->payload_size; i++)
32  fixed(8, ff_byte, 0xff);
33 
34  return 0;
35 }
36 
37 SEI_FUNC(user_data_registered, (CodedBitstreamContext *ctx, RWContext *rw,
38  SEIRawUserDataRegistered *current,
40 {
41  int err, i, j;
42 
43  HEADER("User Data Registered ITU-T T.35");
44 
45  u(8, itu_t_t35_country_code, 0x00, 0xff);
46  if (current->itu_t_t35_country_code != 0xff)
47  i = 1;
48  else {
49  u(8, itu_t_t35_country_code_extension_byte, 0x00, 0xff);
50  i = 2;
51  }
52 
53 #ifdef READ
54  if (state->payload_size < i) {
55  av_log(ctx->log_ctx, AV_LOG_ERROR,
56  "Invalid SEI user data registered payload.\n");
57  return AVERROR_INVALIDDATA;
58  }
59  current->data_length = state->payload_size - i;
60 #endif
61 
62  allocate(current->data, current->data_length);
63  for (j = 0; j < current->data_length; j++)
64  xu(8, itu_t_t35_payload_byte[], current->data[j], 0x00, 0xff, 1, i + j);
65 
66  return 0;
67 }
68 
69 SEI_FUNC(user_data_unregistered, (CodedBitstreamContext *ctx, RWContext *rw,
72 {
73  int err, i;
74 
75  HEADER("User Data Unregistered");
76 
77 #ifdef READ
78  if (state->payload_size < 16) {
79  av_log(ctx->log_ctx, AV_LOG_ERROR,
80  "Invalid SEI user data unregistered payload.\n");
81  return AVERROR_INVALIDDATA;
82  }
83  current->data_length = state->payload_size - 16;
84 #endif
85 
86  for (i = 0; i < 16; i++)
87  us(8, uuid_iso_iec_11578[i], 0x00, 0xff, 1, i);
88 
89  allocate(current->data, current->data_length);
90 
91  for (i = 0; i < current->data_length; i++)
92  xu(8, user_data_payload_byte[i], current->data[i], 0x00, 0xff, 1, i);
93 
94  return 0;
95 }
96 
97 SEI_FUNC(frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw,
99  SEIMessageState *unused))
100 {
101  int err;
102 
103  HEADER("Frame Packing Arrangement");
104 
105  ue(fp_arrangement_id, 0, MAX_UINT_BITS(31));
106  flag(fp_arrangement_cancel_flag);
107  if (!current->fp_arrangement_cancel_flag) {
108  u(7, fp_arrangement_type, 3, 5);
109  flag(fp_quincunx_sampling_flag);
110  u(6, fp_content_interpretation_type, 0, 2);
111  flag(fp_spatial_flipping_flag);
112  flag(fp_frame0_flipped_flag);
113  flag(fp_field_views_flag);
114  flag(fp_current_frame_is_frame0_flag);
115  flag(fp_frame0_self_contained_flag);
116  flag(fp_frame1_self_contained_flag);
117  if (!current->fp_quincunx_sampling_flag && current->fp_arrangement_type != 5) {
118  ub(4, fp_frame0_grid_position_x);
119  ub(4, fp_frame0_grid_position_y);
120  ub(4, fp_frame1_grid_position_x);
121  ub(4, fp_frame1_grid_position_y);
122  }
123  fixed(8, fp_arrangement_reserved_byte, 0);
124  flag(fp_arrangement_persistence_flag);
125  }
126  flag(fp_upsampled_aspect_ratio_flag);
127 
128  return 0;
129 }
130 
131 SEI_FUNC(decoded_picture_hash, (CodedBitstreamContext *ctx,
132  RWContext *rw,
133  SEIRawDecodedPictureHash *current,
134  SEIMessageState *unused))
135 {
136  int err, c_idx, i;
137 
138  HEADER("Decoded Picture Hash");
139 
140  u(8, dph_sei_hash_type, 0, 2);
141  flag(dph_sei_single_component_flag);
142  ub(7, dph_sei_reserved_zero_7bits);
143 
144  for (c_idx = 0; c_idx < (current->dph_sei_single_component_flag ? 1 : 3);
145  c_idx++) {
146  if (current->dph_sei_hash_type == 0) {
147  for (i = 0; i < 16; i++)
148  us(8, dph_sei_picture_md5[c_idx][i], 0x00, 0xff, 2, c_idx, i);
149  } else if (current->dph_sei_hash_type == 1) {
150  us(16, dph_sei_picture_crc[c_idx], 0x0000, 0xffff, 1, c_idx);
151  } else if (current->dph_sei_hash_type == 2) {
152  us(32, dph_sei_picture_checksum[c_idx], 0x00000000, 0xffffffff, 1,
153  c_idx);
154  }
155  }
156  return 0;
157 }
158 
159 SEI_FUNC(mastering_display_colour_volume,
163 {
164  int err, c;
165 
166  HEADER("Mastering Display Colour Volume");
167 
168  for (c = 0; c < 3; c++) {
169  ubs(16, display_primaries_x[c], 1, c);
170  ubs(16, display_primaries_y[c], 1, c);
171  }
172 
173  ub(16, white_point_x);
174  ub(16, white_point_y);
175 
176  ub(32, max_display_mastering_luminance);
177  ub(32, min_display_mastering_luminance);
178 
179  return 0;
180 }
181 
182 SEI_FUNC(content_light_level_info, (CodedBitstreamContext *ctx, RWContext *rw,
185 {
186  int err;
187 
188  HEADER("Content Light Level Information");
189 
190  ub(16, max_content_light_level);
191  ub(16, max_pic_average_light_level);
192 
193  return 0;
194 }
195 
196 SEI_FUNC(alternative_transfer_characteristics,
200 {
201  int err;
202 
203  HEADER("Alternative Transfer Characteristics");
204 
205  ub(8, preferred_transfer_characteristics);
206 
207  return 0;
208 }
209 
210 SEI_FUNC(ambient_viewing_environment,
214 {
215  static const uint16_t max_ambient_light_value = 50000;
216  int err;
217 
218  HEADER("Ambient Viewing Environment");
219 
220  u(32, ambient_illuminance, 1, MAX_UINT_BITS(32));
221  u(16, ambient_light_x, 0, max_ambient_light_value);
222  u(16, ambient_light_y, 0, max_ambient_light_value);
223 
224  return 0;
225 }
226 
227 SEI_FUNC(film_grain_characteristics,
231 {
232  int err, c, i, j;
233 
234  HEADER("Film Grain Characteristics");
235 
236  flag(fg_characteristics_cancel_flag);
237  if (!current->fg_characteristics_cancel_flag) {
238  int filmGrainBitDepth[3];
239 
240  u(2, fg_model_id, 0, 1);
241  flag(fg_separate_colour_description_present_flag);
243  ub(3, fg_bit_depth_luma_minus8);
244  ub(3, fg_bit_depth_chroma_minus8);
245  flag(fg_full_range_flag);
246  ub(8, fg_colour_primaries);
247  ub(8, fg_transfer_characteristics);
248  ub(8, fg_matrix_coeffs);
249  }
250 
251  filmGrainBitDepth[0] = current->fg_bit_depth_luma_minus8 + 8;
252  filmGrainBitDepth[1] =
253  filmGrainBitDepth[2] = current->fg_bit_depth_chroma_minus8 + 8;
254 
255  u(2, fg_blending_mode_id, 0, 1);
256  ub(4, fg_log2_scale_factor);
257  for (c = 0; c < 3; c++)
258  flags(fg_comp_model_present_flag[c], 1, c);
259 
260  for (c = 0; c < 3; c++) {
261  if (current->fg_comp_model_present_flag[c]) {
262  ubs(8, fg_num_intensity_intervals_minus1[c], 1, c);
263  us(3, fg_num_model_values_minus1[c], 0, 5, 1, c);
264  for (i = 0; i <= current->fg_num_intensity_intervals_minus1[c]; i++) {
265  ubs(8, fg_intensity_interval_lower_bound[c][i], 2, c, i);
266  ubs(8, fg_intensity_interval_upper_bound[c][i], 2, c, i);
267  for (j = 0; j <= current->fg_num_model_values_minus1[c]; j++)
268  ses(fg_comp_model_value[c][i][j], 0 - current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)),
269  ((1 << filmGrainBitDepth[c]) - 1) - current->fg_model_id * (1 << (filmGrainBitDepth[c] - 1)),
270  3, c, i, j);
271  }
272  }
273  }
274  flag(fg_characteristics_persistence_flag);
275  }
276 
277  return 0;
278 }
279 
280 SEI_FUNC(display_orientation, (CodedBitstreamContext *ctx, RWContext *rw,
281  SEIRawDisplayOrientation *current,
283 {
284  int err;
285 
286  HEADER("Display Orientation");
287 
288  flag(display_orientation_cancel_flag);
289  if (!current->display_orientation_cancel_flag) {
290  flag(display_orientation_persistence_flag);
291  u(3, display_orientation_transform_type, 0, 7);
292  ub(3, display_orientation_reserved_zero_3bits);
293  }
294 
295  return 0;
296 }
297 
298 SEI_FUNC(frame_field_information, (CodedBitstreamContext *ctx, RWContext *rw,
301 {
302  int err;
303 
304  HEADER("Frame-field information");
305 
306  flag(ffi_field_pic_flag);
307  if (current->ffi_field_pic_flag) {
308  flag(ffi_bottom_field_flag);
309  flag(ffi_pairing_indicated_flag);
310  if (current->ffi_pairing_indicated_flag)
311  flag(ffi_paired_with_next_field_flag);
312  } else {
313  flag(ffi_display_fields_from_frame_flag);
315  flag(ffi_top_field_first_flag);
316  u(8, ffi_display_elemental_periods_minus1, 0, 0xff);
317  }
318  u(2, ffi_source_scan_type, 0, 3);
319  flag(ffi_duplicate_flag);
320 
321  return 0;
322 }
323 
325  SEIRawMessage *current)
326 {
328  int err, i;
329 
330  desc = ff_cbs_sei_find_type(ctx, current->payload_type);
331  if (desc) {
333  .payload_type = current->payload_type,
334  .payload_size = current->payload_size,
335  .extension_present = current->extension_bit_length > 0,
336  };
337  int start_position, current_position, bits_written;
338 
339 #ifdef READ
341 #endif
342 
343  start_position = bit_position(rw);
344 
345  CHECK(desc->READWRITE(ctx, rw, current->payload, &state));
346 
347  current_position = bit_position(rw);
348  bits_written = current_position - start_position;
349 
350  if (byte_alignment(rw) || state.extension_present ||
351  bits_written < 8 * current->payload_size) {
352  size_t bits_left;
353 
354 #ifdef READ
355  GetBitContext tmp = *rw;
356  int trailing_bits, trailing_zero_bits;
357 
358  bits_left = 8 * current->payload_size - bits_written;
359  if (bits_left > 8)
362  if (trailing_bits == 0) {
363  // The trailing bits must contain a bit_equal_to_one, so
364  // they can't all be zero.
365  return AVERROR_INVALIDDATA;
366  }
367  trailing_zero_bits = ff_ctz(trailing_bits);
368  current->extension_bit_length =
369  bits_left - 1 - trailing_zero_bits;
370 #endif
371 
372  if (current->extension_bit_length > 0) {
373  allocate(current->extension_data,
374  (current->extension_bit_length + 7) / 8);
375 
376  bits_left = current->extension_bit_length;
377  for (i = 0; bits_left > 0; i++) {
378  int length = FFMIN(bits_left, 8);
379  xu(length, reserved_payload_extension_data,
380  current->extension_data[i],
381  0, MAX_UINT_BITS(length), 0);
382  bits_left -= length;
383  }
384  }
385 
386  fixed(1, bit_equal_to_one, 1);
387  while (byte_alignment(rw))
388  fixed(1, bit_equal_to_zero, 0);
389  }
390 
391 #ifdef WRITE
392  current->payload_size = (put_bits_count(rw) - start_position) / 8;
393 #endif
394  } else {
395  uint8_t *data;
396 
397 #ifdef READ
398  allocate(current->payload_ref, current->payload_size);
399  current->payload = current->payload_ref;
400 #else
401  allocate(current->payload, current->payload_size);
402 #endif
403  data = current->payload;
404 
405  for (i = 0; i < current->payload_size; i++)
406  xu(8, payload_byte[i], data[i], 0, 255, 1, i);
407  }
408 
409  return 0;
410 }
411 
413  SEIRawMessageList *current, int prefix)
414 {
416  int err, k;
417 
418 #ifdef READ
419  for (k = 0;; k++) {
420  uint32_t payload_type = 0;
421  uint32_t payload_size = 0;
422  uint32_t tmp;
423  GetBitContext payload_gbc;
424 
425  while (show_bits(rw, 8) == 0xff) {
426  fixed(8, ff_byte, 0xff);
427  payload_type += 255;
428  }
429  xu(8, last_payload_type_byte, tmp, 0, 254, 0);
430  payload_type += tmp;
431 
432  while (show_bits(rw, 8) == 0xff) {
433  fixed(8, ff_byte, 0xff);
434  payload_size += 255;
435  }
436  xu(8, last_payload_size_byte, tmp, 0, 254, 0);
437  payload_size += tmp;
438 
439  // There must be space remaining for both the payload and
440  // the trailing bits on the SEI NAL unit.
441  if (payload_size + 1 > get_bits_left(rw) / 8) {
442  av_log(ctx->log_ctx, AV_LOG_ERROR,
443  "Invalid SEI message: payload_size too large "
444  "(%"PRIu32" bytes).\n", payload_size);
445  return AVERROR_INVALIDDATA;
446  }
447  CHECK(init_get_bits(&payload_gbc, rw->buffer,
448  get_bits_count(rw) + 8 * payload_size));
449  skip_bits_long(&payload_gbc, get_bits_count(rw));
450 
451  CHECK(ff_cbs_sei_list_add(current));
452  message = &current->messages[k];
453 
454  message->payload_type = payload_type;
455  message->payload_size = payload_size;
456 
457  CHECK(FUNC(message)(ctx, &payload_gbc, message));
458 
459  skip_bits_long(rw, 8 * payload_size);
460 
462  break;
463  }
464 #else
465  for (k = 0; k < current->nb_messages; k++) {
466  PutBitContext start_state;
467  uint32_t tmp;
468  int trace, i;
469 
470  message = &current->messages[k];
471 
472  // We write the payload twice in order to find the size. Trace
473  // output is switched off for the first write.
474  trace = ctx->trace_enable;
475  ctx->trace_enable = 0;
476 
477  start_state = *rw;
478  for (i = 0; i < 2; i++) {
479  *rw = start_state;
480 
481  tmp = message->payload_type;
482  while (tmp >= 255) {
483  fixed(8, ff_byte, 0xff);
484  tmp -= 255;
485  }
486  xu(8, last_payload_type_byte, tmp, 0, 254, 0);
487 
488  tmp = message->payload_size;
489  while (tmp >= 255) {
490  fixed(8, ff_byte, 0xff);
491  tmp -= 255;
492  }
493  xu(8, last_payload_size_byte, tmp, 0, 254, 0);
494 
495  err = FUNC(message)(ctx, rw, message);
496  ctx->trace_enable = trace;
497  if (err < 0)
498  return err;
499  }
500  }
501 #endif
502 
503  return 0;
504 }
bit_position
#define bit_position(rw)
Definition: cbs_h2645.c:443
flags
const SwsFlags flags[]
Definition: swscale.c:61
SEIRawFilmGrainCharacteristics::fg_num_intensity_intervals_minus1
uint8_t fg_num_intensity_intervals_minus1[3]
Definition: cbs_sei.h:113
SEIRawFramePackingArrangement::fp_arrangement_type
uint8_t fp_arrangement_type
Definition: cbs_sei.h:49
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:261
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:678
SEIRawUserDataRegistered
Definition: cbs_sei.h:33
ub
#define ub(width, name)
Definition: cbs_apv.c:85
SEIRawDecodedPictureHash::dph_sei_hash_type
uint8_t dph_sei_hash_type
Definition: cbs_sei.h:67
ff_ctz
#define ff_ctz
Definition: intmath.h:107
SEIRawAmbientViewingEnvironment
Definition: cbs_sei.h:94
message
Definition: api-threadmessage-test.c:47
SEIRawFrameFieldInformation
Definition: cbs_sei.h:128
SEIRawMessage
Definition: cbs_sei.h:140
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:249
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:226
data
const char data[16]
Definition: mxf.c:149
SEIRawAlternativeTransferCharacteristics
Definition: cbs_sei.h:90
allocate
#define allocate(name, size)
Definition: cbs_h2645.c:446
SEIRawFilmGrainCharacteristics::fg_comp_model_present_flag
uint8_t fg_comp_model_present_flag[3]
Definition: cbs_sei.h:112
ses
#define ses(name, range_min, range_max, subs,...)
Definition: cbs_h2645.c:275
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:497
SEIRawDecodedPictureHash::dph_sei_single_component_flag
uint8_t dph_sei_single_component_flag
Definition: cbs_sei.h:68
SEIRawContentLightLevelInfo
Definition: cbs_sei.h:85
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:318
SEIRawFramePackingArrangement::fp_quincunx_sampling_flag
uint8_t fp_quincunx_sampling_flag
Definition: cbs_sei.h:50
CHECK
CHECK(-1) CHECK(-2) }} }} CHECK(1) CHECK(2) }} }} } if(diff0+diff1 > 0) temp -
u
#define u(width, name, range_min, range_max)
Definition: cbs_apv.c:83
SEIRawUserDataUnregistered::data
uint8_t * data
RefStruct reference.
Definition: cbs_sei.h:42
GetBitContext
Definition: get_bits.h:108
xu
#define xu(width, name, var, range_min, range_max, subs,...)
Definition: cbs_apv.c:132
SEIRawFilmGrainCharacteristics::fg_characteristics_cancel_flag
uint8_t fg_characteristics_cancel_flag
Definition: cbs_sei.h:101
SEIRawUserDataUnregistered
Definition: cbs_sei.h:40
ue
#define ue(name, range_min, range_max)
Definition: cbs_h2645.c:254
message_list
static int FUNC() message_list(CodedBitstreamContext *ctx, RWContext *rw, SEIRawMessageList *current, int prefix)
Definition: cbs_sei_syntax_template.c:412
SEIRawFilmGrainCharacteristics::fg_num_model_values_minus1
uint8_t fg_num_model_values_minus1[3]
Definition: cbs_sei.h:114
SEIRawUserDataRegistered::itu_t_t35_country_code
uint8_t itu_t_t35_country_code
Definition: cbs_sei.h:34
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
SEIRawFilmGrainCharacteristics::fg_bit_depth_luma_minus8
uint8_t fg_bit_depth_luma_minus8
Definition: cbs_sei.h:104
SEIRawFillerPayload
Definition: cbs_sei.h:29
SEIRawMessageList
Definition: cbs_sei.h:149
SEIRawUserDataUnregistered::data_length
size_t data_length
Definition: cbs_sei.h:43
ctx
AVFormatContext * ctx
Definition: movenc.c:49
RWContext
#define RWContext
Definition: cbs_apv.c:129
SEIRawFrameFieldInformation::ffi_display_fields_from_frame_flag
uint8_t ffi_display_fields_from_frame_flag
Definition: cbs_sei.h:133
ff_cbs_sei_alloc_message_payload
int ff_cbs_sei_alloc_message_payload(SEIRawMessage *message, const SEIMessageTypeDescriptor *desc)
Allocate a new payload for the given SEI message.
Definition: cbs_sei.c:40
MAX_UINT_BITS
#define MAX_UINT_BITS(length)
Definition: cbs_internal.h:235
PutBitContext
Definition: put_bits.h:50
SEIRawFilmGrainCharacteristics::fg_model_id
uint8_t fg_model_id
Definition: cbs_sei.h:102
GetBitContext::buffer
const uint8_t * buffer
Definition: get_bits.h:109
bits_left
#define bits_left
Definition: bitstream.h:114
fixed
#define fixed(width, name, value)
Definition: cbs_apv.c:92
tmp
static uint8_t tmp[20]
Definition: aes_ctr.c:47
SEIMessageTypeDescriptor
Definition: cbs_sei.h:184
SEIRawFilmGrainCharacteristics::fg_bit_depth_chroma_minus8
uint8_t fg_bit_depth_chroma_minus8
Definition: cbs_sei.h:105
SEIRawMasteringDisplayColourVolume
Definition: cbs_sei.h:76
SEIRawFrameFieldInformation::ffi_pairing_indicated_flag
uint8_t ffi_pairing_indicated_flag
Definition: cbs_sei.h:131
byte_alignment
#define byte_alignment(rw)
Definition: cbs_apv.c:149
SEIRawFilmGrainCharacteristics::fg_separate_colour_description_present_flag
uint8_t fg_separate_colour_description_present_flag
Definition: cbs_sei.h:103
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
SEIRawFillerPayload::payload_size
uint32_t payload_size
Definition: cbs_sei.h:30
SEIRawFrameFieldInformation::ffi_field_pic_flag
uint8_t ffi_field_pic_flag
Definition: cbs_sei.h:129
ubs
#define ubs(width, name, subs,...)
Definition: cbs_apv.c:89
HEADER
#define HEADER(name)
Definition: cbs_apv.c:70
SEIRawUserDataRegistered::data
uint8_t * data
RefStruct reference.
Definition: cbs_sei.h:36
state
static struct @505 state
us
#define us(width, name, range_min, range_max, subs,...)
Definition: cbs_apv.c:87
SEIRawUserDataRegistered::data_length
size_t data_length
Definition: cbs_sei.h:37
ff_cbs_sei_find_type
const SEIMessageTypeDescriptor * ff_cbs_sei_find_type(CodedBitstreamContext *ctx, int payload_type)
Find the type descriptor for the given payload type.
Definition: cbs_h2645.c:2335
SEI_FUNC
SEI_FUNC(filler_payload,(CodedBitstreamContext *ctx, RWContext *rw, SEIRawFillerPayload *current, SEIMessageState *state))
Definition: cbs_sei_syntax_template.c:19
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
put_bits_count
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:90
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:354
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
flag
#define flag(name)
Definition: cbs_av1.c:495
SEIMessageState
Definition: cbs_sei.h:156
FUNC
#define FUNC(a)
Definition: bit_depth_template.c:101
SEIRawDisplayOrientation
Definition: cbs_sei.h:121
SEIRawDecodedPictureHash
Definition: cbs_sei.h:66
SEIRawFramePackingArrangement
Definition: cbs_sei.h:46
trailing_bits
static int FUNC() trailing_bits(CodedBitstreamContext *ctx, RWContext *rw, int nb_bits)
Definition: cbs_av1_syntax_template.c:50
desc
const char * desc
Definition: libsvtav1.c:79
message
static int FUNC() message(CodedBitstreamContext *ctx, RWContext *rw, SEIRawMessage *current)
Definition: cbs_sei_syntax_template.c:324
ff_cbs_sei_list_add
int ff_cbs_sei_list_add(SEIRawMessageList *list)
Allocate a new empty SEI message in a message list.
Definition: cbs_sei.c:66
SEIRawFramePackingArrangement::fp_arrangement_cancel_flag
uint8_t fp_arrangement_cancel_flag
Definition: cbs_sei.h:48
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
SEIRawDisplayOrientation::display_orientation_cancel_flag
uint8_t display_orientation_cancel_flag
Definition: cbs_sei.h:122
SEIRawFilmGrainCharacteristics
Definition: cbs_sei.h:100
cbs_h2645_read_more_rbsp_data
static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
Definition: cbs_h2645.c:328