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