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",
241 const char *profile_name =
NULL;
259 "%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) {
468 uint64_t layer1_id_included)
473 int splitting_flag, dimension_id_len, view_id_len, num_add_olss,
474 default_output_layer_idc, direct_dep_type_len, direct_dep_type,
475 sub_layers_max_present, sub_layer_flag_info_present_flag, nb_ptl;
476 unsigned non_vui_extension_length;
478 if (
vps->vps_max_layers == 1 ||
vps->vps_num_layer_sets == 1) {
483 if (
vps->vps_max_layers > 2) {
485 "VPS has %d layers, only 2 layers are supported\n",
486 vps->vps_max_layers);
489 if (
vps->vps_num_layer_sets > 2) {
491 "VPS has %d layer sets, only 2 layer sets are supported\n",
492 vps->vps_num_layer_sets);
531 if (
parse_ptl(gb, avctx, 0, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
536 int scalability_mask_flag =
get_bits1(gb);
544 dimension_id_len =
get_bits(gb, 3) + 1;
547 int layer_id_in_nuh =
get_bits(gb, 6);
553 vps->layer_idx[layer_id_in_nuh] = 1;
554 vps->layer_id_in_nuh[1] = layer_id_in_nuh;
556 vps->layer_idx[1] = 1;
557 vps->layer_id_in_nuh[1] = 1;
560 if (!splitting_flag) {
561 int view_idx =
get_bits(gb, dimension_id_len);
570 for (
int i = 0;
i < 2 ;
i++)
577 vps->num_direct_ref_layers[1] = 1;
580 for (
int i = 0;
i <
vps->vps_max_layers;
i++)
581 max_sub_layers[
i] = sub_layers_max_present ?
get_bits(gb, 3) + 1 :
582 vps->vps_max_sub_layers;
593 for (
int i = 2;
i < nb_ptl;
i++) {
595 if (
parse_ptl(gb, avctx, profile_present, &ptl_dummy,
vps->vps_max_sub_layers) < 0)
600 if (num_add_olss != 0) {
607 default_output_layer_idc =
get_bits(gb, 2);
608 if (default_output_layer_idc != 0) {
610 default_output_layer_idc);
615 if (layer1_id_included != ((1ULL <<
vps->layer_id_in_nuh[0]) |
616 (1ULL <<
vps->layer_id_in_nuh[1]))) {
621 vps->num_output_layer_sets = 2;
626 if (ptl_idx < 1 || ptl_idx >= nb_ptl) {
637 vps->rep_format.pic_width_in_luma_samples =
get_bits(gb, 16);
638 vps->rep_format.pic_height_in_luma_samples =
get_bits(gb, 16);
642 "chroma_and_bit_depth_vps_present_flag=0 in first rep_format\n");
645 vps->rep_format.chroma_format_idc =
get_bits(gb, 2);
646 if (
vps->rep_format.chroma_format_idc == 3)
647 vps->rep_format.separate_colour_plane_flag =
get_bits1(gb);
648 vps->rep_format.bit_depth_luma =
get_bits(gb, 4) + 8;
649 vps->rep_format.bit_depth_chroma =
get_bits(gb, 4) + 8;
650 if (
vps->rep_format.bit_depth_luma > 16 ||
651 vps->rep_format.bit_depth_chroma > 16 ||
652 vps->rep_format.bit_depth_luma !=
vps->rep_format.bit_depth_chroma) {
654 vps->rep_format.bit_depth_luma,
vps->rep_format.bit_depth_chroma);
670 sub_layer_flag_info_present_flag =
get_bits1(gb);
671 for (
int j = 0; j <
FFMAX(max_sub_layers[0], max_sub_layers[1]); j++) {
672 int sub_layer_dpb_info_present_flag = 1;
673 if (j > 0 && sub_layer_flag_info_present_flag)
674 sub_layer_dpb_info_present_flag =
get_bits1(gb);
675 if (sub_layer_dpb_info_present_flag) {
684 if (direct_dep_type_len > 32) {
686 direct_dep_type_len);
699 if (non_vui_extension_length > 4096) {
701 non_vui_extension_length);
719 uint64_t layer1_id_included = 0;
735 vps->data_size = nal_size;
741 vps->vps_id = vps_id;
759 vps->vps_max_sub_layers);
766 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
768 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
769 for (;
i <
vps->vps_max_sub_layers;
i++) {
776 vps->vps_max_dec_pic_buffering[
i] - 1);
779 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
781 vps->vps_num_reorder_pics[
i]);
789 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
795 vps->num_output_layer_sets = 1;
799 if (
vps->vps_num_layer_sets > 1)
800 layer1_id_included =
get_bits64(gb,
vps->vps_max_layer_id + 1);
801 if (
vps->vps_num_layer_sets > 2)
805 if (
vps->vps_timing_info_present_flag) {
808 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
809 if (
vps->vps_poc_proportional_to_timing_flag)
812 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
814 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
818 if (
vps->vps_num_hrd_parameters) {
824 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
825 int common_inf_present = 1;
831 vps->vps_max_sub_layers);
836 vps->layer_idx[0] = 0;
838 vps->layer_idx[
i] = -1;
870 VUI backup_vui, *vui = &
sps->vui;
881 switch (
sps->pix_fmt) {
901 memcpy(&backup, gb,
sizeof(backup));
902 memcpy(&backup_vui, vui,
sizeof(backup_vui));
917 if (apply_defdispwin &&
920 "discarding vui default display window, "
921 "original values are l:%u r:%u t:%u b:%u\n",
942 "Strange VUI timing information, retrying...\n");
943 memcpy(vui, &backup_vui,
sizeof(backup_vui));
944 memcpy(gb, &backup,
sizeof(backup));
966 "Strange VUI bitstream restriction information, retrying"
967 " from timing information...\n");
968 memcpy(vui, &backup_vui,
sizeof(backup_vui));
969 memcpy(gb, &backup,
sizeof(backup));
986 "Overread in VUI, retrying from timing information...\n");
987 memcpy(vui, &backup_vui,
sizeof(backup_vui));
988 memcpy(gb, &backup,
sizeof(backup));
998 for (matrixId = 0; matrixId < 6; matrixId++) {
1000 memset(sl->
sl[0][matrixId], 16, 16);
1001 sl->
sl_dc[0][matrixId] = 16;
1002 sl->
sl_dc[1][matrixId] = 16;
1027 uint8_t scaling_list_pred_mode_flag;
1028 uint8_t scaling_list_dc_coef[2][6];
1029 int size_id, matrix_id,
pos;
1032 for (size_id = 0; size_id < 4; size_id++)
1033 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
1034 scaling_list_pred_mode_flag =
get_bits1(gb);
1035 if (!scaling_list_pred_mode_flag) {
1041 delta *= (size_id == 3) ? 3 : 1;
1042 if (matrix_id <
delta) {
1044 "Invalid delta in scaling list data: %d.\n",
delta);
1048 memcpy(sl->
sl[size_id][matrix_id],
1049 sl->
sl[size_id][matrix_id -
delta],
1050 size_id > 0 ? 64 : 16);
1052 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
1055 int next_coef, coef_num;
1056 int32_t scaling_list_delta_coef;
1059 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
1062 if (scaling_list_coeff_minus8 < -7 ||
1063 scaling_list_coeff_minus8 > 247)
1065 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
1066 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
1067 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
1069 for (
i = 0;
i < coef_num;
i++) {
1078 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
1079 sl->
sl[size_id][matrix_id][
pos] = next_coef;
1084 if (
sps->chroma_format_idc == 3) {
1085 for (
i = 0;
i < 64;
i++) {
1086 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
1087 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
1088 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
1089 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
1104 switch (
sps->bit_depth) {
1131 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
1132 "chroma_format_idc is %d, depth is %d\n",
1133 sps->chroma_format_idc,
sps->bit_depth);
1141 sps->hshift[0] =
sps->vshift[0] = 0;
1142 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
1143 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
1145 sps->pixel_shift =
sps->bit_depth > 8;
1151 unsigned nuh_layer_id,
int apply_defdispwin,
1156 int bit_depth_chroma, num_comps, multi_layer_ext;
1164 if (!vps_list[
sps->vps_id]) {
1173 multi_layer_ext = nuh_layer_id > 0 &&
1175 if (multi_layer_ext) {
1179 sps->max_sub_layers =
sps->vps->vps_max_sub_layers;
1183 sps->max_sub_layers);
1187 if (!multi_layer_ext) {
1193 sps->temporal_id_nesting =
sps->max_sub_layers > 1 ?
1194 sps->vps->vps_max_sub_layers : 1;
1203 if (multi_layer_ext) {
1213 sps->chroma_format_idc =
sps->separate_colour_plane ? 0 :
1226 if (
sps->chroma_format_idc > 3
U) {
1231 if (
sps->chroma_format_idc == 3)
1234 if (
sps->separate_colour_plane)
1235 sps->chroma_format_idc = 0;
1240 sps->height, 0, avctx)) < 0)
1244 if (
sps->conformance_window) {
1254 "discarding sps conformance window, "
1255 "original values are l:%u r:%u t:%u b:%u\n",
1256 sps->pic_conf_win.left_offset,
1257 sps->pic_conf_win.right_offset,
1258 sps->pic_conf_win.top_offset,
1259 sps->pic_conf_win.bottom_offset);
1261 sps->pic_conf_win.left_offset =
1262 sps->pic_conf_win.right_offset =
1263 sps->pic_conf_win.top_offset =
1264 sps->pic_conf_win.bottom_offset = 0;
1269 if (
sps->bit_depth > 16) {
1275 if (bit_depth_chroma > 16) {
1280 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1282 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1283 "this is unsupported.\n",
1284 sps->bit_depth, bit_depth_chroma);
1287 sps->bit_depth_chroma = bit_depth_chroma;
1290 sps->output_window =
sps->pic_conf_win;
1297 if (
sps->log2_max_poc_lsb > 16) {
1299 sps->log2_max_poc_lsb - 4);
1303 if (!multi_layer_ext) {
1307 start =
sps->sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1308 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1314 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1317 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1319 sps->temporal_layer[
i].num_reorder_pics);
1324 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1328 if (!
sps->sublayer_ordering_info) {
1329 for (
i = 0;
i < start;
i++) {
1330 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1331 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1332 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1336 for (
int i = 0;
i <
sps->max_sub_layers;
i++) {
1337 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->vps->dpb_size.max_dec_pic_buffering;
1338 sps->temporal_layer[
i].num_reorder_pics =
sps->vps->dpb_size.max_num_reorder_pics;
1339 sps->temporal_layer[
i].max_latency_increase =
sps->vps->dpb_size.max_latency_increase;
1347 sps->log2_max_trafo_size =
sps->log2_diff_max_min_transform_block_size +
1348 sps->log2_min_tb_size;
1350 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1355 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1356 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);
1360 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1365 if (
sps->log2_diff_max_min_transform_block_size > 30) {
1366 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size",
1367 sps->log2_diff_max_min_transform_block_size);
1375 if (
sps->scaling_list_enabled) {
1394 if (
sps->pcm_enabled) {
1398 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1400 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1402 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1403 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1416 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1423 if (
sps->long_term_ref_pics_present) {
1427 sps->num_long_term_ref_pics_sps);
1431 sps->used_by_curr_pic_lt = 0;
1432 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1442 if (
sps->vui_present)
1446 if (
sps->extension_present) {
1453 if (
sps->range_extension) {
1460 if (
sps->extended_precision_processing)
1462 "extended_precision_processing_flag not yet implemented\n");
1466 if (
sps->high_precision_offsets_enabled)
1468 "high_precision_offsets_enabled_flag not yet implemented\n");
1470 sps->persistent_rice_adaptation_enabled =
get_bits1(gb);
1473 if (
sps->cabac_bypass_alignment_enabled)
1475 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1478 if (
sps->multilayer_extension) {
1482 if (
sps->sps_3d_extension) {
1483 for (
i = 0;
i <= 1;
i++) {
1503 "sps_3d_extension_flag not yet implemented\n");
1506 if (
sps->scc_extension) {
1509 if (
sps->palette_mode_enabled) {
1512 sps->palette_predictor_initializers_present =
get_bits1(gb);
1514 if (
sps->palette_predictor_initializers_present) {
1518 "sps_num_palette_predictor_initializers out of range: %u\n",
1519 sps->sps_num_palette_predictor_initializers);
1522 num_comps = !
sps->chroma_format_idc ? 1 : 3;
1525 for (
i = 0;
i <
sps->sps_num_palette_predictor_initializers;
i++)
1530 sps->motion_vector_resolution_control_idc =
get_bits(gb, 2);
1531 sps->intra_boundary_filtering_disabled =
get_bits1(gb);
1534 if (apply_defdispwin) {
1535 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1536 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1537 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1538 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1541 ow = &
sps->output_window;
1552 "Displaying the whole video surface.\n");
1553 memset(ow, 0,
sizeof(*ow));
1554 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1558 sps->log2_ctb_size =
sps->log2_min_cb_size +
1559 sps->log2_diff_max_min_coding_block_size;
1560 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1566 if (
sps->log2_ctb_size < 4) {
1569 "log2_ctb_size %d differs from the bounds of any known profile\n",
1570 sps->log2_ctb_size);
1575 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1576 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1577 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1579 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1580 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1581 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1582 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1583 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1584 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1585 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1587 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1595 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1596 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1597 sps->max_transform_hierarchy_depth_inter);
1600 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1601 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1602 sps->max_transform_hierarchy_depth_intra);
1605 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1607 "max transform block size out of range: %d\n",
1608 sps->log2_max_trafo_size);
1638 int apply_defdispwin)
1657 nuh_layer_id, apply_defdispwin,
1664 "Parsed SPS: id %d; coded wxh: %dx%d; "
1665 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1667 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1668 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1709 int idx_y,
int idx_cb,
int idx_cr,
int inp_length)
1711 unsigned int split_octant_flag, part_num_y, coded_res_flag, res_coeff_q, res_coeff_r;
1714 part_num_y = 1 <<
pps->cm_y_part_num_log2;
1716 split_octant_flag = inp_depth <
pps->cm_octant_depth ?
get_bits1(gb) : 0;
1718 if (split_octant_flag)
1719 for (
int k = 0; k < 2; k++)
1720 for (
int m = 0; m < 2; m++)
1721 for (
int n = 0; n < 2; n++)
1723 idx_y + part_num_y * k * inp_length / 2,
1724 idx_cb + m * inp_length / 2,
1725 idx_cr + n * inp_length / 2,
1728 for (
int i = 0;
i < part_num_y;
i++) {
1729 for (
int j = 0; j < 4; j++) {
1732 for (
int c = 0;
c < 3;
c++) {
1734 cm_res_bits =
FFMAX(0, 10 +
pps->luma_bit_depth_cm_input -
1735 pps->luma_bit_depth_cm_output -
1736 pps->cm_res_quant_bits -
pps->cm_delta_flc_bits);
1737 res_coeff_r = cm_res_bits ?
get_bits(gb, cm_res_bits) : 0;
1738 if (res_coeff_q || res_coeff_r)
1748 if (
pps->num_cm_ref_layers > 62) {
1750 "num_cm_ref_layers_minus1 shall be in the range [0, 61].\n");
1753 for (
int i = 0;
i <
pps->num_cm_ref_layers;
i++)
1767 if (
pps->cm_octant_depth == 1) {
1782 if (
pps->pps_infer_scaling_list_flag)
1783 pps->pps_scaling_list_ref_layer_id =
get_bits(gb, 6);
1786 if (
pps->num_ref_loc_offsets >
vps->vps_max_layers - 1)
1789 for (
int i = 0;
i <
pps->num_ref_loc_offsets;
i++) {
1791 pps->scaled_ref_layer_offset_present_flag[
i] =
get_bits1(gb);
1792 if (
pps->scaled_ref_layer_offset_present_flag[
i]) {
1800 if (
pps->ref_region_offset_present_flag[
i]) {
1808 if (
pps->resample_phase_set_present_flag[
i]) {
1817 if (
pps->colour_mapping_enabled_flag) {
1828 unsigned int num_val_delta_dlt, max_diff = 0;
1829 int min_diff_minus1 = -1;
1832 num_val_delta_dlt =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1833 if (num_val_delta_dlt) {
1834 if (num_val_delta_dlt > 1)
1835 max_diff =
get_bits(gb,
pps->pps_bit_depth_for_depth_layers_minus8 + 8);
1836 if (num_val_delta_dlt > 2 && max_diff) {
1840 if (max_diff > (min_diff_minus1 + 1))
1841 for (
int k = 1; k < num_val_delta_dlt; k++) {
1842 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1851 unsigned int pps_depth_layers_minus1;
1854 pps_depth_layers_minus1 =
get_bits(gb, 6);
1855 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1856 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1860 for (
int j = 0; j <= ((1 << (
pps->pps_bit_depth_for_depth_layers_minus8 + 8)) - 1); j++)
1875 if (
pps->transform_skip_enabled_flag) {
1878 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1879 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1880 if (
pps->chroma_qp_offset_list_enabled_flag) {
1883 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1885 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1888 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1890 if (
pps->cb_qp_offset_list[
i]) {
1892 "cb_qp_offset_list not tested yet.\n");
1895 if (
pps->cr_qp_offset_list[
i]) {
1897 "cb_qp_offset_list not tested yet.\n");
1904 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1905 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
1918 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
1919 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
1924 #define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
1925 pps->pps_act_ ## name ## _qp_offset >= 12)
1927 #undef CHECK_QP_OFFSET
1930 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
1935 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
1937 if (
pps->pps_num_palette_predictor_initializers > 0) {
1940 "pps_num_palette_predictor_initializers out of range: %u\n",
1941 pps->pps_num_palette_predictor_initializers);
1946 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
1948 if (!
pps->monochrome_palette_flag) {
1950 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
1954 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
1957 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
1970 int pic_area_in_ctbs;
1971 int i, j, x, y, ctb_addr_rs,
tile_id;
1977 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
1980 if (
pps->uniform_spacing_flag) {
1981 if (!
pps->column_width) {
1985 if (!
pps->column_width || !
pps->row_height)
1988 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
1989 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
1990 (
i *
sps->ctb_width) /
pps->num_tile_columns;
1993 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
1994 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
1995 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2000 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2001 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2004 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2005 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2007 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2008 if (
i >
pps->col_bd[j])
2010 pps->col_idxX[
i] = j;
2016 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2022 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2023 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2027 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2028 int tb_x = ctb_addr_rs %
sps->ctb_width;
2029 int tb_y = ctb_addr_rs /
sps->ctb_width;
2034 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2035 if (tb_x < pps->
col_bd[
i + 1]) {
2041 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2042 if (tb_y < pps->
row_bd[
i + 1]) {
2048 for (
i = 0;
i < tile_x;
i++)
2049 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2050 for (
i = 0;
i < tile_y;
i++)
2053 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2054 tb_x -
pps->col_bd[tile_x];
2056 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2057 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2060 for (j = 0,
tile_id = 0; j <
pps->num_tile_rows; j++)
2062 for (y =
pps->row_bd[j]; y < pps->
row_bd[j + 1]; y++)
2063 for (x =
pps->col_bd[
i]; x < pps->
col_bd[
i + 1]; x++)
2067 if (!
pps->tile_pos_rs)
2070 for (j = 0; j <
pps->num_tile_rows; j++)
2071 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2072 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2073 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2075 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2076 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2077 for (y = 0; y <
sps->tb_mask+2; y++) {
2078 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2079 pps->min_tb_addr_zs_tab[y] = -1;
2081 for (y = 0; y <
sps->tb_mask+1; y++) {
2082 for (x = 0; x <
sps->tb_mask+1; x++) {
2083 int tb_x = x >> log2_diff;
2084 int tb_y = y >> log2_diff;
2085 int rs =
sps->ctb_width * tb_y + tb_x;
2086 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2087 for (
i = 0;
i < log2_diff;
i++) {
2089 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2091 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2106 unsigned log2_parallel_merge_level_minus2;
2127 pps->data_size = nal_size;
2135 pps->loop_filter_across_tiles_enabled_flag = 1;
2136 pps->num_tile_columns = 1;
2137 pps->num_tile_rows = 1;
2138 pps->uniform_spacing_flag = 1;
2139 pps->disable_dbf = 0;
2140 pps->beta_offset = 0;
2142 pps->log2_max_transform_skip_block_size = 2;
2162 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2164 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2175 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2185 pps->diff_cu_qp_delta_depth = 0;
2186 if (
pps->cu_qp_delta_enabled_flag)
2189 if (
pps->diff_cu_qp_delta_depth < 0 ||
2190 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2192 pps->diff_cu_qp_delta_depth);
2198 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2205 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2211 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2220 if (
pps->tiles_enabled_flag) {
2224 if (num_tile_columns_minus1 < 0 ||
2225 num_tile_columns_minus1 >=
sps->ctb_width) {
2227 num_tile_columns_minus1);
2231 if (num_tile_rows_minus1 < 0 ||
2232 num_tile_rows_minus1 >=
sps->ctb_height) {
2234 num_tile_rows_minus1);
2238 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2239 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2243 if (!
pps->column_width || !
pps->row_height) {
2249 if (!
pps->uniform_spacing_flag) {
2251 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2253 sum +=
pps->column_width[
i];
2255 if (sum >=
sps->ctb_width) {
2260 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2263 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2265 sum +=
pps->row_height[
i];
2267 if (sum >=
sps->ctb_height) {
2272 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2274 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2277 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2279 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2280 if (
pps->deblocking_filter_control_present_flag) {
2281 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2283 if (!
pps->disable_dbf) {
2286 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2292 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2298 pps->beta_offset = 2 * beta_offset_div2;
2299 pps->tc_offset = 2 * tc_offset_div2;
2304 if (
pps->scaling_list_data_present_flag) {
2312 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2314 log2_parallel_merge_level_minus2);
2318 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2320 pps->slice_header_extension_present_flag =
get_bits1(gb);
2323 if (
pps->pps_extension_present_flag) {
2335 if (
pps->pps_multilayer_extension_flag) {
2340 if (
pps->pps_3d_extension_flag) {
2345 if (
pps->pps_scc_extension_flag) {
2384 int max_poc_lsb = 1 <<
sps->log2_max_poc_lsb;
2385 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2386 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2389 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2390 poc_msb = prev_poc_msb + max_poc_lsb;
2391 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2392 poc_msb = prev_poc_msb - max_poc_lsb;
2394 poc_msb = prev_poc_msb;
2402 return poc_msb + poc_lsb;