32 16, 16, 16, 16, 17, 18, 21, 24,
33 16, 16, 16, 16, 17, 19, 22, 25,
34 16, 16, 17, 18, 20, 22, 25, 29,
35 16, 16, 18, 21, 24, 27, 31, 36,
36 17, 17, 20, 24, 30, 35, 41, 47,
37 18, 19, 22, 27, 35, 44, 54, 65,
38 21, 22, 25, 31, 41, 54, 70, 88,
39 24, 25, 29, 36, 47, 65, 88, 115
43 16, 16, 16, 16, 17, 18, 20, 24,
44 16, 16, 16, 17, 18, 20, 24, 25,
45 16, 16, 17, 18, 20, 24, 25, 28,
46 16, 17, 18, 20, 24, 25, 28, 33,
47 17, 18, 20, 24, 25, 28, 33, 41,
48 18, 20, 24, 25, 28, 33, 41, 54,
49 20, 24, 25, 28, 33, 41, 54, 71,
50 24, 25, 28, 33, 41, 54, 71, 91
83 if (
s->pps_list[
id] &&
s->pps == (
const HEVCPPS*)
s->pps_list[
id]->data)
91 if (
s->sps_list[
id]) {
92 if (
s->sps == (
const HEVCSPS*)
s->sps_list[
id]->data)
97 if (
s->pps_list[
i] && ((
HEVCPPS*)
s->pps_list[
i]->data)->sps_id ==
id)
108 if (
s->vps_list[
id]) {
109 if (
s->vps == (
const HEVCVPS*)
s->vps_list[
id]->data)
113 if (
s->sps_list[
i] && ((
HEVCSPS*)
s->sps_list[
i]->data)->vps_id ==
id)
122 uint8_t rps_predict = 0;
129 if (rps !=
sps->st_rps &&
sps->nb_st_rps)
135 unsigned abs_delta_rps;
136 uint8_t use_delta_flag = 0;
137 uint8_t delta_rps_sign;
139 if (is_slice_header) {
141 if (delta_idx >
sps->nb_st_rps) {
143 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
144 delta_idx,
sps->nb_st_rps);
147 rps_ridx = &
sps->st_rps[
sps->nb_st_rps - delta_idx];
150 rps_ridx = &
sps->st_rps[rps -
sps->st_rps - 1];
154 if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
156 "Invalid value of abs_delta_rps: %d\n",
160 delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
167 if (used || use_delta_flag) {
168 if (i < rps_ridx->num_delta_pocs)
169 delta_poc = delta_rps + rps_ridx->
delta_poc[
i];
171 delta_poc = delta_rps;
183 "Invalid num_delta_pocs: %d\n", k);
195 for (k =
i - 1; k >= 0; k--) {
197 if (delta_poc <
tmp) {
221 unsigned int prev, nb_positive_pics;
236 if (delta_poc < 1 || delta_poc > 32768) {
238 "Invalid value of delta_poc: %d\n",
247 for (
i = 0;
i < nb_positive_pics;
i++) {
249 if (delta_poc < 1 || delta_poc > 32768) {
251 "Invalid value of delta_poc: %d\n",
287 for (
i = 0;
i < 32;
i++) {
290 if (
ptl->profile_idc == 0 &&
i > 0 &&
ptl->profile_compatibility_flag[
i])
291 ptl->profile_idc =
i;
298 #define check_profile_idc(idc) \
299 ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
334 #undef check_profile_idc
340 PTL *
ptl,
int max_num_sub_layers)
344 get_bits_left(gb) < 8 + (8*2 * (max_num_sub_layers - 1 > 0))) {
351 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
356 if (max_num_sub_layers - 1> 0)
357 for (
i = max_num_sub_layers - 1;
i < 8;
i++)
359 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
363 "PTL information for sublayer %i too short\n",
i);
369 "Not enough data for sublayer %i level_idc\n",
i);
380 int subpic_params_present)
384 for (
i = 0;
i < nb_cpb;
i++) {
388 if (subpic_params_present) {
399 int nal_params_present = 0, vcl_params_present = 0;
400 int subpic_params_present = 0;
403 if (common_inf_present) {
407 if (nal_params_present || vcl_params_present) {
410 if (subpic_params_present) {
420 if (subpic_params_present)
429 for (
i = 0;
i < max_sublayers;
i++) {
431 unsigned int nb_cpb = 1;
444 if (nb_cpb < 1 || nb_cpb > 32) {
450 if (nal_params_present)
452 if (vcl_params_present)
474 if (nal_size >
sizeof(
vps->data)) {
477 nal_size,
sizeof(
vps->data));
478 vps->data_size =
sizeof(
vps->data);
480 vps->data_size = nal_size;
502 vps->vps_max_sub_layers);
509 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
511 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
512 for (;
i <
vps->vps_max_sub_layers;
i++) {
519 vps->vps_max_dec_pic_buffering[
i] - 1);
522 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
524 vps->vps_num_reorder_pics[
i]);
532 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
538 for (
i = 1;
i <
vps->vps_num_layer_sets;
i++)
539 for (j = 0; j <=
vps->vps_max_layer_id; j++)
543 if (
vps->vps_timing_info_present_flag) {
546 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
547 if (
vps->vps_poc_proportional_to_timing_flag)
550 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
552 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
555 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
556 int common_inf_present = 1;
591 VUI backup_vui, *vui = &
sps->vui;
593 int sar_present, alt = 0;
602 else if (sar_idx == 255) {
607 "Unknown SAR index: %u.\n", sar_idx);
634 switch (
sps->pix_fmt) {
660 memcpy(&backup, gb,
sizeof(backup));
661 memcpy(&backup_vui, vui,
sizeof(backup_vui));
676 if (apply_defdispwin &&
679 "discarding vui default display window, "
680 "original values are l:%u r:%u t:%u b:%u\n",
701 "Strange VUI timing information, retrying...\n");
702 memcpy(vui, &backup_vui,
sizeof(backup_vui));
703 memcpy(gb, &backup,
sizeof(backup));
725 "Strange VUI bitstream restriction information, retrying"
726 " from timing information...\n");
727 memcpy(vui, &backup_vui,
sizeof(backup_vui));
728 memcpy(gb, &backup,
sizeof(backup));
745 "Overread in VUI, retrying from timing information...\n");
746 memcpy(vui, &backup_vui,
sizeof(backup_vui));
747 memcpy(gb, &backup,
sizeof(backup));
757 for (matrixId = 0; matrixId < 6; matrixId++) {
759 memset(sl->
sl[0][matrixId], 16, 16);
760 sl->
sl_dc[0][matrixId] = 16;
761 sl->
sl_dc[1][matrixId] = 16;
785 uint8_t scaling_list_pred_mode_flag;
786 uint8_t scaling_list_dc_coef[2][6];
787 int size_id, matrix_id,
pos;
790 for (size_id = 0; size_id < 4; size_id++)
791 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
792 scaling_list_pred_mode_flag =
get_bits1(gb);
793 if (!scaling_list_pred_mode_flag) {
799 delta *= (size_id == 3) ? 3 : 1;
800 if (matrix_id <
delta) {
802 "Invalid delta in scaling list data: %d.\n",
delta);
806 memcpy(sl->
sl[size_id][matrix_id],
807 sl->
sl[size_id][matrix_id -
delta],
808 size_id > 0 ? 64 : 16);
810 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
813 int next_coef, coef_num;
814 int32_t scaling_list_delta_coef;
817 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
820 if (scaling_list_coeff_minus8 < -7 ||
821 scaling_list_coeff_minus8 > 247)
823 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
824 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
825 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
827 for (
i = 0;
i < coef_num;
i++) {
836 next_coef = (next_coef + 256
U + scaling_list_delta_coef) % 256;
837 sl->
sl[size_id][matrix_id][
pos] = next_coef;
842 if (
sps->chroma_format_idc == 3) {
843 for (
i = 0;
i < 64;
i++) {
844 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
845 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
846 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
847 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
862 switch (
sps->bit_depth) {
889 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
890 "chroma_format_idc is %d, depth is %d\n",
891 sps->chroma_format_idc,
sps->bit_depth);
899 sps->hshift[0] =
sps->vshift[0] = 0;
900 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
901 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
903 sps->pixel_shift =
sps->bit_depth > 8;
913 int log2_diff_max_min_transform_block_size;
914 int bit_depth_chroma, start, vui_present, sublayer_ordering_info;
921 if (vps_list && !vps_list[
sps->vps_id]) {
930 sps->max_sub_layers);
946 if (
sps->chroma_format_idc > 3
U) {
951 if (
sps->chroma_format_idc == 3)
954 if (
sps->separate_colour_plane_flag)
955 sps->chroma_format_idc = 0;
960 sps->height, 0, avctx)) < 0)
973 "discarding sps conformance window, "
974 "original values are l:%u r:%u t:%u b:%u\n",
975 sps->pic_conf_win.left_offset,
976 sps->pic_conf_win.right_offset,
977 sps->pic_conf_win.top_offset,
978 sps->pic_conf_win.bottom_offset);
980 sps->pic_conf_win.left_offset =
981 sps->pic_conf_win.right_offset =
982 sps->pic_conf_win.top_offset =
983 sps->pic_conf_win.bottom_offset = 0;
985 sps->output_window =
sps->pic_conf_win;
990 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
992 "Luma bit depth (%d) is different from chroma bit depth (%d), "
993 "this is unsupported.\n",
994 sps->bit_depth, bit_depth_chroma);
997 sps->bit_depth_chroma = bit_depth_chroma;
1004 if (
sps->log2_max_poc_lsb > 16) {
1006 sps->log2_max_poc_lsb - 4);
1011 start = sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1012 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1018 sps->temporal_layer[
i].max_dec_pic_buffering - 1
U);
1021 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1023 sps->temporal_layer[
i].num_reorder_pics);
1028 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1032 if (!sublayer_ordering_info) {
1033 for (
i = 0;
i < start;
i++) {
1034 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1035 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1036 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1044 sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
1045 sps->log2_min_tb_size;
1047 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1052 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1053 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);
1057 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1062 if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
1063 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
1071 if (
sps->scaling_list_enable_flag) {
1085 if (
sps->pcm_enabled_flag) {
1089 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1091 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1093 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1094 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1107 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1114 if (
sps->long_term_ref_pics_present_flag) {
1118 sps->num_long_term_ref_pics_sps);
1121 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1128 sps->sps_strong_intra_smoothing_enable_flag =
get_bits1(gb);
1137 if (
sps->sps_range_extension_flag) {
1138 sps->transform_skip_rotation_enabled_flag =
get_bits1(gb);
1139 sps->transform_skip_context_enabled_flag =
get_bits1(gb);
1144 sps->extended_precision_processing_flag =
get_bits1(gb);
1145 if (
sps->extended_precision_processing_flag)
1147 "extended_precision_processing_flag not yet implemented\n");
1150 sps->high_precision_offsets_enabled_flag =
get_bits1(gb);
1151 if (
sps->high_precision_offsets_enabled_flag)
1153 "high_precision_offsets_enabled_flag not yet implemented\n");
1155 sps->persistent_rice_adaptation_enabled_flag =
get_bits1(gb);
1157 sps->cabac_bypass_alignment_enabled_flag =
get_bits1(gb);
1158 if (
sps->cabac_bypass_alignment_enabled_flag)
1160 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1163 if (apply_defdispwin) {
1164 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1165 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1166 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1167 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1170 ow = &
sps->output_window;
1181 "Displaying the whole video surface.\n");
1182 memset(ow, 0,
sizeof(*ow));
1183 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1187 sps->log2_ctb_size =
sps->log2_min_cb_size +
1188 sps->log2_diff_max_min_coding_block_size;
1189 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1195 if (
sps->log2_ctb_size < 4) {
1198 "log2_ctb_size %d differs from the bounds of any known profile\n",
1199 sps->log2_ctb_size);
1204 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1205 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1206 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1208 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1209 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1210 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1211 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1212 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1213 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1214 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1216 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1224 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1225 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1226 sps->max_transform_hierarchy_depth_inter);
1229 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1230 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1231 sps->max_transform_hierarchy_depth_intra);
1234 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1236 "max transform block size out of range: %d\n",
1237 sps->log2_max_trafo_size);
1255 unsigned int sps_id;
1266 if (nal_size >
sizeof(
sps->data)) {
1269 nal_size,
sizeof(
sps->data));
1270 sps->data_size =
sizeof(
sps->data);
1272 sps->data_size = nal_size;
1286 "Parsed SPS: id %d; coded wxh: %dx%d; "
1287 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1288 sps_id,
sps->width,
sps->height,
1289 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1290 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1330 if (
pps->transform_skip_enabled_flag) {
1333 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1334 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1335 if (
pps->chroma_qp_offset_list_enabled_flag) {
1338 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1340 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1343 for (
i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1345 if (
pps->cb_qp_offset_list[
i]) {
1347 "cb_qp_offset_list not tested yet.\n");
1350 if (
pps->cr_qp_offset_list[
i]) {
1352 "cb_qp_offset_list not tested yet.\n");
1359 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1360 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
1371 int pic_area_in_ctbs;
1372 int i, j, x, y, ctb_addr_rs, tile_id;
1378 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
1381 if (
pps->uniform_spacing_flag) {
1382 if (!
pps->column_width) {
1386 if (!
pps->column_width || !
pps->row_height)
1389 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
1390 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
1391 (
i *
sps->ctb_width) /
pps->num_tile_columns;
1394 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
1395 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
1396 (
i *
sps->ctb_height) /
pps->num_tile_rows;
1401 for (
i = 0;
i <
pps->num_tile_columns;
i++)
1402 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
1405 for (
i = 0;
i <
pps->num_tile_rows;
i++)
1406 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
1408 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
1409 if (
i >
pps->col_bd[j])
1411 pps->col_idxX[
i] = j;
1417 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
1423 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
1424 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
1428 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1429 int tb_x = ctb_addr_rs %
sps->ctb_width;
1430 int tb_y = ctb_addr_rs /
sps->ctb_width;
1435 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
1436 if (tb_x < pps->col_bd[
i + 1]) {
1442 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
1443 if (tb_y < pps->row_bd[
i + 1]) {
1449 for (
i = 0;
i < tile_x;
i++)
1450 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
1451 for (
i = 0;
i < tile_y;
i++)
1454 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
1455 tb_x -
pps->col_bd[tile_x];
1457 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
1458 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
1461 for (j = 0, tile_id = 0; j <
pps->num_tile_rows; j++)
1462 for (
i = 0;
i <
pps->num_tile_columns;
i++, tile_id++)
1463 for (y =
pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
1464 for (x =
pps->col_bd[
i]; x < pps->col_bd[
i + 1]; x++)
1465 pps->tile_id[
pps->ctb_addr_rs_to_ts[y *
sps->ctb_width + x]] = tile_id;
1468 if (!
pps->tile_pos_rs)
1471 for (j = 0; j <
pps->num_tile_rows; j++)
1472 for (
i = 0;
i <
pps->num_tile_columns;
i++)
1473 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
1474 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
1476 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
1477 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
1478 for (y = 0; y <
sps->tb_mask+2; y++) {
1479 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
1480 pps->min_tb_addr_zs_tab[y] = -1;
1482 for (y = 0; y <
sps->tb_mask+1; y++) {
1483 for (x = 0; x <
sps->tb_mask+1; x++) {
1484 int tb_x = x >> log2_diff;
1485 int tb_y = y >> log2_diff;
1486 int rs =
sps->ctb_width * tb_y + tb_x;
1487 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
1488 for (
i = 0;
i < log2_diff;
i++) {
1490 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1492 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
1504 unsigned int pps_id = 0;
1506 unsigned log2_parallel_merge_level_minus2;
1524 if (nal_size >
sizeof(
pps->data)) {
1527 nal_size,
sizeof(
pps->data));
1528 pps->data_size =
sizeof(
pps->data);
1530 pps->data_size = nal_size;
1535 pps->loop_filter_across_tiles_enabled_flag = 1;
1536 pps->num_tile_columns = 1;
1537 pps->num_tile_rows = 1;
1538 pps->uniform_spacing_flag = 1;
1539 pps->disable_dbf = 0;
1540 pps->beta_offset = 0;
1542 pps->log2_max_transform_skip_block_size = 2;
1564 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
1566 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
1581 pps->diff_cu_qp_delta_depth = 0;
1582 if (
pps->cu_qp_delta_enabled_flag)
1585 if (
pps->diff_cu_qp_delta_depth < 0 ||
1586 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
1588 pps->diff_cu_qp_delta_depth);
1594 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
1601 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
1607 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
1616 if (
pps->tiles_enabled_flag) {
1620 if (num_tile_columns_minus1 < 0 ||
1621 num_tile_columns_minus1 >=
sps->ctb_width) {
1623 num_tile_columns_minus1);
1627 if (num_tile_rows_minus1 < 0 ||
1628 num_tile_rows_minus1 >=
sps->ctb_height) {
1630 num_tile_rows_minus1);
1634 pps->num_tile_columns = num_tile_columns_minus1 + 1;
1635 pps->num_tile_rows = num_tile_rows_minus1 + 1;
1639 if (!
pps->column_width || !
pps->row_height) {
1645 if (!
pps->uniform_spacing_flag) {
1647 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
1649 sum +=
pps->column_width[
i];
1651 if (sum >=
sps->ctb_width) {
1656 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
1659 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
1661 sum +=
pps->row_height[
i];
1663 if (sum >=
sps->ctb_height) {
1668 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
1670 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
1673 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
1675 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
1676 if (
pps->deblocking_filter_control_present_flag) {
1677 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
1679 if (!
pps->disable_dbf) {
1682 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
1688 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
1694 pps->beta_offset = 2 * beta_offset_div2;
1695 pps->tc_offset = 2 * tc_offset_div2;
1700 if (
pps->scaling_list_data_present_flag) {
1708 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
1710 log2_parallel_merge_level_minus2);
1714 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
1716 pps->slice_header_extension_present_flag =
get_bits1(gb);
1765 int max_poc_lsb = 1 <<
sps->log2_max_poc_lsb;
1766 int prev_poc_lsb = pocTid0 % max_poc_lsb;
1767 int prev_poc_msb = pocTid0 - prev_poc_lsb;
1770 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
1771 poc_msb = prev_poc_msb + max_poc_lsb;
1772 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
1773 poc_msb = prev_poc_msb - max_poc_lsb;
1775 poc_msb = prev_poc_msb;
1783 return poc_msb + poc_lsb;