36 16, 16, 16, 16, 17, 18, 21, 24,
37 16, 16, 16, 16, 17, 19, 22, 25,
38 16, 16, 17, 18, 20, 22, 25, 29,
39 16, 16, 18, 21, 24, 27, 31, 36,
40 17, 17, 20, 24, 30, 35, 41, 47,
41 18, 19, 22, 27, 35, 44, 54, 65,
42 21, 22, 25, 31, 41, 54, 70, 88,
43 24, 25, 29, 36, 47, 65, 88, 115
47 16, 16, 16, 16, 17, 18, 20, 24,
48 16, 16, 16, 17, 18, 20, 24, 25,
49 16, 16, 17, 18, 20, 24, 25, 28,
50 16, 17, 18, 20, 24, 25, 28, 33,
51 17, 18, 20, 24, 25, 28, 33, 41,
52 18, 20, 24, 25, 28, 33, 41, 54,
53 20, 24, 25, 28, 33, 41, 54, 71,
54 24, 25, 28, 33, 41, 54, 71, 91
68 if (
s->sps_list[
id]) {
71 if (
s->pps_list[
i] &&
s->pps_list[
i]->sps_id ==
id)
81 if (
s->vps_list[
id]) {
83 if (
s->sps_list[
i] &&
s->sps_list[
i]->vps_id ==
id)
100 if (rps !=
sps->st_rps &&
sps->nb_st_rps)
105 uint8_t used[32] = { 0 };
108 if (is_slice_header) {
112 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
119 rps_ridx = &
sps->st_rps[rps -
sps->st_rps - 1];
125 "Invalid value of abs_delta_rps: %d\n",
138 if (i < rps_ridx->num_delta_pocs)
139 delta_poc = delta_rps + rps_ridx->
delta_poc[
i];
141 delta_poc = delta_rps;
151 "Invalid num_delta_pocs: %d\n", k);
163 for (k =
i - 1; k >= 0; k--) {
165 if (delta_poc <
tmp) {
167 used[k + 1] = used[k];
190 rps->
used |= (uint32_t)used[
i] <<
i;
192 unsigned int nb_positive_pics;
209 if (delta_poc < 1 || delta_poc > 32768) {
211 "Invalid value of delta_poc: %d\n",
220 for (
i = 0;
i < nb_positive_pics;
i++) {
222 if (delta_poc < 1 || delta_poc > 32768) {
224 "Invalid value of delta_poc: %d\n",
251 const char *profile_name =
NULL;
258 "%s profile bitstream\n", profile_name ? profile_name :
"Unknown");
261 for (
i = 0;
i < 32;
i++) {
264 if (
ptl->profile_idc == 0 &&
i > 0 &&
ptl->profile_compatibility_flag[
i])
265 ptl->profile_idc =
i;
272 #define check_profile_idc(idc) \
273 ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
308 #undef check_profile_idc
314 int profile_present,
PTL *
ptl,
int max_num_sub_layers)
318 if (profile_present) {
321 memset(&
ptl->general_ptl, 0,
sizeof(
ptl->general_ptl));
331 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
336 if (max_num_sub_layers - 1> 0)
337 for (
i = max_num_sub_layers - 1;
i < 8;
i++)
339 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
343 "PTL information for sublayer %i too short\n",
i);
349 "Not enough data for sublayer %i level_idc\n",
i);
364 for (
i = 0;
i < nb_cpb;
i++) {
368 if (subpic_params_present) {
380 if (common_inf_present) {
407 for (
int i = 0;
i < max_sublayers;
i++) {
408 unsigned fixed_pic_rate_general_flag =
get_bits1(gb);
409 unsigned fixed_pic_rate_within_cvs_flag = 0;
410 unsigned low_delay_hrd_flag = 0;
413 if (!fixed_pic_rate_general_flag)
414 fixed_pic_rate_within_cvs_flag =
get_bits1(gb);
417 if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
423 if (!low_delay_hrd_flag) {
425 if (cpb_cnt_minus1 > 31) {
460 uint64_t layer1_id_included)
464 uint8_t dimension_id_len[16] = {0};
465 uint8_t dimension_id[16] = {0};
468 int splitting_flag, view_id_len, num_add_olss, num_scalability_types,
469 default_output_layer_idc, direct_dep_type_len, direct_dep_type,
470 sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
471 unsigned non_vui_extension_length;
473 if (
vps->vps_max_layers == 1) {
478 if (
vps->vps_max_layers > 2) {
480 "VPS has %d layers, only 2 layers are supported\n",
481 vps->vps_max_layers);
484 if (
vps->vps_num_layer_sets > 2) {
486 "VPS has %d layer sets, only 2 layer sets are supported\n",
487 vps->vps_num_layer_sets);
527 if (
parse_ptl(gb, avctx, 0, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
533 if (!num_scalability_types) {
538 if (!(
vps->scalability_mask_flag &
541 15 -
ff_ctz(
vps->scalability_mask_flag));
545 if (num_scalability_types > 1)
549 for (
int i = 0;
i < num_scalability_types - splitting_flag;
i++) {
550 dimension_id_len[
i] =
get_bits(gb, 3) + 1;
551 n += dimension_id_len[
i];
554 dimension_id_len[num_scalability_types - 1] = 5 - n;
557 int layer_id_in_nuh =
get_bits(gb, 6);
563 vps->layer_idx[layer_id_in_nuh] = 1;
564 vps->layer_id_in_nuh[1] = layer_id_in_nuh;
566 vps->layer_idx[1] = 1;
567 vps->layer_id_in_nuh[1] = 1;
570 if (!splitting_flag) {
573 for (
int i = 0;
i < num_scalability_types;
i++)
574 dimension_id[
i] =
get_bits(gb, dimension_id_len[
i]);
583 "Unsupported dimension_id %d for HEVC_SCALABILITY_AUXILIARY\n",
584 dimension_id[
index]);
592 for (
int i = 0;
i < n;
i++)
598 if (!
vps->num_direct_ref_layers[1]) {
600 if (
vps->num_add_layer_sets > 1) {
602 "Unsupported num_add_layer_sets: %d\n",
vps->num_add_layer_sets);
606 if (
vps->num_add_layer_sets) {
612 vps->num_output_layer_sets =
vps->vps_num_layer_sets +
vps->num_add_layer_sets;
613 if (
vps->num_output_layer_sets != 2)
617 if (sub_layers_max_present) {
618 for (
int i = 0;
i <
vps->vps_max_layers;
i++)
619 max_sub_layers[
i] = sub_layers_max_present ?
get_bits(gb, 3) + 1 :
620 vps->vps_max_sub_layers;
632 for (
int i = 2;
i < nb_ptl;
i++) {
634 if (
parse_ptl(gb, avctx, profile_present, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
639 if (num_add_olss != 0) {
646 default_output_layer_idc =
get_bits(gb, 2);
647 if (default_output_layer_idc != 0) {
649 default_output_layer_idc);
654 if (layer1_id_included &&
655 layer1_id_included != ((1ULL <<
vps->layer_id_in_nuh[0]) |
656 (1ULL <<
vps->layer_id_in_nuh[1]))) {
658 "Dependent layer not included in layer ID?\n");
661 if (!layer1_id_included)
666 if (
vps->vps_num_layer_sets == 1 || default_output_layer_idc == 2)
672 if (ptl_idx >= nb_ptl) {
683 vps->rep_format.pic_width_in_luma_samples =
get_bits(gb, 16);
684 vps->rep_format.pic_height_in_luma_samples =
get_bits(gb, 16);
688 "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
691 vps->rep_format.chroma_format_idc =
get_bits(gb, 2);
692 if (
vps->rep_format.chroma_format_idc == 3)
693 vps->rep_format.separate_colour_plane_flag =
get_bits1(gb);
694 vps->rep_format.bit_depth_luma =
get_bits(gb, 4) + 8;
695 vps->rep_format.bit_depth_chroma =
get_bits(gb, 4) + 8;
696 if (
vps->rep_format.bit_depth_luma > 16 ||
697 vps->rep_format.bit_depth_chroma > 16 ||
698 vps->rep_format.bit_depth_luma !=
vps->rep_format.bit_depth_chroma) {
700 vps->rep_format.bit_depth_luma,
vps->rep_format.bit_depth_chroma);
715 if (!
vps->num_direct_ref_layers[1])
718 sub_layer_flag_info_present_flag =
get_bits1(gb);
719 for (
int j = 0; j <
FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
720 int sub_layer_dpb_info_present_flag = 1;
721 if (j > 0 && sub_layer_flag_info_present_flag)
722 sub_layer_dpb_info_present_flag =
get_bits1(gb);
723 if (sub_layer_dpb_info_present_flag) {
732 if (direct_dep_type_len > 32) {
734 direct_dep_type_len);
749 if (non_vui_extension_length > 4096) {
751 non_vui_extension_length);
769 uint64_t layer1_id_included = 0;
770 unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
786 vps->data_size = nal_size;
792 vps->vps_id = vps_id;
794 vps_base_layer_internal_flag =
get_bits1(gb);
795 vps_base_layer_available_flag =
get_bits1(gb);
796 if (!vps_base_layer_internal_flag || !vps_base_layer_available_flag) {
798 "vps_base_layer_internal_flag or vps_base_layer_available_flag not set\n");
814 vps->vps_max_sub_layers);
821 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
823 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
824 for (;
i <
vps->vps_max_sub_layers;
i++) {
831 vps->vps_max_dec_pic_buffering[
i] - 1);
834 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
836 vps->vps_num_reorder_pics[
i]);
844 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
850 vps->num_output_layer_sets = 1;
854 if (
vps->vps_num_layer_sets > 1)
855 layer1_id_included =
get_bits64(gb,
vps->vps_max_layer_id + 1);
856 if (
vps->vps_num_layer_sets > 2)
860 if (
vps->vps_timing_info_present_flag) {
863 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
864 if (
vps->vps_poc_proportional_to_timing_flag)
867 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
869 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
873 if (
vps->vps_num_hrd_parameters) {
879 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
880 int common_inf_present = 1;
886 vps->vps_max_sub_layers);
891 vps->layer_idx[0] = 0;
893 vps->layer_idx[
i] = -1;
925 VUI backup_vui, *vui = &
sps->vui;
936 switch (
sps->pix_fmt) {
956 memcpy(&backup, gb,
sizeof(backup));
957 memcpy(&backup_vui, vui,
sizeof(backup_vui));
972 if (apply_defdispwin &&
975 "discarding vui default display window, "
976 "original values are l:%u r:%u t:%u b:%u\n",
997 "Strange VUI timing information, retrying...\n");
998 memcpy(vui, &backup_vui,
sizeof(backup_vui));
999 memcpy(gb, &backup,
sizeof(backup));
1021 "Strange VUI bitstream restriction information, retrying"
1022 " from timing information...\n");
1023 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1024 memcpy(gb, &backup,
sizeof(backup));
1041 "Overread in VUI, retrying from timing information...\n");
1042 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1043 memcpy(gb, &backup,
sizeof(backup));
1053 for (matrixId = 0; matrixId < 6; matrixId++) {
1055 memset(sl->
sl[0][matrixId], 16, 16);
1056 sl->
sl_dc[0][matrixId] = 16;
1057 sl->
sl_dc[1][matrixId] = 16;
1082 uint8_t scaling_list_pred_mode_flag;
1083 uint8_t scaling_list_dc_coef[2][6];
1084 int size_id, matrix_id,
pos;
1087 for (size_id = 0; size_id < 4; size_id++)
1088 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1089 scaling_list_pred_mode_flag =
get_bits1(gb);
1090 if (!scaling_list_pred_mode_flag) {
1096 delta *= (size_id == 3) ? 3 : 1;
1097 if (matrix_id <
delta) {
1099 "Invalid delta in scaling list data: %d.\n",
delta);
1103 memcpy(sl->
sl[size_id][matrix_id],
1104 sl->
sl[size_id][matrix_id -
delta],
1105 size_id > 0 ? 64 : 16);
1107 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
1110 int next_coef, coef_num;
1111 int32_t scaling_list_delta_coef;
1114 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
1117 if (scaling_list_coeff_minus8 < -7 ||
1118 scaling_list_coeff_minus8 > 247)
1120 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1121 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1122 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
1124 for (
i = 0;
i < coef_num;
i++) {
1133 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
1134 sl->
sl[size_id][matrix_id][
pos] = next_coef;
1139 if (
sps->chroma_format_idc == 3) {
1140 for (
i = 0;
i < 64;
i++) {
1141 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
1142 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
1143 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
1144 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
1159 switch (
sps->bit_depth) {
1186 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1187 "chroma_format_idc is %d, depth is %d\n",
1188 sps->chroma_format_idc,
sps->bit_depth);
1196 sps->hshift[0] =
sps->vshift[0] = 0;
1197 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
1198 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
1200 sps->pixel_shift =
sps->bit_depth > 8;
1206 unsigned nuh_layer_id,
int apply_defdispwin,
1211 int bit_depth_chroma, num_comps, multi_layer_ext;
1212 int vps_max_sub_layers;
1220 if (!vps_list[
sps->vps_id]) {
1229 multi_layer_ext = nuh_layer_id > 0 &&
1231 if (multi_layer_ext) {
1235 sps->max_sub_layers =
sps->vps->vps_max_sub_layers;
1237 vps_max_sub_layers =
sps->vps ?
sps->vps->vps_max_sub_layers
1240 if (
sps->max_sub_layers > vps_max_sub_layers) {
1242 sps->max_sub_layers);
1246 if (!multi_layer_ext) {
1252 sps->temporal_id_nesting =
sps->max_sub_layers > 1 ?
1253 sps->vps->vps_max_sub_layers : 1;
1262 if (multi_layer_ext) {
1265 if (
sps->vps->nb_layers == 1) {
1278 sps->chroma_format_idc =
sps->separate_colour_plane ? 0 :
1291 if (
sps->chroma_format_idc > 3
U) {
1296 if (
sps->chroma_format_idc == 3)
1299 if (
sps->separate_colour_plane)
1300 sps->chroma_format_idc = 0;
1305 sps->height, 0, avctx)) < 0)
1309 if (
sps->conformance_window) {
1319 "discarding sps conformance window, "
1320 "original values are l:%u r:%u t:%u b:%u\n",
1321 sps->pic_conf_win.left_offset,
1322 sps->pic_conf_win.right_offset,
1323 sps->pic_conf_win.top_offset,
1324 sps->pic_conf_win.bottom_offset);
1326 sps->pic_conf_win.left_offset =
1327 sps->pic_conf_win.right_offset =
1328 sps->pic_conf_win.top_offset =
1329 sps->pic_conf_win.bottom_offset = 0;
1334 if (
sps->bit_depth > 16) {
1340 if (bit_depth_chroma > 16) {
1345 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1347 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1348 "this is unsupported.\n",
1349 sps->bit_depth, bit_depth_chroma);
1352 sps->bit_depth_chroma = bit_depth_chroma;
1355 sps->output_window =
sps->pic_conf_win;
1362 if (
sps->log2_max_poc_lsb > 16) {
1364 sps->log2_max_poc_lsb - 4);
1368 if (!multi_layer_ext) {
1372 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1373 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1379 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1382 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1384 sps->temporal_layer[
i].num_reorder_pics);
1389 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1393 if (!
sps->sublayer_ordering_info) {
1394 for (
i = 0;
i < start;
i++) {
1395 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1396 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1397 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1401 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1402 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1403 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1404 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1412 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1413 sps->log2_min_tb_size;
1415 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1420 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1421 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);
1425 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1430 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1431 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1432 sps->log2_diff_max_min_transform_block_size);
1440 if (
sps->scaling_list_enabled) {
1459 if (
sps->pcm_enabled) {
1463 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1465 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1467 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1468 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1481 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1488 if (
sps->long_term_ref_pics_present) {
1492 sps->num_long_term_ref_pics_sps);
1496 sps->used_by_curr_pic_lt = 0;
1497 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1507 if (
sps->vui_present)
1511 if (
sps->extension_present) {
1518 if (
sps->range_extension) {
1525 if (
sps->extended_precision_processing)
1527 "extended_precision_processing_flag not yet implemented\n");
1531 if (
sps->high_precision_offsets_enabled)
1533 "high_precision_offsets_enabled_flag not yet implemented\n");
1535 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1538 if (
sps->cabac_bypass_alignment_enabled)
1540 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1543 if (
sps->multilayer_extension) {
1547 if (
sps->sps_3d_extension) {
1548 for (
i = 0;
i <= 1;
i++) {
1568 "sps_3d_extension_flag not yet implemented\n");
1571 if (
sps->scc_extension) {
1574 if (
sps->palette_mode_enabled) {
1577 sps->palette_predictor_initializers_present =
get_bits1(gb);
1579 if (
sps->palette_predictor_initializers_present) {
1583 "sps_num_palette_predictor_initializers out of range: %u\n",
1584 sps->sps_num_palette_predictor_initializers);
1587 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1590 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1595 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1596 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1599 if (apply_defdispwin) {
1600 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1601 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1602 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1603 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1606 ow = &
sps->output_window;
1617 "Displaying the whole video surface.\n");
1618 memset(ow, 0,
sizeof(*ow));
1619 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1623 sps->log2_ctb_size =
sps->log2_min_cb_size +
1624 sps->log2_diff_max_min_coding_block_size;
1625 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1631 if (
sps->log2_ctb_size < 4) {
1634 "log2_ctb_size %d differs from the bounds of any known profile\n",
1635 sps->log2_ctb_size);
1640 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1641 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1642 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1644 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1645 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1646 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1647 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1648 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1649 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1650 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1652 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1660 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1661 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1662 sps->max_transform_hierarchy_depth_inter);
1665 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1666 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1667 sps->max_transform_hierarchy_depth_intra);
1670 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1672 "max transform block size out of range: %d\n",
1673 sps->log2_max_trafo_size);
1703 int apply_defdispwin)
1722 nuh_layer_id, apply_defdispwin,
1729 "Parsed SPS: id %d; coded wxh: %dx%d; "
1730 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1732 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1733 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1774 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1776 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1779 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1781 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1783 if (split_octant_flag)
1784 for (
int k = 0; k < 2; k++)
1785 for (
int m = 0; m < 2; m++)
1786 for (
int n = 0; n < 2; n++)
1788 idx_y + part_num_y * k * inp_length / 2,
1789 idx_cb + m * inp_length / 2,
1790 idx_cr + n * inp_length / 2,
1793 for (
int i = 0;
i < part_num_y;
i++) {
1794 for (
int j = 0; j < 4; j++) {
1797 for (
int c = 0;
c < 3;
c++) {
1799 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1800 pps->luma_bit_depth_cm_output -
1801 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1802 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1803 if (res_coeff_q || res_coeff_r)
1813 if (
pps->num_cm_ref_layers > 62) {
1815 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1818 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1832 if (
pps->cm_octant_depth == 1) {
1847 if (
pps->pps_infer_scaling_list_flag)
1848 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1851 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1854 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1856 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1857 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1865 if (
pps->ref_region_offset_present_flag[
i]) {
1873 if (
pps->resample_phase_set_present_flag[
i]) {
1882 if (
pps->colour_mapping_enabled_flag) {
1893 unsigned int num_val_delta_dlt, max_diff = 0;
1894 int min_diff_minus1 = -1;
1897 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1898 if (num_val_delta_dlt) {
1899 if (num_val_delta_dlt > 1)
1900 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1901 if (num_val_delta_dlt > 2 && max_diff) {
1905 if (max_diff > (min_diff_minus1 + 1))
1906 for (
int k = 1; k < num_val_delta_dlt; k++) {
1907 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1916 unsigned int pps_depth_layers_minus1;
1919 pps_depth_layers_minus1 =
get_bits(gb, 6);
1920 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1921 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1925 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1940 if (
pps->transform_skip_enabled_flag) {
1943 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1944 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1945 if (
pps->chroma_qp_offset_list_enabled_flag) {
1948 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1950 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1953 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1955 if (
pps->cb_qp_offset_list[
i]) {
1957 "cb_qp_offset_list not tested yet.\n");
1960 if (
pps->cr_qp_offset_list[
i]) {
1962 "cb_qp_offset_list not tested yet.\n");
1969 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1970 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
1983 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
1984 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
1989 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
1990 pps->pps_act_ ## name ## _qp_offset >= 12)
1992 #undef CHECK_QP_OFFSET
1995 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2000 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2002 if (
pps->pps_num_palette_predictor_initializers > 0) {
2005 "pps_num_palette_predictor_initializers out of range: %u\n",
2006 pps->pps_num_palette_predictor_initializers);
2011 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2013 if (!
pps->monochrome_palette_flag) {
2015 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2019 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2022 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2035 int pic_area_in_ctbs;
2036 int i, j, x, y, ctb_addr_rs,
tile_id;
2042 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2045 if (
pps->uniform_spacing_flag) {
2046 if (!
pps->column_width) {
2050 if (!
pps->column_width || !
pps->row_height)
2053 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2054 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2055 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2058 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2059 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2060 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2065 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2066 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2069 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2070 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2072 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2073 if (
i >
pps->col_bd[j])
2075 pps->col_idxX[
i] = j;
2081 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2087 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2088 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2092 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2093 int tb_x = ctb_addr_rs %
sps->ctb_width;
2094 int tb_y = ctb_addr_rs /
sps->ctb_width;
2099 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2100 if (tb_x < pps->
col_bd[
i + 1]) {
2106 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2107 if (tb_y < pps->
row_bd[
i + 1]) {
2113 for (
i = 0;
i < tile_x;
i++)
2114 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2115 for (
i = 0;
i < tile_y;
i++)
2118 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2119 tb_x -
pps->col_bd[tile_x];
2121 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2122 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2125 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2127 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2128 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2132 if (!
pps->tile_pos_rs)
2135 for (j = 0; j <
pps->num_tile_rows; j++)
2136 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2137 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2138 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2140 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2141 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2142 for (y = 0; y <
sps->tb_mask+2; y++) {
2143 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2144 pps->min_tb_addr_zs_tab[y] = -1;
2146 for (y = 0; y <
sps->tb_mask+1; y++) {
2147 for (x = 0; x <
sps->tb_mask+1; x++) {
2148 int tb_x = x >> log2_diff;
2149 int tb_y = y >> log2_diff;
2150 int rs =
sps->ctb_width * tb_y + tb_x;
2151 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2152 for (
i = 0;
i < log2_diff;
i++) {
2154 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2156 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2171 unsigned log2_parallel_merge_level_minus2;
2192 pps->data_size = nal_size;
2200 pps->loop_filter_across_tiles_enabled_flag = 1;
2201 pps->num_tile_columns = 1;
2202 pps->num_tile_rows = 1;
2203 pps->uniform_spacing_flag = 1;
2204 pps->disable_dbf = 0;
2205 pps->beta_offset = 0;
2207 pps->log2_max_transform_skip_block_size = 2;
2227 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2229 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2240 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2250 pps->diff_cu_qp_delta_depth = 0;
2251 if (
pps->cu_qp_delta_enabled_flag)
2254 if (
pps->diff_cu_qp_delta_depth < 0 ||
2255 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2257 pps->diff_cu_qp_delta_depth);
2263 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2270 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2276 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2285 if (
pps->tiles_enabled_flag) {
2289 if (num_tile_columns_minus1 < 0 ||
2290 num_tile_columns_minus1 >=
sps->ctb_width) {
2292 num_tile_columns_minus1);
2296 if (num_tile_rows_minus1 < 0 ||
2297 num_tile_rows_minus1 >=
sps->ctb_height) {
2299 num_tile_rows_minus1);
2303 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2304 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2308 if (!
pps->column_width || !
pps->row_height) {
2314 if (!
pps->uniform_spacing_flag) {
2316 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2318 sum +=
pps->column_width[
i];
2320 if (sum >=
sps->ctb_width) {
2325 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2328 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2330 sum +=
pps->row_height[
i];
2332 if (sum >=
sps->ctb_height) {
2337 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2339 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2342 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2344 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2345 if (
pps->deblocking_filter_control_present_flag) {
2346 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2348 if (!
pps->disable_dbf) {
2351 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2357 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2363 pps->beta_offset = 2 * beta_offset_div2;
2364 pps->tc_offset = 2 * tc_offset_div2;
2369 if (
pps->scaling_list_data_present_flag) {
2377 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2379 log2_parallel_merge_level_minus2);
2383 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2385 pps->slice_header_extension_present_flag =
get_bits1(gb);
2388 if (
pps->pps_extension_present_flag) {
2400 if (
pps->pps_multilayer_extension_flag) {
2405 if (
pps->pps_3d_extension_flag) {
2410 if (
pps->pps_scc_extension_flag) {
2449 int max_poc_lsb = 1 << log2_max_poc_lsb;
2450 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2451 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2454 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2455 poc_msb = prev_poc_msb + max_poc_lsb;
2456 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2457 poc_msb = prev_poc_msb - max_poc_lsb;
2459 poc_msb = prev_poc_msb;
2467 return poc_msb + poc_lsb;