FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 {
44 
47 
48  h->picture_timing.present = 0;
50  h->frame_packing.present = 0;
52  h->afd.present = 0;
53 
56 }
57 
59  const H264ParamSets *ps, void *logctx)
60 {
61  int i;
62  const SPS *sps = ps->sps;
63 
64  for (i = 0; i<MAX_SPS_COUNT; i++)
65  if ((!sps || !sps->log2_max_frame_num) && ps->sps_list[i])
66  sps = (const SPS *)ps->sps_list[i]->data;
67 
68  if (!sps) {
69  av_log(logctx, AV_LOG_ERROR, "SPS unavailable in decode_picture_timing\n");
70  return AVERROR_PS_NOT_FOUND;
71  }
72 
77  }
78  if (sps->pic_struct_present_flag) {
79  unsigned int i, num_clock_ts;
80 
81  h->pic_struct = get_bits(gb, 4);
82  h->ct_type = 0;
83 
85  return AVERROR_INVALIDDATA;
86 
87  num_clock_ts = sei_num_clock_ts_table[h->pic_struct];
88 
89  for (i = 0; i < num_clock_ts; i++) {
90  if (get_bits(gb, 1)) { /* clock_timestamp_flag */
91  unsigned int full_timestamp_flag;
92 
93  h->ct_type |= 1 << get_bits(gb, 2);
94  skip_bits(gb, 1); /* nuit_field_based_flag */
95  skip_bits(gb, 5); /* counting_type */
96  full_timestamp_flag = get_bits(gb, 1);
97  skip_bits(gb, 1); /* discontinuity_flag */
98  skip_bits(gb, 1); /* cnt_dropped_flag */
99  skip_bits(gb, 8); /* n_frames */
100  if (full_timestamp_flag) {
101  skip_bits(gb, 6); /* seconds_value 0..59 */
102  skip_bits(gb, 6); /* minutes_value 0..59 */
103  skip_bits(gb, 5); /* hours_value 0..23 */
104  } else {
105  if (get_bits(gb, 1)) { /* seconds_flag */
106  skip_bits(gb, 6); /* seconds_value range 0..59 */
107  if (get_bits(gb, 1)) { /* minutes_flag */
108  skip_bits(gb, 6); /* minutes_value 0..59 */
109  if (get_bits(gb, 1)) /* hours_flag */
110  skip_bits(gb, 5); /* hours_value 0..23 */
111  }
112  }
113  }
114  if (sps->time_offset_length > 0)
115  skip_bits(gb,
116  sps->time_offset_length); /* time_offset */
117  }
118  }
119 
120  av_log(logctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n",
121  h->ct_type, h->pic_struct);
122  }
123 
124  h->present = 1;
125  return 0;
126 }
127 
129 {
130  int flag;
131 
132  if (size-- < 1)
133  return AVERROR_INVALIDDATA;
134  skip_bits(gb, 1); // 0
135  flag = get_bits(gb, 1); // active_format_flag
136  skip_bits(gb, 6); // reserved
137 
138  if (flag) {
139  if (size-- < 1)
140  return AVERROR_INVALIDDATA;
141  skip_bits(gb, 4); // reserved
143  h->present = 1;
144  }
145 
146  return 0;
147 }
148 
150  GetBitContext *gb, void *logctx,
151  int size)
152 {
153  int flag;
154  int user_data_type_code;
155  int cc_count;
156 
157  if (size < 3)
158  return AVERROR(EINVAL);
159 
160  user_data_type_code = get_bits(gb, 8);
161  if (user_data_type_code == 0x3) {
162  skip_bits(gb, 1); // reserved
163 
164  flag = get_bits(gb, 1); // process_cc_data_flag
165  if (flag) {
166  skip_bits(gb, 1); // zero bit
167  cc_count = get_bits(gb, 5);
168  skip_bits(gb, 8); // reserved
169  size -= 2;
170 
171  if (cc_count && size >= cc_count * 3) {
172  const uint64_t new_size = (h->a53_caption_size + cc_count
173  * UINT64_C(3));
174  int i, ret;
175 
176  if (new_size > INT_MAX)
177  return AVERROR(EINVAL);
178 
179  /* Allow merging of the cc data from two fields. */
180  ret = av_reallocp(&h->a53_caption, new_size);
181  if (ret < 0)
182  return ret;
183 
184  for (i = 0; i < cc_count; i++) {
185  h->a53_caption[h->a53_caption_size++] = get_bits(gb, 8);
186  h->a53_caption[h->a53_caption_size++] = get_bits(gb, 8);
187  h->a53_caption[h->a53_caption_size++] = get_bits(gb, 8);
188  }
189 
190  skip_bits(gb, 8); // marker_bits
191  }
192  }
193  } else {
194  int i;
195  for (i = 0; i < size - 1; i++)
196  skip_bits(gb, 8);
197  }
198 
199  return 0;
200 }
201 
203  void *logctx, int size)
204 {
205  uint32_t country_code;
206  uint32_t user_identifier;
207 
208  if (size < 7)
209  return AVERROR_INVALIDDATA;
210  size -= 7;
211 
212  country_code = get_bits(gb, 8); // itu_t_t35_country_code
213  if (country_code == 0xFF) {
214  skip_bits(gb, 8); // itu_t_t35_country_code_extension_byte
215  size--;
216  }
217 
218  /* itu_t_t35_payload_byte follows */
219  skip_bits(gb, 8); // terminal provider code
220  skip_bits(gb, 8); // terminal provider oriented code
221  user_identifier = get_bits_long(gb, 32);
222 
223  switch (user_identifier) {
224  case MKBETAG('D', 'T', 'G', '1'): // afd_data
225  return decode_registered_user_data_afd(&h->afd, gb, size);
226  case MKBETAG('G', 'A', '9', '4'): // closed captions
228  logctx, size);
229  default:
230  skip_bits(gb, size * 8);
231  break;
232  }
233 
234  return 0;
235 }
236 
238  void *logctx, int size)
239 {
241  int e, build, i;
242 
243  if (size < 16 || size >= INT_MAX - 16)
244  return AVERROR_INVALIDDATA;
245 
246  user_data = av_malloc(16 + size + 1);
247  if (!user_data)
248  return AVERROR(ENOMEM);
249 
250  for (i = 0; i < size + 16; i++)
251  user_data[i] = get_bits(gb, 8);
252 
253  user_data[i] = 0;
254  e = sscanf(user_data + 16, "x264 - core %d", &build);
255  if (e == 1 && build > 0)
256  h->x264_build = build;
257  if (e == 1 && build == 1 && !strncmp(user_data+16, "x264 - core 0000", 16))
258  h->x264_build = 67;
259 
260  if (strlen(user_data + 16) > 0)
261  av_log(logctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data + 16);
262 
263  av_free(user_data);
264  return 0;
265 }
266 
268 {
270 
271  /* 1b exact_match_flag,
272  * 1b broken_link_flag,
273  * 2b changing_slice_group_idc */
274  skip_bits(gb, 4);
275 
276  return 0;
277 }
278 
280  const H264ParamSets *ps, void *logctx)
281 {
282  unsigned int sps_id;
283  int sched_sel_idx;
284  const SPS *sps;
285 
286  sps_id = get_ue_golomb_31(gb);
287  if (sps_id > 31 || !ps->sps_list[sps_id]) {
288  av_log(logctx, AV_LOG_ERROR,
289  "non-existing SPS %d referenced in buffering period\n", sps_id);
290  return sps_id > 31 ? AVERROR_INVALIDDATA : AVERROR_PS_NOT_FOUND;
291  }
292  sps = (const SPS*)ps->sps_list[sps_id]->data;
293 
294  // NOTE: This is really so duplicated in the standard... See H.264, D.1.1
296  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
297  h->initial_cpb_removal_delay[sched_sel_idx] =
299  // initial_cpb_removal_delay_offset
301  }
302  }
304  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
305  h->initial_cpb_removal_delay[sched_sel_idx] =
307  // initial_cpb_removal_delay_offset
309  }
310  }
311 
312  h->present = 1;
313  return 0;
314 }
315 
317  GetBitContext *gb)
318 {
322 
323  if (h->present) {
327 
328  // the following skips: spatial_flipping_flag, frame0_flipped_flag,
329  // field_views_flag, current_frame_is_frame0_flag,
330  // frame0_self_contained_flag, frame1_self_contained_flag
331  skip_bits(gb, 6);
332 
334  skip_bits(gb, 16); // frame[01]_grid_position_[xy]
335  skip_bits(gb, 8); // frame_packing_arrangement_reserved_byte
337  }
338  skip_bits1(gb); // frame_packing_arrangement_extension_flag
339 
340  return 0;
341 }
342 
344  GetBitContext *gb)
345 {
346  h->present = !get_bits1(gb);
347 
348  if (h->present) {
349  h->hflip = get_bits1(gb); // hor_flip
350  h->vflip = get_bits1(gb); // ver_flip
351 
352  h->anticlockwise_rotation = get_bits(gb, 16);
353  get_ue_golomb_long(gb); // display_orientation_repetition_period
354  skip_bits1(gb); // display_orientation_extension_flag
355  }
356 
357  return 0;
358 }
359 
361 {
362  h->green_metadata_type = get_bits(gb, 8);
363 
364  if (h->green_metadata_type == 0) {
365  h->period_type = get_bits(gb, 8);
366 
367  if (h->period_type == 2)
368  h->num_seconds = get_bits(gb, 16);
369  else if (h->period_type == 3)
370  h->num_pictures = get_bits(gb, 16);
371 
376 
377  } else if (h->green_metadata_type == 1) {
378  h->xsd_metric_type = get_bits(gb, 8);
379  h->xsd_metric_value = get_bits(gb, 16);
380  }
381 
382  return 0;
383 }
384 
386  const H264ParamSets *ps, void *logctx)
387 {
388  int master_ret = 0;
389 
390  while (get_bits_left(gb) > 16 && show_bits(gb, 16)) {
391  int type = 0;
392  unsigned size = 0;
393  unsigned next;
394  int ret = 0;
395 
396  do {
397  if (get_bits_left(gb) < 8)
398  return AVERROR_INVALIDDATA;
399  type += show_bits(gb, 8);
400  } while (get_bits(gb, 8) == 255);
401 
402  do {
403  if (get_bits_left(gb) < 8)
404  return AVERROR_INVALIDDATA;
405  size += show_bits(gb, 8);
406  } while (get_bits(gb, 8) == 255);
407 
408  if (size > get_bits_left(gb) / 8) {
409  av_log(logctx, AV_LOG_ERROR, "SEI type %d size %d truncated at %d\n",
410  type, 8*size, get_bits_left(gb));
411  return AVERROR_INVALIDDATA;
412  }
413  next = get_bits_count(gb) + 8 * size;
414 
415  switch (type) {
416  case SEI_TYPE_PIC_TIMING: // Picture timing SEI
417  ret = decode_picture_timing(&h->picture_timing, gb, ps, logctx);
418  break;
420  ret = decode_registered_user_data(h, gb, logctx, size);
421  break;
423  ret = decode_unregistered_user_data(&h->unregistered, gb, logctx, size);
424  break;
426  ret = decode_recovery_point(&h->recovery_point, gb);
427  break;
429  ret = decode_buffering_period(&h->buffering_period, gb, ps, logctx);
430  break;
433  break;
436  break;
438  ret = decode_green_metadata(&h->green_metadata, gb);
439  break;
440  default:
441  av_log(logctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
442  }
443  if (ret < 0 && ret != AVERROR_PS_NOT_FOUND)
444  return ret;
445  if (ret < 0)
446  master_ret = ret;
447 
448  skip_bits_long(gb, next - get_bits_count(gb));
449 
450  // FIXME check bits here
451  align_get_bits(gb);
452  }
453 
454  return master_ret;
455 }
456 
458 {
460  switch (h->frame_packing_arrangement_type) {
462  if (h->content_interpretation_type == 2)
463  return "checkerboard_rl";
464  else
465  return "checkerboard_lr";
467  if (h->content_interpretation_type == 2)
468  return "col_interleaved_rl";
469  else
470  return "col_interleaved_lr";
472  if (h->content_interpretation_type == 2)
473  return "row_interleaved_rl";
474  else
475  return "row_interleaved_lr";
477  if (h->content_interpretation_type == 2)
478  return "right_left";
479  else
480  return "left_right";
482  if (h->content_interpretation_type == 2)
483  return "bottom_top";
484  else
485  return "top_bottom";
487  if (h->content_interpretation_type == 2)
488  return "block_rl";
489  else
490  return "block_lr";
491  case SEI_FPA_TYPE_2D:
492  default:
493  return "mono";
494  }
495  } else if (h->frame_packing_arrangement_cancel_flag == 1) {
496  return "mono";
497  } else {
498  return NULL;
499  }
500 }
#define NULL
Definition: coverity.c:32
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
int recovery_frame_cnt
recovery_frame_cnt
Definition: h264_sei.h:110
#define MAX_SPS_COUNT
Definition: h264_ps.h:37
uint16_t num_pictures
Definition: h264_sei.h:138
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:261
AVBufferRef * sps_list[MAX_SPS_COUNT]
Definition: h264_ps.h:138
static void skip_bits_long(GetBitContext *s, int n)
Definition: get_bits.h:204
int frame_packing_arrangement_cancel_flag
is previous arrangement canceled, -1 if never received
Definition: h264_sei.h:121
GreenMPEG information.
Definition: h264_sei.h:35
Sequence parameter set.
Definition: h264_ps.h:43
picture timing
Definition: h264_sei.h:29
int flag
Definition: cpu.c:34
display orientation
Definition: h264_sei.h:34
void ff_h264_sei_uninit(H264SEIContext *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:41
H264SEIDisplayOrientation display_orientation
Definition: h264_sei.h:155
8: frame tripling
Definition: h264_sei.h:50
int frame_packing_arrangement_repetition_period
Definition: h264_sei.h:123
H264SEIGreenMetaData green_metadata
Definition: h264_sei.h:156
const char * ff_h264_sei_stereo_mode(const H264SEIFramePacking *h)
Get stereo_mode string from the h264 frame_packing_arrangement.
Definition: h264_sei.c:457
static int decode_recovery_point(H264SEIRecoveryPoint *h, GetBitContext *gb)
Definition: h264_sei.c:267
uint8_t
uint8_t green_metadata_type
Definition: h264_sei.h:135
#define av_malloc(s)
static int decode_unregistered_user_data(H264SEIUnregistered *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:237
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:199
bitstream reader API header.
ptrdiff_t size
Definition: opengl_enc.c:101
H264SEIAFD afd
Definition: h264_sei.h:149
#define av_log(a,...)
uint16_t num_seconds
Definition: h264_sei.h:137
uint8_t percent_six_tap_filtering
Definition: h264_sei.h:141
SEI_FpaType frame_packing_arrangement_type
Definition: h264_sei.h:122
int frame_packing_arrangement_id
Definition: h264_sei.h:120
int a53_caption_size
Definition: h264_sei.h:94
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:587
H.264 parameter set handling.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
#define AVERROR(e)
Definition: error.h:43
int present
Buffering period SEI flag.
Definition: h264_sei.h:114
int time_offset_length
Definition: h264_ps.h:92
AVS_Value void * user_data
Definition: avisynth_c.h:699
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
registered user data as specified by Rec. ITU-T T.35
Definition: h264_sei.h:30
H264SEIUnregistered unregistered
Definition: h264_sei.h:151
static int decode_registered_user_data_afd(H264SEIAFD *h, GetBitContext *gb, int size)
Definition: h264_sei.c:128
uint8_t active_format_description
Definition: h264_sei.h:90
static int decode_display_orientation(H264SEIDisplayOrientation *h, GetBitContext *gb)
Definition: h264_sei.c:343
uint8_t percent_non_zero_macroblocks
Definition: h264_sei.h:139
recovery point (frame # to decoder sync)
Definition: h264_sei.h:32
int initial_cpb_removal_delay_length
initial_cpb_removal_delay_length_minus1 + 1
Definition: h264_ps.h:94
int ct_type
Bit set of clock types for fields/frames in picture timing SEI message.
Definition: h264_sei.h:75
int initial_cpb_removal_delay[32]
Initial timestamps for CPBs.
Definition: h264_sei.h:115
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:296
buffering period (H.264, D.1.1)
Definition: h264_sei.h:28
int cpb_removal_delay
cpb_removal_delay in picture timing SEI message, see H.264 C.1.2
Definition: h264_sei.h:85
uint8_t * a53_caption
Definition: h264_sei.h:95
static int decode_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:58
int quincunx_sampling_flag
Definition: h264_sei.h:125
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:85
int vcl_hrd_parameters_present_flag
Definition: h264_ps.h:90
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
Definition: mem.c:187
Libavcodec external API header.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:100
SEI_PicStructType pic_struct
Definition: h264_sei.h:68
int dpb_output_delay_length
dpb_output_delay_length_minus1 + 1
Definition: h264_ps.h:96
uint8_t * data
The data buffer.
Definition: buffer.h:89
H264SEIA53Caption a53_caption
Definition: h264_sei.h:150
GLint GLenum type
Definition: opengl_enc.c:105
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:313
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:338
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:306
int content_interpretation_type
Definition: h264_sei.h:124
H264SEIBufferingPeriod buffering_period
Definition: h264_sei.h:153
#define AVERROR_PS_NOT_FOUND
Definition: h264_sei.c:35
uint8_t percent_intra_coded_macroblocks
Definition: h264_sei.h:140
const SPS * sps
Definition: h264_ps.h:145
H264SEIPictureTiming picture_timing
Definition: h264_sei.h:148
H264SEIRecoveryPoint recovery_point
Definition: h264_sei.h:152
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:346
static const uint8_t sei_num_clock_ts_table[9]
Definition: h264_sei.c:37
int pic_struct_present_flag
Definition: h264_ps.h:91
static int decode_frame_packing_arrangement(H264SEIFramePacking *h, GetBitContext *gb)
Definition: h264_sei.c:316
uint8_t xsd_metric_type
Definition: h264_sei.h:143
uint16_t xsd_metric_value
Definition: h264_sei.h:144
common internal api header.
if(ret< 0)
Definition: vf_mcdeint.c:282
int dpb_output_delay
dpb_output_delay in picture timing SEI message, see H.264 C.2.2
Definition: h264_sei.h:80
int nal_hrd_parameters_present_flag
Definition: h264_ps.h:89
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
Definition: h264_ps.h:49
H264SEIFramePacking frame_packing
Definition: h264_sei.h:154
unregistered user data
Definition: h264_sei.h:31
#define MKBETAG(a, b, c, d)
Definition: common.h:343
int present
Definition: h264_sei.h:89
#define av_free(p)
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:464
int cpb_cnt
See H.264 E.1.2.
Definition: h264_ps.h:93
frame packing arrangement
Definition: h264_sei.h:33
#define av_freep(p)
int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:385
static int decode_registered_user_data(H264SEIContext *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:202
int cpb_removal_delay_length
cpb_removal_delay_length_minus1 + 1
Definition: h264_ps.h:95
static int decode_green_metadata(H264SEIGreenMetaData *h, GetBitContext *gb)
Definition: h264_sei.c:360
exp golomb vlc stuff
static int decode_registered_user_data_closed_caption(H264SEIA53Caption *h, GetBitContext *gb, void *logctx, int size)
Definition: h264_sei.c:149
uint8_t percent_alpha_point_deblocking_instance
Definition: h264_sei.h:142
static int decode_buffering_period(H264SEIBufferingPeriod *h, GetBitContext *gb, const H264ParamSets *ps, void *logctx)
Definition: h264_sei.c:279