37 16, 16, 16, 16, 17, 18, 21, 24,
38 16, 16, 16, 16, 17, 19, 22, 25,
39 16, 16, 17, 18, 20, 22, 25, 29,
40 16, 16, 18, 21, 24, 27, 31, 36,
41 17, 17, 20, 24, 30, 35, 41, 47,
42 18, 19, 22, 27, 35, 44, 54, 65,
43 21, 22, 25, 31, 41, 54, 70, 88,
44 24, 25, 29, 36, 47, 65, 88, 115
48 16, 16, 16, 16, 17, 18, 20, 24,
49 16, 16, 16, 17, 18, 20, 24, 25,
50 16, 16, 17, 18, 20, 24, 25, 28,
51 16, 17, 18, 20, 24, 25, 28, 33,
52 17, 18, 20, 24, 25, 28, 33, 41,
53 18, 20, 24, 25, 28, 33, 41, 54,
54 20, 24, 25, 28, 33, 41, 54, 71,
55 24, 25, 28, 33, 41, 54, 71, 91
75 if (
left < 0 || right < 0 || top < 0 || bottom < 0 ||
83 window->right_offset = right;
85 window->bottom_offset = bottom;
92 if (
s->sps_list[
id]) {
95 if (
s->pps_list[
i] &&
s->pps_list[
i]->sps_id ==
id)
105 if (
s->vps_list[
id]) {
107 if (
s->sps_list[
i] &&
s->sps_list[
i]->vps_id ==
id)
124 if (rps !=
sps->st_rps &&
sps->nb_st_rps)
129 uint8_t used[32] = { 0 };
132 if (is_slice_header) {
136 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
143 rps_ridx = &
sps->st_rps[rps -
sps->st_rps - 1];
149 "Invalid value of abs_delta_rps: %d\n",
162 if (i < rps_ridx->num_delta_pocs)
163 delta_poc = delta_rps + rps_ridx->
delta_poc[
i];
165 delta_poc = delta_rps;
175 "Invalid num_delta_pocs: %d\n", k);
187 for (k =
i - 1; k >= 0; k--) {
189 if (delta_poc <
tmp) {
191 used[k + 1] = used[k];
214 rps->
used |= (uint32_t)used[
i] <<
i;
216 unsigned int nb_positive_pics;
233 if (delta_poc < 1 || delta_poc > 32768) {
235 "Invalid value of delta_poc: %d\n",
244 for (
i = 0;
i < nb_positive_pics;
i++) {
246 if (delta_poc < 1 || delta_poc > 32768) {
248 "Invalid value of delta_poc: %d\n",
275 const char *profile_name =
NULL;
282 "%s profile bitstream\n", profile_name ? profile_name :
"Unknown");
285 for (
i = 0;
i < 32;
i++) {
288 if (
ptl->profile_idc == 0 &&
i > 0 &&
ptl->profile_compatibility_flag[
i])
289 ptl->profile_idc =
i;
296 #define check_profile_idc(idc) \
297 ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
332 #undef check_profile_idc
338 int profile_present,
PTL *
ptl,
int max_num_sub_layers)
342 if (profile_present) {
345 memset(&
ptl->general_ptl, 0,
sizeof(
ptl->general_ptl));
355 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
360 if (max_num_sub_layers - 1> 0)
361 for (
i = max_num_sub_layers - 1;
i < 8;
i++)
363 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
367 "PTL information for sublayer %i too short\n",
i);
373 "Not enough data for sublayer %i level_idc\n",
i);
388 for (
i = 0;
i < nb_cpb;
i++) {
392 if (subpic_params_present) {
404 if (common_inf_present) {
431 for (
int i = 0;
i < max_sublayers;
i++) {
432 unsigned fixed_pic_rate_general_flag =
get_bits1(gb);
433 unsigned fixed_pic_rate_within_cvs_flag = 0;
434 unsigned low_delay_hrd_flag = 0;
437 if (!fixed_pic_rate_general_flag)
438 fixed_pic_rate_within_cvs_flag =
get_bits1(gb);
441 if (fixed_pic_rate_within_cvs_flag || fixed_pic_rate_general_flag)
447 if (!low_delay_hrd_flag) {
449 if (cpb_cnt_minus1 > 31) {
484 uint64_t layer1_id_included)
488 uint8_t dimension_id_len[16] = {0};
489 uint8_t dimension_id[16] = {0};
492 int splitting_flag, view_id_len, num_add_olss, num_scalability_types,
493 default_output_layer_idc, direct_dep_type_len, direct_dep_type,
494 sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
495 unsigned non_vui_extension_length;
497 if (
vps->vps_max_layers == 1) {
502 if (
vps->vps_max_layers > 2) {
504 "VPS has %d layers, only 2 layers are supported\n",
505 vps->vps_max_layers);
508 if (
vps->vps_num_layer_sets > 2) {
510 "VPS has %d layer sets, only 2 layer sets are supported\n",
511 vps->vps_num_layer_sets);
551 if (
parse_ptl(gb, avctx, 0, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
557 if (!num_scalability_types) {
562 if (!(
vps->scalability_mask_flag &
565 15 -
ff_ctz(
vps->scalability_mask_flag));
569 if (num_scalability_types > 1)
573 for (
int i = 0;
i < num_scalability_types - splitting_flag;
i++) {
574 dimension_id_len[
i] =
get_bits(gb, 3) + 1;
575 n += dimension_id_len[
i];
578 dimension_id_len[num_scalability_types - 1] = 5 - n;
581 int layer_id_in_nuh =
get_bits(gb, 6);
587 vps->layer_idx[layer_id_in_nuh] = 1;
588 vps->layer_id_in_nuh[1] = layer_id_in_nuh;
590 vps->layer_idx[1] = 1;
591 vps->layer_id_in_nuh[1] = 1;
594 if (!splitting_flag) {
597 for (
int i = 0;
i < num_scalability_types;
i++)
598 dimension_id[
i] =
get_bits(gb, dimension_id_len[
i]);
607 "Unsupported dimension_id %d for HEVC_SCALABILITY_AUXILIARY\n",
608 dimension_id[
index]);
616 for (
int i = 0;
i < n;
i++)
622 if (!
vps->num_direct_ref_layers[1]) {
624 if (
vps->num_add_layer_sets > 1) {
626 "Unsupported num_add_layer_sets: %d\n",
vps->num_add_layer_sets);
630 if (
vps->num_add_layer_sets) {
636 vps->num_output_layer_sets =
vps->vps_num_layer_sets +
vps->num_add_layer_sets;
637 if (
vps->num_output_layer_sets != 2) {
639 "Unsupported num_output_layer_sets: %d\n",
vps->num_output_layer_sets);
644 if (sub_layers_max_present) {
645 for (
int i = 0;
i <
vps->vps_max_layers;
i++)
646 max_sub_layers[
i] = sub_layers_max_present ?
get_bits(gb, 3) + 1 :
647 vps->vps_max_sub_layers;
659 for (
int i = 2;
i < nb_ptl;
i++) {
661 if (
parse_ptl(gb, avctx, profile_present, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
666 if (num_add_olss != 0) {
673 default_output_layer_idc =
get_bits(gb, 2);
674 if (default_output_layer_idc != 0) {
676 default_output_layer_idc);
681 if (layer1_id_included &&
682 layer1_id_included != ((1ULL <<
vps->layer_id_in_nuh[0]) |
683 (1ULL <<
vps->layer_id_in_nuh[1]))) {
685 "Dependent layer not included in layer ID?\n");
688 if (!layer1_id_included)
693 if (
vps->vps_num_layer_sets == 1 || default_output_layer_idc == 2)
699 if (ptl_idx >= nb_ptl) {
710 vps->rep_format.pic_width_in_luma_samples =
get_bits(gb, 16);
711 vps->rep_format.pic_height_in_luma_samples =
get_bits(gb, 16);
715 "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
718 vps->rep_format.chroma_format_idc =
get_bits(gb, 2);
719 if (
vps->rep_format.chroma_format_idc == 3)
720 vps->rep_format.separate_colour_plane_flag =
get_bits1(gb);
721 vps->rep_format.bit_depth_luma =
get_bits(gb, 4) + 8;
722 vps->rep_format.bit_depth_chroma =
get_bits(gb, 4) + 8;
723 if (
vps->rep_format.bit_depth_luma > 16 ||
724 vps->rep_format.bit_depth_chroma > 16 ||
725 vps->rep_format.bit_depth_luma !=
vps->rep_format.bit_depth_chroma) {
727 vps->rep_format.bit_depth_luma,
vps->rep_format.bit_depth_chroma);
732 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);
739 if (!
vps->num_direct_ref_layers[1])
742 sub_layer_flag_info_present_flag =
get_bits1(gb);
743 for (
int j = 0; j <
FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
744 int sub_layer_dpb_info_present_flag = 1;
745 if (j > 0 && sub_layer_flag_info_present_flag)
746 sub_layer_dpb_info_present_flag =
get_bits1(gb);
747 if (sub_layer_dpb_info_present_flag) {
756 if (direct_dep_type_len > 32) {
758 direct_dep_type_len);
773 if (non_vui_extension_length > 4096) {
775 non_vui_extension_length);
793 uint64_t layer1_id_included = 0;
794 unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
810 vps->data_size = nal_size;
816 vps->vps_id = vps_id;
818 vps_base_layer_internal_flag =
get_bits1(gb);
819 vps_base_layer_available_flag =
get_bits1(gb);
820 if (!vps_base_layer_internal_flag || !vps_base_layer_available_flag) {
822 "vps_base_layer_internal_flag or vps_base_layer_available_flag not set\n");
838 vps->vps_max_sub_layers);
845 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
847 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
848 for (;
i <
vps->vps_max_sub_layers;
i++) {
855 vps->vps_max_dec_pic_buffering[
i] - 1);
858 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
860 vps->vps_num_reorder_pics[
i]);
868 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
874 vps->num_output_layer_sets = 1;
878 if (
vps->vps_num_layer_sets > 1)
879 layer1_id_included =
get_bits64(gb,
vps->vps_max_layer_id + 1);
880 if (
vps->vps_num_layer_sets > 2)
884 if (
vps->vps_timing_info_present_flag) {
887 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
888 if (
vps->vps_poc_proportional_to_timing_flag)
891 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
893 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
897 if (
vps->vps_num_hrd_parameters) {
903 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
904 int common_inf_present = 1;
910 vps->vps_max_sub_layers);
915 vps->layer_idx[0] = 0;
917 vps->layer_idx[
i] = -1;
924 vps->nb_layers == 2 &&
925 vps->layer_id_in_nuh[1] &&
928 "Broken VPS extension, treating as alpha video\n");
933 if (!
vps->num_direct_ref_layers[1])
934 vps->poc_lsb_not_present |= 1 << 1;
964 VUI backup_vui, *vui = &
sps->vui;
975 switch (
sps->pix_fmt) {
995 memcpy(&backup, gb,
sizeof(backup));
996 memcpy(&backup_vui, vui,
sizeof(backup_vui));
1006 if (apply_defdispwin &&
1009 "discarding vui default display window, "
1010 "original values are l:%u r:%u t:%u b:%u\n",
1031 "Strange VUI timing information, retrying...\n");
1032 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1033 memcpy(gb, &backup,
sizeof(backup));
1055 "Strange VUI bitstream restriction information, retrying"
1056 " from timing information...\n");
1057 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1058 memcpy(gb, &backup,
sizeof(backup));
1075 "Overread in VUI, retrying from timing information...\n");
1076 memcpy(vui, &backup_vui,
sizeof(backup_vui));
1077 memcpy(gb, &backup,
sizeof(backup));
1087 for (matrixId = 0; matrixId < 6; matrixId++) {
1089 memset(sl->
sl[0][matrixId], 16, 16);
1090 sl->
sl_dc[0][matrixId] = 16;
1091 sl->
sl_dc[1][matrixId] = 16;
1116 uint8_t scaling_list_pred_mode_flag;
1117 uint8_t scaling_list_dc_coef[2][6];
1118 int size_id, matrix_id,
pos;
1121 for (size_id = 0; size_id < 4; size_id++)
1122 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1123 scaling_list_pred_mode_flag =
get_bits1(gb);
1124 if (!scaling_list_pred_mode_flag) {
1130 delta *= (size_id == 3) ? 3 : 1;
1131 if (matrix_id <
delta) {
1133 "Invalid delta in scaling list data: %d.\n",
delta);
1137 memcpy(sl->
sl[size_id][matrix_id],
1138 sl->
sl[size_id][matrix_id -
delta],
1139 size_id > 0 ? 64 : 16);
1141 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
1144 int next_coef, coef_num;
1145 int32_t scaling_list_delta_coef;
1148 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
1151 if (scaling_list_coeff_minus8 < -7 ||
1152 scaling_list_coeff_minus8 > 247)
1154 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1155 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1156 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
1158 for (
i = 0;
i < coef_num;
i++) {
1167 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
1168 sl->
sl[size_id][matrix_id][
pos] = next_coef;
1173 if (
sps->chroma_format_idc == 3) {
1174 for (
i = 0;
i < 64;
i++) {
1175 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
1176 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
1177 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
1178 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
1193 switch (
sps->bit_depth) {
1220 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1221 "chroma_format_idc is %d, depth is %d\n",
1222 sps->chroma_format_idc,
sps->bit_depth);
1230 sps->hshift[0] =
sps->vshift[0] = 0;
1231 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
1232 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
1234 sps->pixel_shift =
sps->bit_depth > 8;
1240 unsigned nuh_layer_id,
int apply_defdispwin,
1245 int bit_depth_chroma, num_comps, multi_layer_ext;
1246 int vps_max_sub_layers;
1254 if (!vps_list[
sps->vps_id]) {
1263 multi_layer_ext = nuh_layer_id > 0 &&
1265 if (multi_layer_ext) {
1269 sps->max_sub_layers =
sps->vps->vps_max_sub_layers;
1271 vps_max_sub_layers =
sps->vps ?
sps->vps->vps_max_sub_layers
1274 if (
sps->max_sub_layers > vps_max_sub_layers) {
1276 sps->max_sub_layers);
1280 if (!multi_layer_ext) {
1286 sps->temporal_id_nesting =
sps->max_sub_layers > 1 ?
1287 sps->vps->vps_max_sub_layers : 1;
1296 if (multi_layer_ext) {
1299 if (
sps->vps->nb_layers == 1) {
1312 sps->chroma_format_idc =
sps->separate_colour_plane ? 0 :
1318 sps->height, 0, avctx)) < 0)
1328 if (
sps->chroma_format_idc > 3
U) {
1333 if (
sps->chroma_format_idc == 3)
1336 if (
sps->separate_colour_plane)
1337 sps->chroma_format_idc = 0;
1342 sps->height, 0, avctx)) < 0)
1346 if (
sps->conformance_window) {
1353 "discarding sps conformance window, "
1354 "original values are l:%u r:%u t:%u b:%u\n",
1355 sps->pic_conf_win.left_offset,
1356 sps->pic_conf_win.right_offset,
1357 sps->pic_conf_win.top_offset,
1358 sps->pic_conf_win.bottom_offset);
1360 sps->pic_conf_win.left_offset =
1361 sps->pic_conf_win.right_offset =
1362 sps->pic_conf_win.top_offset =
1363 sps->pic_conf_win.bottom_offset = 0;
1368 if (
sps->bit_depth > 16) {
1374 if (bit_depth_chroma > 16) {
1379 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1381 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1382 "this is unsupported.\n",
1383 sps->bit_depth, bit_depth_chroma);
1386 sps->bit_depth_chroma = bit_depth_chroma;
1389 sps->output_window =
sps->pic_conf_win;
1396 if (
sps->log2_max_poc_lsb > 16) {
1398 sps->log2_max_poc_lsb - 4);
1402 if (!multi_layer_ext) {
1406 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1407 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1413 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1416 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1418 sps->temporal_layer[
i].num_reorder_pics);
1423 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1427 if (!
sps->sublayer_ordering_info) {
1428 for (
i = 0;
i < start;
i++) {
1429 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1430 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1431 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1435 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1436 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1437 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1438 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1446 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1447 sps->log2_min_tb_size;
1449 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1454 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1455 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);
1459 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1464 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1465 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1466 sps->log2_diff_max_min_transform_block_size);
1474 if (
sps->scaling_list_enabled) {
1493 if (
sps->pcm_enabled) {
1497 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1499 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1501 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1502 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1515 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1522 if (
sps->long_term_ref_pics_present) {
1526 sps->num_long_term_ref_pics_sps);
1530 sps->used_by_curr_pic_lt = 0;
1531 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1541 if (
sps->vui_present)
1545 if (
sps->extension_present) {
1552 if (
sps->range_extension) {
1559 if (
sps->extended_precision_processing)
1561 "extended_precision_processing_flag not yet implemented\n");
1565 if (
sps->high_precision_offsets_enabled)
1567 "high_precision_offsets_enabled_flag not yet implemented\n");
1569 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1572 if (
sps->cabac_bypass_alignment_enabled)
1574 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1577 if (
sps->multilayer_extension) {
1581 if (
sps->sps_3d_extension) {
1582 for (
i = 0;
i <= 1;
i++) {
1602 "sps_3d_extension_flag not yet implemented\n");
1605 if (
sps->scc_extension) {
1608 if (
sps->palette_mode_enabled) {
1611 sps->palette_predictor_initializers_present =
get_bits1(gb);
1613 if (
sps->palette_predictor_initializers_present) {
1617 "sps_num_palette_predictor_initializers out of range: %u\n",
1618 sps->sps_num_palette_predictor_initializers);
1621 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1624 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1629 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1630 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1633 if (apply_defdispwin) {
1634 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1635 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1636 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1637 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1640 ow = &
sps->output_window;
1651 "Displaying the whole video surface.\n");
1652 memset(ow, 0,
sizeof(*ow));
1653 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1657 sps->log2_ctb_size =
sps->log2_min_cb_size +
1658 sps->log2_diff_max_min_coding_block_size;
1659 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1665 if (
sps->log2_ctb_size < 4) {
1668 "log2_ctb_size %d differs from the bounds of any known profile\n",
1669 sps->log2_ctb_size);
1674 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1675 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1676 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1678 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1679 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1680 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1681 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1682 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1683 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1684 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1686 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1694 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1695 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1696 sps->max_transform_hierarchy_depth_inter);
1699 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1700 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1701 sps->max_transform_hierarchy_depth_intra);
1704 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1706 "max transform block size out of range: %d\n",
1707 sps->log2_max_trafo_size);
1737 int apply_defdispwin)
1756 nuh_layer_id, apply_defdispwin,
1763 "Parsed SPS: id %d; coded wxh: %dx%d; "
1764 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1766 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1767 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1808 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1810 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1813 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1815 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1817 if (split_octant_flag)
1818 for (
int k = 0; k < 2; k++)
1819 for (
int m = 0; m < 2; m++)
1820 for (
int n = 0; n < 2; n++)
1822 idx_y + part_num_y * k * inp_length / 2,
1823 idx_cb + m * inp_length / 2,
1824 idx_cr + n * inp_length / 2,
1827 for (
int i = 0;
i < part_num_y;
i++) {
1828 for (
int j = 0; j < 4; j++) {
1831 for (
int c = 0;
c < 3;
c++) {
1833 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1834 pps->luma_bit_depth_cm_output -
1835 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1836 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1837 if (res_coeff_q || res_coeff_r)
1847 if (
pps->num_cm_ref_layers > 62) {
1849 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1852 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1864 ||
pps->chroma_bit_depth_cm_output <
pps->chroma_bit_depth_cm_input)
1870 if (
pps->cm_octant_depth == 1) {
1885 if (
pps->pps_infer_scaling_list_flag)
1886 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1889 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1892 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1894 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1895 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1903 if (
pps->ref_region_offset_present_flag[
i]) {
1911 if (
pps->resample_phase_set_present_flag[
i]) {
1920 if (
pps->colour_mapping_enabled_flag) {
1931 unsigned int num_val_delta_dlt, max_diff = 0;
1932 int min_diff_minus1 = -1;
1935 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1936 if (num_val_delta_dlt) {
1937 if (num_val_delta_dlt > 1)
1938 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1939 if (num_val_delta_dlt > 2 && max_diff) {
1943 if (max_diff > (min_diff_minus1 + 1))
1944 for (
int k = 1; k < num_val_delta_dlt; k++) {
1945 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1954 unsigned int pps_depth_layers_minus1;
1957 pps_depth_layers_minus1 =
get_bits(gb, 6);
1958 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1959 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1963 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1978 if (
pps->transform_skip_enabled_flag) {
1981 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1982 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1983 if (
pps->chroma_qp_offset_list_enabled_flag) {
1986 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1988 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1991 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1993 if (
pps->cb_qp_offset_list[
i]) {
1995 "cb_qp_offset_list not tested yet.\n");
1998 if (
pps->cr_qp_offset_list[
i]) {
2000 "cb_qp_offset_list not tested yet.\n");
2007 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
2008 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
2021 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
2022 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
2027 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2028 pps->pps_act_ ## name ## _qp_offset >= 12)
2030 #undef CHECK_QP_OFFSET
2033 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2038 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2040 if (
pps->pps_num_palette_predictor_initializers > 0) {
2043 "pps_num_palette_predictor_initializers out of range: %u\n",
2044 pps->pps_num_palette_predictor_initializers);
2049 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2051 if (!
pps->monochrome_palette_flag) {
2053 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2057 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2060 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2073 int pic_area_in_ctbs;
2074 int i, j, x, y, ctb_addr_rs,
tile_id;
2080 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2083 if (
pps->uniform_spacing_flag) {
2084 if (!
pps->column_width) {
2088 if (!
pps->column_width || !
pps->row_height)
2091 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2092 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2093 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2096 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2097 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2098 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2103 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2104 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2107 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2108 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2110 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2111 if (
i >
pps->col_bd[j])
2113 pps->col_idxX[
i] = j;
2119 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2125 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2126 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2130 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2131 int tb_x = ctb_addr_rs %
sps->ctb_width;
2132 int tb_y = ctb_addr_rs /
sps->ctb_width;
2137 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2138 if (tb_x < pps->
col_bd[
i + 1]) {
2144 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2145 if (tb_y < pps->
row_bd[
i + 1]) {
2151 for (
i = 0;
i < tile_x;
i++)
2152 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2153 for (
i = 0;
i < tile_y;
i++)
2156 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2157 tb_x -
pps->col_bd[tile_x];
2159 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2160 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2163 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2165 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2166 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2170 if (!
pps->tile_pos_rs)
2173 for (j = 0; j <
pps->num_tile_rows; j++)
2174 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2175 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2176 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2178 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2179 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2180 for (y = 0; y <
sps->tb_mask+2; y++) {
2181 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2182 pps->min_tb_addr_zs_tab[y] = -1;
2184 for (y = 0; y <
sps->tb_mask+1; y++) {
2185 for (x = 0; x <
sps->tb_mask+1; x++) {
2186 int tb_x = x >> log2_diff;
2187 int tb_y = y >> log2_diff;
2188 int rs =
sps->ctb_width * tb_y + tb_x;
2189 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2190 for (
i = 0;
i < log2_diff;
i++) {
2192 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2194 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2209 unsigned log2_parallel_merge_level_minus2;
2230 pps->data_size = nal_size;
2238 pps->loop_filter_across_tiles_enabled_flag = 1;
2239 pps->num_tile_columns = 1;
2240 pps->num_tile_rows = 1;
2241 pps->uniform_spacing_flag = 1;
2242 pps->disable_dbf = 0;
2243 pps->beta_offset = 0;
2245 pps->log2_max_transform_skip_block_size = 2;
2265 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2267 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2278 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2288 pps->diff_cu_qp_delta_depth = 0;
2289 if (
pps->cu_qp_delta_enabled_flag)
2292 if (
pps->diff_cu_qp_delta_depth < 0 ||
2293 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2295 pps->diff_cu_qp_delta_depth);
2301 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2308 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2314 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2323 if (
pps->tiles_enabled_flag) {
2327 if (num_tile_columns_minus1 < 0 ||
2328 num_tile_columns_minus1 >=
sps->ctb_width) {
2330 num_tile_columns_minus1);
2334 if (num_tile_rows_minus1 < 0 ||
2335 num_tile_rows_minus1 >=
sps->ctb_height) {
2337 num_tile_rows_minus1);
2341 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2342 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2346 if (!
pps->column_width || !
pps->row_height) {
2352 if (!
pps->uniform_spacing_flag) {
2354 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2356 sum +=
pps->column_width[
i];
2358 if (sum >=
sps->ctb_width) {
2363 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2366 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2368 sum +=
pps->row_height[
i];
2370 if (sum >=
sps->ctb_height) {
2375 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2377 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2380 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2382 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2383 if (
pps->deblocking_filter_control_present_flag) {
2384 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2386 if (!
pps->disable_dbf) {
2389 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2395 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2401 pps->beta_offset = 2 * beta_offset_div2;
2402 pps->tc_offset = 2 * tc_offset_div2;
2407 if (
pps->scaling_list_data_present_flag) {
2415 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2417 log2_parallel_merge_level_minus2);
2421 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2423 pps->slice_header_extension_present_flag =
get_bits1(gb);
2426 if (
pps->pps_extension_present_flag) {
2438 if (
pps->pps_multilayer_extension_flag) {
2443 if (
pps->pps_3d_extension_flag) {
2448 if (
pps->pps_scc_extension_flag) {
2487 int max_poc_lsb = 1 << log2_max_poc_lsb;
2488 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2489 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2492 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2493 poc_msb = prev_poc_msb + max_poc_lsb;
2494 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2495 poc_msb = prev_poc_msb - max_poc_lsb;
2497 poc_msb = prev_poc_msb;
2505 return poc_msb + poc_lsb;