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 "libavutil/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  av_refstruct_unref(&s->pps_list[i]);
73 
74  av_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  av_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  int i;
242 
243  if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 43 + 1)
244  return -1;
245 
246  ptl->profile_space = get_bits(gb, 2);
247  ptl->tier_flag = get_bits1(gb);
248  ptl->profile_idc = get_bits(gb, 5);
249 
250 #if !CONFIG_SMALL
251  const char *profile_name = NULL;
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  av_log(avctx, profile_name ? AV_LOG_DEBUG : AV_LOG_WARNING,
258  "%s profile bitstream\n", profile_name ? profile_name : "Unknown");
259 #endif
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(AVRefStructOpaque opaque, void *obj)
446 {
447  HEVCVPS *vps = obj;
448 
449  av_freep(&vps->hdr);
450  av_freep(&vps->data);
451 }
452 
457 };
458 
460  uint64_t layer1_id_included)
461 {
462  PTL ptl_dummy;
463  uint8_t max_sub_layers[HEVC_MAX_LAYERS] = {1, 1};
464  uint8_t dimension_id_len[16] = {0};
465  uint8_t dimension_id[16] = {0};
466  unsigned n;
467 
468  int splitting_flag, view_id_len, num_add_olss, num_scalability_types,
469  default_output_layer_idc, direct_dep_type_len, direct_dep_type,
470  sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
471  unsigned non_vui_extension_length;
472 
473  if (vps->vps_max_layers == 1) {
474  av_log(avctx, AV_LOG_VERBOSE, "Ignoring VPS extensions with a single layer\n");
475  return 0;
476  }
477 
478  if (vps->vps_max_layers > 2) {
479  av_log(avctx, AV_LOG_ERROR,
480  "VPS has %d layers, only 2 layers are supported\n",
481  vps->vps_max_layers);
482  return AVERROR_PATCHWELCOME;
483  }
484  if (vps->vps_num_layer_sets > 2) {
485  av_log(avctx, AV_LOG_ERROR,
486  "VPS has %d layer sets, only 2 layer sets are supported\n",
487  vps->vps_num_layer_sets);
488  return AVERROR_PATCHWELCOME;
489  }
490 
491  align_get_bits(gb);
492 
493  /**
494  * For stereoscopic MV-HEVC, the following simplifying assumptions are made:
495  *
496  * - vps_max_layers = 2 (one base layer, one multiview layer)
497  * - vps_num_layer_sets = 2 (one output layer set for each view)
498  * - NumScalabilityTypes = 1 (only HEVC_SCALABILITY_MULTIVIEW)
499  * - direct_dependency_flag[1][0] = 1 (second layer depends on first)
500  * - num_add_olss = 0 (no extra output layer sets)
501  * - default_output_layer_idc = 0 (1:1 mapping between OLSs and layers)
502  * - layer_id_included_flag[1] = {1, 1} (consequence of layer dependencies)
503  * - vps_num_rep_formats_minus1 = 0 (all layers have the same size)
504  *
505  * Which results in the following derived variables:
506  * - ViewOrderIdx = {0, 1}
507  * - NumViews = 2
508  * - DependencyFlag[1][0] = 1
509  * - NumDirectRefLayers = {0, 1}
510  * - NumRefLayers = {0, 1}
511  * - NumPredictedLayers = {1, 0}
512  * - NumIndependentLayers = 1
513  * - NumLayersInTreePartition = {2}
514  * - NumLayerSets = 2
515  * - NumOutputLayerSets = 2
516  * - OlsIdxToLsIdx = {0, 1}
517  * - LayerIdxInVps = {0, 1}
518  * - NumLayersInIdList = {1, 2}
519  * - NumNecessaryLayers = {1, 2}
520  * - NecessaryLayerFlag = {{1, 0}, {1, 1}}
521  * - NumOutputLayersInOutputLayerSet = {1, 2}
522  * - OutputLayerFlag = {{1, 0}, {1, 1}}
523  */
524  vps->nb_layers = 2;
525 
526  /* vps_base_layer_internal_flag is true has been checked before */
527  if (parse_ptl(gb, avctx, 0, &ptl_dummy, vps->vps_max_sub_layers) < 0)
528  return AVERROR_INVALIDDATA;
529 
530  splitting_flag = get_bits1(gb);
531  vps->scalability_mask_flag = get_bits(gb, 16);
532  num_scalability_types = av_popcount(vps->scalability_mask_flag);
533  if (!num_scalability_types) {
534  av_log(avctx, AV_LOG_ERROR, "Missing scalability mask\n");
535  return AVERROR_INVALIDDATA;
536  }
537 
538  if (!(vps->scalability_mask_flag &
540  av_log(avctx, AV_LOG_ERROR, "Scalability type %d not supported\n",
541  15 - ff_ctz(vps->scalability_mask_flag));
542  return AVERROR_PATCHWELCOME;
543  }
544  // x265 specify MULTIVIEW when the stream really is alpha video only.
545  if (num_scalability_types > 1)
546  av_log(avctx, AV_LOG_WARNING, "Multiple scalability types presented\n");
547 
548  n = 0;
549  for (int i = 0; i < num_scalability_types - splitting_flag; i++) {
550  dimension_id_len[i] = get_bits(gb, 3) + 1;
551  n += dimension_id_len[i];
552  }
553  if (splitting_flag)
554  dimension_id_len[num_scalability_types - 1] = 5 - n;
555 
556  if (get_bits1(gb)) { /* vps_nuh_layer_id_present_flag */
557  int layer_id_in_nuh = get_bits(gb, 6);
558  if (layer_id_in_nuh >= FF_ARRAY_ELEMS(vps->layer_idx)) {
559  av_log(avctx, AV_LOG_ERROR, "Invalid layer_id_in_nuh[1]: %d\n",
560  layer_id_in_nuh);
561  return AVERROR_INVALIDDATA;
562  }
563  vps->layer_idx[layer_id_in_nuh] = 1;
564  vps->layer_id_in_nuh[1] = layer_id_in_nuh;
565  } else {
566  vps->layer_idx[1] = 1;
567  vps->layer_id_in_nuh[1] = 1;
568  }
569 
570  if (!splitting_flag) {
571  int index = 0;
572 
573  for (int i = 0; i < num_scalability_types; i++)
574  dimension_id[i] = get_bits(gb, dimension_id_len[i]);
575 
576  if (vps->scalability_mask_flag & HEVC_SCALABILITY_MULTIVIEW)
577  index++;
578 
579  /* AuxId 1 is alpha, 2 is depth. Only support alpha */
580  if (vps->scalability_mask_flag & HEVC_SCALABILITY_AUXILIARY &&
581  dimension_id[index] != HEVC_AUX_ALPHA) {
582  av_log(avctx, AV_LOG_WARNING,
583  "Unsupported dimension_id %d for HEVC_SCALABILITY_AUXILIARY\n",
584  dimension_id[index]);
585  return AVERROR_PATCHWELCOME;
586  }
587  }
588 
589  view_id_len = get_bits(gb, 4);
590  if (view_id_len) {
591  n = (vps->scalability_mask_flag & HEVC_SCALABILITY_MULTIVIEW) ? 2 : 1;
592  for (int i = 0; i < n; i++)
593  vps->view_id[i] = get_bits(gb, view_id_len);
594  }
595 
596  /* direct_dependency_flag */
597  vps->num_direct_ref_layers[1] = get_bits1(gb);
598  if (!vps->num_direct_ref_layers[1]) {
599  vps->num_add_layer_sets = get_ue_golomb(gb);
600  if (vps->num_add_layer_sets > 1) {
601  av_log(avctx, AV_LOG_WARNING,
602  "Unsupported num_add_layer_sets: %d\n", vps->num_add_layer_sets);
603  return AVERROR_PATCHWELCOME;
604  }
605 
606  if (vps->num_add_layer_sets) {
607  /* highest_layer_idx_plus1 */
608  if (!get_bits1(gb))
609  return AVERROR_PATCHWELCOME;
610  }
611  }
612  vps->num_output_layer_sets = vps->vps_num_layer_sets + vps->num_add_layer_sets;
613  if (vps->num_output_layer_sets != 2) {
614  av_log(avctx, AV_LOG_WARNING,
615  "Unsupported num_output_layer_sets: %d\n", vps->num_output_layer_sets);
616  return AVERROR_PATCHWELCOME;
617  }
618 
619  sub_layers_max_present = get_bits1(gb); // vps_sub_layers_max_minus1_present_flag
620  if (sub_layers_max_present) {
621  for (int i = 0; i < vps->vps_max_layers; i++)
622  max_sub_layers[i] = sub_layers_max_present ? get_bits(gb, 3) + 1 :
623  vps->vps_max_sub_layers;
624  }
625 
626  if (get_bits1(gb) /* max_tid_ref_present_flag */)
627  skip_bits(gb, 3); // max_tid_il_ref_pics_plus1
628 
629  vps->default_ref_layers_active = get_bits1(gb);
630 
631  nb_ptl = get_ue_golomb(gb) + 1;
632  /* idx [0] is signalled in base VPS, idx [1] is signalled at the
633  * start of VPS extension, indices 2+ are signalled here;
634  * we ignore all but the first one anyway */
635  for (int i = 2; i < nb_ptl; i++) {
636  int profile_present = get_bits1(gb);
637  if (parse_ptl(gb, avctx, profile_present, &ptl_dummy, vps->vps_max_sub_layers) < 0)
638  return AVERROR_INVALIDDATA;
639  }
640 
641  num_add_olss = get_ue_golomb(gb);
642  if (num_add_olss != 0) {
643  /* Since we don't implement support for independent output layer sets
644  * and auxiliary layers, this should never nonzero */
645  av_log(avctx, AV_LOG_ERROR, "Unexpected num_add_olss: %d\n", num_add_olss);
646  return AVERROR_PATCHWELCOME;
647  }
648 
649  default_output_layer_idc = get_bits(gb, 2);
650  if (default_output_layer_idc != 0) {
651  av_log(avctx, AV_LOG_WARNING, "Unsupported default_output_layer_idc: %d\n",
652  default_output_layer_idc);
653  return AVERROR_PATCHWELCOME;
654  }
655 
656  /* Consequence of established layer dependencies */
657  if (layer1_id_included &&
658  layer1_id_included != ((1ULL << vps->layer_id_in_nuh[0]) |
659  (1ULL << vps->layer_id_in_nuh[1]))) {
660  av_log(avctx, AV_LOG_ERROR,
661  "Dependent layer not included in layer ID?\n");
662  return AVERROR_PATCHWELCOME;
663  }
664  if (!layer1_id_included)
665  vps->ols[1] = 2;
666  else
667  vps->ols[1] = 3;
668 
669  if (vps->vps_num_layer_sets == 1 || default_output_layer_idc == 2)
670  skip_bits1(gb);
671 
672  if (nb_ptl > 1)
673  for (int j = 0; j < av_popcount64(vps->ols[1]); j++) {
674  int ptl_idx = get_bits(gb, av_ceil_log2(nb_ptl));
675  if (ptl_idx >= nb_ptl) {
676  av_log(avctx, AV_LOG_ERROR, "Invalid PTL index: %d\n", ptl_idx);
677  return AVERROR_INVALIDDATA;
678  }
679  }
680 
681  if (get_ue_golomb_31(gb) != 0 /* vps_num_rep_formats_minus1 */) {
682  av_log(avctx, AV_LOG_ERROR, "Unexpected extra rep formats\n");
683  return AVERROR_PATCHWELCOME;
684  }
685 
686  vps->rep_format.pic_width_in_luma_samples = get_bits(gb, 16);
687  vps->rep_format.pic_height_in_luma_samples = get_bits(gb, 16);
688 
689  if (!get_bits1(gb) /* chroma_and_bit_depth_vps_present_flag */) {
690  av_log(avctx, AV_LOG_ERROR,
691  "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
692  return AVERROR_INVALIDDATA;
693  }
694  vps->rep_format.chroma_format_idc = get_bits(gb, 2);
695  if (vps->rep_format.chroma_format_idc == 3)
696  vps->rep_format.separate_colour_plane_flag = get_bits1(gb);
697  vps->rep_format.bit_depth_luma = get_bits(gb, 4) + 8;
698  vps->rep_format.bit_depth_chroma = get_bits(gb, 4) + 8;
699  if (vps->rep_format.bit_depth_luma > 16 ||
700  vps->rep_format.bit_depth_chroma > 16 ||
701  vps->rep_format.bit_depth_luma != vps->rep_format.bit_depth_chroma) {
702  av_log(avctx, AV_LOG_ERROR, "Unsupported bit depth: %"PRIu8" %"PRIu8"\n",
703  vps->rep_format.bit_depth_luma, vps->rep_format.bit_depth_chroma);
704  return AVERROR_PATCHWELCOME;
705  }
706 
707  if (get_bits1(gb) /* conformance_window_vps_flag */) {
708  int vert_mult = hevc_sub_height_c[vps->rep_format.chroma_format_idc];
709  int horiz_mult = hevc_sub_width_c[vps->rep_format.chroma_format_idc];
710  vps->rep_format.conf_win_left_offset = get_ue_golomb(gb) * horiz_mult;
711  vps->rep_format.conf_win_right_offset = get_ue_golomb(gb) * horiz_mult;
712  vps->rep_format.conf_win_top_offset = get_ue_golomb(gb) * vert_mult;
713  vps->rep_format.conf_win_bottom_offset = get_ue_golomb(gb) * vert_mult;
714  }
715 
716  vps->max_one_active_ref_layer = get_bits1(gb);
717  vps->poc_lsb_aligned = get_bits1(gb);
718  if (!vps->num_direct_ref_layers[1])
719  vps->poc_lsb_not_present = get_bits1(gb) << 1;
720 
721  sub_layer_flag_info_present_flag = get_bits1(gb);
722  for (int j = 0; j < FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
723  int sub_layer_dpb_info_present_flag = 1;
724  if (j > 0 && sub_layer_flag_info_present_flag)
725  sub_layer_dpb_info_present_flag = get_bits1(gb);
726  if (sub_layer_dpb_info_present_flag) {
727  for (int k = 0; k < av_popcount64(vps->ols[1]); k++)
728  vps->dpb_size.max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
729  vps->dpb_size.max_num_reorder_pics = get_ue_golomb_long(gb);
730  vps->dpb_size.max_latency_increase = get_ue_golomb_long(gb) - 1;
731  }
732  }
733 
734  direct_dep_type_len = get_ue_golomb_31(gb) + 2;
735  if (direct_dep_type_len > 32) {
736  av_log(avctx, AV_LOG_ERROR, "Invalid direct_dep_type_len: %d\n",
737  direct_dep_type_len);
738  return AVERROR_INVALIDDATA;
739  }
740 
741  /* direct_depenency_all_layers_flag */
742  if (get_bits1(gb)) {
743  direct_dep_type = get_bits_long(gb, direct_dep_type_len);
744  if (direct_dep_type > HEVC_DEP_TYPE_BOTH) {
745  av_log(avctx, AV_LOG_WARNING, "Unsupported direct_dep_type: %d\n",
746  direct_dep_type);
747  return AVERROR_PATCHWELCOME;
748  }
749  }
750 
751  non_vui_extension_length = get_ue_golomb(gb);
752  if (non_vui_extension_length > 4096) {
753  av_log(avctx, AV_LOG_ERROR, "vps_non_vui_extension_length too large: %u\n",
754  non_vui_extension_length);
755  return AVERROR_INVALIDDATA;
756  }
757  skip_bits_long(gb, non_vui_extension_length * 8);
758 
759  if (get_bits1(gb)) // vps_vui_present_flag
760  av_log(avctx, AV_LOG_WARNING, "VPS VUI not supported\n");
761 
762  return 0;
763 }
764 
766  HEVCParamSets *ps)
767 {
768  int i;
769  int vps_id = get_bits(gb, 4);
770  ptrdiff_t nal_size = get_bits_bytesize(gb, 1);
771  int ret = AVERROR_INVALIDDATA;
772  uint64_t layer1_id_included = 0;
773  unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
774  HEVCVPS *vps;
775 
776  if (ps->vps_list[vps_id]) {
777  const HEVCVPS *vps1 = ps->vps_list[vps_id];
778  if (vps1->data_size == nal_size &&
779  !memcmp(vps1->data, gb->buffer, vps1->data_size))
780  return 0;
781  }
782 
784  if (!vps)
785  return AVERROR(ENOMEM);
786 
787  av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n");
788 
789  vps->data_size = nal_size;
790  vps->data = av_memdup(gb->buffer, nal_size);
791  if (!vps->data) {
792  ret = AVERROR(ENOMEM);
793  goto err;
794  }
795  vps->vps_id = vps_id;
796 
797  vps_base_layer_internal_flag = get_bits1(gb);
798  vps_base_layer_available_flag = get_bits1(gb);
799  if (!vps_base_layer_internal_flag || !vps_base_layer_available_flag) {
800  av_log(avctx, AV_LOG_ERROR,
801  "vps_base_layer_internal_flag or vps_base_layer_available_flag not set\n");
803  goto err;
804  }
805 
806  vps->vps_max_layers = get_bits(gb, 6) + 1;
807  vps->vps_max_sub_layers = get_bits(gb, 3) + 1;
808  vps->vps_temporal_id_nesting_flag = get_bits1(gb);
809 
810  if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
811  av_log(avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
812  goto err;
813  }
814 
815  if (vps->vps_max_sub_layers > HEVC_MAX_SUB_LAYERS) {
816  av_log(avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
817  vps->vps_max_sub_layers);
818  goto err;
819  }
820 
821  if (parse_ptl(gb, avctx, 1, &vps->ptl, vps->vps_max_sub_layers) < 0)
822  goto err;
823 
824  vps->vps_sub_layer_ordering_info_present_flag = get_bits1(gb);
825 
826  i = vps->vps_sub_layer_ordering_info_present_flag ? 0 : vps->vps_max_sub_layers - 1;
827  for (; i < vps->vps_max_sub_layers; i++) {
828  vps->vps_max_dec_pic_buffering[i] = get_ue_golomb_long(gb) + 1;
829  vps->vps_num_reorder_pics[i] = get_ue_golomb_long(gb);
830  vps->vps_max_latency_increase[i] = get_ue_golomb_long(gb) - 1;
831 
832  if (vps->vps_max_dec_pic_buffering[i] > HEVC_MAX_DPB_SIZE || !vps->vps_max_dec_pic_buffering[i]) {
833  av_log(avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
834  vps->vps_max_dec_pic_buffering[i] - 1);
835  goto err;
836  }
837  if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
838  av_log(avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
839  vps->vps_num_reorder_pics[i]);
840  if (avctx->err_recognition & AV_EF_EXPLODE)
841  goto err;
842  }
843  }
844 
845  vps->vps_max_layer_id = get_bits(gb, 6);
846  vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
847  if (vps->vps_num_layer_sets < 1 || vps->vps_num_layer_sets > 1024 ||
848  (vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
849  av_log(avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
850  goto err;
851  }
852 
853  vps->num_output_layer_sets = 1;
854  vps->ols[0] = 1;
855 
856  // we support at most 2 layers, so ignore the others
857  if (vps->vps_num_layer_sets > 1)
858  layer1_id_included = get_bits64(gb, vps->vps_max_layer_id + 1); // layer_id_included_flag
859  if (vps->vps_num_layer_sets > 2)
860  skip_bits_long(gb, (vps->vps_num_layer_sets - 2) * (vps->vps_max_layer_id + 1));
861 
862  vps->vps_timing_info_present_flag = get_bits1(gb);
863  if (vps->vps_timing_info_present_flag) {
864  vps->vps_num_units_in_tick = get_bits_long(gb, 32);
865  vps->vps_time_scale = get_bits_long(gb, 32);
866  vps->vps_poc_proportional_to_timing_flag = get_bits1(gb);
867  if (vps->vps_poc_proportional_to_timing_flag)
868  vps->vps_num_ticks_poc_diff_one = get_ue_golomb_long(gb) + 1;
869  vps->vps_num_hrd_parameters = get_ue_golomb_long(gb);
870  if (vps->vps_num_hrd_parameters > (unsigned)vps->vps_num_layer_sets) {
871  av_log(avctx, AV_LOG_ERROR,
872  "vps_num_hrd_parameters %d is invalid\n", vps->vps_num_hrd_parameters);
873  goto err;
874  }
875 
876  if (vps->vps_num_hrd_parameters) {
877  vps->hdr = av_calloc(vps->vps_num_hrd_parameters, sizeof(*vps->hdr));
878  if (!vps->hdr)
879  goto err;
880  }
881 
882  for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
883  int common_inf_present = 1;
884 
885  get_ue_golomb_long(gb); // hrd_layer_set_idx
886  if (i)
887  common_inf_present = get_bits1(gb);
888  decode_hrd(gb, common_inf_present, &vps->hdr[i],
889  vps->vps_max_sub_layers);
890  }
891  }
892 
893  vps->nb_layers = 1;
894  vps->layer_idx[0] = 0;
895  for (int i = 1; i < FF_ARRAY_ELEMS(vps->layer_idx); i++)
896  vps->layer_idx[i] = -1;
897 
898  if (vps->vps_max_layers > 1 && get_bits1(gb)) { /* vps_extension_flag */
899  int ret = decode_vps_ext(gb, avctx, vps, layer1_id_included);
900  if (ret == AVERROR_PATCHWELCOME) {
901  /* If alpha layer info was already parsed, preserve it for alpha decoding */
902  if (!(avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_COMPLIANT)) &&
903  vps->nb_layers == 2 &&
904  vps->layer_id_in_nuh[1] &&
905  (vps->scalability_mask_flag & HEVC_SCALABILITY_AUXILIARY)) {
906  av_log(avctx, AV_LOG_WARNING,
907  "Broken VPS extension, treating as alpha video\n");
908  /* If alpha layer has no direct dependency on base layer,
909  * assume poc_lsb_not_present for the alpha layer, so that
910  * IDR slices on that layer won't read pic_order_cnt_lsb.
911  * This matches the behavior of Apple VideoToolbox encoders. */
912  if (!vps->num_direct_ref_layers[1])
913  vps->poc_lsb_not_present |= 1 << 1;
914  } else {
915  vps->nb_layers = 1;
916  av_log(avctx, AV_LOG_WARNING, "Ignoring unsupported VPS extension\n");
917  }
918  ret = 0;
919  } else if (ret < 0)
920  goto err;
921  }
922 
923  if (get_bits_left(gb) < 0) {
924  av_log(avctx, AV_LOG_ERROR,
925  "Overread VPS by %d bits\n", -get_bits_left(gb));
926  if (ps->vps_list[vps_id])
927  goto err;
928  }
929 
930  remove_vps(ps, vps_id);
931  ps->vps_list[vps_id] = vps;
932 
933  return 0;
934 
935 err:
937  return ret;
938 }
939 
940 static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
941  int apply_defdispwin, HEVCSPS *sps)
942 {
943  VUI backup_vui, *vui = &sps->vui;
944  GetBitContext backup;
945  int alt = 0;
946 
947  ff_h2645_decode_common_vui_params(gb, &sps->vui.common, avctx);
948 
950  if (vui->common.video_full_range_flag && sps->pix_fmt == AV_PIX_FMT_YUV420P)
951  sps->pix_fmt = AV_PIX_FMT_YUVJ420P;
953  if (vui->common.matrix_coeffs == AVCOL_SPC_RGB) {
954  switch (sps->pix_fmt) {
955  case AV_PIX_FMT_YUV444P:
956  sps->pix_fmt = AV_PIX_FMT_GBRP;
957  break;
959  sps->pix_fmt = AV_PIX_FMT_GBRP10;
960  break;
962  sps->pix_fmt = AV_PIX_FMT_GBRP12;
963  break;
964  }
965  }
966  }
967  }
968 
970  vui->field_seq_flag = get_bits1(gb);
972 
973  // Backup context in case an alternate header is detected
974  memcpy(&backup, gb, sizeof(backup));
975  memcpy(&backup_vui, vui, sizeof(backup_vui));
976  if (get_bits_left(gb) >= 68 && show_bits(gb, 21) == 0x100000) {
978  av_log(avctx, AV_LOG_WARNING, "Invalid default display window\n");
979  } else
981 
982  if (vui->default_display_window_flag) {
983  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
984  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
985  vui->def_disp_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
986  vui->def_disp_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
987  vui->def_disp_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
988  vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
989 
990  if (apply_defdispwin &&
992  av_log(avctx, AV_LOG_DEBUG,
993  "discarding vui default display window, "
994  "original values are l:%u r:%u t:%u b:%u\n",
999 
1000  vui->def_disp_win.left_offset =
1001  vui->def_disp_win.right_offset =
1002  vui->def_disp_win.top_offset =
1003  vui->def_disp_win.bottom_offset = 0;
1004  }
1005  }
1006 
1007 timing_info:
1009 
1010  if (vui->vui_timing_info_present_flag) {
1011  if( get_bits_left(gb) < 66 && !alt) {
1012  // The alternate syntax seem to have timing info located
1013  // at where def_disp_win is normally located
1014  av_log(avctx, AV_LOG_WARNING,
1015  "Strange VUI timing information, retrying...\n");
1016  memcpy(vui, &backup_vui, sizeof(backup_vui));
1017  memcpy(gb, &backup, sizeof(backup));
1018  alt = 1;
1019  goto timing_info;
1020  }
1021  vui->vui_num_units_in_tick = get_bits_long(gb, 32);
1022  vui->vui_time_scale = get_bits_long(gb, 32);
1023  if (alt) {
1024  av_log(avctx, AV_LOG_INFO, "Retry got %"PRIu32"/%"PRIu32" fps\n",
1026  }
1032  decode_hrd(gb, 1, &sps->hdr, sps->max_sub_layers);
1033  }
1034 
1036  if (vui->bitstream_restriction_flag) {
1037  if (get_bits_left(gb) < 8 && !alt) {
1038  av_log(avctx, AV_LOG_WARNING,
1039  "Strange VUI bitstream restriction information, retrying"
1040  " from timing information...\n");
1041  memcpy(vui, &backup_vui, sizeof(backup_vui));
1042  memcpy(gb, &backup, sizeof(backup));
1043  alt = 1;
1044  goto timing_info;
1045  }
1054  }
1055 
1056  if (get_bits_left(gb) < 1 && !alt) {
1057  // XXX: Alternate syntax when sps_range_extension_flag != 0?
1058  av_log(avctx, AV_LOG_WARNING,
1059  "Overread in VUI, retrying from timing information...\n");
1060  memcpy(vui, &backup_vui, sizeof(backup_vui));
1061  memcpy(gb, &backup, sizeof(backup));
1062  alt = 1;
1063  goto timing_info;
1064  }
1065 }
1066 
1068 {
1069  int matrixId;
1070 
1071  for (matrixId = 0; matrixId < 6; matrixId++) {
1072  // 4x4 default is 16
1073  memset(sl->sl[0][matrixId], 16, 16);
1074  sl->sl_dc[0][matrixId] = 16; // default for 16x16
1075  sl->sl_dc[1][matrixId] = 16; // default for 32x32
1076  }
1077  memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
1078  memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
1079  memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
1080  memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
1081  memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
1082  memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
1083  memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
1084  memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
1085  memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
1086  memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
1087  memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
1088  memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
1089  memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
1090  memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
1091  memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
1092  memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
1093  memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
1094  memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
1095 }
1096 
1098  ScalingList *sl, const HEVCSPS *sps)
1099 {
1100  uint8_t scaling_list_pred_mode_flag;
1101  uint8_t scaling_list_dc_coef[2][6];
1102  int size_id, matrix_id, pos;
1103  int i;
1104 
1105  for (size_id = 0; size_id < 4; size_id++)
1106  for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1107  scaling_list_pred_mode_flag = get_bits1(gb);
1108  if (!scaling_list_pred_mode_flag) {
1109  unsigned int delta = get_ue_golomb_long(gb);
1110  /* Only need to handle non-zero delta. Zero means default,
1111  * which should already be in the arrays. */
1112  if (delta) {
1113  // Copy from previous array.
1114  delta *= (size_id == 3) ? 3 : 1;
1115  if (matrix_id < delta) {
1116  av_log(avctx, AV_LOG_ERROR,
1117  "Invalid delta in scaling list data: %d.\n", delta);
1118  return AVERROR_INVALIDDATA;
1119  }
1120 
1121  memcpy(sl->sl[size_id][matrix_id],
1122  sl->sl[size_id][matrix_id - delta],
1123  size_id > 0 ? 64 : 16);
1124  if (size_id > 1)
1125  sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
1126  }
1127  } else {
1128  int next_coef, coef_num;
1129  int32_t scaling_list_delta_coef;
1130 
1131  next_coef = 8;
1132  coef_num = FFMIN(64, 1 << (4 + (size_id << 1)));
1133  if (size_id > 1) {
1134  int scaling_list_coeff_minus8 = get_se_golomb(gb);
1135  if (scaling_list_coeff_minus8 < -7 ||
1136  scaling_list_coeff_minus8 > 247)
1137  return AVERROR_INVALIDDATA;
1138  scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1139  next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1140  sl->sl_dc[size_id - 2][matrix_id] = next_coef;
1141  }
1142  for (i = 0; i < coef_num; i++) {
1143  if (size_id == 0)
1144  pos = 4 * ff_hevc_diag_scan4x4_y[i] +
1146  else
1147  pos = 8 * ff_hevc_diag_scan8x8_y[i] +
1149 
1150  scaling_list_delta_coef = get_se_golomb(gb);
1151  next_coef = (next_coef + 256U + scaling_list_delta_coef) % 256;
1152  sl->sl[size_id][matrix_id][pos] = next_coef;
1153  }
1154  }
1155  }
1156 
1157  if (sps->chroma_format_idc == 3) {
1158  for (i = 0; i < 64; i++) {
1159  sl->sl[3][1][i] = sl->sl[2][1][i];
1160  sl->sl[3][2][i] = sl->sl[2][2][i];
1161  sl->sl[3][4][i] = sl->sl[2][4][i];
1162  sl->sl[3][5][i] = sl->sl[2][5][i];
1163  }
1164  sl->sl_dc[1][1] = sl->sl_dc[0][1];
1165  sl->sl_dc[1][2] = sl->sl_dc[0][2];
1166  sl->sl_dc[1][4] = sl->sl_dc[0][4];
1167  sl->sl_dc[1][5] = sl->sl_dc[0][5];
1168  }
1169 
1170 
1171  return 0;
1172 }
1173 
1175 {
1176  const AVPixFmtDescriptor *desc;
1177  switch (sps->bit_depth) {
1178  case 8:
1179  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
1180  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
1181  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
1182  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
1183  break;
1184  case 9:
1185  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY9;
1186  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
1187  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
1188  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
1189  break;
1190  case 10:
1191  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY10;
1192  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
1193  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
1194  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
1195  break;
1196  case 12:
1197  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY12;
1198  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
1199  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
1200  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
1201  break;
1202  default:
1203  av_log(avctx, AV_LOG_ERROR,
1204  "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1205  "chroma_format_idc is %d, depth is %d\n",
1206  sps->chroma_format_idc, sps->bit_depth);
1207  return AVERROR_INVALIDDATA;
1208  }
1209 
1210  desc = av_pix_fmt_desc_get(sps->pix_fmt);
1211  if (!desc)
1212  return AVERROR(EINVAL);
1213 
1214  sps->hshift[0] = sps->vshift[0] = 0;
1215  sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
1216  sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
1217 
1218  sps->pixel_shift = sps->bit_depth > 8;
1219 
1220  return 0;
1221 }
1222 
1224  unsigned nuh_layer_id, int apply_defdispwin,
1225  const HEVCVPS * const *vps_list, AVCodecContext *avctx)
1226 {
1227  HEVCWindow *ow;
1228  int ret = 0;
1229  int bit_depth_chroma, num_comps, multi_layer_ext;
1230  int vps_max_sub_layers;
1231  int i;
1232 
1233  // Coded parameters
1234 
1235  sps->vps_id = get_bits(gb, 4);
1236 
1237  if (vps_list) {
1238  if (!vps_list[sps->vps_id]) {
1239  av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
1240  sps->vps_id);
1241  return AVERROR_INVALIDDATA;
1242  }
1243  sps->vps = av_refstruct_ref_c(vps_list[sps->vps_id]);
1244  }
1245 
1246  sps->max_sub_layers = get_bits(gb, 3) + 1;
1247  multi_layer_ext = nuh_layer_id > 0 &&
1248  sps->max_sub_layers == HEVC_MAX_SUB_LAYERS + 1;
1249  if (multi_layer_ext) {
1250  if (!sps->vps)
1251  return AVERROR(EINVAL);
1252 
1253  sps->max_sub_layers = sps->vps->vps_max_sub_layers;
1254  }
1255  vps_max_sub_layers = sps->vps ? sps->vps->vps_max_sub_layers
1256  : FFMIN(sps->max_sub_layers, HEVC_MAX_SUB_LAYERS);
1257 
1258  if (sps->max_sub_layers > vps_max_sub_layers) {
1259  av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
1260  sps->max_sub_layers);
1261  return AVERROR_INVALIDDATA;
1262  }
1263 
1264  if (!multi_layer_ext) {
1265  sps->temporal_id_nesting = get_bits(gb, 1);
1266 
1267  if ((ret = parse_ptl(gb, avctx, 1, &sps->ptl, sps->max_sub_layers)) < 0)
1268  return ret;
1269  } else {
1270  sps->temporal_id_nesting = sps->max_sub_layers > 1 ?
1271  sps->vps->vps_max_sub_layers : 1;
1272  }
1273 
1274  *sps_id = get_ue_golomb_long(gb);
1275  if (*sps_id >= HEVC_MAX_SPS_COUNT) {
1276  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", *sps_id);
1277  return AVERROR_INVALIDDATA;
1278  }
1279 
1280  if (multi_layer_ext) {
1281  const RepFormat *rf = &sps->vps->rep_format;
1282 
1283  if (sps->vps->nb_layers == 1) {
1284  av_log(avctx, AV_LOG_WARNING, "SPS %d references an unsupported VPS extension. Ignoring\n",
1285  *sps_id);
1286  return AVERROR(ENOSYS);
1287  }
1288 
1289  if (get_bits1(gb) && // update_rep_format_flag
1290  get_bits(gb, 8)) { // sps_rep_format_idx
1291  av_log(avctx, AV_LOG_ERROR, "sps_rep_format_idx!=0\n");
1292  return AVERROR_PATCHWELCOME;
1293  }
1294 
1295  sps->separate_colour_plane = rf->separate_colour_plane_flag;
1296  sps->chroma_format_idc = sps->separate_colour_plane ? 0 :
1297  rf->chroma_format_idc;
1298  sps->bit_depth = rf->bit_depth_luma;
1299  sps->width = rf->pic_width_in_luma_samples;
1300  sps->height = rf->pic_height_in_luma_samples;
1301 
1302  sps->pic_conf_win.left_offset = rf->conf_win_left_offset;
1303  sps->pic_conf_win.right_offset = rf->conf_win_right_offset;
1304  sps->pic_conf_win.top_offset = rf->conf_win_top_offset;
1305  sps->pic_conf_win.bottom_offset = rf->conf_win_bottom_offset;
1306 
1307  } else {
1308  sps->chroma_format_idc = get_ue_golomb_long(gb);
1309  if (sps->chroma_format_idc > 3U) {
1310  av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
1311  return AVERROR_INVALIDDATA;
1312  }
1313 
1314  if (sps->chroma_format_idc == 3)
1315  sps->separate_colour_plane = get_bits1(gb);
1316 
1317  if (sps->separate_colour_plane)
1318  sps->chroma_format_idc = 0;
1319 
1320  sps->width = get_ue_golomb_long(gb);
1321  sps->height = get_ue_golomb_long(gb);
1322  if ((ret = av_image_check_size(sps->width,
1323  sps->height, 0, avctx)) < 0)
1324  return ret;
1325 
1326  sps->conformance_window = get_bits1(gb);
1327  if (sps->conformance_window) {
1328  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
1329  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
1330  sps->pic_conf_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
1331  sps->pic_conf_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
1332  sps->pic_conf_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
1333  sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
1334 
1335  if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
1336  av_log(avctx, AV_LOG_DEBUG,
1337  "discarding sps conformance window, "
1338  "original values are l:%u r:%u t:%u b:%u\n",
1339  sps->pic_conf_win.left_offset,
1340  sps->pic_conf_win.right_offset,
1341  sps->pic_conf_win.top_offset,
1342  sps->pic_conf_win.bottom_offset);
1343 
1344  sps->pic_conf_win.left_offset =
1345  sps->pic_conf_win.right_offset =
1346  sps->pic_conf_win.top_offset =
1347  sps->pic_conf_win.bottom_offset = 0;
1348  }
1349  }
1350 
1351  sps->bit_depth = get_ue_golomb_31(gb) + 8;
1352  if (sps->bit_depth > 16) {
1353  av_log(avctx, AV_LOG_ERROR, "Luma bit depth (%d) is out of range\n",
1354  sps->bit_depth);
1355  return AVERROR_INVALIDDATA;
1356  }
1357  bit_depth_chroma = get_ue_golomb_31(gb) + 8;
1358  if (bit_depth_chroma > 16) {
1359  av_log(avctx, AV_LOG_ERROR, "Chroma bit depth (%d) is out of range\n",
1360  bit_depth_chroma);
1361  return AVERROR_INVALIDDATA;
1362  }
1363  if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
1364  av_log(avctx, AV_LOG_ERROR,
1365  "Luma bit depth (%d) is different from chroma bit depth (%d), "
1366  "this is unsupported.\n",
1367  sps->bit_depth, bit_depth_chroma);
1368  return AVERROR_INVALIDDATA;
1369  }
1370  sps->bit_depth_chroma = bit_depth_chroma;
1371  }
1372 
1373  sps->output_window = sps->pic_conf_win;
1374 
1375  ret = map_pixel_format(avctx, sps);
1376  if (ret < 0)
1377  return ret;
1378 
1379  sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
1380  if (sps->log2_max_poc_lsb > 16) {
1381  av_log(avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
1382  sps->log2_max_poc_lsb - 4);
1383  return AVERROR_INVALIDDATA;
1384  }
1385 
1386  if (!multi_layer_ext) {
1387  int start;
1388 
1389  sps->sublayer_ordering_info = get_bits1(gb);
1390  start = sps->sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
1391  for (i = start; i < sps->max_sub_layers; i++) {
1392  sps->temporal_layer[i].max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
1393  sps->temporal_layer[i].num_reorder_pics = get_ue_golomb_long(gb);
1394  sps->temporal_layer[i].max_latency_increase = get_ue_golomb_long(gb) - 1;
1395  if (sps->temporal_layer[i].max_dec_pic_buffering > (unsigned)HEVC_MAX_DPB_SIZE) {
1396  av_log(avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
1397  sps->temporal_layer[i].max_dec_pic_buffering - 1U);
1398  return AVERROR_INVALIDDATA;
1399  }
1400  if (sps->temporal_layer[i].num_reorder_pics > sps->temporal_layer[i].max_dec_pic_buffering - 1) {
1401  av_log(avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
1402  sps->temporal_layer[i].num_reorder_pics);
1403  if (avctx->err_recognition & AV_EF_EXPLODE ||
1404  sps->temporal_layer[i].num_reorder_pics > HEVC_MAX_DPB_SIZE - 1) {
1405  return AVERROR_INVALIDDATA;
1406  }
1407  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[i].num_reorder_pics + 1;
1408  }
1409  }
1410 
1411  if (!sps->sublayer_ordering_info) {
1412  for (i = 0; i < start; i++) {
1413  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[start].max_dec_pic_buffering;
1414  sps->temporal_layer[i].num_reorder_pics = sps->temporal_layer[start].num_reorder_pics;
1415  sps->temporal_layer[i].max_latency_increase = sps->temporal_layer[start].max_latency_increase;
1416  }
1417  }
1418  } else {
1419  for (int i = 0; i < sps->max_sub_layers; i++) {
1420  sps->temporal_layer[i].max_dec_pic_buffering = sps->vps->dpb_size.max_dec_pic_buffering;
1421  sps->temporal_layer[i].num_reorder_pics = sps->vps->dpb_size.max_num_reorder_pics;
1422  sps->temporal_layer[i].max_latency_increase = sps->vps->dpb_size.max_latency_increase;
1423  }
1424  }
1425 
1426  sps->log2_min_cb_size = get_ue_golomb_long(gb) + 3;
1427  sps->log2_diff_max_min_coding_block_size = get_ue_golomb_long(gb);
1428  sps->log2_min_tb_size = get_ue_golomb_long(gb) + 2;
1429  sps->log2_diff_max_min_transform_block_size = get_ue_golomb_long(gb);
1430  sps->log2_max_trafo_size = sps->log2_diff_max_min_transform_block_size +
1431  sps->log2_min_tb_size;
1432 
1433  if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
1434  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
1435  return AVERROR_INVALIDDATA;
1436  }
1437 
1438  if (sps->log2_diff_max_min_coding_block_size > 30) {
1439  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);
1440  return AVERROR_INVALIDDATA;
1441  }
1442 
1443  if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
1444  av_log(avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
1445  return AVERROR_INVALIDDATA;
1446  }
1447 
1448  if (sps->log2_diff_max_min_transform_block_size > 30) {
1449  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size",
1450  sps->log2_diff_max_min_transform_block_size);
1451  return AVERROR_INVALIDDATA;
1452  }
1453 
1454  sps->max_transform_hierarchy_depth_inter = get_ue_golomb_long(gb);
1455  sps->max_transform_hierarchy_depth_intra = get_ue_golomb_long(gb);
1456 
1457  sps->scaling_list_enabled = get_bits1(gb);
1458  if (sps->scaling_list_enabled) {
1459  set_default_scaling_list_data(&sps->scaling_list);
1460 
1461  if (multi_layer_ext && get_bits1(gb)) { // sps_infer_scaling_list_flag
1462  av_log(avctx, AV_LOG_ERROR, "sps_infer_scaling_list_flag=1 not supported\n");
1463  return AVERROR_PATCHWELCOME;
1464  }
1465 
1466  if (get_bits1(gb)) {
1467  ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps);
1468  if (ret < 0)
1469  return ret;
1470  }
1471  }
1472 
1473  sps->amp_enabled = get_bits1(gb);
1474  sps->sao_enabled = get_bits1(gb);
1475 
1476  sps->pcm_enabled = get_bits1(gb);
1477  if (sps->pcm_enabled) {
1478  sps->pcm.bit_depth = get_bits(gb, 4) + 1;
1479  sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
1480  sps->pcm.log2_min_pcm_cb_size = get_ue_golomb_long(gb) + 3;
1481  sps->pcm.log2_max_pcm_cb_size = sps->pcm.log2_min_pcm_cb_size +
1482  get_ue_golomb_long(gb);
1483  if (FFMAX(sps->pcm.bit_depth, sps->pcm.bit_depth_chroma) > sps->bit_depth) {
1484  av_log(avctx, AV_LOG_ERROR,
1485  "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1486  sps->pcm.bit_depth, sps->pcm.bit_depth_chroma, sps->bit_depth);
1487  return AVERROR_INVALIDDATA;
1488  }
1489 
1490  sps->pcm_loop_filter_disabled = get_bits1(gb);
1491  }
1492 
1493  sps->nb_st_rps = get_ue_golomb_long(gb);
1494  if (sps->nb_st_rps > HEVC_MAX_SHORT_TERM_REF_PIC_SETS) {
1495  av_log(avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
1496  sps->nb_st_rps);
1497  return AVERROR_INVALIDDATA;
1498  }
1499  for (i = 0; i < sps->nb_st_rps; i++) {
1500  if ((ret = ff_hevc_decode_short_term_rps(gb, avctx, &sps->st_rps[i],
1501  sps, 0)) < 0)
1502  return ret;
1503  }
1504 
1505  sps->long_term_ref_pics_present = get_bits1(gb);
1506  if (sps->long_term_ref_pics_present) {
1507  sps->num_long_term_ref_pics_sps = get_ue_golomb_long(gb);
1508  if (sps->num_long_term_ref_pics_sps > HEVC_MAX_LONG_TERM_REF_PICS) {
1509  av_log(avctx, AV_LOG_ERROR, "Too many long term ref pics: %d.\n",
1510  sps->num_long_term_ref_pics_sps);
1511  return AVERROR_INVALIDDATA;
1512  }
1513 
1514  sps->used_by_curr_pic_lt = 0;
1515  for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
1516  sps->lt_ref_pic_poc_lsb_sps[i] = get_bits(gb, sps->log2_max_poc_lsb);
1517  sps->used_by_curr_pic_lt |= get_bits1(gb) << i;
1518  }
1519  }
1520 
1521  sps->temporal_mvp_enabled = get_bits1(gb);
1522  sps->strong_intra_smoothing_enabled = get_bits1(gb);
1523  sps->vui.common.sar = (AVRational){0, 1};
1524  sps->vui_present = get_bits1(gb);
1525  if (sps->vui_present)
1526  decode_vui(gb, avctx, apply_defdispwin, sps);
1527 
1528  sps->extension_present = get_bits1(gb);
1529  if (sps->extension_present) {
1530  sps->range_extension = get_bits1(gb);
1531  sps->multilayer_extension = get_bits1(gb);
1532  sps->sps_3d_extension = get_bits1(gb);
1533  sps->scc_extension = get_bits1(gb);
1534  skip_bits(gb, 4); // sps_extension_4bits
1535 
1536  if (sps->range_extension) {
1537  sps->transform_skip_rotation_enabled = get_bits1(gb);
1538  sps->transform_skip_context_enabled = get_bits1(gb);
1539  sps->implicit_rdpcm_enabled = get_bits1(gb);
1540  sps->explicit_rdpcm_enabled = get_bits1(gb);
1541 
1542  sps->extended_precision_processing = get_bits1(gb);
1543  if (sps->extended_precision_processing)
1544  av_log(avctx, AV_LOG_WARNING,
1545  "extended_precision_processing_flag not yet implemented\n");
1546 
1547  sps->intra_smoothing_disabled = get_bits1(gb);
1548  sps->high_precision_offsets_enabled = get_bits1(gb);
1549  if (sps->high_precision_offsets_enabled)
1550  av_log(avctx, AV_LOG_WARNING,
1551  "high_precision_offsets_enabled_flag not yet implemented\n");
1552 
1553  sps->persistent_rice_adaptation_enabled = get_bits1(gb);
1554 
1555  sps->cabac_bypass_alignment_enabled = get_bits1(gb);
1556  if (sps->cabac_bypass_alignment_enabled)
1557  av_log(avctx, AV_LOG_WARNING,
1558  "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1559  }
1560 
1561  if (sps->multilayer_extension) {
1562  skip_bits1(gb); // inter_view_mv_vert_constraint_flag
1563  }
1564 
1565  if (sps->sps_3d_extension) {
1566  for (i = 0; i <= 1; i++) {
1567  skip_bits1(gb); // iv_di_mc_enabled_flag
1568  skip_bits1(gb); // iv_mv_scal_enabled_flag
1569  if (i == 0) {
1570  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1571  skip_bits1(gb); // iv_res_pred_enabled_flag
1572  skip_bits1(gb); // depth_ref_enabled_flag
1573  skip_bits1(gb); // vsp_mc_enabled_flag
1574  skip_bits1(gb); // dbbp_enabled_flag
1575  } else {
1576  skip_bits1(gb); // tex_mc_enabled_flag
1577  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1578  skip_bits1(gb); // intra_contour_enabled_flag
1579  skip_bits1(gb); // intra_dc_only_wedge_enabled_flag
1580  skip_bits1(gb); // cqt_cu_part_pred_enabled_flag
1581  skip_bits1(gb); // inter_dc_only_enabled_flag
1582  skip_bits1(gb); // skip_intra_enabled_flag
1583  }
1584  }
1585  av_log(avctx, AV_LOG_WARNING,
1586  "sps_3d_extension_flag not yet implemented\n");
1587  }
1588 
1589  if (sps->scc_extension) {
1590  sps->curr_pic_ref_enabled = get_bits1(gb);
1591  sps->palette_mode_enabled = get_bits1(gb);
1592  if (sps->palette_mode_enabled) {
1593  sps->palette_max_size = get_ue_golomb(gb);
1594  sps->delta_palette_max_predictor_size = get_ue_golomb(gb);
1595  sps->palette_predictor_initializers_present = get_bits1(gb);
1596 
1597  if (sps->palette_predictor_initializers_present) {
1598  sps->sps_num_palette_predictor_initializers = get_ue_golomb(gb) + 1;
1599  if (sps->sps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
1600  av_log(avctx, AV_LOG_ERROR,
1601  "sps_num_palette_predictor_initializers out of range: %u\n",
1602  sps->sps_num_palette_predictor_initializers);
1603  return AVERROR_INVALIDDATA;
1604  }
1605  num_comps = !sps->chroma_format_idc ? 1 : 3;
1606  for (int comp = 0; comp < num_comps; comp++) {
1607  int bit_depth = !comp ? sps->bit_depth : sps->bit_depth_chroma;
1608  for (i = 0; i < sps->sps_num_palette_predictor_initializers; i++)
1609  sps->sps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
1610  }
1611  }
1612  }
1613  sps->motion_vector_resolution_control_idc = get_bits(gb, 2);
1614  sps->intra_boundary_filtering_disabled = get_bits1(gb);
1615  }
1616  }
1617  if (apply_defdispwin) {
1618  sps->output_window.left_offset += sps->vui.def_disp_win.left_offset;
1619  sps->output_window.right_offset += sps->vui.def_disp_win.right_offset;
1620  sps->output_window.top_offset += sps->vui.def_disp_win.top_offset;
1621  sps->output_window.bottom_offset += sps->vui.def_disp_win.bottom_offset;
1622  }
1623 
1624  ow = &sps->output_window;
1625  if (ow->left_offset >= INT_MAX - ow->right_offset ||
1626  ow->top_offset >= INT_MAX - ow->bottom_offset ||
1627  ow->left_offset + ow->right_offset >= sps->width ||
1628  ow->top_offset + ow->bottom_offset >= sps->height) {
1629  av_log(avctx, AV_LOG_WARNING, "Invalid cropping offsets: %u/%u/%u/%u\n",
1630  ow->left_offset, ow->right_offset, ow->top_offset, ow->bottom_offset);
1631  if (avctx->err_recognition & AV_EF_EXPLODE) {
1632  return AVERROR_INVALIDDATA;
1633  }
1634  av_log(avctx, AV_LOG_WARNING,
1635  "Displaying the whole video surface.\n");
1636  memset(ow, 0, sizeof(*ow));
1637  memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
1638  }
1639 
1640  // Inferred parameters
1641  sps->log2_ctb_size = sps->log2_min_cb_size +
1642  sps->log2_diff_max_min_coding_block_size;
1643  sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
1644 
1645  if (sps->log2_ctb_size > HEVC_MAX_LOG2_CTB_SIZE) {
1646  av_log(avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
1647  return AVERROR_INVALIDDATA;
1648  }
1649  if (sps->log2_ctb_size < 4) {
1650  av_log(avctx,
1651  AV_LOG_ERROR,
1652  "log2_ctb_size %d differs from the bounds of any known profile\n",
1653  sps->log2_ctb_size);
1654  avpriv_request_sample(avctx, "log2_ctb_size %d", sps->log2_ctb_size);
1655  return AVERROR_INVALIDDATA;
1656  }
1657 
1658  sps->ctb_width = (sps->width + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1659  sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1660  sps->ctb_size = sps->ctb_width * sps->ctb_height;
1661 
1662  sps->min_cb_width = sps->width >> sps->log2_min_cb_size;
1663  sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
1664  sps->min_tb_width = sps->width >> sps->log2_min_tb_size;
1665  sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
1666  sps->min_pu_width = sps->width >> sps->log2_min_pu_size;
1667  sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
1668  sps->tb_mask = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
1669 
1670  sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
1671 
1672  if (av_zero_extend(sps->width, sps->log2_min_cb_size) ||
1673  av_zero_extend(sps->height, sps->log2_min_cb_size)) {
1674  av_log(avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
1675  return AVERROR_INVALIDDATA;
1676  }
1677 
1678  if (sps->max_transform_hierarchy_depth_inter > sps->log2_ctb_size - sps->log2_min_tb_size) {
1679  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
1680  sps->max_transform_hierarchy_depth_inter);
1681  return AVERROR_INVALIDDATA;
1682  }
1683  if (sps->max_transform_hierarchy_depth_intra > sps->log2_ctb_size - sps->log2_min_tb_size) {
1684  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
1685  sps->max_transform_hierarchy_depth_intra);
1686  return AVERROR_INVALIDDATA;
1687  }
1688  if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
1689  av_log(avctx, AV_LOG_ERROR,
1690  "max transform block size out of range: %d\n",
1691  sps->log2_max_trafo_size);
1692  return AVERROR_INVALIDDATA;
1693  }
1694 
1695  if (get_bits_left(gb) < 0) {
1696  av_log(avctx, AV_LOG_ERROR,
1697  "Overread SPS by %d bits\n", -get_bits_left(gb));
1698  return AVERROR_INVALIDDATA;
1699  }
1700 
1701  return 0;
1702 }
1703 
1704 static void hevc_sps_free(AVRefStructOpaque opaque, void *obj)
1705 {
1706  HEVCSPS *sps = obj;
1707 
1708  av_refstruct_unref(&sps->vps);
1709 
1710  av_freep(&sps->data);
1711 }
1712 
1713 static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
1714 {
1715  return sps1->data_size == sps2->data_size &&
1716  !memcmp(sps1->data, sps2->data, sps1->data_size);
1717 }
1718 
1720  HEVCParamSets *ps, unsigned nuh_layer_id,
1721  int apply_defdispwin)
1722 {
1724  unsigned int sps_id;
1725  int ret;
1726 
1727  if (!sps)
1728  return AVERROR(ENOMEM);
1729 
1730  av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
1731 
1732  sps->data_size = get_bits_bytesize(gb, 1);
1733  sps->data = av_memdup(gb->buffer, sps->data_size);
1734  if (!sps->data) {
1735  ret = AVERROR(ENOMEM);
1736  goto err;
1737  }
1738 
1739  ret = ff_hevc_parse_sps(sps, gb, &sps_id,
1740  nuh_layer_id, apply_defdispwin,
1741  ps->vps_list, avctx);
1742  if (ret < 0)
1743  goto err;
1744 
1745  if (avctx->debug & FF_DEBUG_BITSTREAM) {
1746  av_log(avctx, AV_LOG_DEBUG,
1747  "Parsed SPS: id %d; coded wxh: %dx%d; "
1748  "cropped wxh: %dx%d; pix_fmt: %s.\n",
1749  sps_id, sps->width, sps->height,
1750  sps->width - (sps->output_window.left_offset + sps->output_window.right_offset),
1751  sps->height - (sps->output_window.top_offset + sps->output_window.bottom_offset),
1752  av_get_pix_fmt_name(sps->pix_fmt));
1753  }
1754 
1755  /* check if this is a repeat of an already parsed SPS, then keep the
1756  * original one.
1757  * otherwise drop all PPSes that depend on it */
1758  if (ps->sps_list[sps_id] &&
1759  compare_sps(ps->sps_list[sps_id], sps)) {
1761  } else {
1762  remove_sps(ps, sps_id);
1763  ps->sps_list[sps_id] = sps;
1764  }
1765 
1766  return 0;
1767 err:
1769  return ret;
1770 }
1771 
1772 static void hevc_pps_free(AVRefStructOpaque unused, void *obj)
1773 {
1774  HEVCPPS *pps = obj;
1775 
1776  av_refstruct_unref(&pps->sps);
1777 
1778  av_freep(&pps->column_width);
1779  av_freep(&pps->row_height);
1780  av_freep(&pps->col_bd);
1781  av_freep(&pps->row_bd);
1782  av_freep(&pps->col_idxX);
1783  av_freep(&pps->ctb_addr_rs_to_ts);
1784  av_freep(&pps->ctb_addr_ts_to_rs);
1785  av_freep(&pps->tile_pos_rs);
1786  av_freep(&pps->tile_id);
1787  av_freep(&pps->min_tb_addr_zs_tab);
1788  av_freep(&pps->data);
1789 }
1790 
1791 static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth,
1792  int idx_y, int idx_cb, int idx_cr, int inp_length)
1793 {
1794  unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1795  int cm_res_bits;
1796 
1797  part_num_y = 1 << pps->cm_y_part_num_log2;
1798 
1799  split_octant_flag = inp_depth < pps->cm_octant_depth ? get_bits1(gb) : 0;
1800 
1801  if (split_octant_flag)
1802  for (int k = 0; k < 2; k++)
1803  for (int m = 0; m < 2; m++)
1804  for (int n = 0; n < 2; n++)
1805  colour_mapping_octants(gb, pps, inp_depth + 1,
1806  idx_y + part_num_y * k * inp_length / 2,
1807  idx_cb + m * inp_length / 2,
1808  idx_cr + n * inp_length / 2,
1809  inp_length / 2);
1810  else
1811  for (int i = 0; i < part_num_y; i++) {
1812  for (int j = 0; j < 4; j++) {
1813  coded_res_flag = get_bits1(gb);
1814  if (coded_res_flag)
1815  for (int c = 0; c < 3; c++) {
1816  res_coeff_q = get_ue_golomb_long(gb);
1817  cm_res_bits = FFMAX(0, 10 + pps->luma_bit_depth_cm_input -
1818  pps->luma_bit_depth_cm_output -
1819  pps->cm_res_quant_bits - pps->cm_delta_flc_bits);
1820  res_coeff_r = cm_res_bits ? get_bits(gb, cm_res_bits) : 0;
1821  if (res_coeff_q || res_coeff_r)
1822  skip_bits1(gb);
1823  }
1824  }
1825  }
1826 }
1827 
1829 {
1830  pps->num_cm_ref_layers = get_ue_golomb(gb) + 1;
1831  if (pps->num_cm_ref_layers > 62) {
1832  av_log(avctx, AV_LOG_ERROR,
1833  "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1834  return AVERROR_INVALIDDATA;
1835  }
1836  for (int i = 0; i < pps->num_cm_ref_layers; i++)
1837  pps->cm_ref_layer_id[i] = get_bits(gb, 6);
1838 
1839  pps->cm_octant_depth = get_bits(gb, 2);
1840  pps->cm_y_part_num_log2 = get_bits(gb, 2);
1841 
1842  pps->luma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1843  pps->chroma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1844  pps->luma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1845  pps->chroma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1846 
1847  if ( pps-> luma_bit_depth_cm_output < pps-> luma_bit_depth_cm_input
1848  || pps->chroma_bit_depth_cm_output < pps->chroma_bit_depth_cm_input)
1849  return AVERROR_INVALIDDATA;
1850 
1851  pps->cm_res_quant_bits = get_bits(gb, 2);
1852  pps->cm_delta_flc_bits = get_bits(gb, 2) + 1;
1853 
1854  if (pps->cm_octant_depth == 1) {
1855  pps->cm_adapt_threshold_u_delta = get_se_golomb_long(gb);
1856  pps->cm_adapt_threshold_v_delta = get_se_golomb_long(gb);
1857  }
1858 
1859  colour_mapping_octants(gb, pps, 0, 0, 0, 0, 1 << pps->cm_octant_depth);
1860 
1861  return 0;
1862 }
1863 
1865  HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
1866 {
1867  pps->poc_reset_info_present_flag = get_bits1(gb);
1868  pps->pps_infer_scaling_list_flag = get_bits1(gb);
1869  if (pps->pps_infer_scaling_list_flag)
1870  pps->pps_scaling_list_ref_layer_id = get_bits(gb, 6);
1871 
1872  pps->num_ref_loc_offsets = get_ue_golomb(gb);
1873  if (pps->num_ref_loc_offsets > vps->vps_max_layers - 1)
1874  return AVERROR_INVALIDDATA;
1875 
1876  for (int i = 0; i < pps->num_ref_loc_offsets; i++) {
1877  pps->ref_loc_offset_layer_id[i] = get_bits(gb, 6);
1878  pps->scaled_ref_layer_offset_present_flag[i] = get_bits1(gb);
1879  if (pps->scaled_ref_layer_offset_present_flag[i]) {
1880  pps->scaled_ref_layer_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1881  pps->scaled_ref_layer_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1882  pps->scaled_ref_layer_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1883  pps->scaled_ref_layer_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1884  }
1885 
1886  pps->ref_region_offset_present_flag[i] = get_bits1(gb);
1887  if (pps->ref_region_offset_present_flag[i]) {
1888  pps->ref_region_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1889  pps->ref_region_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1890  pps->ref_region_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1891  pps->ref_region_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1892  }
1893 
1894  pps->resample_phase_set_present_flag[i] = get_bits1(gb);
1895  if (pps->resample_phase_set_present_flag[i]) {
1896  pps->phase_hor_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1897  pps->phase_ver_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1898  pps->phase_hor_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1899  pps->phase_ver_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1900  }
1901  }
1902 
1903  pps->colour_mapping_enabled_flag = get_bits1(gb);
1904  if (pps->colour_mapping_enabled_flag) {
1905  int ret = colour_mapping_table(gb, avctx, pps);
1906  if (ret < 0)
1907  return ret;
1908  }
1909 
1910  return 0;
1911 }
1912 
1914 {
1915  unsigned int num_val_delta_dlt, max_diff = 0;
1916  int min_diff_minus1 = -1;
1917  unsigned int len;
1918 
1919  num_val_delta_dlt = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1920  if (num_val_delta_dlt) {
1921  if (num_val_delta_dlt > 1)
1922  max_diff = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1923  if (num_val_delta_dlt > 2 && max_diff) {
1924  len = av_log2(max_diff) + 1;
1925  min_diff_minus1 = get_bits(gb, len);
1926  }
1927  if (max_diff > (min_diff_minus1 + 1))
1928  for (int k = 1; k < num_val_delta_dlt; k++) {
1929  len = av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1930  skip_bits(gb, len); // delta_val_diff_minus_min
1931  }
1932  }
1933 }
1934 
1936  HEVCPPS *pps, const HEVCSPS *sps)
1937 {
1938  unsigned int pps_depth_layers_minus1;
1939 
1940  if (get_bits1(gb)) { // dlts_present_flag
1941  pps_depth_layers_minus1 = get_bits(gb, 6);
1942  pps->pps_bit_depth_for_depth_layers_minus8 = get_bits(gb, 4);
1943  for (int i = 0; i <= pps_depth_layers_minus1; i++) {
1944  if (get_bits1(gb)) { // dlt_flag[i]
1945  if (!get_bits1(gb)) { // dlt_pred_flag[i]
1946  if (get_bits1(gb)) { // dlt_val_flags_present_flag[i]
1947  for (int j = 0; j <= ((1 << (pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1948  skip_bits1(gb); // dlt_value_flag[i][j]
1949  } else
1950  delta_dlt(gb, pps);
1951  }
1952  }
1953  }
1954  }
1955 
1956  return 0;
1957 }
1958 
1960  HEVCPPS *pps, const HEVCSPS *sps)
1961 {
1962  if (pps->transform_skip_enabled_flag) {
1963  pps->log2_max_transform_skip_block_size = get_ue_golomb_31(gb) + 2;
1964  }
1965  pps->cross_component_prediction_enabled_flag = get_bits1(gb);
1966  pps->chroma_qp_offset_list_enabled_flag = get_bits1(gb);
1967  if (pps->chroma_qp_offset_list_enabled_flag) {
1968  pps->diff_cu_chroma_qp_offset_depth = get_ue_golomb_31(gb);
1969  pps->chroma_qp_offset_list_len_minus1 = get_ue_golomb_31(gb);
1970  if (pps->chroma_qp_offset_list_len_minus1 > 5) {
1971  av_log(avctx, AV_LOG_ERROR,
1972  "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1973  return AVERROR_INVALIDDATA;
1974  }
1975  for (int i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
1976  pps->cb_qp_offset_list[i] = get_se_golomb(gb);
1977  if (pps->cb_qp_offset_list[i]) {
1978  av_log(avctx, AV_LOG_WARNING,
1979  "cb_qp_offset_list not tested yet.\n");
1980  }
1981  pps->cr_qp_offset_list[i] = get_se_golomb(gb);
1982  if (pps->cr_qp_offset_list[i]) {
1983  av_log(avctx, AV_LOG_WARNING,
1984  "cb_qp_offset_list not tested yet.\n");
1985  }
1986  }
1987  }
1988  pps->log2_sao_offset_scale_luma = get_ue_golomb_31(gb);
1989  pps->log2_sao_offset_scale_chroma = get_ue_golomb_31(gb);
1990 
1991  if ( pps->log2_sao_offset_scale_luma > FFMAX(sps->bit_depth - 10, 0)
1992  || pps->log2_sao_offset_scale_chroma > FFMAX(sps->bit_depth_chroma - 10, 0)
1993  )
1994  return AVERROR_INVALIDDATA;
1995 
1996  return(0);
1997 }
1998 
2000  HEVCPPS *pps, const HEVCSPS *sps)
2001 {
2002  int num_comps, ret;
2003 
2004  pps->pps_curr_pic_ref_enabled_flag = get_bits1(gb);
2005  if (pps->residual_adaptive_colour_transform_enabled_flag = get_bits1(gb)) {
2006  pps->pps_slice_act_qp_offsets_present_flag = get_bits1(gb);
2007  pps->pps_act_y_qp_offset = get_se_golomb(gb) - 5;
2008  pps->pps_act_cb_qp_offset = get_se_golomb(gb) - 5;
2009  pps->pps_act_cr_qp_offset = get_se_golomb(gb) - 3;
2010 
2011 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2012  pps->pps_act_ ## name ## _qp_offset >= 12)
2014 #undef CHECK_QP_OFFSET
2015  if (ret) {
2016  av_log(avctx, AV_LOG_ERROR,
2017  "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2018  return AVERROR_INVALIDDATA;
2019  }
2020  }
2021 
2022  if (pps->pps_palette_predictor_initializers_present_flag = get_bits1(gb)) {
2023  pps->pps_num_palette_predictor_initializers = get_ue_golomb(gb);
2024  if (pps->pps_num_palette_predictor_initializers > 0) {
2025  if (pps->pps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
2026  av_log(avctx, AV_LOG_ERROR,
2027  "pps_num_palette_predictor_initializers out of range: %u\n",
2028  pps->pps_num_palette_predictor_initializers);
2029  return AVERROR_INVALIDDATA;
2030  }
2031  pps->monochrome_palette_flag = get_bits1(gb);
2032  pps->luma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
2033  if (pps->luma_bit_depth_entry != sps->bit_depth)
2034  return AVERROR_INVALIDDATA;
2035  if (!pps->monochrome_palette_flag) {
2036  pps->chroma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
2037  if (pps->chroma_bit_depth_entry != sps->bit_depth_chroma)
2038  return AVERROR_INVALIDDATA;
2039  }
2040 
2041  num_comps = pps->monochrome_palette_flag ? 1 : 3;
2042  for (int comp = 0; comp < num_comps; comp++) {
2043  int bit_depth = !comp ? pps->luma_bit_depth_entry : pps->chroma_bit_depth_entry;
2044  for (int i = 0; i < pps->pps_num_palette_predictor_initializers; i++)
2045  pps->pps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
2046  }
2047  }
2048  }
2049 
2050  return 0;
2051 }
2052 
2053 static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb,
2054  HEVCPPS *pps, const HEVCSPS *sps)
2055 {
2056  int log2_diff;
2057  int pic_area_in_ctbs;
2058  int i, j, x, y, ctb_addr_rs, tile_id;
2059 
2060  // Inferred parameters
2061  pps->col_bd = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
2062  pps->row_bd = av_malloc_array(pps->num_tile_rows + 1, sizeof(*pps->row_bd));
2063  pps->col_idxX = av_malloc_array(sps->ctb_width, sizeof(*pps->col_idxX));
2064  if (!pps->col_bd || !pps->row_bd || !pps->col_idxX)
2065  return AVERROR(ENOMEM);
2066 
2067  if (pps->uniform_spacing_flag) {
2068  if (!pps->column_width) {
2069  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
2070  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
2071  }
2072  if (!pps->column_width || !pps->row_height)
2073  return AVERROR(ENOMEM);
2074 
2075  for (i = 0; i < pps->num_tile_columns; i++) {
2076  pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
2077  (i * sps->ctb_width) / pps->num_tile_columns;
2078  }
2079 
2080  for (i = 0; i < pps->num_tile_rows; i++) {
2081  pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
2082  (i * sps->ctb_height) / pps->num_tile_rows;
2083  }
2084  }
2085 
2086  pps->col_bd[0] = 0;
2087  for (i = 0; i < pps->num_tile_columns; i++)
2088  pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
2089 
2090  pps->row_bd[0] = 0;
2091  for (i = 0; i < pps->num_tile_rows; i++)
2092  pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
2093 
2094  for (i = 0, j = 0; i < sps->ctb_width; i++) {
2095  if (i > pps->col_bd[j])
2096  j++;
2097  pps->col_idxX[i] = j;
2098  }
2099 
2100  /**
2101  * 6.5
2102  */
2103  pic_area_in_ctbs = sps->ctb_width * sps->ctb_height;
2104 
2105  pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_rs_to_ts));
2106  pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_ts_to_rs));
2107  pps->tile_id = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->tile_id));
2108  pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
2109  if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
2110  !pps->tile_id || !pps->min_tb_addr_zs_tab) {
2111  return AVERROR(ENOMEM);
2112  }
2113 
2114  for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2115  int tb_x = ctb_addr_rs % sps->ctb_width;
2116  int tb_y = ctb_addr_rs / sps->ctb_width;
2117  int tile_x = 0;
2118  int tile_y = 0;
2119  int val = 0;
2120 
2121  for (i = 0; i < pps->num_tile_columns; i++) {
2122  if (tb_x < pps->col_bd[i + 1]) {
2123  tile_x = i;
2124  break;
2125  }
2126  }
2127 
2128  for (i = 0; i < pps->num_tile_rows; i++) {
2129  if (tb_y < pps->row_bd[i + 1]) {
2130  tile_y = i;
2131  break;
2132  }
2133  }
2134 
2135  for (i = 0; i < tile_x; i++)
2136  val += pps->row_height[tile_y] * pps->column_width[i];
2137  for (i = 0; i < tile_y; i++)
2138  val += sps->ctb_width * pps->row_height[i];
2139 
2140  val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
2141  tb_x - pps->col_bd[tile_x];
2142 
2143  pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
2144  pps->ctb_addr_ts_to_rs[val] = ctb_addr_rs;
2145  }
2146 
2147  for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
2148  for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
2149  for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
2150  for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
2151  pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
2152 
2153  pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
2154  if (!pps->tile_pos_rs)
2155  return AVERROR(ENOMEM);
2156 
2157  for (j = 0; j < pps->num_tile_rows; j++)
2158  for (i = 0; i < pps->num_tile_columns; i++)
2159  pps->tile_pos_rs[j * pps->num_tile_columns + i] =
2160  pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
2161 
2162  log2_diff = sps->log2_ctb_size - sps->log2_min_tb_size;
2163  pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
2164  for (y = 0; y < sps->tb_mask+2; y++) {
2165  pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
2166  pps->min_tb_addr_zs_tab[y] = -1;
2167  }
2168  for (y = 0; y < sps->tb_mask+1; y++) {
2169  for (x = 0; x < sps->tb_mask+1; x++) {
2170  int tb_x = x >> log2_diff;
2171  int tb_y = y >> log2_diff;
2172  int rs = sps->ctb_width * tb_y + tb_x;
2173  int val = pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2174  for (i = 0; i < log2_diff; i++) {
2175  int m = 1 << i;
2176  val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2177  }
2178  pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
2179  }
2180  }
2181 
2182  return 0;
2183 }
2184 
2186  HEVCParamSets *ps)
2187 {
2188  const HEVCSPS *sps = NULL;
2189  const HEVCVPS *vps = NULL;
2190  int i, ret = 0;
2191  ptrdiff_t nal_size = get_bits_bytesize(gb, 1);
2192  unsigned int pps_id = get_ue_golomb_long(gb);
2193  unsigned log2_parallel_merge_level_minus2;
2194  HEVCPPS *pps;
2195 
2196  av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n");
2197 
2198  if (pps_id >= HEVC_MAX_PPS_COUNT) {
2199  av_log(avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
2200  return AVERROR_INVALIDDATA;
2201  }
2202 
2203  if (ps->pps_list[pps_id]) {
2204  const HEVCPPS *pps1 = ps->pps_list[pps_id];
2205  if (pps1->data_size == nal_size &&
2206  !memcmp(pps1->data, gb->buffer, pps1->data_size))
2207  return 0;
2208  }
2209 
2210  pps = av_refstruct_alloc_ext(sizeof(*pps), 0, NULL, hevc_pps_free);
2211  if (!pps)
2212  return AVERROR(ENOMEM);
2213 
2214  pps->data_size = nal_size;
2215  pps->data = av_memdup(gb->buffer, nal_size);
2216  if (!pps->data) {
2218  goto err;
2219  }
2220 
2221  // Default values
2222  pps->loop_filter_across_tiles_enabled_flag = 1;
2223  pps->num_tile_columns = 1;
2224  pps->num_tile_rows = 1;
2225  pps->uniform_spacing_flag = 1;
2226  pps->disable_dbf = 0;
2227  pps->beta_offset = 0;
2228  pps->tc_offset = 0;
2229  pps->log2_max_transform_skip_block_size = 2;
2230 
2231  // Coded parameters
2232  pps->pps_id = pps_id;
2233  pps->sps_id = get_ue_golomb_long(gb);
2234  if (pps->sps_id >= HEVC_MAX_SPS_COUNT) {
2235  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
2237  goto err;
2238  }
2239  if (!ps->sps_list[pps->sps_id]) {
2240  av_log(avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
2242  goto err;
2243  }
2244  sps = ps->sps_list[pps->sps_id];
2245  vps = ps->vps_list[sps->vps_id];
2246 
2247  pps->sps = av_refstruct_ref_c(sps);
2248 
2249  pps->dependent_slice_segments_enabled_flag = get_bits1(gb);
2250  pps->output_flag_present_flag = get_bits1(gb);
2251  pps->num_extra_slice_header_bits = get_bits(gb, 3);
2252 
2253  pps->sign_data_hiding_flag = get_bits1(gb);
2254 
2255  pps->cabac_init_present_flag = get_bits1(gb);
2256 
2257  pps->num_ref_idx_l0_default_active = get_ue_golomb_31(gb) + 1;
2258  pps->num_ref_idx_l1_default_active = get_ue_golomb_31(gb) + 1;
2259  if (pps->num_ref_idx_l0_default_active >= HEVC_MAX_REFS ||
2260  pps->num_ref_idx_l1_default_active >= HEVC_MAX_REFS) {
2261  av_log(avctx, AV_LOG_ERROR, "Too many default refs in PPS: %d/%d.\n",
2262  pps->num_ref_idx_l0_default_active, pps->num_ref_idx_l1_default_active);
2263  goto err;
2264  }
2265 
2266  pps->pic_init_qp_minus26 = get_se_golomb(gb);
2267 
2268  pps->constrained_intra_pred_flag = get_bits1(gb);
2269  pps->transform_skip_enabled_flag = get_bits1(gb);
2270 
2271  pps->cu_qp_delta_enabled_flag = get_bits1(gb);
2272  pps->diff_cu_qp_delta_depth = 0;
2273  if (pps->cu_qp_delta_enabled_flag)
2274  pps->diff_cu_qp_delta_depth = get_ue_golomb_long(gb);
2275 
2276  if (pps->diff_cu_qp_delta_depth < 0 ||
2277  pps->diff_cu_qp_delta_depth > sps->log2_diff_max_min_coding_block_size) {
2278  av_log(avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
2279  pps->diff_cu_qp_delta_depth);
2281  goto err;
2282  }
2283 
2284  pps->cb_qp_offset = get_se_golomb(gb);
2285  if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
2286  av_log(avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
2287  pps->cb_qp_offset);
2289  goto err;
2290  }
2291  pps->cr_qp_offset = get_se_golomb(gb);
2292  if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
2293  av_log(avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
2294  pps->cr_qp_offset);
2296  goto err;
2297  }
2298  pps->pic_slice_level_chroma_qp_offsets_present_flag = get_bits1(gb);
2299 
2300  pps->weighted_pred_flag = get_bits1(gb);
2301  pps->weighted_bipred_flag = get_bits1(gb);
2302 
2303  pps->transquant_bypass_enable_flag = get_bits1(gb);
2304  pps->tiles_enabled_flag = get_bits1(gb);
2305  pps->entropy_coding_sync_enabled_flag = get_bits1(gb);
2306 
2307  if (pps->tiles_enabled_flag) {
2308  int num_tile_columns_minus1 = get_ue_golomb(gb);
2309  int num_tile_rows_minus1 = get_ue_golomb(gb);
2310 
2311  if (num_tile_columns_minus1 < 0 ||
2312  num_tile_columns_minus1 >= sps->ctb_width) {
2313  av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
2314  num_tile_columns_minus1);
2315  ret = num_tile_columns_minus1 < 0 ? num_tile_columns_minus1 : AVERROR_INVALIDDATA;
2316  goto err;
2317  }
2318  if (num_tile_rows_minus1 < 0 ||
2319  num_tile_rows_minus1 >= sps->ctb_height) {
2320  av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
2321  num_tile_rows_minus1);
2322  ret = num_tile_rows_minus1 < 0 ? num_tile_rows_minus1 : AVERROR_INVALIDDATA;
2323  goto err;
2324  }
2325  pps->num_tile_columns = num_tile_columns_minus1 + 1;
2326  pps->num_tile_rows = num_tile_rows_minus1 + 1;
2327 
2328  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
2329  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
2330  if (!pps->column_width || !pps->row_height) {
2331  ret = AVERROR(ENOMEM);
2332  goto err;
2333  }
2334 
2335  pps->uniform_spacing_flag = get_bits1(gb);
2336  if (!pps->uniform_spacing_flag) {
2337  uint64_t sum = 0;
2338  for (i = 0; i < pps->num_tile_columns - 1; i++) {
2339  pps->column_width[i] = get_ue_golomb_long(gb) + 1;
2340  sum += pps->column_width[i];
2341  }
2342  if (sum >= sps->ctb_width) {
2343  av_log(avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
2345  goto err;
2346  }
2347  pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
2348 
2349  sum = 0;
2350  for (i = 0; i < pps->num_tile_rows - 1; i++) {
2351  pps->row_height[i] = get_ue_golomb_long(gb) + 1;
2352  sum += pps->row_height[i];
2353  }
2354  if (sum >= sps->ctb_height) {
2355  av_log(avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
2357  goto err;
2358  }
2359  pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
2360  }
2361  pps->loop_filter_across_tiles_enabled_flag = get_bits1(gb);
2362  }
2363 
2364  pps->seq_loop_filter_across_slices_enabled_flag = get_bits1(gb);
2365 
2366  pps->deblocking_filter_control_present_flag = get_bits1(gb);
2367  if (pps->deblocking_filter_control_present_flag) {
2368  pps->deblocking_filter_override_enabled_flag = get_bits1(gb);
2369  pps->disable_dbf = get_bits1(gb);
2370  if (!pps->disable_dbf) {
2371  int beta_offset_div2 = get_se_golomb(gb);
2372  int tc_offset_div2 = get_se_golomb(gb) ;
2373  if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2374  av_log(avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
2375  beta_offset_div2);
2377  goto err;
2378  }
2379  if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2380  av_log(avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
2381  tc_offset_div2);
2383  goto err;
2384  }
2385  pps->beta_offset = 2 * beta_offset_div2;
2386  pps->tc_offset = 2 * tc_offset_div2;
2387  }
2388  }
2389 
2390  pps->scaling_list_data_present_flag = get_bits1(gb);
2391  if (pps->scaling_list_data_present_flag) {
2392  set_default_scaling_list_data(&pps->scaling_list);
2393  ret = scaling_list_data(gb, avctx, &pps->scaling_list, sps);
2394  if (ret < 0)
2395  goto err;
2396  }
2397  pps->lists_modification_present_flag = get_bits1(gb);
2398  log2_parallel_merge_level_minus2 = get_ue_golomb_long(gb);
2399  if (log2_parallel_merge_level_minus2 > sps->log2_ctb_size) {
2400  av_log(avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
2401  log2_parallel_merge_level_minus2);
2403  goto err;
2404  }
2405  pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2406 
2407  pps->slice_header_extension_present_flag = get_bits1(gb);
2408 
2409  pps->pps_extension_present_flag = get_bits1(gb);
2410  if (pps->pps_extension_present_flag) {
2411  pps->pps_range_extensions_flag = get_bits1(gb);
2412  pps->pps_multilayer_extension_flag = get_bits1(gb);
2413  pps->pps_3d_extension_flag = get_bits1(gb);
2414  pps->pps_scc_extension_flag = get_bits1(gb);
2415  skip_bits(gb, 4); // pps_extension_4bits
2416 
2417  if (sps->ptl.general_ptl.profile_idc >= AV_PROFILE_HEVC_REXT && pps->pps_range_extensions_flag) {
2418  if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0)
2419  goto err;
2420  }
2421 
2422  if (pps->pps_multilayer_extension_flag) {
2423  if ((ret = pps_multilayer_extension(gb, avctx, pps, sps, vps)) < 0)
2424  goto err;
2425  }
2426 
2427  if (pps->pps_3d_extension_flag) {
2428  if ((ret = pps_3d_extension(gb, avctx, pps, sps)) < 0)
2429  goto err;
2430  }
2431 
2432  if (pps->pps_scc_extension_flag) {
2433  if ((ret = pps_scc_extension(gb, avctx, pps, sps)) < 0)
2434  goto err;
2435  }
2436  }
2437 
2438  ret = setup_pps(avctx, gb, pps, sps);
2439  if (ret < 0)
2440  goto err;
2441 
2442  if (get_bits_left(gb) < 0) {
2443  av_log(avctx, AV_LOG_WARNING,
2444  "Overread PPS by %d bits\n", -get_bits_left(gb));
2445  }
2446 
2448  ps->pps_list[pps_id] = pps;
2449 
2450  return 0;
2451 
2452 err:
2454  return ret;
2455 }
2456 
2458 {
2459  int i;
2460 
2461  for (i = 0; i < FF_ARRAY_ELEMS(ps->vps_list); i++)
2462  av_refstruct_unref(&ps->vps_list[i]);
2463  for (i = 0; i < FF_ARRAY_ELEMS(ps->sps_list); i++)
2464  av_refstruct_unref(&ps->sps_list[i]);
2465  for (i = 0; i < FF_ARRAY_ELEMS(ps->pps_list); i++)
2466  av_refstruct_unref(&ps->pps_list[i]);
2467 }
2468 
2469 int ff_hevc_compute_poc2(unsigned log2_max_poc_lsb, int pocTid0, int poc_lsb, int nal_unit_type)
2470 {
2471  int max_poc_lsb = 1 << log2_max_poc_lsb;
2472  int prev_poc_lsb = pocTid0 % max_poc_lsb;
2473  int prev_poc_msb = pocTid0 - prev_poc_lsb;
2474  int poc_msb;
2475 
2476  if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2477  poc_msb = prev_poc_msb + max_poc_lsb;
2478  else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2479  poc_msb = prev_poc_msb - max_poc_lsb;
2480  else
2481  poc_msb = prev_poc_msb;
2482 
2483  // For BLA picture types, POCmsb is set to 0.
2484  if (nal_unit_type == HEVC_NAL_BLA_W_LP ||
2485  nal_unit_type == HEVC_NAL_BLA_W_RADL ||
2486  nal_unit_type == HEVC_NAL_BLA_N_LP)
2487  poc_msb = 0;
2488 
2489  return poc_msb + poc_lsb;
2490 }
HEVC_DEP_TYPE_BOTH
@ HEVC_DEP_TYPE_BOTH
Definition: ps.c:456
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:280
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
decode_vui
static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
Definition: ps.c:940
HEVCSPS::data_size
int data_size
Definition: ps.h:369
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:506
HEVC_DEP_TYPE_MV
@ HEVC_DEP_TYPE_MV
Definition: ps.c:455
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:688
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
AV_EF_COMPLIANT
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
Definition: defs.h:55
ff_ctz
#define ff_ctz
Definition: intmath.h:105
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:79
HEVCParamSets::pps_list
const HEVCPPS * pps_list[HEVC_MAX_PPS_COUNT]
RefStruct references.
Definition: ps.h:514
ff_hevc_profiles
const AVProfile ff_hevc_profiles[]
Definition: profiles.c:97
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:166
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3456
AVRefStructOpaque
RefStruct is an API for creating reference-counted objects with minimal overhead.
Definition: refstruct.h:58
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1410
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:424
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
u
#define u(width, name, range_min, range_max)
Definition: cbs_apv.c:68
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:539
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:251
VUI::field_seq_flag
int field_seq_flag
Definition: ps.h:103
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:226
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:701
VUI::bitstream_restriction_flag
int bitstream_restriction_flag
Definition: ps.h:116
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:1223
av_popcount
#define av_popcount
Definition: common.h:154
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:518
AV_CODEC_FLAG2_IGNORE_CROP
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
Definition: avcodec.h:355
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
hevc_vps_free
static void hevc_vps_free(AVRefStructOpaque opaque, void *obj)
Definition: ps.c:445
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:383
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:337
av_ceil_log2
#define av_ceil_log2
Definition: common.h:97
AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:558
HEVC_MAX_REFS
@ HEVC_MAX_REFS
Definition: hevc.h:122
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:109
AV_EF_BITSTREAM
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Definition: defs.h:49
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:537
H265RawProfileTierLevel::sub_layer_level_present_flag
uint8_t sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]
Definition: cbs_h265.h:64
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_LONG_TERM_REF_PICS
@ HEVC_MAX_LONG_TERM_REF_PICS
Definition: hevc.h:127
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:1097
HEVCParamSets::sps_list
const HEVCSPS * sps_list[HEVC_MAX_SPS_COUNT]
RefStruct references.
Definition: ps.h:513
default_scaling_list_intra
static const uint8_t default_scaling_list_intra[]
Definition: ps.c:35
HEVC_SCALABILITY_MULTIVIEW
@ HEVC_SCALABILITY_MULTIVIEW
Definition: hevc.h:167
HEVCSPS::data
uint8_t * data
Definition: ps.h:368
refstruct.h
VUI::restricted_ref_pic_lists_flag
int restricted_ref_pic_lists_flag
Definition: ps.h:119
HEVC_AUX_ALPHA
@ HEVC_AUX_ALPHA
Definition: hevc.h:174
HEVCPPS::row_bd
unsigned int * row_bd
RowBd.
Definition: ps.h:495
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:542
hevc_sps_free
static void hevc_sps_free(AVRefStructOpaque opaque, void *obj)
Definition: ps.c:1704
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:494
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
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
HEVC_MAX_LAYERS
@ HEVC_MAX_LAYERS
Definition: hevc.h:103
ptl
const H265RawProfileTierLevel * ptl
Definition: h265_levels.c:170
HEVC_MAX_DPB_SIZE
@ HEVC_MAX_DPB_SIZE
Definition: hevc.h:120
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:1713
av_refstruct_alloc_ext
static void * av_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(AVRefStructOpaque opaque, void *obj))
A wrapper around av_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
Definition: refstruct.h:94
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:536
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
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:1174
HEVCWindow::top_offset
unsigned int top_offset
Definition: ps.h:94
HEVCPPS::data
uint8_t * data
Definition: ps.h:505
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:248
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
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
ff_hevc_decode_nal_vps
int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: ps.c:765
setup_pps
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:2053
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:519
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
GetBitContext::buffer
const uint8_t * buffer
Definition: get_bits.h:110
set_default_scaling_list_data
static void set_default_scaling_list_data(ScalingList *sl)
Definition: ps.c:1067
colour_mapping_table
static int colour_mapping_table(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps)
Definition: ps.c:1828
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:1935
ScalingList::sl_dc
uint8_t sl_dc[2][6]
Definition: ps.h:252
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
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:454
HEVC_MAX_PPS_COUNT
@ HEVC_MAX_PPS_COUNT
Definition: hevc.h:117
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:500
ff_hevc_decode_nal_pps
int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: ps.c:2185
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
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:391
profiles.h
HEVCHdrFlagParams::fixed_pic_rate_general_flag
uint8_t fixed_pic_rate_general_flag
Definition: ps.h:47
DependencyType
DependencyType
Definition: ps.c:453
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:540
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:165
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:1959
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
index
int index
Definition: gxfenc.c:90
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:459
get_bits_bytesize
static int get_bits_bytesize(const GetBitContext *s, int round_up)
Get the size of the GetBitContext's buffer in bytes.
Definition: get_bits.h:268
HEVCPPS::pps_id
unsigned int pps_id
Definition: ps.h:375
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:503
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
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
CHECK_QP_OFFSET
#define CHECK_QP_OFFSET(name)
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:544
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_MAX_SPS_COUNT
@ HEVC_MAX_SPS_COUNT
Definition: hevc.h:115
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:546
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:416
av_zero_extend
#define av_zero_extend
Definition: common.h:151
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:221
av_refstruct_unref
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
ff_hevc_ps_uninit
void ff_hevc_ps_uninit(HEVCParamSets *ps)
Definition: ps.c:2457
get_bits64
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
Definition: get_bits.h:456
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
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:373
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:32
AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:559
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
len
int len
Definition: vorbis_enc_data.h:426
profile
int profile
Definition: mxfenc.c:2297
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:538
ff_hevc_compute_poc2
int ff_hevc_compute_poc2(unsigned log2_max_poc_lsb, int pocTid0, int poc_lsb, int nal_unit_type)
Compute POC of the current frame and return it.
Definition: ps.c:2469
pps_scc_extension
static int pps_scc_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: ps.c:1999
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:244
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:560
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:543
U
#define U(x)
Definition: vpx_arith.h:37
HEVC_MAX_SHORT_TERM_REF_PIC_SETS
@ HEVC_MAX_SHORT_TERM_REF_PIC_SETS
Definition: hevc.h:125
AVCodecContext
main external API structure.
Definition: avcodec.h:439
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:1913
av_refstruct_ref_c
const void * av_refstruct_ref_c(const void *obj)
Analog of av_refstruct_ref(), but for constant objects.
Definition: refstruct.c:149
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:1719
decode_profile_tier_level
static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, PTLCommon *ptl)
Definition: ps.c:238
HEVCPPS::luma_bit_depth_cm_input
uint8_t luma_bit_depth_cm_input
Definition: ps.h:465
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:36
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:1386
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:1791
VUI::min_spatial_segmentation_idc
int min_spatial_segmentation_idc
Definition: ps.h:120
HEVC_SCALABILITY_AUXILIARY
@ HEVC_SCALABILITY_AUXILIARY
Definition: hevc.h:169
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:82
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
HEVC_MAX_PALETTE_PREDICTOR_SIZE
@ HEVC_MAX_PALETTE_PREDICTOR_SIZE
Definition: hevc.h:162
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:37
HEVCSPS
Definition: ps.h:255
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:374
HEVC_MAX_LOG2_CTB_SIZE
@ HEVC_MAX_LOG2_CTB_SIZE
Definition: hevc.h:131
HEVCPPS::sps_id
unsigned int sps_id
seq_parameter_set_id
Definition: ps.h:376
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
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:35
HEVCParamSets::vps_list
const HEVCVPS * vps_list[HEVC_MAX_VPS_COUNT]
RefStruct references.
Definition: ps.h:512
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:245
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:1864
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:520
FF_DEBUG_BITSTREAM
#define FF_DEBUG_BITSTREAM
Definition: avcodec.h:1389
HEVCHdrParams::flags
HEVCHdrFlagParams flags
Definition: ps.h:53
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
HEVC_NAL_BLA_W_RADL
@ HEVC_NAL_BLA_W_RADL
Definition: hevc.h:46
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:3376
HEVC_MAX_SUB_LAYERS
@ HEVC_MAX_SUB_LAYERS
Definition: hevc.h:105
default_scaling_list_inter
static const uint8_t default_scaling_list_inter[]
Definition: ps.c:46
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
hevc_pps_free
static void hevc_pps_free(AVRefStructOpaque unused, void *obj)
Definition: ps.c:1772
HEVCParamSets
Definition: ps.h:511
RepFormat::conf_win_right_offset
uint16_t conf_win_right_offset
Definition: ps.h:166