FFmpeg
hevc_ps.c
Go to the documentation of this file.
1 /*
2  * HEVC Parameter Set decoding
3  *
4  * Copyright (C) 2012 - 2013 Guillaume Martres
5  * Copyright (C) 2012 - 2013 Mickael Raulet
6  * Copyright (C) 2012 - 2013 Gildas Cocherel
7  * Copyright (C) 2013 Vittorio Giovara
8  *
9  * This file is part of FFmpeg.
10  *
11  * FFmpeg is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * FFmpeg is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with FFmpeg; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24  */
25 
26 #include "libavutil/imgutils.h"
27 #include "libavutil/mem.h"
28 #include "golomb.h"
29 #include "h2645_vui.h"
30 #include "hevc_data.h"
31 #include "hevc_ps.h"
32 #include "refstruct.h"
33 
34 static const uint8_t default_scaling_list_intra[] = {
35  16, 16, 16, 16, 17, 18, 21, 24,
36  16, 16, 16, 16, 17, 19, 22, 25,
37  16, 16, 17, 18, 20, 22, 25, 29,
38  16, 16, 18, 21, 24, 27, 31, 36,
39  17, 17, 20, 24, 30, 35, 41, 47,
40  18, 19, 22, 27, 35, 44, 54, 65,
41  21, 22, 25, 31, 41, 54, 70, 88,
42  24, 25, 29, 36, 47, 65, 88, 115
43 };
44 
45 static const uint8_t default_scaling_list_inter[] = {
46  16, 16, 16, 16, 17, 18, 20, 24,
47  16, 16, 16, 17, 18, 20, 24, 25,
48  16, 16, 17, 18, 20, 24, 25, 28,
49  16, 17, 18, 20, 24, 25, 28, 33,
50  17, 18, 20, 24, 25, 28, 33, 41,
51  18, 20, 24, 25, 28, 33, 41, 54,
52  20, 24, 25, 28, 33, 41, 54, 71,
53  24, 25, 28, 33, 41, 54, 71, 91
54 };
55 
56 static const uint8_t hevc_sub_width_c[] = {
57  1, 2, 2, 1
58 };
59 
60 static const uint8_t hevc_sub_height_c[] = {
61  1, 2, 1, 1
62 };
63 
64 static void remove_pps(HEVCParamSets *s, int id)
65 {
66  if (s->pps == s->pps_list[id])
67  s->pps = NULL;
68  ff_refstruct_unref(&s->pps_list[id]);
69 }
70 
71 static void remove_sps(HEVCParamSets *s, int id)
72 {
73  int i;
74  if (s->sps_list[id]) {
75  if (s->sps == s->sps_list[id])
76  s->sps = NULL;
77 
78  /* drop all PPS that depend on this SPS */
79  for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
80  if (s->pps_list[i] && s->pps_list[i]->sps_id == id)
81  remove_pps(s, i);
82 
83  av_assert0(!(s->sps_list[id] && s->sps == s->sps_list[id]));
84  ff_refstruct_unref(&s->sps_list[id]);
85  }
86 }
87 
88 static void remove_vps(HEVCParamSets *s, int id)
89 {
90  int i;
91  if (s->vps_list[id]) {
92  if (s->vps == s->vps_list[id])
93  s->vps = NULL;
94 
95  for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++)
96  if (s->sps_list[i] && s->sps_list[i]->vps_id == id)
97  remove_sps(s, i);
98  ff_refstruct_unref(&s->vps_list[id]);
99  }
100 }
101 
103  ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
104 {
105  int delta_poc;
106  int k0 = 0;
107  int k = 0;
108  int i;
109 
110  rps->used = 0;
111  rps->rps_predict = 0;
112 
113  if (rps != sps->st_rps && sps->nb_st_rps)
114  rps->rps_predict = get_bits1(gb);
115 
116  if (rps->rps_predict) {
117  const ShortTermRPS *rps_ridx;
118  uint8_t used[32] = { 0 };
119  int delta_rps;
120 
121  if (is_slice_header) {
122  rps->delta_idx = get_ue_golomb_long(gb) + 1;
123  if (rps->delta_idx > sps->nb_st_rps) {
124  av_log(avctx, AV_LOG_ERROR,
125  "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
126  rps->delta_idx, sps->nb_st_rps);
127  return AVERROR_INVALIDDATA;
128  }
129  rps_ridx = &sps->st_rps[sps->nb_st_rps - rps->delta_idx];
130  rps->rps_idx_num_delta_pocs = rps_ridx->num_delta_pocs;
131  } else
132  rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
133 
134  rps->delta_rps_sign = get_bits1(gb);
135  rps->abs_delta_rps = get_ue_golomb_long(gb) + 1;
136  if (rps->abs_delta_rps > 32768) {
137  av_log(avctx, AV_LOG_ERROR,
138  "Invalid value of abs_delta_rps: %d\n",
139  rps->abs_delta_rps);
140  return AVERROR_INVALIDDATA;
141  }
142  delta_rps = (1 - (rps->delta_rps_sign << 1)) * rps->abs_delta_rps;
143  for (i = 0; i <= rps_ridx->num_delta_pocs; i++) {
144  used[k] = get_bits1(gb);
145 
146  rps->use_delta = 0;
147  if (!used[k])
148  rps->use_delta = get_bits1(gb);
149 
150  if (used[k] || rps->use_delta) {
151  if (i < rps_ridx->num_delta_pocs)
152  delta_poc = delta_rps + rps_ridx->delta_poc[i];
153  else
154  delta_poc = delta_rps;
155  rps->delta_poc[k] = delta_poc;
156  if (delta_poc < 0)
157  k0++;
158  k++;
159  }
160  }
161 
162  if (k >= FF_ARRAY_ELEMS(used)) {
163  av_log(avctx, AV_LOG_ERROR,
164  "Invalid num_delta_pocs: %d\n", k);
165  return AVERROR_INVALIDDATA;
166  }
167 
168  rps->num_delta_pocs = k;
169  rps->num_negative_pics = k0;
170  // sort in increasing order (smallest first)
171  if (rps->num_delta_pocs != 0) {
172  int u, tmp;
173  for (i = 1; i < rps->num_delta_pocs; i++) {
174  delta_poc = rps->delta_poc[i];
175  u = used[i];
176  for (k = i - 1; k >= 0; k--) {
177  tmp = rps->delta_poc[k];
178  if (delta_poc < tmp) {
179  rps->delta_poc[k + 1] = tmp;
180  used[k + 1] = used[k];
181  rps->delta_poc[k] = delta_poc;
182  used[k] = u;
183  }
184  }
185  }
186  }
187  if ((rps->num_negative_pics >> 1) != 0) {
188  int u;
189  k = rps->num_negative_pics - 1;
190  // flip the negative values to largest first
191  for (i = 0; i < rps->num_negative_pics >> 1; i++) {
192  delta_poc = rps->delta_poc[i];
193  u = used[i];
194  rps->delta_poc[i] = rps->delta_poc[k];
195  used[i] = used[k];
196  rps->delta_poc[k] = delta_poc;
197  used[k] = u;
198  k--;
199  }
200  }
201 
202  for (unsigned i = 0; i < FF_ARRAY_ELEMS(used); i++)
203  rps->used |= (uint32_t)used[i] << i;
204  } else {
205  unsigned int nb_positive_pics;
206 
208  nb_positive_pics = get_ue_golomb_long(gb);
209 
210  if (rps->num_negative_pics >= HEVC_MAX_REFS ||
211  nb_positive_pics >= HEVC_MAX_REFS) {
212  av_log(avctx, AV_LOG_ERROR, "Too many refs in a short term RPS.\n");
213  return AVERROR_INVALIDDATA;
214  }
215 
216  rps->num_delta_pocs = rps->num_negative_pics + nb_positive_pics;
217  if (rps->num_delta_pocs) {
218  int prev = 0;
219 
220  for (i = 0; i < rps->num_negative_pics; i++) {
221  delta_poc = get_ue_golomb_long(gb) + 1;
222  if (delta_poc < 1 || delta_poc > 32768) {
223  av_log(avctx, AV_LOG_ERROR,
224  "Invalid value of delta_poc: %d\n",
225  delta_poc);
226  return AVERROR_INVALIDDATA;
227  }
228  prev -= delta_poc;
229  rps->delta_poc[i] = prev;
230  rps->used |= get_bits1(gb) * (1 << i);
231  }
232  prev = 0;
233  for (i = 0; i < nb_positive_pics; i++) {
234  delta_poc = get_ue_golomb_long(gb) + 1;
235  if (delta_poc < 1 || delta_poc > 32768) {
236  av_log(avctx, AV_LOG_ERROR,
237  "Invalid value of delta_poc: %d\n",
238  delta_poc);
239  return AVERROR_INVALIDDATA;
240  }
241  prev += delta_poc;
242  rps->delta_poc[rps->num_negative_pics + i] = prev;
243  rps->used |= get_bits1(gb) * (1 << (rps->num_negative_pics + i));
244  }
245  }
246  }
247  return 0;
248 }
249 
250 
252  PTLCommon *ptl)
253 {
254  int i;
255 
256  if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 43 + 1)
257  return -1;
258 
259  ptl->profile_space = get_bits(gb, 2);
260  ptl->tier_flag = get_bits1(gb);
261  ptl->profile_idc = get_bits(gb, 5);
262  if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN)
263  av_log(avctx, AV_LOG_DEBUG, "Main profile bitstream\n");
264  else if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN_10)
265  av_log(avctx, AV_LOG_DEBUG, "Main 10 profile bitstream\n");
266  else if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN_STILL_PICTURE)
267  av_log(avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n");
268  else if (ptl->profile_idc == AV_PROFILE_HEVC_REXT)
269  av_log(avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n");
270  else if (ptl->profile_idc == AV_PROFILE_HEVC_SCC)
271  av_log(avctx, AV_LOG_DEBUG, "Screen Content Coding Extension profile bitstream\n");
272  else
273  av_log(avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc);
274 
275  for (i = 0; i < 32; i++) {
276  ptl->profile_compatibility_flag[i] = get_bits1(gb);
277 
278  if (ptl->profile_idc == 0 && i > 0 && ptl->profile_compatibility_flag[i])
279  ptl->profile_idc = i;
280  }
281  ptl->progressive_source_flag = get_bits1(gb);
282  ptl->interlaced_source_flag = get_bits1(gb);
283  ptl->non_packed_constraint_flag = get_bits1(gb);
284  ptl->frame_only_constraint_flag = get_bits1(gb);
285 
286 #define check_profile_idc(idc) \
287  ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
288 
291  check_profile_idc(10)) {
292 
293  ptl->max_12bit_constraint_flag = get_bits1(gb);
294  ptl->max_10bit_constraint_flag = get_bits1(gb);
295  ptl->max_8bit_constraint_flag = get_bits1(gb);
296  ptl->max_422chroma_constraint_flag = get_bits1(gb);
297  ptl->max_420chroma_constraint_flag = get_bits1(gb);
298  ptl->max_monochrome_constraint_flag = get_bits1(gb);
299  ptl->intra_constraint_flag = get_bits1(gb);
300  ptl->one_picture_only_constraint_flag = get_bits1(gb);
301  ptl->lower_bit_rate_constraint_flag = get_bits1(gb);
302 
304  ptl->max_14bit_constraint_flag = get_bits1(gb);
305  skip_bits_long(gb, 33); // XXX_reserved_zero_33bits[0..32]
306  } else {
307  skip_bits_long(gb, 34); // XXX_reserved_zero_34bits[0..33]
308  }
309  } else if (check_profile_idc(2)) {
310  skip_bits(gb, 7);
311  ptl->one_picture_only_constraint_flag = get_bits1(gb);
312  skip_bits_long(gb, 35); // XXX_reserved_zero_35bits[0..34]
313  } else {
314  skip_bits_long(gb, 43); // XXX_reserved_zero_43bits[0..42]
315  }
316 
319  ptl->inbld_flag = get_bits1(gb);
320  else
321  skip_bits1(gb);
322 #undef check_profile_idc
323 
324  return 0;
325 }
326 
327 static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx,
328  PTL *ptl, int max_num_sub_layers)
329 {
330  int i;
331  if (decode_profile_tier_level(gb, avctx, &ptl->general_ptl) < 0 ||
332  get_bits_left(gb) < 8 + (8*2 * (max_num_sub_layers - 1 > 0))) {
333  av_log(avctx, AV_LOG_ERROR, "PTL information too short\n");
334  return -1;
335  }
336 
337  ptl->general_ptl.level_idc = get_bits(gb, 8);
338 
339  for (i = 0; i < max_num_sub_layers - 1; i++) {
342  }
343 
344  if (max_num_sub_layers - 1> 0)
345  for (i = max_num_sub_layers - 1; i < 8; i++)
346  skip_bits(gb, 2); // reserved_zero_2bits[i]
347  for (i = 0; i < max_num_sub_layers - 1; i++) {
349  decode_profile_tier_level(gb, avctx, &ptl->sub_layer_ptl[i]) < 0) {
350  av_log(avctx, AV_LOG_ERROR,
351  "PTL information for sublayer %i too short\n", i);
352  return -1;
353  }
355  if (get_bits_left(gb) < 8) {
356  av_log(avctx, AV_LOG_ERROR,
357  "Not enough data for sublayer %i level_idc\n", i);
358  return -1;
359  } else
360  ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
361  }
362  }
363 
364  return 0;
365 }
366 
367 static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
368  HEVCSublayerHdrParams *par, int subpic_params_present)
369 {
370  int i;
371 
372  for (i = 0; i < nb_cpb; i++) {
375 
376  if (subpic_params_present) {
379  }
380 
381  par->cbr_flag |= get_bits1(gb) << i;
382  }
383 }
384 
385 static int decode_hrd(GetBitContext *gb, int common_inf_present,
386  HEVCHdrParams *hdr, int max_sublayers)
387 {
388  if (common_inf_present) {
391 
395 
397  hdr->tick_divisor_minus2 = get_bits(gb, 8);
401  }
402 
403  hdr->bit_rate_scale = get_bits(gb, 4);
404  hdr->cpb_size_scale = get_bits(gb, 4);
405 
407  hdr->cpb_size_du_scale = get_bits(gb, 4);
408 
412  }
413  }
414 
415  for (int i = 0; i < max_sublayers; i++) {
416  unsigned fixed_pic_rate_general_flag = get_bits1(gb);
417  unsigned fixed_pic_rate_within_cvs_flag = 0;
418  unsigned low_delay_hrd_flag = 0;
419  hdr->flags.fixed_pic_rate_general_flag |= fixed_pic_rate_general_flag << i;
420 
421  if (!fixed_pic_rate_general_flag)
422  fixed_pic_rate_within_cvs_flag = get_bits1(gb);
423  hdr->flags.fixed_pic_rate_within_cvs_flag |= fixed_pic_rate_within_cvs_flag << i;
424 
425  if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
427  else
428  low_delay_hrd_flag = get_bits1(gb);
429  hdr->flags.low_delay_hrd_flag |= low_delay_hrd_flag << i;
430 
431  if (!low_delay_hrd_flag) {
432  unsigned cpb_cnt_minus1 = get_ue_golomb_long(gb);
433  if (cpb_cnt_minus1 > 31) {
434  av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n",
435  cpb_cnt_minus1);
436  return AVERROR_INVALIDDATA;
437  }
438  hdr->cpb_cnt_minus1[i] = cpb_cnt_minus1;
439  }
440 
442  decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->nal_params[i],
444 
446  decode_sublayer_hrd(gb, hdr->cpb_cnt_minus1[i]+1, &hdr->vcl_params[i],
448  }
449 
450  return 0;
451 }
452 
453 static void hevc_vps_free(FFRefStructOpaque opaque, void *obj)
454 {
455  HEVCVPS *vps = obj;
456 
457  av_freep(&vps->hdr);
458  av_freep(&vps->data);
459 }
460 
462  HEVCParamSets *ps)
463 {
464  int i,j;
465  int vps_id = get_bits(gb, 4);
466  ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
467  int ret = AVERROR_INVALIDDATA;
468  HEVCVPS *vps;
469 
470  if (ps->vps_list[vps_id]) {
471  const HEVCVPS *vps1 = ps->vps_list[vps_id];
472  if (vps1->data_size == nal_size &&
473  !memcmp(vps1->data, gb->buffer, vps1->data_size))
474  return 0;
475  }
476 
478  if (!vps)
479  return AVERROR(ENOMEM);
480 
481  av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n");
482 
483  vps->data_size = nal_size;
484  vps->data = av_memdup(gb->buffer, nal_size);
485  if (!vps->data) {
486  ret = AVERROR(ENOMEM);
487  goto err;
488  }
489  vps->vps_id = vps_id;
490 
491  if (get_bits(gb, 2) != 3) { // vps_reserved_three_2bits
492  av_log(avctx, AV_LOG_ERROR, "vps_reserved_three_2bits is not three\n");
493  goto err;
494  }
495 
496  vps->vps_max_layers = get_bits(gb, 6) + 1;
497  vps->vps_max_sub_layers = get_bits(gb, 3) + 1;
498  vps->vps_temporal_id_nesting_flag = get_bits1(gb);
499 
500  if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
501  av_log(avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
502  goto err;
503  }
504 
505  if (vps->vps_max_sub_layers > HEVC_MAX_SUB_LAYERS) {
506  av_log(avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
507  vps->vps_max_sub_layers);
508  goto err;
509  }
510 
511  if (parse_ptl(gb, avctx, &vps->ptl, vps->vps_max_sub_layers) < 0)
512  goto err;
513 
514  vps->vps_sub_layer_ordering_info_present_flag = get_bits1(gb);
515 
516  i = vps->vps_sub_layer_ordering_info_present_flag ? 0 : vps->vps_max_sub_layers - 1;
517  for (; i < vps->vps_max_sub_layers; i++) {
518  vps->vps_max_dec_pic_buffering[i] = get_ue_golomb_long(gb) + 1;
519  vps->vps_num_reorder_pics[i] = get_ue_golomb_long(gb);
520  vps->vps_max_latency_increase[i] = get_ue_golomb_long(gb) - 1;
521 
522  if (vps->vps_max_dec_pic_buffering[i] > HEVC_MAX_DPB_SIZE || !vps->vps_max_dec_pic_buffering[i]) {
523  av_log(avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
524  vps->vps_max_dec_pic_buffering[i] - 1);
525  goto err;
526  }
527  if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
528  av_log(avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
529  vps->vps_num_reorder_pics[i]);
530  if (avctx->err_recognition & AV_EF_EXPLODE)
531  goto err;
532  }
533  }
534 
535  vps->vps_max_layer_id = get_bits(gb, 6);
536  vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
537  if (vps->vps_num_layer_sets < 1 || vps->vps_num_layer_sets > 1024 ||
538  (vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
539  av_log(avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
540  goto err;
541  }
542 
543  for (i = 1; i < vps->vps_num_layer_sets; i++)
544  for (j = 0; j <= vps->vps_max_layer_id; j++)
545  skip_bits(gb, 1); // layer_id_included_flag[i][j]
546 
547  vps->vps_timing_info_present_flag = get_bits1(gb);
548  if (vps->vps_timing_info_present_flag) {
549  vps->vps_num_units_in_tick = get_bits_long(gb, 32);
550  vps->vps_time_scale = get_bits_long(gb, 32);
551  vps->vps_poc_proportional_to_timing_flag = get_bits1(gb);
552  if (vps->vps_poc_proportional_to_timing_flag)
553  vps->vps_num_ticks_poc_diff_one = get_ue_golomb_long(gb) + 1;
554  vps->vps_num_hrd_parameters = get_ue_golomb_long(gb);
555  if (vps->vps_num_hrd_parameters > (unsigned)vps->vps_num_layer_sets) {
556  av_log(avctx, AV_LOG_ERROR,
557  "vps_num_hrd_parameters %d is invalid\n", vps->vps_num_hrd_parameters);
558  goto err;
559  }
560 
561  if (vps->vps_num_hrd_parameters) {
562  vps->hdr = av_calloc(vps->vps_num_hrd_parameters, sizeof(*vps->hdr));
563  if (!vps->hdr)
564  goto err;
565  }
566 
567  for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
568  int common_inf_present = 1;
569 
570  get_ue_golomb_long(gb); // hrd_layer_set_idx
571  if (i)
572  common_inf_present = get_bits1(gb);
573  decode_hrd(gb, common_inf_present, &vps->hdr[i],
574  vps->vps_max_sub_layers);
575  }
576  }
577  get_bits1(gb); /* vps_extension_flag */
578 
579  if (get_bits_left(gb) < 0) {
580  av_log(avctx, AV_LOG_ERROR,
581  "Overread VPS by %d bits\n", -get_bits_left(gb));
582  if (ps->vps_list[vps_id])
583  goto err;
584  }
585 
586  remove_vps(ps, vps_id);
587  ps->vps_list[vps_id] = vps;
588 
589  return 0;
590 
591 err:
593  return ret;
594 }
595 
596 static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
597  int apply_defdispwin, HEVCSPS *sps)
598 {
599  VUI backup_vui, *vui = &sps->vui;
600  GetBitContext backup;
601  int alt = 0;
602 
603  ff_h2645_decode_common_vui_params(gb, &sps->vui.common, avctx);
604 
606  if (vui->common.video_full_range_flag && sps->pix_fmt == AV_PIX_FMT_YUV420P)
607  sps->pix_fmt = AV_PIX_FMT_YUVJ420P;
609  if (vui->common.matrix_coeffs == AVCOL_SPC_RGB) {
610  switch (sps->pix_fmt) {
611  case AV_PIX_FMT_YUV444P:
612  sps->pix_fmt = AV_PIX_FMT_GBRP;
613  break;
615  sps->pix_fmt = AV_PIX_FMT_GBRP10;
616  break;
618  sps->pix_fmt = AV_PIX_FMT_GBRP12;
619  break;
620  }
621  }
622  }
623  }
624 
626  vui->field_seq_flag = get_bits1(gb);
628 
629  // Backup context in case an alternate header is detected
630  memcpy(&backup, gb, sizeof(backup));
631  memcpy(&backup_vui, vui, sizeof(backup_vui));
632  if (get_bits_left(gb) >= 68 && show_bits(gb, 21) == 0x100000) {
634  av_log(avctx, AV_LOG_WARNING, "Invalid default display window\n");
635  } else
637 
638  if (vui->default_display_window_flag) {
639  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
640  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
641  vui->def_disp_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
642  vui->def_disp_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
643  vui->def_disp_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
644  vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
645 
646  if (apply_defdispwin &&
648  av_log(avctx, AV_LOG_DEBUG,
649  "discarding vui default display window, "
650  "original values are l:%u r:%u t:%u b:%u\n",
655 
658  vui->def_disp_win.top_offset =
659  vui->def_disp_win.bottom_offset = 0;
660  }
661  }
662 
665 
666  if (vui->vui_timing_info_present_flag) {
667  if( get_bits_left(gb) < 66 && !alt) {
668  // The alternate syntax seem to have timing info located
669  // at where def_disp_win is normally located
670  av_log(avctx, AV_LOG_WARNING,
671  "Strange VUI timing information, retrying...\n");
672  memcpy(vui, &backup_vui, sizeof(backup_vui));
673  memcpy(gb, &backup, sizeof(backup));
674  alt = 1;
675  goto timing_info;
676  }
677  vui->vui_num_units_in_tick = get_bits_long(gb, 32);
678  vui->vui_time_scale = get_bits_long(gb, 32);
679  if (alt) {
680  av_log(avctx, AV_LOG_INFO, "Retry got %"PRIu32"/%"PRIu32" fps\n",
682  }
688  decode_hrd(gb, 1, &sps->hdr, sps->max_sub_layers);
689  }
690 
692  if (vui->bitstream_restriction_flag) {
693  if (get_bits_left(gb) < 8 && !alt) {
694  av_log(avctx, AV_LOG_WARNING,
695  "Strange VUI bitstream restriction information, retrying"
696  " from timing information...\n");
697  memcpy(vui, &backup_vui, sizeof(backup_vui));
698  memcpy(gb, &backup, sizeof(backup));
699  alt = 1;
700  goto timing_info;
701  }
710  }
711 
712  if (get_bits_left(gb) < 1 && !alt) {
713  // XXX: Alternate syntax when sps_range_extension_flag != 0?
714  av_log(avctx, AV_LOG_WARNING,
715  "Overread in VUI, retrying from timing information...\n");
716  memcpy(vui, &backup_vui, sizeof(backup_vui));
717  memcpy(gb, &backup, sizeof(backup));
718  alt = 1;
719  goto timing_info;
720  }
721 }
722 
724 {
725  int matrixId;
726 
727  for (matrixId = 0; matrixId < 6; matrixId++) {
728  // 4x4 default is 16
729  memset(sl->sl[0][matrixId], 16, 16);
730  sl->sl_dc[0][matrixId] = 16; // default for 16x16
731  sl->sl_dc[1][matrixId] = 16; // default for 32x32
732  }
733  memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
734  memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
735  memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
736  memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
737  memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
738  memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
739  memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
740  memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
741  memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
742  memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
743  memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
744  memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
745  memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
746  memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
747  memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
748  memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
749  memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
750  memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
751 }
752 
754  ScalingList *sl, const HEVCSPS *sps)
755 {
756  uint8_t scaling_list_pred_mode_flag;
757  uint8_t scaling_list_dc_coef[2][6];
758  int size_id, matrix_id, pos;
759  int i;
760 
761  for (size_id = 0; size_id < 4; size_id++)
762  for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
763  scaling_list_pred_mode_flag = get_bits1(gb);
764  if (!scaling_list_pred_mode_flag) {
765  unsigned int delta = get_ue_golomb_long(gb);
766  /* Only need to handle non-zero delta. Zero means default,
767  * which should already be in the arrays. */
768  if (delta) {
769  // Copy from previous array.
770  delta *= (size_id == 3) ? 3 : 1;
771  if (matrix_id < delta) {
772  av_log(avctx, AV_LOG_ERROR,
773  "Invalid delta in scaling list data: %d.\n", delta);
774  return AVERROR_INVALIDDATA;
775  }
776 
777  memcpy(sl->sl[size_id][matrix_id],
778  sl->sl[size_id][matrix_id - delta],
779  size_id > 0 ? 64 : 16);
780  if (size_id > 1)
781  sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
782  }
783  } else {
784  int next_coef, coef_num;
785  int32_t scaling_list_delta_coef;
786 
787  next_coef = 8;
788  coef_num = FFMIN(64, 1 << (4 + (size_id << 1)));
789  if (size_id > 1) {
790  int scaling_list_coeff_minus8 = get_se_golomb(gb);
791  if (scaling_list_coeff_minus8 < -7 ||
792  scaling_list_coeff_minus8 > 247)
793  return AVERROR_INVALIDDATA;
794  scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
795  next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
796  sl->sl_dc[size_id - 2][matrix_id] = next_coef;
797  }
798  for (i = 0; i < coef_num; i++) {
799  if (size_id == 0)
800  pos = 4 * ff_hevc_diag_scan4x4_y[i] +
802  else
803  pos = 8 * ff_hevc_diag_scan8x8_y[i] +
805 
806  scaling_list_delta_coef = get_se_golomb(gb);
807  next_coef = (next_coef + 256U + scaling_list_delta_coef) % 256;
808  sl->sl[size_id][matrix_id][pos] = next_coef;
809  }
810  }
811  }
812 
813  if (sps->chroma_format_idc == 3) {
814  for (i = 0; i < 64; i++) {
815  sl->sl[3][1][i] = sl->sl[2][1][i];
816  sl->sl[3][2][i] = sl->sl[2][2][i];
817  sl->sl[3][4][i] = sl->sl[2][4][i];
818  sl->sl[3][5][i] = sl->sl[2][5][i];
819  }
820  sl->sl_dc[1][1] = sl->sl_dc[0][1];
821  sl->sl_dc[1][2] = sl->sl_dc[0][2];
822  sl->sl_dc[1][4] = sl->sl_dc[0][4];
823  sl->sl_dc[1][5] = sl->sl_dc[0][5];
824  }
825 
826 
827  return 0;
828 }
829 
831 {
832  const AVPixFmtDescriptor *desc;
833  switch (sps->bit_depth) {
834  case 8:
835  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
836  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
837  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
838  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
839  break;
840  case 9:
841  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY9;
842  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
843  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
844  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
845  break;
846  case 10:
847  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY10;
848  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
849  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
850  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
851  break;
852  case 12:
853  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY12;
854  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
855  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
856  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
857  break;
858  default:
859  av_log(avctx, AV_LOG_ERROR,
860  "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
861  "chroma_format_idc is %d, depth is %d\n",
862  sps->chroma_format_idc, sps->bit_depth);
863  return AVERROR_INVALIDDATA;
864  }
865 
866  desc = av_pix_fmt_desc_get(sps->pix_fmt);
867  if (!desc)
868  return AVERROR(EINVAL);
869 
870  sps->hshift[0] = sps->vshift[0] = 0;
871  sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
872  sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
873 
874  sps->pixel_shift = sps->bit_depth > 8;
875 
876  return 0;
877 }
878 
879 int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id,
880  int apply_defdispwin, const HEVCVPS * const *vps_list,
881  AVCodecContext *avctx)
882 {
883  HEVCWindow *ow;
884  int ret = 0;
885  int bit_depth_chroma, start, num_comps;
886  int i;
887 
888  // Coded parameters
889 
890  sps->vps_id = get_bits(gb, 4);
891 
892  if (vps_list && !vps_list[sps->vps_id]) {
893  av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
894  sps->vps_id);
895  return AVERROR_INVALIDDATA;
896  }
897 
898  sps->max_sub_layers = get_bits(gb, 3) + 1;
899  if (sps->max_sub_layers > HEVC_MAX_SUB_LAYERS) {
900  av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
901  sps->max_sub_layers);
902  return AVERROR_INVALIDDATA;
903  }
904 
905  sps->temporal_id_nesting = get_bits(gb, 1);
906 
907  if ((ret = parse_ptl(gb, avctx, &sps->ptl, sps->max_sub_layers)) < 0)
908  return ret;
909 
910  *sps_id = get_ue_golomb_long(gb);
911  if (*sps_id >= HEVC_MAX_SPS_COUNT) {
912  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", *sps_id);
913  return AVERROR_INVALIDDATA;
914  }
915 
916  sps->chroma_format_idc = get_ue_golomb_long(gb);
917  if (sps->chroma_format_idc > 3U) {
918  av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
919  return AVERROR_INVALIDDATA;
920  }
921 
922  if (sps->chroma_format_idc == 3)
923  sps->separate_colour_plane = get_bits1(gb);
924 
925  if (sps->separate_colour_plane)
926  sps->chroma_format_idc = 0;
927 
928  sps->width = get_ue_golomb_long(gb);
929  sps->height = get_ue_golomb_long(gb);
930  if ((ret = av_image_check_size(sps->width,
931  sps->height, 0, avctx)) < 0)
932  return ret;
933 
934  sps->conformance_window = get_bits1(gb);
935  if (sps->conformance_window) {
936  int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
937  int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
938  sps->pic_conf_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
939  sps->pic_conf_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
940  sps->pic_conf_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
941  sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult;
942 
943  if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
944  av_log(avctx, AV_LOG_DEBUG,
945  "discarding sps conformance window, "
946  "original values are l:%u r:%u t:%u b:%u\n",
947  sps->pic_conf_win.left_offset,
948  sps->pic_conf_win.right_offset,
949  sps->pic_conf_win.top_offset,
950  sps->pic_conf_win.bottom_offset);
951 
952  sps->pic_conf_win.left_offset =
953  sps->pic_conf_win.right_offset =
954  sps->pic_conf_win.top_offset =
955  sps->pic_conf_win.bottom_offset = 0;
956  }
957  sps->output_window = sps->pic_conf_win;
958  }
959 
960  sps->bit_depth = get_ue_golomb_31(gb) + 8;
961  if (sps->bit_depth > 16) {
962  av_log(avctx, AV_LOG_ERROR, "Luma bit depth (%d) is out of range\n",
963  sps->bit_depth);
964  return AVERROR_INVALIDDATA;
965  }
966  bit_depth_chroma = get_ue_golomb_31(gb) + 8;
967  if (bit_depth_chroma > 16) {
968  av_log(avctx, AV_LOG_ERROR, "Chroma bit depth (%d) is out of range\n",
969  bit_depth_chroma);
970  return AVERROR_INVALIDDATA;
971  }
972  if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
973  av_log(avctx, AV_LOG_ERROR,
974  "Luma bit depth (%d) is different from chroma bit depth (%d), "
975  "this is unsupported.\n",
976  sps->bit_depth, bit_depth_chroma);
977  return AVERROR_INVALIDDATA;
978  }
979  sps->bit_depth_chroma = bit_depth_chroma;
980 
981  ret = map_pixel_format(avctx, sps);
982  if (ret < 0)
983  return ret;
984 
985  sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
986  if (sps->log2_max_poc_lsb > 16) {
987  av_log(avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
988  sps->log2_max_poc_lsb - 4);
989  return AVERROR_INVALIDDATA;
990  }
991 
992  sps->sublayer_ordering_info = get_bits1(gb);
993  start = sps->sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
994  for (i = start; i < sps->max_sub_layers; i++) {
995  sps->temporal_layer[i].max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
996  sps->temporal_layer[i].num_reorder_pics = get_ue_golomb_long(gb);
997  sps->temporal_layer[i].max_latency_increase = get_ue_golomb_long(gb) - 1;
998  if (sps->temporal_layer[i].max_dec_pic_buffering > (unsigned)HEVC_MAX_DPB_SIZE) {
999  av_log(avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
1000  sps->temporal_layer[i].max_dec_pic_buffering - 1U);
1001  return AVERROR_INVALIDDATA;
1002  }
1003  if (sps->temporal_layer[i].num_reorder_pics > sps->temporal_layer[i].max_dec_pic_buffering - 1) {
1004  av_log(avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
1005  sps->temporal_layer[i].num_reorder_pics);
1006  if (avctx->err_recognition & AV_EF_EXPLODE ||
1007  sps->temporal_layer[i].num_reorder_pics > HEVC_MAX_DPB_SIZE - 1) {
1008  return AVERROR_INVALIDDATA;
1009  }
1010  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[i].num_reorder_pics + 1;
1011  }
1012  }
1013 
1014  if (!sps->sublayer_ordering_info) {
1015  for (i = 0; i < start; i++) {
1016  sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[start].max_dec_pic_buffering;
1017  sps->temporal_layer[i].num_reorder_pics = sps->temporal_layer[start].num_reorder_pics;
1018  sps->temporal_layer[i].max_latency_increase = sps->temporal_layer[start].max_latency_increase;
1019  }
1020  }
1021 
1022  sps->log2_min_cb_size = get_ue_golomb_long(gb) + 3;
1023  sps->log2_diff_max_min_coding_block_size = get_ue_golomb_long(gb);
1024  sps->log2_min_tb_size = get_ue_golomb_long(gb) + 2;
1025  sps->log2_diff_max_min_transform_block_size = get_ue_golomb_long(gb);
1026  sps->log2_max_trafo_size = sps->log2_diff_max_min_transform_block_size +
1027  sps->log2_min_tb_size;
1028 
1029  if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
1030  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
1031  return AVERROR_INVALIDDATA;
1032  }
1033 
1034  if (sps->log2_diff_max_min_coding_block_size > 30) {
1035  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);
1036  return AVERROR_INVALIDDATA;
1037  }
1038 
1039  if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
1040  av_log(avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
1041  return AVERROR_INVALIDDATA;
1042  }
1043 
1044  if (sps->log2_diff_max_min_transform_block_size > 30) {
1045  av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size",
1046  sps->log2_diff_max_min_transform_block_size);
1047  return AVERROR_INVALIDDATA;
1048  }
1049 
1050  sps->max_transform_hierarchy_depth_inter = get_ue_golomb_long(gb);
1051  sps->max_transform_hierarchy_depth_intra = get_ue_golomb_long(gb);
1052 
1053  sps->scaling_list_enabled = get_bits1(gb);
1054  if (sps->scaling_list_enabled) {
1055  set_default_scaling_list_data(&sps->scaling_list);
1056 
1057  if (get_bits1(gb)) {
1058  ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps);
1059  if (ret < 0)
1060  return ret;
1061  }
1062  }
1063 
1064  sps->amp_enabled = get_bits1(gb);
1065  sps->sao_enabled = get_bits1(gb);
1066 
1067  sps->pcm_enabled = get_bits1(gb);
1068  if (sps->pcm_enabled) {
1069  sps->pcm.bit_depth = get_bits(gb, 4) + 1;
1070  sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
1071  sps->pcm.log2_min_pcm_cb_size = get_ue_golomb_long(gb) + 3;
1072  sps->pcm.log2_max_pcm_cb_size = sps->pcm.log2_min_pcm_cb_size +
1073  get_ue_golomb_long(gb);
1074  if (FFMAX(sps->pcm.bit_depth, sps->pcm.bit_depth_chroma) > sps->bit_depth) {
1075  av_log(avctx, AV_LOG_ERROR,
1076  "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1077  sps->pcm.bit_depth, sps->pcm.bit_depth_chroma, sps->bit_depth);
1078  return AVERROR_INVALIDDATA;
1079  }
1080 
1081  sps->pcm_loop_filter_disabled = get_bits1(gb);
1082  }
1083 
1084  sps->nb_st_rps = get_ue_golomb_long(gb);
1085  if (sps->nb_st_rps > HEVC_MAX_SHORT_TERM_REF_PIC_SETS) {
1086  av_log(avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
1087  sps->nb_st_rps);
1088  return AVERROR_INVALIDDATA;
1089  }
1090  for (i = 0; i < sps->nb_st_rps; i++) {
1091  if ((ret = ff_hevc_decode_short_term_rps(gb, avctx, &sps->st_rps[i],
1092  sps, 0)) < 0)
1093  return ret;
1094  }
1095 
1096  sps->long_term_ref_pics_present = get_bits1(gb);
1097  if (sps->long_term_ref_pics_present) {
1098  sps->num_long_term_ref_pics_sps = get_ue_golomb_long(gb);
1099  if (sps->num_long_term_ref_pics_sps > HEVC_MAX_LONG_TERM_REF_PICS) {
1100  av_log(avctx, AV_LOG_ERROR, "Too many long term ref pics: %d.\n",
1101  sps->num_long_term_ref_pics_sps);
1102  return AVERROR_INVALIDDATA;
1103  }
1104 
1105  sps->used_by_curr_pic_lt = 0;
1106  for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
1107  sps->lt_ref_pic_poc_lsb_sps[i] = get_bits(gb, sps->log2_max_poc_lsb);
1108  sps->used_by_curr_pic_lt |= get_bits1(gb) * (1 << i);
1109  }
1110  }
1111 
1112  sps->temporal_mvp_enabled = get_bits1(gb);
1113  sps->strong_intra_smoothing_enabled = get_bits1(gb);
1114  sps->vui.common.sar = (AVRational){0, 1};
1115  sps->vui_present = get_bits1(gb);
1116  if (sps->vui_present)
1117  decode_vui(gb, avctx, apply_defdispwin, sps);
1118 
1119  sps->extension_present = get_bits1(gb);
1120  if (sps->extension_present) {
1121  sps->range_extension = get_bits1(gb);
1122  sps->multilayer_extension = get_bits1(gb);
1123  sps->sps_3d_extension = get_bits1(gb);
1124  sps->scc_extension = get_bits1(gb);
1125  skip_bits(gb, 4); // sps_extension_4bits
1126 
1127  if (sps->range_extension) {
1128  sps->transform_skip_rotation_enabled = get_bits1(gb);
1129  sps->transform_skip_context_enabled = get_bits1(gb);
1130  sps->implicit_rdpcm_enabled = get_bits1(gb);
1131  sps->explicit_rdpcm_enabled = get_bits1(gb);
1132 
1133  sps->extended_precision_processing = get_bits1(gb);
1134  if (sps->extended_precision_processing)
1135  av_log(avctx, AV_LOG_WARNING,
1136  "extended_precision_processing_flag not yet implemented\n");
1137 
1138  sps->intra_smoothing_disabled = get_bits1(gb);
1139  sps->high_precision_offsets_enabled = get_bits1(gb);
1140  if (sps->high_precision_offsets_enabled)
1141  av_log(avctx, AV_LOG_WARNING,
1142  "high_precision_offsets_enabled_flag not yet implemented\n");
1143 
1144  sps->persistent_rice_adaptation_enabled = get_bits1(gb);
1145 
1146  sps->cabac_bypass_alignment_enabled = get_bits1(gb);
1147  if (sps->cabac_bypass_alignment_enabled)
1148  av_log(avctx, AV_LOG_WARNING,
1149  "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1150  }
1151 
1152  if (sps->multilayer_extension) {
1153  skip_bits1(gb); // inter_view_mv_vert_constraint_flag
1154  av_log(avctx, AV_LOG_WARNING,
1155  "sps_multilayer_extension_flag not yet implemented\n");
1156  }
1157 
1158  if (sps->sps_3d_extension) {
1159  for (i = 0; i <= 1; i++) {
1160  skip_bits1(gb); // iv_di_mc_enabled_flag
1161  skip_bits1(gb); // iv_mv_scal_enabled_flag
1162  if (i == 0) {
1163  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1164  skip_bits1(gb); // iv_res_pred_enabled_flag
1165  skip_bits1(gb); // depth_ref_enabled_flag
1166  skip_bits1(gb); // vsp_mc_enabled_flag
1167  skip_bits1(gb); // dbbp_enabled_flag
1168  } else {
1169  skip_bits1(gb); // tex_mc_enabled_flag
1170  get_ue_golomb_long(gb); // log2_ivmc_sub_pb_size_minus3
1171  skip_bits1(gb); // intra_contour_enabled_flag
1172  skip_bits1(gb); // intra_dc_only_wedge_enabled_flag
1173  skip_bits1(gb); // cqt_cu_part_pred_enabled_flag
1174  skip_bits1(gb); // inter_dc_only_enabled_flag
1175  skip_bits1(gb); // skip_intra_enabled_flag
1176  }
1177  }
1178  av_log(avctx, AV_LOG_WARNING,
1179  "sps_3d_extension_flag not yet implemented\n");
1180  }
1181 
1182  if (sps->scc_extension) {
1183  sps->curr_pic_ref_enabled = get_bits1(gb);
1184  sps->palette_mode_enabled = get_bits1(gb);
1185  if (sps->palette_mode_enabled) {
1186  sps->palette_max_size = get_ue_golomb(gb);
1187  sps->delta_palette_max_predictor_size = get_ue_golomb(gb);
1188  sps->palette_predictor_initializers_present = get_bits1(gb);
1189 
1190  if (sps->palette_predictor_initializers_present) {
1191  sps->sps_num_palette_predictor_initializers = get_ue_golomb(gb) + 1;
1192  if (sps->sps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
1193  av_log(avctx, AV_LOG_ERROR,
1194  "sps_num_palette_predictor_initializers out of range: %u\n",
1195  sps->sps_num_palette_predictor_initializers);
1196  return AVERROR_INVALIDDATA;
1197  }
1198  num_comps = !sps->chroma_format_idc ? 1 : 3;
1199  for (int comp = 0; comp < num_comps; comp++) {
1200  int bit_depth = !comp ? sps->bit_depth : sps->bit_depth_chroma;
1201  for (i = 0; i < sps->sps_num_palette_predictor_initializers; i++)
1202  sps->sps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
1203  }
1204  }
1205  }
1206  sps->motion_vector_resolution_control_idc = get_bits(gb, 2);
1207  sps->intra_boundary_filtering_disabled = get_bits1(gb);
1208  }
1209  }
1210  if (apply_defdispwin) {
1211  sps->output_window.left_offset += sps->vui.def_disp_win.left_offset;
1212  sps->output_window.right_offset += sps->vui.def_disp_win.right_offset;
1213  sps->output_window.top_offset += sps->vui.def_disp_win.top_offset;
1214  sps->output_window.bottom_offset += sps->vui.def_disp_win.bottom_offset;
1215  }
1216 
1217  ow = &sps->output_window;
1218  if (ow->left_offset >= INT_MAX - ow->right_offset ||
1219  ow->top_offset >= INT_MAX - ow->bottom_offset ||
1220  ow->left_offset + ow->right_offset >= sps->width ||
1221  ow->top_offset + ow->bottom_offset >= sps->height) {
1222  av_log(avctx, AV_LOG_WARNING, "Invalid cropping offsets: %u/%u/%u/%u\n",
1223  ow->left_offset, ow->right_offset, ow->top_offset, ow->bottom_offset);
1224  if (avctx->err_recognition & AV_EF_EXPLODE) {
1225  return AVERROR_INVALIDDATA;
1226  }
1227  av_log(avctx, AV_LOG_WARNING,
1228  "Displaying the whole video surface.\n");
1229  memset(ow, 0, sizeof(*ow));
1230  memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
1231  }
1232 
1233  // Inferred parameters
1234  sps->log2_ctb_size = sps->log2_min_cb_size +
1235  sps->log2_diff_max_min_coding_block_size;
1236  sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
1237 
1238  if (sps->log2_ctb_size > HEVC_MAX_LOG2_CTB_SIZE) {
1239  av_log(avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
1240  return AVERROR_INVALIDDATA;
1241  }
1242  if (sps->log2_ctb_size < 4) {
1243  av_log(avctx,
1244  AV_LOG_ERROR,
1245  "log2_ctb_size %d differs from the bounds of any known profile\n",
1246  sps->log2_ctb_size);
1247  avpriv_request_sample(avctx, "log2_ctb_size %d", sps->log2_ctb_size);
1248  return AVERROR_INVALIDDATA;
1249  }
1250 
1251  sps->ctb_width = (sps->width + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1252  sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1253  sps->ctb_size = sps->ctb_width * sps->ctb_height;
1254 
1255  sps->min_cb_width = sps->width >> sps->log2_min_cb_size;
1256  sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
1257  sps->min_tb_width = sps->width >> sps->log2_min_tb_size;
1258  sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
1259  sps->min_pu_width = sps->width >> sps->log2_min_pu_size;
1260  sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
1261  sps->tb_mask = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
1262 
1263  sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
1264 
1265  if (av_mod_uintp2(sps->width, sps->log2_min_cb_size) ||
1266  av_mod_uintp2(sps->height, sps->log2_min_cb_size)) {
1267  av_log(avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
1268  return AVERROR_INVALIDDATA;
1269  }
1270 
1271  if (sps->max_transform_hierarchy_depth_inter > sps->log2_ctb_size - sps->log2_min_tb_size) {
1272  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
1273  sps->max_transform_hierarchy_depth_inter);
1274  return AVERROR_INVALIDDATA;
1275  }
1276  if (sps->max_transform_hierarchy_depth_intra > sps->log2_ctb_size - sps->log2_min_tb_size) {
1277  av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
1278  sps->max_transform_hierarchy_depth_intra);
1279  return AVERROR_INVALIDDATA;
1280  }
1281  if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
1282  av_log(avctx, AV_LOG_ERROR,
1283  "max transform block size out of range: %d\n",
1284  sps->log2_max_trafo_size);
1285  return AVERROR_INVALIDDATA;
1286  }
1287 
1288  if (get_bits_left(gb) < 0) {
1289  av_log(avctx, AV_LOG_ERROR,
1290  "Overread SPS by %d bits\n", -get_bits_left(gb));
1291  return AVERROR_INVALIDDATA;
1292  }
1293 
1294  return 0;
1295 }
1296 
1297 static void hevc_sps_free(FFRefStructOpaque opaque, void *obj)
1298 {
1299  HEVCSPS *sps = obj;
1300 
1301  av_freep(&sps->data);
1302 }
1303 
1304 static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
1305 {
1306  return sps1->data_size == sps2->data_size &&
1307  !memcmp(sps1->data, sps2->data, sps1->data_size);
1308 }
1309 
1311  HEVCParamSets *ps, int apply_defdispwin)
1312 {
1314  unsigned int sps_id;
1315  int ret;
1316 
1317  if (!sps)
1318  return AVERROR(ENOMEM);
1319 
1320  av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
1321 
1322  sps->data_size = gb->buffer_end - gb->buffer;
1323  sps->data = av_memdup(gb->buffer, sps->data_size);
1324  if (!sps->data) {
1325  ret = AVERROR(ENOMEM);
1326  goto err;
1327  }
1328 
1329  ret = ff_hevc_parse_sps(sps, gb, &sps_id,
1330  apply_defdispwin,
1331  ps->vps_list, avctx);
1332  if (ret < 0)
1333  goto err;
1334 
1335  if (avctx->debug & FF_DEBUG_BITSTREAM) {
1336  av_log(avctx, AV_LOG_DEBUG,
1337  "Parsed SPS: id %d; coded wxh: %dx%d; "
1338  "cropped wxh: %dx%d; pix_fmt: %s.\n",
1339  sps_id, sps->width, sps->height,
1340  sps->width - (sps->output_window.left_offset + sps->output_window.right_offset),
1341  sps->height - (sps->output_window.top_offset + sps->output_window.bottom_offset),
1342  av_get_pix_fmt_name(sps->pix_fmt));
1343  }
1344 
1345  /* check if this is a repeat of an already parsed SPS, then keep the
1346  * original one.
1347  * otherwise drop all PPSes that depend on it */
1348  if (ps->sps_list[sps_id] &&
1349  compare_sps(ps->sps_list[sps_id], sps)) {
1351  } else {
1352  remove_sps(ps, sps_id);
1353  ps->sps_list[sps_id] = sps;
1354  }
1355 
1356  return 0;
1357 err:
1359  return ret;
1360 }
1361 
1362 static void hevc_pps_free(FFRefStructOpaque unused, void *obj)
1363 {
1364  HEVCPPS *pps = obj;
1365 
1366  av_freep(&pps->column_width);
1367  av_freep(&pps->row_height);
1368  av_freep(&pps->col_bd);
1369  av_freep(&pps->row_bd);
1370  av_freep(&pps->col_idxX);
1371  av_freep(&pps->ctb_addr_rs_to_ts);
1372  av_freep(&pps->ctb_addr_ts_to_rs);
1373  av_freep(&pps->tile_pos_rs);
1374  av_freep(&pps->tile_id);
1375  av_freep(&pps->min_tb_addr_zs_tab);
1376  av_freep(&pps->data);
1377 }
1378 
1379 static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth,
1380  int idx_y, int idx_cb, int idx_cr, int inp_length)
1381 {
1382  unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1383  int cm_res_bits;
1384 
1385  part_num_y = 1 << pps->cm_y_part_num_log2;
1386 
1387  split_octant_flag = inp_depth < pps->cm_octant_depth ? get_bits1(gb) : 0;
1388 
1389  if (split_octant_flag)
1390  for (int k = 0; k < 2; k++)
1391  for (int m = 0; m < 2; m++)
1392  for (int n = 0; n < 2; n++)
1393  colour_mapping_octants(gb, pps, inp_depth + 1,
1394  idx_y + part_num_y * k * inp_length / 2,
1395  idx_cb + m * inp_length / 2,
1396  idx_cr + n * inp_length / 2,
1397  inp_length / 2);
1398  else
1399  for (int i = 0; i < part_num_y; i++) {
1400  for (int j = 0; j < 4; j++) {
1401  coded_res_flag = get_bits1(gb);
1402  if (coded_res_flag)
1403  for (int c = 0; c < 3; c++) {
1404  res_coeff_q = get_ue_golomb_long(gb);
1405  cm_res_bits = FFMAX(0, 10 + pps->luma_bit_depth_cm_input -
1406  pps->luma_bit_depth_cm_output -
1407  pps->cm_res_quant_bits - pps->cm_delta_flc_bits);
1408  res_coeff_r = cm_res_bits ? get_bits(gb, cm_res_bits) : 0;
1409  if (res_coeff_q || res_coeff_r)
1410  skip_bits1(gb);
1411  }
1412  }
1413  }
1414 }
1415 
1417 {
1418  pps->num_cm_ref_layers = get_ue_golomb(gb) + 1;
1419  if (pps->num_cm_ref_layers > 62) {
1420  av_log(avctx, AV_LOG_ERROR,
1421  "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1422  return AVERROR_INVALIDDATA;
1423  }
1424  for (int i = 0; i < pps->num_cm_ref_layers; i++)
1425  pps->cm_ref_layer_id[i] = get_bits(gb, 6);
1426 
1427  pps->cm_octant_depth = get_bits(gb, 2);
1428  pps->cm_y_part_num_log2 = get_bits(gb, 2);
1429 
1430  pps->luma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1431  pps->chroma_bit_depth_cm_input = get_ue_golomb(gb) + 8;
1432  pps->luma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1433  pps->chroma_bit_depth_cm_output = get_ue_golomb(gb) + 8;
1434 
1435  pps->cm_res_quant_bits = get_bits(gb, 2);
1436  pps->cm_delta_flc_bits = get_bits(gb, 2) + 1;
1437 
1438  if (pps->cm_octant_depth == 1) {
1439  pps->cm_adapt_threshold_u_delta = get_se_golomb_long(gb);
1440  pps->cm_adapt_threshold_v_delta = get_se_golomb_long(gb);
1441  }
1442 
1443  colour_mapping_octants(gb, pps, 0, 0, 0, 0, 1 << pps->cm_octant_depth);
1444 
1445  return 0;
1446 }
1447 
1449  HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
1450 {
1451  pps->poc_reset_info_present_flag = get_bits1(gb);
1452  pps->pps_infer_scaling_list_flag = get_bits1(gb);
1453  if (pps->pps_infer_scaling_list_flag)
1454  pps->pps_scaling_list_ref_layer_id = get_bits(gb, 6);
1455 
1456  pps->num_ref_loc_offsets = get_ue_golomb(gb);
1457  if (pps->num_ref_loc_offsets > vps->vps_max_layers - 1)
1458  return AVERROR_INVALIDDATA;
1459 
1460  for (int i = 0; i < pps->num_ref_loc_offsets; i++) {
1461  pps->ref_loc_offset_layer_id[i] = get_bits(gb, 6);
1462  pps->scaled_ref_layer_offset_present_flag[i] = get_bits1(gb);
1463  if (pps->scaled_ref_layer_offset_present_flag[i]) {
1464  pps->scaled_ref_layer_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1465  pps->scaled_ref_layer_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1466  pps->scaled_ref_layer_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1467  pps->scaled_ref_layer_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1468  }
1469 
1470  pps->ref_region_offset_present_flag[i] = get_bits1(gb);
1471  if (pps->ref_region_offset_present_flag[i]) {
1472  pps->ref_region_left_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1473  pps->ref_region_top_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1474  pps->ref_region_right_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1475  pps->ref_region_bottom_offset[pps->ref_loc_offset_layer_id[i]] = get_se_golomb_long(gb);
1476  }
1477 
1478  pps->resample_phase_set_present_flag[i] = get_bits1(gb);
1479  if (pps->resample_phase_set_present_flag[i]) {
1480  pps->phase_hor_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1481  pps->phase_ver_luma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb_31(gb);
1482  pps->phase_hor_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1483  pps->phase_ver_chroma[pps->ref_loc_offset_layer_id[i]] = get_ue_golomb(gb) - 8;
1484  }
1485  }
1486 
1487  pps->colour_mapping_enabled_flag = get_bits1(gb);
1488  if (pps->colour_mapping_enabled_flag) {
1489  int ret = colour_mapping_table(gb, avctx, pps);
1490  if (ret < 0)
1491  return ret;
1492  }
1493 
1494  return 0;
1495 }
1496 
1498 {
1499  unsigned int num_val_delta_dlt, max_diff = 0;
1500  int min_diff_minus1 = -1;
1501  unsigned int len;
1502 
1503  num_val_delta_dlt = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1504  if (num_val_delta_dlt) {
1505  if (num_val_delta_dlt > 1)
1506  max_diff = get_bits(gb, pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1507  if (num_val_delta_dlt > 2 && max_diff) {
1508  len = av_log2(max_diff) + 1;
1509  min_diff_minus1 = get_bits(gb, len);
1510  }
1511  if (max_diff > (min_diff_minus1 + 1))
1512  for (int k = 1; k < num_val_delta_dlt; k++) {
1513  len = av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1514  skip_bits(gb, len); // delta_val_diff_minus_min
1515  }
1516  }
1517 }
1518 
1520  HEVCPPS *pps, const HEVCSPS *sps)
1521 {
1522  unsigned int pps_depth_layers_minus1;
1523 
1524  if (get_bits1(gb)) { // dlts_present_flag
1525  pps_depth_layers_minus1 = get_bits(gb, 6);
1526  pps->pps_bit_depth_for_depth_layers_minus8 = get_bits(gb, 4);
1527  for (int i = 0; i <= pps_depth_layers_minus1; i++) {
1528  if (get_bits1(gb)) { // dlt_flag[i]
1529  if (!get_bits1(gb)) { // dlt_pred_flag[i]
1530  if (get_bits1(gb)) { // dlt_val_flags_present_flag[i]
1531  for (int j = 0; j <= ((1 << (pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1532  skip_bits1(gb); // dlt_value_flag[i][j]
1533  } else
1534  delta_dlt(gb, pps);
1535  }
1536  }
1537  }
1538  }
1539 
1540  return 0;
1541 }
1542 
1544  HEVCPPS *pps, const HEVCSPS *sps)
1545 {
1546  if (pps->transform_skip_enabled_flag) {
1547  pps->log2_max_transform_skip_block_size = get_ue_golomb_31(gb) + 2;
1548  }
1549  pps->cross_component_prediction_enabled_flag = get_bits1(gb);
1550  pps->chroma_qp_offset_list_enabled_flag = get_bits1(gb);
1551  if (pps->chroma_qp_offset_list_enabled_flag) {
1552  pps->diff_cu_chroma_qp_offset_depth = get_ue_golomb_31(gb);
1553  pps->chroma_qp_offset_list_len_minus1 = get_ue_golomb_31(gb);
1554  if (pps->chroma_qp_offset_list_len_minus1 > 5) {
1555  av_log(avctx, AV_LOG_ERROR,
1556  "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1557  return AVERROR_INVALIDDATA;
1558  }
1559  for (int i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
1560  pps->cb_qp_offset_list[i] = get_se_golomb(gb);
1561  if (pps->cb_qp_offset_list[i]) {
1562  av_log(avctx, AV_LOG_WARNING,
1563  "cb_qp_offset_list not tested yet.\n");
1564  }
1565  pps->cr_qp_offset_list[i] = get_se_golomb(gb);
1566  if (pps->cr_qp_offset_list[i]) {
1567  av_log(avctx, AV_LOG_WARNING,
1568  "cb_qp_offset_list not tested yet.\n");
1569  }
1570  }
1571  }
1572  pps->log2_sao_offset_scale_luma = get_ue_golomb_31(gb);
1573  pps->log2_sao_offset_scale_chroma = get_ue_golomb_31(gb);
1574 
1575  if ( pps->log2_sao_offset_scale_luma > FFMAX(sps->bit_depth - 10, 0)
1576  || pps->log2_sao_offset_scale_chroma > FFMAX(sps->bit_depth_chroma - 10, 0)
1577  )
1578  return AVERROR_INVALIDDATA;
1579 
1580  return(0);
1581 }
1582 
1584  HEVCPPS *pps, const HEVCSPS *sps)
1585 {
1586  int num_comps, ret;
1587 
1588  pps->pps_curr_pic_ref_enabled_flag = get_bits1(gb);
1589  if (pps->residual_adaptive_colour_transform_enabled_flag = get_bits1(gb)) {
1590  pps->pps_slice_act_qp_offsets_present_flag = get_bits1(gb);
1591  pps->pps_act_y_qp_offset = get_se_golomb(gb) - 5;
1592  pps->pps_act_cb_qp_offset = get_se_golomb(gb) - 5;
1593  pps->pps_act_cr_qp_offset = get_se_golomb(gb) - 3;
1594 
1595 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
1596  pps->pps_act_ ## name ## _qp_offset >= 12)
1598 #undef CHECK_QP_OFFSET
1599  if (ret) {
1600  av_log(avctx, AV_LOG_ERROR,
1601  "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
1602  return AVERROR_INVALIDDATA;
1603  }
1604  }
1605 
1606  if (pps->pps_palette_predictor_initializers_present_flag = get_bits1(gb)) {
1607  pps->pps_num_palette_predictor_initializers = get_ue_golomb(gb);
1608  if (pps->pps_num_palette_predictor_initializers > 0) {
1609  if (pps->pps_num_palette_predictor_initializers > HEVC_MAX_PALETTE_PREDICTOR_SIZE) {
1610  av_log(avctx, AV_LOG_ERROR,
1611  "pps_num_palette_predictor_initializers out of range: %u\n",
1612  pps->pps_num_palette_predictor_initializers);
1613  return AVERROR_INVALIDDATA;
1614  }
1615  pps->monochrome_palette_flag = get_bits1(gb);
1616  pps->luma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
1617  if (pps->luma_bit_depth_entry != sps->bit_depth)
1618  return AVERROR_INVALIDDATA;
1619  if (!pps->monochrome_palette_flag) {
1620  pps->chroma_bit_depth_entry = get_ue_golomb_31(gb) + 8;
1621  if (pps->chroma_bit_depth_entry != sps->bit_depth_chroma)
1622  return AVERROR_INVALIDDATA;
1623  }
1624 
1625  num_comps = pps->monochrome_palette_flag ? 1 : 3;
1626  for (int comp = 0; comp < num_comps; comp++) {
1627  int bit_depth = !comp ? pps->luma_bit_depth_entry : pps->chroma_bit_depth_entry;
1628  for (int i = 0; i < pps->pps_num_palette_predictor_initializers; i++)
1629  pps->pps_palette_predictor_initializer[comp][i] = get_bits(gb, bit_depth);
1630  }
1631  }
1632  }
1633 
1634  return 0;
1635 }
1636 
1637 static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb,
1638  HEVCPPS *pps, const HEVCSPS *sps)
1639 {
1640  int log2_diff;
1641  int pic_area_in_ctbs;
1642  int i, j, x, y, ctb_addr_rs, tile_id;
1643 
1644  // Inferred parameters
1645  pps->col_bd = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
1646  pps->row_bd = av_malloc_array(pps->num_tile_rows + 1, sizeof(*pps->row_bd));
1647  pps->col_idxX = av_malloc_array(sps->ctb_width, sizeof(*pps->col_idxX));
1648  if (!pps->col_bd || !pps->row_bd || !pps->col_idxX)
1649  return AVERROR(ENOMEM);
1650 
1651  if (pps->uniform_spacing_flag) {
1652  if (!pps->column_width) {
1653  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1654  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1655  }
1656  if (!pps->column_width || !pps->row_height)
1657  return AVERROR(ENOMEM);
1658 
1659  for (i = 0; i < pps->num_tile_columns; i++) {
1660  pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
1661  (i * sps->ctb_width) / pps->num_tile_columns;
1662  }
1663 
1664  for (i = 0; i < pps->num_tile_rows; i++) {
1665  pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
1666  (i * sps->ctb_height) / pps->num_tile_rows;
1667  }
1668  }
1669 
1670  pps->col_bd[0] = 0;
1671  for (i = 0; i < pps->num_tile_columns; i++)
1672  pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
1673 
1674  pps->row_bd[0] = 0;
1675  for (i = 0; i < pps->num_tile_rows; i++)
1676  pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
1677 
1678  for (i = 0, j = 0; i < sps->ctb_width; i++) {
1679  if (i > pps->col_bd[j])
1680  j++;
1681  pps->col_idxX[i] = j;
1682  }
1683 
1684  /**
1685  * 6.5
1686  */
1687  pic_area_in_ctbs = sps->ctb_width * sps->ctb_height;
1688 
1689  pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_rs_to_ts));
1690  pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_ts_to_rs));
1691  pps->tile_id = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->tile_id));
1692  pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
1693  if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
1694  !pps->tile_id || !pps->min_tb_addr_zs_tab) {
1695  return AVERROR(ENOMEM);
1696  }
1697 
1698  for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1699  int tb_x = ctb_addr_rs % sps->ctb_width;
1700  int tb_y = ctb_addr_rs / sps->ctb_width;
1701  int tile_x = 0;
1702  int tile_y = 0;
1703  int val = 0;
1704 
1705  for (i = 0; i < pps->num_tile_columns; i++) {
1706  if (tb_x < pps->col_bd[i + 1]) {
1707  tile_x = i;
1708  break;
1709  }
1710  }
1711 
1712  for (i = 0; i < pps->num_tile_rows; i++) {
1713  if (tb_y < pps->row_bd[i + 1]) {
1714  tile_y = i;
1715  break;
1716  }
1717  }
1718 
1719  for (i = 0; i < tile_x; i++)
1720  val += pps->row_height[tile_y] * pps->column_width[i];
1721  for (i = 0; i < tile_y; i++)
1722  val += sps->ctb_width * pps->row_height[i];
1723 
1724  val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
1725  tb_x - pps->col_bd[tile_x];
1726 
1727  pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
1728  pps->ctb_addr_ts_to_rs[val] = ctb_addr_rs;
1729  }
1730 
1731  for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
1732  for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
1733  for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
1734  for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
1735  pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
1736 
1737  pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
1738  if (!pps->tile_pos_rs)
1739  return AVERROR(ENOMEM);
1740 
1741  for (j = 0; j < pps->num_tile_rows; j++)
1742  for (i = 0; i < pps->num_tile_columns; i++)
1743  pps->tile_pos_rs[j * pps->num_tile_columns + i] =
1744  pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
1745 
1746  log2_diff = sps->log2_ctb_size - sps->log2_min_tb_size;
1747  pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
1748  for (y = 0; y < sps->tb_mask+2; y++) {
1749  pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
1750  pps->min_tb_addr_zs_tab[y] = -1;
1751  }
1752  for (y = 0; y < sps->tb_mask+1; y++) {
1753  for (x = 0; x < sps->tb_mask+1; x++) {
1754  int tb_x = x >> log2_diff;
1755  int tb_y = y >> log2_diff;
1756  int rs = sps->ctb_width * tb_y + tb_x;
1757  int val = pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
1758  for (i = 0; i < log2_diff; i++) {
1759  int m = 1 << i;
1760  val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1761  }
1762  pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
1763  }
1764  }
1765 
1766  return 0;
1767 }
1768 
1770  HEVCParamSets *ps)
1771 {
1772  const HEVCSPS *sps = NULL;
1773  const HEVCVPS *vps = NULL;
1774  int i, ret = 0;
1775  ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
1776  unsigned int pps_id = get_ue_golomb_long(gb);
1777  unsigned log2_parallel_merge_level_minus2;
1778  HEVCPPS *pps;
1779 
1780  av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n");
1781 
1782  if (pps_id >= HEVC_MAX_PPS_COUNT) {
1783  av_log(avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
1784  return AVERROR_INVALIDDATA;
1785  }
1786 
1787  if (ps->pps_list[pps_id]) {
1788  const HEVCPPS *pps1 = ps->pps_list[pps_id];
1789  if (pps1->data_size == nal_size &&
1790  !memcmp(pps1->data, gb->buffer, pps1->data_size))
1791  return 0;
1792  }
1793 
1794  pps = ff_refstruct_alloc_ext(sizeof(*pps), 0, NULL, hevc_pps_free);
1795  if (!pps)
1796  return AVERROR(ENOMEM);
1797 
1798  pps->data_size = nal_size;
1799  pps->data = av_memdup(gb->buffer, nal_size);
1800  if (!pps->data) {
1802  goto err;
1803  }
1804 
1805  // Default values
1806  pps->loop_filter_across_tiles_enabled_flag = 1;
1807  pps->num_tile_columns = 1;
1808  pps->num_tile_rows = 1;
1809  pps->uniform_spacing_flag = 1;
1810  pps->disable_dbf = 0;
1811  pps->beta_offset = 0;
1812  pps->tc_offset = 0;
1813  pps->log2_max_transform_skip_block_size = 2;
1814 
1815  // Coded parameters
1816  pps->pps_id = pps_id;
1817  pps->sps_id = get_ue_golomb_long(gb);
1818  if (pps->sps_id >= HEVC_MAX_SPS_COUNT) {
1819  av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
1821  goto err;
1822  }
1823  if (!ps->sps_list[pps->sps_id]) {
1824  av_log(avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
1826  goto err;
1827  }
1828  sps = ps->sps_list[pps->sps_id];
1829  vps = ps->vps_list[sps->vps_id];
1830 
1831  pps->dependent_slice_segments_enabled_flag = get_bits1(gb);
1832  pps->output_flag_present_flag = get_bits1(gb);
1833  pps->num_extra_slice_header_bits = get_bits(gb, 3);
1834 
1835  pps->sign_data_hiding_flag = get_bits1(gb);
1836 
1837  pps->cabac_init_present_flag = get_bits1(gb);
1838 
1839  pps->num_ref_idx_l0_default_active = get_ue_golomb_31(gb) + 1;
1840  pps->num_ref_idx_l1_default_active = get_ue_golomb_31(gb) + 1;
1841  if (pps->num_ref_idx_l0_default_active >= HEVC_MAX_REFS ||
1842  pps->num_ref_idx_l1_default_active >= HEVC_MAX_REFS) {
1843  av_log(avctx, AV_LOG_ERROR, "Too many default refs in PPS: %d/%d.\n",
1844  pps->num_ref_idx_l0_default_active, pps->num_ref_idx_l1_default_active);
1845  goto err;
1846  }
1847 
1848  pps->pic_init_qp_minus26 = get_se_golomb(gb);
1849 
1850  pps->constrained_intra_pred_flag = get_bits1(gb);
1851  pps->transform_skip_enabled_flag = get_bits1(gb);
1852 
1853  pps->cu_qp_delta_enabled_flag = get_bits1(gb);
1854  pps->diff_cu_qp_delta_depth = 0;
1855  if (pps->cu_qp_delta_enabled_flag)
1856  pps->diff_cu_qp_delta_depth = get_ue_golomb_long(gb);
1857 
1858  if (pps->diff_cu_qp_delta_depth < 0 ||
1859  pps->diff_cu_qp_delta_depth > sps->log2_diff_max_min_coding_block_size) {
1860  av_log(avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
1861  pps->diff_cu_qp_delta_depth);
1863  goto err;
1864  }
1865 
1866  pps->cb_qp_offset = get_se_golomb(gb);
1867  if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
1868  av_log(avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
1869  pps->cb_qp_offset);
1871  goto err;
1872  }
1873  pps->cr_qp_offset = get_se_golomb(gb);
1874  if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
1875  av_log(avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
1876  pps->cr_qp_offset);
1878  goto err;
1879  }
1880  pps->pic_slice_level_chroma_qp_offsets_present_flag = get_bits1(gb);
1881 
1882  pps->weighted_pred_flag = get_bits1(gb);
1883  pps->weighted_bipred_flag = get_bits1(gb);
1884 
1885  pps->transquant_bypass_enable_flag = get_bits1(gb);
1886  pps->tiles_enabled_flag = get_bits1(gb);
1887  pps->entropy_coding_sync_enabled_flag = get_bits1(gb);
1888 
1889  if (pps->tiles_enabled_flag) {
1890  int num_tile_columns_minus1 = get_ue_golomb(gb);
1891  int num_tile_rows_minus1 = get_ue_golomb(gb);
1892 
1893  if (num_tile_columns_minus1 < 0 ||
1894  num_tile_columns_minus1 >= sps->ctb_width) {
1895  av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
1896  num_tile_columns_minus1);
1897  ret = num_tile_columns_minus1 < 0 ? num_tile_columns_minus1 : AVERROR_INVALIDDATA;
1898  goto err;
1899  }
1900  if (num_tile_rows_minus1 < 0 ||
1901  num_tile_rows_minus1 >= sps->ctb_height) {
1902  av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
1903  num_tile_rows_minus1);
1904  ret = num_tile_rows_minus1 < 0 ? num_tile_rows_minus1 : AVERROR_INVALIDDATA;
1905  goto err;
1906  }
1907  pps->num_tile_columns = num_tile_columns_minus1 + 1;
1908  pps->num_tile_rows = num_tile_rows_minus1 + 1;
1909 
1910  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1911  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1912  if (!pps->column_width || !pps->row_height) {
1913  ret = AVERROR(ENOMEM);
1914  goto err;
1915  }
1916 
1917  pps->uniform_spacing_flag = get_bits1(gb);
1918  if (!pps->uniform_spacing_flag) {
1919  uint64_t sum = 0;
1920  for (i = 0; i < pps->num_tile_columns - 1; i++) {
1921  pps->column_width[i] = get_ue_golomb_long(gb) + 1;
1922  sum += pps->column_width[i];
1923  }
1924  if (sum >= sps->ctb_width) {
1925  av_log(avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
1927  goto err;
1928  }
1929  pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
1930 
1931  sum = 0;
1932  for (i = 0; i < pps->num_tile_rows - 1; i++) {
1933  pps->row_height[i] = get_ue_golomb_long(gb) + 1;
1934  sum += pps->row_height[i];
1935  }
1936  if (sum >= sps->ctb_height) {
1937  av_log(avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
1939  goto err;
1940  }
1941  pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
1942  }
1943  pps->loop_filter_across_tiles_enabled_flag = get_bits1(gb);
1944  }
1945 
1946  pps->seq_loop_filter_across_slices_enabled_flag = get_bits1(gb);
1947 
1948  pps->deblocking_filter_control_present_flag = get_bits1(gb);
1949  if (pps->deblocking_filter_control_present_flag) {
1950  pps->deblocking_filter_override_enabled_flag = get_bits1(gb);
1951  pps->disable_dbf = get_bits1(gb);
1952  if (!pps->disable_dbf) {
1953  int beta_offset_div2 = get_se_golomb(gb);
1954  int tc_offset_div2 = get_se_golomb(gb) ;
1955  if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
1956  av_log(avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
1957  beta_offset_div2);
1959  goto err;
1960  }
1961  if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
1962  av_log(avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
1963  tc_offset_div2);
1965  goto err;
1966  }
1967  pps->beta_offset = 2 * beta_offset_div2;
1968  pps->tc_offset = 2 * tc_offset_div2;
1969  }
1970  }
1971 
1972  pps->scaling_list_data_present_flag = get_bits1(gb);
1973  if (pps->scaling_list_data_present_flag) {
1974  set_default_scaling_list_data(&pps->scaling_list);
1975  ret = scaling_list_data(gb, avctx, &pps->scaling_list, sps);
1976  if (ret < 0)
1977  goto err;
1978  }
1979  pps->lists_modification_present_flag = get_bits1(gb);
1980  log2_parallel_merge_level_minus2 = get_ue_golomb_long(gb);
1981  if (log2_parallel_merge_level_minus2 > sps->log2_ctb_size) {
1982  av_log(avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
1983  log2_parallel_merge_level_minus2);
1985  goto err;
1986  }
1987  pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
1988 
1989  pps->slice_header_extension_present_flag = get_bits1(gb);
1990 
1991  pps->pps_extension_present_flag = get_bits1(gb);
1992  if (pps->pps_extension_present_flag) {
1993  pps->pps_range_extensions_flag = get_bits1(gb);
1994  pps->pps_multilayer_extension_flag = get_bits1(gb);
1995  pps->pps_3d_extension_flag = get_bits1(gb);
1996  pps->pps_scc_extension_flag = get_bits1(gb);
1997  skip_bits(gb, 4); // pps_extension_4bits
1998 
1999  if (sps->ptl.general_ptl.profile_idc >= AV_PROFILE_HEVC_REXT && pps->pps_range_extensions_flag) {
2000  if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0)
2001  goto err;
2002  }
2003 
2004  if (pps->pps_multilayer_extension_flag) {
2005  if ((ret = pps_multilayer_extension(gb, avctx, pps, sps, vps)) < 0)
2006  goto err;
2007  }
2008 
2009  if (pps->pps_3d_extension_flag) {
2010  if ((ret = pps_3d_extension(gb, avctx, pps, sps)) < 0)
2011  goto err;
2012  }
2013 
2014  if (pps->pps_scc_extension_flag) {
2015  if ((ret = pps_scc_extension(gb, avctx, pps, sps)) < 0)
2016  goto err;
2017  }
2018  }
2019 
2020  ret = setup_pps(avctx, gb, pps, sps);
2021  if (ret < 0)
2022  goto err;
2023 
2024  if (get_bits_left(gb) < 0) {
2025  av_log(avctx, AV_LOG_WARNING,
2026  "Overread PPS by %d bits\n", -get_bits_left(gb));
2027  }
2028 
2029  remove_pps(ps, pps_id);
2030  ps->pps_list[pps_id] = pps;
2031 
2032  return 0;
2033 
2034 err:
2036  return ret;
2037 }
2038 
2040 {
2041  int i;
2042 
2043  for (i = 0; i < FF_ARRAY_ELEMS(ps->vps_list); i++)
2044  ff_refstruct_unref(&ps->vps_list[i]);
2045  for (i = 0; i < FF_ARRAY_ELEMS(ps->sps_list); i++)
2046  ff_refstruct_unref(&ps->sps_list[i]);
2047  for (i = 0; i < FF_ARRAY_ELEMS(ps->pps_list); i++)
2048  ff_refstruct_unref(&ps->pps_list[i]);
2049 
2050  ps->sps = NULL;
2051  ps->pps = NULL;
2052  ps->vps = NULL;
2053 }
2054 
2055 int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type)
2056 {
2057  int max_poc_lsb = 1 << sps->log2_max_poc_lsb;
2058  int prev_poc_lsb = pocTid0 % max_poc_lsb;
2059  int prev_poc_msb = pocTid0 - prev_poc_lsb;
2060  int poc_msb;
2061 
2062  if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2063  poc_msb = prev_poc_msb + max_poc_lsb;
2064  else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2065  poc_msb = prev_poc_msb - max_poc_lsb;
2066  else
2067  poc_msb = prev_poc_msb;
2068 
2069  // For BLA picture types, POCmsb is set to 0.
2070  if (nal_unit_type == HEVC_NAL_BLA_W_LP ||
2071  nal_unit_type == HEVC_NAL_BLA_W_RADL ||
2072  nal_unit_type == HEVC_NAL_BLA_N_LP)
2073  poc_msb = 0;
2074 
2075  return poc_msb + poc_lsb;
2076 }
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:278
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
HEVCSPS::data_size
int data_size
Definition: hevc_ps.h:303
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
colour_mapping_table
static int colour_mapping_table(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps)
Definition: hevc_ps.c:1416
HEVCPPS::data_size
int data_size
Definition: hevc_ps.h:438
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:695
VUI::vui_time_scale
uint32_t vui_time_scale
Definition: hevc_ps.h:108
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
CHECK_QP_OFFSET
#define CHECK_QP_OFFSET(name)
cb
static double cb(void *priv, double x, double y)
Definition: vf_geq.c:246
HEVCWindow::bottom_offset
unsigned int bottom_offset
Definition: hevc_ps.h:92
comp
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
Definition: eamad.c:81
HEVCParamSets::pps_list
const HEVCPPS * pps_list[HEVC_MAX_PPS_COUNT]
RefStruct references.
Definition: hevc_ps.h:444
remove_vps
static void remove_vps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:88
u
#define u(width, name, range_min, range_max)
Definition: cbs_h2645.c:251
ShortTermRPS::num_negative_pics
uint8_t num_negative_pics
Definition: hevc_ps.h:77
ShortTermRPS::rps_idx_num_delta_pocs
uint8_t rps_idx_num_delta_pocs
Definition: hevc_ps.h:79
get_se_golomb_long
static int get_se_golomb_long(GetBitContext *gb)
Definition: golomb.h:294
ff_hevc_diag_scan8x8_y
const uint8_t ff_hevc_diag_scan8x8_y[64]
Definition: hevc_data.c:58
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2965
pps_scc_extension
static int pps_scc_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: hevc_ps.c:1583
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1420
remove_sps
static void remove_sps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:71
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:421
remove_pps
static void remove_pps(HEVCParamSets *s, int id)
Definition: hevc_ps.c:64
ff_refstruct_alloc_ext
static void * ff_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(FFRefStructOpaque opaque, void *obj))
A wrapper around ff_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
Definition: refstruct.h:94
decode_hrd
static int decode_hrd(GetBitContext *gb, int common_inf_present, HEVCHdrParams *hdr, int max_sublayers)
Definition: hevc_ps.c:385
HEVC_MAX_PALETTE_PREDICTOR_SIZE
@ HEVC_MAX_PALETTE_PREDICTOR_SIZE
Definition: hevc.h:159
H2645VUI::matrix_coeffs
enum AVColorSpace matrix_coeffs
Definition: h2645_vui.h:41
HEVCSublayerHdrParams::cbr_flag
uint32_t cbr_flag
Definition: hevc_ps.h:39
AV_PROFILE_HEVC_MAIN
#define AV_PROFILE_HEVC_MAIN
Definition: defs.h:158
av_mod_uintp2
#define av_mod_uintp2
Definition: common.h:126
map_pixel_format
static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
Definition: hevc_ps.c:830
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
get_ue_golomb
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
Definition: golomb.h:53
HEVC_MAX_REFS
@ HEVC_MAX_REFS
Definition: hevc.h:119
HEVCHdrParams::dpb_output_delay_du_length_minus1
uint8_t dpb_output_delay_du_length_minus1
Definition: hevc_ps.h:58
HEVCHdrFlagParams::low_delay_hrd_flag
uint8_t low_delay_hrd_flag
Definition: hevc_ps.h:46
VUI::tiles_fixed_structure_flag
int tiles_fixed_structure_flag
Definition: hevc_ps.h:114
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:478
VUI::vui_num_ticks_poc_diff_one_minus1
int vui_num_ticks_poc_diff_one_minus1
Definition: hevc_ps.h:110
ScalingList::sl
uint8_t sl[4][6][64]
Definition: hevc_ps.h:185
VUI::field_seq_flag
int field_seq_flag
Definition: hevc_ps.h:100
HEVC_MAX_SHORT_TERM_REF_PIC_SETS
@ HEVC_MAX_SHORT_TERM_REF_PIC_SETS
Definition: hevc.h:122
AVCOL_SPC_RGB
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
Definition: pixfmt.h:610
VUI::bitstream_restriction_flag
int bitstream_restriction_flag
Definition: hevc_ps.h:113
HEVC_NAL_BLA_W_RADL
@ HEVC_NAL_BLA_W_RADL
Definition: hevc.h:46
FFRefStructOpaque
RefStruct is an API for creating reference-counted objects with minimal overhead.
Definition: refstruct.h:58
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
HEVCHdrParams::elemental_duration_in_tc_minus1
uint16_t elemental_duration_in_tc_minus1[HEVC_MAX_SUB_LAYERS]
Definition: hevc_ps.h:66
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
HEVCHdrParams
Definition: hevc_ps.h:49
H2645VUI::video_full_range_flag
int video_full_range_flag
Definition: h2645_vui.h:37
pps_multilayer_extension
static int pps_multilayer_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
Definition: hevc_ps.c:1448
AV_PIX_FMT_GRAY9
#define AV_PIX_FMT_GRAY9
Definition: pixfmt.h:458
AV_CODEC_FLAG2_IGNORE_CROP
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
Definition: avcodec.h:375
HEVCHdrParams::vcl_hrd_parameters_present_flag
uint8_t vcl_hrd_parameters_present_flag
Definition: hevc_ps.h:52
HEVCSublayerHdrParams::bit_rate_value_minus1
uint32_t bit_rate_value_minus1[HEVC_MAX_CPB_CNT]
Definition: hevc_ps.h:35
HEVC_MAX_DPB_SIZE
@ HEVC_MAX_DPB_SIZE
Definition: hevc.h:117
H2645VUI::video_signal_type_present_flag
int video_signal_type_present_flag
Definition: h2645_vui.h:35
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:304
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
golomb.h
exp golomb vlc stuff
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
pps_3d_extension
static int pps_3d_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: hevc_ps.c:1519
AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP10
Definition: pixfmt.h:494
HEVCWindow::left_offset
unsigned int left_offset
Definition: hevc_ps.h:89
ShortTermRPS::use_delta
unsigned use_delta
Definition: hevc_ps.h:85
GetBitContext
Definition: get_bits.h:108
AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_YUV422P9
Definition: pixfmt.h:476
H265RawProfileTierLevel::sub_layer_level_present_flag
uint8_t sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]
Definition: cbs_h265.h:63
hevc_sub_width_c
static const uint8_t hevc_sub_width_c[]
Definition: hevc_ps.c:56
HEVCHdrParams::sub_pic_hrd_params_present_flag
uint8_t sub_pic_hrd_params_present_flag
Definition: hevc_ps.h:53
HEVCSublayerHdrParams::bit_rate_du_value_minus1
uint32_t bit_rate_du_value_minus1[HEVC_MAX_CPB_CNT]
Definition: hevc_ps.h:38
val
static double val(void *priv, double ch)
Definition: aeval.c:78
HEVCSublayerHdrParams::cpb_size_du_value_minus1
uint32_t cpb_size_du_value_minus1[HEVC_MAX_CPB_CNT]
Definition: hevc_ps.h:37
HEVCParamSets::sps_list
const HEVCSPS * sps_list[HEVC_MAX_SPS_COUNT]
RefStruct references.
Definition: hevc_ps.h:443
HEVCSPS::data
uint8_t * data
Definition: hevc_ps.h:302
refstruct.h
VUI::restricted_ref_pic_lists_flag
int restricted_ref_pic_lists_flag
Definition: hevc_ps.h:116
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:481
H265RawProfileTierLevel::sub_layer_profile_present_flag
uint8_t sub_layer_profile_present_flag[HEVC_MAX_SUB_LAYERS]
Definition: cbs_h265.h:62
HEVCHdrParams::nal_hrd_parameters_present_flag
uint8_t nal_hrd_parameters_present_flag
Definition: hevc_ps.h:51
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
HEVC_NAL_BLA_N_LP
@ HEVC_NAL_BLA_N_LP
Definition: hevc.h:47
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
HEVCHdrParams::cpb_size_scale
uint8_t cpb_size_scale
Definition: hevc_ps.h:60
ptl
const H265RawProfileTierLevel * ptl
Definition: h265_levels.c:170
HEVC_MAX_LONG_TERM_REF_PICS
@ HEVC_MAX_LONG_TERM_REF_PICS
Definition: hevc.h:124
PTLCommon
Definition: hevc_ps.h:124
s
#define s(width, name)
Definition: cbs_vp9.c:198
ff_hevc_diag_scan8x8_x
const uint8_t ff_hevc_diag_scan8x8_x[64]
Definition: hevc_data.c:39
AV_PROFILE_HEVC_SCC
#define AV_PROFILE_HEVC_SCC
Definition: defs.h:162
HEVCHdrParams::vcl_params
HEVCSublayerHdrParams vcl_params[HEVC_MAX_SUB_LAYERS]
Definition: hevc_ps.h:69
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:475
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
VUI::motion_vectors_over_pic_boundaries_flag
int motion_vectors_over_pic_boundaries_flag
Definition: hevc_ps.h:115
HEVCWindow::top_offset
unsigned int top_offset
Definition: hevc_ps.h:91
HEVCPPS::data
uint8_t * data
Definition: hevc_ps.h:437
default_scaling_list_inter
static const uint8_t default_scaling_list_inter[]
Definition: hevc_ps.c:45
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: hevc_ps.h:182
HEVCHdrParams::tick_divisor_minus2
uint8_t tick_divisor_minus2
Definition: hevc_ps.h:56
ShortTermRPS::num_delta_pocs
uint8_t num_delta_pocs
Definition: hevc_ps.h:78
get_se_golomb
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition: golomb.h:239
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:459
ff_hevc_diag_scan4x4_y
const uint8_t ff_hevc_diag_scan4x4_y[16]
Definition: hevc_data.c:32
decode_vui
static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
Definition: hevc_ps.c:596
GetBitContext::buffer
const uint8_t * buffer
Definition: get_bits.h:109
NULL
#define NULL
Definition: coverity.c:32
H2645VUI::colour_description_present_flag
int colour_description_present_flag
Definition: h2645_vui.h:38
ScalingList::sl_dc
uint8_t sl_dc[2][6]
Definition: hevc_ps.h:186
VUI::frame_field_info_present_flag
int frame_field_info_present_flag
Definition: hevc_ps.h:101
ff_hevc_ps_uninit
void ff_hevc_ps_uninit(HEVCParamSets *ps)
Definition: hevc_ps.c:2039
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
ff_hevc_parse_sps
int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, int apply_defdispwin, const HEVCVPS *const *vps_list, AVCodecContext *avctx)
Parse the SPS from the bitstream into the provided HEVCSPS struct.
Definition: hevc_ps.c:879
VUI::vui_timing_info_present_flag
int vui_timing_info_present_flag
Definition: hevc_ps.h:106
AV_PROFILE_HEVC_MAIN_STILL_PICTURE
#define AV_PROFILE_HEVC_MAIN_STILL_PICTURE
Definition: defs.h:160
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: hevc_ps.h:34
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
HEVCHdrFlagParams::fixed_pic_rate_general_flag
uint8_t fixed_pic_rate_general_flag
Definition: hevc_ps.h:44
VUI::log2_max_mv_length_horizontal
int log2_max_mv_length_horizontal
Definition: hevc_ps.h:120
HEVCParamSets::vps
const HEVCVPS * vps
Definition: hevc_ps.h:447
PTL
Definition: hevc_ps.h:147
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:479
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: hevc_ps.h:118
AV_PROFILE_HEVC_MAIN_10
#define AV_PROFILE_HEVC_MAIN_10
Definition: defs.h:159
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: hevc_ps.c:1379
AV_PROFILE_HEVC_REXT
#define AV_PROFILE_HEVC_REXT
Definition: defs.h:161
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: hevc_ps.h:36
HEVCWindow
Definition: hevc_ps.h:88
ShortTermRPS::used
uint32_t used
Definition: hevc_ps.h:74
HEVCHdrParams::dpb_output_delay_length_minus1
uint8_t dpb_output_delay_length_minus1
Definition: hevc_ps.h:64
hevc_data.h
AVCodecContext::flags2
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:509
HEVC_MAX_PPS_COUNT
@ HEVC_MAX_PPS_COUNT
Definition: hevc.h:114
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
check_profile_idc
#define check_profile_idc(idc)
ff_hevc_decode_nal_sps
int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps, int apply_defdispwin)
Definition: hevc_ps.c:1310
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:483
HEVC_NAL_BLA_W_LP
@ HEVC_NAL_BLA_W_LP
Definition: hevc.h:45
scaling_list_data
static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, const HEVCSPS *sps)
Definition: hevc_ps.c:753
VUI::common
H2645VUI common
Definition: hevc_ps.h:96
VUI::def_disp_win
HEVCWindow def_disp_win
Definition: hevc_ps.h:104
ff_hevc_compute_poc
int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type)
Compute POC of the current frame and return it.
Definition: hevc_ps.c:2055
VUI::vui_poc_proportional_to_timing_flag
int vui_poc_proportional_to_timing_flag
Definition: hevc_ps.h:109
VUI
Definition: hevc_ps.h:95
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:485
ff_hevc_decode_nal_vps
int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: hevc_ps.c:461
VUI::vui_num_units_in_tick
uint32_t vui_num_units_in_tick
Definition: hevc_ps.h:107
VUI::max_bits_per_min_cu_denom
int max_bits_per_min_cu_denom
Definition: hevc_ps.h:119
VUI::log2_max_mv_length_vertical
int log2_max_mv_length_vertical
Definition: hevc_ps.h:121
decode_profile_tier_level
static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, PTLCommon *ptl)
Definition: hevc_ps.c:251
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:413
HEVCHdrParams::bit_rate_scale
uint8_t bit_rate_scale
Definition: hevc_ps.h:59
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:191
compare_sps
static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
Definition: hevc_ps.c:1304
VUI::default_display_window_flag
int default_display_window_flag
Definition: hevc_ps.h:103
hevc_pps_free
static void hevc_pps_free(FFRefStructOpaque unused, void *obj)
Definition: hevc_ps.c:1362
hevc_ps.h
HEVCHdrParams::nal_params
HEVCSublayerHdrParams nal_params[HEVC_MAX_SUB_LAYERS]
Definition: hevc_ps.h:68
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
hevc_sps_free
static void hevc_sps_free(FFRefStructOpaque opaque, void *obj)
Definition: hevc_ps.c:1297
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:371
HEVCParamSets::sps
const HEVCSPS * sps
Definition: hevc_ps.h:448
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:31
AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_GBRP12
Definition: pixfmt.h:495
VUI::neutra_chroma_indication_flag
int neutra_chroma_indication_flag
Definition: hevc_ps.h:98
delta
float delta
Definition: vorbis_enc_data.h:430
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
len
int len
Definition: vorbis_enc_data.h:426
HEVC_MAX_SPS_COUNT
@ HEVC_MAX_SPS_COUNT
Definition: hevc.h:112
ShortTermRPS::abs_delta_rps
uint16_t abs_delta_rps
Definition: hevc_ps.h:81
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:477
HEVC_MAX_LOG2_CTB_SIZE
@ HEVC_MAX_LOG2_CTB_SIZE
Definition: hevc.h:128
GetBitContext::buffer_end
const uint8_t * buffer_end
Definition: get_bits.h:109
set_default_scaling_list_data
static void set_default_scaling_list_data(ScalingList *sl)
Definition: hevc_ps.c:723
ret
ret
Definition: filter_design.txt:187
HEVCHdrFlagParams::fixed_pic_rate_within_cvs_flag
uint8_t fixed_pic_rate_within_cvs_flag
Definition: hevc_ps.h:45
HEVCVPS::data
uint8_t * data
Definition: hevc_ps.h:178
h2645_vui.h
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
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: hevc_ps.h:76
HEVCHdrParams::initial_cpb_removal_delay_length_minus1
uint8_t initial_cpb_removal_delay_length_minus1
Definition: hevc_ps.h:62
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:482
decode_sublayer_hrd
static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb, HEVCSublayerHdrParams *par, int subpic_params_present)
Definition: hevc_ps.c:367
U
#define U(x)
Definition: vpx_arith.h:37
hevc_vps_free
static void hevc_vps_free(FFRefStructOpaque opaque, void *obj)
Definition: hevc_ps.c:453
AVCodecContext
main external API structure.
Definition: avcodec.h:445
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
parse_ptl
static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx, PTL *ptl, int max_num_sub_layers)
Definition: hevc_ps.c:327
delta_dlt
static void delta_dlt(GetBitContext *gb, HEVCPPS *pps)
Definition: hevc_ps.c:1497
HEVCParamSets::pps
const HEVCPPS * pps
Definition: hevc_ps.h:449
pps
uint64_t pps
Definition: dovi_rpuenc.c:35
HEVCWindow::right_offset
unsigned int right_offset
Definition: hevc_ps.h:90
ShortTermRPS
Definition: hevc_ps.h:72
ff_hevc_diag_scan4x4_x
const uint8_t ff_hevc_diag_scan4x4_x[16]
Definition: hevc_data.c:25
VUI::vui_hrd_parameters_present_flag
int vui_hrd_parameters_present_flag
Definition: hevc_ps.h:111
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
setup_pps
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, const HEVCSPS *sps)
Definition: hevc_ps.c:1637
AVCodecContext::debug
int debug
debug
Definition: avcodec.h:1396
VUI::min_spatial_segmentation_idc
int min_spatial_segmentation_idc
Definition: hevc_ps.h:117
AV_PIX_FMT_GBRP
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:165
desc
const char * desc
Definition: libsvtav1.c:79
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
mem.h
HEVCVPS
Definition: hevc_ps.h:155
get_ue_golomb_long
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:104
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:36
HEVCSPS
Definition: hevc_ps.h:189
ShortTermRPS::rps_predict
unsigned rps_predict
Definition: hevc_ps.h:84
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: hevc_ps.h:306
HEVCHdrParams::du_cpb_removal_delay_increment_length_minus1
uint8_t du_cpb_removal_delay_increment_length_minus1
Definition: hevc_ps.h:57
HEVCHdrParams::cpb_cnt_minus1
uint8_t cpb_cnt_minus1[HEVC_MAX_SUB_LAYERS]
Definition: hevc_ps.h:65
hevc_sub_height_c
static const uint8_t hevc_sub_height_c[]
Definition: hevc_ps.c:60
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: hevc_ps.h:63
cr
static double cr(void *priv, double x, double y)
Definition: vf_geq.c:247
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
HEVCParamSets::vps_list
const HEVCVPS * vps_list[HEVC_MAX_VPS_COUNT]
RefStruct references.
Definition: hevc_ps.h:442
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: hevc_ps.h:54
imgutils.h
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: hevc_ps.c:102
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
HEVCVPS::data_size
int data_size
Definition: hevc_ps.h:179
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
ff_hevc_decode_nal_pps
int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
Definition: hevc_ps.c:1769
ShortTermRPS::delta_poc
int32_t delta_poc[32]
Definition: hevc_ps.h:73
HEVCHdrParams::cpb_size_du_scale
uint8_t cpb_size_du_scale
Definition: hevc_ps.h:61
ShortTermRPS::delta_rps_sign
unsigned delta_rps_sign
Definition: hevc_ps.h:82
av_image_check_size
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
Definition: imgutils.c:318
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:460
default_scaling_list_intra
static const uint8_t default_scaling_list_intra[]
Definition: hevc_ps.c:34
HEVC_MAX_SUB_LAYERS
@ HEVC_MAX_SUB_LAYERS
Definition: hevc.h:105
FF_DEBUG_BITSTREAM
#define FF_DEBUG_BITSTREAM
Definition: avcodec.h:1399
HEVCHdrParams::flags
HEVCHdrFlagParams flags
Definition: hevc_ps.h:50
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
ff_refstruct_unref
void ff_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
pps_range_extensions
static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
Definition: hevc_ps.c:1543
av_get_pix_fmt_name
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:2885
HEVCParamSets
Definition: hevc_ps.h:441