FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hevc_ps.c
Go to the documentation of this file.
1 /*
2  * HEVC Parameter Set decoding
3  *
4  * Copyright (C) 2012 - 2103 Guillaume Martres
5  * Copyright (C) 2012 - 2103 Mickael Raulet
6  * Copyright (C) 2012 - 2013 Gildas Cocherel
7  * Copyright (C) 2013 Vittorio Giovara
8  *
9  * This file is part of FFmpeg.
10  *
11  * FFmpeg is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * FFmpeg is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with FFmpeg; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24  */
25 
26 #include "libavutil/imgutils.h"
27 #include "golomb.h"
28 #include "hevc.h"
29 
31  16, 16, 16, 16, 17, 18, 21, 24,
32  16, 16, 16, 16, 17, 19, 22, 25,
33  16, 16, 17, 18, 20, 22, 25, 29,
34  16, 16, 18, 21, 24, 27, 31, 36,
35  17, 17, 20, 24, 30, 35, 41, 47,
36  18, 19, 22, 27, 35, 44, 54, 65,
37  21, 22, 25, 31, 41, 54, 70, 88,
38  24, 25, 29, 36, 47, 65, 88, 115
39 };
40 
42  16, 16, 16, 16, 17, 18, 20, 24,
43  16, 16, 16, 17, 18, 20, 24, 25,
44  16, 16, 17, 18, 20, 24, 25, 28,
45  16, 17, 18, 20, 24, 25, 28, 33,
46  17, 18, 20, 24, 25, 28, 33, 41,
47  18, 20, 24, 25, 28, 33, 41, 54,
48  20, 24, 25, 28, 33, 41, 54, 71,
49  24, 25, 28, 33, 41, 54, 71, 91
50 };
51 
52 static const AVRational vui_sar[] = {
53  { 0, 1 },
54  { 1, 1 },
55  { 12, 11 },
56  { 10, 11 },
57  { 16, 11 },
58  { 40, 33 },
59  { 24, 11 },
60  { 20, 11 },
61  { 32, 11 },
62  { 80, 33 },
63  { 18, 11 },
64  { 15, 11 },
65  { 64, 33 },
66  { 160, 99 },
67  { 4, 3 },
68  { 3, 2 },
69  { 2, 1 },
70 };
71 
72 static void remove_pps(HEVCParamSets *s, int id)
73 {
74  if (s->pps_list[id] && s->pps == (const HEVCPPS*)s->pps_list[id]->data)
75  s->pps = NULL;
76  av_buffer_unref(&s->pps_list[id]);
77 }
78 
79 static void remove_sps(HEVCParamSets *s, int id)
80 {
81  int i;
82  if (s->sps_list[id]) {
83  if (s->sps == (const HEVCSPS*)s->sps_list[id]->data)
84  s->sps = NULL;
85 
86  /* drop all PPS that depend on this SPS */
87  for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
88  if (s->pps_list[i] && ((HEVCPPS*)s->pps_list[i]->data)->sps_id == id)
89  remove_pps(s, i);
90 
91  av_assert0(!(s->sps_list[id] && s->sps == (HEVCSPS*)s->sps_list[id]->data));
92  }
93  av_buffer_unref(&s->sps_list[id]);
94 }
95 
96 static void remove_vps(HEVCParamSets *s, int id)
97 {
98  int i;
99  if (s->vps_list[id]) {
100  if (s->vps == (const HEVCVPS*)s->vps_list[id]->data)
101  s->vps = NULL;
102 
103  for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++)
104  if (s->sps_list[i] && ((HEVCSPS*)s->sps_list[i]->data)->vps_id == id)
105  remove_sps(s, i);
106  }
107  av_buffer_unref(&s->vps_list[id]);
108 }
109 
111  ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
112 {
113  uint8_t rps_predict = 0;
114  int delta_poc;
115  int k0 = 0;
116  int k1 = 0;
117  int k = 0;
118  int i;
119 
120  if (rps != sps->st_rps && sps->nb_st_rps)
121  rps_predict = get_bits1(gb);
122 
123  if (rps_predict) {
124  const ShortTermRPS *rps_ridx;
125  int delta_rps;
126  unsigned abs_delta_rps;
127  uint8_t use_delta_flag = 0;
128  uint8_t delta_rps_sign;
129 
130  if (is_slice_header) {
131  unsigned int delta_idx = get_ue_golomb_long(gb) + 1;
132  if (delta_idx > sps->nb_st_rps) {
133  av_log(avctx, AV_LOG_ERROR,
134  "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
135  delta_idx, sps->nb_st_rps);
136  return AVERROR_INVALIDDATA;
137  }
138  rps_ridx = &sps->st_rps[sps->nb_st_rps - delta_idx];
139  rps->rps_idx_num_delta_pocs = rps_ridx->num_delta_pocs;
140  } else
141  rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
142 
143  delta_rps_sign = get_bits1(gb);
144  abs_delta_rps = get_ue_golomb_long(gb) + 1;
145  if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
146  av_log(avctx, AV_LOG_ERROR,
147  "Invalid value of abs_delta_rps: %d\n",
148  abs_delta_rps);
149  return AVERROR_INVALIDDATA;
150  }
151  delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
152  for (i = 0; i <= rps_ridx->num_delta_pocs; i++) {
153  int used = rps->used[k] = get_bits1(gb);
154 
155  if (!used)
156  use_delta_flag = get_bits1(gb);
157 
158  if (used || use_delta_flag) {
159  if (i < rps_ridx->num_delta_pocs)
160  delta_poc = delta_rps + rps_ridx->delta_poc[i];
161  else
162  delta_poc = delta_rps;
163  rps->delta_poc[k] = delta_poc;
164  if (delta_poc < 0)
165  k0++;
166  else
167  k1++;
168  k++;
169  }
170  }
171 
172  rps->num_delta_pocs = k;
173  rps->num_negative_pics = k0;
174  // sort in increasing order (smallest first)
175  if (rps->num_delta_pocs != 0) {
176  int used, tmp;
177  for (i = 1; i < rps->num_delta_pocs; i++) {
178  delta_poc = rps->delta_poc[i];
179  used = rps->used[i];
180  for (k = i - 1; k >= 0; k--) {
181  tmp = rps->delta_poc[k];
182  if (delta_poc < tmp) {
183  rps->delta_poc[k + 1] = tmp;
184  rps->used[k + 1] = rps->used[k];
185  rps->delta_poc[k] = delta_poc;
186  rps->used[k] = used;
187  }
188  }
189  }
190  }
191  if ((rps->num_negative_pics >> 1) != 0) {
192  int used;
193  k = rps->num_negative_pics - 1;
194  // flip the negative values to largest first
195  for (i = 0; i < rps->num_negative_pics >> 1; i++) {
196  delta_poc = rps->delta_poc[i];
197  used = rps->used[i];
198  rps->delta_poc[i] = rps->delta_poc[k];
199  rps->used[i] = rps->used[k];
200  rps->delta_poc[k] = delta_poc;
201  rps->used[k] = used;
202  k--;
203  }
204  }
205  } else {
206  unsigned int prev, nb_positive_pics;
208  nb_positive_pics = get_ue_golomb_long(gb);
209 
210  if (rps->num_negative_pics >= MAX_REFS ||
211  nb_positive_pics >= MAX_REFS) {
212  av_log(avctx, AV_LOG_ERROR, "Too many refs in a short term RPS.\n");
213  return AVERROR_INVALIDDATA;
214  }
215 
216  rps->num_delta_pocs = rps->num_negative_pics + nb_positive_pics;
217  if (rps->num_delta_pocs) {
218  prev = 0;
219  for (i = 0; i < rps->num_negative_pics; i++) {
220  delta_poc = get_ue_golomb_long(gb) + 1;
221  prev -= delta_poc;
222  rps->delta_poc[i] = prev;
223  rps->used[i] = get_bits1(gb);
224  }
225  prev = 0;
226  for (i = 0; i < nb_positive_pics; i++) {
227  delta_poc = get_ue_golomb_long(gb) + 1;
228  prev += delta_poc;
229  rps->delta_poc[rps->num_negative_pics + i] = prev;
230  rps->used[rps->num_negative_pics + i] = get_bits1(gb);
231  }
232  }
233  }
234  return 0;
235 }
236 
237 
239  PTLCommon *ptl)
240 {
241  int i;
242 
243  if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 16 + 16 + 12)
244  return -1;
245 
246  ptl->profile_space = get_bits(gb, 2);
247  ptl->tier_flag = get_bits1(gb);
248  ptl->profile_idc = get_bits(gb, 5);
249  if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN)
250  av_log(avctx, AV_LOG_DEBUG, "Main profile bitstream\n");
251  else if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN_10)
252  av_log(avctx, AV_LOG_DEBUG, "Main 10 profile bitstream\n");
254  av_log(avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n");
255  else if (ptl->profile_idc == FF_PROFILE_HEVC_REXT)
256  av_log(avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n");
257  else
258  av_log(avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc);
259 
260  for (i = 0; i < 32; i++) {
262 
263  if (ptl->profile_idc == 0 && i > 0 && ptl->profile_compatibility_flag[i])
264  ptl->profile_idc = i;
265  }
270 
271  skip_bits(gb, 16); // XXX_reserved_zero_44bits[0..15]
272  skip_bits(gb, 16); // XXX_reserved_zero_44bits[16..31]
273  skip_bits(gb, 12); // XXX_reserved_zero_44bits[32..43]
274 
275  return 0;
276 }
277 
278 static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx,
279  PTL *ptl, int max_num_sub_layers)
280 {
281  int i;
282  if (decode_profile_tier_level(gb, avctx, &ptl->general_ptl) < 0 ||
283  get_bits_left(gb) < 8 + 8*2) {
284  av_log(avctx, AV_LOG_ERROR, "PTL information too short\n");
285  return -1;
286  }
287 
288  ptl->general_ptl.level_idc = get_bits(gb, 8);
289 
290  for (i = 0; i < max_num_sub_layers - 1; i++) {
293  }
294 
295  if (max_num_sub_layers - 1> 0)
296  for (i = max_num_sub_layers - 1; i < 8; i++)
297  skip_bits(gb, 2); // reserved_zero_2bits[i]
298  for (i = 0; i < max_num_sub_layers - 1; i++) {
299  if (ptl->sub_layer_profile_present_flag[i] &&
300  decode_profile_tier_level(gb, avctx, &ptl->sub_layer_ptl[i]) < 0) {
301  av_log(avctx, AV_LOG_ERROR,
302  "PTL information for sublayer %i too short\n", i);
303  return -1;
304  }
305  if (ptl->sub_layer_level_present_flag[i]) {
306  if (get_bits_left(gb) < 8) {
307  av_log(avctx, AV_LOG_ERROR,
308  "Not enough data for sublayer %i level_idc\n", i);
309  return -1;
310  } else
311  ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
312  }
313  }
314 
315  return 0;
316 }
317 
318 static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
319  int subpic_params_present)
320 {
321  int i;
322 
323  for (i = 0; i < nb_cpb; i++) {
324  get_ue_golomb_long(gb); // bit_rate_value_minus1
325  get_ue_golomb_long(gb); // cpb_size_value_minus1
326 
327  if (subpic_params_present) {
328  get_ue_golomb_long(gb); // cpb_size_du_value_minus1
329  get_ue_golomb_long(gb); // bit_rate_du_value_minus1
330  }
331  skip_bits1(gb); // cbr_flag
332  }
333 }
334 
335 static int decode_hrd(GetBitContext *gb, int common_inf_present,
336  int max_sublayers)
337 {
338  int nal_params_present = 0, vcl_params_present = 0;
339  int subpic_params_present = 0;
340  int i;
341 
342  if (common_inf_present) {
343  nal_params_present = get_bits1(gb);
344  vcl_params_present = get_bits1(gb);
345 
346  if (nal_params_present || vcl_params_present) {
347  subpic_params_present = get_bits1(gb);
348 
349  if (subpic_params_present) {
350  skip_bits(gb, 8); // tick_divisor_minus2
351  skip_bits(gb, 5); // du_cpb_removal_delay_increment_length_minus1
352  skip_bits(gb, 1); // sub_pic_cpb_params_in_pic_timing_sei_flag
353  skip_bits(gb, 5); // dpb_output_delay_du_length_minus1
354  }
355 
356  skip_bits(gb, 4); // bit_rate_scale
357  skip_bits(gb, 4); // cpb_size_scale
358 
359  if (subpic_params_present)
360  skip_bits(gb, 4); // cpb_size_du_scale
361 
362  skip_bits(gb, 5); // initial_cpb_removal_delay_length_minus1
363  skip_bits(gb, 5); // au_cpb_removal_delay_length_minus1
364  skip_bits(gb, 5); // dpb_output_delay_length_minus1
365  }
366  }
367 
368  for (i = 0; i < max_sublayers; i++) {
369  int low_delay = 0;
370  unsigned int nb_cpb = 1;
371  int fixed_rate = get_bits1(gb);
372 
373  if (!fixed_rate)
374  fixed_rate = get_bits1(gb);
375 
376  if (fixed_rate)
377  get_ue_golomb_long(gb); // elemental_duration_in_tc_minus1
378  else
379  low_delay = get_bits1(gb);
380 
381  if (!low_delay) {
382  nb_cpb = get_ue_golomb_long(gb) + 1;
383  if (nb_cpb < 1 || nb_cpb > 32) {
384  av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n", nb_cpb);
385  return AVERROR_INVALIDDATA;
386  }
387  }
388 
389  if (nal_params_present)
390  decode_sublayer_hrd(gb, nb_cpb, subpic_params_present);
391  if (vcl_params_present)
392  decode_sublayer_hrd(gb, nb_cpb, subpic_params_present);
393  }
394  return 0;
395 }
396 
398  HEVCParamSets *ps)
399 {
400  int i,j;
401  int vps_id = 0;
402  HEVCVPS *vps;
403  AVBufferRef *vps_buf = av_buffer_allocz(sizeof(*vps));
404 
405  if (!vps_buf)
406  return AVERROR(ENOMEM);
407  vps = (HEVCVPS*)vps_buf->data;
408 
409  av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n");
410 
411  vps_id = get_bits(gb, 4);
412  if (vps_id >= MAX_VPS_COUNT) {
413  av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", vps_id);
414  goto err;
415  }
416 
417  if (get_bits(gb, 2) != 3) { // vps_reserved_three_2bits
418  av_log(avctx, AV_LOG_ERROR, "vps_reserved_three_2bits is not three\n");
419  goto err;
420  }
421 
422  vps->vps_max_layers = get_bits(gb, 6) + 1;
423  vps->vps_max_sub_layers = get_bits(gb, 3) + 1;
425 
426  if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
427  av_log(avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
428  goto err;
429  }
430 
431  if (vps->vps_max_sub_layers > MAX_SUB_LAYERS) {
432  av_log(avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
433  vps->vps_max_sub_layers);
434  goto err;
435  }
436 
437  if (parse_ptl(gb, avctx, &vps->ptl, vps->vps_max_sub_layers) < 0)
438  goto err;
439 
441 
443  for (; i < vps->vps_max_sub_layers; i++) {
447 
449  av_log(avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
450  vps->vps_max_dec_pic_buffering[i] - 1);
451  goto err;
452  }
453  if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
454  av_log(avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
455  vps->vps_num_reorder_pics[i]);
456  if (avctx->err_recognition & AV_EF_EXPLODE)
457  goto err;
458  }
459  }
460 
461  vps->vps_max_layer_id = get_bits(gb, 6);
462  vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
463  if (vps->vps_num_layer_sets < 1 || vps->vps_num_layer_sets > 1024 ||
464  (vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
465  av_log(avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
466  goto err;
467  }
468 
469  for (i = 1; i < vps->vps_num_layer_sets; i++)
470  for (j = 0; j <= vps->vps_max_layer_id; j++)
471  skip_bits(gb, 1); // layer_id_included_flag[i][j]
472 
474  if (vps->vps_timing_info_present_flag) {
475  vps->vps_num_units_in_tick = get_bits_long(gb, 32);
476  vps->vps_time_scale = get_bits_long(gb, 32);
481  if (vps->vps_num_hrd_parameters > (unsigned)vps->vps_num_layer_sets) {
482  av_log(avctx, AV_LOG_ERROR,
483  "vps_num_hrd_parameters %d is invalid\n", vps->vps_num_hrd_parameters);
484  goto err;
485  }
486  for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
487  int common_inf_present = 1;
488 
489  get_ue_golomb_long(gb); // hrd_layer_set_idx
490  if (i)
491  common_inf_present = get_bits1(gb);
492  decode_hrd(gb, common_inf_present, vps->vps_max_sub_layers);
493  }
494  }
495  get_bits1(gb); /* vps_extension_flag */
496 
497  if (get_bits_left(gb) < 0) {
498  av_log(avctx, AV_LOG_ERROR,
499  "Overread VPS by %d bits\n", -get_bits_left(gb));
500  if (ps->vps_list[vps_id])
501  goto err;
502  }
503 
504  if (ps->vps_list[vps_id] &&
505  !memcmp(ps->vps_list[vps_id]->data, vps_buf->data, vps_buf->size)) {
506  av_buffer_unref(&vps_buf);
507  } else {
508  remove_vps(ps, vps_id);
509  ps->vps_list[vps_id] = vps_buf;
510  }
511 
512  return 0;
513 
514 err:
515  av_buffer_unref(&vps_buf);
516  return AVERROR_INVALIDDATA;
517 }
518 
519 static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
520  int apply_defdispwin, HEVCSPS *sps)
521 {
522  VUI *vui = &sps->vui;
523  GetBitContext backup;
524  int sar_present, alt = 0;
525 
526  av_log(avctx, AV_LOG_DEBUG, "Decoding VUI\n");
527 
528  sar_present = get_bits1(gb);
529  if (sar_present) {
530  uint8_t sar_idx = get_bits(gb, 8);
531  if (sar_idx < FF_ARRAY_ELEMS(vui_sar))
532  vui->sar = vui_sar[sar_idx];
533  else if (sar_idx == 255) {
534  vui->sar.num = get_bits(gb, 16);
535  vui->sar.den = get_bits(gb, 16);
536  } else
537  av_log(avctx, AV_LOG_WARNING,
538  "Unknown SAR index: %u.\n", sar_idx);
539  }
540 
544 
547  vui->video_format = get_bits(gb, 3);
548  vui->video_full_range_flag = get_bits1(gb);
553  vui->colour_primaries = get_bits(gb, 8);
554  vui->transfer_characteristic = get_bits(gb, 8);
555  vui->matrix_coeffs = get_bits(gb, 8);
556 
557  // Set invalid values to "unspecified"
558  if (vui->colour_primaries >= AVCOL_PRI_NB)
562  if (vui->matrix_coeffs >= AVCOL_SPC_NB)
564  }
565  }
566 
568  if (vui->chroma_loc_info_present_flag) {
571  }
572 
574  vui->field_seq_flag = get_bits1(gb);
576 
577  if (get_bits_left(gb) >= 68 && show_bits_long(gb, 21) == 0x100000) {
579  av_log(avctx, AV_LOG_WARNING, "Invalid default display window\n");
580  } else
582  // Backup context in case an alternate header is detected
583  memcpy(&backup, gb, sizeof(backup));
584 
585  if (vui->default_display_window_flag) {
586  //TODO: * 2 is only valid for 420
591 
592  if (apply_defdispwin &&
594  av_log(avctx, AV_LOG_DEBUG,
595  "discarding vui default display window, "
596  "original values are l:%u r:%u t:%u b:%u\n",
601 
604  vui->def_disp_win.top_offset =
605  vui->def_disp_win.bottom_offset = 0;
606  }
607  }
608 
610 
611  if (vui->vui_timing_info_present_flag) {
612  if( get_bits_left(gb) < 66) {
613  // The alternate syntax seem to have timing info located
614  // at where def_disp_win is normally located
615  av_log(avctx, AV_LOG_WARNING,
616  "Strange VUI timing information, retrying...\n");
618  memset(&vui->def_disp_win, 0, sizeof(vui->def_disp_win));
619  memcpy(gb, &backup, sizeof(backup));
620  alt = 1;
621  }
622  vui->vui_num_units_in_tick = get_bits_long(gb, 32);
623  vui->vui_time_scale = get_bits_long(gb, 32);
624  if (alt) {
625  av_log(avctx, AV_LOG_INFO, "Retry got %i/%i fps\n",
627  }
633  decode_hrd(gb, 1, sps->max_sub_layers);
634  }
635 
637  if (vui->bitstream_restriction_flag) {
646  }
647 }
648 
650 {
651  int matrixId;
652 
653  for (matrixId = 0; matrixId < 6; matrixId++) {
654  // 4x4 default is 16
655  memset(sl->sl[0][matrixId], 16, 16);
656  sl->sl_dc[0][matrixId] = 16; // default for 16x16
657  sl->sl_dc[1][matrixId] = 16; // default for 32x32
658  }
659  memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
660  memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
661  memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
662  memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
663  memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
664  memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
665  memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
666  memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
667  memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
668  memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
669  memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
670  memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
671  memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
672  memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
673  memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
674  memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
675  memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
676  memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
677 }
678 
680 {
681  uint8_t scaling_list_pred_mode_flag;
682  int32_t scaling_list_dc_coef[2][6];
683  int size_id, matrix_id, pos;
684  int i;
685 
686  for (size_id = 0; size_id < 4; size_id++)
687  for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
688  scaling_list_pred_mode_flag = get_bits1(gb);
689  if (!scaling_list_pred_mode_flag) {
690  unsigned int delta = get_ue_golomb_long(gb);
691  /* Only need to handle non-zero delta. Zero means default,
692  * which should already be in the arrays. */
693  if (delta) {
694  // Copy from previous array.
695  if (matrix_id < delta) {
696  av_log(avctx, AV_LOG_ERROR,
697  "Invalid delta in scaling list data: %d.\n", delta);
698  return AVERROR_INVALIDDATA;
699  }
700 
701  memcpy(sl->sl[size_id][matrix_id],
702  sl->sl[size_id][matrix_id - delta],
703  size_id > 0 ? 64 : 16);
704  if (size_id > 1)
705  sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
706  }
707  } else {
708  int next_coef, coef_num;
709  int32_t scaling_list_delta_coef;
710 
711  next_coef = 8;
712  coef_num = FFMIN(64, 1 << (4 + (size_id << 1)));
713  if (size_id > 1) {
714  scaling_list_dc_coef[size_id - 2][matrix_id] = get_se_golomb(gb) + 8;
715  next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
716  sl->sl_dc[size_id - 2][matrix_id] = next_coef;
717  }
718  for (i = 0; i < coef_num; i++) {
719  if (size_id == 0)
720  pos = 4 * ff_hevc_diag_scan4x4_y[i] +
722  else
723  pos = 8 * ff_hevc_diag_scan8x8_y[i] +
725 
726  scaling_list_delta_coef = get_se_golomb(gb);
727  next_coef = (next_coef + scaling_list_delta_coef + 256) % 256;
728  sl->sl[size_id][matrix_id][pos] = next_coef;
729  }
730  }
731  }
732 
733  if (sps->chroma_format_idc == 3) {
734  for (i = 0; i < 64; i++) {
735  sl->sl[3][1][i] = sl->sl[2][1][i];
736  sl->sl[3][2][i] = sl->sl[2][2][i];
737  sl->sl[3][4][i] = sl->sl[2][4][i];
738  sl->sl[3][5][i] = sl->sl[2][5][i];
739  }
740  sl->sl_dc[1][1] = sl->sl_dc[0][1];
741  sl->sl_dc[1][2] = sl->sl_dc[0][2];
742  sl->sl_dc[1][4] = sl->sl_dc[0][4];
743  sl->sl_dc[1][5] = sl->sl_dc[0][5];
744  }
745 
746 
747  return 0;
748 }
749 
750 static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
751 {
752  const AVPixFmtDescriptor *desc;
753  switch (sps->bit_depth) {
754  case 8:
755  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
756  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
757  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
758  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
759  break;
760  case 9:
761  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
762  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
763  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
764  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
765  break;
766  case 10:
767  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
768  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
769  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
770  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
771  break;
772  case 12:
773  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
774  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
775  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
776  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
777  break;
778  default:
779  av_log(avctx, AV_LOG_ERROR,
780  "4:2:0, 4:2:2, 4:4:4 supports are currently specified for 8, 10 and 12 bits.\n");
781  av_log(avctx, AV_LOG_ERROR,
782  "chroma_format_idc is %d, depth is %d",
783  sps->chroma_format_idc, sps->bit_depth);
784  return AVERROR_INVALIDDATA;
785  }
786 
787  desc = av_pix_fmt_desc_get(sps->pix_fmt);
788  if (!desc)
789  return AVERROR(EINVAL);
790 
791  sps->hshift[0] = sps->vshift[0] = 0;
792  sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
793  sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
794 
795  sps->pixel_shift = sps->bit_depth > 8;
796 
797  return 0;
798 }
799 
800 int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id,
801  int apply_defdispwin, AVBufferRef **vps_list, AVCodecContext *avctx)
802 {
803  int ret = 0;
804  int log2_diff_max_min_transform_block_size;
805  int bit_depth_chroma, start, vui_present, sublayer_ordering_info;
806  int i;
807 
808  // Coded parameters
809 
810  sps->vps_id = get_bits(gb, 4);
811  if (sps->vps_id >= MAX_VPS_COUNT) {
812  av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", sps->vps_id);
813  return AVERROR_INVALIDDATA;
814  }
815 
816  if (vps_list && !vps_list[sps->vps_id]) {
817  av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
818  sps->vps_id);
819  return AVERROR_INVALIDDATA;
820  }
821 
822  sps->max_sub_layers = get_bits(gb, 3) + 1;
823  if (sps->max_sub_layers > MAX_SUB_LAYERS) {
824  av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
825  sps->max_sub_layers);
826  return AVERROR_INVALIDDATA;
827  }
828 
829  skip_bits1(gb); // temporal_id_nesting_flag
830 
831  if ((ret = parse_ptl(gb, avctx, &sps->ptl, sps->max_sub_layers)) < 0)
832  return ret;
833 
834  *sps_id = get_ue_golomb_long(gb);
835  if (*sps_id >= MAX_SPS_COUNT) {
836  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", *sps_id);
837  return AVERROR_INVALIDDATA;
838  }
839 
841  if (sps->chroma_format_idc > 3U) {
842  av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
843  return AVERROR_INVALIDDATA;
844  }
845 
846  if (sps->chroma_format_idc == 3)
848 
850  sps->chroma_format_idc = 0;
851 
852  sps->width = get_ue_golomb_long(gb);
853  sps->height = get_ue_golomb_long(gb);
854  if ((ret = av_image_check_size(sps->width,
855  sps->height, 0, avctx)) < 0)
856  return ret;
857 
858  if (get_bits1(gb)) { // pic_conformance_flag
859  //TODO: * 2 is only valid for 420
864 
865  if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
866  av_log(avctx, AV_LOG_DEBUG,
867  "discarding sps conformance window, "
868  "original values are l:%u r:%u t:%u b:%u\n",
873 
876  sps->pic_conf_win.top_offset =
877  sps->pic_conf_win.bottom_offset = 0;
878  }
879  sps->output_window = sps->pic_conf_win;
880  }
881 
882  sps->bit_depth = get_ue_golomb_long(gb) + 8;
883  bit_depth_chroma = get_ue_golomb_long(gb) + 8;
884  if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
885  av_log(avctx, AV_LOG_ERROR,
886  "Luma bit depth (%d) is different from chroma bit depth (%d), "
887  "this is unsupported.\n",
888  sps->bit_depth, bit_depth_chroma);
889  return AVERROR_INVALIDDATA;
890  }
891 
892  ret = map_pixel_format(avctx, sps);
893  if (ret < 0)
894  return ret;
895 
896  sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
897  if (sps->log2_max_poc_lsb > 16) {
898  av_log(avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
899  sps->log2_max_poc_lsb - 4);
900  return AVERROR_INVALIDDATA;
901  }
902 
903  sublayer_ordering_info = get_bits1(gb);
904  start = sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
905  for (i = start; i < sps->max_sub_layers; i++) {
910  av_log(avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
912  return AVERROR_INVALIDDATA;
913  }
915  av_log(avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
917  if (avctx->err_recognition & AV_EF_EXPLODE ||
919  return AVERROR_INVALIDDATA;
920  }
922  }
923  }
924 
925  if (!sublayer_ordering_info) {
926  for (i = 0; i < start; i++) {
930  }
931  }
932 
933  sps->log2_min_cb_size = get_ue_golomb_long(gb) + 3;
935  sps->log2_min_tb_size = get_ue_golomb_long(gb) + 2;
936  log2_diff_max_min_transform_block_size = get_ue_golomb_long(gb);
937  sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
938  sps->log2_min_tb_size;
939 
940  if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
941  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
942  return AVERROR_INVALIDDATA;
943  }
944 
945  if (sps->log2_diff_max_min_coding_block_size > 30) {
946  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_coding_block_size", sps->log2_diff_max_min_coding_block_size);
947  return AVERROR_INVALIDDATA;
948  }
949 
950  if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
951  av_log(avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
952  return AVERROR_INVALIDDATA;
953  }
954 
955  if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
956  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
957  return AVERROR_INVALIDDATA;
958  }
959 
962 
964  if (sps->scaling_list_enable_flag) {
966 
967  if (get_bits1(gb)) {
968  ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps);
969  if (ret < 0)
970  return ret;
971  }
972  }
973 
974  sps->amp_enabled_flag = get_bits1(gb);
975  sps->sao_enabled = get_bits1(gb);
976 
977  sps->pcm_enabled_flag = get_bits1(gb);
978  if (sps->pcm_enabled_flag) {
979  sps->pcm.bit_depth = get_bits(gb, 4) + 1;
980  sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
983  get_ue_golomb_long(gb);
984  if (sps->pcm.bit_depth > sps->bit_depth) {
985  av_log(avctx, AV_LOG_ERROR,
986  "PCM bit depth (%d) is greater than normal bit depth (%d)\n",
987  sps->pcm.bit_depth, sps->bit_depth);
988  return AVERROR_INVALIDDATA;
989  }
990 
992  }
993 
994  sps->nb_st_rps = get_ue_golomb_long(gb);
995  if (sps->nb_st_rps > MAX_SHORT_TERM_RPS_COUNT) {
996  av_log(avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
997  sps->nb_st_rps);
998  return AVERROR_INVALIDDATA;
999  }
1000  for (i = 0; i < sps->nb_st_rps; i++) {
1001  if ((ret = ff_hevc_decode_short_term_rps(gb, avctx, &sps->st_rps[i],
1002  sps, 0)) < 0)
1003  return ret;
1004  }
1005 
1009  if (sps->num_long_term_ref_pics_sps > 31U) {
1010  av_log(avctx, AV_LOG_ERROR, "num_long_term_ref_pics_sps %d is out of range.\n",
1012  return AVERROR_INVALIDDATA;
1013  }
1014  for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
1015  sps->lt_ref_pic_poc_lsb_sps[i] = get_bits(gb, sps->log2_max_poc_lsb);
1017  }
1018  }
1019 
1022  sps->vui.sar = (AVRational){0, 1};
1023  vui_present = get_bits1(gb);
1024  if (vui_present)
1025  decode_vui(gb, avctx, apply_defdispwin, sps);
1026 
1027  if (get_bits1(gb)) { // sps_extension_flag
1028  int sps_extension_flag[1];
1029  for (i = 0; i < 1; i++)
1030  sps_extension_flag[i] = get_bits1(gb);
1031  skip_bits(gb, 7); //sps_extension_7bits = get_bits(gb, 7);
1032  if (sps_extension_flag[0]) {
1033  int extended_precision_processing_flag;
1034  int high_precision_offsets_enabled_flag;
1035  int cabac_bypass_alignment_enabled_flag;
1036 
1040 
1042 
1043  extended_precision_processing_flag = get_bits1(gb);
1044  if (extended_precision_processing_flag)
1045  av_log(avctx, AV_LOG_WARNING,
1046  "extended_precision_processing_flag not yet implemented\n");
1047 
1049  high_precision_offsets_enabled_flag = get_bits1(gb);
1050  if (high_precision_offsets_enabled_flag)
1051  av_log(avctx, AV_LOG_WARNING,
1052  "high_precision_offsets_enabled_flag not yet implemented\n");
1053 
1055 
1056  cabac_bypass_alignment_enabled_flag = get_bits1(gb);
1057  if (cabac_bypass_alignment_enabled_flag)
1058  av_log(avctx, AV_LOG_WARNING,
1059  "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1060  }
1061  }
1062  if (apply_defdispwin) {
1067  }
1068  if (sps->output_window.left_offset & (0x1F >> (sps->pixel_shift)) &&
1069  !(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
1070  sps->output_window.left_offset &= ~(0x1F >> (sps->pixel_shift));
1071  av_log(avctx, AV_LOG_WARNING, "Reducing left output window to %d "
1072  "chroma samples to preserve alignment.\n",
1073  sps->output_window.left_offset);
1074  }
1075  sps->output_width = sps->width -
1077  sps->output_height = sps->height -
1079  if (sps->width <= sps->output_window.left_offset + (int64_t)sps->output_window.right_offset ||
1080  sps->height <= sps->output_window.top_offset + (int64_t)sps->output_window.bottom_offset) {
1081  av_log(avctx, AV_LOG_WARNING, "Invalid visible frame dimensions: %dx%d.\n",
1082  sps->output_width, sps->output_height);
1083  if (avctx->err_recognition & AV_EF_EXPLODE) {
1084  return AVERROR_INVALIDDATA;
1085  }
1086  av_log(avctx, AV_LOG_WARNING,
1087  "Displaying the whole video surface.\n");
1088  memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
1089  memset(&sps->output_window, 0, sizeof(sps->output_window));
1090  sps->output_width = sps->width;
1091  sps->output_height = sps->height;
1092  }
1093 
1094  // Inferred parameters
1095  sps->log2_ctb_size = sps->log2_min_cb_size +
1097  sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
1098 
1099  if (sps->log2_ctb_size > MAX_LOG2_CTB_SIZE) {
1100  av_log(avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
1101  return AVERROR_INVALIDDATA;
1102  }
1103  if (sps->log2_ctb_size < 4) {
1104  av_log(avctx,
1105  AV_LOG_ERROR,
1106  "log2_ctb_size %d differs from the bounds of any known profile\n",
1107  sps->log2_ctb_size);
1108  avpriv_request_sample(avctx, "log2_ctb_size %d", sps->log2_ctb_size);
1109  return AVERROR_INVALIDDATA;
1110  }
1111 
1112  sps->ctb_width = (sps->width + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1113  sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1114  sps->ctb_size = sps->ctb_width * sps->ctb_height;
1115 
1116  sps->min_cb_width = sps->width >> sps->log2_min_cb_size;
1117  sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
1118  sps->min_tb_width = sps->width >> sps->log2_min_tb_size;
1119  sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
1120  sps->min_pu_width = sps->width >> sps->log2_min_pu_size;
1121  sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
1122  sps->tb_mask = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
1123 
1124  sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
1125 
1126  if (av_mod_uintp2(sps->width, sps->log2_min_cb_size) ||
1127  av_mod_uintp2(sps->height, sps->log2_min_cb_size)) {
1128  av_log(avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
1129  return AVERROR_INVALIDDATA;
1130  }
1131 
1133  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
1135  return AVERROR_INVALIDDATA;
1136  }
1138  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
1140  return AVERROR_INVALIDDATA;
1141  }
1142  if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
1143  av_log(avctx, AV_LOG_ERROR,
1144  "max transform block size out of range: %d\n",
1145  sps->log2_max_trafo_size);
1146  return AVERROR_INVALIDDATA;
1147  }
1148 
1149  if (get_bits_left(gb) < 0) {
1150  av_log(avctx, AV_LOG_ERROR,
1151  "Overread SPS by %d bits\n", -get_bits_left(gb));
1152  return AVERROR_INVALIDDATA;
1153  }
1154 
1155  return 0;
1156 }
1157 
1159  HEVCParamSets *ps, int apply_defdispwin)
1160 {
1161  HEVCSPS *sps;
1162  AVBufferRef *sps_buf = av_buffer_allocz(sizeof(*sps));
1163  unsigned int sps_id;
1164  int ret;
1165 
1166  if (!sps_buf)
1167  return AVERROR(ENOMEM);
1168  sps = (HEVCSPS*)sps_buf->data;
1169 
1170  av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
1171 
1172  ret = ff_hevc_parse_sps(sps, gb, &sps_id,
1173  apply_defdispwin,
1174  ps->vps_list, avctx);
1175  if (ret < 0) {
1176  av_buffer_unref(&sps_buf);
1177  return ret;
1178  }
1179 
1180  if (avctx->debug & FF_DEBUG_BITSTREAM) {
1181  av_log(avctx, AV_LOG_DEBUG,
1182  "Parsed SPS: id %d; coded wxh: %dx%d; "
1183  "cropped wxh: %dx%d; pix_fmt: %s.\n",
1184  sps_id, sps->width, sps->height,
1185  sps->output_width, sps->output_height,
1187  }
1188 
1189  /* check if this is a repeat of an already parsed SPS, then keep the
1190  * original one.
1191  * otherwise drop all PPSes that depend on it */
1192  if (ps->sps_list[sps_id] &&
1193  !memcmp(ps->sps_list[sps_id]->data, sps_buf->data, sps_buf->size)) {
1194  av_buffer_unref(&sps_buf);
1195  } else {
1196  remove_sps(ps, sps_id);
1197  ps->sps_list[sps_id] = sps_buf;
1198  }
1199 
1200  return 0;
1201 }
1202 
1203 static void hevc_pps_free(void *opaque, uint8_t *data)
1204 {
1205  HEVCPPS *pps = (HEVCPPS*)data;
1206 
1207  av_freep(&pps->column_width);
1208  av_freep(&pps->row_height);
1209  av_freep(&pps->col_bd);
1210  av_freep(&pps->row_bd);
1211  av_freep(&pps->col_idxX);
1212  av_freep(&pps->ctb_addr_rs_to_ts);
1213  av_freep(&pps->ctb_addr_ts_to_rs);
1214  av_freep(&pps->tile_pos_rs);
1215  av_freep(&pps->tile_id);
1217 
1218  av_freep(&pps);
1219 }
1220 
1222  HEVCPPS *pps, HEVCSPS *sps) {
1223  int i;
1224 
1225  if (pps->transform_skip_enabled_flag) {
1227  }
1234  av_log(avctx, AV_LOG_ERROR,
1235  "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1236  return AVERROR_INVALIDDATA;
1237  }
1238  for (i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
1239  pps->cb_qp_offset_list[i] = get_se_golomb_long(gb);
1240  if (pps->cb_qp_offset_list[i]) {
1241  av_log(avctx, AV_LOG_WARNING,
1242  "cb_qp_offset_list not tested yet.\n");
1243  }
1244  pps->cr_qp_offset_list[i] = get_se_golomb_long(gb);
1245  if (pps->cr_qp_offset_list[i]) {
1246  av_log(avctx, AV_LOG_WARNING,
1247  "cb_qp_offset_list not tested yet.\n");
1248  }
1249  }
1250  }
1253 
1254  return(0);
1255 }
1256 
1257 static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb,
1258  HEVCPPS *pps, HEVCSPS *sps)
1259 {
1260  int log2_diff;
1261  int pic_area_in_ctbs;
1262  int i, j, x, y, ctb_addr_rs, tile_id;
1263 
1264  // Inferred parameters
1265  pps->col_bd = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
1266  pps->row_bd = av_malloc_array(pps->num_tile_rows + 1, sizeof(*pps->row_bd));
1267  pps->col_idxX = av_malloc_array(sps->ctb_width, sizeof(*pps->col_idxX));
1268  if (!pps->col_bd || !pps->row_bd || !pps->col_idxX)
1269  return AVERROR(ENOMEM);
1270 
1271  if (pps->uniform_spacing_flag) {
1272  if (!pps->column_width) {
1273  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1274  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1275  }
1276  if (!pps->column_width || !pps->row_height)
1277  return AVERROR(ENOMEM);
1278 
1279  for (i = 0; i < pps->num_tile_columns; i++) {
1280  pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
1281  (i * sps->ctb_width) / pps->num_tile_columns;
1282  }
1283 
1284  for (i = 0; i < pps->num_tile_rows; i++) {
1285  pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
1286  (i * sps->ctb_height) / pps->num_tile_rows;
1287  }
1288  }
1289 
1290  pps->col_bd[0] = 0;
1291  for (i = 0; i < pps->num_tile_columns; i++)
1292  pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
1293 
1294  pps->row_bd[0] = 0;
1295  for (i = 0; i < pps->num_tile_rows; i++)
1296  pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
1297 
1298  for (i = 0, j = 0; i < sps->ctb_width; i++) {
1299  if (i > pps->col_bd[j])
1300  j++;
1301  pps->col_idxX[i] = j;
1302  }
1303 
1304  /**
1305  * 6.5
1306  */
1307  pic_area_in_ctbs = sps->ctb_width * sps->ctb_height;
1308 
1309  pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_rs_to_ts));
1310  pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_ts_to_rs));
1311  pps->tile_id = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->tile_id));
1312  pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
1313  if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
1314  !pps->tile_id || !pps->min_tb_addr_zs_tab) {
1315  return AVERROR(ENOMEM);
1316  }
1317 
1318  for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1319  int tb_x = ctb_addr_rs % sps->ctb_width;
1320  int tb_y = ctb_addr_rs / sps->ctb_width;
1321  int tile_x = 0;
1322  int tile_y = 0;
1323  int val = 0;
1324 
1325  for (i = 0; i < pps->num_tile_columns; i++) {
1326  if (tb_x < pps->col_bd[i + 1]) {
1327  tile_x = i;
1328  break;
1329  }
1330  }
1331 
1332  for (i = 0; i < pps->num_tile_rows; i++) {
1333  if (tb_y < pps->row_bd[i + 1]) {
1334  tile_y = i;
1335  break;
1336  }
1337  }
1338 
1339  for (i = 0; i < tile_x; i++)
1340  val += pps->row_height[tile_y] * pps->column_width[i];
1341  for (i = 0; i < tile_y; i++)
1342  val += sps->ctb_width * pps->row_height[i];
1343 
1344  val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
1345  tb_x - pps->col_bd[tile_x];
1346 
1347  pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
1348  pps->ctb_addr_ts_to_rs[val] = ctb_addr_rs;
1349  }
1350 
1351  for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
1352  for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
1353  for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
1354  for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
1355  pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
1356 
1357  pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
1358  if (!pps->tile_pos_rs)
1359  return AVERROR(ENOMEM);
1360 
1361  for (j = 0; j < pps->num_tile_rows; j++)
1362  for (i = 0; i < pps->num_tile_columns; i++)
1363  pps->tile_pos_rs[j * pps->num_tile_columns + i] =
1364  pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
1365 
1366  log2_diff = sps->log2_ctb_size - sps->log2_min_tb_size;
1367  pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
1368  for (y = 0; y < sps->tb_mask+2; y++) {
1369  pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
1370  pps->min_tb_addr_zs_tab[y] = -1;
1371  }
1372  for (y = 0; y < sps->tb_mask+1; y++) {
1373  for (x = 0; x < sps->tb_mask+1; x++) {
1374  int tb_x = x >> log2_diff;
1375  int tb_y = y >> log2_diff;
1376  int rs = sps->ctb_width * tb_y + tb_x;
1377  int val = pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
1378  for (i = 0; i < log2_diff; i++) {
1379  int m = 1 << i;
1380  val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1381  }
1382  pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
1383  }
1384  }
1385 
1386  return 0;
1387 }
1388 
1390  HEVCParamSets *ps)
1391 {
1392  HEVCSPS *sps = NULL;
1393  int i, ret = 0;
1394  unsigned int pps_id = 0;
1395 
1396  AVBufferRef *pps_buf;
1397  HEVCPPS *pps = av_mallocz(sizeof(*pps));
1398 
1399  if (!pps)
1400  return AVERROR(ENOMEM);
1401 
1402  pps_buf = av_buffer_create((uint8_t *)pps, sizeof(*pps),
1403  hevc_pps_free, NULL, 0);
1404  if (!pps_buf) {
1405  av_freep(&pps);
1406  return AVERROR(ENOMEM);
1407  }
1408 
1409  av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n");
1410 
1411  // Default values
1413  pps->num_tile_columns = 1;
1414  pps->num_tile_rows = 1;
1415  pps->uniform_spacing_flag = 1;
1416  pps->disable_dbf = 0;
1417  pps->beta_offset = 0;
1418  pps->tc_offset = 0;
1420 
1421  // Coded parameters
1422  pps_id = get_ue_golomb_long(gb);
1423  if (pps_id >= MAX_PPS_COUNT) {
1424  av_log(avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
1425  ret = AVERROR_INVALIDDATA;
1426  goto err;
1427  }
1428  pps->sps_id = get_ue_golomb_long(gb);
1429  if (pps->sps_id >= MAX_SPS_COUNT) {
1430  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
1431  ret = AVERROR_INVALIDDATA;
1432  goto err;
1433  }
1434  if (!ps->sps_list[pps->sps_id]) {
1435  av_log(avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
1436  ret = AVERROR_INVALIDDATA;
1437  goto err;
1438  }
1439  sps = (HEVCSPS *)ps->sps_list[pps->sps_id]->data;
1440 
1443  pps->num_extra_slice_header_bits = get_bits(gb, 3);
1444 
1445  pps->sign_data_hiding_flag = get_bits1(gb);
1446 
1448 
1451 
1453 
1456 
1458  pps->diff_cu_qp_delta_depth = 0;
1459  if (pps->cu_qp_delta_enabled_flag)
1461 
1462  if (pps->diff_cu_qp_delta_depth < 0 ||
1464  av_log(avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
1465  pps->diff_cu_qp_delta_depth);
1466  ret = AVERROR_INVALIDDATA;
1467  goto err;
1468  }
1469 
1470  pps->cb_qp_offset = get_se_golomb(gb);
1471  if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
1472  av_log(avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
1473  pps->cb_qp_offset);
1474  ret = AVERROR_INVALIDDATA;
1475  goto err;
1476  }
1477  pps->cr_qp_offset = get_se_golomb(gb);
1478  if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
1479  av_log(avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
1480  pps->cr_qp_offset);
1481  ret = AVERROR_INVALIDDATA;
1482  goto err;
1483  }
1485 
1486  pps->weighted_pred_flag = get_bits1(gb);
1487  pps->weighted_bipred_flag = get_bits1(gb);
1488 
1490  pps->tiles_enabled_flag = get_bits1(gb);
1492 
1493  if (pps->tiles_enabled_flag) {
1494  pps->num_tile_columns = get_ue_golomb_long(gb) + 1;
1495  pps->num_tile_rows = get_ue_golomb_long(gb) + 1;
1496  if (pps->num_tile_columns <= 0 ||
1497  pps->num_tile_columns >= sps->width) {
1498  av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
1499  pps->num_tile_columns - 1);
1500  ret = AVERROR_INVALIDDATA;
1501  goto err;
1502  }
1503  if (pps->num_tile_rows <= 0 ||
1504  pps->num_tile_rows >= sps->height) {
1505  av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
1506  pps->num_tile_rows - 1);
1507  ret = AVERROR_INVALIDDATA;
1508  goto err;
1509  }
1510 
1511  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1512  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1513  if (!pps->column_width || !pps->row_height) {
1514  ret = AVERROR(ENOMEM);
1515  goto err;
1516  }
1517 
1518  pps->uniform_spacing_flag = get_bits1(gb);
1519  if (!pps->uniform_spacing_flag) {
1520  uint64_t sum = 0;
1521  for (i = 0; i < pps->num_tile_columns - 1; i++) {
1522  pps->column_width[i] = get_ue_golomb_long(gb) + 1;
1523  sum += pps->column_width[i];
1524  }
1525  if (sum >= sps->ctb_width) {
1526  av_log(avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
1527  ret = AVERROR_INVALIDDATA;
1528  goto err;
1529  }
1530  pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
1531 
1532  sum = 0;
1533  for (i = 0; i < pps->num_tile_rows - 1; i++) {
1534  pps->row_height[i] = get_ue_golomb_long(gb) + 1;
1535  sum += pps->row_height[i];
1536  }
1537  if (sum >= sps->ctb_height) {
1538  av_log(avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
1539  ret = AVERROR_INVALIDDATA;
1540  goto err;
1541  }
1542  pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
1543  }
1545  }
1546 
1548 
1552  pps->disable_dbf = get_bits1(gb);
1553  if (!pps->disable_dbf) {
1554  pps->beta_offset = get_se_golomb(gb) * 2;
1555  pps->tc_offset = get_se_golomb(gb) * 2;
1556  if (pps->beta_offset/2 < -6 || pps->beta_offset/2 > 6) {
1557  av_log(avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
1558  pps->beta_offset/2);
1559  ret = AVERROR_INVALIDDATA;
1560  goto err;
1561  }
1562  if (pps->tc_offset/2 < -6 || pps->tc_offset/2 > 6) {
1563  av_log(avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
1564  pps->tc_offset/2);
1565  ret = AVERROR_INVALIDDATA;
1566  goto err;
1567  }
1568  }
1569  }
1570 
1572  if (pps->scaling_list_data_present_flag) {
1574  ret = scaling_list_data(gb, avctx, &pps->scaling_list, sps);
1575  if (ret < 0)
1576  goto err;
1577  }
1580  if (pps->log2_parallel_merge_level > sps->log2_ctb_size) {
1581  av_log(avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
1582  pps->log2_parallel_merge_level - 2);
1583  ret = AVERROR_INVALIDDATA;
1584  goto err;
1585  }
1586 
1588 
1589  if (get_bits1(gb)) { // pps_extension_present_flag
1590  int pps_range_extensions_flag = get_bits1(gb);
1591  /* int pps_extension_7bits = */ get_bits(gb, 7);
1592  if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_REXT && pps_range_extensions_flag) {
1593  if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0)
1594  goto err;
1595  }
1596  }
1597 
1598  ret = setup_pps(avctx, gb, pps, sps);
1599  if (ret < 0)
1600  goto err;
1601 
1602  if (get_bits_left(gb) < 0) {
1603  av_log(avctx, AV_LOG_ERROR,
1604  "Overread PPS by %d bits\n", -get_bits_left(gb));
1605  goto err;
1606  }
1607 
1608  remove_pps(ps, pps_id);
1609  ps->pps_list[pps_id] = pps_buf;
1610 
1611  return 0;
1612 
1613 err:
1614  av_buffer_unref(&pps_buf);
1615  return ret;
1616 }
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition: get_bits.h:391
const HEVCPPS * pps
Definition: hevc.h:569
#define NULL
Definition: coverity.c:32
unsigned int log2_min_cb_size
Definition: hevc.h:450
const char const char void * val
Definition: avisynth_c.h:634
uint8_t log2_sao_offset_scale_luma
Definition: hevc.h:543
const char * s
Definition: avisynth_c.h:631
int min_spatial_segmentation_idc
Definition: hevc.h:344
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
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:124
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2157
int ctb_height
Definition: hevc.h:471
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:101
uint8_t diff_cu_chroma_qp_offset_depth
Definition: hevc.h:539
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:183
enum AVCodecID id
Definition: mxfenc.c:104
int vui_num_ticks_poc_diff_one_minus1
Definition: hevc.h:337
int max_dec_pic_buffering
Definition: hevc.h:418
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:68
int transform_skip_rotation_enabled_flag
Definition: hevc.h:460
misc image utilities
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:260
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
int8_t cb_qp_offset_list[5]
Definition: hevc.h:541
unsigned int * row_height
RowHeight.
Definition: hevc.h:548
int vps_num_ticks_poc_diff_one
vps_num_ticks_poc_diff_one_minus1 + 1
Definition: hevc.h:387
#define MAX_REFS
Definition: hevc.h:40
int pic_init_qp_minus26
Definition: hevc.h:496
#define MAX_PPS_COUNT
Definition: h264.h:51
VUI vui
Definition: hevc.h:423
#define MAX_DPB_SIZE
Definition: hevc.h:39
int vshift[3]
Definition: hevc.h:482
int num
numerator
Definition: rational.h:44
#define MAX_LOG2_CTB_SIZE
Definition: hevc.h:59
#define FF_DEBUG_BITSTREAM
Definition: avcodec.h:2766
const uint8_t ff_hevc_diag_scan4x4_x[16]
Definition: hevc_data.c:25
uint32_t vui_time_scale
Definition: hevc.h:335
uint8_t weighted_bipred_flag
Definition: hevc.h:508
int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
Definition: hevc_ps.c:110
unsigned int left_offset
Definition: hevc.h:302
Definition: hevc.h:363
uint8_t seq_loop_filter_across_slices_enabled_flag
Definition: hevc.h:521
uint8_t cabac_init_present_flag
Definition: hevc.h:492
int chroma_loc_info_present_flag
Definition: hevc.h:322
static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb, int subpic_params_present)
Definition: hevc_ps.c:318
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:334
int max_latency_increase
Definition: hevc.h:420
int min_cb_height
Definition: hevc.h:474
int * ctb_addr_ts_to_rs
CtbAddrTSToRS.
Definition: hevc.h:554
int explicit_rdpcm_enabled_flag
Definition: hevc.h:463
int num_ref_idx_l0_default_active
num_ref_idx_l0_default_active_minus1 + 1
Definition: hevc.h:494
static const AVRational vui_sar[]
Definition: hevc_ps.c:52
AVBufferRef * vps_list[MAX_VPS_COUNT]
Definition: hevc.h:562
ShortTermRPS st_rps[MAX_SHORT_TERM_RPS_COUNT]
Definition: hevc.h:430
int chroma_sample_loc_type_top_field
Definition: hevc.h:323
int width
Definition: hevc.h:468
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition: pixdesc.h:92
int qp_bd_offset
Definition: hevc.h:484
int pixel_shift
Definition: hevc.h:410
uint8_t entropy_coding_sync_enabled_flag
Definition: hevc.h:514
HEVCWindow output_window
Definition: hevc.h:405
int output_width
Definition: hevc.h:404
int log2_parallel_merge_level
log2_parallel_merge_level_minus2 + 2
Definition: hevc.h:533
uint8_t log2_sao_offset_scale_chroma
Definition: hevc.h:544
int restricted_ref_pic_lists_flag
Definition: hevc.h:343
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
static void remove_vps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:96
int chroma_format_idc
Definition: hevc.h:400
uint8_t disable_dbf
Definition: hevc.h:525
unsigned int log2_max_trafo_size
Definition: hevc.h:453
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t profile_compatibility_flag[32]
Definition: hevc.h:355
Definition: hevc.h:308
static int decode_hrd(GetBitContext *gb, int common_inf_present, int max_sublayers)
Definition: hevc_ps.c:335
unsigned int num_negative_pics
Definition: hevc.h:277
uint8_t
uint8_t sub_layer_profile_present_flag[MAX_SUB_LAYERS]
Definition: hevc.h:367
static void remove_pps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:72
static const uint8_t default_scaling_list_inter[]
Definition: hevc_ps.c:41
unsigned int vps_num_reorder_pics[MAX_SUB_LAYERS]
Definition: hevc.h:379
float delta
HEVCWindow pic_conf_win
Definition: hevc.h:407
uint8_t log2_max_transform_skip_block_size
Definition: hevc.h:536
int overscan_info_present_flag
Definition: hevc.h:311
uint8_t vps_timing_info_present_flag
Definition: hevc.h:383
#define AV_CODEC_FLAG_UNALIGNED
Allow decoders to produce frames with data planes that are not aligned to CPU requirements (e...
Definition: avcodec.h:730
uint8_t matrix_coeffs
Definition: hevc.h:320
int min_tb_width
Definition: hevc.h:475
#define FF_PROFILE_HEVC_MAIN
Definition: avcodec.h:3107
int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, int apply_defdispwin, AVBufferRef **vps_list, AVCodecContext *avctx)
Parse the SPS from the bitstream into the provided HEVCSPS struct.
Definition: hevc_ps.c:800
const HEVCVPS * vps
Definition: hevc.h:567
int num_ref_idx_l1_default_active
num_ref_idx_l1_default_active_minus1 + 1
Definition: hevc.h:495
unsigned int log2_min_pcm_cb_size
Definition: hevc.h:443
int min_cb_width
Definition: hevc.h:473
int vps_max_sub_layers
vps_max_temporal_layers_minus1 + 1
Definition: hevc.h:374
int frame_field_info_present_flag
Definition: hevc.h:328
uint8_t tier_flag
Definition: hevc.h:353
uint8_t scaling_list_data_present_flag
Definition: hevc.h:529
uint8_t bit_depth_chroma
Definition: hevc.h:442
uint8_t loop_filter_disable_flag
Definition: hevc.h:445
static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
Definition: hevc_ps.c:750
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:335
#define FF_PROFILE_HEVC_MAIN_10
Definition: avcodec.h:3108
int bitstream_restriction_flag
Definition: hevc.h:340
uint8_t transquant_bypass_enable_flag
Definition: hevc.h:510
#define av_log(a,...)
unsigned m
Definition: audioconvert.c:187
int8_t cr_qp_offset_list[5]
Definition: hevc.h:542
int vps_max_layer_id
Definition: hevc.h:381
#define U(x)
Definition: vp56_arith.h:37
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:607
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
uint8_t frame_only_constraint_flag
Definition: hevc.h:360
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
Definition: avcodec.h:825
unsigned int log2_max_poc_lsb
Definition: hevc.h:413
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition: pixdesc.h:101
int vps_max_layers
Definition: hevc.h:373
int min_pu_height
Definition: hevc.h:478
int persistent_rice_adaptation_enabled_flag
coded frame dimension in various units
Definition: hevc.h:465
int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: hevc_ps.c:397
#define AVERROR(e)
Definition: error.h:43
int vui_timing_info_present_flag
Definition: hevc.h:333
uint8_t amp_enabled_flag
Definition: hevc.h:432
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
#define MAX_SHORT_TERM_RPS_COUNT
Definition: hevc.h:52
Not part of ABI.
Definition: pixfmt.h:389
unsigned int log2_ctb_size
Definition: hevc.h:454
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:1627
int vui_poc_proportional_to_timing_flag
Definition: hevc.h:336
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:333
AVBufferRef * av_buffer_create(uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:28
uint8_t vps_temporal_id_nesting_flag
Definition: hevc.h:372
uint8_t colour_primaries
Definition: hevc.h:318
uint8_t used[32]
Definition: hevc.h:281
int motion_vectors_over_pic_boundaries_flag
Definition: hevc.h:342
uint8_t tiles_enabled_flag
Definition: hevc.h:513
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:67
uint32_t vps_num_units_in_tick
Definition: hevc.h:384
int * col_idxX
Definition: hevc.h:551
const HEVCSPS * sps
Definition: hevc.h:568
int vps_num_layer_sets
vps_num_layer_sets_minus1 + 1
Definition: hevc.h:382
#define AV_PIX_FMT_YUV422P9
Definition: pixfmt.h:328
uint8_t lists_modification_present_flag
Definition: hevc.h:532
int * min_tb_addr_zs_tab
MinTbAddrZS.
Definition: hevc.h:558
uint8_t profile_idc
Definition: hevc.h:354
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:251
static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, HEVCSPS *sps)
Definition: hevc_ps.c:1221
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:2811
#define AV_PIX_FMT_GRAY16
Definition: pixfmt.h:314
int max_transform_hierarchy_depth_inter
Definition: hevc.h:457
#define FFMIN(a, b)
Definition: common.h:96
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:75
uint8_t vps_poc_proportional_to_timing_flag
Definition: hevc.h:386
int num_tile_columns
num_tile_columns_minus1 + 1
Definition: hevc.h:516
int output_height
Definition: hevc.h:404
unsigned int top_offset
Definition: hevc.h:304
AVBufferRef * pps_list[MAX_PPS_COUNT]
Definition: hevc.h:564
int hshift[3]
Definition: hevc.h:481
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE
Definition: avcodec.h:3109
int32_t
int max_bits_per_min_cu_denom
Definition: hevc.h:346
uint8_t cu_qp_delta_enabled_flag
Definition: hevc.h:501
uint8_t used_by_curr_pic_lt_sps_flag[32]
Definition: hevc.h:437
#define MAX_SPS_COUNT
Definition: h264.h:50
int ctb_width
Definition: hevc.h:470
uint8_t sl_dc[2][6]
Definition: hevc.h:395
int32_t delta_poc[32]
Definition: hevc.h:280
uint8_t sign_data_hiding_flag
Definition: hevc.h:490
int height
Definition: hevc.h:469
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: avcodec.h:2822
uint8_t output_flag_present_flag
Definition: hevc.h:509
int log2_max_mv_length_vertical
Definition: hevc.h:348
PTLCommon general_ptl
Definition: hevc.h:364
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:329
int max_bytes_per_pic_denom
Definition: hevc.h:345
int overscan_appropriate_flag
Definition: hevc.h:312
static void set_default_scaling_list_data(ScalingList *sl)
Definition: hevc_ps.c:649
int implicit_rdpcm_enabled_flag
Definition: hevc.h:462
unsigned vps_id
Definition: hevc.h:399
#define FF_ARRAY_ELEMS(a)
uint8_t constrained_intra_pred_flag
Definition: hevc.h:498
int tb_mask
Definition: hevc.h:479
uint8_t sl[4][6][64]
Definition: hevc.h:394
PTL ptl
Definition: hevc.h:376
uint8_t pic_slice_level_chroma_qp_offsets_present_flag
Definition: hevc.h:506
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
uint32_t vps_time_scale
Definition: hevc.h:385
int colour_description_present_flag
Definition: hevc.h:317
uint8_t sub_layer_level_present_flag[MAX_SUB_LAYERS]
Definition: hevc.h:368
Definition: hevc.h:398
enum AVPixelFormat pix_fmt
Definition: hevc.h:411
Definition: hevc.h:371
static int get_se_golomb_long(GetBitContext *gb)
Definition: golomb.h:215
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
Definition: hevc.h:487
uint8_t transform_skip_enabled_flag
Definition: hevc.h:499
uint8_t uniform_spacing_flag
Definition: hevc.h:518
int ctb_size
Definition: hevc.h:472
static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
Definition: hevc_ps.c:519
int * ctb_addr_rs_to_ts
CtbAddrRSToTS.
Definition: hevc.h:553
PTL ptl
Definition: hevc.h:424
int max_sub_layers
Definition: hevc.h:416
unsigned int log2_min_pu_size
Definition: hevc.h:455
unsigned int sps_id
seq_parameter_set_id
Definition: hevc.h:488
int debug
debug
Definition: avcodec.h:2763
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
#define MAX_VPS_COUNT
Definition: hevc.h:49
ScalingList scaling_list
Definition: hevc.h:530
main external API structure.
Definition: avcodec.h:1532
static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx, PTL *ptl, int max_num_sub_layers)
Definition: hevc_ps.c:278
int log2_max_mv_length_horizontal
Definition: hevc.h:347
uint8_t sao_enabled
Definition: hevc.h:433
int num_extra_slice_header_bits
Definition: hevc.h:534
uint8_t * data
The data buffer.
Definition: buffer.h:89
uint8_t loop_filter_across_tiles_enabled_flag
Definition: hevc.h:519
uint8_t num_long_term_ref_pics_sps
Definition: hevc.h:438
uint8_t cross_component_prediction_enabled_flag
Definition: hevc.h:537
uint32_t vui_num_units_in_tick
Definition: hevc.h:334
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
Definition: buffer.c:82
uint8_t deblocking_filter_control_present_flag
Definition: hevc.h:523
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:312
int transform_skip_context_enabled_flag
Definition: hevc.h:461
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:337
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:330
uint8_t sps_temporal_mvp_enabled_flag
Definition: hevc.h:447
unsigned int nb_st_rps
Definition: hevc.h:429
int chroma_sample_loc_type_bottom_field
Definition: hevc.h:324
int num_tile_rows
num_tile_rows_minus1 + 1
Definition: hevc.h:517
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:305
uint8_t chroma_qp_offset_list_enabled_flag
Definition: hevc.h:538
const uint8_t ff_hevc_diag_scan8x8_y[64]
Definition: hevc_data.c:58
rational number numerator/denominator
Definition: rational.h:43
int vps_num_hrd_parameters
Definition: hevc.h:388
#define MAX_SUB_LAYERS
7.4.2.1
Definition: hevc.h:48
Not part of ABI.
Definition: pixfmt.h:414
static void hevc_pps_free(void *opaque, uint8_t *data)
Definition: hevc_ps.c:1203
unsigned int log2_min_tb_size
Definition: hevc.h:452
uint16_t lt_ref_pic_poc_lsb_sps[32]
Definition: hevc.h:436
int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: hevc_ps.c:1389
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:327
int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps, int apply_defdispwin)
Definition: hevc_ps.c:1158
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:345
uint8_t scaling_list_enable_flag
Definition: hevc.h:426
int * tile_id
TileId.
Definition: hevc.h:555
static const uint8_t default_scaling_list_intra[]
Definition: hevc_ps.c:30
struct HEVCSPS::@52 temporal_layer[MAX_SUB_LAYERS]
int tc_offset
tc_offset_div2 * 2
Definition: hevc.h:527
uint8_t transfer_characteristic
Definition: hevc.h:319
int default_display_window_flag
Definition: hevc.h:330
int size
Size of data in bytes.
Definition: buffer.h:93
HEVCWindow def_disp_win
Definition: hevc.h:331
int cr_qp_offset
Definition: hevc.h:505
ScalingList scaling_list
Definition: hevc.h:427
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:331
unsigned int log2_diff_max_min_coding_block_size
Definition: hevc.h:451
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:337
static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, HEVCSPS *sps)
Definition: hevc_ps.c:679
unsigned int log2_max_pcm_cb_size
Definition: hevc.h:444
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, HEVCSPS *sps)
Definition: hevc_ps.c:1257
uint8_t level_idc
Definition: hevc.h:356
int neutra_chroma_indication_flag
Definition: hevc.h:325
int * tile_pos_rs
TilePosRS.
Definition: hevc.h:556
A reference to a data buffer.
Definition: buffer.h:81
int max_transform_hierarchy_depth_intra
Definition: hevc.h:458
uint8_t profile_space
Definition: hevc.h:352
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:63
Y , 8bpp.
Definition: pixfmt.h:71
unsigned int * row_bd
RowBd.
Definition: hevc.h:550
int video_format
Definition: hevc.h:315
uint8_t weighted_pred_flag
Definition: hevc.h:507
unsigned int * col_bd
ColBd.
Definition: hevc.h:549
unsigned int * column_width
ColumnWidth.
Definition: hevc.h:547
uint8_t slice_header_extension_present_flag
Definition: hevc.h:535
static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, PTLCommon *ptl)
Definition: hevc_ps.c:238
int den
denominator
Definition: rational.h:45
int video_full_range_flag
Definition: hevc.h:316
PTLCommon sub_layer_ptl[MAX_SUB_LAYERS]
Definition: hevc.h:365
AVRational sar
Definition: hevc.h:309
uint8_t chroma_qp_offset_list_len_minus1
Definition: hevc.h:540
int num_delta_pocs
Definition: hevc.h:278
#define FF_PROFILE_HEVC_REXT
Definition: avcodec.h:3110
uint8_t sps_strong_intra_smoothing_enable_flag
Definition: hevc.h:448
int rps_idx_num_delta_pocs
Definition: hevc.h:279
int min_pu_width
Definition: hevc.h:477
unsigned int vps_max_dec_pic_buffering[MAX_SUB_LAYERS]
Definition: hevc.h:378
uint8_t long_term_ref_pics_present_flag
Definition: hevc.h:435
unsigned int vps_max_latency_increase[MAX_SUB_LAYERS]
Definition: hevc.h:380
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:1634
int vui_hrd_parameters_present_flag
Definition: hevc.h:338
unsigned int right_offset
Definition: hevc.h:303
int diff_cu_qp_delta_depth
Definition: hevc.h:502
#define av_freep(p)
const uint8_t ff_hevc_diag_scan8x8_x[64]
Definition: hevc_data.c:39
void INT64 start
Definition: avisynth_c.h:553
int num_reorder_pics
Definition: hevc.h:419
static void remove_sps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:79
uint8_t progressive_source_flag
Definition: hevc.h:357
int cb_qp_offset
Definition: hevc.h:504
#define av_malloc_array(a, b)
int video_signal_type_present_flag
Definition: hevc.h:314
struct HEVCSPS::@53 pcm
uint8_t deblocking_filter_override_enabled_flag
Definition: hevc.h:524
int bit_depth
Definition: hevc.h:409
int beta_offset
beta_offset_div2 * 2
Definition: hevc.h:526
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:2078
int min_tb_height
Definition: hevc.h:476
int * min_tb_addr_zs
MinTbAddrZS.
Definition: hevc.h:557
uint8_t non_packed_constraint_flag
Definition: hevc.h:359
int intra_smoothing_disabled_flag
Definition: hevc.h:464
exp golomb vlc stuff
int pcm_enabled_flag
Definition: hevc.h:414
int tiles_fixed_structure_flag
Definition: hevc.h:341
uint8_t interlaced_source_flag
Definition: hevc.h:358
AVBufferRef * sps_list[MAX_SPS_COUNT]
Definition: hevc.h:563
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:252
int field_seq_flag
Definition: hevc.h:327
Not part of ABI.
Definition: pixfmt.h:432
for(j=16;j >0;--j)
uint8_t separate_colour_plane_flag
output (i.e. cropped) values
Definition: hevc.h:401
const uint8_t ff_hevc_diag_scan4x4_y[16]
Definition: hevc_data.c:32
unsigned int bottom_offset
Definition: hevc.h:305
int vps_sub_layer_ordering_info_present_flag
Definition: hevc.h:377
uint8_t dependent_slice_segments_enabled_flag
Definition: hevc.h:512