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++)
1830 ||
pps->chroma_bit_depth_cm_output <
pps->chroma_bit_depth_cm_input)
1836 if (
pps->cm_octant_depth == 1) {
1851 if (
pps->pps_infer_scaling_list_flag)
1852 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1855 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1858 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1860 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1861 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1869 if (
pps->ref_region_offset_present_flag[
i]) {
1877 if (
pps->resample_phase_set_present_flag[
i]) {
1886 if (
pps->colour_mapping_enabled_flag) {
1897 unsigned int num_val_delta_dlt, max_diff = 0;
1898 int min_diff_minus1 = -1;
1901 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1902 if (num_val_delta_dlt) {
1903 if (num_val_delta_dlt > 1)
1904 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1905 if (num_val_delta_dlt > 2 && max_diff) {
1909 if (max_diff > (min_diff_minus1 + 1))
1910 for (
int k = 1; k < num_val_delta_dlt; k++) {
1911 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1920 unsigned int pps_depth_layers_minus1;
1923 pps_depth_layers_minus1 =
get_bits(gb, 6);
1924 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1925 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1929 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1944 if (
pps->transform_skip_enabled_flag) {
1947 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1948 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1949 if (
pps->chroma_qp_offset_list_enabled_flag) {
1952 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1954 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1957 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1959 if (
pps->cb_qp_offset_list[
i]) {
1961 "cb_qp_offset_list not tested yet.\n");
1964 if (
pps->cr_qp_offset_list[
i]) {
1966 "cb_qp_offset_list not tested yet.\n");
1973 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1974 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
1987 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
1988 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
1993 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
1994 pps->pps_act_ ## name ## _qp_offset >= 12)
1996 #undef CHECK_QP_OFFSET
1999 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2004 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2006 if (
pps->pps_num_palette_predictor_initializers > 0) {
2009 "pps_num_palette_predictor_initializers out of range: %u\n",
2010 pps->pps_num_palette_predictor_initializers);
2015 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2017 if (!
pps->monochrome_palette_flag) {
2019 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2023 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2026 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2039 int pic_area_in_ctbs;
2040 int i, j, x, y, ctb_addr_rs,
tile_id;
2046 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2049 if (
pps->uniform_spacing_flag) {
2050 if (!
pps->column_width) {
2054 if (!
pps->column_width || !
pps->row_height)
2057 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2058 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2059 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2062 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2063 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2064 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2069 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2070 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2073 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2074 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2076 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2077 if (
i >
pps->col_bd[j])
2079 pps->col_idxX[
i] = j;
2085 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2091 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2092 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2096 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2097 int tb_x = ctb_addr_rs %
sps->ctb_width;
2098 int tb_y = ctb_addr_rs /
sps->ctb_width;
2103 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2104 if (tb_x < pps->
col_bd[
i + 1]) {
2110 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2111 if (tb_y < pps->
row_bd[
i + 1]) {
2117 for (
i = 0;
i < tile_x;
i++)
2118 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2119 for (
i = 0;
i < tile_y;
i++)
2122 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2123 tb_x -
pps->col_bd[tile_x];
2125 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2126 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2129 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2131 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2132 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2136 if (!
pps->tile_pos_rs)
2139 for (j = 0; j <
pps->num_tile_rows; j++)
2140 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2141 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2142 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2144 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2145 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2146 for (y = 0; y <
sps->tb_mask+2; y++) {
2147 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2148 pps->min_tb_addr_zs_tab[y] = -1;
2150 for (y = 0; y <
sps->tb_mask+1; y++) {
2151 for (x = 0; x <
sps->tb_mask+1; x++) {
2152 int tb_x = x >> log2_diff;
2153 int tb_y = y >> log2_diff;
2154 int rs =
sps->ctb_width * tb_y + tb_x;
2155 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2156 for (
i = 0;
i < log2_diff;
i++) {
2158 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2160 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2175 unsigned log2_parallel_merge_level_minus2;
2196 pps->data_size = nal_size;
2204 pps->loop_filter_across_tiles_enabled_flag = 1;
2205 pps->num_tile_columns = 1;
2206 pps->num_tile_rows = 1;
2207 pps->uniform_spacing_flag = 1;
2208 pps->disable_dbf = 0;
2209 pps->beta_offset = 0;
2211 pps->log2_max_transform_skip_block_size = 2;
2231 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2233 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2244 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2254 pps->diff_cu_qp_delta_depth = 0;
2255 if (
pps->cu_qp_delta_enabled_flag)
2258 if (
pps->diff_cu_qp_delta_depth < 0 ||
2259 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2261 pps->diff_cu_qp_delta_depth);
2267 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2274 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2280 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2289 if (
pps->tiles_enabled_flag) {
2293 if (num_tile_columns_minus1 < 0 ||
2294 num_tile_columns_minus1 >=
sps->ctb_width) {
2296 num_tile_columns_minus1);
2300 if (num_tile_rows_minus1 < 0 ||
2301 num_tile_rows_minus1 >=
sps->ctb_height) {
2303 num_tile_rows_minus1);
2307 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2308 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2312 if (!
pps->column_width || !
pps->row_height) {
2318 if (!
pps->uniform_spacing_flag) {
2320 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2322 sum +=
pps->column_width[
i];
2324 if (sum >=
sps->ctb_width) {
2329 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2332 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2334 sum +=
pps->row_height[
i];
2336 if (sum >=
sps->ctb_height) {
2341 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2343 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2346 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2348 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2349 if (
pps->deblocking_filter_control_present_flag) {
2350 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2352 if (!
pps->disable_dbf) {
2355 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2361 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2367 pps->beta_offset = 2 * beta_offset_div2;
2368 pps->tc_offset = 2 * tc_offset_div2;
2373 if (
pps->scaling_list_data_present_flag) {
2381 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2383 log2_parallel_merge_level_minus2);
2387 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2389 pps->slice_header_extension_present_flag =
get_bits1(gb);
2392 if (
pps->pps_extension_present_flag) {
2404 if (
pps->pps_multilayer_extension_flag) {
2409 if (
pps->pps_3d_extension_flag) {
2414 if (
pps->pps_scc_extension_flag) {
2453 int max_poc_lsb = 1 << log2_max_poc_lsb;
2454 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2455 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2458 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2459 poc_msb = prev_poc_msb + max_poc_lsb;
2460 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2461 poc_msb = prev_poc_msb - max_poc_lsb;
2463 poc_msb = prev_poc_msb;
2471 return poc_msb + poc_lsb;