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