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 :
1302 sps->height, 0, avctx)) < 0)
1312 if (
sps->chroma_format_idc > 3
U) {
1317 if (
sps->chroma_format_idc == 3)
1320 if (
sps->separate_colour_plane)
1321 sps->chroma_format_idc = 0;
1326 sps->height, 0, avctx)) < 0)
1330 if (
sps->conformance_window) {
1340 "discarding sps conformance window, "
1341 "original values are l:%u r:%u t:%u b:%u\n",
1342 sps->pic_conf_win.left_offset,
1343 sps->pic_conf_win.right_offset,
1344 sps->pic_conf_win.top_offset,
1345 sps->pic_conf_win.bottom_offset);
1347 sps->pic_conf_win.left_offset =
1348 sps->pic_conf_win.right_offset =
1349 sps->pic_conf_win.top_offset =
1350 sps->pic_conf_win.bottom_offset = 0;
1355 if (
sps->bit_depth > 16) {
1361 if (bit_depth_chroma > 16) {
1366 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1368 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1369 "this is unsupported.\n",
1370 sps->bit_depth, bit_depth_chroma);
1373 sps->bit_depth_chroma = bit_depth_chroma;
1376 sps->output_window =
sps->pic_conf_win;
1383 if (
sps->log2_max_poc_lsb > 16) {
1385 sps->log2_max_poc_lsb - 4);
1389 if (!multi_layer_ext) {
1393 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1394 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1400 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1403 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1405 sps->temporal_layer[
i].num_reorder_pics);
1410 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1414 if (!
sps->sublayer_ordering_info) {
1415 for (
i = 0;
i < start;
i++) {
1416 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1417 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1418 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1422 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1423 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1424 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1425 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1433 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1434 sps->log2_min_tb_size;
1436 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1441 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1442 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);
1446 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1451 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1452 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1453 sps->log2_diff_max_min_transform_block_size);
1461 if (
sps->scaling_list_enabled) {
1480 if (
sps->pcm_enabled) {
1484 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1486 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1488 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1489 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1502 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1509 if (
sps->long_term_ref_pics_present) {
1513 sps->num_long_term_ref_pics_sps);
1517 sps->used_by_curr_pic_lt = 0;
1518 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1528 if (
sps->vui_present)
1532 if (
sps->extension_present) {
1539 if (
sps->range_extension) {
1546 if (
sps->extended_precision_processing)
1548 "extended_precision_processing_flag not yet implemented\n");
1552 if (
sps->high_precision_offsets_enabled)
1554 "high_precision_offsets_enabled_flag not yet implemented\n");
1556 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1559 if (
sps->cabac_bypass_alignment_enabled)
1561 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1564 if (
sps->multilayer_extension) {
1568 if (
sps->sps_3d_extension) {
1569 for (
i = 0;
i <= 1;
i++) {
1589 "sps_3d_extension_flag not yet implemented\n");
1592 if (
sps->scc_extension) {
1595 if (
sps->palette_mode_enabled) {
1598 sps->palette_predictor_initializers_present =
get_bits1(gb);
1600 if (
sps->palette_predictor_initializers_present) {
1604 "sps_num_palette_predictor_initializers out of range: %u\n",
1605 sps->sps_num_palette_predictor_initializers);
1608 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1611 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1616 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1617 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1620 if (apply_defdispwin) {
1621 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1622 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1623 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1624 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1627 ow = &
sps->output_window;
1638 "Displaying the whole video surface.\n");
1639 memset(ow, 0,
sizeof(*ow));
1640 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1644 sps->log2_ctb_size =
sps->log2_min_cb_size +
1645 sps->log2_diff_max_min_coding_block_size;
1646 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1652 if (
sps->log2_ctb_size < 4) {
1655 "log2_ctb_size %d differs from the bounds of any known profile\n",
1656 sps->log2_ctb_size);
1661 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1662 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1663 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1665 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1666 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1667 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1668 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1669 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1670 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1671 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1673 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1681 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1682 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1683 sps->max_transform_hierarchy_depth_inter);
1686 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1687 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1688 sps->max_transform_hierarchy_depth_intra);
1691 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1693 "max transform block size out of range: %d\n",
1694 sps->log2_max_trafo_size);
1724 int apply_defdispwin)
1743 nuh_layer_id, apply_defdispwin,
1750 "Parsed SPS: id %d; coded wxh: %dx%d; "
1751 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1753 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1754 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1795 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1797 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1800 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1802 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1804 if (split_octant_flag)
1805 for (
int k = 0; k < 2; k++)
1806 for (
int m = 0; m < 2; m++)
1807 for (
int n = 0; n < 2; n++)
1809 idx_y + part_num_y * k * inp_length / 2,
1810 idx_cb + m * inp_length / 2,
1811 idx_cr + n * inp_length / 2,
1814 for (
int i = 0;
i < part_num_y;
i++) {
1815 for (
int j = 0; j < 4; j++) {
1818 for (
int c = 0;
c < 3;
c++) {
1820 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1821 pps->luma_bit_depth_cm_output -
1822 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1823 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1824 if (res_coeff_q || res_coeff_r)
1834 if (
pps->num_cm_ref_layers > 62) {
1836 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1839 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1851 ||
pps->chroma_bit_depth_cm_output <
pps->chroma_bit_depth_cm_input)
1857 if (
pps->cm_octant_depth == 1) {
1872 if (
pps->pps_infer_scaling_list_flag)
1873 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1876 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1879 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1881 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1882 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1890 if (
pps->ref_region_offset_present_flag[
i]) {
1898 if (
pps->resample_phase_set_present_flag[
i]) {
1907 if (
pps->colour_mapping_enabled_flag) {
1918 unsigned int num_val_delta_dlt, max_diff = 0;
1919 int min_diff_minus1 = -1;
1922 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1923 if (num_val_delta_dlt) {
1924 if (num_val_delta_dlt > 1)
1925 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1926 if (num_val_delta_dlt > 2 && max_diff) {
1930 if (max_diff > (min_diff_minus1 + 1))
1931 for (
int k = 1; k < num_val_delta_dlt; k++) {
1932 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1941 unsigned int pps_depth_layers_minus1;
1944 pps_depth_layers_minus1 =
get_bits(gb, 6);
1945 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1946 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1950 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1965 if (
pps->transform_skip_enabled_flag) {
1968 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1969 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1970 if (
pps->chroma_qp_offset_list_enabled_flag) {
1973 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1975 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1978 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1980 if (
pps->cb_qp_offset_list[
i]) {
1982 "cb_qp_offset_list not tested yet.\n");
1985 if (
pps->cr_qp_offset_list[
i]) {
1987 "cb_qp_offset_list not tested yet.\n");
1994 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1995 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
2008 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
2009 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
2014 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2015 pps->pps_act_ ## name ## _qp_offset >= 12)
2017 #undef CHECK_QP_OFFSET
2020 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2025 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2027 if (
pps->pps_num_palette_predictor_initializers > 0) {
2030 "pps_num_palette_predictor_initializers out of range: %u\n",
2031 pps->pps_num_palette_predictor_initializers);
2036 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2038 if (!
pps->monochrome_palette_flag) {
2040 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2044 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2047 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2060 int pic_area_in_ctbs;
2061 int i, j, x, y, ctb_addr_rs,
tile_id;
2067 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2070 if (
pps->uniform_spacing_flag) {
2071 if (!
pps->column_width) {
2075 if (!
pps->column_width || !
pps->row_height)
2078 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2079 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2080 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2083 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2084 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2085 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2090 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2091 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2094 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2095 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2097 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2098 if (
i >
pps->col_bd[j])
2100 pps->col_idxX[
i] = j;
2106 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2112 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2113 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2117 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2118 int tb_x = ctb_addr_rs %
sps->ctb_width;
2119 int tb_y = ctb_addr_rs /
sps->ctb_width;
2124 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2125 if (tb_x < pps->
col_bd[
i + 1]) {
2131 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2132 if (tb_y < pps->
row_bd[
i + 1]) {
2138 for (
i = 0;
i < tile_x;
i++)
2139 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2140 for (
i = 0;
i < tile_y;
i++)
2143 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2144 tb_x -
pps->col_bd[tile_x];
2146 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2147 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2150 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2152 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2153 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2157 if (!
pps->tile_pos_rs)
2160 for (j = 0; j <
pps->num_tile_rows; j++)
2161 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2162 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2163 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2165 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2166 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2167 for (y = 0; y <
sps->tb_mask+2; y++) {
2168 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2169 pps->min_tb_addr_zs_tab[y] = -1;
2171 for (y = 0; y <
sps->tb_mask+1; y++) {
2172 for (x = 0; x <
sps->tb_mask+1; x++) {
2173 int tb_x = x >> log2_diff;
2174 int tb_y = y >> log2_diff;
2175 int rs =
sps->ctb_width * tb_y + tb_x;
2176 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2177 for (
i = 0;
i < log2_diff;
i++) {
2179 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2181 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2196 unsigned log2_parallel_merge_level_minus2;
2217 pps->data_size = nal_size;
2225 pps->loop_filter_across_tiles_enabled_flag = 1;
2226 pps->num_tile_columns = 1;
2227 pps->num_tile_rows = 1;
2228 pps->uniform_spacing_flag = 1;
2229 pps->disable_dbf = 0;
2230 pps->beta_offset = 0;
2232 pps->log2_max_transform_skip_block_size = 2;
2252 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2254 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2265 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2275 pps->diff_cu_qp_delta_depth = 0;
2276 if (
pps->cu_qp_delta_enabled_flag)
2279 if (
pps->diff_cu_qp_delta_depth < 0 ||
2280 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2282 pps->diff_cu_qp_delta_depth);
2288 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2295 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2301 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2310 if (
pps->tiles_enabled_flag) {
2314 if (num_tile_columns_minus1 < 0 ||
2315 num_tile_columns_minus1 >=
sps->ctb_width) {
2317 num_tile_columns_minus1);
2321 if (num_tile_rows_minus1 < 0 ||
2322 num_tile_rows_minus1 >=
sps->ctb_height) {
2324 num_tile_rows_minus1);
2328 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2329 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2333 if (!
pps->column_width || !
pps->row_height) {
2339 if (!
pps->uniform_spacing_flag) {
2341 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2343 sum +=
pps->column_width[
i];
2345 if (sum >=
sps->ctb_width) {
2350 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2353 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2355 sum +=
pps->row_height[
i];
2357 if (sum >=
sps->ctb_height) {
2362 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2364 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2367 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2369 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2370 if (
pps->deblocking_filter_control_present_flag) {
2371 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2373 if (!
pps->disable_dbf) {
2376 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2382 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2388 pps->beta_offset = 2 * beta_offset_div2;
2389 pps->tc_offset = 2 * tc_offset_div2;
2394 if (
pps->scaling_list_data_present_flag) {
2402 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2404 log2_parallel_merge_level_minus2);
2408 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2410 pps->slice_header_extension_present_flag =
get_bits1(gb);
2413 if (
pps->pps_extension_present_flag) {
2425 if (
pps->pps_multilayer_extension_flag) {
2430 if (
pps->pps_3d_extension_flag) {
2435 if (
pps->pps_scc_extension_flag) {
2474 int max_poc_lsb = 1 << log2_max_poc_lsb;
2475 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2476 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2479 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2480 poc_msb = prev_poc_msb + max_poc_lsb;
2481 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2482 poc_msb = prev_poc_msb - max_poc_lsb;
2484 poc_msb = prev_poc_msb;
2492 return poc_msb + poc_lsb;