FFmpeg
h264_sei.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... SEI decoding
3  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * H.264 / AVC / MPEG-4 part10 SEI decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #include "avcodec.h"
29 #include "get_bits.h"
30 #include "golomb.h"
31 #include "h264_ps.h"
32 #include "h264_sei.h"
33 #include "internal.h"
34 
35 #define AVERROR_PS_NOT_FOUND FFERRTAG(0xF8,'?','P','S')
36 
37 static const uint8_t sei_num_clock_ts_table[9] = {
38  1, 1, 1, 2, 2, 3, 3, 2, 3
39 };
40 
42 {
43  h->recovery_point.recovery_frame_cnt = -1;
44 
45  h->picture_timing.dpb_output_delay = 0;
46  h->picture_timing.cpb_removal_delay = -1;
47 
48  h->picture_timing.present = 0;
49  h->buffering_period.present = 0;
50  h->frame_packing.present = 0;
51  h->display_orientation.present = 0;
52  h->afd.present = 0;
53 
54  av_buffer_unref(&h->a53_caption.buf_ref);
55 }
56 
58  const H264ParamSets *ps, void *logctx)
59 {
60  int i;
61  const SPS *sps = ps->sps;
62 
63  for (i = 0; i<MAX_SPS_COUNT; i++)
64  if ((!sps || !sps->log2_max_frame_num) && ps->sps_list[i])
65  sps = (const SPS *)ps->sps_list[i]->data;
66 
67  if (!sps) {
68  av_log(logctx, AV_LOG_ERROR, "SPS unavailable in decode_picture_timing\n");
69  return AVERROR_PS_NOT_FOUND;
70  }
71 
72  if (sps->nal_hrd_parameters_present_flag ||
73  sps->vcl_hrd_parameters_present_flag) {
74  h->cpb_removal_delay = get_bits_long(gb, sps->cpb_removal_delay_length);
75  h->dpb_output_delay = get_bits_long(gb, sps->dpb_output_delay_length);
76  }
77  if (sps->pic_struct_present_flag) {
78  unsigned int i, num_clock_ts;
79 
80  h->pic_struct = get_bits(gb, 4);
81  h->ct_type = 0;
82 
83  if (h->pic_struct > H264_SEI_PIC_STRUCT_FRAME_TRIPLING)
84  return AVERROR_INVALIDDATA;
85 
86  num_clock_ts = sei_num_clock_ts_table[h->pic_struct];
87  h->timecode_cnt = 0;
88  for (i = 0; i < num_clock_ts; i++) {
89  if (get_bits(gb, 1)) { /* clock_timestamp_flag */
90  H264SEITimeCode *tc = &h->timecode[h->timecode_cnt++];
91  unsigned int full_timestamp_flag;
92  unsigned int counting_type, cnt_dropped_flag;
93  h->ct_type |= 1 << get_bits(gb, 2);
94  skip_bits(gb, 1); /* nuit_field_based_flag */
95  counting_type = get_bits(gb, 5); /* counting_type */
96  full_timestamp_flag = get_bits(gb, 1);
97  skip_bits(gb, 1); /* discontinuity_flag */
98  cnt_dropped_flag = get_bits(gb, 1); /* cnt_dropped_flag */
99  if (cnt_dropped_flag && counting_type > 1 && counting_type < 7)
100  tc->dropframe = 1;
101  tc->frame = get_bits(gb, 8); /* n_frames */
102  if (full_timestamp_flag) {
103  tc->full = 1;
104  tc->seconds = get_bits(gb, 6); /* seconds_value 0..59 */
105  tc->minutes = get_bits(gb, 6); /* minutes_value 0..59 */
106  tc->hours = get_bits(gb, 5); /* hours_value 0..23 */
107  } else {
108  tc->seconds = tc->minutes = tc->hours = tc->full = 0;
109  if (get_bits(gb, 1)) { /* seconds_flag */
110  tc->seconds = get_bits(gb, 6);
111  if (get_bits(gb, 1)) { /* minutes_flag */
112  tc->minutes = get_bits(gb, 6);
113  if (get_bits(gb, 1)) /* hours_flag */
114  tc->hours = get_bits(gb, 5);
115  }
116  }
117  }
118 
119  if (sps->time_offset_length > 0)
120  skip_bits(gb,
121  sps->time_offset_length); /* time_offset */
122  }
123  }
124 
125  av_log(logctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n",
126  h->ct_type, h->pic_struct);
127  }
128 
129  h->present = 1;
130  return 0;
131 }
132 
134 {
135  int flag;
136 
137  if (size-- < 1)
138  return AVERROR_INVALIDDATA;
139  skip_bits(gb, 1); // 0
140  flag = get_bits(gb, 1); // active_format_flag
141  skip_bits(gb, 6); // reserved
142 
143  if (flag) {
144  if (size-- < 1)
145  return AVERROR_INVALIDDATA;
146  skip_bits(gb, 4); // reserved
147  h->active_format_description = get_bits(gb, 4);
148  h->present = 1;
149  }
150 
151  return 0;
152 }
153 
155  GetBitContext *gb, void *logctx,
156  int size)
157 {
158  int flag;
159  int user_data_type_code;
160  int cc_count;
161 
162  if (size < 3)
163  return AVERROR(EINVAL);
164 
165  user_data_type_code = get_bits(gb, 8);
166  if (user_data_type_code == 0x3) {
167  skip_bits(gb, 1); // reserved
168 
169  flag = get_bits(gb, 1); // process_cc_data_flag
170  if (flag) {
171  skip_bits(gb, 1); // zero bit
172  cc_count = get_bits(gb, 5);
173  skip_bits(gb, 8); // reserved
174  size -= 2;
175 
176  if (cc_count && size >= cc_count * 3) {
177  int old_size = h->buf_ref ? h->buf_ref->size : 0;
178  const uint64_t new_size = (old_size + cc_count
179  * UINT64_C(3));
180  int i, ret;
181 
182  if (new_size > INT_MAX)
183  return AVERROR(EINVAL);
184 
185  /* Allow merging of the cc data from two fields. */
186  ret = av_buffer_realloc(&h->buf_ref, new_size);
187  if (ret < 0)
188  return ret;
189 
190  /* Use of av_buffer_realloc assumes buffer is writeable */
191  for (i = 0; i < cc_count; i++) {
192  h->buf_ref->data[old_size++] = get_bits(gb, 8);
193  h->buf_ref->data[old_size++] = get_bits(gb, 8);
194  h->buf_ref->data[old_size++] = get_bits(gb, 8);
195  }
196 
197  skip_bits(gb, 8); // marker_bits
198  }
199  }
200  } else {
201  int i;
202  for (i = 0; i < size - 1; i++)
203  skip_bits(gb, 8);
204  }
205 
206  return 0;
207 }
208 
210  void *logctx, int size)
211 {
212  uint32_t country_code;
213  uint32_t user_identifier;
214 
215  if (size < 7)
216  return AVERROR_INVALIDDATA;
217  size -= 7;
218 
219  country_code = get_bits(gb, 8); // itu_t_t35_country_code
220  if (country_code == 0xFF) {
221  skip_bits(gb, 8); // itu_t_t35_country_code_extension_byte
222  size--;
223  }
224 
225  /* itu_t_t35_payload_byte follows */
226  skip_bits(gb, 8); // terminal provider code
227  skip_bits(gb, 8); // terminal provider oriented code
228  user_identifier = get_bits_long(gb, 32);
229 
230  switch (user_identifier) {
231  case MKBETAG('D', 'T', 'G', '1'): // afd_data
232  return decode_registered_user_data_afd(&h->afd, gb, size);
233  case MKBETAG('G', 'A', '9', '4'): // closed captions
234  return decode_registered_user_data_closed_caption(&h->a53_caption, gb,
235  logctx, size);
236  default:
237  skip_bits(gb, size * 8);
238  break;
239  }
240 
241  return 0;
242 }
243 
245  void *logctx, int size)
246 {
248  int e, build, i;
249 
250  if (size < 16 || size >= INT_MAX - 16)
251  return AVERROR_INVALIDDATA;
252 
253  user_data = av_malloc(16 + size + 1);
254  if (!user_data)
255  return AVERROR(ENOMEM);
256 
257  for (i = 0; i < size + 16; i++)
258  user_data[i] = get_bits(gb, 8);
259 
260  user_data[i] = 0;
261  e = sscanf(user_data + 16, "x264 - core %d", &build);
262  if (e == 1 && build > 0)
263  h->x264_build = build;
264  if (e == 1 && build == 1 && !strncmp(user_data+16, "x264 - core 0000", 16))
265  h->x264_build = 67;
266 
268  return 0;
269 }
270 
272 {
273  unsigned recovery_frame_cnt = get_ue_golomb_long(gb);
274 
275  if (recovery_frame_cnt >= (1<<MAX_LOG2_MAX_FRAME_NUM)) {
276  av_log(logctx, AV_LOG_ERROR, "recovery_frame_cnt %u is out of range\n", recovery_frame_cnt);
277  return AVERROR_INVALIDDATA;
278  }
279 
280  h->recovery_frame_cnt = recovery_frame_cnt;
281  /* 1b exact_match_flag,
282  * 1b broken_link_flag,
283  * 2b changing_slice_group_idc */
284  skip_bits(gb, 4);
285 
286  return 0;
287 }
288 
290  const H264ParamSets *ps, void *logctx)
291 {
292  unsigned int sps_id;
293  int sched_sel_idx;
294  const SPS *sps;
295 
296  sps_id = get_ue_golomb_31(gb);
297  if (sps_id > 31 || !ps->sps_list[sps_id]) {
298  av_log(logctx, AV_LOG_ERROR,
299  "non-existing SPS %d referenced in buffering period\n", sps_id);
300  return sps_id > 31 ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND;
301  }
302  sps = (const SPS*)ps->sps_list[sps_id]->data;
303 
304  // NOTE: This is really so duplicated in the standard... See H.264, D.1.1
305  if (sps->nal_hrd_parameters_present_flag) {
306  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
307  h->initial_cpb_removal_delay[sched_sel_idx] =
308  get_bits_long(gb, sps->initial_cpb_removal_delay_length);
309  // initial_cpb_removal_delay_offset
310  skip_bits(gb, sps->initial_cpb_removal_delay_length);
311  }
312  }
313  if (sps->vcl_hrd_parameters_present_flag) {
314  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
315  h->initial_cpb_removal_delay[sched_sel_idx] =
316  get_bits_long(gb, sps->initial_cpb_removal_delay_length);
317  // initial_cpb_removal_delay_offset
318  skip_bits(gb, sps->initial_cpb_removal_delay_length);
319  }
320  }
321 
322  h->present = 1;
323  return 0;
324 }
325 
327  GetBitContext *gb)
328 {
329  h->arrangement_id = get_ue_golomb_long(gb);
330  h->arrangement_cancel_flag = get_bits1(gb);
331  h->present = !h->arrangement_cancel_flag;
332 
333  if (h->present) {
334  h->arrangement_type = get_bits(gb, 7);
335  h->quincunx_sampling_flag = get_bits1(gb);
336  h->content_interpretation_type = get_bits(gb, 6);
337 
338  // spatial_flipping_flag, frame0_flipped_flag, field_views_flag
339  skip_bits(gb, 3);
340  h->current_frame_is_frame0_flag = get_bits1(gb);
341  // frame0_self_contained_flag, frame1_self_contained_flag
342  skip_bits(gb, 2);
343 
344  if (!h->quincunx_sampling_flag && h->arrangement_type != 5)
345  skip_bits(gb, 16); // frame[01]_grid_position_[xy]
346  skip_bits(gb, 8); // frame_packing_arrangement_reserved_byte
347  h->arrangement_repetition_period = get_ue_golomb_long(gb);
348  }
349  skip_bits1(gb); // frame_packing_arrangement_extension_flag
350 
351  return 0;
352 }
353 
355  GetBitContext *gb)
356 {
357  h->present = !get_bits1(gb);
358 
359  if (h->present) {
360  h->hflip = get_bits1(gb); // hor_flip
361  h->vflip = get_bits1(gb); // ver_flip
362 
363  h->anticlockwise_rotation = get_bits(gb, 16);
364  get_ue_golomb_long(gb); // display_orientation_repetition_period
365  skip_bits1(gb); // display_orientation_extension_flag
366  }
367 
368  return 0;
369 }
370 
372 {
373  h->green_metadata_type = get_bits(gb, 8);
374 
375  if (h->green_metadata_type == 0) {
376  h->period_type = get_bits(gb, 8);
377 
378  if (h->period_type == 2)
379  h->num_seconds = get_bits(gb, 16);
380  else if (h->period_type == 3)
381  h->num_pictures = get_bits(gb, 16);
382 
383  h->percent_non_zero_macroblocks = get_bits(gb, 8);
384  h->percent_intra_coded_macroblocks = get_bits(gb, 8);
385  h->percent_six_tap_filtering = get_bits(gb, 8);
386  h->percent_alpha_point_deblocking_instance = get_bits(gb, 8);
387 
388  } else if (h->green_metadata_type == 1) {
389  h->xsd_metric_type = get_bits(gb, 8);
390  h->xsd_metric_value = get_bits(gb, 16);
391  }
392 
393  return 0;
394 }
395 
397  GetBitContext *gb)
398 {
399  h->present = 1;
400  h->preferred_transfer_characteristics = get_bits(gb, 8);
401  return 0;
402 }
403 
405  const H264ParamSets *ps, void *logctx)
406 {
407  int master_ret = 0;
408 
409  while (get_bits_left(gb) > 16 && show_bits(gb, 16)) {
410  int type = 0;
411  unsigned size = 0;
412  unsigned next;
413  int ret = 0;
414 
415  do {
416  if (get_bits_left(gb) < 8)
417  return AVERROR_INVALIDDATA;
418  type += show_bits(gb, 8);
419  } while (get_bits(gb, 8) == 255);
420 
421  do {
422  if (get_bits_left(gb) < 8)
423  return AVERROR_INVALIDDATA;
424  size += show_bits(gb, 8);
425  } while (get_bits(gb, 8) == 255);
426 
427  if (size > get_bits_left(gb) / 8) {
428  av_log(logctx, AV_LOG_ERROR, "SEI type %d size %d truncated at %d\n",
429  type, 8*size, get_bits_left(gb));
430  return AVERROR_INVALIDDATA;
431  }
432  next = get_bits_count(gb) + 8 * size;
433 
434  switch (type) {
435  case H264_SEI_TYPE_PIC_TIMING: // Picture timing SEI
436  ret = decode_picture_timing(&h->picture_timing, gb, ps, logctx);
437  break;
439  ret = decode_registered_user_data(h, gb, logctx, size);
440  break;
442  ret = decode_unregistered_user_data(&h->unregistered, gb, logctx, size);
443  break;
445  ret = decode_recovery_point(&h->recovery_point, gb, logctx);
446  break;
448  ret = decode_buffering_period(&h->buffering_period, gb, ps, logctx);
449  break;
451  ret = decode_frame_packing_arrangement(&h->frame_packing, gb);
452  break;
454  ret = decode_display_orientation(&h->display_orientation, gb);
455  break;
457  ret = decode_green_metadata(&h->green_metadata, gb);
458  break;
460  ret = decode_alternative_transfer(&h->alternative_transfer, gb);
461  break;
462  default:
463  av_log(logctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
464  }
465  if (ret < 0 && ret != AVERROR_PS_NOT_FOUND)
466  return ret;
467  if (ret < 0)
468  master_ret = ret;
469 
470  skip_bits_long(gb, next - get_bits_count(gb));
471 
472  // FIXME check bits here
473  align_get_bits(gb);
474  }
475 
476  return master_ret;
477 }
478 
480 {
481  if (h->arrangement_cancel_flag == 0) {
482  switch (h->arrangement_type) {
484  if (h->content_interpretation_type == 2)
485  return "checkerboard_rl";
486  else
487  return "checkerboard_lr";
489  if (h->content_interpretation_type == 2)
490  return "col_interleaved_rl";
491  else
492  return "col_interleaved_lr";
494  if (h->content_interpretation_type == 2)
495  return "row_interleaved_rl";
496  else
497  return "row_interleaved_lr";
499  if (h->content_interpretation_type == 2)
500  return "right_left";
501  else
502  return "left_right";
504  if (h->content_interpretation_type == 2)
505  return "bottom_top";
506  else
507  return "top_bottom";
509  if (h->content_interpretation_type == 2)
510  return "block_rl";
511  else
512  return "block_lr";
514  default:
515  return "mono";
516  }
517  } else if (h->arrangement_cancel_flag == 1) {
518  return "mono";
519  } else {
520  return NULL;
521  }
522 }
H264_SEI_TYPE_BUFFERING_PERIOD
@ H264_SEI_TYPE_BUFFERING_PERIOD
buffering period (H.264, D.1.1)
Definition: h264_sei.h:28
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:291
AVERROR_PS_NOT_FOUND
#define AVERROR_PS_NOT_FOUND
Definition: h264_sei.c:35
H264ParamSets::sps
const SPS * sps
Definition: h264_ps.h:146
H264_SEI_TYPE_GREEN_METADATA
@ H264_SEI_TYPE_GREEN_METADATA
GreenMPEG information.
Definition: h264_sei.h:37
ff_h264_sei_uninit
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:41
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:849
AVERROR
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
av_buffer_realloc
int av_buffer_realloc(AVBufferRef **pbuf, int size)
Reallocate a given buffer.
Definition: buffer.c:169
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:89
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:546
H264_SEI_TYPE_RECOVERY_POINT
@ H264_SEI_TYPE_RECOVERY_POINT
recovery point (frame # to decoder sync)
Definition: h264_sei.h:34
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:219
internal.h
H264_SEI_FPA_TYPE_CHECKERBOARD
@ H264_SEI_FPA_TYPE_CHECKERBOARD
Definition: h264_sei.h:61
H264_SEI_TYPE_USER_DATA_REGISTERED
@ H264_SEI_TYPE_USER_DATA_REGISTERED
registered user data as specified by Rec. ITU-T T.35
Definition: h264_sei.h:32
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
golomb.h
exp golomb vlc stuff
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
H264SEIAFD
Definition: h264_sei.h:113
sei_num_clock_ts_table
static const uint8_t sei_num_clock_ts_table[9]
Definition: h264_sei.c:37
H264SEIA53Caption
Definition: h264_sei.h:118
ff_h264_sei_decode
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:404
GetBitContext
Definition: get_bits.h:61
decode_recovery_point
static int decode_recovery_point(H264SEIRecoveryPoint *h, GetBitContext *gb, void *logctx)
Definition: h264_sei.c:271
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
decode_picture_timing
static int decode_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:57
H264_SEI_FPA_TYPE_SIDE_BY_SIDE
@ H264_SEI_FPA_TYPE_SIDE_BY_SIDE
Definition: h264_sei.h:64
H264_SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
@ H264_SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
Definition: h264_sei.h:66
H264SEIAlternativeTransfer
Definition: h264_sei.h:172
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
H264_SEI_FPA_TYPE_TOP_BOTTOM
@ H264_SEI_FPA_TYPE_TOP_BOTTOM
Definition: h264_sei.h:65
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
get_bits.h
H264ParamSets::sps_list
AVBufferRef * sps_list[MAX_SPS_COUNT]
Definition: h264_ps.h:139
if
if(ret)
Definition: filter_design.txt:179
NULL
#define NULL
Definition: coverity.c:32
H264SEIContext
Definition: h264_sei.h:177
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:125
H264SEIUnregistered
Definition: h264_sei.h:122
SPS
Sequence parameter set.
Definition: h264_ps.h:44
decode_registered_user_data_closed_caption
static int decode_registered_user_data_closed_caption(H264SEIA53Caption *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:154
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
H264SEIGreenMetaData
Definition: h264_sei.h:159
H264SEIRecoveryPoint
Definition: h264_sei.h:126
h264_ps.h
ff_h264_sei_stereo_mode
const char * ff_h264_sei_stereo_mode(const H264SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
Definition: h264_sei.c:479
H264SEIPictureTiming
Definition: h264_sei.h:81
H264SEIFramePacking
Definition: h264_sei.h:142
size
int size
Definition: twinvq_data.h:11134
MKBETAG
#define MKBETAG(a, b, c, d)
Definition: common.h:367
decode_unregistered_user_data
static int decode_unregistered_user_data(H264SEIUnregistered *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:244
decode_registered_user_data
static int decode_registered_user_data(H264SEIContext *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:209
MAX_LOG2_MAX_FRAME_NUM
#define MAX_LOG2_MAX_FRAME_NUM
Definition: h264_ps.h:39
H264_SEI_FPA_TYPE_INTERLEAVE_COLUMN
@ H264_SEI_FPA_TYPE_INTERLEAVE_COLUMN
Definition: h264_sei.h:62
H264_SEI_TYPE_USER_DATA_UNREGISTERED
@ H264_SEI_TYPE_USER_DATA_UNREGISTERED
unregistered user data
Definition: h264_sei.h:33
H264_SEI_TYPE_FRAME_PACKING
@ H264_SEI_TYPE_FRAME_PACKING
frame packing arrangement
Definition: h264_sei.h:35
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:538
decode_green_metadata
static int decode_green_metadata(H264SEIGreenMetaData *h, GetBitContext *gb)
Definition: h264_sei.c:371
decode_alternative_transfer
static int decode_alternative_transfer(H264SEIAlternativeTransfer *h, GetBitContext *gb)
Definition: h264_sei.c:396
H264_SEI_PIC_STRUCT_FRAME_TRIPLING
@ H264_SEI_PIC_STRUCT_FRAME_TRIPLING
8: frame tripling
Definition: h264_sei.h:54
flag
#define flag(name)
Definition: cbs_av1.c:557
h264_sei.h
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
H264SEITimeCode
Definition: h264_sei.h:70
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:446
uint8_t
uint8_t
Definition: audio_convert.c:194
H264SEIBufferingPeriod
Definition: h264_sei.h:137
H264_SEI_FPA_TYPE_INTERLEAVE_ROW
@ H264_SEI_FPA_TYPE_INTERLEAVE_ROW
Definition: h264_sei.h:63
H264_SEI_TYPE_DISPLAY_ORIENTATION
@ H264_SEI_TYPE_DISPLAY_ORIENTATION
display orientation
Definition: h264_sei.h:36
avcodec.h
ret
ret
Definition: filter_design.txt:187
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:693
get_ue_golomb_31
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:120
H264ParamSets
Definition: h264_ps.h:138
decode_frame_packing_arrangement
static int decode_frame_packing_arrangement(H264SEIFramePacking *h, GetBitContext *gb)
Definition: h264_sei.c:326
H264SEIDisplayOrientation
Definition: h264_sei.h:153
MAX_SPS_COUNT
#define MAX_SPS_COUNT
Definition: h264_ps.h:37
tc
#define tc
Definition: regdef.h:69
H264_SEI_TYPE_PIC_TIMING
@ H264_SEI_TYPE_PIC_TIMING
picture timing
Definition: h264_sei.h:29
get_ue_golomb_long
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:105
decode_buffering_period
static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:289
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
H264_SEI_FPA_TYPE_2D
@ H264_SEI_FPA_TYPE_2D
Definition: h264_sei.h:67
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
decode_registered_user_data_afd
static int decode_registered_user_data_afd(H264SEIAFD *h, GetBitContext *gb, int size)
Definition: h264_sei.c:133
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
decode_display_orientation
static int decode_display_orientation(H264SEIDisplayOrientation *h, GetBitContext *gb)
Definition: h264_sei.c:354
h
h
Definition: vp9dsp_template.c:2038
user_data
const char const char AVS_ApplyFunc void * user_data
Definition: avisynth_c.h:868
H264_SEI_TYPE_ALTERNATIVE_TRANSFER
@ H264_SEI_TYPE_ALTERNATIVE_TRANSFER
alternative transfer
Definition: h264_sei.h:39