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) {
615 "Unsupported num_output_layer_sets: %d\n",
vps->num_output_layer_sets);
620 if (sub_layers_max_present) {
621 for (
int i = 0;
i <
vps->vps_max_layers;
i++)
622 max_sub_layers[
i] = sub_layers_max_present ?
get_bits(gb, 3) + 1 :
623 vps->vps_max_sub_layers;
635 for (
int i = 2;
i < nb_ptl;
i++) {
637 if (
parse_ptl(gb, avctx, profile_present, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
642 if (num_add_olss != 0) {
649 default_output_layer_idc =
get_bits(gb, 2);
650 if (default_output_layer_idc != 0) {
652 default_output_layer_idc);
657 if (layer1_id_included &&
658 layer1_id_included != ((1ULL <<
vps->layer_id_in_nuh[0]) |
659 (1ULL <<
vps->layer_id_in_nuh[1]))) {
661 "Dependent layer not included in layer ID?\n");
664 if (!layer1_id_included)
669 if (
vps->vps_num_layer_sets == 1 || default_output_layer_idc == 2)
675 if (ptl_idx >= nb_ptl) {
686 vps->rep_format.pic_width_in_luma_samples =
get_bits(gb, 16);
687 vps->rep_format.pic_height_in_luma_samples =
get_bits(gb, 16);
691 "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
694 vps->rep_format.chroma_format_idc =
get_bits(gb, 2);
695 if (
vps->rep_format.chroma_format_idc == 3)
696 vps->rep_format.separate_colour_plane_flag =
get_bits1(gb);
697 vps->rep_format.bit_depth_luma =
get_bits(gb, 4) + 8;
698 vps->rep_format.bit_depth_chroma =
get_bits(gb, 4) + 8;
699 if (
vps->rep_format.bit_depth_luma > 16 ||
700 vps->rep_format.bit_depth_chroma > 16 ||
701 vps->rep_format.bit_depth_luma !=
vps->rep_format.bit_depth_chroma) {
703 vps->rep_format.bit_depth_luma,
vps->rep_format.bit_depth_chroma);
718 if (!
vps->num_direct_ref_layers[1])
721 sub_layer_flag_info_present_flag =
get_bits1(gb);
722 for (
int j = 0; j <
FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
723 int sub_layer_dpb_info_present_flag = 1;
724 if (j > 0 && sub_layer_flag_info_present_flag)
725 sub_layer_dpb_info_present_flag =
get_bits1(gb);
726 if (sub_layer_dpb_info_present_flag) {
735 if (direct_dep_type_len > 32) {
737 direct_dep_type_len);
752 if (non_vui_extension_length > 4096) {
754 non_vui_extension_length);
772 uint64_t layer1_id_included = 0;
773 unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
789 vps->data_size = nal_size;
795 vps->vps_id = vps_id;
797 vps_base_layer_internal_flag =
get_bits1(gb);
798 vps_base_layer_available_flag =
get_bits1(gb);
799 if (!vps_base_layer_internal_flag || !vps_base_layer_available_flag) {
801 "vps_base_layer_internal_flag or vps_base_layer_available_flag not set\n");
817 vps->vps_max_sub_layers);
824 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
826 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
827 for (;
i <
vps->vps_max_sub_layers;
i++) {
834 vps->vps_max_dec_pic_buffering[
i] - 1);
837 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
839 vps->vps_num_reorder_pics[
i]);
847 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
853 vps->num_output_layer_sets = 1;
857 if (
vps->vps_num_layer_sets > 1)
858 layer1_id_included =
get_bits64(gb,
vps->vps_max_layer_id + 1);
859 if (
vps->vps_num_layer_sets > 2)
863 if (
vps->vps_timing_info_present_flag) {
866 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
867 if (
vps->vps_poc_proportional_to_timing_flag)
870 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
872 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
876 if (
vps->vps_num_hrd_parameters) {
882 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
883 int common_inf_present = 1;
889 vps->vps_max_sub_layers);
894 vps->layer_idx[0] = 0;
896 vps->layer_idx[
i] = -1;
903 vps->nb_layers == 2 &&
904 vps->layer_id_in_nuh[1] &&
907 "Broken VPS extension, treating as alpha video\n");
912 if (!
vps->num_direct_ref_layers[1])
913 vps->poc_lsb_not_present |= 1 << 1;
943 VUI backup_vui, *vui = &
sps->vui;
954 switch (
sps->pix_fmt) {
974 memcpy(&backup, gb,
sizeof(backup));
975 memcpy(&backup_vui, vui,
sizeof(backup_vui));
990 if (apply_defdispwin &&
993 "discarding vui default display window, "
994 "original values are l:%u r:%u t:%u b:%u\n",
1015 "Strange VUI timing information, retrying...\n");
1016 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1017 memcpy(gb, &backup,
sizeof(backup));
1039 "Strange VUI bitstream restriction information, retrying"
1040 " from timing information...\n");
1041 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1042 memcpy(gb, &backup,
sizeof(backup));
1059 "Overread in VUI, retrying from timing information...\n");
1060 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1061 memcpy(gb, &backup,
sizeof(backup));
1071 for (matrixId = 0; matrixId < 6; matrixId++) {
1073 memset(sl->
sl[0][matrixId], 16, 16);
1074 sl->
sl_dc[0][matrixId] = 16;
1075 sl->
sl_dc[1][matrixId] = 16;
1100 uint8_t scaling_list_pred_mode_flag;
1101 uint8_t scaling_list_dc_coef[2][6];
1102 int size_id, matrix_id,
pos;
1105 for (size_id = 0; size_id < 4; size_id++)
1106 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1107 scaling_list_pred_mode_flag =
get_bits1(gb);
1108 if (!scaling_list_pred_mode_flag) {
1114 delta *= (size_id == 3) ? 3 : 1;
1115 if (matrix_id <
delta) {
1117 "Invalid delta in scaling list data: %d.\n",
delta);
1121 memcpy(sl->
sl[size_id][matrix_id],
1122 sl->
sl[size_id][matrix_id -
delta],
1123 size_id > 0 ? 64 : 16);
1125 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
1128 int next_coef, coef_num;
1129 int32_t scaling_list_delta_coef;
1132 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
1135 if (scaling_list_coeff_minus8 < -7 ||
1136 scaling_list_coeff_minus8 > 247)
1138 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1139 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1140 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
1142 for (
i = 0;
i < coef_num;
i++) {
1151 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
1152 sl->
sl[size_id][matrix_id][
pos] = next_coef;
1157 if (
sps->chroma_format_idc == 3) {
1158 for (
i = 0;
i < 64;
i++) {
1159 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
1160 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
1161 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
1162 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
1177 switch (
sps->bit_depth) {
1204 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1205 "chroma_format_idc is %d, depth is %d\n",
1206 sps->chroma_format_idc,
sps->bit_depth);
1214 sps->hshift[0] =
sps->vshift[0] = 0;
1215 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
1216 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
1218 sps->pixel_shift =
sps->bit_depth > 8;
1224 unsigned nuh_layer_id,
int apply_defdispwin,
1229 int bit_depth_chroma, num_comps, multi_layer_ext;
1230 int vps_max_sub_layers;
1238 if (!vps_list[
sps->vps_id]) {
1247 multi_layer_ext = nuh_layer_id > 0 &&
1249 if (multi_layer_ext) {
1253 sps->max_sub_layers =
sps->vps->vps_max_sub_layers;
1255 vps_max_sub_layers =
sps->vps ?
sps->vps->vps_max_sub_layers
1258 if (
sps->max_sub_layers > vps_max_sub_layers) {
1260 sps->max_sub_layers);
1264 if (!multi_layer_ext) {
1270 sps->temporal_id_nesting =
sps->max_sub_layers > 1 ?
1271 sps->vps->vps_max_sub_layers : 1;
1280 if (multi_layer_ext) {
1283 if (
sps->vps->nb_layers == 1) {
1296 sps->chroma_format_idc =
sps->separate_colour_plane ? 0 :
1309 if (
sps->chroma_format_idc > 3
U) {
1314 if (
sps->chroma_format_idc == 3)
1317 if (
sps->separate_colour_plane)
1318 sps->chroma_format_idc = 0;
1323 sps->height, 0, avctx)) < 0)
1327 if (
sps->conformance_window) {
1337 "discarding sps conformance window, "
1338 "original values are l:%u r:%u t:%u b:%u\n",
1339 sps->pic_conf_win.left_offset,
1340 sps->pic_conf_win.right_offset,
1341 sps->pic_conf_win.top_offset,
1342 sps->pic_conf_win.bottom_offset);
1344 sps->pic_conf_win.left_offset =
1345 sps->pic_conf_win.right_offset =
1346 sps->pic_conf_win.top_offset =
1347 sps->pic_conf_win.bottom_offset = 0;
1352 if (
sps->bit_depth > 16) {
1358 if (bit_depth_chroma > 16) {
1363 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1365 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1366 "this is unsupported.\n",
1367 sps->bit_depth, bit_depth_chroma);
1370 sps->bit_depth_chroma = bit_depth_chroma;
1373 sps->output_window =
sps->pic_conf_win;
1380 if (
sps->log2_max_poc_lsb > 16) {
1382 sps->log2_max_poc_lsb - 4);
1386 if (!multi_layer_ext) {
1390 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1391 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1397 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1400 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1402 sps->temporal_layer[
i].num_reorder_pics);
1407 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1411 if (!
sps->sublayer_ordering_info) {
1412 for (
i = 0;
i < start;
i++) {
1413 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1414 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1415 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1419 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1420 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1421 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1422 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1430 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1431 sps->log2_min_tb_size;
1433 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1438 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1439 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);
1443 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1448 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1449 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1450 sps->log2_diff_max_min_transform_block_size);
1458 if (
sps->scaling_list_enabled) {
1477 if (
sps->pcm_enabled) {
1481 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1483 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1485 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1486 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1499 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1506 if (
sps->long_term_ref_pics_present) {
1510 sps->num_long_term_ref_pics_sps);
1514 sps->used_by_curr_pic_lt = 0;
1515 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1525 if (
sps->vui_present)
1529 if (
sps->extension_present) {
1536 if (
sps->range_extension) {
1543 if (
sps->extended_precision_processing)
1545 "extended_precision_processing_flag not yet implemented\n");
1549 if (
sps->high_precision_offsets_enabled)
1551 "high_precision_offsets_enabled_flag not yet implemented\n");
1553 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1556 if (
sps->cabac_bypass_alignment_enabled)
1558 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1561 if (
sps->multilayer_extension) {
1565 if (
sps->sps_3d_extension) {
1566 for (
i = 0;
i <= 1;
i++) {
1586 "sps_3d_extension_flag not yet implemented\n");
1589 if (
sps->scc_extension) {
1592 if (
sps->palette_mode_enabled) {
1595 sps->palette_predictor_initializers_present =
get_bits1(gb);
1597 if (
sps->palette_predictor_initializers_present) {
1601 "sps_num_palette_predictor_initializers out of range: %u\n",
1602 sps->sps_num_palette_predictor_initializers);
1605 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1608 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1613 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1614 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1617 if (apply_defdispwin) {
1618 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1619 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1620 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1621 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1624 ow = &
sps->output_window;
1635 "Displaying the whole video surface.\n");
1636 memset(ow, 0,
sizeof(*ow));
1637 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1641 sps->log2_ctb_size =
sps->log2_min_cb_size +
1642 sps->log2_diff_max_min_coding_block_size;
1643 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1649 if (
sps->log2_ctb_size < 4) {
1652 "log2_ctb_size %d differs from the bounds of any known profile\n",
1653 sps->log2_ctb_size);
1658 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1659 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1660 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1662 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1663 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1664 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1665 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1666 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1667 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1668 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1670 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1678 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1679 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1680 sps->max_transform_hierarchy_depth_inter);
1683 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1684 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1685 sps->max_transform_hierarchy_depth_intra);
1688 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1690 "max transform block size out of range: %d\n",
1691 sps->log2_max_trafo_size);
1721 int apply_defdispwin)
1740 nuh_layer_id, apply_defdispwin,
1747 "Parsed SPS: id %d; coded wxh: %dx%d; "
1748 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1750 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1751 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1792 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1794 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1797 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1799 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1801 if (split_octant_flag)
1802 for (
int k = 0; k < 2; k++)
1803 for (
int m = 0; m < 2; m++)
1804 for (
int n = 0; n < 2; n++)
1806 idx_y + part_num_y * k * inp_length / 2,
1807 idx_cb + m * inp_length / 2,
1808 idx_cr + n * inp_length / 2,
1811 for (
int i = 0;
i < part_num_y;
i++) {
1812 for (
int j = 0; j < 4; j++) {
1815 for (
int c = 0;
c < 3;
c++) {
1817 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1818 pps->luma_bit_depth_cm_output -
1819 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1820 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1821 if (res_coeff_q || res_coeff_r)
1831 if (
pps->num_cm_ref_layers > 62) {
1833 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1836 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1848 ||
pps->chroma_bit_depth_cm_output <
pps->chroma_bit_depth_cm_input)
1854 if (
pps->cm_octant_depth == 1) {
1869 if (
pps->pps_infer_scaling_list_flag)
1870 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1873 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1876 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1878 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1879 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1887 if (
pps->ref_region_offset_present_flag[
i]) {
1895 if (
pps->resample_phase_set_present_flag[
i]) {
1904 if (
pps->colour_mapping_enabled_flag) {
1915 unsigned int num_val_delta_dlt, max_diff = 0;
1916 int min_diff_minus1 = -1;
1919 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1920 if (num_val_delta_dlt) {
1921 if (num_val_delta_dlt > 1)
1922 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1923 if (num_val_delta_dlt > 2 && max_diff) {
1927 if (max_diff > (min_diff_minus1 + 1))
1928 for (
int k = 1; k < num_val_delta_dlt; k++) {
1929 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1938 unsigned int pps_depth_layers_minus1;
1941 pps_depth_layers_minus1 =
get_bits(gb, 6);
1942 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1943 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1947 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1962 if (
pps->transform_skip_enabled_flag) {
1965 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1966 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1967 if (
pps->chroma_qp_offset_list_enabled_flag) {
1970 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1972 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1975 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1977 if (
pps->cb_qp_offset_list[
i]) {
1979 "cb_qp_offset_list not tested yet.\n");
1982 if (
pps->cr_qp_offset_list[
i]) {
1984 "cb_qp_offset_list not tested yet.\n");
1991 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1992 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
2005 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
2006 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
2011 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2012 pps->pps_act_ ## name ## _qp_offset >= 12)
2014 #undef CHECK_QP_OFFSET
2017 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2022 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2024 if (
pps->pps_num_palette_predictor_initializers > 0) {
2027 "pps_num_palette_predictor_initializers out of range: %u\n",
2028 pps->pps_num_palette_predictor_initializers);
2033 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2035 if (!
pps->monochrome_palette_flag) {
2037 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2041 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2044 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2057 int pic_area_in_ctbs;
2058 int i, j, x, y, ctb_addr_rs,
tile_id;
2064 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2067 if (
pps->uniform_spacing_flag) {
2068 if (!
pps->column_width) {
2072 if (!
pps->column_width || !
pps->row_height)
2075 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2076 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2077 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2080 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2081 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2082 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2087 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2088 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2091 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2092 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2094 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2095 if (
i >
pps->col_bd[j])
2097 pps->col_idxX[
i] = j;
2103 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2109 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2110 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2114 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2115 int tb_x = ctb_addr_rs %
sps->ctb_width;
2116 int tb_y = ctb_addr_rs /
sps->ctb_width;
2121 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2122 if (tb_x < pps->
col_bd[
i + 1]) {
2128 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2129 if (tb_y < pps->
row_bd[
i + 1]) {
2135 for (
i = 0;
i < tile_x;
i++)
2136 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2137 for (
i = 0;
i < tile_y;
i++)
2140 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2141 tb_x -
pps->col_bd[tile_x];
2143 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2144 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2147 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2149 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2150 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2154 if (!
pps->tile_pos_rs)
2157 for (j = 0; j <
pps->num_tile_rows; j++)
2158 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2159 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2160 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2162 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2163 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2164 for (y = 0; y <
sps->tb_mask+2; y++) {
2165 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2166 pps->min_tb_addr_zs_tab[y] = -1;
2168 for (y = 0; y <
sps->tb_mask+1; y++) {
2169 for (x = 0; x <
sps->tb_mask+1; x++) {
2170 int tb_x = x >> log2_diff;
2171 int tb_y = y >> log2_diff;
2172 int rs =
sps->ctb_width * tb_y + tb_x;
2173 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2174 for (
i = 0;
i < log2_diff;
i++) {
2176 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2178 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2193 unsigned log2_parallel_merge_level_minus2;
2214 pps->data_size = nal_size;
2222 pps->loop_filter_across_tiles_enabled_flag = 1;
2223 pps->num_tile_columns = 1;
2224 pps->num_tile_rows = 1;
2225 pps->uniform_spacing_flag = 1;
2226 pps->disable_dbf = 0;
2227 pps->beta_offset = 0;
2229 pps->log2_max_transform_skip_block_size = 2;
2249 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2251 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2262 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2272 pps->diff_cu_qp_delta_depth = 0;
2273 if (
pps->cu_qp_delta_enabled_flag)
2276 if (
pps->diff_cu_qp_delta_depth < 0 ||
2277 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2279 pps->diff_cu_qp_delta_depth);
2285 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2292 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2298 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2307 if (
pps->tiles_enabled_flag) {
2311 if (num_tile_columns_minus1 < 0 ||
2312 num_tile_columns_minus1 >=
sps->ctb_width) {
2314 num_tile_columns_minus1);
2318 if (num_tile_rows_minus1 < 0 ||
2319 num_tile_rows_minus1 >=
sps->ctb_height) {
2321 num_tile_rows_minus1);
2325 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2326 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2330 if (!
pps->column_width || !
pps->row_height) {
2336 if (!
pps->uniform_spacing_flag) {
2338 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2340 sum +=
pps->column_width[
i];
2342 if (sum >=
sps->ctb_width) {
2347 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2350 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2352 sum +=
pps->row_height[
i];
2354 if (sum >=
sps->ctb_height) {
2359 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2361 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2364 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2366 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2367 if (
pps->deblocking_filter_control_present_flag) {
2368 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2370 if (!
pps->disable_dbf) {
2373 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2379 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2385 pps->beta_offset = 2 * beta_offset_div2;
2386 pps->tc_offset = 2 * tc_offset_div2;
2391 if (
pps->scaling_list_data_present_flag) {
2399 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2401 log2_parallel_merge_level_minus2);
2405 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2407 pps->slice_header_extension_present_flag =
get_bits1(gb);
2410 if (
pps->pps_extension_present_flag) {
2422 if (
pps->pps_multilayer_extension_flag) {
2427 if (
pps->pps_3d_extension_flag) {
2432 if (
pps->pps_scc_extension_flag) {
2471 int max_poc_lsb = 1 << log2_max_poc_lsb;
2472 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2473 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2476 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2477 poc_msb = prev_poc_msb + max_poc_lsb;
2478 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2479 poc_msb = prev_poc_msb - max_poc_lsb;
2481 poc_msb = prev_poc_msb;
2489 return poc_msb + poc_lsb;