FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hevc_ps.c
Go to the documentation of this file.
1 /*
2  * HEVC Parameter Set decoding
3  *
4  * Copyright (C) 2012 - 2103 Guillaume Martres
5  * Copyright (C) 2012 - 2103 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 "golomb.h"
28 #include "hevc.h"
29 
31  16, 16, 16, 16, 17, 18, 21, 24,
32  16, 16, 16, 16, 17, 19, 22, 25,
33  16, 16, 17, 18, 20, 22, 25, 29,
34  16, 16, 18, 21, 24, 27, 31, 36,
35  17, 17, 20, 24, 30, 35, 41, 47,
36  18, 19, 22, 27, 35, 44, 54, 65,
37  21, 22, 25, 31, 41, 54, 70, 88,
38  24, 25, 29, 36, 47, 65, 88, 115
39 };
40 
42  16, 16, 16, 16, 17, 18, 20, 24,
43  16, 16, 16, 17, 18, 20, 24, 25,
44  16, 16, 17, 18, 20, 24, 25, 28,
45  16, 17, 18, 20, 24, 25, 28, 33,
46  17, 18, 20, 24, 25, 28, 33, 41,
47  18, 20, 24, 25, 28, 33, 41, 54,
48  20, 24, 25, 28, 33, 41, 54, 71,
49  24, 25, 28, 33, 41, 54, 71, 91
50 };
51 
52 static const AVRational vui_sar[] = {
53  { 0, 1 },
54  { 1, 1 },
55  { 12, 11 },
56  { 10, 11 },
57  { 16, 11 },
58  { 40, 33 },
59  { 24, 11 },
60  { 20, 11 },
61  { 32, 11 },
62  { 80, 33 },
63  { 18, 11 },
64  { 15, 11 },
65  { 64, 33 },
66  { 160, 99 },
67  { 4, 3 },
68  { 3, 2 },
69  { 2, 1 },
70 };
71 
73  const HEVCSPS *sps, int is_slice_header)
74 {
75  HEVCLocalContext *lc = s->HEVClc;
76  uint8_t rps_predict = 0;
77  int delta_poc;
78  int k0 = 0;
79  int k1 = 0;
80  int k = 0;
81  int i;
82 
83  GetBitContext *gb = &lc->gb;
84 
85  if (rps != sps->st_rps && sps->nb_st_rps)
86  rps_predict = get_bits1(gb);
87 
88  if (rps_predict) {
89  const ShortTermRPS *rps_ridx;
90  int delta_rps;
91  unsigned abs_delta_rps;
92  uint8_t use_delta_flag = 0;
93  uint8_t delta_rps_sign;
94 
95  if (is_slice_header) {
96  unsigned int delta_idx = get_ue_golomb_long(gb) + 1;
97  if (delta_idx > sps->nb_st_rps) {
99  "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
100  delta_idx, sps->nb_st_rps);
101  return AVERROR_INVALIDDATA;
102  }
103  rps_ridx = &sps->st_rps[sps->nb_st_rps - delta_idx];
104  } else
105  rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
106 
107  delta_rps_sign = get_bits1(gb);
108  abs_delta_rps = get_ue_golomb_long(gb) + 1;
109  if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
111  "Invalid value of abs_delta_rps: %d\n",
112  abs_delta_rps);
113  return AVERROR_INVALIDDATA;
114  }
115  delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
116  for (i = 0; i <= rps_ridx->num_delta_pocs; i++) {
117  int used = rps->used[k] = get_bits1(gb);
118 
119  if (!used)
120  use_delta_flag = get_bits1(gb);
121 
122  if (used || use_delta_flag) {
123  if (i < rps_ridx->num_delta_pocs)
124  delta_poc = delta_rps + rps_ridx->delta_poc[i];
125  else
126  delta_poc = delta_rps;
127  rps->delta_poc[k] = delta_poc;
128  if (delta_poc < 0)
129  k0++;
130  else
131  k1++;
132  k++;
133  }
134  }
135 
136  rps->num_delta_pocs = k;
137  rps->num_negative_pics = k0;
138  // sort in increasing order (smallest first)
139  if (rps->num_delta_pocs != 0) {
140  int used, tmp;
141  for (i = 1; i < rps->num_delta_pocs; i++) {
142  delta_poc = rps->delta_poc[i];
143  used = rps->used[i];
144  for (k = i - 1; k >= 0; k--) {
145  tmp = rps->delta_poc[k];
146  if (delta_poc < tmp) {
147  rps->delta_poc[k + 1] = tmp;
148  rps->used[k + 1] = rps->used[k];
149  rps->delta_poc[k] = delta_poc;
150  rps->used[k] = used;
151  }
152  }
153  }
154  }
155  if ((rps->num_negative_pics >> 1) != 0) {
156  int used;
157  k = rps->num_negative_pics - 1;
158  // flip the negative values to largest first
159  for (i = 0; i < rps->num_negative_pics >> 1; i++) {
160  delta_poc = rps->delta_poc[i];
161  used = rps->used[i];
162  rps->delta_poc[i] = rps->delta_poc[k];
163  rps->used[i] = rps->used[k];
164  rps->delta_poc[k] = delta_poc;
165  rps->used[k] = used;
166  k--;
167  }
168  }
169  } else {
170  unsigned int prev, nb_positive_pics;
172  nb_positive_pics = get_ue_golomb_long(gb);
173 
174  if (rps->num_negative_pics >= MAX_REFS ||
175  nb_positive_pics >= MAX_REFS) {
176  av_log(s->avctx, AV_LOG_ERROR, "Too many refs in a short term RPS.\n");
177  return AVERROR_INVALIDDATA;
178  }
179 
180  rps->num_delta_pocs = rps->num_negative_pics + nb_positive_pics;
181  if (rps->num_delta_pocs) {
182  prev = 0;
183  for (i = 0; i < rps->num_negative_pics; i++) {
184  delta_poc = get_ue_golomb_long(gb) + 1;
185  prev -= delta_poc;
186  rps->delta_poc[i] = prev;
187  rps->used[i] = get_bits1(gb);
188  }
189  prev = 0;
190  for (i = 0; i < nb_positive_pics; i++) {
191  delta_poc = get_ue_golomb_long(gb) + 1;
192  prev += delta_poc;
193  rps->delta_poc[rps->num_negative_pics + i] = prev;
194  rps->used[rps->num_negative_pics + i] = get_bits1(gb);
195  }
196  }
197  }
198  return 0;
199 }
200 
201 
203 {
204  int i;
205  HEVCLocalContext *lc = s->HEVClc;
206  GetBitContext *gb = &lc->gb;
207 
208  if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 16 + 16 + 12)
209  return -1;
210 
211  ptl->profile_space = get_bits(gb, 2);
212  ptl->tier_flag = get_bits1(gb);
213  ptl->profile_idc = get_bits(gb, 5);
214  if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN)
215  av_log(s->avctx, AV_LOG_DEBUG, "Main profile bitstream\n");
216  else if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN_10)
217  av_log(s->avctx, AV_LOG_DEBUG, "Main 10 profile bitstream\n");
219  av_log(s->avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n");
220  else if (ptl->profile_idc == FF_PROFILE_HEVC_REXT)
221  av_log(s->avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n");
222  else
223  av_log(s->avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc);
224 
225  for (i = 0; i < 32; i++)
231 
232  skip_bits(gb, 16); // XXX_reserved_zero_44bits[0..15]
233  skip_bits(gb, 16); // XXX_reserved_zero_44bits[16..31]
234  skip_bits(gb, 12); // XXX_reserved_zero_44bits[32..43]
235 
236  return 0;
237 }
238 
239 static int parse_ptl(HEVCContext *s, PTL *ptl, int max_num_sub_layers)
240 {
241  int i;
242  HEVCLocalContext *lc = s->HEVClc;
243  GetBitContext *gb = &lc->gb;
244  if (decode_profile_tier_level(s, &ptl->general_ptl) < 0 ||
245  get_bits_left(gb) < 8 + 8*2) {
246  av_log(s->avctx, AV_LOG_ERROR, "PTL information too short\n");
247  return -1;
248  }
249 
250  ptl->general_ptl.level_idc = get_bits(gb, 8);
251 
252  for (i = 0; i < max_num_sub_layers - 1; i++) {
255  }
256 
257  if (max_num_sub_layers - 1> 0)
258  for (i = max_num_sub_layers - 1; i < 8; i++)
259  skip_bits(gb, 2); // reserved_zero_2bits[i]
260  for (i = 0; i < max_num_sub_layers - 1; i++) {
261  if (ptl->sub_layer_profile_present_flag[i] &&
262  decode_profile_tier_level(s, &ptl->sub_layer_ptl[i]) < 0) {
264  "PTL information for sublayer %i too short\n", i);
265  return -1;
266  }
267  if (ptl->sub_layer_level_present_flag[i]) {
268  if (get_bits_left(gb) < 8) {
270  "Not enough data for sublayer %i level_idc\n", i);
271  return -1;
272  } else
273  ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
274  }
275  }
276 
277  return 0;
278 }
279 
280 static void decode_sublayer_hrd(HEVCContext *s, unsigned int nb_cpb,
281  int subpic_params_present)
282 {
283  GetBitContext *gb = &s->HEVClc->gb;
284  int i;
285 
286  for (i = 0; i < nb_cpb; i++) {
287  get_ue_golomb_long(gb); // bit_rate_value_minus1
288  get_ue_golomb_long(gb); // cpb_size_value_minus1
289 
290  if (subpic_params_present) {
291  get_ue_golomb_long(gb); // cpb_size_du_value_minus1
292  get_ue_golomb_long(gb); // bit_rate_du_value_minus1
293  }
294  skip_bits1(gb); // cbr_flag
295  }
296 }
297 
298 static int decode_hrd(HEVCContext *s, int common_inf_present,
299  int max_sublayers)
300 {
301  GetBitContext *gb = &s->HEVClc->gb;
302  int nal_params_present = 0, vcl_params_present = 0;
303  int subpic_params_present = 0;
304  int i;
305 
306  if (common_inf_present) {
307  nal_params_present = get_bits1(gb);
308  vcl_params_present = get_bits1(gb);
309 
310  if (nal_params_present || vcl_params_present) {
311  subpic_params_present = get_bits1(gb);
312 
313  if (subpic_params_present) {
314  skip_bits(gb, 8); // tick_divisor_minus2
315  skip_bits(gb, 5); // du_cpb_removal_delay_increment_length_minus1
316  skip_bits(gb, 1); // sub_pic_cpb_params_in_pic_timing_sei_flag
317  skip_bits(gb, 5); // dpb_output_delay_du_length_minus1
318  }
319 
320  skip_bits(gb, 4); // bit_rate_scale
321  skip_bits(gb, 4); // cpb_size_scale
322 
323  if (subpic_params_present)
324  skip_bits(gb, 4); // cpb_size_du_scale
325 
326  skip_bits(gb, 5); // initial_cpb_removal_delay_length_minus1
327  skip_bits(gb, 5); // au_cpb_removal_delay_length_minus1
328  skip_bits(gb, 5); // dpb_output_delay_length_minus1
329  }
330  }
331 
332  for (i = 0; i < max_sublayers; i++) {
333  int low_delay = 0;
334  unsigned int nb_cpb = 1;
335  int fixed_rate = get_bits1(gb);
336 
337  if (!fixed_rate)
338  fixed_rate = get_bits1(gb);
339 
340  if (fixed_rate)
341  get_ue_golomb_long(gb); // elemental_duration_in_tc_minus1
342  else
343  low_delay = get_bits1(gb);
344 
345  if (!low_delay) {
346  nb_cpb = get_ue_golomb_long(gb) + 1;
347  if (nb_cpb < 1 || nb_cpb > 32) {
348  av_log(s->avctx, AV_LOG_ERROR, "nb_cpb %d invalid\n", nb_cpb);
349  return AVERROR_INVALIDDATA;
350  }
351  }
352 
353  if (nal_params_present)
354  decode_sublayer_hrd(s, nb_cpb, subpic_params_present);
355  if (vcl_params_present)
356  decode_sublayer_hrd(s, nb_cpb, subpic_params_present);
357  }
358  return 0;
359 }
360 
362 {
363  int i,j;
364  GetBitContext *gb = &s->HEVClc->gb;
365  int vps_id = 0;
366  HEVCVPS *vps;
367  AVBufferRef *vps_buf = av_buffer_allocz(sizeof(*vps));
368 
369  if (!vps_buf)
370  return AVERROR(ENOMEM);
371  vps = (HEVCVPS*)vps_buf->data;
372 
373  av_log(s->avctx, AV_LOG_DEBUG, "Decoding VPS\n");
374 
375  vps_id = get_bits(gb, 4);
376  if (vps_id >= MAX_VPS_COUNT) {
377  av_log(s->avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", vps_id);
378  goto err;
379  }
380 
381  if (get_bits(gb, 2) != 3) { // vps_reserved_three_2bits
382  av_log(s->avctx, AV_LOG_ERROR, "vps_reserved_three_2bits is not three\n");
383  goto err;
384  }
385 
386  vps->vps_max_layers = get_bits(gb, 6) + 1;
387  vps->vps_max_sub_layers = get_bits(gb, 3) + 1;
389 
390  if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
391  av_log(s->avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
392  goto err;
393  }
394 
395  if (vps->vps_max_sub_layers > MAX_SUB_LAYERS) {
396  av_log(s->avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
397  vps->vps_max_sub_layers);
398  goto err;
399  }
400 
401  if (parse_ptl(s, &vps->ptl, vps->vps_max_sub_layers) < 0)
402  goto err;
403 
405 
407  for (; i < vps->vps_max_sub_layers; i++) {
411 
413  av_log(s->avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
414  vps->vps_max_dec_pic_buffering[i] - 1);
415  goto err;
416  }
417  if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
418  av_log(s->avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
419  vps->vps_num_reorder_pics[i]);
421  goto err;
422  }
423  }
424 
425  vps->vps_max_layer_id = get_bits(gb, 6);
426  vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
427  if ((vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
428  av_log(s->avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
429  goto err;
430  }
431 
432  for (i = 1; i < vps->vps_num_layer_sets; i++)
433  for (j = 0; j <= vps->vps_max_layer_id; j++)
434  skip_bits(gb, 1); // layer_id_included_flag[i][j]
435 
437  if (vps->vps_timing_info_present_flag) {
438  vps->vps_num_units_in_tick = get_bits_long(gb, 32);
439  vps->vps_time_scale = get_bits_long(gb, 32);
444  for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
445  int common_inf_present = 1;
446 
447  get_ue_golomb_long(gb); // hrd_layer_set_idx
448  if (i)
449  common_inf_present = get_bits1(gb);
450  decode_hrd(s, common_inf_present, vps->vps_max_sub_layers);
451  }
452  }
453  get_bits1(gb); /* vps_extension_flag */
454 
455  if (get_bits_left(gb) < 0) {
457  "Overread VPS by %d bits\n", -get_bits_left(gb));
458  goto err;
459  }
460 
461  av_buffer_unref(&s->vps_list[vps_id]);
462  s->vps_list[vps_id] = vps_buf;
463  return 0;
464 
465 err:
466  av_buffer_unref(&vps_buf);
467  return AVERROR_INVALIDDATA;
468 }
469 
470 static void decode_vui(HEVCContext *s, HEVCSPS *sps)
471 {
472  VUI *vui = &sps->vui;
473  GetBitContext *gb = &s->HEVClc->gb;
474  GetBitContext backup;
475  int sar_present, alt = 0;
476 
477  av_log(s->avctx, AV_LOG_DEBUG, "Decoding VUI\n");
478 
479  sar_present = get_bits1(gb);
480  if (sar_present) {
481  uint8_t sar_idx = get_bits(gb, 8);
482  if (sar_idx < FF_ARRAY_ELEMS(vui_sar))
483  vui->sar = vui_sar[sar_idx];
484  else if (sar_idx == 255) {
485  vui->sar.num = get_bits(gb, 16);
486  vui->sar.den = get_bits(gb, 16);
487  } else
489  "Unknown SAR index: %u.\n", sar_idx);
490  }
491 
495 
498  vui->video_format = get_bits(gb, 3);
499  vui->video_full_range_flag = get_bits1(gb);
504  vui->colour_primaries = get_bits(gb, 8);
505  vui->transfer_characteristic = get_bits(gb, 8);
506  vui->matrix_coeffs = get_bits(gb, 8);
507 
508  // Set invalid values to "unspecified"
509  if (vui->colour_primaries >= AVCOL_PRI_NB)
513  if (vui->matrix_coeffs >= AVCOL_SPC_NB)
515  }
516  }
517 
519  if (vui->chroma_loc_info_present_flag) {
522  }
523 
525  vui->field_seq_flag = get_bits1(gb);
527 
528  if (get_bits_left(gb) >= 68 && show_bits_long(gb, 21) == 0x100000) {
530  av_log(s->avctx, AV_LOG_WARNING, "Invalid default display window\n");
531  } else
533  // Backup context in case an alternate header is detected
534  memcpy(&backup, gb, sizeof(backup));
535 
536  if (vui->default_display_window_flag) {
537  //TODO: * 2 is only valid for 420
542 
543  if (s->apply_defdispwin &&
546  "discarding vui default display window, "
547  "original values are l:%u r:%u t:%u b:%u\n",
552 
555  vui->def_disp_win.top_offset =
556  vui->def_disp_win.bottom_offset = 0;
557  }
558  }
559 
561 
562  if (vui->vui_timing_info_present_flag) {
563  if( get_bits_left(gb) < 66) {
564  // The alternate syntax seem to have timing info located
565  // at where def_disp_win is normally located
567  "Strange VUI timing information, retrying...\n");
569  memset(&vui->def_disp_win, 0, sizeof(vui->def_disp_win));
570  memcpy(gb, &backup, sizeof(backup));
571  alt = 1;
572  }
573  vui->vui_num_units_in_tick = get_bits_long(gb, 32);
574  vui->vui_time_scale = get_bits_long(gb, 32);
575  if (alt) {
576  av_log(s->avctx, AV_LOG_INFO, "Retry got %i/%i fps\n",
578  }
584  decode_hrd(s, 1, sps->max_sub_layers);
585  }
586 
588  if (vui->bitstream_restriction_flag) {
597  }
598 }
599 
601 {
602  int matrixId;
603 
604  for (matrixId = 0; matrixId < 6; matrixId++) {
605  // 4x4 default is 16
606  memset(sl->sl[0][matrixId], 16, 16);
607  sl->sl_dc[0][matrixId] = 16; // default for 16x16
608  sl->sl_dc[1][matrixId] = 16; // default for 32x32
609  }
610  memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
611  memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
612  memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
613  memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
614  memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
615  memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
616  memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
617  memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
618  memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
619  memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
620  memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
621  memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
622  memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
623  memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
624  memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
625  memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
626  memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
627  memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
628 }
629 
631 {
632  GetBitContext *gb = &s->HEVClc->gb;
633  uint8_t scaling_list_pred_mode_flag;
634  int32_t scaling_list_dc_coef[2][6];
635  int size_id, matrix_id, pos;
636  int i;
637 
638  for (size_id = 0; size_id < 4; size_id++)
639  for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
640  scaling_list_pred_mode_flag = get_bits1(gb);
641  if (!scaling_list_pred_mode_flag) {
642  unsigned int delta = get_ue_golomb_long(gb);
643  /* Only need to handle non-zero delta. Zero means default,
644  * which should already be in the arrays. */
645  if (delta) {
646  // Copy from previous array.
647  if (matrix_id < delta) {
649  "Invalid delta in scaling list data: %d.\n", delta);
650  return AVERROR_INVALIDDATA;
651  }
652 
653  memcpy(sl->sl[size_id][matrix_id],
654  sl->sl[size_id][matrix_id - delta],
655  size_id > 0 ? 64 : 16);
656  if (size_id > 1)
657  sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
658  }
659  } else {
660  int next_coef, coef_num;
661  int32_t scaling_list_delta_coef;
662 
663  next_coef = 8;
664  coef_num = FFMIN(64, 1 << (4 + (size_id << 1)));
665  if (size_id > 1) {
666  scaling_list_dc_coef[size_id - 2][matrix_id] = get_se_golomb(gb) + 8;
667  next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
668  sl->sl_dc[size_id - 2][matrix_id] = next_coef;
669  }
670  for (i = 0; i < coef_num; i++) {
671  if (size_id == 0)
672  pos = 4 * ff_hevc_diag_scan4x4_y[i] +
674  else
675  pos = 8 * ff_hevc_diag_scan8x8_y[i] +
677 
678  scaling_list_delta_coef = get_se_golomb(gb);
679  next_coef = (next_coef + scaling_list_delta_coef + 256) % 256;
680  sl->sl[size_id][matrix_id][pos] = next_coef;
681  }
682  }
683  }
684 
685  if (sps->chroma_format_idc == 3) {
686  for (i = 0; i < 64; i++) {
687  sl->sl[3][1][i] = sl->sl[2][1][i];
688  sl->sl[3][2][i] = sl->sl[2][2][i];
689  sl->sl[3][4][i] = sl->sl[2][4][i];
690  sl->sl[3][5][i] = sl->sl[2][5][i];
691  }
692  sl->sl_dc[1][1] = sl->sl_dc[0][1];
693  sl->sl_dc[1][2] = sl->sl_dc[0][2];
694  sl->sl_dc[1][4] = sl->sl_dc[0][4];
695  sl->sl_dc[1][5] = sl->sl_dc[0][5];
696  }
697 
698 
699  return 0;
700 }
701 
703 {
704  const AVPixFmtDescriptor *desc;
705  GetBitContext *gb = &s->HEVClc->gb;
706  int ret = 0;
707  unsigned int sps_id = 0;
708  int log2_diff_max_min_transform_block_size;
709  int bit_depth_chroma, start, vui_present, sublayer_ordering_info;
710  int i;
711 
712  HEVCSPS *sps;
713  AVBufferRef *sps_buf = av_buffer_allocz(sizeof(*sps));
714 
715  if (!sps_buf)
716  return AVERROR(ENOMEM);
717  sps = (HEVCSPS*)sps_buf->data;
718 
719  av_log(s->avctx, AV_LOG_DEBUG, "Decoding SPS\n");
720 
721  // Coded parameters
722 
723  sps->vps_id = get_bits(gb, 4);
724  if (sps->vps_id >= MAX_VPS_COUNT) {
725  av_log(s->avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", sps->vps_id);
726  ret = AVERROR_INVALIDDATA;
727  goto err;
728  }
729 
730  if (!s->vps_list[sps->vps_id]) {
731  av_log(s->avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
732  sps->vps_id);
733  ret = AVERROR_INVALIDDATA;
734  goto err;
735  }
736 
737  sps->max_sub_layers = get_bits(gb, 3) + 1;
738  if (sps->max_sub_layers > MAX_SUB_LAYERS) {
739  av_log(s->avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
740  sps->max_sub_layers);
741  ret = AVERROR_INVALIDDATA;
742  goto err;
743  }
744 
745  skip_bits1(gb); // temporal_id_nesting_flag
746 
747  if (parse_ptl(s, &sps->ptl, sps->max_sub_layers) < 0)
748  goto err;
749 
750  sps_id = get_ue_golomb_long(gb);
751  if (sps_id >= MAX_SPS_COUNT) {
752  av_log(s->avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", sps_id);
753  ret = AVERROR_INVALIDDATA;
754  goto err;
755  }
756 
758 
759  if (sps->chroma_format_idc == 3)
761 
763  sps->chroma_format_idc = 0;
764 
765  sps->width = get_ue_golomb_long(gb);
766  sps->height = get_ue_golomb_long(gb);
767  if ((ret = av_image_check_size(sps->width,
768  sps->height, 0, s->avctx)) < 0)
769  goto err;
770 
771  if (get_bits1(gb)) { // pic_conformance_flag
772  //TODO: * 2 is only valid for 420
777 
780  "discarding sps conformance window, "
781  "original values are l:%u r:%u t:%u b:%u\n",
786 
789  sps->pic_conf_win.top_offset =
790  sps->pic_conf_win.bottom_offset = 0;
791  }
792  sps->output_window = sps->pic_conf_win;
793  }
794 
795  sps->bit_depth = get_ue_golomb_long(gb) + 8;
796  bit_depth_chroma = get_ue_golomb_long(gb) + 8;
797  if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
799  "Luma bit depth (%d) is different from chroma bit depth (%d), "
800  "this is unsupported.\n",
801  sps->bit_depth, bit_depth_chroma);
802  ret = AVERROR_INVALIDDATA;
803  goto err;
804  }
805 
806  switch (sps->bit_depth) {
807  case 8:
808  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
809  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
810  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
811  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
812  break;
813  case 9:
814  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
815  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
816  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
817  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
818  break;
819  case 10:
820  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
821  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
822  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
823  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
824  break;
825  case 12:
826  if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
827  if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
828  if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
829  if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
830  break;
831  default:
833  "4:2:0, 4:2:2, 4:4:4 supports are currently specified for 8, 10 and 12 bits.\n");
834  ret = AVERROR_PATCHWELCOME;
835  goto err;
836  }
837 
838  desc = av_pix_fmt_desc_get(sps->pix_fmt);
839  if (!desc) {
840  ret = AVERROR(EINVAL);
841  goto err;
842  }
843 
844  sps->hshift[0] = sps->vshift[0] = 0;
845  sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
846  sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
847 
848  sps->pixel_shift = sps->bit_depth > 8;
849 
850  sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
851  if (sps->log2_max_poc_lsb > 16) {
852  av_log(s->avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
853  sps->log2_max_poc_lsb - 4);
854  ret = AVERROR_INVALIDDATA;
855  goto err;
856  }
857 
858  sublayer_ordering_info = get_bits1(gb);
859  start = sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
860  for (i = start; i < sps->max_sub_layers; i++) {
865  av_log(s->avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
867  ret = AVERROR_INVALIDDATA;
868  goto err;
869  }
871  av_log(s->avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
873  if (s->avctx->err_recognition & AV_EF_EXPLODE ||
875  ret = AVERROR_INVALIDDATA;
876  goto err;
877  }
879  }
880  }
881 
882  if (!sublayer_ordering_info) {
883  for (i = 0; i < start; i++) {
887  }
888  }
889 
890  sps->log2_min_cb_size = get_ue_golomb_long(gb) + 3;
892  sps->log2_min_tb_size = get_ue_golomb_long(gb) + 2;
893  log2_diff_max_min_transform_block_size = get_ue_golomb_long(gb);
894  sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
895  sps->log2_min_tb_size;
896 
897  if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
898  av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
899  ret = AVERROR_INVALIDDATA;
900  goto err;
901  }
902 
903  if (sps->log2_diff_max_min_coding_block_size > 30) {
904  av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_coding_block_size", sps->log2_diff_max_min_coding_block_size);
905  ret = AVERROR_INVALIDDATA;
906  goto err;
907  }
908 
909  if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
910  av_log(s->avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
911  ret = AVERROR_INVALIDDATA;
912  goto err;
913  }
914 
915  if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
916  av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
917  ret = AVERROR_INVALIDDATA;
918  goto err;
919  }
920 
923 
925  if (sps->scaling_list_enable_flag) {
927 
928  if (get_bits1(gb)) {
929  ret = scaling_list_data(s, &sps->scaling_list, sps);
930  if (ret < 0)
931  goto err;
932  }
933  }
934 
935  sps->amp_enabled_flag = get_bits1(gb);
936  sps->sao_enabled = get_bits1(gb);
937 
938  sps->pcm_enabled_flag = get_bits1(gb);
939  if (sps->pcm_enabled_flag) {
940  sps->pcm.bit_depth = get_bits(gb, 4) + 1;
941  sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
944  get_ue_golomb_long(gb);
945  if (sps->pcm.bit_depth > sps->bit_depth) {
947  "PCM bit depth (%d) is greater than normal bit depth (%d)\n",
948  sps->pcm.bit_depth, sps->bit_depth);
949  ret = AVERROR_INVALIDDATA;
950  goto err;
951  }
952 
954  }
955 
956  sps->nb_st_rps = get_ue_golomb_long(gb);
957  if (sps->nb_st_rps > MAX_SHORT_TERM_RPS_COUNT) {
958  av_log(s->avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
959  sps->nb_st_rps);
960  ret = AVERROR_INVALIDDATA;
961  goto err;
962  }
963  for (i = 0; i < sps->nb_st_rps; i++) {
964  if ((ret = ff_hevc_decode_short_term_rps(s, &sps->st_rps[i],
965  sps, 0)) < 0)
966  goto err;
967  }
968 
972  if (sps->num_long_term_ref_pics_sps > 31U) {
973  av_log(s->avctx, AV_LOG_ERROR, "num_long_term_ref_pics_sps %d is out of range.\n",
975  goto err;
976  }
977  for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
980  }
981  }
982 
985  sps->vui.sar = (AVRational){0, 1};
986  vui_present = get_bits1(gb);
987  if (vui_present)
988  decode_vui(s, sps);
989 
990  if (get_bits1(gb)) { // sps_extension_flag
991  int sps_extension_flag[1];
992  for (i = 0; i < 1; i++)
993  sps_extension_flag[i] = get_bits1(gb);
994  skip_bits(gb, 7); //sps_extension_7bits = get_bits(gb, 7);
995  if (sps_extension_flag[0]) {
996  int extended_precision_processing_flag;
997  int high_precision_offsets_enabled_flag;
998  int cabac_bypass_alignment_enabled_flag;
999 
1003 
1005 
1006  extended_precision_processing_flag = get_bits1(gb);
1007  if (extended_precision_processing_flag)
1009  "extended_precision_processing_flag not yet implemented\n");
1010 
1012  high_precision_offsets_enabled_flag = get_bits1(gb);
1013  if (high_precision_offsets_enabled_flag)
1015  "high_precision_offsets_enabled_flag not yet implemented\n");
1016 
1018 
1019  cabac_bypass_alignment_enabled_flag = get_bits1(gb);
1020  if (cabac_bypass_alignment_enabled_flag)
1022  "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1023  }
1024  }
1025  if (s->apply_defdispwin) {
1030  }
1031  if (sps->output_window.left_offset & (0x1F >> (sps->pixel_shift)) &&
1032  !(s->avctx->flags & CODEC_FLAG_UNALIGNED)) {
1033  sps->output_window.left_offset &= ~(0x1F >> (sps->pixel_shift));
1034  av_log(s->avctx, AV_LOG_WARNING, "Reducing left output window to %d "
1035  "chroma samples to preserve alignment.\n",
1036  sps->output_window.left_offset);
1037  }
1038  sps->output_width = sps->width -
1040  sps->output_height = sps->height -
1042  if (sps->output_width <= 0 || sps->output_height <= 0) {
1043  av_log(s->avctx, AV_LOG_WARNING, "Invalid visible frame dimensions: %dx%d.\n",
1044  sps->output_width, sps->output_height);
1045  if (s->avctx->err_recognition & AV_EF_EXPLODE) {
1046  ret = AVERROR_INVALIDDATA;
1047  goto err;
1048  }
1050  "Displaying the whole video surface.\n");
1051  memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
1052  memset(&sps->output_window, 0, sizeof(sps->output_window));
1053  sps->output_width = sps->width;
1054  sps->output_height = sps->height;
1055  }
1056 
1057  // Inferred parameters
1058  sps->log2_ctb_size = sps->log2_min_cb_size +
1060  sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
1061 
1062  sps->ctb_width = (sps->width + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1063  sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
1064  sps->ctb_size = sps->ctb_width * sps->ctb_height;
1065 
1066  sps->min_cb_width = sps->width >> sps->log2_min_cb_size;
1067  sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
1068  sps->min_tb_width = sps->width >> sps->log2_min_tb_size;
1069  sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
1070  sps->min_pu_width = sps->width >> sps->log2_min_pu_size;
1071  sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
1072  sps->tb_mask = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
1073 
1074  sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
1075 
1076  if (sps->width & ((1 << sps->log2_min_cb_size) - 1) ||
1077  sps->height & ((1 << sps->log2_min_cb_size) - 1)) {
1078  av_log(s->avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
1079  goto err;
1080  }
1081 
1082  if (sps->log2_ctb_size > MAX_LOG2_CTB_SIZE) {
1083  av_log(s->avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
1084  goto err;
1085  }
1086  if (sps->log2_ctb_size < 4) {
1087  av_log(s->avctx,
1088  AV_LOG_ERROR,
1089  "log2_ctb_size %d differs from the bounds of any known profile\n",
1090  sps->log2_ctb_size);
1091  avpriv_request_sample(s->avctx, "log2_ctb_size %d", sps->log2_ctb_size);
1092  goto err;
1093  }
1095  av_log(s->avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
1097  goto err;
1098  }
1100  av_log(s->avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
1102  goto err;
1103  }
1104  if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
1106  "max transform block size out of range: %d\n",
1107  sps->log2_max_trafo_size);
1108  goto err;
1109  }
1110 
1111  if (get_bits_left(gb) < 0) {
1113  "Overread SPS by %d bits\n", -get_bits_left(gb));
1114  goto err;
1115  }
1116 
1117  if (s->avctx->debug & FF_DEBUG_BITSTREAM) {
1119  "Parsed SPS: id %d; coded wxh: %dx%d; "
1120  "cropped wxh: %dx%d; pix_fmt: %s.\n",
1121  sps_id, sps->width, sps->height,
1122  sps->output_width, sps->output_height,
1124  }
1125 
1126  /* check if this is a repeat of an already parsed SPS, then keep the
1127  * original one.
1128  * otherwise drop all PPSes that depend on it */
1129  if (s->sps_list[sps_id] &&
1130  !memcmp(s->sps_list[sps_id]->data, sps_buf->data, sps_buf->size)) {
1131  av_buffer_unref(&sps_buf);
1132  } else {
1133  for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++) {
1134  if (s->pps_list[i] && ((HEVCPPS*)s->pps_list[i]->data)->sps_id == sps_id)
1135  av_buffer_unref(&s->pps_list[i]);
1136  }
1137  if (s->sps_list[sps_id] && s->sps == (HEVCSPS*)s->sps_list[sps_id]->data) {
1139  s->current_sps = av_buffer_ref(s->sps_list[sps_id]);
1140  if (!s->current_sps)
1141  s->sps = NULL;
1142  }
1143  av_buffer_unref(&s->sps_list[sps_id]);
1144  s->sps_list[sps_id] = sps_buf;
1145  }
1146 
1147  return 0;
1148 
1149 err:
1150  av_buffer_unref(&sps_buf);
1151  return ret;
1152 }
1153 
1154 static void hevc_pps_free(void *opaque, uint8_t *data)
1155 {
1156  HEVCPPS *pps = (HEVCPPS*)data;
1157 
1158  av_freep(&pps->column_width);
1159  av_freep(&pps->row_height);
1160  av_freep(&pps->col_bd);
1161  av_freep(&pps->row_bd);
1162  av_freep(&pps->col_idxX);
1163  av_freep(&pps->ctb_addr_rs_to_ts);
1164  av_freep(&pps->ctb_addr_ts_to_rs);
1165  av_freep(&pps->tile_pos_rs);
1166  av_freep(&pps->tile_id);
1168 
1169  av_freep(&pps);
1170 }
1171 
1173  GetBitContext *gb = &s->HEVClc->gb;
1174  int i;
1175 
1176  if (pps->transform_skip_enabled_flag) {
1178  }
1186  "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1187  return AVERROR_INVALIDDATA;
1188  }
1189  for (i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
1190  pps->cb_qp_offset_list[i] = get_se_golomb_long(gb);
1191  if (pps->cb_qp_offset_list[i]) {
1193  "cb_qp_offset_list not tested yet.\n");
1194  }
1195  pps->cr_qp_offset_list[i] = get_se_golomb_long(gb);
1196  if (pps->cr_qp_offset_list[i]) {
1198  "cb_qp_offset_list not tested yet.\n");
1199  }
1200  }
1201  }
1204 
1205  return(0);
1206 }
1207 
1209 {
1210  GetBitContext *gb = &s->HEVClc->gb;
1211  HEVCSPS *sps = NULL;
1212  int pic_area_in_ctbs;
1213  int log2_diff_ctb_min_tb_size;
1214  int i, j, x, y, ctb_addr_rs, tile_id;
1215  int ret = 0;
1216  unsigned int pps_id = 0;
1217 
1218  AVBufferRef *pps_buf;
1219  HEVCPPS *pps = av_mallocz(sizeof(*pps));
1220 
1221  if (!pps)
1222  return AVERROR(ENOMEM);
1223 
1224  pps_buf = av_buffer_create((uint8_t *)pps, sizeof(*pps),
1225  hevc_pps_free, NULL, 0);
1226  if (!pps_buf) {
1227  av_freep(&pps);
1228  return AVERROR(ENOMEM);
1229  }
1230 
1231  av_log(s->avctx, AV_LOG_DEBUG, "Decoding PPS\n");
1232 
1233  // Default values
1235  pps->num_tile_columns = 1;
1236  pps->num_tile_rows = 1;
1237  pps->uniform_spacing_flag = 1;
1238  pps->disable_dbf = 0;
1239  pps->beta_offset = 0;
1240  pps->tc_offset = 0;
1242 
1243  // Coded parameters
1244  pps_id = get_ue_golomb_long(gb);
1245  if (pps_id >= MAX_PPS_COUNT) {
1246  av_log(s->avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
1247  ret = AVERROR_INVALIDDATA;
1248  goto err;
1249  }
1250  pps->sps_id = get_ue_golomb_long(gb);
1251  if (pps->sps_id >= MAX_SPS_COUNT) {
1252  av_log(s->avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
1253  ret = AVERROR_INVALIDDATA;
1254  goto err;
1255  }
1256  if (!s->sps_list[pps->sps_id]) {
1257  av_log(s->avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
1258  ret = AVERROR_INVALIDDATA;
1259  goto err;
1260  }
1261  sps = (HEVCSPS *)s->sps_list[pps->sps_id]->data;
1262 
1265  pps->num_extra_slice_header_bits = get_bits(gb, 3);
1266 
1267  pps->sign_data_hiding_flag = get_bits1(gb);
1268 
1270 
1273 
1275 
1278 
1280  pps->diff_cu_qp_delta_depth = 0;
1281  if (pps->cu_qp_delta_enabled_flag)
1283 
1284  if (pps->diff_cu_qp_delta_depth < 0 ||
1286  av_log(s->avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
1287  pps->diff_cu_qp_delta_depth);
1288  ret = AVERROR_INVALIDDATA;
1289  goto err;
1290  }
1291 
1292  pps->cb_qp_offset = get_se_golomb(gb);
1293  if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
1294  av_log(s->avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
1295  pps->cb_qp_offset);
1296  ret = AVERROR_INVALIDDATA;
1297  goto err;
1298  }
1299  pps->cr_qp_offset = get_se_golomb(gb);
1300  if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
1301  av_log(s->avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
1302  pps->cr_qp_offset);
1303  ret = AVERROR_INVALIDDATA;
1304  goto err;
1305  }
1307 
1308  pps->weighted_pred_flag = get_bits1(gb);
1309  pps->weighted_bipred_flag = get_bits1(gb);
1310 
1312  pps->tiles_enabled_flag = get_bits1(gb);
1314 
1315  if (pps->tiles_enabled_flag) {
1316  pps->num_tile_columns = get_ue_golomb_long(gb) + 1;
1317  pps->num_tile_rows = get_ue_golomb_long(gb) + 1;
1318  if (pps->num_tile_columns == 0 ||
1319  pps->num_tile_columns >= sps->width) {
1320  av_log(s->avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
1321  pps->num_tile_columns - 1);
1322  ret = AVERROR_INVALIDDATA;
1323  goto err;
1324  }
1325  if (pps->num_tile_rows == 0 ||
1326  pps->num_tile_rows >= sps->height) {
1327  av_log(s->avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
1328  pps->num_tile_rows - 1);
1329  ret = AVERROR_INVALIDDATA;
1330  goto err;
1331  }
1332 
1333  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1334  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1335  if (!pps->column_width || !pps->row_height) {
1336  ret = AVERROR(ENOMEM);
1337  goto err;
1338  }
1339 
1340  pps->uniform_spacing_flag = get_bits1(gb);
1341  if (!pps->uniform_spacing_flag) {
1342  uint64_t sum = 0;
1343  for (i = 0; i < pps->num_tile_columns - 1; i++) {
1344  pps->column_width[i] = get_ue_golomb_long(gb) + 1;
1345  sum += pps->column_width[i];
1346  }
1347  if (sum >= sps->ctb_width) {
1348  av_log(s->avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
1349  ret = AVERROR_INVALIDDATA;
1350  goto err;
1351  }
1352  pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
1353 
1354  sum = 0;
1355  for (i = 0; i < pps->num_tile_rows - 1; i++) {
1356  pps->row_height[i] = get_ue_golomb_long(gb) + 1;
1357  sum += pps->row_height[i];
1358  }
1359  if (sum >= sps->ctb_height) {
1360  av_log(s->avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
1361  ret = AVERROR_INVALIDDATA;
1362  goto err;
1363  }
1364  pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
1365  }
1367  }
1368 
1370 
1374  pps->disable_dbf = get_bits1(gb);
1375  if (!pps->disable_dbf) {
1376  pps->beta_offset = get_se_golomb(gb) * 2;
1377  pps->tc_offset = get_se_golomb(gb) * 2;
1378  if (pps->beta_offset/2 < -6 || pps->beta_offset/2 > 6) {
1379  av_log(s->avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
1380  pps->beta_offset/2);
1381  ret = AVERROR_INVALIDDATA;
1382  goto err;
1383  }
1384  if (pps->tc_offset/2 < -6 || pps->tc_offset/2 > 6) {
1385  av_log(s->avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
1386  pps->tc_offset/2);
1387  ret = AVERROR_INVALIDDATA;
1388  goto err;
1389  }
1390  }
1391  }
1392 
1394  if (pps->scaling_list_data_present_flag) {
1396  ret = scaling_list_data(s, &pps->scaling_list, sps);
1397  if (ret < 0)
1398  goto err;
1399  }
1402  if (pps->log2_parallel_merge_level > sps->log2_ctb_size) {
1403  av_log(s->avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
1404  pps->log2_parallel_merge_level - 2);
1405  ret = AVERROR_INVALIDDATA;
1406  goto err;
1407  }
1408 
1410 
1411  if (get_bits1(gb)) { // pps_extension_present_flag
1412  int pps_range_extensions_flag = get_bits1(gb);
1413  /* int pps_extension_7bits = */ get_bits(gb, 7);
1414  if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_REXT && pps_range_extensions_flag) {
1415  if ((ret = pps_range_extensions(s, pps, sps)) < 0)
1416  goto err;
1417  }
1418  }
1419 
1420  // Inferred parameters
1421  pps->col_bd = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
1422  pps->row_bd = av_malloc_array(pps->num_tile_rows + 1, sizeof(*pps->row_bd));
1423  pps->col_idxX = av_malloc_array(sps->ctb_width, sizeof(*pps->col_idxX));
1424  if (!pps->col_bd || !pps->row_bd || !pps->col_idxX) {
1425  ret = AVERROR(ENOMEM);
1426  goto err;
1427  }
1428 
1429  if (pps->uniform_spacing_flag) {
1430  if (!pps->column_width) {
1431  pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
1432  pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
1433  }
1434  if (!pps->column_width || !pps->row_height) {
1435  ret = AVERROR(ENOMEM);
1436  goto err;
1437  }
1438 
1439  for (i = 0; i < pps->num_tile_columns; i++) {
1440  pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
1441  (i * sps->ctb_width) / pps->num_tile_columns;
1442  }
1443 
1444  for (i = 0; i < pps->num_tile_rows; i++) {
1445  pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
1446  (i * sps->ctb_height) / pps->num_tile_rows;
1447  }
1448  }
1449 
1450  pps->col_bd[0] = 0;
1451  for (i = 0; i < pps->num_tile_columns; i++)
1452  pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
1453 
1454  pps->row_bd[0] = 0;
1455  for (i = 0; i < pps->num_tile_rows; i++)
1456  pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
1457 
1458  for (i = 0, j = 0; i < sps->ctb_width; i++) {
1459  if (i > pps->col_bd[j])
1460  j++;
1461  pps->col_idxX[i] = j;
1462  }
1463 
1464  /**
1465  * 6.5
1466  */
1467  pic_area_in_ctbs = sps->ctb_width * sps->ctb_height;
1468 
1469  pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_rs_to_ts));
1470  pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->ctb_addr_ts_to_rs));
1471  pps->tile_id = av_malloc_array(pic_area_in_ctbs, sizeof(*pps->tile_id));
1472  pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
1473  if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
1474  !pps->tile_id || !pps->min_tb_addr_zs_tab) {
1475  ret = AVERROR(ENOMEM);
1476  goto err;
1477  }
1478 
1479  for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1480  int tb_x = ctb_addr_rs % sps->ctb_width;
1481  int tb_y = ctb_addr_rs / sps->ctb_width;
1482  int tile_x = 0;
1483  int tile_y = 0;
1484  int val = 0;
1485 
1486  for (i = 0; i < pps->num_tile_columns; i++) {
1487  if (tb_x < pps->col_bd[i + 1]) {
1488  tile_x = i;
1489  break;
1490  }
1491  }
1492 
1493  for (i = 0; i < pps->num_tile_rows; i++) {
1494  if (tb_y < pps->row_bd[i + 1]) {
1495  tile_y = i;
1496  break;
1497  }
1498  }
1499 
1500  for (i = 0; i < tile_x; i++)
1501  val += pps->row_height[tile_y] * pps->column_width[i];
1502  for (i = 0; i < tile_y; i++)
1503  val += sps->ctb_width * pps->row_height[i];
1504 
1505  val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
1506  tb_x - pps->col_bd[tile_x];
1507 
1508  pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
1509  pps->ctb_addr_ts_to_rs[val] = ctb_addr_rs;
1510  }
1511 
1512  for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
1513  for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
1514  for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
1515  for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
1516  pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
1517 
1518  pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
1519  if (!pps->tile_pos_rs) {
1520  ret = AVERROR(ENOMEM);
1521  goto err;
1522  }
1523 
1524  for (j = 0; j < pps->num_tile_rows; j++)
1525  for (i = 0; i < pps->num_tile_columns; i++)
1526  pps->tile_pos_rs[j * pps->num_tile_columns + i] = pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
1527 
1528  log2_diff_ctb_min_tb_size = sps->log2_ctb_size - sps->log2_min_tb_size;
1529  pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
1530  for (y = 0; y < sps->tb_mask+2; y++) {
1531  pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
1532  pps->min_tb_addr_zs_tab[y] = -1;
1533  }
1534  for (y = 0; y < sps->tb_mask+1; y++) {
1535  for (x = 0; x < sps->tb_mask+1; x++) {
1536  int tb_x = x >> log2_diff_ctb_min_tb_size;
1537  int tb_y = y >> log2_diff_ctb_min_tb_size;
1538  int ctb_addr_rs = sps->ctb_width * tb_y + tb_x;
1539  int val = pps->ctb_addr_rs_to_ts[ctb_addr_rs] <<
1540  (log2_diff_ctb_min_tb_size * 2);
1541  for (i = 0; i < log2_diff_ctb_min_tb_size; i++) {
1542  int m = 1 << i;
1543  val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1544  }
1545  pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
1546  }
1547  }
1548 
1549  if (get_bits_left(gb) < 0) {
1551  "Overread PPS by %d bits\n", -get_bits_left(gb));
1552  goto err;
1553  }
1554 
1555  av_buffer_unref(&s->pps_list[pps_id]);
1556  s->pps_list[pps_id] = pps_buf;
1557 
1558  return 0;
1559 
1560 err:
1561  av_buffer_unref(&pps_buf);
1562  return ret;
1563 }