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
74 if (
left < 0 || right < 0 || top < 0 || bottom < 0 ||
82 window->right_offset = right;
84 window->bottom_offset = bottom;
91 if (
s->sps_list[
id]) {
94 if (
s->pps_list[
i] &&
s->pps_list[
i]->sps_id ==
id)
104 if (
s->vps_list[
id]) {
106 if (
s->sps_list[
i] &&
s->sps_list[
i]->vps_id ==
id)
123 if (rps !=
sps->st_rps &&
sps->nb_st_rps)
128 uint8_t used[32] = { 0 };
131 if (is_slice_header) {
135 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
142 rps_ridx = &
sps->st_rps[rps -
sps->st_rps - 1];
148 "Invalid value of abs_delta_rps: %d\n",
161 if (i < rps_ridx->num_delta_pocs)
162 delta_poc = delta_rps + rps_ridx->
delta_poc[
i];
164 delta_poc = delta_rps;
174 "Invalid num_delta_pocs: %d\n", k);
186 for (k =
i - 1; k >= 0; k--) {
188 if (delta_poc <
tmp) {
190 used[k + 1] = used[k];
213 rps->
used |= (uint32_t)used[
i] <<
i;
215 unsigned int nb_positive_pics;
232 if (delta_poc < 1 || delta_poc > 32768) {
234 "Invalid value of delta_poc: %d\n",
243 for (
i = 0;
i < nb_positive_pics;
i++) {
245 if (delta_poc < 1 || delta_poc > 32768) {
247 "Invalid value of delta_poc: %d\n",
274 const char *profile_name =
NULL;
281 "%s profile bitstream\n", profile_name ? profile_name :
"Unknown");
284 for (
i = 0;
i < 32;
i++) {
287 if (
ptl->profile_idc == 0 &&
i > 0 &&
ptl->profile_compatibility_flag[
i])
288 ptl->profile_idc =
i;
295 #define check_profile_idc(idc) \
296 ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
331 #undef check_profile_idc
337 int profile_present,
PTL *
ptl,
int max_num_sub_layers)
341 if (profile_present) {
344 memset(&
ptl->general_ptl, 0,
sizeof(
ptl->general_ptl));
354 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
359 if (max_num_sub_layers - 1> 0)
360 for (
i = max_num_sub_layers - 1;
i < 8;
i++)
362 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
366 "PTL information for sublayer %i too short\n",
i);
372 "Not enough data for sublayer %i level_idc\n",
i);
387 for (
i = 0;
i < nb_cpb;
i++) {
391 if (subpic_params_present) {
403 if (common_inf_present) {
430 for (
int i = 0;
i < max_sublayers;
i++) {
431 unsigned fixed_pic_rate_general_flag =
get_bits1(gb);
432 unsigned fixed_pic_rate_within_cvs_flag = 0;
433 unsigned low_delay_hrd_flag = 0;
436 if (!fixed_pic_rate_general_flag)
437 fixed_pic_rate_within_cvs_flag =
get_bits1(gb);
440 if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
446 if (!low_delay_hrd_flag) {
448 if (cpb_cnt_minus1 > 31) {
483 uint64_t layer1_id_included)
487 uint8_t dimension_id_len[16] = {0};
488 uint8_t dimension_id[16] = {0};
491 int splitting_flag, view_id_len, num_add_olss, num_scalability_types,
492 default_output_layer_idc, direct_dep_type_len, direct_dep_type,
493 sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
494 unsigned non_vui_extension_length;
496 if (
vps->vps_max_layers == 1) {
501 if (
vps->vps_max_layers > 2) {
503 "VPS has %d layers, only 2 layers are supported\n",
504 vps->vps_max_layers);
507 if (
vps->vps_num_layer_sets > 2) {
509 "VPS has %d layer sets, only 2 layer sets are supported\n",
510 vps->vps_num_layer_sets);
550 if (
parse_ptl(gb, avctx, 0, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
556 if (!num_scalability_types) {
561 if (!(
vps->scalability_mask_flag &
564 15 -
ff_ctz(
vps->scalability_mask_flag));
568 if (num_scalability_types > 1)
572 for (
int i = 0;
i < num_scalability_types - splitting_flag;
i++) {
573 dimension_id_len[
i] =
get_bits(gb, 3) + 1;
574 n += dimension_id_len[
i];
577 dimension_id_len[num_scalability_types - 1] = 5 - n;
580 int layer_id_in_nuh =
get_bits(gb, 6);
586 vps->layer_idx[layer_id_in_nuh] = 1;
587 vps->layer_id_in_nuh[1] = layer_id_in_nuh;
589 vps->layer_idx[1] = 1;
590 vps->layer_id_in_nuh[1] = 1;
593 if (!splitting_flag) {
596 for (
int i = 0;
i < num_scalability_types;
i++)
597 dimension_id[
i] =
get_bits(gb, dimension_id_len[
i]);
606 "Unsupported dimension_id %d for HEVC_SCALABILITY_AUXILIARY\n",
607 dimension_id[
index]);
615 for (
int i = 0;
i < n;
i++)
621 if (!
vps->num_direct_ref_layers[1]) {
623 if (
vps->num_add_layer_sets > 1) {
625 "Unsupported num_add_layer_sets: %d\n",
vps->num_add_layer_sets);
629 if (
vps->num_add_layer_sets) {
635 vps->num_output_layer_sets =
vps->vps_num_layer_sets +
vps->num_add_layer_sets;
636 if (
vps->num_output_layer_sets != 2)
640 if (sub_layers_max_present) {
641 for (
int i = 0;
i <
vps->vps_max_layers;
i++)
642 max_sub_layers[
i] = sub_layers_max_present ?
get_bits(gb, 3) + 1 :
643 vps->vps_max_sub_layers;
655 for (
int i = 2;
i < nb_ptl;
i++) {
657 if (
parse_ptl(gb, avctx, profile_present, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
662 if (num_add_olss != 0) {
669 default_output_layer_idc =
get_bits(gb, 2);
670 if (default_output_layer_idc != 0) {
672 default_output_layer_idc);
677 if (layer1_id_included &&
678 layer1_id_included != ((1ULL <<
vps->layer_id_in_nuh[0]) |
679 (1ULL <<
vps->layer_id_in_nuh[1]))) {
681 "Dependent layer not included in layer ID?\n");
684 if (!layer1_id_included)
689 if (
vps->vps_num_layer_sets == 1 || default_output_layer_idc == 2)
695 if (ptl_idx >= nb_ptl) {
706 vps->rep_format.pic_width_in_luma_samples =
get_bits(gb, 16);
707 vps->rep_format.pic_height_in_luma_samples =
get_bits(gb, 16);
711 "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
714 vps->rep_format.chroma_format_idc =
get_bits(gb, 2);
715 if (
vps->rep_format.chroma_format_idc == 3)
716 vps->rep_format.separate_colour_plane_flag =
get_bits1(gb);
717 vps->rep_format.bit_depth_luma =
get_bits(gb, 4) + 8;
718 vps->rep_format.bit_depth_chroma =
get_bits(gb, 4) + 8;
719 if (
vps->rep_format.bit_depth_luma > 16 ||
720 vps->rep_format.bit_depth_chroma > 16 ||
721 vps->rep_format.bit_depth_luma !=
vps->rep_format.bit_depth_chroma) {
723 vps->rep_format.bit_depth_luma,
vps->rep_format.bit_depth_chroma);
728 int ret =
read_window(&
vps->rep_format.conf_win, gb,
vps->rep_format.chroma_format_idc,
vps->rep_format.pic_width_in_luma_samples,
vps->rep_format.pic_height_in_luma_samples);
735 if (!
vps->num_direct_ref_layers[1])
738 sub_layer_flag_info_present_flag =
get_bits1(gb);
739 for (
int j = 0; j <
FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
740 int sub_layer_dpb_info_present_flag = 1;
741 if (j > 0 && sub_layer_flag_info_present_flag)
742 sub_layer_dpb_info_present_flag =
get_bits1(gb);
743 if (sub_layer_dpb_info_present_flag) {
752 if (direct_dep_type_len > 32) {
754 direct_dep_type_len);
769 if (non_vui_extension_length > 4096) {
771 non_vui_extension_length);
789 uint64_t layer1_id_included = 0;
790 unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
806 vps->data_size = nal_size;
812 vps->vps_id = vps_id;
814 vps_base_layer_internal_flag =
get_bits1(gb);
815 vps_base_layer_available_flag =
get_bits1(gb);
816 if (!vps_base_layer_internal_flag || !vps_base_layer_available_flag) {
818 "vps_base_layer_internal_flag or vps_base_layer_available_flag not set\n");
834 vps->vps_max_sub_layers);
841 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
843 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
844 for (;
i <
vps->vps_max_sub_layers;
i++) {
851 vps->vps_max_dec_pic_buffering[
i] - 1);
854 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
856 vps->vps_num_reorder_pics[
i]);
864 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
870 vps->num_output_layer_sets = 1;
874 if (
vps->vps_num_layer_sets > 1)
875 layer1_id_included =
get_bits64(gb,
vps->vps_max_layer_id + 1);
876 if (
vps->vps_num_layer_sets > 2)
880 if (
vps->vps_timing_info_present_flag) {
883 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
884 if (
vps->vps_poc_proportional_to_timing_flag)
887 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
889 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
893 if (
vps->vps_num_hrd_parameters) {
899 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
900 int common_inf_present = 1;
906 vps->vps_max_sub_layers);
911 vps->layer_idx[0] = 0;
913 vps->layer_idx[
i] = -1;
945 VUI backup_vui, *vui = &
sps->vui;
956 switch (
sps->pix_fmt) {
976 memcpy(&backup, gb,
sizeof(backup));
977 memcpy(&backup_vui, vui,
sizeof(backup_vui));
987 if (apply_defdispwin &&
990 "discarding vui default display window, "
991 "original values are l:%u r:%u t:%u b:%u\n",
1012 "Strange VUI timing information, retrying...\n");
1013 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1014 memcpy(gb, &backup,
sizeof(backup));
1036 "Strange VUI bitstream restriction information, retrying"
1037 " from timing information...\n");
1038 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1039 memcpy(gb, &backup,
sizeof(backup));
1056 "Overread in VUI, retrying from timing information...\n");
1057 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1058 memcpy(gb, &backup,
sizeof(backup));
1068 for (matrixId = 0; matrixId < 6; matrixId++) {
1070 memset(sl->
sl[0][matrixId], 16, 16);
1071 sl->
sl_dc[0][matrixId] = 16;
1072 sl->
sl_dc[1][matrixId] = 16;
1097 uint8_t scaling_list_pred_mode_flag;
1098 uint8_t scaling_list_dc_coef[2][6];
1099 int size_id, matrix_id,
pos;
1102 for (size_id = 0; size_id < 4; size_id++)
1103 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1104 scaling_list_pred_mode_flag =
get_bits1(gb);
1105 if (!scaling_list_pred_mode_flag) {
1111 delta *= (size_id == 3) ? 3 : 1;
1112 if (matrix_id <
delta) {
1114 "Invalid delta in scaling list data: %d.\n",
delta);
1118 memcpy(sl->
sl[size_id][matrix_id],
1119 sl->
sl[size_id][matrix_id -
delta],
1120 size_id > 0 ? 64 : 16);
1122 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
1125 int next_coef, coef_num;
1126 int32_t scaling_list_delta_coef;
1129 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
1132 if (scaling_list_coeff_minus8 < -7 ||
1133 scaling_list_coeff_minus8 > 247)
1135 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1136 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1137 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
1139 for (
i = 0;
i < coef_num;
i++) {
1148 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
1149 sl->
sl[size_id][matrix_id][
pos] = next_coef;
1154 if (
sps->chroma_format_idc == 3) {
1155 for (
i = 0;
i < 64;
i++) {
1156 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
1157 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
1158 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
1159 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
1174 switch (
sps->bit_depth) {
1201 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1202 "chroma_format_idc is %d, depth is %d\n",
1203 sps->chroma_format_idc,
sps->bit_depth);
1211 sps->hshift[0] =
sps->vshift[0] = 0;
1212 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
1213 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
1215 sps->pixel_shift =
sps->bit_depth > 8;
1221 unsigned nuh_layer_id,
int apply_defdispwin,
1226 int bit_depth_chroma, num_comps, multi_layer_ext;
1227 int vps_max_sub_layers;
1235 if (!vps_list[
sps->vps_id]) {
1244 multi_layer_ext = nuh_layer_id > 0 &&
1246 if (multi_layer_ext) {
1250 sps->max_sub_layers =
sps->vps->vps_max_sub_layers;
1252 vps_max_sub_layers =
sps->vps ?
sps->vps->vps_max_sub_layers
1255 if (
sps->max_sub_layers > vps_max_sub_layers) {
1257 sps->max_sub_layers);
1261 if (!multi_layer_ext) {
1267 sps->temporal_id_nesting =
sps->max_sub_layers > 1 ?
1268 sps->vps->vps_max_sub_layers : 1;
1277 if (multi_layer_ext) {
1280 if (
sps->vps->nb_layers == 1) {
1293 sps->chroma_format_idc =
sps->separate_colour_plane ? 0 :
1299 sps->height, 0, avctx)) < 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) {
1334 "discarding sps conformance window, "
1335 "original values are l:%u r:%u t:%u b:%u\n",
1336 sps->pic_conf_win.left_offset,
1337 sps->pic_conf_win.right_offset,
1338 sps->pic_conf_win.top_offset,
1339 sps->pic_conf_win.bottom_offset);
1341 sps->pic_conf_win.left_offset =
1342 sps->pic_conf_win.right_offset =
1343 sps->pic_conf_win.top_offset =
1344 sps->pic_conf_win.bottom_offset = 0;
1349 if (
sps->bit_depth > 16) {
1355 if (bit_depth_chroma > 16) {
1360 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1362 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1363 "this is unsupported.\n",
1364 sps->bit_depth, bit_depth_chroma);
1367 sps->bit_depth_chroma = bit_depth_chroma;
1370 sps->output_window =
sps->pic_conf_win;
1377 if (
sps->log2_max_poc_lsb > 16) {
1379 sps->log2_max_poc_lsb - 4);
1383 if (!multi_layer_ext) {
1387 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1388 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1394 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1397 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1399 sps->temporal_layer[
i].num_reorder_pics);
1404 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1408 if (!
sps->sublayer_ordering_info) {
1409 for (
i = 0;
i < start;
i++) {
1410 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1411 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1412 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1416 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1417 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1418 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1419 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1427 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1428 sps->log2_min_tb_size;
1430 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1435 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1436 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);
1440 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1445 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1446 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1447 sps->log2_diff_max_min_transform_block_size);
1455 if (
sps->scaling_list_enabled) {
1474 if (
sps->pcm_enabled) {
1478 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1480 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1482 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1483 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1496 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1503 if (
sps->long_term_ref_pics_present) {
1507 sps->num_long_term_ref_pics_sps);
1511 sps->used_by_curr_pic_lt = 0;
1512 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1522 if (
sps->vui_present)
1526 if (
sps->extension_present) {
1533 if (
sps->range_extension) {
1540 if (
sps->extended_precision_processing)
1542 "extended_precision_processing_flag not yet implemented\n");
1546 if (
sps->high_precision_offsets_enabled)
1548 "high_precision_offsets_enabled_flag not yet implemented\n");
1550 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1553 if (
sps->cabac_bypass_alignment_enabled)
1555 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1558 if (
sps->multilayer_extension) {
1562 if (
sps->sps_3d_extension) {
1563 for (
i = 0;
i <= 1;
i++) {
1583 "sps_3d_extension_flag not yet implemented\n");
1586 if (
sps->scc_extension) {
1589 if (
sps->palette_mode_enabled) {
1592 sps->palette_predictor_initializers_present =
get_bits1(gb);
1594 if (
sps->palette_predictor_initializers_present) {
1598 "sps_num_palette_predictor_initializers out of range: %u\n",
1599 sps->sps_num_palette_predictor_initializers);
1602 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1605 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1610 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1611 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1614 if (apply_defdispwin) {
1615 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1616 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1617 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1618 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1621 ow = &
sps->output_window;
1632 "Displaying the whole video surface.\n");
1633 memset(ow, 0,
sizeof(*ow));
1634 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1638 sps->log2_ctb_size =
sps->log2_min_cb_size +
1639 sps->log2_diff_max_min_coding_block_size;
1640 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1646 if (
sps->log2_ctb_size < 4) {
1649 "log2_ctb_size %d differs from the bounds of any known profile\n",
1650 sps->log2_ctb_size);
1655 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1656 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1657 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1659 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1660 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1661 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1662 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1663 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1664 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1665 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1667 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1675 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1676 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1677 sps->max_transform_hierarchy_depth_inter);
1680 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1681 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1682 sps->max_transform_hierarchy_depth_intra);
1685 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1687 "max transform block size out of range: %d\n",
1688 sps->log2_max_trafo_size);
1718 int apply_defdispwin)
1737 nuh_layer_id, apply_defdispwin,
1744 "Parsed SPS: id %d; coded wxh: %dx%d; "
1745 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1747 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1748 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1789 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1791 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1794 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1796 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1798 if (split_octant_flag)
1799 for (
int k = 0; k < 2; k++)
1800 for (
int m = 0; m < 2; m++)
1801 for (
int n = 0; n < 2; n++)
1803 idx_y + part_num_y * k * inp_length / 2,
1804 idx_cb + m * inp_length / 2,
1805 idx_cr + n * inp_length / 2,
1808 for (
int i = 0;
i < part_num_y;
i++) {
1809 for (
int j = 0; j < 4; j++) {
1812 for (
int c = 0;
c < 3;
c++) {
1814 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1815 pps->luma_bit_depth_cm_output -
1816 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1817 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1818 if (res_coeff_q || res_coeff_r)
1828 if (
pps->num_cm_ref_layers > 62) {
1830 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1833 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1845 ||
pps->chroma_bit_depth_cm_output <
pps->chroma_bit_depth_cm_input)
1851 if (
pps->cm_octant_depth == 1) {
1866 if (
pps->pps_infer_scaling_list_flag)
1867 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1870 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1873 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1875 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1876 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1884 if (
pps->ref_region_offset_present_flag[
i]) {
1892 if (
pps->resample_phase_set_present_flag[
i]) {
1901 if (
pps->colour_mapping_enabled_flag) {
1912 unsigned int num_val_delta_dlt, max_diff = 0;
1913 int min_diff_minus1 = -1;
1916 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1917 if (num_val_delta_dlt) {
1918 if (num_val_delta_dlt > 1)
1919 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1920 if (num_val_delta_dlt > 2 && max_diff) {
1924 if (max_diff > (min_diff_minus1 + 1))
1925 for (
int k = 1; k < num_val_delta_dlt; k++) {
1926 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1935 unsigned int pps_depth_layers_minus1;
1938 pps_depth_layers_minus1 =
get_bits(gb, 6);
1939 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1940 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1944 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1959 if (
pps->transform_skip_enabled_flag) {
1962 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1963 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1964 if (
pps->chroma_qp_offset_list_enabled_flag) {
1967 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1969 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1972 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1974 if (
pps->cb_qp_offset_list[
i]) {
1976 "cb_qp_offset_list not tested yet.\n");
1979 if (
pps->cr_qp_offset_list[
i]) {
1981 "cb_qp_offset_list not tested yet.\n");
1988 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1989 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
2002 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
2003 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
2008 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2009 pps->pps_act_ ## name ## _qp_offset >= 12)
2011 #undef CHECK_QP_OFFSET
2014 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2019 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2021 if (
pps->pps_num_palette_predictor_initializers > 0) {
2024 "pps_num_palette_predictor_initializers out of range: %u\n",
2025 pps->pps_num_palette_predictor_initializers);
2030 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2032 if (!
pps->monochrome_palette_flag) {
2034 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2038 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2041 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2054 int pic_area_in_ctbs;
2055 int i, j, x, y, ctb_addr_rs,
tile_id;
2061 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2064 if (
pps->uniform_spacing_flag) {
2065 if (!
pps->column_width) {
2069 if (!
pps->column_width || !
pps->row_height)
2072 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2073 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2074 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2077 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2078 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2079 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2084 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2085 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2088 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2089 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2091 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2092 if (
i >
pps->col_bd[j])
2094 pps->col_idxX[
i] = j;
2100 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2106 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2107 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2111 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2112 int tb_x = ctb_addr_rs %
sps->ctb_width;
2113 int tb_y = ctb_addr_rs /
sps->ctb_width;
2118 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2119 if (tb_x < pps->
col_bd[
i + 1]) {
2125 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2126 if (tb_y < pps->
row_bd[
i + 1]) {
2132 for (
i = 0;
i < tile_x;
i++)
2133 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2134 for (
i = 0;
i < tile_y;
i++)
2137 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2138 tb_x -
pps->col_bd[tile_x];
2140 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2141 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2144 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2146 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2147 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2151 if (!
pps->tile_pos_rs)
2154 for (j = 0; j <
pps->num_tile_rows; j++)
2155 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2156 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2157 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2159 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2160 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2161 for (y = 0; y <
sps->tb_mask+2; y++) {
2162 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2163 pps->min_tb_addr_zs_tab[y] = -1;
2165 for (y = 0; y <
sps->tb_mask+1; y++) {
2166 for (x = 0; x <
sps->tb_mask+1; x++) {
2167 int tb_x = x >> log2_diff;
2168 int tb_y = y >> log2_diff;
2169 int rs =
sps->ctb_width * tb_y + tb_x;
2170 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2171 for (
i = 0;
i < log2_diff;
i++) {
2173 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2175 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2190 unsigned log2_parallel_merge_level_minus2;
2211 pps->data_size = nal_size;
2219 pps->loop_filter_across_tiles_enabled_flag = 1;
2220 pps->num_tile_columns = 1;
2221 pps->num_tile_rows = 1;
2222 pps->uniform_spacing_flag = 1;
2223 pps->disable_dbf = 0;
2224 pps->beta_offset = 0;
2226 pps->log2_max_transform_skip_block_size = 2;
2246 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2248 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2259 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2269 pps->diff_cu_qp_delta_depth = 0;
2270 if (
pps->cu_qp_delta_enabled_flag)
2273 if (
pps->diff_cu_qp_delta_depth < 0 ||
2274 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2276 pps->diff_cu_qp_delta_depth);
2282 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2289 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2295 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2304 if (
pps->tiles_enabled_flag) {
2308 if (num_tile_columns_minus1 < 0 ||
2309 num_tile_columns_minus1 >=
sps->ctb_width) {
2311 num_tile_columns_minus1);
2315 if (num_tile_rows_minus1 < 0 ||
2316 num_tile_rows_minus1 >=
sps->ctb_height) {
2318 num_tile_rows_minus1);
2322 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2323 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2327 if (!
pps->column_width || !
pps->row_height) {
2333 if (!
pps->uniform_spacing_flag) {
2335 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2337 sum +=
pps->column_width[
i];
2339 if (sum >=
sps->ctb_width) {
2344 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2347 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2349 sum +=
pps->row_height[
i];
2351 if (sum >=
sps->ctb_height) {
2356 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2358 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2361 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2363 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2364 if (
pps->deblocking_filter_control_present_flag) {
2365 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2367 if (!
pps->disable_dbf) {
2370 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2376 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2382 pps->beta_offset = 2 * beta_offset_div2;
2383 pps->tc_offset = 2 * tc_offset_div2;
2388 if (
pps->scaling_list_data_present_flag) {
2396 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2398 log2_parallel_merge_level_minus2);
2402 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2404 pps->slice_header_extension_present_flag =
get_bits1(gb);
2407 if (
pps->pps_extension_present_flag) {
2419 if (
pps->pps_multilayer_extension_flag) {
2424 if (
pps->pps_3d_extension_flag) {
2429 if (
pps->pps_scc_extension_flag) {
2468 int max_poc_lsb = 1 << log2_max_poc_lsb;
2469 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2470 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2473 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2474 poc_msb = prev_poc_msb + max_poc_lsb;
2475 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2476 poc_msb = prev_poc_msb - max_poc_lsb;
2478 poc_msb = prev_poc_msb;
2486 return poc_msb + poc_lsb;