h264_ps.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... parameter set 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 parameter set decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #include "libavutil/imgutils.h"
29 #include "internal.h"
30 #include "avcodec.h"
31 #include "h264.h"
32 #include "h264data.h" //FIXME FIXME FIXME (just for zigzag_scan)
33 #include "golomb.h"
34 
35 
36 //#undef NDEBUG
37 #include <assert.h>
38 
39 #define MAX_LOG2_MAX_FRAME_NUM (12 + 4)
40 #define MIN_LOG2_MAX_FRAME_NUM 4
41 
42 static const AVRational pixel_aspect[17]={
43  {0, 1},
44  {1, 1},
45  {12, 11},
46  {10, 11},
47  {16, 11},
48  {40, 33},
49  {24, 11},
50  {20, 11},
51  {32, 11},
52  {80, 33},
53  {18, 11},
54  {15, 11},
55  {64, 33},
56  {160,99},
57  {4, 3},
58  {3, 2},
59  {2, 1},
60 };
61 
62 #define QP(qP,depth) ( (qP)+6*((depth)-8) )
63 
64 #define CHROMA_QP_TABLE_END(d) \
65  QP(0,d), QP(1,d), QP(2,d), QP(3,d), QP(4,d), QP(5,d),\
66  QP(6,d), QP(7,d), QP(8,d), QP(9,d), QP(10,d), QP(11,d),\
67  QP(12,d), QP(13,d), QP(14,d), QP(15,d), QP(16,d), QP(17,d),\
68  QP(18,d), QP(19,d), QP(20,d), QP(21,d), QP(22,d), QP(23,d),\
69  QP(24,d), QP(25,d), QP(26,d), QP(27,d), QP(28,d), QP(29,d),\
70  QP(29,d), QP(30,d), QP(31,d), QP(32,d), QP(32,d), QP(33,d),\
71  QP(34,d), QP(34,d), QP(35,d), QP(35,d), QP(36,d), QP(36,d),\
72  QP(37,d), QP(37,d), QP(37,d), QP(38,d), QP(38,d), QP(38,d),\
73  QP(39,d), QP(39,d), QP(39,d), QP(39,d)
74 
76  {
78  },
79  {
80  0, 1, 2, 3, 4, 5,
82  },
83  {
84  0, 1, 2, 3, 4, 5,
85  6, 7, 8, 9, 10, 11,
87  },
88  {
89  0, 1, 2, 3, 4, 5,
90  6, 7, 8, 9, 10, 11,
91  12,13,14,15, 16, 17,
93  },
94  {
95  0, 1, 2, 3, 4, 5,
96  6, 7, 8, 9, 10, 11,
97  12,13,14,15, 16, 17,
98  18,19,20,21, 22, 23,
100  },
101  {
102  0, 1, 2, 3, 4, 5,
103  6, 7, 8, 9, 10, 11,
104  12,13,14,15, 16, 17,
105  18,19,20,21, 22, 23,
106  24,25,26,27, 28, 29,
108  },
109  {
110  0, 1, 2, 3, 4, 5,
111  6, 7, 8, 9, 10, 11,
112  12,13,14,15, 16, 17,
113  18,19,20,21, 22, 23,
114  24,25,26,27, 28, 29,
115  30,31,32,33, 34, 35,
117  },
118 };
119 
120 static const uint8_t default_scaling4[2][16]={
121 { 6,13,20,28,
122  13,20,28,32,
123  20,28,32,37,
124  28,32,37,42
125 },{
126  10,14,20,24,
127  14,20,24,27,
128  20,24,27,30,
129  24,27,30,34
130 }};
131 
132 static const uint8_t default_scaling8[2][64]={
133 { 6,10,13,16,18,23,25,27,
134  10,11,16,18,23,25,27,29,
135  13,16,18,23,25,27,29,31,
136  16,18,23,25,27,29,31,33,
137  18,23,25,27,29,31,33,36,
138  23,25,27,29,31,33,36,38,
139  25,27,29,31,33,36,38,40,
140  27,29,31,33,36,38,40,42
141 },{
142  9,13,15,17,19,21,22,24,
143  13,13,17,19,21,22,24,25,
144  15,17,19,21,22,24,25,27,
145  17,19,21,22,24,25,27,28,
146  19,21,22,24,25,27,28,30,
147  21,22,24,25,27,28,30,32,
148  22,24,25,27,28,30,32,33,
149  24,25,27,28,30,32,33,35
150 }};
151 
152 static inline int decode_hrd_parameters(H264Context *h, SPS *sps){
153  int cpb_count, i;
154  cpb_count = get_ue_golomb_31(&h->gb) + 1;
155 
156  if(cpb_count > 32U){
157  av_log(h->avctx, AV_LOG_ERROR, "cpb_count %d invalid\n", cpb_count);
158  return -1;
159  }
160 
161  get_bits(&h->gb, 4); /* bit_rate_scale */
162  get_bits(&h->gb, 4); /* cpb_size_scale */
163  for(i=0; i<cpb_count; i++){
164  get_ue_golomb_long(&h->gb); /* bit_rate_value_minus1 */
165  get_ue_golomb_long(&h->gb); /* cpb_size_value_minus1 */
166  get_bits1(&h->gb); /* cbr_flag */
167  }
168  sps->initial_cpb_removal_delay_length = get_bits(&h->gb, 5) + 1;
169  sps->cpb_removal_delay_length = get_bits(&h->gb, 5) + 1;
170  sps->dpb_output_delay_length = get_bits(&h->gb, 5) + 1;
171  sps->time_offset_length = get_bits(&h->gb, 5);
172  sps->cpb_cnt = cpb_count;
173  return 0;
174 }
175 
176 static inline int decode_vui_parameters(H264Context *h, SPS *sps){
177  int aspect_ratio_info_present_flag;
178  unsigned int aspect_ratio_idc;
179 
180  aspect_ratio_info_present_flag= get_bits1(&h->gb);
181 
182  if( aspect_ratio_info_present_flag ) {
183  aspect_ratio_idc= get_bits(&h->gb, 8);
184  if( aspect_ratio_idc == EXTENDED_SAR ) {
185  sps->sar.num= get_bits(&h->gb, 16);
186  sps->sar.den= get_bits(&h->gb, 16);
187  }else if(aspect_ratio_idc < FF_ARRAY_ELEMS(pixel_aspect)){
188  sps->sar= pixel_aspect[aspect_ratio_idc];
189  }else{
190  av_log(h->avctx, AV_LOG_ERROR, "illegal aspect ratio\n");
191  return -1;
192  }
193  }else{
194  sps->sar.num=
195  sps->sar.den= 0;
196  }
197 // s->avctx->aspect_ratio= sar_width*s->width / (float)(s->height*sar_height);
198 
199  if(get_bits1(&h->gb)){ /* overscan_info_present_flag */
200  get_bits1(&h->gb); /* overscan_appropriate_flag */
201  }
202 
205  get_bits(&h->gb, 3); /* video_format */
206  sps->full_range = get_bits1(&h->gb); /* video_full_range_flag */
207 
210  sps->color_primaries = get_bits(&h->gb, 8); /* colour_primaries */
211  sps->color_trc = get_bits(&h->gb, 8); /* transfer_characteristics */
212  sps->colorspace = get_bits(&h->gb, 8); /* matrix_coefficients */
213  if (sps->color_primaries >= AVCOL_PRI_NB)
215  if (sps->color_trc >= AVCOL_TRC_NB)
217  if (sps->colorspace >= AVCOL_SPC_NB)
219  }
220  }
221 
222  if(get_bits1(&h->gb)){ /* chroma_location_info_present_flag */
223  h->avctx->chroma_sample_location = get_ue_golomb(&h->gb)+1; /* chroma_sample_location_type_top_field */
224  get_ue_golomb(&h->gb); /* chroma_sample_location_type_bottom_field */
225  }
226 
228  if(sps->timing_info_present_flag){
229  sps->num_units_in_tick = get_bits_long(&h->gb, 32);
230  sps->time_scale = get_bits_long(&h->gb, 32);
231  if(!sps->num_units_in_tick || !sps->time_scale){
232  av_log(h->avctx, AV_LOG_ERROR, "time_scale/num_units_in_tick invalid or unsupported (%d/%d)\n", sps->time_scale, sps->num_units_in_tick);
233  return -1;
234  }
235  sps->fixed_frame_rate_flag = get_bits1(&h->gb);
236  }
237 
240  if(decode_hrd_parameters(h, sps) < 0)
241  return -1;
244  if(decode_hrd_parameters(h, sps) < 0)
245  return -1;
247  get_bits1(&h->gb); /* low_delay_hrd_flag */
249  if(!get_bits_left(&h->gb))
250  return 0;
253  get_bits1(&h->gb); /* motion_vectors_over_pic_boundaries_flag */
254  get_ue_golomb(&h->gb); /* max_bytes_per_pic_denom */
255  get_ue_golomb(&h->gb); /* max_bits_per_mb_denom */
256  get_ue_golomb(&h->gb); /* log2_max_mv_length_horizontal */
257  get_ue_golomb(&h->gb); /* log2_max_mv_length_vertical */
259  get_ue_golomb(&h->gb); /*max_dec_frame_buffering*/
260 
261  if (get_bits_left(&h->gb) < 0) {
262  sps->num_reorder_frames=0;
264  }
265 
266  if(sps->num_reorder_frames > 16U /*max_dec_frame_buffering || max_dec_frame_buffering > 16*/){
267  av_log(h->avctx, AV_LOG_ERROR, "illegal num_reorder_frames %d\n", sps->num_reorder_frames);
268  return -1;
269  }
270  }
271 
272  if (get_bits_left(&h->gb) < 0) {
273  av_log(h->avctx, AV_LOG_ERROR, "Overread VUI by %d bits\n", -get_bits_left(&h->gb));
274  return AVERROR_INVALIDDATA;
275  }
276 
277  return 0;
278 }
279 
280 static void decode_scaling_list(H264Context *h, uint8_t *factors, int size,
281  const uint8_t *jvt_list, const uint8_t *fallback_list){
282  int i, last = 8, next = 8;
283  const uint8_t *scan = size == 16 ? zigzag_scan : ff_zigzag_direct;
284  if(!get_bits1(&h->gb)) /* matrix not written, we use the predicted one */
285  memcpy(factors, fallback_list, size*sizeof(uint8_t));
286  else
287  for(i=0;i<size;i++){
288  if(next)
289  next = (last + get_se_golomb(&h->gb)) & 0xff;
290  if(!i && !next){ /* matrix not written, we use the preset one */
291  memcpy(factors, jvt_list, size*sizeof(uint8_t));
292  break;
293  }
294  last = factors[scan[i]] = next ? next : last;
295  }
296 }
297 
298 static void decode_scaling_matrices(H264Context *h, SPS *sps, PPS *pps, int is_sps,
299  uint8_t (*scaling_matrix4)[16], uint8_t (*scaling_matrix8)[64]){
300  int fallback_sps = !is_sps && sps->scaling_matrix_present;
301  const uint8_t *fallback[4] = {
302  fallback_sps ? sps->scaling_matrix4[0] : default_scaling4[0],
303  fallback_sps ? sps->scaling_matrix4[3] : default_scaling4[1],
304  fallback_sps ? sps->scaling_matrix8[0] : default_scaling8[0],
305  fallback_sps ? sps->scaling_matrix8[3] : default_scaling8[1]
306  };
307  if(get_bits1(&h->gb)){
308  sps->scaling_matrix_present |= is_sps;
309  decode_scaling_list(h,scaling_matrix4[0],16,default_scaling4[0],fallback[0]); // Intra, Y
310  decode_scaling_list(h,scaling_matrix4[1],16,default_scaling4[0],scaling_matrix4[0]); // Intra, Cr
311  decode_scaling_list(h,scaling_matrix4[2],16,default_scaling4[0],scaling_matrix4[1]); // Intra, Cb
312  decode_scaling_list(h,scaling_matrix4[3],16,default_scaling4[1],fallback[1]); // Inter, Y
313  decode_scaling_list(h,scaling_matrix4[4],16,default_scaling4[1],scaling_matrix4[3]); // Inter, Cr
314  decode_scaling_list(h,scaling_matrix4[5],16,default_scaling4[1],scaling_matrix4[4]); // Inter, Cb
315  if(is_sps || pps->transform_8x8_mode){
316  decode_scaling_list(h,scaling_matrix8[0],64,default_scaling8[0],fallback[2]); // Intra, Y
317  decode_scaling_list(h,scaling_matrix8[3],64,default_scaling8[1],fallback[3]); // Inter, Y
318  if(sps->chroma_format_idc == 3){
319  decode_scaling_list(h,scaling_matrix8[1],64,default_scaling8[0],scaling_matrix8[0]); // Intra, Cr
320  decode_scaling_list(h,scaling_matrix8[4],64,default_scaling8[1],scaling_matrix8[3]); // Inter, Cr
321  decode_scaling_list(h,scaling_matrix8[2],64,default_scaling8[0],scaling_matrix8[1]); // Intra, Cb
322  decode_scaling_list(h,scaling_matrix8[5],64,default_scaling8[1],scaling_matrix8[4]); // Inter, Cb
323  }
324  }
325  }
326 }
327 
329  int profile_idc, level_idc, constraint_set_flags = 0;
330  unsigned int sps_id;
331  int i, log2_max_frame_num_minus4;
332  SPS *sps;
333 
334  profile_idc= get_bits(&h->gb, 8);
335  constraint_set_flags |= get_bits1(&h->gb) << 0; //constraint_set0_flag
336  constraint_set_flags |= get_bits1(&h->gb) << 1; //constraint_set1_flag
337  constraint_set_flags |= get_bits1(&h->gb) << 2; //constraint_set2_flag
338  constraint_set_flags |= get_bits1(&h->gb) << 3; //constraint_set3_flag
339  constraint_set_flags |= get_bits1(&h->gb) << 4; //constraint_set4_flag
340  constraint_set_flags |= get_bits1(&h->gb) << 5; //constraint_set5_flag
341  get_bits(&h->gb, 2); // reserved
342  level_idc= get_bits(&h->gb, 8);
343  sps_id= get_ue_golomb_31(&h->gb);
344 
345  if(sps_id >= MAX_SPS_COUNT) {
346  av_log(h->avctx, AV_LOG_ERROR, "sps_id (%d) out of range\n", sps_id);
347  return -1;
348  }
349  sps= av_mallocz(sizeof(SPS));
350  if(sps == NULL)
351  return -1;
352 
353  sps->time_offset_length = 24;
354  sps->profile_idc= profile_idc;
355  sps->constraint_set_flags = constraint_set_flags;
356  sps->level_idc= level_idc;
357  sps->full_range = -1;
358 
359  memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));
360  memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));
361  sps->scaling_matrix_present = 0;
362  sps->colorspace = 2; //AVCOL_SPC_UNSPECIFIED
363 
364  if (sps->profile_idc == 100 || sps->profile_idc == 110 ||
365  sps->profile_idc == 122 || sps->profile_idc == 244 ||
366  sps->profile_idc == 44 || sps->profile_idc == 83 ||
367  sps->profile_idc == 86 || sps->profile_idc == 118 ||
368  sps->profile_idc == 128 || sps->profile_idc == 144) {
370  if (sps->chroma_format_idc > 3U) {
371  av_log(h->avctx, AV_LOG_ERROR, "chroma_format_idc %d is illegal\n", sps->chroma_format_idc);
372  goto fail;
373  } else if(sps->chroma_format_idc == 3) {
376  av_log(h->avctx, AV_LOG_ERROR, "separate color planes are not supported\n");
377  goto fail;
378  }
379  }
380  sps->bit_depth_luma = get_ue_golomb(&h->gb) + 8;
381  sps->bit_depth_chroma = get_ue_golomb(&h->gb) + 8;
382  if (sps->bit_depth_luma > 14U || sps->bit_depth_chroma > 14U || sps->bit_depth_luma != sps->bit_depth_chroma) {
383  av_log(h->avctx, AV_LOG_ERROR, "illegal bit depth value (%d, %d)\n",
384  sps->bit_depth_luma, sps->bit_depth_chroma);
385  goto fail;
386  }
387  sps->transform_bypass = get_bits1(&h->gb);
389  }else{
390  sps->chroma_format_idc= 1;
391  sps->bit_depth_luma = 8;
392  sps->bit_depth_chroma = 8;
393  }
394 
395  log2_max_frame_num_minus4 = get_ue_golomb(&h->gb);
396  if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||
397  log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {
399  "log2_max_frame_num_minus4 out of range (0-12): %d\n",
400  log2_max_frame_num_minus4);
401  goto fail;
402  }
403  sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;
404 
405  sps->poc_type= get_ue_golomb_31(&h->gb);
406 
407  if(sps->poc_type == 0){ //FIXME #define
408  unsigned t = get_ue_golomb(&h->gb);
409  if(t>12){
410  av_log(h->avctx, AV_LOG_ERROR, "log2_max_poc_lsb (%d) is out of range\n", t);
411  goto fail;
412  }
413  sps->log2_max_poc_lsb= t + 4;
414  } else if(sps->poc_type == 1){//FIXME #define
418  sps->poc_cycle_length = get_ue_golomb(&h->gb);
419 
420  if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){
421  av_log(h->avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);
422  goto fail;
423  }
424 
425  for(i=0; i<sps->poc_cycle_length; i++)
426  sps->offset_for_ref_frame[i]= get_se_golomb(&h->gb);
427  }else if(sps->poc_type != 2){
428  av_log(h->avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);
429  goto fail;
430  }
431 
433  if (h->avctx->codec_tag == MKTAG('S', 'M', 'V', '2'))
434  sps->ref_frame_count= FFMAX(2, sps->ref_frame_count);
435  if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count > 16U){
436  av_log(h->avctx, AV_LOG_ERROR, "too many reference frames\n");
437  goto fail;
438  }
440  sps->mb_width = get_ue_golomb(&h->gb) + 1;
441  sps->mb_height= get_ue_golomb(&h->gb) + 1;
442  if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||
443  av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, h->avctx)){
444  av_log(h->avctx, AV_LOG_ERROR, "mb_width/height overflow\n");
445  goto fail;
446  }
447 
448  sps->frame_mbs_only_flag= get_bits1(&h->gb);
449  if(!sps->frame_mbs_only_flag)
450  sps->mb_aff= get_bits1(&h->gb);
451  else
452  sps->mb_aff= 0;
453 
455 
456 #ifndef ALLOW_INTERLACE
457  if(sps->mb_aff)
458  av_log(h->avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n");
459 #endif
460  sps->crop= get_bits1(&h->gb);
461  if(sps->crop){
462  int crop_left = get_ue_golomb(&h->gb);
463  int crop_right = get_ue_golomb(&h->gb);
464  int crop_top = get_ue_golomb(&h->gb);
465  int crop_bottom = get_ue_golomb(&h->gb);
466 
468  av_log(h->avctx, AV_LOG_DEBUG, "discarding sps cropping, original "
469  "values are l:%u r:%u t:%u b:%u\n", crop_left, crop_right,
470  crop_top, crop_bottom);
471 
472  sps->crop_left =
473  sps->crop_right =
474  sps->crop_top =
475  sps->crop_bottom = 0;
476  } else {
477  int vsub = (sps->chroma_format_idc == 1) ? 1 : 0;
478  int hsub = (sps->chroma_format_idc == 1 || sps->chroma_format_idc == 2) ? 1 : 0;
479  int step_x = 1 << hsub;
480  int step_y = (2 - sps->frame_mbs_only_flag) << vsub;
481 
482  if (crop_left & (0x1F >> (sps->bit_depth_luma > 8)) &&
483  !(h->avctx->flags & CODEC_FLAG_UNALIGNED)) {
484  crop_left &= ~(0x1F >> (sps->bit_depth_luma > 8));
485  av_log(h->avctx, AV_LOG_WARNING, "Reducing left cropping to %d "
486  "chroma samples to preserve alignment.\n",
487  crop_left);
488  }
489 
490  sps->crop_left = crop_left * step_x;
491  sps->crop_right = crop_right * step_x;
492  sps->crop_top = crop_top * step_y;
493  sps->crop_bottom = crop_bottom * step_y;
494  }
495  }else{
496  sps->crop_left =
497  sps->crop_right =
498  sps->crop_top =
499  sps->crop_bottom= 0;
500  sps->crop = 0;
501  }
502 
504  if( sps->vui_parameters_present_flag )
505  if (decode_vui_parameters(h, sps) < 0)
506  goto fail;
507 
508  if(!sps->sar.den)
509  sps->sar.den= 1;
510 
512  static const char csp[4][5] = { "Gray", "420", "422", "444" };
513  av_log(h->avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d b%d reo:%d\n",
514  sps_id, sps->profile_idc, sps->level_idc,
515  sps->poc_type,
516  sps->ref_frame_count,
517  sps->mb_width, sps->mb_height,
518  sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),
519  sps->direct_8x8_inference_flag ? "8B8" : "",
520  sps->crop_left, sps->crop_right,
521  sps->crop_top, sps->crop_bottom,
522  sps->vui_parameters_present_flag ? "VUI" : "",
523  csp[sps->chroma_format_idc],
525  sps->timing_info_present_flag ? sps->time_scale : 0,
526  sps->bit_depth_luma,
528  );
529  }
530  sps->new = 1;
531 
532  av_free(h->sps_buffers[sps_id]);
533  h->sps_buffers[sps_id] = sps;
534  h->sps = *sps;
535  h->current_sps_id = sps_id;
536 
537  return 0;
538 fail:
539  av_free(sps);
540  return -1;
541 }
542 
543 static void
544 build_qp_table(PPS *pps, int t, int index, const int depth)
545 {
546  int i;
547  const int max_qp = 51 + 6*(depth-8);
548  for(i = 0; i < max_qp+1; i++)
549  pps->chroma_qp_table[t][i] = ff_h264_chroma_qp[depth-8][av_clip(i + index, 0, max_qp)];
550 }
551 
553 {
554  const SPS *sps = h->sps_buffers[pps->sps_id];
555  int profile_idc = sps->profile_idc;
556 
557  if ((profile_idc == 66 || profile_idc == 77 ||
558  profile_idc == 88) && (sps->constraint_set_flags & 7)) {
560  "Current profile doesn't provide more RBSP data in PPS, skipping\n");
561  return 0;
562  }
563 
564  return 1;
565 }
566 
568  unsigned int pps_id= get_ue_golomb(&h->gb);
569  PPS *pps;
570  const int qp_bd_offset = 6*(h->sps.bit_depth_luma-8);
571  int bits_left;
572 
573  if(pps_id >= MAX_PPS_COUNT) {
574  av_log(h->avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
575  return -1;
576  } else if (h->sps.bit_depth_luma > 14) {
577  av_log(h->avctx, AV_LOG_ERROR, "Invalid luma bit depth=%d\n", h->sps.bit_depth_luma);
578  return AVERROR_INVALIDDATA;
579  } else if (h->sps.bit_depth_luma == 11 || h->sps.bit_depth_luma == 13) {
580  av_log(h->avctx, AV_LOG_ERROR, "Unimplemented luma bit depth=%d\n", h->sps.bit_depth_luma);
581  return AVERROR_PATCHWELCOME;
582  }
583 
584  pps= av_mallocz(sizeof(PPS));
585  if(pps == NULL)
586  return -1;
587  pps->sps_id= get_ue_golomb_31(&h->gb);
588  if((unsigned)pps->sps_id>=MAX_SPS_COUNT || h->sps_buffers[pps->sps_id] == NULL){
589  av_log(h->avctx, AV_LOG_ERROR, "sps_id out of range\n");
590  goto fail;
591  }
592 
593  pps->cabac= get_bits1(&h->gb);
594  pps->pic_order_present= get_bits1(&h->gb);
595  pps->slice_group_count= get_ue_golomb(&h->gb) + 1;
596  if(pps->slice_group_count > 1 ){
598  av_log(h->avctx, AV_LOG_ERROR, "FMO not supported\n");
599  switch(pps->mb_slice_group_map_type){
600  case 0:
601 #if 0
602 | for( i = 0; i <= num_slice_groups_minus1; i++ ) | | |
603 | run_length[ i ] |1 |ue(v) |
604 #endif
605  break;
606  case 2:
607 #if 0
608 | for( i = 0; i < num_slice_groups_minus1; i++ ) | | |
609 |{ | | |
610 | top_left_mb[ i ] |1 |ue(v) |
611 | bottom_right_mb[ i ] |1 |ue(v) |
612 | } | | |
613 #endif
614  break;
615  case 3:
616  case 4:
617  case 5:
618 #if 0
619 | slice_group_change_direction_flag |1 |u(1) |
620 | slice_group_change_rate_minus1 |1 |ue(v) |
621 #endif
622  break;
623  case 6:
624 #if 0
625 | slice_group_id_cnt_minus1 |1 |ue(v) |
626 | for( i = 0; i <= slice_group_id_cnt_minus1; i++ | | |
627 |) | | |
628 | slice_group_id[ i ] |1 |u(v) |
629 #endif
630  break;
631  }
632  }
633  pps->ref_count[0]= get_ue_golomb(&h->gb) + 1;
634  pps->ref_count[1]= get_ue_golomb(&h->gb) + 1;
635  if(pps->ref_count[0]-1 > 32-1 || pps->ref_count[1]-1 > 32-1){
636  av_log(h->avctx, AV_LOG_ERROR, "reference overflow (pps)\n");
637  goto fail;
638  }
639 
640  pps->weighted_pred= get_bits1(&h->gb);
641  pps->weighted_bipred_idc= get_bits(&h->gb, 2);
642  pps->init_qp= get_se_golomb(&h->gb) + 26 + qp_bd_offset;
643  pps->init_qs= get_se_golomb(&h->gb) + 26 + qp_bd_offset;
648 
649  pps->transform_8x8_mode= 0;
650  h->dequant_coeff_pps= -1; //contents of sps/pps can change even if id doesn't, so reinit
651  memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4));
652  memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8));
653 
654  bits_left = bit_length - get_bits_count(&h->gb);
655  if(bits_left > 0 && more_rbsp_data_in_pps(h, pps)){
656  pps->transform_8x8_mode= get_bits1(&h->gb);
658  pps->chroma_qp_index_offset[1]= get_se_golomb(&h->gb); //second_chroma_qp_index_offset
659  } else {
661  }
662 
665  if(pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1])
666  pps->chroma_qp_diff= 1;
667 
669  av_log(h->avctx, AV_LOG_DEBUG, "pps:%u sps:%u %s slice_groups:%d ref:%d/%d %s qp:%d/%d/%d/%d %s %s %s %s\n",
670  pps_id, pps->sps_id,
671  pps->cabac ? "CABAC" : "CAVLC",
672  pps->slice_group_count,
673  pps->ref_count[0], pps->ref_count[1],
674  pps->weighted_pred ? "weighted" : "",
675  pps->init_qp, pps->init_qs, pps->chroma_qp_index_offset[0], pps->chroma_qp_index_offset[1],
676  pps->deblocking_filter_parameters_present ? "LPAR" : "",
677  pps->constrained_intra_pred ? "CONSTR" : "",
678  pps->redundant_pic_cnt_present ? "REDU" : "",
679  pps->transform_8x8_mode ? "8x8DCT" : ""
680  );
681  }
682 
683  av_free(h->pps_buffers[pps_id]);
684  h->pps_buffers[pps_id]= pps;
685  return 0;
686 fail:
687  av_free(pps);
688  return -1;
689 }
int chroma_format_idc
Definition: h264.h:154
#define MAX_LOG2_MAX_FRAME_NUM
Definition: h264_ps.c:39
int video_signal_type_present_flag
Definition: h264.h:179
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:205
float v
#define MAX_PICTURE_COUNT
Definition: mpegvideo.h:66
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
GetBitContext gb
Definition: h264.h:268
#define CODEC_FLAG_UNALIGNED
Allow decoders to produce frames with data planes that are not aligned to CPU requirements (e...
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:175
misc image utilities
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
#define CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
int weighted_bipred_idc
Definition: h264.h:221
int chroma_qp_index_offset[2]
Definition: h264.h:224
int scaling_matrix_present
Definition: h264.h:192
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
uint8_t scaling_matrix4[6][16]
Definition: h264.h:193
#define MAX_PPS_COUNT
Definition: h264.h:43
Sequence parameter set.
Definition: h264.h:151
int bitstream_restriction_flag
Definition: h264.h:190
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264.h:219
int num
numerator
Definition: rational.h:44
Picture parameter set.
Definition: h264.h:213
int frame_mbs_only_flag
Definition: h264.h:167
#define FF_ARRAY_ELEMS(a)
H264Context.
Definition: h264.h:260
int chroma_qp_diff
Definition: h264.h:232
uint32_t num_units_in_tick
Definition: h264.h:186
static const AVRational pixel_aspect[17]
Definition: h264_ps.c:42
Not part of ABI.
int profile_idc
Definition: h264.h:152
unsigned current_sps_id
id of the current SPS
Definition: h264.h:359
unsigned int crop_top
frame_cropping_rect_top_offset
Definition: h264.h:175
int fixed_frame_rate_flag
Definition: h264.h:188
uint8_t scaling_matrix4[6][16]
Definition: h264.h:229
int deblocking_filter_parameters_present
deblocking_filter_parameters_present_flag
Definition: h264.h:225
uint8_t
int full_range
Definition: h264.h:180
unsigned int crop_left
frame_cropping_rect_left_offset
Definition: h264.h:173
int offset_for_non_ref_pic
Definition: h264.h:160
int gaps_in_frame_num_allowed_flag
Definition: h264.h:164
int bit_depth_chroma
bit_depth_chroma_minus8 + 8
Definition: h264.h:204
enum AVColorPrimaries color_primaries
Definition: h264.h:182
int cabac
entropy_coding_mode_flag
Definition: h264.h:215
unsigned int crop_right
frame_cropping_rect_right_offset
Definition: h264.h:174
int transform_bypass
qpprime_y_zero_transform_bypass_flag
Definition: h264.h:155
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag
Definition: h264.h:227
static void decode_scaling_matrices(H264Context *h, SPS *sps, PPS *pps, int is_sps, uint8_t(*scaling_matrix4)[16], uint8_t(*scaling_matrix8)[64])
Definition: h264_ps.c:298
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
H.264 / AVC / MPEG4 part10 codec.
#define U(x)
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
int mb_aff
mb_adaptive_frame_field_flag
Definition: h264.h:168
enum AVColorTransferCharacteristic color_trc
Definition: h264.h:183
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
static int get_ue_golomb(GetBitContext *gb)
read unsigned exp golomb code.
Definition: golomb.h:53
int poc_type
pic_order_cnt_type
Definition: h264.h:157
int constrained_intra_pred
constrained_intra_pred_flag
Definition: h264.h:226
int num_reorder_frames
Definition: h264.h:191
int time_offset_length
Definition: h264.h:198
#define EXTENDED_SAR
Definition: h264.h:94
int flags
CODEC_FLAG_*.
int weighted_pred
weighted_pred_flag
Definition: h264.h:220
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
#define MIN_LOG2_MAX_FRAME_NUM
Definition: h264_ps.c:40
int residual_color_transform_flag
residual_colour_transform_flag
Definition: h264.h:205
#define FFMAX(a, b)
Definition: common.h:56
external API header
int delta_pic_order_always_zero_flag
Definition: h264.h:159
int new
flag to keep track if the decoder context needs re-init due to changed SPS
Definition: h264.h:207
int offset_for_top_to_bottom_field
Definition: h264.h:161
int depth
Definition: v4l.c:62
int size
#define CHROMA_QP_TABLE_END(d)
Definition: h264_ps.c:64
int crop
frame_cropping_flag
Definition: h264.h:170
static int decode_hrd_parameters(H264Context *h, SPS *sps)
Definition: h264_ps.c:152
uint8_t scaling_matrix8[6][64]
Definition: h264.h:230
#define AV_LOG_VERBOSE
Definition: log.h:157
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
Definition: imgutils.c:231
int ref_frame_count
num_ref_frames
Definition: h264.h:163
int initial_cpb_removal_delay_length
initial_cpb_removal_delay_length_minus1 + 1
Definition: h264.h:200
int poc_cycle_length
num_ref_frames_in_pic_order_cnt_cycle
Definition: h264.h:162
int colour_description_present_flag
Definition: h264.h:181
AVRational sar
Definition: h264.h:178
t
Definition: genspecsines3.m:6
SPS sps
current sps
Definition: h264.h:360
PPS * pps_buffers[MAX_PPS_COUNT]
Definition: h264.h:496
#define MAX_SPS_COUNT
Definition: h264.h:42
uint8_t chroma_qp_table[2][QP_MAX_NUM+1]
pre-scaled (with chroma_qp_index_offset) version of qp_table
Definition: h264.h:231
static int more_rbsp_data_in_pps(H264Context *h, PPS *pps)
Definition: h264_ps.c:552
int init_qp
pic_init_qp_minus26 + 26
Definition: h264.h:222
int direct_8x8_inference_flag
Definition: h264.h:169
float u
uint8_t scaling_matrix8[6][64]
Definition: h264.h:194
int dequant_coeff_pps
reinit tables when pps changes
Definition: h264.h:498
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
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
int pic_order_present
pic_order_present_flag
Definition: h264.h:216
SPS * sps_buffers[MAX_SPS_COUNT]
Definition: h264.h:495
short offset_for_ref_frame[256]
Definition: h264.h:189
int timing_info_present_flag
Definition: h264.h:185
NULL
Definition: eval.c:55
int vcl_hrd_parameters_present_flag
Definition: h264.h:196
AVCodecContext * avctx
Definition: h264.h:261
H264 / AVC / MPEG4 part10 codec data table
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:100
static const uint8_t zigzag_scan[16+1]
Definition: h264data.h:55
int dpb_output_delay_length
dpb_output_delay_length_minus1 + 1
Definition: h264.h:202
int vui_parameters_present_flag
Definition: h264.h:177
static int decode_vui_parameters(H264Context *h, SPS *sps)
Definition: h264_ps.c:176
#define QP_MAX_NUM
Definition: h264.h:101
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> (&#39;D&#39;<<24) + (&#39;C&#39;<<16) + (&#39;B&#39;<<8) + &#39;A&#39;).
int ff_h264_decode_seq_parameter_set(H264Context *h)
Decode SPS.
Definition: h264_ps.c:328
int constraint_set_flags
constraint_set[0-3]_flag
Definition: h264.h:206
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
int index
Definition: gxfenc.c:89
synthesis window for stochastic i
rational number numerator/denominator
Definition: rational.h:43
unsigned int sps_id
Definition: h264.h:214
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
Definition: h264.h:158
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
uint32_t time_scale
Definition: h264.h:187
int transform_8x8_mode
transform_8x8_mode_flag
Definition: h264.h:228
int pic_struct_present_flag
Definition: h264.h:197
int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length)
Decode PPS.
Definition: h264_ps.c:567
#define FF_DEBUG_PICT_INFO
int mb_height
pic_height_in_map_units_minus1 + 1
Definition: h264.h:166
int init_qs
pic_init_qs_minus26 + 26
Definition: h264.h:223
common internal api header.
const uint8_t ff_zigzag_direct[64]
Definition: mathtables.c:115
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
int nal_hrd_parameters_present_flag
Definition: h264.h:195
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
Definition: h264.h:156
static const uint8_t default_scaling4[2][16]
Definition: h264_ps.c:120
int den
denominator
Definition: rational.h:45
int bit_depth_luma
bit_depth_luma_minus8 + 8
Definition: h264.h:203
const uint8_t ff_h264_chroma_qp[7][QP_MAX_NUM+1]
One chroma qp table for each possible bit depth (8-14).
Definition: h264_ps.c:75
int mb_width
pic_width_in_mbs_minus1 + 1
Definition: h264.h:165
int flags2
CODEC_FLAG2_*.
int slice_group_count
num_slice_groups_minus1 + 1
Definition: h264.h:217
int cpb_cnt
See H.264 E.1.2.
Definition: h264.h:199
Not part of ABI.
static void decode_scaling_list(H264Context *h, uint8_t *factors, int size, const uint8_t *jvt_list, const uint8_t *fallback_list)
Definition: h264_ps.c:280
static const uint8_t default_scaling8[2][64]
Definition: h264_ps.c:132
int cpb_removal_delay_length
cpb_removal_delay_length_minus1 + 1
Definition: h264.h:201
#define MKTAG(a, b, c, d)
Definition: common.h:282
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
Definition: h264.h:176
exp golomb vlc stuff
int level_idc
Definition: h264.h:153
Not part of ABI.
static void build_qp_table(PPS *pps, int t, int index, const int depth)
Definition: h264_ps.c:544
int mb_slice_group_map_type
Definition: h264.h:218
enum AVColorSpace colorspace
Definition: h264.h:184