FFmpeg
ps.c
Go to the documentation of this file.
1 /*
2  * HEVC Parameter Set decoding
3  *
4  * Copyright (C) 2012 - 2013 Guillaume Martres
5  * Copyright (C) 2012 - 2013 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 "libavutil/mem.h"
28 #include "golomb.h"
29 #include "h2645_vui.h"
30 #include "data.h"
31 #include "ps.h"
32 #include "profiles.h"
33 #include "refstruct.h"
34 
35 static const uint8_t default_scaling_list_intra[] = {
36  16, 16, 16, 16, 17, 18, 21, 24,
37  16, 16, 16, 16, 17, 19, 22, 25,
38  16, 16, 17, 18, 20, 22, 25, 29,
39  16, 16, 18, 21, 24, 27, 31, 36,
40  17, 17, 20, 24, 30, 35, 41, 47,
41  18, 19, 22, 27, 35, 44, 54, 65,
42  21, 22, 25, 31, 41, 54, 70, 88,
43  24, 25, 29, 36, 47, 65, 88, 115
44 };
45 
46 static const uint8_t default_scaling_list_inter[] = {
47  16, 16, 16, 16, 17, 18, 20, 24,
48  16, 16, 16, 17, 18, 20, 24, 25,
49  16, 16, 17, 18, 20, 24, 25, 28,
50  16, 17, 18, 20, 24, 25, 28, 33,
51  17, 18, 20, 24, 25, 28, 33, 41,
52  18, 20, 24, 25, 28, 33, 41, 54,
53  20, 24, 25, 28, 33, 41, 54, 71,
54  24, 25, 28, 33, 41, 54, 71, 91
55 };
56 
57 static const uint8_t hevc_sub_width_c[] = {
58  1, 2, 2, 1
59 };
60 
61 static const uint8_t hevc_sub_height_c[] = {
62  1, 2, 1, 1
63 };
64 
65 static void remove_sps(HEVCParamSets *s, int id)
66 {
67  int i;
68  if (s->sps_list[id]) {
69  /* drop all PPS that depend on this SPS */
70  for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
71  if (s->pps_list[i] && s->pps_list[i]->sps_id == id)
72  ff_refstruct_unref(&s->pps_list[i]);
73 
74  ff_refstruct_unref(&s->sps_list[id]);
75  }
76 }
77 
78 static void remove_vps(HEVCParamSets *s, int id)
79 {
80  int i;
81  if (s->vps_list[id]) {
82  for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++)
83  if (s->sps_list[i] && s->sps_list[i]->vps_id == id)
84  remove_sps(s, i);
85  ff_refstruct_unref(&s->vps_list[id]);
86  }
87 }
88 
90  ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
91 {
92  int delta_poc;
93  int k0 = 0;
94  int k = 0;
95  int i;
96 
97  rps->used = 0;
98  rps->rps_predict = 0;
99 
100  if (rps != sps->st_rps && sps->nb_st_rps)
101  rps->rps_predict = get_bits1(gb);
102 
103  if (rps->rps_predict) {
104  const ShortTermRPS *rps_ridx;
105  uint8_t used[32] = { 0 };
106  int delta_rps;
107 
108  if (is_slice_header) {
109  rps->delta_idx = get_ue_golomb_long(gb) + 1;
110  if (rps->delta_idx > sps->nb_st_rps) {
111  av_log(avctx, AV_LOG_ERROR,
112  "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
113  rps->delta_idx, sps->nb_st_rps);
114  return AVERROR_INVALIDDATA;
115  }
116  rps_ridx = &sps->st_rps[sps->nb_st_rps - rps->delta_idx];
117  rps->rps_idx_num_delta_pocs = rps_ridx->num_delta_pocs;
118  } else
119  rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
120 
121  rps->delta_rps_sign = get_bits1(gb);
122  rps->abs_delta_rps = get_ue_golomb_long(gb) + 1;
123  if (rps->abs_delta_rps > 32768) {
124  av_log(avctx, AV_LOG_ERROR,
125  "Invalid value of abs_delta_rps: %d\n",
126  rps->abs_delta_rps);
127  return AVERROR_INVALIDDATA;
128  }
129  delta_rps = (1 - (rps->delta_rps_sign << 1)) * rps->abs_delta_rps;
130  for (i = 0; i <= rps_ridx->num_delta_pocs; i++) {
131  used[k] = get_bits1(gb);
132 
133  rps->use_delta = 0;
134  if (!used[k])
135  rps->use_delta = get_bits1(gb);
136 
137  if (used[k] || rps->use_delta) {
138  if (i < rps_ridx->num_delta_pocs)
139  delta_poc = delta_rps + rps_ridx->delta_poc[i];
140  else
141  delta_poc = delta_rps;
142  rps->delta_poc[k] = delta_poc;
143  if (delta_poc < 0)
144  k0++;
145  k++;
146  }
147  }
148 
149  if (k >= FF_ARRAY_ELEMS(used)) {
150  av_log(avctx, AV_LOG_ERROR,
151  "Invalid num_delta_pocs: %d\n", k);
152  return AVERROR_INVALIDDATA;
153  }
154 
155  rps->num_delta_pocs = k;
156  rps->num_negative_pics = k0;
157  // sort in increasing order (smallest first)
158  if (rps->num_delta_pocs != 0) {
159  int u, tmp;
160  for (i = 1; i < rps->num_delta_pocs; i++) {
161  delta_poc = rps->delta_poc[i];
162  u = used[i];
163  for (k = i - 1; k >= 0; k--) {
164  tmp = rps->delta_poc[k];
165  if (delta_poc < tmp) {
166  rps->delta_poc[k + 1] = tmp;
167  used[k + 1] = used[k];
168  rps->delta_poc[k] = delta_poc;
169  used[k] = u;
170  }
171  }
172  }
173  }
174  if ((rps->num_negative_pics >> 1) != 0) {
175  int u;
176  k = rps->num_negative_pics - 1;
177  // flip the negative values to largest first
178  for (i = 0; i < rps->num_negative_pics >> 1; i++) {
179  delta_poc = rps->delta_poc[i];
180  u = used[i];
181  rps->delta_poc[i] = rps->delta_poc[k];
182  used[i] = used[k];
183  rps->delta_poc[k] = delta_poc;
184  used[k] = u;
185  k--;
186  }
187  }
188 
189  for (unsigned i = 0; i < FF_ARRAY_ELEMS(used); i++)
190  rps->used |= (uint32_t)used[i] << i;
191  } else {
192  unsigned int nb_positive_pics;
193 
195  nb_positive_pics = get_ue_golomb_long(gb);
196 
197  if (rps->num_negative_pics >= HEVC_MAX_REFS ||
198  nb_positive_pics >= HEVC_MAX_REFS) {
199  av_log(avctx, AV_LOG_ERROR, "Too many refs in a short term RPS.\n");
200  return AVERROR_INVALIDDATA;
201  }
202 
203  rps->num_delta_pocs = rps->num_negative_pics + nb_positive_pics;
204  if (rps->num_delta_pocs) {
205  int prev = 0;
206 
207  for (i = 0; i < rps->num_negative_pics; i++) {
208  delta_poc = get_ue_golomb_long(gb) + 1;
209  if (delta_poc < 1 || delta_poc > 32768) {
210  av_log(avctx, AV_LOG_ERROR,
211  "Invalid value of delta_poc: %d\n",
212  delta_poc);
213  return AVERROR_INVALIDDATA;
214  }
215  prev -= delta_poc;
216  rps->delta_poc[i] = prev;
217  rps->used |= get_bits1(gb) * (1 << i);
218  }
219  prev = 0;
220  for (i = 0; i < nb_positive_pics; i++) {
221  delta_poc = get_ue_golomb_long(gb) + 1;
222  if (delta_poc < 1 || delta_poc > 32768) {
223  av_log(avctx, AV_LOG_ERROR,
224  "Invalid value of delta_poc: %d\n",
225  delta_poc);
226  return AVERROR_INVALIDDATA;
227  }
228  prev += delta_poc;
229  rps->delta_poc[rps->num_negative_pics + i] = prev;
230  rps->used |= get_bits1(gb) * (1 << (rps->num_negative_pics + i));
231  }
232  }
233  }
234  return 0;
235 }
236 
237 
239  PTLCommon *ptl)
240 {
241  const char *profile_name = NULL;
242  int i;
243 
244  if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 43 + 1)
245  return -1;
246 
247  ptl->profile_space = get_bits(gb, 2);
248  ptl->tier_flag = get_bits1(gb);
249  ptl->profile_idc = get_bits(gb, 5);
250 
251 #if !CONFIG_SMALL
252  for (int i = 0; ff_hevc_profiles[i].profile != AV_PROFILE_UNKNOWN; i++)
253  if (ff_hevc_profiles[i].profile == ptl->profile_idc) {
254  profile_name = ff_hevc_profiles[i].name;
255  break;
256  }
257 #endif
258  av_log(avctx, profile_name ? AV_LOG_DEBUG : AV_LOG_WARNING,
259  "%s profile bitstream\n", profile_name ? profile_name : "Unknown");
260 
261  for (i = 0; i < 32; i++) {
262  ptl->profile_compatibility_flag[i] = get_bits1(gb);
263 
264  if (ptl->profile_idc == 0 && i > 0 && ptl->profile_compatibility_flag[i])
265  ptl->profile_idc = i;
266  }
267  ptl->progressive_source_flag = get_bits1(gb);
268  ptl->interlaced_source_flag = get_bits1(gb);
269  ptl->non_packed_constraint_flag = get_bits1(gb);
270  ptl->frame_only_constraint_flag = get_bits1(gb);
271 
272 #define check_profile_idc(idc) \
273  ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
274 
277  check_profile_idc(10)) {
278 
279  ptl->max_12bit_constraint_flag = get_bits1(gb);
280  ptl->max_10bit_constraint_flag = get_bits1(gb);
281  ptl->max_8bit_constraint_flag = get_bits1(gb);
282  ptl->max_422chroma_constraint_flag = get_bits1(gb);
283  ptl->max_420chroma_constraint_flag = get_bits1(gb);
284  ptl->max_monochrome_constraint_flag = get_bits1(gb);
285  ptl->intra_constraint_flag = get_bits1(gb);
286  ptl->one_picture_only_constraint_flag = get_bits1(gb);
287  ptl->lower_bit_rate_constraint_flag = get_bits1(gb);
288 
290  ptl->max_14bit_constraint_flag = get_bits1(gb);
291  skip_bits_long(gb, 33); // XXX_reserved_zero_33bits[0..32]
292  } else {
293  skip_bits_long(gb, 34); // XXX_reserved_zero_34bits[0..33]
294  }
295  } else if (check_profile_idc(2)) {
296  skip_bits(gb, 7);
297  ptl->one_picture_only_constraint_flag = get_bits1(gb);
298  skip_bits_long(gb, 35); // XXX_reserved_zero_35bits[0..34]
299  } else {
300  skip_bits_long(gb, 43); // XXX_reserved_zero_43bits[0..42]
301  }
302 
305  ptl->inbld_flag = get_bits1(gb);
306  else
307  skip_bits1(gb);
308 #undef check_profile_idc
309 
310  return 0;
311 }
312 
313 static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx,
314  int profile_present, PTL *ptl, int max_num_sub_layers)
315 {
316  int i, status = 0;
317 
318  if (profile_present) {
319  status = decode_profile_tier_level(gb, avctx, &ptl->general_ptl);
320  } else {
321  memset(&ptl->general_ptl, 0, sizeof(ptl->general_ptl));
322  }
323 
324  if (status < 0 || get_bits_left(gb) < 8 + (8*2 * (max_num_sub_layers - 1 > 0))) {
325  av_log(avctx, AV_LOG_ERROR, "PTL information too short\n");
326  return -1;
327  }
328 
329  ptl->general_ptl.level_idc = get_bits(gb, 8);
330 
331  for (i = 0; i < max_num_sub_layers - 1; i++) {
334  }
335 
336  if (max_num_sub_layers - 1> 0)
337  for (i = max_num_sub_layers - 1; i < 8; i++)
338  skip_bits(gb, 2); // reserved_zero_2bits[i]
339  for (i = 0; i < max_num_sub_layers - 1; i++) {
341  decode_profile_tier_level(gb, avctx, &ptl->sub_layer_ptl[i]) < 0) {
342  av_log(avctx, AV_LOG_ERROR,
343  "PTL information for sublayer %i too short\n", i);
344  return -1;
345  }
347  if (get_bits_left(gb) < 8) {
348  av_log(avctx, AV_LOG_ERROR,
349  "Not enough data for sublayer %i level_idc\n", i);
350  return -1;
351  } else
352  ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
353  }
354  }
355 
356  return 0;
357 }
358 
359 static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
360  HEVCSublayerHdrParams *par, int subpic_params_present)
361 {
362  int i;
363 
364  for (i = 0; i < nb_cpb; i++) {
367 
368  if (subpic_params_present) {
371  }
372 
373  par->cbr_flag |= get_bits1(gb) << i;
374  }
375 }
376 
377 static int decode_hrd(GetBitContext *gb, int common_inf_present,
378  HEVCHdrParams *hdr, int max_sublayers)
379 {
380  if (common_inf_present) {
383 
387 
389  hdr->tick_divisor_minus2 = get_bits(gb, 8);
393  }
394 
395  hdr->bit_rate_scale = get_bits(gb, 4);
396  hdr->cpb_size_scale = get_bits(gb, 4);
397 
399  hdr->cpb_size_du_scale = get_bits(gb, 4);
400 
404  }
405  }
406 
407  for (int i = 0; i < max_sublayers; i++) {
408  unsigned fixed_pic_rate_general_flag = get_bits1(gb);
409  unsigned fixed_pic_rate_within_cvs_flag = 0;
410  unsigned low_delay_hrd_flag = 0;
411  hdr->flags.fixed_pic_rate_general_flag |= fixed_pic_rate_general_flag << i;
412 
413  if (!fixed_pic_rate_general_flag)
414  fixed_pic_rate_within_cvs_flag = get_bits1(gb);
415  hdr->flags.fixed_pic_rate_within_cvs_flag |= fixed_pic_rate_within_cvs_flag << i;
416 
417  if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
419  else
420  low_delay_hrd_flag = get_bits1(gb);
421  hdr->flags.low_delay_hrd_flag |= low_delay_hrd_flag << i;
422 
423  if (!low_delay_hrd_flag) {
424  unsigned cpb_cnt_minus1 = get_ue_golomb_long(gb);
425  if (cpb_cnt_minus1 > 31) {
426  av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n",
427  cpb_cnt_minus1);
428  return AVERROR_INVALIDDATA;
429  }
430  hdr->cpb_cnt_minus1[i] = cpb_cnt_minus1;
431  }
432 
434  decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->nal_params[i],
436 
438  decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->vcl_params[i],
440  }
441 
442  return 0;
443 }
444 
445 static void hevc_vps_free(FFRefStructOpaque opaque, void *obj)
446 {
447  HEVCVPS *vps = obj;
448 
449  av_freep(&vps->hdr);
450  av_freep(&vps->data);
451 }
452 
459 };
460 
465 };
466 
468  uint64_t layer1_id_included)
469 {
470  PTL ptl_dummy;
471  uint8_t max_sub_layers[HEVC_MAX_LAYERS];
472 
473  int splitting_flag, dimension_id_len, view_id_len, num_add_olss,
474  default_output_layer_idc, direct_dep_type_len, direct_dep_type,
475  sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
476  unsigned non_vui_extension_length;
477 
478  if (vps->vps_max_layers == 1 || vps->vps_num_layer_sets == 1) {
479  av_log(avctx, AV_LOG_VERBOSE, "Ignoring VPS extensions with a single layer\n");
480  return 0;
481  }
482 
483  if (vps->vps_max_layers > 2) {
484  av_log(avctx, AV_LOG_ERROR,
485  "VPS has %d layers, only 2 layers are supported\n",
486  vps->vps_max_layers);
487  return AVERROR_PATCHWELCOME;
488  }
489  if (vps->vps_num_layer_sets > 2) {
490  av_log(avctx, AV_LOG_ERROR,
491  "VPS has %d layer sets, only 2 layer sets are supported\n",
492  vps->vps_num_layer_sets);
493  return AVERROR_PATCHWELCOME;
494  }
495 
496  align_get_bits(gb);
497 
498  /**
499  * For stereoscopic MV-HEVC, the following simplifying assumptions are made:
500  *
501  * - vps_max_layers = 2 (one base layer, one multiview layer)
502  * - vps_num_layer_sets = 2 (one output layer set for each view)
503  * - NumScalabilityTypes = 1 (only HEVC_SCALABILITY_MULTIVIEW)
504  * - direct_dependency_flag[1][0] = 1 (second layer depends on first)
505  * - num_add_olss = 0 (no extra output layer sets)
506  * - default_output_layer_idc = 0 (1:1 mapping between OLSs and layers)
507  * - layer_id_included_flag[1] = {1, 1} (consequence of layer dependencies)
508  * - vps_num_rep_formats_minus1 = 0 (all layers have the same size)
509  *
510  * Which results in the following derived variables:
511  * - ViewOrderIdx = {0, 1}
512  * - NumViews = 2
513  * - DependencyFlag[1][0] = 1
514  * - NumDirectRefLayers = {0, 1}
515  * - NumRefLayers = {0, 1}
516  * - NumPredictedLayers = {1, 0}
517  * - NumIndependentLayers = 1
518  * - NumLayersInTreePartition = {2}
519  * - NumLayerSets = 2
520  * - NumOutputLayerSets = 2
521  * - OlsIdxToLsIdx = {0, 1}
522  * - LayerIdxInVps = {0, 1}
523  * - NumLayersInIdList = {1, 2}
524  * - NumNecessaryLayers = {1, 2}
525  * - NecessaryLayerFlag = {{1, 0}, {1, 1}}
526  * - NumOutputLayersInOutputLayerSet = {1, 2}
527  * - OutputLayerFlag = {{1, 0}, {1, 1}}
528  */
529  vps->nb_layers = 2;
530 
531  if (parse_ptl(gb, avctx, 0, &ptl_dummy, vps->vps_max_sub_layers) < 0)
532  return AVERROR_INVALIDDATA;
533 
534  splitting_flag = get_bits1(gb);
535  for (int i = 0; i <= HEVC_SCALABILITY_MASK_MAX; i++) {
536  int scalability_mask_flag = get_bits1(gb);
537  if (scalability_mask_flag != (i == HEVC_SCALABILITY_MULTIVIEW)) {
538  av_log(avctx, AV_LOG_ERROR, "Scalability type %d not supported\n", i);
539  return AVERROR_PATCHWELCOME;
540  }
541  }
542 
543  if (!splitting_flag)
544  dimension_id_len = get_bits(gb, 3) + 1;
545 
546  if (get_bits1(gb)) { /* vps_nuh_layer_id_present_flag */
547  int layer_id_in_nuh = get_bits(gb, 6);
548  if (layer_id_in_nuh >= FF_ARRAY_ELEMS(vps->layer_idx)) {
549  av_log(avctx, AV_LOG_ERROR, "Invalid layer_id_in_nuh[1]: %d\n",
550  layer_id_in_nuh);
551  return AVERROR_INVALIDDATA;
552  }
553  vps->layer_idx[layer_id_in_nuh] = 1;
554  vps->layer_id_in_nuh[1] = layer_id_in_nuh;
555  } else {
556  vps->layer_idx[1] = 1;
557  vps->layer_id_in_nuh[1] = 1;
558  }
559 
560  if (!splitting_flag) {
561  int view_idx = get_bits(gb, dimension_id_len);
562  if (view_idx != 1) {
563  av_log(avctx, AV_LOG_ERROR, "Unexpected ViewOrderIdx: %d\n", view_idx);
564  return AVERROR_PATCHWELCOME;
565  }
566  }
567 
568  view_id_len = get_bits(gb, 4);
569  if (view_id_len)
570  for (int i = 0; i < 2 /* NumViews */; i++)
571  vps->view_id[i] = get_bits(gb, view_id_len);
572 
573  if (!get_bits1(gb) /* direct_dependency_flag */) {
574  av_log(avctx, AV_LOG_WARNING, "Independent output layers not supported\n");
575  return AVERROR_PATCHWELCOME;
576  }
577  vps->num_direct_ref_layers[1] = 1;
578 
579  sub_layers_max_present = get_bits1(gb); // vps_sub_layers_max_minus1_present_flag
580  for (int i = 0; i < vps->vps_max_layers; i++)
581  max_sub_layers[i] = sub_layers_max_present ? get_bits(gb, 3) + 1 :
582  vps->vps_max_sub_layers;
583 
584  if (get_bits1(gb) /* max_tid_ref_present_flag */)
585  skip_bits(gb, 3); // max_tid_il_ref_pics_plus1
586 
587  vps->default_ref_layers_active = get_bits1(gb);
588 
589  nb_ptl = get_ue_golomb(gb) + 1;
590  /* idx [0] is signalled in base VPS, idx [1] is signalled at the
591  * start of VPS extension, indices 2+ are signalled here;
592  * we ignore all but the first one anyway */
593  for (int i = 2; i < nb_ptl; i++) {
594  int profile_present = get_bits1(gb);
595  if (parse_ptl(gb, avctx, profile_present, &ptl_dummy, vps->vps_max_sub_layers) < 0)
596  return AVERROR_INVALIDDATA;
597  }
598 
599  num_add_olss = get_ue_golomb(gb);
600  if (num_add_olss != 0) {
601  /* Since we don't implement support for independent output layer sets
602  * and auxiliary layers, this should never nonzero */
603  av_log(avctx, AV_LOG_ERROR, "Unexpected num_add_olss: %d\n", num_add_olss);
604  return AVERROR_PATCHWELCOME;
605  }
606 
607  default_output_layer_idc = get_bits(gb, 2);
608  if (default_output_layer_idc != 0) {
609  av_log(avctx, AV_LOG_WARNING, "Unsupported default_output_layer_idc: %d\n",
610  default_output_layer_idc);
611  return AVERROR_PATCHWELCOME;
612  }
613 
614  /* Consequence of established layer dependencies */
615  if (layer1_id_included != ((1ULL << vps->layer_id_in_nuh[0]) |
616  (1ULL << vps->layer_id_in_nuh[1]))) {
617  av_log(avctx, AV_LOG_ERROR, "Dependent layer not included in layer ID?\n");
618  return AVERROR_PATCHWELCOME;
619  }
620 
621  vps->num_output_layer_sets = 2;
622  vps->ols[1] = 3;
623 
624  for (int j = 0; j < av_popcount64(vps->ols[1]); j++) {
625  int ptl_idx = get_bits(gb, av_ceil_log2(nb_ptl));
626  if (ptl_idx < 1 || ptl_idx >= nb_ptl) {
627  av_log(avctx, AV_LOG_ERROR, "Invalid PTL index: %d\n", ptl_idx);
628  return AVERROR_INVALIDDATA;
629  }
630  }
631 
632  if (get_ue_golomb_31(gb) != 0 /* vps_num_rep_formats_minus1 */) {
633  av_log(avctx, AV_LOG_ERROR, "Unexpected extra rep formats\n");
634  return AVERROR_INVALIDDATA;
635  }
636 
637  vps->rep_format.pic_width_in_luma_samples = get_bits(gb, 16);
638  vps->rep_format.pic_height_in_luma_samples = get_bits(gb, 16);
639 
640  if (!get_bits1(gb) /* chroma_and_bit_depth_vps_present_flag */) {
641  av_log(avctx, AV_LOG_ERROR,
642  "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
643  return AVERROR_INVALIDDATA;
644  }
645  vps->rep_format.chroma_format_idc = get_bits(gb, 2);
646  if (vps->rep_format.chroma_format_idc == 3)
647  vps->rep_format.separate_colour_plane_flag = get_bits1(gb);
648  vps->rep_format.bit_depth_luma = get_bits(gb, 4) + 8;
649  vps->rep_format.bit_depth_chroma = get_bits(gb, 4) + 8;
650  if (vps->rep_format.bit_depth_luma > 16 ||
651  vps->rep_format.bit_depth_chroma > 16 ||
652  vps->rep_format.bit_depth_luma != vps->rep_format.bit_depth_chroma) {
653  av_log(avctx, AV_LOG_ERROR, "Unsupported bit depth: %"PRIu8" %"PRIu8"\n",
654  vps->rep_format.bit_depth_luma, vps->rep_format.bit_depth_chroma);
655  return AVERROR_PATCHWELCOME;
656  }
657 
658  if (get_bits1(gb) /* conformance_window_vps_flag */) {
659  int vert_mult = hevc_sub_height_c[vps->rep_format.chroma_format_idc];
660  int horiz_mult = hevc_sub_width_c[vps->rep_format.chroma_format_idc];
661  vps->rep_format.conf_win_left_offset = get_ue_golomb(gb) * horiz_mult;
662  vps->rep_format.conf_win_right_offset = get_ue_golomb(gb) * horiz_mult;
663  vps->rep_format.conf_win_top_offset = get_ue_golomb(gb) * vert_mult;
664  vps->rep_format.conf_win_bottom_offset = get_ue_golomb(gb) * vert_mult;
665  }
666 
667  vps->max_one_active_ref_layer = get_bits1(gb);
668  vps->poc_lsb_aligned = get_bits1(gb);
669 
670  sub_layer_flag_info_present_flag = get_bits1(gb);
671  for (int j = 0; j < FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
672  int sub_layer_dpb_info_present_flag = 1;
673  if (j > 0 && sub_layer_flag_info_present_flag)
674  sub_layer_dpb_info_present_flag = get_bits1(gb);
675  if (sub_layer_dpb_info_present_flag) {
676  for (int k = 0; k < av_popcount64(vps->ols[1]); k++)
677  vps->dpb_size.max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
678  vps->dpb_size.max_num_reorder_pics = get_ue_golomb_long(gb);
679  vps->dpb_size.max_latency_increase = get_ue_golomb_long(gb) - 1;
680  }
681  }
682 
683  direct_dep_type_len = get_ue_golomb_31(gb) + 2;
684  if (direct_dep_type_len > 32) {
685  av_log(avctx, AV_LOG_ERROR, "Invalid direct_dep_type_len: %d\n",
686  direct_dep_type_len);
687  return AVERROR_INVALIDDATA;
688  }
689 
690  skip_bits1(gb); /* direct_depenency_all_layers_flag */
691  direct_dep_type = get_bits_long(gb, direct_dep_type_len);
692  if (direct_dep_type > HEVC_DEP_TYPE_BOTH) {
693  av_log(avctx, AV_LOG_WARNING, "Unsupported direct_dep_type: %d\n",
694  direct_dep_type);
695  return AVERROR_PATCHWELCOME;
696  }
697 
698  non_vui_extension_length = get_ue_golomb(gb);
699  if (non_vui_extension_length > 4096) {
700  av_log(avctx, AV_LOG_ERROR, "vps_non_vui_extension_length too large: %u\n",
701  non_vui_extension_length);
702  return AVERROR_INVALIDDATA;
703  }
704  skip_bits_long(gb, non_vui_extension_length * 8);
705 
706  if (get_bits1(gb)) // vps_vui_present_flag
707  av_log(avctx, AV_LOG_WARNING, "VPS VUI not supported\n");
708 
709  return 0;
710 }
711 
713  HEVCParamSets *ps)
714 {
715  int i;
716  int vps_id = get_bits(gb, 4);
717  ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
718  int ret = AVERROR_INVALIDDATA;
719  uint64_t layer1_id_included = 0;
720  HEVCVPS *vps;
721 
722  if (ps->vps_list[vps_id]) {
723  const HEVCVPS *vps1 = ps->vps_list[vps_id];
724  if (vps1->data_size == nal_size &&
725  !memcmp(vps1->data, gb->buffer, vps1->data_size))
726  return 0;
727  }
728 
730  if (!vps)
731  return AVERROR(ENOMEM);
732 
733  av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n");
734 
735  vps->data_size = nal_size;
736  vps->data = av_memdup(gb->buffer, nal_size);
737  if (!vps->data) {
738  ret = AVERROR(ENOMEM);
739  goto err;
740  }
741  vps->vps_id = vps_id;
742 
743  if (get_bits(gb, 2) != 3) { // vps_reserved_three_2bits
744  av_log(avctx, AV_LOG_ERROR, "vps_reserved_three_2bits is not three\n");
745  goto err;
746  }
747 
748  vps->vps_max_layers = get_bits(gb, 6) + 1;
749  vps->vps_max_sub_layers = get_bits(gb, 3) + 1;
750  vps->vps_temporal_id_nesting_flag = get_bits1(gb);
751 
752  if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
753  av_log(avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
754  goto err;
755  }
756 
757  if (vps->vps_max_sub_layers > HEVC_MAX_SUB_LAYERS) {
758  av_log(avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
759  vps->vps_max_sub_layers);
760  goto err;
761  }
762 
763  if (parse_ptl(gb, avctx, 1, &vps->ptl, vps->vps_max_sub_layers) < 0)
764  goto err;
765 
766  vps->vps_sub_layer_ordering_info_present_flag = get_bits1(gb);
767 
768  i = vps->vps_sub_layer_ordering_info_present_flag ? 0 : vps->vps_max_sub_layers - 1;
769  for (; i < vps->vps_max_sub_layers; i++) {
770  vps->vps_max_dec_pic_buffering[i] = get_ue_golomb_long(gb) + 1;
771  vps->vps_num_reorder_pics[i] = get_ue_golomb_long(gb);
772  vps->vps_max_latency_increase[i] = get_ue_golomb_long(gb) - 1;
773 
774  if (vps->vps_max_dec_pic_buffering[i] > HEVC_MAX_DPB_SIZE || !vps->vps_max_dec_pic_buffering[i]) {
775  av_log(avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
776  vps->vps_max_dec_pic_buffering[i] - 1);
777  goto err;
778  }
779  if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
780  av_log(avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
781  vps->vps_num_reorder_pics[i]);
782  if (avctx->err_recognition & AV_EF_EXPLODE)
783  goto err;
784  }
785  }
786 
787  vps->vps_max_layer_id = get_bits(gb, 6);
788  vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
789  if (vps->vps_num_layer_sets < 1 || vps->vps_num_layer_sets > 1024 ||
790  (vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
791  av_log(avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
792  goto err;
793  }
794 
795  vps->num_output_layer_sets = 1;
796  vps->ols[0] = 1;
797 
798  // we support at most 2 layers, so ignore the others
799  if (vps->vps_num_layer_sets > 1)
800  layer1_id_included = get_bits64(gb, vps->vps_max_layer_id + 1); // layer_id_included_flag
801  if (vps->vps_num_layer_sets > 2)
802  skip_bits_long(gb, (vps->vps_num_layer_sets - 2) * (vps->vps_max_layer_id + 1));
803 
804  vps->vps_timing_info_present_flag = get_bits1(gb);
805  if (vps->vps_timing_info_present_flag) {
806  vps->vps_num_units_in_tick = get_bits_long(gb, 32);
807  vps->vps_time_scale = get_bits_long(gb, 32);
808  vps->vps_poc_proportional_to_timing_flag = get_bits1(gb);
809  if (vps->vps_poc_proportional_to_timing_flag)
810  vps->vps_num_ticks_poc_diff_one = get_ue_golomb_long(gb) + 1;
811  vps->vps_num_hrd_parameters = get_ue_golomb_long(gb);
812  if (vps->vps_num_hrd_parameters > (unsigned)vps->vps_num_layer_sets) {
813  av_log(avctx, AV_LOG_ERROR,
814  "vps_num_hrd_parameters %d is invalid\n", vps->vps_num_hrd_parameters);
815  goto err;
816  }
817 
818  if (vps->vps_num_hrd_parameters) {
819  vps->hdr = av_calloc(vps->vps_num_hrd_parameters, sizeof(*vps->hdr));
820  if (!vps->hdr)
821  goto err;
822  }
823 
824  for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
825  int common_inf_present = 1;
826 
827  get_ue_golomb_long(gb); // hrd_layer_set_idx
828  if (i)
829  common_inf_present = get_bits1(gb);
830  decode_hrd(gb, common_inf_present, &vps->hdr[i],
831  vps->vps_max_sub_layers);
832  }
833  }
834 
835  vps->nb_layers = 1;
836  vps->layer_idx[0] = 0;
837  for (int i = 1; i < FF_ARRAY_ELEMS(vps->layer_idx); i++)
838  vps->layer_idx[i] = -1;
839 
840  if (vps->vps_max_layers > 1 && get_bits1(gb)) { /* vps_extension_flag */
841  int ret = decode_vps_ext(gb, avctx, vps, layer1_id_included);
842  if (ret == AVERROR_PATCHWELCOME) {
843  vps->nb_layers = 1;
844  av_log(avctx, AV_LOG_WARNING, "Ignoring unsupported VPS extension\n");
845  ret = 0;
846  } else if (ret < 0)
847  goto err;
848  }
849 
850  if (get_bits_left(gb) < 0) {
851  av_log(avctx, AV_LOG_ERROR,
852  "Overread VPS by %d bits\n", -get_bits_left(gb));
853  if (ps->vps_list[vps_id])
854  goto err;
855  }
856 
857  remove_vps(ps, vps_id);
858  ps->vps_list[vps_id] = vps;
859 
860  return 0;
861 
862 err:
864  return ret;
865 }
866 
867 static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
868  int apply_defdispwin, HEVCSPS *sps)
869 {
870  VUI backup_vui, *vui = &sps->vui;
871  GetBitContext backup;
872  int alt = 0;
873 
874  ff_h2645_decode_common_vui_params(gb, &sps->vui.common, avctx);
875 
877  if (vui->common.video_full_range_flag && sps->pix_fmt == AV_PIX_FMT_YUV420P)
878  sps->pix_fmt = AV_PIX_FMT_YUVJ420P;
880  if (vui->common.matrix_coeffs == AVCOL_SPC_RGB) {
881  switch (sps->pix_fmt) {
882  case AV_PIX_FMT_YUV444P:
883  sps->pix_fmt = AV_PIX_FMT_GBRP;
884  break;
886  sps->pix_fmt = AV_PIX_FMT_GBRP10;
887  break;
889  sps->pix_fmt = AV_PIX_FMT_GBRP12;
890  break;
891  }
892  }
893  }
894  }
895 
897  vui->field_seq_flag = get_bits1(gb);
899 
900  // Backup context in case an alternate header is detected
901  memcpy(&backup, gb, sizeof(backup));
902  memcpy(&backup_vui, vui, sizeof(backup_vui));
903  if (get_bits_left(gb) >= 68 && show_bits(gb, 21) == 0x100000) {
905  av_log(avctx, AV_LOG_WARNING, "Invalid default display window\n");
906  } else
908 
909  if (vui->default_display_window_flag) {
910  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
911  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
912  vui->def_disp_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
913  vui->def_disp_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
914  vui->def_disp_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
915  vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
916 
917  if (apply_defdispwin &&
919  av_log(avctx, AV_LOG_DEBUG,
920  "discarding vui default display window, "
921  "original values are l:%u r:%u t:%u b:%u\n",
926 
929  vui->def_disp_win.top_offset =
930  vui->def_disp_win.bottom_offset = 0;
931  }
932  }
933 
936 
937  if (vui->vui_timing_info_present_flag) {
938  if( get_bits_left(gb) < 66 && !alt) {
939  // The alternate syntax seem to have timing info located
940  // at where def_disp_win is normally located
941  av_log(avctx, AV_LOG_WARNING,
942  "Strange VUI timing information, retrying...\n");
943  memcpy(vui, &backup_vui, sizeof(backup_vui));
944  memcpy(gb, &backup, sizeof(backup));
945  alt = 1;
946  goto timing_info;
947  }
948  vui->vui_num_units_in_tick = get_bits_long(gb, 32);
949  vui->vui_time_scale = get_bits_long(gb, 32);
950  if (alt) {
951  av_log(avctx, AV_LOG_INFO, "Retry got %"PRIu32"/%"PRIu32" fps\n",
953  }
959  decode_hrd(gb, 1, &sps->hdr, sps->max_sub_layers);
960  }
961 
963  if (vui->bitstream_restriction_flag) {
964  if (get_bits_left(gb) < 8 && !alt) {
965  av_log(avctx, AV_LOG_WARNING,
966  "Strange VUI bitstream restriction information, retrying"
967  " from timing information...\n");
968  memcpy(vui, &backup_vui, sizeof(backup_vui));
969  memcpy(gb, &backup, sizeof(backup));
970  alt = 1;
971  goto timing_info;
972  }
981  }
982 
983  if (get_bits_left(gb) < 1 && !alt) {
984  // XXX: Alternate syntax when sps_range_extension_flag != 0?
985  av_log(avctx, AV_LOG_WARNING,
986  "Overread in VUI, retrying from timing information...\n");
987  memcpy(vui, &backup_vui, sizeof(backup_vui));
988  memcpy(gb, &backup, sizeof(backup));
989  alt = 1;
990  goto timing_info;
991  }
992 }
993 
995 {
996  int matrixId;
997 
998  for (matrixId = 0; matrixId < 6; matrixId++) {
999  // 4x4 default is 16
1000  memset(sl->sl[0][matrixId], 16, 16);
1001  sl->sl_dc[0][matrixId] = 16; // default for 16x16
1002  sl->sl_dc[1][matrixId] = 16; // default for 32x32
1003  }
1004  memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
1005  memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
1006  memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
1007  memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
1008  memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
1009  memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
1010  memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
1011  memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
1012  memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
1013  memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
1014  memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
1015  memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
1016  memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
1017  memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
1018  memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
1019  memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
1020  memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
1021  memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
1022 }
1023 
1025  ScalingList *sl, const HEVCSPS *sps)
1026 {
1027  uint8_t scaling_list_pred_mode_flag;
1028  uint8_t scaling_list_dc_coef[2][6];
1029  int size_id, matrix_id, pos;
1030  int i;
1031 
1032  for (size_id = 0; size_id < 4; size_id++)
1033  for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1034  scaling_list_pred_mode_flag = get_bits1(gb);
1035  if (!scaling_list_pred_mode_flag) {
1036  unsigned int delta = get_ue_golomb_long(gb);
1037  /* Only need to handle non-zero delta. Zero means default,
1038  * which should already be in the arrays. */
1039  if (delta) {
1040  // Copy from previous array.
1041  delta *= (size_id == 3) ? 3 : 1;
1042  if (matrix_id < delta) {
1043  av_log(avctx, AV_LOG_ERROR,
1044  "Invalid delta in scaling list data: %d.\n", delta);
1045  return AVERROR_INVALIDDATA;
1046  }
1047 
1048  memcpy(sl->sl[size_id][matrix_id],
1049  sl->sl[size_id][matrix_id - delta],
1050  size_id > 0 ? 64 : 16);
1051  if (size_id > 1)
1052  sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
1053  }
1054  } else {
1055  int next_coef, coef_num;
1056  int32_t scaling_list_delta_coef;
1057 
1058  next_coef = 8;
1059  coef_num = FFMIN(64, 1 << (4 + (size_id << 1)));
1060  if (size_id > 1) {
1061  int scaling_list_coeff_minus8 = get_se_golomb(gb);
1062  if (scaling_list_coeff_minus8 < -7 ||
1063  scaling_list_coeff_minus8 > 247)
1064  return AVERROR_INVALIDDATA;
1065  scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1066  next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1067  sl->sl_dc[size_id - 2][matrix_id] = next_coef;
1068  }
1069  for (i = 0; i < coef_num; i++) {
1070  if (size_id == 0)
1071  pos = 4 * ff_hevc_diag_scan4x4_y[i] +
1073  else
1074  pos = 8 * ff_hevc_diag_scan8x8_y[i] +
1076 
1077  scaling_list_delta_coef = get_se_golomb(gb);
1078  next_coef = (next_coef + 256U + scaling_list_delta_coef) % 256;
1079  sl->sl[size_id][matrix_id][pos] = next_coef;
1080  }
1081  }
1082  }
1083 
1084  if (sps->chroma_format_idc == 3) {
1085  for (i = 0; i < 64; i++) {
1086  sl->sl[3][1][i] = sl->sl[2][1][i];
1087  sl->sl[3][2][i] = sl->sl[2][2][i];
1088  sl->sl[3][4][i] = sl->sl[2][4][i];
1089  sl->sl[3][5][i] = sl->sl[2][5][i];
1090  }
1091  sl->sl_dc[1][1] = sl->sl_dc[0][1];
1092  sl->sl_dc[1][2] = sl->sl_dc[0][2];
1093  sl->sl_dc[1][4] = sl->sl_dc[0][4];
1094  sl->sl_dc[1][5] = sl->sl_dc[0][5];
1095  }
1096 
1097 
1098  return 0;
1099 }
1100 
1102 {
1103  const AVPixFmtDescriptor *desc;
1104  switch (sps->bit_depth) {
1105  case 8:
1106  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
1107  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
1108  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
1109  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
1110  break;
1111  case 9:
1112  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY9;
1113  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
1114  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
1115  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
1116  break;
1117  case 10:
1118  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY10;
1119  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
1120  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
1121  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
1122  break;
1123  case 12:
1124  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY12;
1125  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
1126  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
1127  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
1128  break;
1129  default:
1130  av_log(avctx, AV_LOG_ERROR,
1131  "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1132  "chroma_format_idc is %d, depth is %d\n",
1133  sps->chroma_format_idc, sps->bit_depth);
1134  return AVERROR_INVALIDDATA;
1135  }
1136 
1137  desc = av_pix_fmt_desc_get(sps->pix_fmt);
1138  if (!desc)
1139  return AVERROR(EINVAL);
1140 
1141  sps->hshift[0] = sps->vshift[0] = 0;
1142  sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
1143  sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
1144 
1145  sps->pixel_shift = sps->bit_depth > 8;
1146 
1147  return 0;
1148 }
1149 
1151  unsigned nuh_layer_id, int apply_defdispwin,
1152  const HEVCVPS * const *vps_list, AVCodecContext *avctx)
1153 {
1154  HEVCWindow *ow;
1155  int ret = 0;
1156  int bit_depth_chroma, num_comps, multi_layer_ext;
1157  int i;
1158 
1159  // Coded parameters
1160 
1161  sps->vps_id = get_bits(gb, 4);
1162 
1163  if (vps_list) {
1164  if (!vps_list[sps->vps_id]) {
1165  av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
1166  sps->vps_id);
1167  return AVERROR_INVALIDDATA;
1168  }
1169  sps->vps = ff_refstruct_ref_c(vps_list[sps->vps_id]);
1170  }
1171 
1172  sps->max_sub_layers = get_bits(gb, 3) + 1;
1173  multi_layer_ext = nuh_layer_id > 0 &&
1174  sps->max_sub_layers == HEVC_MAX_SUB_LAYERS + 1;
1175  if (multi_layer_ext) {
1176  if (!sps->vps)
1177  return AVERROR(EINVAL);
1178 
1179  sps->max_sub_layers = sps->vps->vps_max_sub_layers;
1180  }
1181  if (sps->max_sub_layers > HEVC_MAX_SUB_LAYERS) {
1182  av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
1183  sps->max_sub_layers);
1184  return AVERROR_INVALIDDATA;
1185  }
1186 
1187  if (!multi_layer_ext) {
1188  sps->temporal_id_nesting = get_bits(gb, 1);
1189 
1190  if ((ret = parse_ptl(gb, avctx, 1, &sps->ptl, sps->max_sub_layers)) < 0)
1191  return ret;
1192  } else {
1193  sps->temporal_id_nesting = sps->max_sub_layers > 1 ?
1194  sps->vps->vps_max_sub_layers : 1;
1195  }
1196 
1197  *sps_id = get_ue_golomb_long(gb);
1198  if (*sps_id >= HEVC_MAX_SPS_COUNT) {
1199  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", *sps_id);
1200  return AVERROR_INVALIDDATA;
1201  }
1202 
1203  if (multi_layer_ext) {
1204  const RepFormat *rf = &sps->vps->rep_format;
1205 
1206  if (get_bits1(gb) && // update_rep_format_flag
1207  get_bits(gb, 8)) { // sps_rep_format_idx
1208  av_log(avctx, AV_LOG_ERROR, "sps_rep_format_idx!=0\n");
1209  return AVERROR_PATCHWELCOME;
1210  }
1211 
1212  sps->separate_colour_plane = rf->separate_colour_plane_flag;
1213  sps->chroma_format_idc = sps->separate_colour_plane ? 0 :
1214  rf->chroma_format_idc;
1215  sps->bit_depth = rf->bit_depth_luma;
1216  sps->width = rf->pic_width_in_luma_samples;
1217  sps->height = rf->pic_height_in_luma_samples;
1218 
1219  sps->pic_conf_win.left_offset = rf->conf_win_left_offset;
1220  sps->pic_conf_win.right_offset = rf->conf_win_right_offset;
1221  sps->pic_conf_win.top_offset = rf->conf_win_top_offset;
1222  sps->pic_conf_win.bottom_offset = rf->conf_win_bottom_offset;
1223 
1224  } else {
1225  sps->chroma_format_idc = get_ue_golomb_long(gb);
1226  if (sps->chroma_format_idc > 3U) {
1227  av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
1228  return AVERROR_INVALIDDATA;
1229  }
1230 
1231  if (sps->chroma_format_idc == 3)
1232  sps->separate_colour_plane = get_bits1(gb);
1233 
1234  if (sps->separate_colour_plane)
1235  sps->chroma_format_idc = 0;
1236 
1237  sps->width = get_ue_golomb_long(gb);
1238  sps->height = get_ue_golomb_long(gb);
1239  if ((ret = av_image_check_size(sps->width,
1240  sps->height, 0, avctx)) < 0)
1241  return ret;
1242 
1243  sps->conformance_window = get_bits1(gb);
1244  if (sps->conformance_window) {
1245  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
1246  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
1247  sps->pic_conf_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
1248  sps->pic_conf_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
1249  sps->pic_conf_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
1250  sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
1251 
1252  if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
1253  av_log(avctx, AV_LOG_DEBUG,
1254  "discarding sps conformance window, "
1255  "original values are l:%u r:%u t:%u b:%u\n",
1256  sps->pic_conf_win.left_offset,
1257  sps->pic_conf_win.right_offset,
1258  sps->pic_conf_win.top_offset,
1259  sps->pic_conf_win.bottom_offset);
1260 
1261  sps->pic_conf_win.left_offset =
1262  sps->pic_conf_win.right_offset =
1263  sps->pic_conf_win.top_offset =
1264  sps->pic_conf_win.bottom_offset = 0;
1265  }
1266  }
1267 
1268  sps->bit_depth = get_ue_golomb_31(gb) + 8;
1269  if (sps->bit_depth > 16) {
1270  av_log(avctx, AV_LOG_ERROR, "Luma bit depth (%d) is out of range\n",
1271  sps->bit_depth);
1272  return AVERROR_INVALIDDATA;
1273  }
1274  bit_depth_chroma = get_ue_golomb_31(gb) + 8;
1275  if (bit_depth_chroma > 16) {
1276  av_log(avctx, AV_LOG_ERROR, "Chroma bit depth (%d) is out of range\n",
1277  bit_depth_chroma);
1278  return AVERROR_INVALIDDATA;
1279  }
1280  if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
1281  av_log(avctx, AV_LOG_ERROR,
1282  "Luma bit depth (%d) is different from chroma bit depth (%d), "
1283  "this is unsupported.\n",
1284  sps->bit_depth, bit_depth_chroma);
1285  return AVERROR_INVALIDDATA;
1286  }
1287  sps->bit_depth_chroma = bit_depth_chroma;
1288  }
1289 
1290  sps->output_window = sps->pic_conf_win;
1291 
1292  ret = map_pixel_format(avctx, sps);
1293  if (ret < 0)
1294  return ret;
1295 
1296  sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
1297  if (sps->log2_max_poc_lsb > 16) {
1298  av_log(avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
1299  sps->log2_max_poc_lsb - 4);
1300  return AVERROR_INVALIDDATA;
1301  }
1302 
1303  if (!multi_layer_ext) {
1304  int start;
1305 
1306  sps->sublayer_ordering_info = get_bits1(gb);
1307  start = sps->sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
1308  for (i = start; i < sps->max_sub_layers; i++) {
1309  sps->temporal_layer[i].max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
1310  sps->temporal_layer[i].num_reorder_pics = get_ue_golomb_long(gb);
1311  sps->temporal_layer[i].max_latency_increase = get_ue_golomb_long(gb) - 1;
1312  if (sps->temporal_layer[i].max_dec_pic_buffering > (unsigned)HEVC_MAX_DPB_SIZE) {
1313  av_log(avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
1314  sps->temporal_layer[i].max_dec_pic_buffering - 1U);
1315  return AVERROR_INVALIDDATA;
1316  }
1317  if (sps->temporal_layer[i].num_reorder_pics > sps->temporal_layer[i].max_dec_pic_buffering - 1) {
1318  av_log(avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
1319  sps->temporal_layer[i].num_reorder_pics);
1320  if (avctx->err_recognition & AV_EF_EXPLODE ||
1321  sps->temporal_layer[i].num_reorder_pics > HEVC_MAX_DPB_SIZE - 1) {
1322  return AVERROR_INVALIDDATA;
1323  }
1324  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[i].num_reorder_pics + 1;
1325  }
1326  }
1327 
1328  if (!sps->sublayer_ordering_info) {
1329  for (i = 0; i < start; i++) {
1330  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[start].max_dec_pic_buffering;
1331  sps->temporal_layer[i].num_reorder_pics = sps->temporal_layer[start].num_reorder_pics;
1332  sps->temporal_layer[i].max_latency_increase = sps->temporal_layer[start].max_latency_increase;
1333  }
1334  }
1335  } else {
1336  for (int i = 0; i < sps->max_sub_layers; i++) {
1337  sps->temporal_layer[i].max_dec_pic_buffering = sps->vps->dpb_size.max_dec_pic_buffering;
1338  sps->temporal_layer[i].num_reorder_pics = sps->vps->dpb_size.max_num_reorder_pics;
1339  sps->temporal_layer[i].max_latency_increase = sps->vps->dpb_size.max_latency_increase;
1340  }
1341  }
1342 
1343  sps->log2_min_cb_size = get_ue_golomb_long(gb) + 3;
1344  sps->log2_diff_max_min_coding_block_size = get_ue_golomb_long(gb);
1345  sps->log2_min_tb_size = get_ue_golomb_long(gb) + 2;
1346  sps->log2_diff_max_min_transform_block_size = get_ue_golomb_long(gb);
1347  sps->log2_max_trafo_size = sps->log2_diff_max_min_transform_block_size +
1348  sps->log2_min_tb_size;
1349 
1350  if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
1351  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
1352  return AVERROR_INVALIDDATA;
1353  }
1354 
1355  if (sps->log2_diff_max_min_coding_block_size > 30) {
1356  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);
1357  return AVERROR_INVALIDDATA;
1358  }
1359 
1360  if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
1361  av_log(avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
1362  return AVERROR_INVALIDDATA;
1363  }
1364 
1365  if (sps->log2_diff_max_min_transform_block_size > 30) {
1366  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size",
1367  sps->log2_diff_max_min_transform_block_size);
1368  return AVERROR_INVALIDDATA;
1369  }
1370 
1371  sps->max_transform_hierarchy_depth_inter = get_ue_golomb_long(gb);
1372  sps->max_transform_hierarchy_depth_intra = get_ue_golomb_long(gb);
1373 
1374  sps->scaling_list_enabled = get_bits1(gb);
1375  if (sps->scaling_list_enabled) {
1376  set_default_scaling_list_data(&sps->scaling_list);
1377 
1378  if (multi_layer_ext && get_bits1(gb)) { // sps_infer_scaling_list_flag
1379  av_log(avctx, AV_LOG_ERROR, "sps_infer_scaling_list_flag=1 not supported\n");
1380  return AVERROR_PATCHWELCOME;
1381  }
1382 
1383  if (get_bits1(gb)) {
1384  ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps);
1385  if (ret < 0)
1386  return ret;
1387  }
1388  }
1389 
1390  sps->amp_enabled = get_bits1(gb);
1391  sps->sao_enabled = get_bits1(gb);
1392 
1393  sps->pcm_enabled = get_bits1(gb);
1394  if (sps->pcm_enabled) {
1395  sps->pcm.bit_depth = get_bits(gb, 4) + 1;
1396  sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
1397  sps->pcm.log2_min_pcm_cb_size = get_ue_golomb_long(gb) + 3;
1398  sps->pcm.log2_max_pcm_cb_size = sps->pcm.log2_min_pcm_cb_size +
1399  get_ue_golomb_long(gb);
1400  if (FFMAX(sps->pcm.bit_depth, sps->pcm.bit_depth_chroma) > sps->bit_depth) {
1401  av_log(avctx, AV_LOG_ERROR,
1402  "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1403  sps->pcm.bit_depth, sps->pcm.bit_depth_chroma, sps->bit_depth);
1404  return AVERROR_INVALIDDATA;
1405  }
1406 
1407  sps->pcm_loop_filter_disabled = get_bits1(gb);
1408  }
1409 
1410  sps->nb_st_rps = get_ue_golomb_long(gb);
1411  if (sps->nb_st_rps > HEVC_MAX_SHORT_TERM_REF_PIC_SETS) {
1412  av_log(avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
1413  sps->nb_st_rps);
1414  return AVERROR_INVALIDDATA;
1415  }
1416  for (i = 0; i < sps->nb_st_rps; i++) {
1417  if ((ret = ff_hevc_decode_short_term_rps(gb, avctx, &sps->st_rps[i],
1418  sps, 0)) < 0)
1419  return ret;
1420  }
1421 
1422  sps->long_term_ref_pics_present = get_bits1(gb);
1423  if (sps->long_term_ref_pics_present) {
1424  sps->num_long_term_ref_pics_sps = get_ue_golomb_long(gb);
1425  if (sps->num_long_term_ref_pics_sps > HEVC_MAX_LONG_TERM_REF_PICS) {
1426  av_log(avctx, AV_LOG_ERROR, "Too many long term ref pics: %d.\n",
1427  sps->num_long_term_ref_pics_sps);
1428  return AVERROR_INVALIDDATA;
1429  }
1430 
1431  sps->used_by_curr_pic_lt = 0;
1432  for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
1433  sps->lt_ref_pic_poc_lsb_sps[i] = get_bits(gb, sps->log2_max_poc_lsb);
1434  sps->used_by_curr_pic_lt |= get_bits1(gb) << i;
1435  }
1436  }
1437 
1438  sps->temporal_mvp_enabled = get_bits1(gb);
1439  sps->strong_intra_smoothing_enabled = get_bits1(gb);
1440  sps->vui.common.sar = (AVRational){0, 1};
1441  sps->vui_present = get_bits1(gb);
1442  if (sps->vui_present)
1443  decode_vui(gb, avctx, apply_defdispwin, sps);
1444 
1445  sps->extension_present = get_bits1(gb);
1446  if (sps->extension_present) {
1447  sps->range_extension = get_bits1(gb);
1448  sps->multilayer_extension = get_bits1(gb);
1449  sps->sps_3d_extension = get_bits1(gb);
1450  sps->scc_extension = get_bits1(gb);
1451  skip_bits(gb, 4); // sps_extension_4bits
1452 
1453  if (sps->range_extension) {
1454  sps->transform_skip_rotation_enabled = get_bits1(gb);
1455  sps->transform_skip_context_enabled = get_bits1(gb);
1456  sps->implicit_rdpcm_enabled = get_bits1(gb);
1457  sps->explicit_rdpcm_enabled = get_bits1(gb);
1458 
1459  sps->extended_precision_processing = get_bits1(gb);
1460  if (sps->extended_precision_processing)
1461  av_log(avctx, AV_LOG_WARNING,
1462  "extended_precision_processing_flag not yet implemented\n");
1463 
1464  sps->intra_smoothing_disabled = get_bits1(gb);
1465  sps->high_precision_offsets_enabled = get_bits1(gb);
1466  if (sps->high_precision_offsets_enabled)
1467  av_log(avctx, AV_LOG_WARNING,
1468  "high_precision_offsets_enabled_flag not yet implemented\n");
1469 
1470  sps->persistent_rice_adaptation_enabled = get_bits1(gb);
1471 
1472  sps->cabac_bypass_alignment_enabled = get_bits1(gb);
1473  if (sps->cabac_bypass_alignment_enabled)
1474  av_log(avctx, AV_LOG_WARNING,
1475  "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1476  }
1477 
1478  if (sps->multilayer_extension) {
1479  skip_bits1(gb); // inter_view_mv_vert_constraint_flag
1480  }
1481 
1482  if (sps->sps_3d_extension) {
1483  for (i = 0; i <= 1; i++) {
1484  skip_bits1(gb); // iv_di_mc_enabled_flag
1485  skip_bits1(gb); // iv_mv_scal_enabled_flag
1486  if (i == 0) {
1487  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1488  skip_bits1(gb); // iv_res_pred_enabled_flag
1489  skip_bits1(gb); // depth_ref_enabled_flag
1490  skip_bits1(gb); // vsp_mc_enabled_flag
1491  skip_bits1(gb); // dbbp_enabled_flag
1492  } else {
1493  skip_bits1(gb); // tex_mc_enabled_flag
1494  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1495  skip_bits1(gb); // intra_contour_enabled_flag
1496  skip_bits1(gb); // intra_dc_only_wedge_enabled_flag
1497  skip_bits1(gb); // cqt_cu_part_pred_enabled_flag
1498  skip_bits1(gb); // inter_dc_only_enabled_flag
1499  skip_bits1(gb); // skip_intra_enabled_flag
1500  }
1501  }
1502  av_log(avctx, AV_LOG_WARNING,
1503  "sps_3d_extension_flag not yet implemented\n");
1504  }
1505 
1506  if (sps->scc_extension) {
1507  sps->curr_pic_ref_enabled = get_bits1(gb);
1508  sps->palette_mode_enabled = get_bits1(gb);
1509  if (sps->palette_mode_enabled) {
1510  sps->palette_max_size = get_ue_golomb(gb);
1511  sps->delta_palette_max_predictor_size = get_ue_golomb(gb);
1512  sps->palette_predictor_initializers_present = get_bits1(gb);
1513 
1514  if (sps->palette_predictor_initializers_present) {
1515  sps->sps_num_palette_predictor_initializers = get_ue_golomb(gb) + 1;
1516  if (sps->sps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
1517  av_log(avctx, AV_LOG_ERROR,
1518  "sps_num_palette_predictor_initializers out of range: %u\n",
1519  sps->sps_num_palette_predictor_initializers);
1520  return AVERROR_INVALIDDATA;
1521  }
1522  num_comps = !sps->chroma_format_idc ? 1 : 3;
1523  for (int comp = 0; comp < num_comps; comp++) {
1524  int bit_depth = !comp ? sps->bit_depth : sps->bit_depth_chroma;
1525  for (i = 0; i < sps->sps_num_palette_predictor_initializers; i++)
1526  sps->sps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
1527  }
1528  }
1529  }
1530  sps->motion_vector_resolution_control_idc = get_bits(gb, 2);
1531  sps->intra_boundary_filtering_disabled = get_bits1(gb);
1532  }
1533  }
1534  if (apply_defdispwin) {
1535  sps->output_window.left_offset += sps->vui.def_disp_win.left_offset;
1536  sps->output_window.right_offset += sps->vui.def_disp_win.right_offset;
1537  sps->output_window.top_offset += sps->vui.def_disp_win.top_offset;
1538  sps->output_window.bottom_offset += sps->vui.def_disp_win.bottom_offset;
1539  }
1540 
1541  ow = &sps->output_window;
1542  if (ow->left_offset >= INT_MAX - ow->right_offset ||
1543  ow->top_offset >= INT_MAX - ow->bottom_offset ||
1544  ow->left_offset + ow->right_offset >= sps->width ||
1545  ow->top_offset + ow->bottom_offset >= sps->height) {
1546  av_log(avctx, AV_LOG_WARNING, "Invalid cropping offsets: %u/%u/%u/%u\n",
1547  ow->left_offset, ow->right_offset, ow->top_offset, ow->bottom_offset);
1548  if (avctx->err_recognition & AV_EF_EXPLODE) {
1549  return AVERROR_INVALIDDATA;
1550  }
1551  av_log(avctx, AV_LOG_WARNING,
1552  "Displaying the whole video surface.\n");
1553  memset(ow, 0, sizeof(*ow));
1554  memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
1555  }
1556 
1557  // Inferred parameters
1558  sps->log2_ctb_size = sps->log2_min_cb_size +
1559  sps->log2_diff_max_min_coding_block_size;
1560  sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
1561 
1562  if (sps->log2_ctb_size > HEVC_MAX_LOG2_CTB_SIZE) {
1563  av_log(avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
1564  return AVERROR_INVALIDDATA;
1565  }
1566  if (sps->log2_ctb_size < 4) {
1567  av_log(avctx,
1568  AV_LOG_ERROR,
1569  "log2_ctb_size %d differs from the bounds of any known profile\n",
1570  sps->log2_ctb_size);
1571  avpriv_request_sample(avctx, "log2_ctb_size %d", sps->log2_ctb_size);
1572  return AVERROR_INVALIDDATA;
1573  }
1574 
1575  sps->ctb_width = (sps->width + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1576  sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1577  sps->ctb_size = sps->ctb_width * sps->ctb_height;
1578 
1579  sps->min_cb_width = sps->width >> sps->log2_min_cb_size;
1580  sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
1581  sps->min_tb_width = sps->width >> sps->log2_min_tb_size;
1582  sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
1583  sps->min_pu_width = sps->width >> sps->log2_min_pu_size;
1584  sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
1585  sps->tb_mask = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
1586 
1587  sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
1588 
1589  if (av_zero_extend(sps->width, sps->log2_min_cb_size) ||
1590  av_zero_extend(sps->height, sps->log2_min_cb_size)) {
1591  av_log(avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
1592  return AVERROR_INVALIDDATA;
1593  }
1594 
1595  if (sps->max_transform_hierarchy_depth_inter > sps->log2_ctb_size - sps->log2_min_tb_size) {
1596  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
1597  sps->max_transform_hierarchy_depth_inter);
1598  return AVERROR_INVALIDDATA;
1599  }
1600  if (sps->max_transform_hierarchy_depth_intra > sps->log2_ctb_size - sps->log2_min_tb_size) {
1601  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
1602  sps->max_transform_hierarchy_depth_intra);
1603  return AVERROR_INVALIDDATA;
1604  }
1605  if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
1606  av_log(avctx, AV_LOG_ERROR,
1607  "max transform block size out of range: %d\n",
1608  sps->log2_max_trafo_size);
1609  return AVERROR_INVALIDDATA;
1610  }
1611 
1612  if (get_bits_left(gb) < 0) {
1613  av_log(avctx, AV_LOG_ERROR,
1614  "Overread SPS by %d bits\n", -get_bits_left(gb));
1615  return AVERROR_INVALIDDATA;
1616  }
1617 
1618  return 0;
1619 }
1620 
1621 static void hevc_sps_free(FFRefStructOpaque opaque, void *obj)
1622 {
1623  HEVCSPS *sps = obj;
1624 
1625  ff_refstruct_unref(&sps->vps);
1626 
1627  av_freep(&sps->data);
1628 }
1629 
1630 static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
1631 {
1632  return sps1->data_size == sps2->data_size &&
1633  !memcmp(sps1->data, sps2->data, sps1->data_size);
1634 }
1635 
1637  HEVCParamSets *ps, unsigned nuh_layer_id,
1638  int apply_defdispwin)
1639 {
1641  unsigned int sps_id;
1642  int ret;
1643 
1644  if (!sps)
1645  return AVERROR(ENOMEM);
1646 
1647  av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
1648 
1649  sps->data_size = gb->buffer_end - gb->buffer;
1650  sps->data = av_memdup(gb->buffer, sps->data_size);
1651  if (!sps->data) {
1652  ret = AVERROR(ENOMEM);
1653  goto err;
1654  }
1655 
1656  ret = ff_hevc_parse_sps(sps, gb, &sps_id,
1657  nuh_layer_id, apply_defdispwin,
1658  ps->vps_list, avctx);
1659  if (ret < 0)
1660  goto err;
1661 
1662  if (avctx->debug & FF_DEBUG_BITSTREAM) {
1663  av_log(avctx, AV_LOG_DEBUG,
1664  "Parsed SPS: id %d; coded wxh: %dx%d; "
1665  "cropped wxh: %dx%d; pix_fmt: %s.\n",
1666  sps_id, sps->width, sps->height,
1667  sps->width - (sps->output_window.left_offset + sps->output_window.right_offset),
1668  sps->height - (sps->output_window.top_offset + sps->output_window.bottom_offset),
1669  av_get_pix_fmt_name(sps->pix_fmt));
1670  }
1671 
1672  /* check if this is a repeat of an already parsed SPS, then keep the
1673  * original one.
1674  * otherwise drop all PPSes that depend on it */
1675  if (ps->sps_list[sps_id] &&
1676  compare_sps(ps->sps_list[sps_id], sps)) {
1678  } else {
1679  remove_sps(ps, sps_id);
1680  ps->sps_list[sps_id] = sps;
1681  }
1682 
1683  return 0;
1684 err:
1686  return ret;
1687 }
1688 
1689 static void hevc_pps_free(FFRefStructOpaque unused, void *obj)
1690 {
1691  HEVCPPS *pps = obj;
1692 
1693  ff_refstruct_unref(&pps->sps);
1694 
1695  av_freep(&pps->column_width);
1696  av_freep(&pps->row_height);
1697  av_freep(&pps->col_bd);
1698  av_freep(&pps->row_bd);
1699  av_freep(&pps->col_idxX);
1700  av_freep(&pps->ctb_addr_rs_to_ts);
1701  av_freep(&pps->ctb_addr_ts_to_rs);
1702  av_freep(&pps->tile_pos_rs);
1703  av_freep(&pps->tile_id);
1704  av_freep(&pps->min_tb_addr_zs_tab);
1705  av_freep(&pps->data);
1706 }
1707 
1708 static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth,
1709  int idx_y, int idx_cb, int idx_cr, int inp_length)
1710 {
1711  unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1712  int cm_res_bits;
1713 
1714  part_num_y = 1 << pps->cm_y_part_num_log2;
1715 
1716  split_octant_flag = inp_depth < pps->cm_octant_depth ? get_bits1(gb) : 0;
1717 
1718  if (split_octant_flag)
1719  for (int k = 0; k < 2; k++)
1720  for (int m = 0; m < 2; m++)
1721  for (int n = 0; n < 2; n++)
1722  colour_mapping_octants(gb, pps, inp_depth + 1,
1723  idx_y + part_num_y * k * inp_length / 2,
1724  idx_cb + m * inp_length / 2,
1725  idx_cr + n * inp_length / 2,
1726  inp_length / 2);
1727  else
1728  for (int i = 0; i < part_num_y; i++) {
1729  for (int j = 0; j < 4; j++) {
1730  coded_res_flag = get_bits1(gb);
1731  if (coded_res_flag)
1732  for (int c = 0; c < 3; c++) {
1733  res_coeff_q = get_ue_golomb_long(gb);
1734  cm_res_bits = FFMAX(0, 10 + pps->luma_bit_depth_cm_input -
1735  pps->luma_bit_depth_cm_output -
1736  pps->cm_res_quant_bits - pps->cm_delta_flc_bits);
1737  res_coeff_r = cm_res_bits ? get_bits(gb, cm_res_bits) : 0;
1738  if (res_coeff_q || res_coeff_r)
1739  skip_bits1(gb);
1740  }
1741  }
1742  }
1743 }
1744 
1746 {
1747  pps->num_cm_ref_layers = get_ue_golomb(gb) + 1;
1748  if (pps->num_cm_ref_layers > 62) {
1749  av_log(avctx, AV_LOG_ERROR,
1750  "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1751  return AVERROR_INVALIDDATA;
1752  }
1753  for (int i = 0; i < pps->num_cm_ref_layers; i++)
1754  pps->cm_ref_layer_id[i] = get_bits(gb, 6);
1755 
1756  pps->cm_octant_depth = get_bits(gb, 2);
1757  pps->cm_y_part_num_log2 = get_bits(gb, 2);
1758 
1759  pps->luma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1760  pps->chroma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1761  pps->luma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1762  pps->chroma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1763 
1764  pps->cm_res_quant_bits = get_bits(gb, 2);
1765  pps->cm_delta_flc_bits = get_bits(gb, 2) + 1;
1766 
1767  if (pps->cm_octant_depth == 1) {
1768  pps->cm_adapt_threshold_u_delta = get_se_golomb_long(gb);
1769  pps->cm_adapt_threshold_v_delta = get_se_golomb_long(gb);
1770  }
1771 
1772  colour_mapping_octants(gb, pps, 0, 0, 0, 0, 1 << pps->cm_octant_depth);
1773 
1774  return 0;
1775 }
1776 
1778  HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
1779 {
1780  pps->poc_reset_info_present_flag = get_bits1(gb);
1781  pps->pps_infer_scaling_list_flag = get_bits1(gb);
1782  if (pps->pps_infer_scaling_list_flag)
1783  pps->pps_scaling_list_ref_layer_id = get_bits(gb, 6);
1784 
1785  pps->num_ref_loc_offsets = get_ue_golomb(gb);
1786  if (pps->num_ref_loc_offsets > vps->vps_max_layers - 1)
1787  return AVERROR_INVALIDDATA;
1788 
1789  for (int i = 0; i < pps->num_ref_loc_offsets; i++) {
1790  pps->ref_loc_offset_layer_id[i] = get_bits(gb, 6);
1791  pps->scaled_ref_layer_offset_present_flag[i] = get_bits1(gb);
1792  if (pps->scaled_ref_layer_offset_present_flag[i]) {
1793  pps->scaled_ref_layer_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1794  pps->scaled_ref_layer_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1795  pps->scaled_ref_layer_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1796  pps->scaled_ref_layer_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1797  }
1798 
1799  pps->ref_region_offset_present_flag[i] = get_bits1(gb);
1800  if (pps->ref_region_offset_present_flag[i]) {
1801  pps->ref_region_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1802  pps->ref_region_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1803  pps->ref_region_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1804  pps->ref_region_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1805  }
1806 
1807  pps->resample_phase_set_present_flag[i] = get_bits1(gb);
1808  if (pps->resample_phase_set_present_flag[i]) {
1809  pps->phase_hor_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1810  pps->phase_ver_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1811  pps->phase_hor_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1812  pps->phase_ver_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1813  }
1814  }
1815 
1816  pps->colour_mapping_enabled_flag = get_bits1(gb);
1817  if (pps->colour_mapping_enabled_flag) {
1818  int ret = colour_mapping_table(gb, avctx, pps);
1819  if (ret < 0)
1820  return ret;
1821  }
1822 
1823  return 0;
1824 }
1825 
1827 {
1828  unsigned int num_val_delta_dlt, max_diff = 0;
1829  int min_diff_minus1 = -1;
1830  unsigned int len;
1831 
1832  num_val_delta_dlt = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1833  if (num_val_delta_dlt) {
1834  if (num_val_delta_dlt > 1)
1835  max_diff = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1836  if (num_val_delta_dlt > 2 && max_diff) {
1837  len = av_log2(max_diff) + 1;
1838  min_diff_minus1 = get_bits(gb, len);
1839  }
1840  if (max_diff > (min_diff_minus1 + 1))
1841  for (int k = 1; k < num_val_delta_dlt; k++) {
1842  len = av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1843  skip_bits(gb, len); // delta_val_diff_minus_min
1844  }
1845  }
1846 }
1847 
1849  HEVCPPS *pps, const HEVCSPS *sps)
1850 {
1851  unsigned int pps_depth_layers_minus1;
1852 
1853  if (get_bits1(gb)) { // dlts_present_flag
1854  pps_depth_layers_minus1 = get_bits(gb, 6);
1855  pps->pps_bit_depth_for_depth_layers_minus8 = get_bits(gb, 4);
1856  for (int i = 0; i <= pps_depth_layers_minus1; i++) {
1857  if (get_bits1(gb)) { // dlt_flag[i]
1858  if (!get_bits1(gb)) { // dlt_pred_flag[i]
1859  if (get_bits1(gb)) { // dlt_val_flags_present_flag[i]
1860  for (int j = 0; j <= ((1 << (pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1861  skip_bits1(gb); // dlt_value_flag[i][j]
1862  } else
1863  delta_dlt(gb, pps);
1864  }
1865  }
1866  }
1867  }
1868 
1869  return 0;
1870 }
1871 
1873  HEVCPPS *pps, const HEVCSPS *sps)
1874 {
1875  if (pps->transform_skip_enabled_flag) {
1876  pps->log2_max_transform_skip_block_size = get_ue_golomb_31(gb) + 2;
1877  }
1878  pps->cross_component_prediction_enabled_flag = get_bits1(gb);
1879  pps->chroma_qp_offset_list_enabled_flag = get_bits1(gb);
1880  if (pps->chroma_qp_offset_list_enabled_flag) {
1881  pps->diff_cu_chroma_qp_offset_depth = get_ue_golomb_31(gb);
1882  pps->chroma_qp_offset_list_len_minus1 = get_ue_golomb_31(gb);
1883  if (pps->chroma_qp_offset_list_len_minus1 > 5) {
1884  av_log(avctx, AV_LOG_ERROR,
1885  "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1886  return AVERROR_INVALIDDATA;
1887  }
1888  for (int i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
1889  pps->cb_qp_offset_list[i] = get_se_golomb(gb);
1890  if (pps->cb_qp_offset_list[i]) {
1891  av_log(avctx, AV_LOG_WARNING,
1892  "cb_qp_offset_list not tested yet.\n");
1893  }
1894  pps->cr_qp_offset_list[i] = get_se_golomb(gb);
1895  if (pps->cr_qp_offset_list[i]) {
1896  av_log(avctx, AV_LOG_WARNING,
1897  "cb_qp_offset_list not tested yet.\n");
1898  }
1899  }
1900  }
1901  pps->log2_sao_offset_scale_luma = get_ue_golomb_31(gb);
1902  pps->log2_sao_offset_scale_chroma = get_ue_golomb_31(gb);
1903 
1904  if ( pps->log2_sao_offset_scale_luma > FFMAX(sps->bit_depth - 10, 0)
1905  || pps->log2_sao_offset_scale_chroma > FFMAX(sps->bit_depth_chroma - 10, 0)
1906  )
1907  return AVERROR_INVALIDDATA;
1908 
1909  return(0);
1910 }
1911 
1913  HEVCPPS *pps, const HEVCSPS *sps)
1914 {
1915  int num_comps, ret;
1916 
1917  pps->pps_curr_pic_ref_enabled_flag = get_bits1(gb);
1918  if (pps->residual_adaptive_colour_transform_enabled_flag = get_bits1(gb)) {
1919  pps->pps_slice_act_qp_offsets_present_flag = get_bits1(gb);
1920  pps->pps_act_y_qp_offset = get_se_golomb(gb) - 5;
1921  pps->pps_act_cb_qp_offset = get_se_golomb(gb) - 5;
1922  pps->pps_act_cr_qp_offset = get_se_golomb(gb) - 3;
1923 
1924 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
1925  pps->pps_act_ ## name ## _qp_offset >= 12)
1927 #undef CHECK_QP_OFFSET
1928  if (ret) {
1929  av_log(avctx, AV_LOG_ERROR,
1930  "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
1931  return AVERROR_INVALIDDATA;
1932  }
1933  }
1934 
1935  if (pps->pps_palette_predictor_initializers_present_flag = get_bits1(gb)) {
1936  pps->pps_num_palette_predictor_initializers = get_ue_golomb(gb);
1937  if (pps->pps_num_palette_predictor_initializers > 0) {
1938  if (pps->pps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
1939  av_log(avctx, AV_LOG_ERROR,
1940  "pps_num_palette_predictor_initializers out of range: %u\n",
1941  pps->pps_num_palette_predictor_initializers);
1942  return AVERROR_INVALIDDATA;
1943  }
1944  pps->monochrome_palette_flag = get_bits1(gb);
1945  pps->luma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
1946  if (pps->luma_bit_depth_entry != sps->bit_depth)
1947  return AVERROR_INVALIDDATA;
1948  if (!pps->monochrome_palette_flag) {
1949  pps->chroma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
1950  if (pps->chroma_bit_depth_entry != sps->bit_depth_chroma)
1951  return AVERROR_INVALIDDATA;
1952  }
1953 
1954  num_comps = pps->monochrome_palette_flag ? 1 : 3;
1955  for (int comp = 0; comp < num_comps; comp++) {
1956  int bit_depth = !comp ? pps->luma_bit_depth_entry : pps->chroma_bit_depth_entry;
1957  for (int i = 0; i < pps->pps_num_palette_predictor_initializers; i++)
1958  pps->pps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
1959  }
1960  }
1961  }
1962 
1963  return 0;
1964 }
1965 
1966 static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb,
1967  HEVCPPS *pps, const HEVCSPS *sps)
1968 {
1969  int log2_diff;
1970  int pic_area_in_ctbs;
1971  int i, j, x, y, ctb_addr_rs, tile_id;
1972 
1973  // Inferred parameters
1974  pps->col_bd = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
1975  pps->row_bd = av_malloc_array(pps->num_tile_rows + 1, sizeof(*pps->row_bd));
1976  pps->col_idxX = av_malloc_array(sps->ctb_width, sizeof(*pps->col_idxX));
1977  if (!pps->col_bd || !pps->row_bd || !pps->col_idxX)
1978  return AVERROR(ENOMEM);
1979 
1980  if (pps->uniform_spacing_flag) {
1981  if (!pps->column_width) {
1982  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1983  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1984  }
1985  if (!pps->column_width || !pps->row_height)
1986  return AVERROR(ENOMEM);
1987 
1988  for (i = 0; i < pps->num_tile_columns; i++) {
1989  pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
1990  (i * sps->ctb_width) / pps->num_tile_columns;
1991  }
1992 
1993  for (i = 0; i < pps->num_tile_rows; i++) {
1994  pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
1995  (i * sps->ctb_height) / pps->num_tile_rows;
1996  }
1997  }
1998 
1999  pps->col_bd[0] = 0;
2000  for (i = 0; i < pps->num_tile_columns; i++)
2001  pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
2002 
2003  pps->row_bd[0] = 0;
2004  for (i = 0; i < pps->num_tile_rows; i++)
2005  pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
2006 
2007  for (i = 0, j = 0; i < sps->ctb_width; i++) {
2008  if (i > pps->col_bd[j])
2009  j++;
2010  pps->col_idxX[i] = j;
2011  }
2012 
2013  /**
2014  * 6.5
2015  */
2016  pic_area_in_ctbs = sps->ctb_width * sps->ctb_height;
2017 
2018  pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_rs_to_ts));
2019  pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_ts_to_rs));
2020  pps->tile_id = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->tile_id));
2021  pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
2022  if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
2023  !pps->tile_id || !pps->min_tb_addr_zs_tab) {
2024  return AVERROR(ENOMEM);
2025  }
2026 
2027  for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2028  int tb_x = ctb_addr_rs % sps->ctb_width;
2029  int tb_y = ctb_addr_rs / sps->ctb_width;
2030  int tile_x = 0;
2031  int tile_y = 0;
2032  int val = 0;
2033 
2034  for (i = 0; i < pps->num_tile_columns; i++) {
2035  if (tb_x < pps->col_bd[i + 1]) {
2036  tile_x = i;
2037  break;
2038  }
2039  }
2040 
2041  for (i = 0; i < pps->num_tile_rows; i++) {
2042  if (tb_y < pps->row_bd[i + 1]) {
2043  tile_y = i;
2044  break;
2045  }
2046  }
2047 
2048  for (i = 0; i < tile_x; i++)
2049  val += pps->row_height[tile_y] * pps->column_width[i];
2050  for (i = 0; i < tile_y; i++)
2051  val += sps->ctb_width * pps->row_height[i];
2052 
2053  val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
2054  tb_x - pps->col_bd[tile_x];
2055 
2056  pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
2057  pps->ctb_addr_ts_to_rs[val] = ctb_addr_rs;
2058  }
2059 
2060  for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
2061  for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
2062  for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
2063  for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
2064  pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
2065 
2066  pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
2067  if (!pps->tile_pos_rs)
2068  return AVERROR(ENOMEM);
2069 
2070  for (j = 0; j < pps->num_tile_rows; j++)
2071  for (i = 0; i < pps->num_tile_columns; i++)
2072  pps->tile_pos_rs[j * pps->num_tile_columns + i] =
2073  pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
2074 
2075  log2_diff = sps->log2_ctb_size - sps->log2_min_tb_size;
2076  pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
2077  for (y = 0; y < sps->tb_mask+2; y++) {
2078  pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
2079  pps->min_tb_addr_zs_tab[y] = -1;
2080  }
2081  for (y = 0; y < sps->tb_mask+1; y++) {
2082  for (x = 0; x < sps->tb_mask+1; x++) {
2083  int tb_x = x >> log2_diff;
2084  int tb_y = y >> log2_diff;
2085  int rs = sps->ctb_width * tb_y + tb_x;
2086  int val = pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2087  for (i = 0; i < log2_diff; i++) {
2088  int m = 1 << i;
2089  val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2090  }
2091  pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
2092  }
2093  }
2094 
2095  return 0;
2096 }
2097 
2099  HEVCParamSets *ps)
2100 {
2101  const HEVCSPS *sps = NULL;
2102  const HEVCVPS *vps = NULL;
2103  int i, ret = 0;
2104  ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
2105  unsigned int pps_id = get_ue_golomb_long(gb);
2106  unsigned log2_parallel_merge_level_minus2;
2107  HEVCPPS *pps;
2108 
2109  av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n");
2110 
2111  if (pps_id >= HEVC_MAX_PPS_COUNT) {
2112  av_log(avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
2113  return AVERROR_INVALIDDATA;
2114  }
2115 
2116  if (ps->pps_list[pps_id]) {
2117  const HEVCPPS *pps1 = ps->pps_list[pps_id];
2118  if (pps1->data_size == nal_size &&
2119  !memcmp(pps1->data, gb->buffer, pps1->data_size))
2120  return 0;
2121  }
2122 
2123  pps = ff_refstruct_alloc_ext(sizeof(*pps), 0, NULL, hevc_pps_free);
2124  if (!pps)
2125  return AVERROR(ENOMEM);
2126 
2127  pps->data_size = nal_size;
2128  pps->data = av_memdup(gb->buffer, nal_size);
2129  if (!pps->data) {
2131  goto err;
2132  }
2133 
2134  // Default values
2135  pps->loop_filter_across_tiles_enabled_flag = 1;
2136  pps->num_tile_columns = 1;
2137  pps->num_tile_rows = 1;
2138  pps->uniform_spacing_flag = 1;
2139  pps->disable_dbf = 0;
2140  pps->beta_offset = 0;
2141  pps->tc_offset = 0;
2142  pps->log2_max_transform_skip_block_size = 2;
2143 
2144  // Coded parameters
2145  pps->pps_id = pps_id;
2146  pps->sps_id = get_ue_golomb_long(gb);
2147  if (pps->sps_id >= HEVC_MAX_SPS_COUNT) {
2148  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
2150  goto err;
2151  }
2152  if (!ps->sps_list[pps->sps_id]) {
2153  av_log(avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
2155  goto err;
2156  }
2157  sps = ps->sps_list[pps->sps_id];
2158  vps = ps->vps_list[sps->vps_id];
2159 
2160  pps->sps = ff_refstruct_ref_c(sps);
2161 
2162  pps->dependent_slice_segments_enabled_flag = get_bits1(gb);
2163  pps->output_flag_present_flag = get_bits1(gb);
2164  pps->num_extra_slice_header_bits = get_bits(gb, 3);
2165 
2166  pps->sign_data_hiding_flag = get_bits1(gb);
2167 
2168  pps->cabac_init_present_flag = get_bits1(gb);
2169 
2170  pps->num_ref_idx_l0_default_active = get_ue_golomb_31(gb) + 1;
2171  pps->num_ref_idx_l1_default_active = get_ue_golomb_31(gb) + 1;
2172  if (pps->num_ref_idx_l0_default_active >= HEVC_MAX_REFS ||
2173  pps->num_ref_idx_l1_default_active >= HEVC_MAX_REFS) {
2174  av_log(avctx, AV_LOG_ERROR, "Too many default refs in PPS: %d/%d.\n",
2175  pps->num_ref_idx_l0_default_active, pps->num_ref_idx_l1_default_active);
2176  goto err;
2177  }
2178 
2179  pps->pic_init_qp_minus26 = get_se_golomb(gb);
2180 
2181  pps->constrained_intra_pred_flag = get_bits1(gb);
2182  pps->transform_skip_enabled_flag = get_bits1(gb);
2183 
2184  pps->cu_qp_delta_enabled_flag = get_bits1(gb);
2185  pps->diff_cu_qp_delta_depth = 0;
2186  if (pps->cu_qp_delta_enabled_flag)
2187  pps->diff_cu_qp_delta_depth = get_ue_golomb_long(gb);
2188 
2189  if (pps->diff_cu_qp_delta_depth < 0 ||
2190  pps->diff_cu_qp_delta_depth > sps->log2_diff_max_min_coding_block_size) {
2191  av_log(avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
2192  pps->diff_cu_qp_delta_depth);
2194  goto err;
2195  }
2196 
2197  pps->cb_qp_offset = get_se_golomb(gb);
2198  if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
2199  av_log(avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
2200  pps->cb_qp_offset);
2202  goto err;
2203  }
2204  pps->cr_qp_offset = get_se_golomb(gb);
2205  if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
2206  av_log(avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
2207  pps->cr_qp_offset);
2209  goto err;
2210  }
2211  pps->pic_slice_level_chroma_qp_offsets_present_flag = get_bits1(gb);
2212 
2213  pps->weighted_pred_flag = get_bits1(gb);
2214  pps->weighted_bipred_flag = get_bits1(gb);
2215 
2216  pps->transquant_bypass_enable_flag = get_bits1(gb);
2217  pps->tiles_enabled_flag = get_bits1(gb);
2218  pps->entropy_coding_sync_enabled_flag = get_bits1(gb);
2219 
2220  if (pps->tiles_enabled_flag) {
2221  int num_tile_columns_minus1 = get_ue_golomb(gb);
2222  int num_tile_rows_minus1 = get_ue_golomb(gb);
2223 
2224  if (num_tile_columns_minus1 < 0 ||
2225  num_tile_columns_minus1 >= sps->ctb_width) {
2226  av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
2227  num_tile_columns_minus1);
2228  ret = num_tile_columns_minus1 < 0 ? num_tile_columns_minus1 : AVERROR_INVALIDDATA;
2229  goto err;
2230  }
2231  if (num_tile_rows_minus1 < 0 ||
2232  num_tile_rows_minus1 >= sps->ctb_height) {
2233  av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
2234  num_tile_rows_minus1);
2235  ret = num_tile_rows_minus1 < 0 ? num_tile_rows_minus1 : AVERROR_INVALIDDATA;
2236  goto err;
2237  }
2238  pps->num_tile_columns = num_tile_columns_minus1 + 1;
2239  pps->num_tile_rows = num_tile_rows_minus1 + 1;
2240 
2241  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
2242  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
2243  if (!pps->column_width || !pps->row_height) {
2244  ret = AVERROR(ENOMEM);
2245  goto err;
2246  }
2247 
2248  pps->uniform_spacing_flag = get_bits1(gb);
2249  if (!pps->uniform_spacing_flag) {
2250  uint64_t sum = 0;
2251  for (i = 0; i < pps->num_tile_columns - 1; i++) {
2252  pps->column_width[i] = get_ue_golomb_long(gb) + 1;
2253  sum += pps->column_width[i];
2254  }
2255  if (sum >= sps->ctb_width) {
2256  av_log(avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
2258  goto err;
2259  }
2260  pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
2261 
2262  sum = 0;
2263  for (i = 0; i < pps->num_tile_rows - 1; i++) {
2264  pps->row_height[i] = get_ue_golomb_long(gb) + 1;
2265  sum += pps->row_height[i];
2266  }
2267  if (sum >= sps->ctb_height) {
2268  av_log(avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
2270  goto err;
2271  }
2272  pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
2273  }
2274  pps->loop_filter_across_tiles_enabled_flag = get_bits1(gb);
2275  }
2276 
2277  pps->seq_loop_filter_across_slices_enabled_flag = get_bits1(gb);
2278 
2279  pps->deblocking_filter_control_present_flag = get_bits1(gb);
2280  if (pps->deblocking_filter_control_present_flag) {
2281  pps->deblocking_filter_override_enabled_flag = get_bits1(gb);
2282  pps->disable_dbf = get_bits1(gb);
2283  if (!pps->disable_dbf) {
2284  int beta_offset_div2 = get_se_golomb(gb);
2285  int tc_offset_div2 = get_se_golomb(gb) ;
2286  if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2287  av_log(avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
2288  beta_offset_div2);
2290  goto err;
2291  }
2292  if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2293  av_log(avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
2294  tc_offset_div2);
2296  goto err;
2297  }
2298  pps->beta_offset = 2 * beta_offset_div2;
2299  pps->tc_offset = 2 * tc_offset_div2;
2300  }
2301  }
2302 
2303  pps->scaling_list_data_present_flag = get_bits1(gb);
2304  if (pps->scaling_list_data_present_flag) {
2305  set_default_scaling_list_data(&pps->scaling_list);
2306  ret = scaling_list_data(gb, avctx, &pps->scaling_list, sps);
2307  if (ret < 0)
2308  goto err;
2309  }
2310  pps->lists_modification_present_flag = get_bits1(gb);
2311  log2_parallel_merge_level_minus2 = get_ue_golomb_long(gb);
2312  if (log2_parallel_merge_level_minus2 > sps->log2_ctb_size) {
2313  av_log(avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
2314  log2_parallel_merge_level_minus2);
2316  goto err;
2317  }
2318  pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2319 
2320  pps->slice_header_extension_present_flag = get_bits1(gb);
2321 
2322  pps->pps_extension_present_flag = get_bits1(gb);
2323  if (pps->pps_extension_present_flag) {
2324  pps->pps_range_extensions_flag = get_bits1(gb);
2325  pps->pps_multilayer_extension_flag = get_bits1(gb);
2326  pps->pps_3d_extension_flag = get_bits1(gb);
2327  pps->pps_scc_extension_flag = get_bits1(gb);
2328  skip_bits(gb, 4); // pps_extension_4bits
2329 
2330  if (sps->ptl.general_ptl.profile_idc >= AV_PROFILE_HEVC_REXT && pps->pps_range_extensions_flag) {
2331  if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0)
2332  goto err;
2333  }
2334 
2335  if (pps->pps_multilayer_extension_flag) {
2336  if ((ret = pps_multilayer_extension(gb, avctx, pps, sps, vps)) < 0)
2337  goto err;
2338  }
2339 
2340  if (pps->pps_3d_extension_flag) {
2341  if ((ret = pps_3d_extension(gb, avctx, pps, sps)) < 0)
2342  goto err;
2343  }
2344 
2345  if (pps->pps_scc_extension_flag) {
2346  if ((ret = pps_scc_extension(gb, avctx, pps, sps)) < 0)
2347  goto err;
2348  }
2349  }
2350 
2351  ret = setup_pps(avctx, gb, pps, sps);
2352  if (ret < 0)
2353  goto err;
2354 
2355  if (get_bits_left(gb) < 0) {
2356  av_log(avctx, AV_LOG_WARNING,
2357  "Overread PPS by %d bits\n", -get_bits_left(gb));
2358  }
2359 
2361  ps->pps_list[pps_id] = pps;
2362 
2363  return 0;
2364 
2365 err:
2367  return ret;
2368 }
2369 
2371 {
2372  int i;
2373 
2374  for (i = 0; i < FF_ARRAY_ELEMS(ps->vps_list); i++)
2375  ff_refstruct_unref(&ps->vps_list[i]);
2376  for (i = 0; i < FF_ARRAY_ELEMS(ps->sps_list); i++)
2377  ff_refstruct_unref(&ps->sps_list[i]);
2378  for (i = 0; i < FF_ARRAY_ELEMS(ps->pps_list); i++)
2379  ff_refstruct_unref(&ps->pps_list[i]);
2380 }
2381 
2382 int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type)
2383 {
2384  int max_poc_lsb = 1 << sps->log2_max_poc_lsb;
2385  int prev_poc_lsb = pocTid0 % max_poc_lsb;
2386  int prev_poc_msb = pocTid0 - prev_poc_lsb;
2387  int poc_msb;
2388 
2389  if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2390  poc_msb = prev_poc_msb + max_poc_lsb;
2391  else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2392  poc_msb = prev_poc_msb - max_poc_lsb;
2393  else
2394  poc_msb = prev_poc_msb;
2395 
2396  // For BLA picture types, POCmsb is set to 0.
2397  if (nal_unit_type == HEVC_NAL_BLA_W_LP ||
2398  nal_unit_type == HEVC_NAL_BLA_W_RADL ||
2399  nal_unit_type == HEVC_NAL_BLA_N_LP)
2400  poc_msb = 0;
2401 
2402  return poc_msb + poc_lsb;
2403 }
HEVC_DEP_TYPE_BOTH
@ HEVC_DEP_TYPE_BOTH
Definition: ps.c:464
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:278
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
decode_vui
static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
Definition: ps.c:867
HEVCSPS::data_size
int data_size
Definition: ps.h:366
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
HEVCPPS::data_size
int data_size
Definition: ps.h:503
HEVC_DEP_TYPE_MV
@ HEVC_DEP_TYPE_MV
Definition: ps.c:463
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:695
VUI::vui_time_scale
uint32_t vui_time_scale
Definition: ps.h:111
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
RepFormat::conf_win_bottom_offset
uint16_t conf_win_bottom_offset
Definition: ps.h:168
RepFormat::separate_colour_plane_flag
uint8_t separate_colour_plane_flag
Definition: ps.h:162
cb
static double cb(void *priv, double x, double y)
Definition: vf_geq.c:247
HEVCWindow::bottom_offset
unsigned int bottom_offset
Definition: ps.h:95
comp
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
Definition: eamad.c:81
HEVCParamSets::pps_list
const HEVCPPS * pps_list[HEVC_MAX_PPS_COUNT]
RefStruct references.
Definition: ps.h:511
ff_hevc_profiles
const AVProfile ff_hevc_profiles[]
Definition: profiles.c:97
u
#define u(width, name, range_min, range_max)
Definition: cbs_h2645.c:251
ShortTermRPS::num_negative_pics
uint8_t num_negative_pics
Definition: ps.h:80
ShortTermRPS::rps_idx_num_delta_pocs
uint8_t rps_idx_num_delta_pocs
Definition: ps.h:82
av_popcount64
#define av_popcount64
Definition: common.h:157
get_se_golomb_long
static int get_se_golomb_long(GetBitContext *gb)
Definition: golomb.h:294
AVProfile::name
const char * name
short name for the profile
Definition: codec.h:181
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2965
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1430
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:421
ff_refstruct_alloc_ext
static void * ff_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(FFRefStructOpaque opaque, void *obj))
A wrapper around ff_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
Definition: refstruct.h:94
ff_hevc_decode_short_term_rps
int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
Definition: ps.c:89
H2645VUI::matrix_coeffs
enum AVColorSpace matrix_coeffs
Definition: h2645_vui.h:41
HEVCSublayerHdrParams::cbr_flag
uint32_t cbr_flag
Definition: ps.h:42
HEVC_SCALABILITY_SPATIAL
@ HEVC_SCALABILITY_SPATIAL
Definition: ps.c:456
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
get_ue_golomb
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
Definition: golomb.h:53
HEVC_NAL_BLA_N_LP
@ HEVC_NAL_BLA_N_LP
Definition: hevc.h:47
HEVCHdrParams::dpb_output_delay_du_length_minus1
uint8_t dpb_output_delay_du_length_minus1
Definition: ps.h:61
HEVCHdrFlagParams::low_delay_hrd_flag
uint8_t low_delay_hrd_flag
Definition: ps.h:49
VUI::tiles_fixed_structure_flag
int tiles_fixed_structure_flag
Definition: ps.h:117
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:478
VUI::vui_num_ticks_poc_diff_one_minus1
int vui_num_ticks_poc_diff_one_minus1
Definition: ps.h:113
ScalingList::sl
uint8_t sl[4][6][64]
Definition: ps.h:248
VUI::field_seq_flag
int field_seq_flag
Definition: ps.h:103
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:196
AVCOL_SPC_RGB
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
Definition: pixfmt.h:610
VUI::bitstream_restriction_flag
int bitstream_restriction_flag
Definition: ps.h:116
FFRefStructOpaque
RefStruct is an API for creating reference-counted objects with minimal overhead.
Definition: refstruct.h:58
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
ff_hevc_parse_sps
int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, unsigned nuh_layer_id, int apply_defdispwin, const HEVCVPS *const *vps_list, AVCodecContext *avctx)
Parse the SPS from the bitstream into the provided HEVCSPS struct.
Definition: ps.c:1150
HEVCHdrParams::elemental_duration_in_tc_minus1
uint16_t elemental_duration_in_tc_minus1[HEVC_MAX_SUB_LAYERS]
Definition: ps.h:69
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
HEVCHdrParams
Definition: ps.h:52
H2645VUI::video_full_range_flag
int video_full_range_flag
Definition: h2645_vui.h:37
AV_PIX_FMT_GRAY9
#define AV_PIX_FMT_GRAY9
Definition: pixfmt.h:458
AV_CODEC_FLAG2_IGNORE_CROP
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
Definition: avcodec.h:375
HEVCHdrParams::vcl_hrd_parameters_present_flag
uint8_t vcl_hrd_parameters_present_flag
Definition: ps.h:55
HEVCSublayerHdrParams::bit_rate_value_minus1
uint32_t bit_rate_value_minus1[HEVC_MAX_CPB_CNT]
Definition: ps.h:38
H2645VUI::video_signal_type_present_flag
int video_signal_type_present_flag
Definition: h2645_vui.h:35
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:304
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
golomb.h
exp golomb vlc stuff
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
ff_hevc_compute_poc
int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type)
Compute POC of the current frame and return it.
Definition: ps.c:2382
av_ceil_log2
#define av_ceil_log2
Definition: common.h:97
hevc_pps_free
static void hevc_pps_free(FFRefStructOpaque unused, void *obj)
Definition: ps.c:1689
AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:494
HEVCWindow::left_offset
unsigned int left_offset
Definition: ps.h:92
ShortTermRPS::use_delta
unsigned use_delta
Definition: ps.h:88
GetBitContext
Definition: get_bits.h:108
RepFormat::pic_width_in_luma_samples
uint16_t pic_width_in_luma_samples
Definition: ps.h:159
AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_YUV422P9
Definition: pixfmt.h:476
H265RawProfileTierLevel::sub_layer_level_present_flag
uint8_t sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]
Definition: cbs_h265.h:64
HEVC_MAX_DPB_SIZE
@ HEVC_MAX_DPB_SIZE
Definition: hevc.h:120
remove_sps
static void remove_sps(HEVCParamSets *s, int id)
Definition: ps.c:65
HEVCHdrParams::sub_pic_hrd_params_present_flag
uint8_t sub_pic_hrd_params_present_flag
Definition: ps.h:56
HEVCSublayerHdrParams::bit_rate_du_value_minus1
uint32_t bit_rate_du_value_minus1[HEVC_MAX_CPB_CNT]
Definition: ps.h:41
ff_hevc_diag_scan8x8_y
const uint8_t ff_hevc_diag_scan8x8_y[64]
Definition: data.c:58
val
static double val(void *priv, double ch)
Definition: aeval.c:77
remove_vps
static void remove_vps(HEVCParamSets *s, int id)
Definition: ps.c:78
HEVC_MAX_REFS
@ HEVC_MAX_REFS
Definition: hevc.h:122
HEVCSublayerHdrParams::cpb_size_du_value_minus1
uint32_t cpb_size_du_value_minus1[HEVC_MAX_CPB_CNT]
Definition: ps.h:40
scaling_list_data
static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, const HEVCSPS *sps)
Definition: ps.c:1024
HEVCParamSets::sps_list
const HEVCSPS * sps_list[HEVC_MAX_SPS_COUNT]
RefStruct references.
Definition: ps.h:510
default_scaling_list_intra
static const uint8_t default_scaling_list_intra[]
Definition: ps.c:35
HEVCSPS::data
uint8_t * data
Definition: ps.h:365
refstruct.h
VUI::restricted_ref_pic_lists_flag
int restricted_ref_pic_lists_flag
Definition: ps.h:119
HEVCPPS::row_bd
unsigned int * row_bd
RowBd.
Definition: ps.h:492
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:481
H265RawProfileTierLevel::sub_layer_profile_present_flag
uint8_t sub_layer_profile_present_flag[HEVC_MAX_SUB_LAYERS]
Definition: cbs_h265.h:63
HEVCHdrParams::nal_hrd_parameters_present_flag
uint8_t nal_hrd_parameters_present_flag
Definition: ps.h:54
HEVCPPS::col_bd
unsigned int * col_bd
ColBd.
Definition: ps.h:491
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
HEVCHdrParams::cpb_size_scale
uint8_t cpb_size_scale
Definition: ps.h:63
AV_PROFILE_UNKNOWN
#define AV_PROFILE_UNKNOWN
Definition: defs.h:65
ff_refstruct_ref_c
const void * ff_refstruct_ref_c(const void *obj)
Analog of ff_refstruct_ref(), but for constant objects.
Definition: refstruct.c:149
hevc_sps_free
static void hevc_sps_free(FFRefStructOpaque opaque, void *obj)
Definition: ps.c:1621
ptl
const H265RawProfileTierLevel * ptl
Definition: h265_levels.c:170
hevc_vps_free
static void hevc_vps_free(FFRefStructOpaque opaque, void *obj)
Definition: ps.c:445
ScalabilityMask
ScalabilityMask
Definition: ps.c:453
PTLCommon
Definition: ps.h:127
s
#define s(width, name)
Definition: cbs_vp9.c:198
HEVCHdrParams::vcl_params
HEVCSublayerHdrParams vcl_params[HEVC_MAX_SUB_LAYERS]
Definition: ps.h:72
hevc_sub_height_c
static const uint8_t hevc_sub_height_c[]
Definition: ps.c:61
RepFormat
Definition: ps.h:158
compare_sps
static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
Definition: ps.c:1630
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:475
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
VUI::motion_vectors_over_pic_boundaries_flag
int motion_vectors_over_pic_boundaries_flag
Definition: ps.h:118
map_pixel_format
static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
Definition: ps.c:1101
HEVCWindow::top_offset
unsigned int top_offset
Definition: ps.h:94
HEVCPPS::data
uint8_t * data
Definition: ps.h:502
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
ScalingList
Definition: ps.h:245
HEVCHdrParams::tick_divisor_minus2
uint8_t tick_divisor_minus2
Definition: ps.h:59
ShortTermRPS::num_delta_pocs
uint8_t num_delta_pocs
Definition: ps.h:81
get_se_golomb
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:239
ff_hevc_decode_nal_vps
int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: ps.c:712
setup_pps
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:1966
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:459
if
if(ret)
Definition: filter_design.txt:179
ff_hevc_diag_scan4x4_y
const uint8_t ff_hevc_diag_scan4x4_y[16]
Definition: data.c:32
HEVC_MAX_LONG_TERM_REF_PICS
@ HEVC_MAX_LONG_TERM_REF_PICS
Definition: hevc.h:127
GetBitContext::buffer
const uint8_t * buffer
Definition: get_bits.h:109
set_default_scaling_list_data
static void set_default_scaling_list_data(ScalingList *sl)
Definition: ps.c:994
colour_mapping_table
static int colour_mapping_table(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps)
Definition: ps.c:1745
NULL
#define NULL
Definition: coverity.c:32
H2645VUI::colour_description_present_flag
int colour_description_present_flag
Definition: h2645_vui.h:38
pps_3d_extension
static int pps_3d_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:1848
ScalingList::sl_dc
uint8_t sl_dc[2][6]
Definition: ps.h:249
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
HEVC_MAX_SHORT_TERM_REF_PIC_SETS
@ HEVC_MAX_SHORT_TERM_REF_PIC_SETS
Definition: hevc.h:125
VUI::frame_field_info_present_flag
int frame_field_info_present_flag
Definition: ps.h:104
HEVC_DEP_TYPE_SAMPLE
@ HEVC_DEP_TYPE_SAMPLE
Definition: ps.c:462
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
VUI::vui_timing_info_present_flag
int vui_timing_info_present_flag
Definition: ps.h:109
HEVCPPS::tile_id
int * tile_id
TileId.
Definition: ps.h:497
ff_hevc_decode_nal_pps
int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: ps.c:2098
AV_PIX_FMT_YUVJ420P
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:85
HEVCSublayerHdrParams
Definition: ps.h:37
HEVC_SCALABILITY_AUXILIARY
@ HEVC_SCALABILITY_AUXILIARY
Definition: ps.c:457
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
profiles.h
HEVCHdrFlagParams::fixed_pic_rate_general_flag
uint8_t fixed_pic_rate_general_flag
Definition: ps.h:47
DependencyType
DependencyType
Definition: ps.c:461
VUI::log2_max_mv_length_horizontal
int log2_max_mv_length_horizontal
Definition: ps.h:123
PTL
Definition: ps.h:150
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:479
data.h
decode_sublayer_hrd
static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb, HEVCSublayerHdrParams *par, int subpic_params_present)
Definition: ps.c:359
AVProfile::profile
int profile
Definition: codec.h:180
vps
static int FUNC() vps(CodedBitstreamContext *ctx, RWContext *rw, H265RawVPS *current)
Definition: cbs_h265_syntax_template.c:423
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:81
VUI::max_bytes_per_pic_denom
int max_bytes_per_pic_denom
Definition: ps.h:121
pps_range_extensions
static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:1872
AV_PROFILE_HEVC_REXT
#define AV_PROFILE_HEVC_REXT
Definition: defs.h:162
hevc_sub_width_c
static const uint8_t hevc_sub_width_c[]
Definition: ps.c:57
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
HEVCSublayerHdrParams::cpb_size_value_minus1
uint32_t cpb_size_value_minus1[HEVC_MAX_CPB_CNT]
Definition: ps.h:39
HEVCWindow
Definition: ps.h:91
ShortTermRPS::used
uint32_t used
Definition: ps.h:77
HEVCHdrParams::dpb_output_delay_length_minus1
uint8_t dpb_output_delay_length_minus1
Definition: ps.h:67
decode_vps_ext
static int decode_vps_ext(GetBitContext *gb, AVCodecContext *avctx, HEVCVPS *vps, uint64_t layer1_id_included)
Definition: ps.c:467
HEVC_MAX_LOG2_CTB_SIZE
@ HEVC_MAX_LOG2_CTB_SIZE
Definition: hevc.h:131
HEVCPPS::pps_id
unsigned int pps_id
Definition: ps.h:372
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:515
RepFormat::conf_win_left_offset
uint16_t conf_win_left_offset
Definition: ps.h:165
RepFormat::pic_height_in_luma_samples
uint16_t pic_height_in_luma_samples
Definition: ps.h:160
CHECK_QP_OFFSET
#define CHECK_QP_OFFSET(name)
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:483
VUI::common
H2645VUI common
Definition: ps.h:99
VUI::def_disp_win
HEVCWindow def_disp_win
Definition: ps.h:107
VUI::vui_poc_proportional_to_timing_flag
int vui_poc_proportional_to_timing_flag
Definition: ps.h:112
VUI
Definition: ps.h:98
HEVC_SCALABILITY_DEPTH
@ HEVC_SCALABILITY_DEPTH
Definition: ps.c:454
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:485
VUI::vui_num_units_in_tick
uint32_t vui_num_units_in_tick
Definition: ps.h:110
ps.h
VUI::max_bits_per_min_cu_denom
int max_bits_per_min_cu_denom
Definition: ps.h:122
VUI::log2_max_mv_length_vertical
int log2_max_mv_length_vertical
Definition: ps.h:124
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:413
av_zero_extend
#define av_zero_extend
Definition: common.h:151
HEVC_SCALABILITY_MASK_MAX
@ HEVC_SCALABILITY_MASK_MAX
Definition: ps.c:458
HEVCHdrParams::bit_rate_scale
uint8_t bit_rate_scale
Definition: ps.h:62
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:191
ff_hevc_ps_uninit
void ff_hevc_ps_uninit(HEVCParamSets *ps)
Definition: ps.c:2370
get_bits64
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
Definition: get_bits.h:453
VUI::default_display_window_flag
int default_display_window_flag
Definition: ps.h:106
HEVCHdrParams::nal_params
HEVCSublayerHdrParams nal_params[HEVC_MAX_SUB_LAYERS]
Definition: ps.h:71
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:371
parse_ptl
static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx, int profile_present, PTL *ptl, int max_num_sub_layers)
Definition: ps.c:313
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:31
AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:495
VUI::neutra_chroma_indication_flag
int neutra_chroma_indication_flag
Definition: ps.h:101
delta
float delta
Definition: vorbis_enc_data.h:430
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
ff_hevc_diag_scan4x4_x
const uint8_t ff_hevc_diag_scan4x4_x[16]
Definition: data.c:25
HEVC_MAX_PPS_COUNT
@ HEVC_MAX_PPS_COUNT
Definition: hevc.h:117
len
int len
Definition: vorbis_enc_data.h:426
profile
int profile
Definition: mxfenc.c:2228
ShortTermRPS::abs_delta_rps
uint16_t abs_delta_rps
Definition: ps.h:84
RepFormat::bit_depth_luma
uint8_t bit_depth_luma
bit_depth_vps_luma_minus8 + 8
Definition: ps.h:163
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:477
GetBitContext::buffer_end
const uint8_t * buffer_end
Definition: get_bits.h:109
pps_scc_extension
static int pps_scc_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:1912
ret
ret
Definition: filter_design.txt:187
HEVCHdrFlagParams::fixed_pic_rate_within_cvs_flag
uint8_t fixed_pic_rate_within_cvs_flag
Definition: ps.h:48
HEVCVPS::data
uint8_t * data
Definition: ps.h:241
h2645_vui.h
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:561
ff_h2645_decode_common_vui_params
void ff_h2645_decode_common_vui_params(GetBitContext *gb, H2645VUI *vui, void *logctx)
Definition: h2645_vui.c:37
pos
unsigned int pos
Definition: spdifenc.c:414
ShortTermRPS::delta_idx
uint8_t delta_idx
Definition: ps.h:79
HEVCHdrParams::initial_cpb_removal_delay_length_minus1
uint8_t initial_cpb_removal_delay_length_minus1
Definition: ps.h:65
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:482
U
#define U(x)
Definition: vpx_arith.h:37
AVCodecContext
main external API structure.
Definition: avcodec.h:451
get_ue_golomb_31
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition: golomb.h:120
status
ov_status_e status
Definition: dnn_backend_openvino.c:100
delta_dlt
static void delta_dlt(GetBitContext *gb, HEVCPPS *pps)
Definition: ps.c:1826
ff_hevc_decode_nal_sps
int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps, unsigned nuh_layer_id, int apply_defdispwin)
Definition: ps.c:1636
decode_profile_tier_level
static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, PTLCommon *ptl)
Definition: ps.c:238
HEVC_MAX_LAYERS
@ HEVC_MAX_LAYERS
Definition: hevc.h:103
decode_hrd
static int decode_hrd(GetBitContext *gb, int common_inf_present, HEVCHdrParams *hdr, int max_sublayers)
Definition: ps.c:377
pps
uint64_t pps
Definition: dovi_rpuenc.c:35
HEVCWindow::right_offset
unsigned int right_offset
Definition: ps.h:93
ShortTermRPS
Definition: ps.h:75
VUI::vui_hrd_parameters_present_flag
int vui_hrd_parameters_present_flag
Definition: ps.h:114
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:1406
colour_mapping_octants
static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth, int idx_y, int idx_cb, int idx_cr, int inp_length)
Definition: ps.c:1708
VUI::min_spatial_segmentation_idc
int min_spatial_segmentation_idc
Definition: ps.h:120
ff_hevc_diag_scan8x8_x
const uint8_t ff_hevc_diag_scan8x8_x[64]
Definition: data.c:39
AV_PIX_FMT_GBRP
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:165
desc
const char * desc
Definition: libsvtav1.c:79
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
mem.h
HEVCVPS
Definition: ps.h:171
get_ue_golomb_long
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:104
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:36
HEVCSPS
Definition: ps.h:252
ShortTermRPS::rps_predict
unsigned rps_predict
Definition: ps.h:87
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
HEVCPPS
Definition: ps.h:371
HEVCPPS::sps_id
unsigned int sps_id
seq_parameter_set_id
Definition: ps.h:373
HEVCHdrParams::du_cpb_removal_delay_increment_length_minus1
uint8_t du_cpb_removal_delay_increment_length_minus1
Definition: ps.h:60
HEVCHdrParams::cpb_cnt_minus1
uint8_t cpb_cnt_minus1[HEVC_MAX_SUB_LAYERS]
Definition: ps.h:68
timing_info
static int FUNC() timing_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawTimingInfo *current)
Definition: cbs_av1_syntax_template.c:158
HEVC_MAX_SPS_COUNT
@ HEVC_MAX_SPS_COUNT
Definition: hevc.h:115
HEVCHdrParams::au_cpb_removal_delay_length_minus1
uint8_t au_cpb_removal_delay_length_minus1
Definition: ps.h:66
cr
static double cr(void *priv, double x, double y)
Definition: vf_geq.c:248
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
HEVCParamSets::vps_list
const HEVCVPS * vps_list[HEVC_MAX_VPS_COUNT]
RefStruct references.
Definition: ps.h:509
int32_t
int32_t
Definition: audioconvert.c:56
HEVCHdrParams::sub_pic_cpb_params_in_pic_timing_sei_flag
uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag
Definition: ps.h:57
imgutils.h
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
HEVCVPS::data_size
int data_size
Definition: ps.h:242
RepFormat::conf_win_top_offset
uint16_t conf_win_top_offset
Definition: ps.h:167
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
ShortTermRPS::delta_poc
int32_t delta_poc[32]
Definition: ps.h:76
pps_multilayer_extension
static int pps_multilayer_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
Definition: ps.c:1777
HEVCHdrParams::cpb_size_du_scale
uint8_t cpb_size_du_scale
Definition: ps.h:64
check_profile_idc
#define check_profile_idc(idc)
ShortTermRPS::delta_rps_sign
unsigned delta_rps_sign
Definition: ps.h:85
av_image_check_size
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:318
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:460
FF_DEBUG_BITSTREAM
#define FF_DEBUG_BITSTREAM
Definition: avcodec.h:1409
HEVCHdrParams::flags
HEVCHdrFlagParams flags
Definition: ps.h:53
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
HEVC_SCALABILITY_MULTIVIEW
@ HEVC_SCALABILITY_MULTIVIEW
Definition: ps.c:455
ff_refstruct_unref
void ff_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
HEVC_NAL_BLA_W_RADL
@ HEVC_NAL_BLA_W_RADL
Definition: hevc.h:46
HEVC_MAX_PALETTE_PREDICTOR_SIZE
@ HEVC_MAX_PALETTE_PREDICTOR_SIZE
Definition: hevc.h:162
av_get_pix_fmt_name
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:2885
default_scaling_list_inter
static const uint8_t default_scaling_list_inter[]
Definition: ps.c:46
HEVC_MAX_SUB_LAYERS
@ HEVC_MAX_SUB_LAYERS
Definition: hevc.h:105
HEVC_NAL_BLA_W_LP
@ HEVC_NAL_BLA_W_LP
Definition: hevc.h:45
RepFormat::chroma_format_idc
uint8_t chroma_format_idc
Definition: ps.h:161
HEVCParamSets
Definition: ps.h:508
RepFormat::conf_win_right_offset
uint16_t conf_win_right_offset
Definition: ps.h:166