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 / MPEG4 part10 sei decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #include "avcodec.h"
29 #include "golomb.h"
30 #include "h264.h"
31 #include "internal.h"
32 
33 static const uint8_t sei_num_clock_ts_table[9] = {
34  1, 1, 1, 2, 2, 3, 3, 2, 3
35 };
36 
38 {
39  h->sei_recovery_frame_cnt = -1;
40  h->sei_dpb_output_delay = 0;
41  h->sei_cpb_removal_delay = -1;
44 }
45 
47 {
48  SPS *sps = &h->sps;
49  int i;
50 
51  for (i = 0; i<MAX_SPS_COUNT; i++)
52  if (!sps->log2_max_frame_num && h->sps_buffers[i])
53  sps = h->sps_buffers[i];
54 
60  }
61  if (sps->pic_struct_present_flag) {
62  unsigned int i, num_clock_ts;
63 
64  h->sei_pic_struct = get_bits(&h->gb, 4);
65  h->sei_ct_type = 0;
66 
68  return AVERROR_INVALIDDATA;
69 
70  num_clock_ts = sei_num_clock_ts_table[h->sei_pic_struct];
71 
72  for (i = 0; i < num_clock_ts; i++) {
73  if (get_bits(&h->gb, 1)) { /* clock_timestamp_flag */
74  unsigned int full_timestamp_flag;
75 
76  h->sei_ct_type |= 1 << get_bits(&h->gb, 2);
77  skip_bits(&h->gb, 1); /* nuit_field_based_flag */
78  skip_bits(&h->gb, 5); /* counting_type */
79  full_timestamp_flag = get_bits(&h->gb, 1);
80  skip_bits(&h->gb, 1); /* discontinuity_flag */
81  skip_bits(&h->gb, 1); /* cnt_dropped_flag */
82  skip_bits(&h->gb, 8); /* n_frames */
83  if (full_timestamp_flag) {
84  skip_bits(&h->gb, 6); /* seconds_value 0..59 */
85  skip_bits(&h->gb, 6); /* minutes_value 0..59 */
86  skip_bits(&h->gb, 5); /* hours_value 0..23 */
87  } else {
88  if (get_bits(&h->gb, 1)) { /* seconds_flag */
89  skip_bits(&h->gb, 6); /* seconds_value range 0..59 */
90  if (get_bits(&h->gb, 1)) { /* minutes_flag */
91  skip_bits(&h->gb, 6); /* minutes_value 0..59 */
92  if (get_bits(&h->gb, 1)) /* hours_flag */
93  skip_bits(&h->gb, 5); /* hours_value 0..23 */
94  }
95  }
96  }
97  if (sps->time_offset_length > 0)
98  skip_bits(&h->gb,
99  sps->time_offset_length); /* time_offset */
100  }
101  }
102 
103  if (h->avctx->debug & FF_DEBUG_PICT_INFO)
104  av_log(h->avctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n",
105  h->sei_ct_type, h->sei_pic_struct);
106  }
107  return 0;
108 }
109 
111 {
112  uint32_t user_identifier;
113  int dtg_active_format;
114 
115  if (size < 7)
116  return -1;
117  size -= 7;
118 
119  skip_bits(&h->gb, 8); // country_code
120  skip_bits(&h->gb, 16); // provider_code
121  user_identifier = get_bits_long(&h->gb, 32);
122 
123  switch (user_identifier) {
124  case 0x44544731: // "DTG1" - AFD_data
125  if (size < 1)
126  return -1;
127  skip_bits(&h->gb, 1);
128  if (get_bits(&h->gb, 1)) {
129  skip_bits(&h->gb, 6);
130  if (size < 2)
131  return -1;
132  skip_bits(&h->gb, 4);
133  dtg_active_format = get_bits(&h->gb, 4);
134  h->avctx->dtg_active_format = dtg_active_format;
135  } else {
136  skip_bits(&h->gb, 6);
137  }
138  break;
139  default:
140  skip_bits(&h->gb, size * 8);
141  break;
142  }
143 
144  return 0;
145 }
146 
148 {
149  uint8_t user_data[16 + 256];
150  int e, build, i;
151 
152  if (size < 16)
153  return AVERROR_INVALIDDATA;
154 
155  for (i = 0; i < sizeof(user_data) - 1 && i < size; i++)
156  user_data[i] = get_bits(&h->gb, 8);
157 
158  user_data[i] = 0;
159  e = sscanf(user_data + 16, "x264 - core %d", &build);
160  if (e == 1 && build > 0)
161  h->x264_build = build;
162  if (e == 1 && build == 1 && !strncmp(user_data+16, "x264 - core 0000", 16))
163  h->x264_build = 67;
164 
165  if (h->avctx->debug & FF_DEBUG_BUGS)
166  av_log(h->avctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data + 16);
167 
168  for (; i < size; i++)
169  skip_bits(&h->gb, 8);
170 
171  return 0;
172 }
173 
175 {
177 
178  /* 1b exact_match_flag,
179  * 1b broken_link_flag,
180  * 2b changing_slice_group_idc */
181  skip_bits(&h->gb, 4);
182 
183  if (h->avctx->debug & FF_DEBUG_PICT_INFO)
184  av_log(h->avctx, AV_LOG_DEBUG, "sei_recovery_frame_cnt: %d\n", h->sei_recovery_frame_cnt);
185 
186  return 0;
187 }
188 
190 {
191  unsigned int sps_id;
192  int sched_sel_idx;
193  SPS *sps;
194 
195  sps_id = get_ue_golomb_31(&h->gb);
196  if (sps_id > 31 || !h->sps_buffers[sps_id]) {
198  "non-existing SPS %d referenced in buffering period\n", sps_id);
199  return AVERROR_INVALIDDATA;
200  }
201  sps = h->sps_buffers[sps_id];
202 
203  // NOTE: This is really so duplicated in the standard... See H.264, D.1.1
205  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
206  h->initial_cpb_removal_delay[sched_sel_idx] =
208  // initial_cpb_removal_delay_offset
210  }
211  }
213  for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
214  h->initial_cpb_removal_delay[sched_sel_idx] =
216  // initial_cpb_removal_delay_offset
218  }
219  }
220 
222  return 0;
223 }
224 
226 {
230 
231  if (h->sei_frame_packing_present) {
238 
239  // the following skips: spatial_flipping_flag, frame0_flipped_flag,
240  // field_views_flag, current_frame_is_frame0_flag,
241  // frame0_self_contained_flag, frame1_self_contained_flag
242  skip_bits(&h->gb, 6);
243 
245  skip_bits(&h->gb, 16); // frame[01]_grid_position_[xy]
246  skip_bits(&h->gb, 8); // frame_packing_arrangement_reserved_byte
247  h->sei_fpa.frame_packing_arrangement_repetition_period = get_ue_golomb(&h->gb) /* frame_packing_arrangement_repetition_period */;
248  }
249  skip_bits1(&h->gb); // frame_packing_arrangement_extension_flag
250 
251  if (h->avctx->debug & FF_DEBUG_PICT_INFO)
252  av_log(h->avctx, AV_LOG_DEBUG, "SEI FPA %d %d %d %d %d %d\n",
259 
260  return 0;
261 }
262 
264 {
265  while (get_bits_left(&h->gb) > 16) {
266  int type = 0;
267  unsigned size = 0;
268  unsigned next;
269  int ret = 0;
270 
271  do {
272  if (get_bits_left(&h->gb) < 8)
273  return AVERROR_INVALIDDATA;
274  type += show_bits(&h->gb, 8);
275  } while (get_bits(&h->gb, 8) == 255);
276 
277  do {
278  if (get_bits_left(&h->gb) < 8)
279  return AVERROR_INVALIDDATA;
280  size += show_bits(&h->gb, 8);
281  } while (get_bits(&h->gb, 8) == 255);
282 
284  av_log(h->avctx, AV_LOG_DEBUG, "SEI %d len:%d\n", type, size);
285 
286  if (size > get_bits_left(&h->gb) / 8) {
287  av_log(h->avctx, AV_LOG_ERROR, "SEI type %d size %d truncated at %d\n",
288  type, 8*size, get_bits_left(&h->gb));
289  return AVERROR_INVALIDDATA;
290  }
291  next = get_bits_count(&h->gb) + 8 * size;
292 
293  switch (type) {
294  case SEI_TYPE_PIC_TIMING: // Picture timing SEI
295  ret = decode_picture_timing(h);
296  if (ret < 0)
297  return ret;
298  break;
300  if (decode_user_data_itu_t_t35(h, size) < 0)
301  return -1;
302  break;
304  ret = decode_unregistered_user_data(h, size);
305  if (ret < 0)
306  return ret;
307  break;
309  ret = decode_recovery_point(h);
310  if (ret < 0)
311  return ret;
312  break;
314  ret = decode_buffering_period(h);
315  if (ret < 0)
316  return ret;
317  break;
320  if (ret < 0)
321  return ret;
322  break;
323  default:
324  av_log(h->avctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
325  }
326  skip_bits_long(&h->gb, next - get_bits_count(&h->gb));
327 
328  // FIXME check bits here
329  align_get_bits(&h->gb);
330  }
331 
332  return 0;
333 }
334 
336 {
341  return "checkerboard_rl";
342  else
343  return "checkerboard_lr";
346  return "col_interleaved_rl";
347  else
348  return "col_interleaved_lr";
351  return "row_interleaved_rl";
352  else
353  return "row_interleaved_lr";
356  return "right_left";
357  else
358  return "left_right";
361  return "bottom_top";
362  else
363  return "top_bottom";
366  return "block_rl";
367  else
368  return "block_lr";
369  case SEI_FPA_TYPE_2D:
370  default:
371  return "mono";
372  }
373  } else if (h->sei_fpa.frame_packing_arrangement_cancel_flag == 1) {
374  return "mono";
375  } else {
376  return NULL;
377  }
378 }