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
90 if (left < 0 || right < 0 || top < 0 || bottom < 0 ||
97 window->left_offset = left;
98 window->right_offset = right;
100 window->bottom_offset = bottom;
106 if (
s->pps_list[
id] &&
s->pps == (
const HEVCPPS*)
s->pps_list[
id]->data)
114 if (
s->sps_list[
id]) {
115 if (
s->sps == (
const HEVCSPS*)
s->sps_list[
id]->data)
120 if (
s->pps_list[
i] && ((
HEVCPPS*)
s->pps_list[
i]->data)->sps_id ==
id)
131 if (
s->vps_list[
id]) {
132 if (
s->vps == (
const HEVCVPS*)
s->vps_list[
id]->data)
136 if (
s->sps_list[
i] && ((
HEVCSPS*)
s->sps_list[
i]->data)->vps_id ==
id)
152 if (rps !=
sps->st_rps &&
sps->nb_st_rps)
158 unsigned abs_delta_rps;
162 if (is_slice_header) {
164 if (delta_idx >
sps->nb_st_rps) {
166 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
167 delta_idx,
sps->nb_st_rps);
170 rps_ridx = &
sps->st_rps[
sps->nb_st_rps - delta_idx];
173 rps_ridx = &
sps->st_rps[rps -
sps->st_rps - 1];
177 if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
179 "Invalid value of abs_delta_rps: %d\n",
183 delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
190 if (used || use_delta_flag) {
191 if (i < rps_ridx->num_delta_pocs)
192 delta_poc = delta_rps + rps_ridx->
delta_poc[
i];
194 delta_poc = delta_rps;
206 "Invalid num_delta_pocs: %d\n", k);
218 for (k =
i - 1; k >= 0; k--) {
220 if (delta_poc <
tmp) {
244 unsigned int prev, nb_positive_pics;
259 if (delta_poc < 1 || delta_poc > 32768) {
261 "Invalid value of delta_poc: %d\n",
270 for (
i = 0;
i < nb_positive_pics;
i++) {
272 if (delta_poc < 1 || delta_poc > 32768) {
274 "Invalid value of delta_poc: %d\n",
310 for (
i = 0;
i < 32;
i++) {
313 if (
ptl->profile_idc == 0 &&
i > 0 &&
ptl->profile_compatibility_flag[
i])
314 ptl->profile_idc =
i;
321 #define check_profile_idc(idc) \
322 ptl->profile_idc == idc || ptl->profile_compatibility_flag[idc]
357 #undef check_profile_idc
363 PTL *
ptl,
int max_num_sub_layers)
367 get_bits_left(gb) < 8 + (8*2 * (max_num_sub_layers - 1 > 0))) {
374 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
379 if (max_num_sub_layers - 1> 0)
380 for (
i = max_num_sub_layers - 1;
i < 8;
i++)
382 for (
i = 0;
i < max_num_sub_layers - 1;
i++) {
386 "PTL information for sublayer %i too short\n",
i);
392 "Not enough data for sublayer %i level_idc\n",
i);
403 int subpic_params_present)
407 for (
i = 0;
i < nb_cpb;
i++) {
411 if (subpic_params_present) {
422 int nal_params_present = 0, vcl_params_present = 0;
423 int subpic_params_present = 0;
426 if (common_inf_present) {
430 if (nal_params_present || vcl_params_present) {
433 if (subpic_params_present) {
443 if (subpic_params_present)
452 for (
i = 0;
i < max_sublayers;
i++) {
454 unsigned int nb_cpb = 1;
467 if (nb_cpb < 1 || nb_cpb > 32) {
473 if (nal_params_present)
475 if (vcl_params_present)
497 if (nal_size >
sizeof(
vps->data)) {
500 nal_size,
sizeof(
vps->data));
501 vps->data_size =
sizeof(
vps->data);
503 vps->data_size = nal_size;
525 vps->vps_max_sub_layers);
532 vps->vps_sub_layer_ordering_info_present_flag =
get_bits1(gb);
534 i =
vps->vps_sub_layer_ordering_info_present_flag ? 0 :
vps->vps_max_sub_layers - 1;
535 for (;
i <
vps->vps_max_sub_layers;
i++) {
542 vps->vps_max_dec_pic_buffering[
i] - 1);
545 if (
vps->vps_num_reorder_pics[
i] >
vps->vps_max_dec_pic_buffering[
i] - 1) {
547 vps->vps_num_reorder_pics[
i]);
555 if (
vps->vps_num_layer_sets < 1 ||
vps->vps_num_layer_sets > 1024 ||
561 for (
i = 1;
i <
vps->vps_num_layer_sets;
i++)
562 for (j = 0; j <=
vps->vps_max_layer_id; j++)
566 if (
vps->vps_timing_info_present_flag) {
569 vps->vps_poc_proportional_to_timing_flag =
get_bits1(gb);
570 if (
vps->vps_poc_proportional_to_timing_flag)
573 if (
vps->vps_num_hrd_parameters > (
unsigned)
vps->vps_num_layer_sets) {
575 "vps_num_hrd_parameters %d is invalid\n",
vps->vps_num_hrd_parameters);
578 for (
i = 0;
i <
vps->vps_num_hrd_parameters;
i++) {
579 int common_inf_present = 1;
614 VUI backup_vui, *vui = &
sps->vui;
616 int sar_present, alt = 0;
625 else if (sar_idx == 255) {
630 "Unknown SAR index: %u.\n", sar_idx);
657 switch (
sps->pix_fmt) {
683 memcpy(&backup, gb,
sizeof(backup));
684 memcpy(&backup_vui, vui,
sizeof(backup_vui));
694 if (apply_defdispwin &&
697 "discarding vui default display window, "
698 "original values are l:%u r:%u t:%u b:%u\n",
719 "Strange VUI timing information, retrying...\n");
720 memcpy(vui, &backup_vui,
sizeof(backup_vui));
721 memcpy(gb, &backup,
sizeof(backup));
743 "Strange VUI bitstream restriction information, retrying"
744 " from timing information...\n");
745 memcpy(vui, &backup_vui,
sizeof(backup_vui));
746 memcpy(gb, &backup,
sizeof(backup));
763 "Overread in VUI, retrying from timing information...\n");
764 memcpy(vui, &backup_vui,
sizeof(backup_vui));
765 memcpy(gb, &backup,
sizeof(backup));
775 for (matrixId = 0; matrixId < 6; matrixId++) {
777 memset(sl->
sl[0][matrixId], 16, 16);
778 sl->
sl_dc[0][matrixId] = 16;
779 sl->
sl_dc[1][matrixId] = 16;
803 uint8_t scaling_list_pred_mode_flag;
804 uint8_t scaling_list_dc_coef[2][6];
805 int size_id, matrix_id,
pos;
808 for (size_id = 0; size_id < 4; size_id++)
809 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
810 scaling_list_pred_mode_flag =
get_bits1(gb);
811 if (!scaling_list_pred_mode_flag) {
817 delta *= (size_id == 3) ? 3 : 1;
818 if (matrix_id <
delta) {
820 "Invalid delta in scaling list data: %d.\n",
delta);
824 memcpy(sl->
sl[size_id][matrix_id],
825 sl->
sl[size_id][matrix_id -
delta],
826 size_id > 0 ? 64 : 16);
828 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
831 int next_coef, coef_num;
832 int32_t scaling_list_delta_coef;
835 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
838 if (scaling_list_coeff_minus8 < -7 ||
839 scaling_list_coeff_minus8 > 247)
841 scaling_list_dc_coef[size_id - 2][matrix_id] = scaling_list_coeff_minus8 + 8;
842 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
843 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
845 for (
i = 0;
i < coef_num;
i++) {
854 next_coef = (next_coef + 256U + scaling_list_delta_coef) % 256;
855 sl->
sl[size_id][matrix_id][
pos] = next_coef;
860 if (
sps->chroma_format_idc == 3) {
861 for (
i = 0;
i < 64;
i++) {
862 sl->
sl[3][1][
i] = sl->
sl[2][1][
i];
863 sl->
sl[3][2][
i] = sl->
sl[2][2][
i];
864 sl->
sl[3][4][
i] = sl->
sl[2][4][
i];
865 sl->
sl[3][5][
i] = sl->
sl[2][5][
i];
880 switch (
sps->bit_depth) {
907 "The following bit-depths are currently specified: 8, 9, 10 and 12 bits, "
908 "chroma_format_idc is %d, depth is %d\n",
909 sps->chroma_format_idc,
sps->bit_depth);
917 sps->hshift[0] =
sps->vshift[0] = 0;
918 sps->hshift[2] =
sps->hshift[1] =
desc->log2_chroma_w;
919 sps->vshift[2] =
sps->vshift[1] =
desc->log2_chroma_h;
921 sps->pixel_shift =
sps->bit_depth > 8;
931 int log2_diff_max_min_transform_block_size;
932 int bit_depth_chroma, start, vui_present, sublayer_ordering_info;
939 if (vps_list && !vps_list[
sps->vps_id]) {
948 sps->max_sub_layers);
964 if (
sps->chroma_format_idc > 3U) {
969 if (
sps->chroma_format_idc == 3)
972 if (
sps->separate_colour_plane_flag)
973 sps->chroma_format_idc = 0;
978 sps->height, 0, avctx)) < 0)
988 "discarding sps conformance window, "
989 "original values are l:%u r:%u t:%u b:%u\n",
990 sps->pic_conf_win.left_offset,
991 sps->pic_conf_win.right_offset,
992 sps->pic_conf_win.top_offset,
993 sps->pic_conf_win.bottom_offset);
995 sps->pic_conf_win.left_offset =
996 sps->pic_conf_win.right_offset =
997 sps->pic_conf_win.top_offset =
998 sps->pic_conf_win.bottom_offset = 0;
1000 sps->output_window =
sps->pic_conf_win;
1005 if (
sps->chroma_format_idc && bit_depth_chroma !=
sps->bit_depth) {
1007 "Luma bit depth (%d) is different from chroma bit depth (%d), "
1008 "this is unsupported.\n",
1009 sps->bit_depth, bit_depth_chroma);
1012 sps->bit_depth_chroma = bit_depth_chroma;
1019 if (
sps->log2_max_poc_lsb > 16) {
1021 sps->log2_max_poc_lsb - 4);
1026 start = sublayer_ordering_info ? 0 :
sps->max_sub_layers - 1;
1027 for (
i = start;
i <
sps->max_sub_layers;
i++) {
1033 sps->temporal_layer[
i].max_dec_pic_buffering - 1U);
1036 if (
sps->temporal_layer[
i].num_reorder_pics >
sps->temporal_layer[
i].max_dec_pic_buffering - 1) {
1038 sps->temporal_layer[
i].num_reorder_pics);
1043 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[
i].num_reorder_pics + 1;
1047 if (!sublayer_ordering_info) {
1048 for (
i = 0;
i < start;
i++) {
1049 sps->temporal_layer[
i].max_dec_pic_buffering =
sps->temporal_layer[start].max_dec_pic_buffering;
1050 sps->temporal_layer[
i].num_reorder_pics =
sps->temporal_layer[start].num_reorder_pics;
1051 sps->temporal_layer[
i].max_latency_increase =
sps->temporal_layer[start].max_latency_increase;
1059 sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
1060 sps->log2_min_tb_size;
1062 if (
sps->log2_min_cb_size < 3 ||
sps->log2_min_cb_size > 30) {
1067 if (
sps->log2_diff_max_min_coding_block_size > 30) {
1068 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);
1072 if (
sps->log2_min_tb_size >=
sps->log2_min_cb_size ||
sps->log2_min_tb_size < 2) {
1077 if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
1078 av_log(avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
1086 if (
sps->scaling_list_enable_flag) {
1100 if (
sps->pcm_enabled_flag) {
1104 sps->pcm.log2_max_pcm_cb_size =
sps->pcm.log2_min_pcm_cb_size +
1106 if (
FFMAX(
sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma) >
sps->bit_depth) {
1108 "PCM bit depth (%d, %d) is greater than normal bit depth (%d)\n",
1109 sps->pcm.bit_depth,
sps->pcm.bit_depth_chroma,
sps->bit_depth);
1122 for (
i = 0;
i <
sps->nb_st_rps;
i++) {
1129 if (
sps->long_term_ref_pics_present_flag) {
1133 sps->num_long_term_ref_pics_sps);
1136 for (
i = 0;
i <
sps->num_long_term_ref_pics_sps;
i++) {
1143 sps->sps_strong_intra_smoothing_enable_flag =
get_bits1(gb);
1152 if (
sps->sps_range_extension_flag) {
1153 sps->transform_skip_rotation_enabled_flag =
get_bits1(gb);
1154 sps->transform_skip_context_enabled_flag =
get_bits1(gb);
1159 sps->extended_precision_processing_flag =
get_bits1(gb);
1160 if (
sps->extended_precision_processing_flag)
1162 "extended_precision_processing_flag not yet implemented\n");
1165 sps->high_precision_offsets_enabled_flag =
get_bits1(gb);
1166 if (
sps->high_precision_offsets_enabled_flag)
1168 "high_precision_offsets_enabled_flag not yet implemented\n");
1170 sps->persistent_rice_adaptation_enabled_flag =
get_bits1(gb);
1172 sps->cabac_bypass_alignment_enabled_flag =
get_bits1(gb);
1173 if (
sps->cabac_bypass_alignment_enabled_flag)
1175 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1178 if (apply_defdispwin) {
1179 sps->output_window.left_offset +=
sps->vui.def_disp_win.left_offset;
1180 sps->output_window.right_offset +=
sps->vui.def_disp_win.right_offset;
1181 sps->output_window.top_offset +=
sps->vui.def_disp_win.top_offset;
1182 sps->output_window.bottom_offset +=
sps->vui.def_disp_win.bottom_offset;
1185 ow = &
sps->output_window;
1196 "Displaying the whole video surface.\n");
1197 memset(ow, 0,
sizeof(*ow));
1198 memset(&
sps->pic_conf_win, 0,
sizeof(
sps->pic_conf_win));
1202 sps->log2_ctb_size =
sps->log2_min_cb_size +
1203 sps->log2_diff_max_min_coding_block_size;
1204 sps->log2_min_pu_size =
sps->log2_min_cb_size - 1;
1210 if (
sps->log2_ctb_size < 4) {
1213 "log2_ctb_size %d differs from the bounds of any known profile\n",
1214 sps->log2_ctb_size);
1219 sps->ctb_width = (
sps->width + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1220 sps->ctb_height = (
sps->height + (1 <<
sps->log2_ctb_size) - 1) >>
sps->log2_ctb_size;
1221 sps->ctb_size =
sps->ctb_width *
sps->ctb_height;
1223 sps->min_cb_width =
sps->width >>
sps->log2_min_cb_size;
1224 sps->min_cb_height =
sps->height >>
sps->log2_min_cb_size;
1225 sps->min_tb_width =
sps->width >>
sps->log2_min_tb_size;
1226 sps->min_tb_height =
sps->height >>
sps->log2_min_tb_size;
1227 sps->min_pu_width =
sps->width >>
sps->log2_min_pu_size;
1228 sps->min_pu_height =
sps->height >>
sps->log2_min_pu_size;
1229 sps->tb_mask = (1 << (
sps->log2_ctb_size -
sps->log2_min_tb_size)) - 1;
1231 sps->qp_bd_offset = 6 * (
sps->bit_depth - 8);
1239 if (
sps->max_transform_hierarchy_depth_inter >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1240 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_inter out of range: %d\n",
1241 sps->max_transform_hierarchy_depth_inter);
1244 if (
sps->max_transform_hierarchy_depth_intra >
sps->log2_ctb_size -
sps->log2_min_tb_size) {
1245 av_log(avctx,
AV_LOG_ERROR,
"max_transform_hierarchy_depth_intra out of range: %d\n",
1246 sps->max_transform_hierarchy_depth_intra);
1249 if (
sps->log2_max_trafo_size >
FFMIN(
sps->log2_ctb_size, 5)) {
1251 "max transform block size out of range: %d\n",
1252 sps->log2_max_trafo_size);
1270 unsigned int sps_id;
1281 if (nal_size >
sizeof(
sps->data)) {
1284 nal_size,
sizeof(
sps->data));
1285 sps->data_size =
sizeof(
sps->data);
1287 sps->data_size = nal_size;
1301 "Parsed SPS: id %d; coded wxh: %dx%d; "
1302 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1303 sps_id,
sps->width,
sps->height,
1304 sps->width - (
sps->output_window.left_offset +
sps->output_window.right_offset),
1305 sps->height - (
sps->output_window.top_offset +
sps->output_window.bottom_offset),
1345 if (
pps->transform_skip_enabled_flag) {
1348 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1349 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1350 if (
pps->chroma_qp_offset_list_enabled_flag) {
1353 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1355 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1358 for (
i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1360 if (
pps->cb_qp_offset_list[
i]) {
1362 "cb_qp_offset_list not tested yet.\n");
1365 if (
pps->cr_qp_offset_list[
i]) {
1367 "cb_qp_offset_list not tested yet.\n");
1374 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
1375 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
1386 int pic_area_in_ctbs;
1387 int i, j, x, y, ctb_addr_rs, tile_id;
1393 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
1396 if (
pps->uniform_spacing_flag) {
1397 if (!
pps->column_width) {
1401 if (!
pps->column_width || !
pps->row_height)
1404 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
1405 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
1406 (
i *
sps->ctb_width) /
pps->num_tile_columns;
1409 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
1410 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
1411 (
i *
sps->ctb_height) /
pps->num_tile_rows;
1416 for (
i = 0;
i <
pps->num_tile_columns;
i++)
1417 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
1420 for (
i = 0;
i <
pps->num_tile_rows;
i++)
1421 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
1423 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
1424 if (
i >
pps->col_bd[j])
1426 pps->col_idxX[
i] = j;
1432 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
1438 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
1439 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
1443 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1444 int tb_x = ctb_addr_rs %
sps->ctb_width;
1445 int tb_y = ctb_addr_rs /
sps->ctb_width;
1450 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
1451 if (tb_x < pps->col_bd[
i + 1]) {
1457 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
1458 if (tb_y < pps->row_bd[
i + 1]) {
1464 for (
i = 0;
i < tile_x;
i++)
1465 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
1466 for (
i = 0;
i < tile_y;
i++)
1469 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
1470 tb_x -
pps->col_bd[tile_x];
1472 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
1473 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
1476 for (j = 0, tile_id = 0; j <
pps->num_tile_rows; j++)
1477 for (
i = 0;
i <
pps->num_tile_columns;
i++, tile_id++)
1478 for (y =
pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
1479 for (x =
pps->col_bd[
i]; x < pps->col_bd[
i + 1]; x++)
1480 pps->tile_id[
pps->ctb_addr_rs_to_ts[y *
sps->ctb_width + x]] = tile_id;
1483 if (!
pps->tile_pos_rs)
1486 for (j = 0; j <
pps->num_tile_rows; j++)
1487 for (
i = 0;
i <
pps->num_tile_columns;
i++)
1488 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
1489 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
1491 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
1492 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
1493 for (y = 0; y <
sps->tb_mask+2; y++) {
1494 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
1495 pps->min_tb_addr_zs_tab[y] = -1;
1497 for (y = 0; y <
sps->tb_mask+1; y++) {
1498 for (x = 0; x <
sps->tb_mask+1; x++) {
1499 int tb_x = x >> log2_diff;
1500 int tb_y = y >> log2_diff;
1501 int rs =
sps->ctb_width * tb_y + tb_x;
1502 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
1503 for (
i = 0;
i < log2_diff;
i++) {
1505 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
1507 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
1519 unsigned int pps_id = 0;
1521 unsigned log2_parallel_merge_level_minus2;
1539 if (nal_size >
sizeof(
pps->data)) {
1542 nal_size,
sizeof(
pps->data));
1543 pps->data_size =
sizeof(
pps->data);
1545 pps->data_size = nal_size;
1550 pps->loop_filter_across_tiles_enabled_flag = 1;
1551 pps->num_tile_columns = 1;
1552 pps->num_tile_rows = 1;
1553 pps->uniform_spacing_flag = 1;
1554 pps->disable_dbf = 0;
1555 pps->beta_offset = 0;
1557 pps->log2_max_transform_skip_block_size = 2;
1579 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
1581 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
1596 pps->diff_cu_qp_delta_depth = 0;
1597 if (
pps->cu_qp_delta_enabled_flag)
1600 if (
pps->diff_cu_qp_delta_depth < 0 ||
1601 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
1603 pps->diff_cu_qp_delta_depth);
1609 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
1616 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
1622 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
1631 if (
pps->tiles_enabled_flag) {
1635 if (num_tile_columns_minus1 < 0 ||
1636 num_tile_columns_minus1 >=
sps->ctb_width) {
1638 num_tile_columns_minus1);
1642 if (num_tile_rows_minus1 < 0 ||
1643 num_tile_rows_minus1 >=
sps->ctb_height) {
1645 num_tile_rows_minus1);
1649 pps->num_tile_columns = num_tile_columns_minus1 + 1;
1650 pps->num_tile_rows = num_tile_rows_minus1 + 1;
1654 if (!
pps->column_width || !
pps->row_height) {
1660 if (!
pps->uniform_spacing_flag) {
1662 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
1664 sum +=
pps->column_width[
i];
1666 if (sum >=
sps->ctb_width) {
1671 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
1674 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
1676 sum +=
pps->row_height[
i];
1678 if (sum >=
sps->ctb_height) {
1683 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
1685 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
1688 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
1690 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
1691 if (
pps->deblocking_filter_control_present_flag) {
1692 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
1694 if (!
pps->disable_dbf) {
1697 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
1703 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
1709 pps->beta_offset = 2 * beta_offset_div2;
1710 pps->tc_offset = 2 * tc_offset_div2;
1715 if (
pps->scaling_list_data_present_flag) {
1723 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
1725 log2_parallel_merge_level_minus2);
1729 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
1731 pps->slice_header_extension_present_flag =
get_bits1(gb);
1780 int max_poc_lsb = 1 <<
sps->log2_max_poc_lsb;
1781 int prev_poc_lsb = pocTid0 % max_poc_lsb;
1782 int prev_poc_msb = pocTid0 - prev_poc_lsb;
1785 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
1786 poc_msb = prev_poc_msb + max_poc_lsb;
1787 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
1788 poc_msb = prev_poc_msb - max_poc_lsb;
1790 poc_msb = prev_poc_msb;
1798 return poc_msb + poc_lsb;
static double val(void *priv, double ch)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define FF_PROFILE_HEVC_MAIN_10
#define FF_DEBUG_BITSTREAM
#define FF_PROFILE_HEVC_REXT
#define FF_PROFILE_HEVC_MAIN
static int FUNC() timing_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawTimingInfo *current)
static int FUNC() pps(CodedBitstreamContext *ctx, RWContext *rw, H264RawPPS *current)
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static int FUNC() vps(CodedBitstreamContext *ctx, RWContext *rw, H265RawVPS *current)
static SDL_Window * window
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static void skip_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
static int get_se_golomb_long(GetBitContext *gb)
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
#define AV_CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
AVBufferRef * av_buffer_allocz(buffer_size_t size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
AVBufferRef * av_buffer_create(uint8_t *data, buffer_size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
const H265RawProfileTierLevel * ptl
const uint8_t ff_hevc_diag_scan8x8_x[64]
const uint8_t ff_hevc_diag_scan4x4_x[16]
const uint8_t ff_hevc_diag_scan8x8_y[64]
const uint8_t ff_hevc_diag_scan4x4_y[16]
int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
static void remove_vps(HEVCParamSets *s, int id)
void ff_hevc_ps_uninit(HEVCParamSets *ps)
static void remove_sps(HEVCParamSets *s, int id)
static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb, int subpic_params_present)
static const uint8_t default_scaling_list_intra[]
static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx, PTL *ptl, int max_num_sub_layers)
static void set_default_scaling_list_data(ScalingList *sl)
static int read_window(HEVCWindow *window, GetBitContext *gb, int chroma_format_idc, int w, int h)
static const uint8_t hevc_sub_height_c[]
static void remove_pps(HEVCParamSets *s, int id)
static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
static const uint8_t hevc_sub_width_c[]
static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
static const uint8_t default_scaling_list_inter[]
int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps)
static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx, PTLCommon *ptl)
int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps, int apply_defdispwin)
int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, int apply_defdispwin, AVBufferRef **vps_list, AVCodecContext *avctx)
Parse the SPS from the bitstream into the provided HEVCSPS struct.
#define check_profile_idc(idc)
static int decode_hrd(GetBitContext *gb, int common_inf_present, int max_sublayers)
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, HEVCSPS *sps)
static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, HEVCSPS *sps)
static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, HEVCSPS *sps)
int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type)
Compute POC of the current frame and return it.
static const AVRational vui_sar[]
static void hevc_pps_free(void *opaque, uint8_t *data)
@ HEVC_MAX_LONG_TERM_REF_PICS
@ HEVC_MAX_SHORT_TERM_REF_PIC_SETS
#define PTRDIFF_SPECIFIER
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
const char * av_color_space_name(enum AVColorSpace space)
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_YUV444P10
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
#define FF_ARRAY_ELEMS(a)
A reference to a data buffer.
int size
Size of data in bytes.
uint8_t * data
The data buffer.
main external API structure.
int flags2
AV_CODEC_FLAG2_*.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Rational number (pair of numerator and denominator).
const uint8_t * buffer_end
uint8_t sub_layer_profile_present_flag[HEVC_MAX_SUB_LAYERS]
uint8_t sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]
AVBufferRef * pps_list[HEVC_MAX_PPS_COUNT]
AVBufferRef * vps_list[HEVC_MAX_VPS_COUNT]
AVBufferRef * sps_list[HEVC_MAX_SPS_COUNT]
unsigned int right_offset
unsigned int bottom_offset
unsigned int num_negative_pics
int rps_idx_num_delta_pocs
int vui_poc_proportional_to_timing_flag
int vui_timing_info_present_flag
int max_bits_per_min_cu_denom
int log2_max_mv_length_horizontal
int tiles_fixed_structure_flag
int colour_description_present_flag
int motion_vectors_over_pic_boundaries_flag
int log2_max_mv_length_vertical
int bitstream_restriction_flag
int frame_field_info_present_flag
int max_bytes_per_pic_denom
int vui_num_ticks_poc_diff_one_minus1
int vui_hrd_parameters_present_flag
int overscan_appropriate_flag
int video_signal_type_present_flag
int chroma_sample_loc_type_bottom_field
int min_spatial_segmentation_idc
int neutra_chroma_indication_flag
int default_display_window_flag
int restricted_ref_pic_lists_flag
int chroma_sample_loc_type_top_field
int video_full_range_flag
int overscan_info_present_flag
uint32_t vui_num_units_in_tick
uint8_t transfer_characteristic
int chroma_loc_info_present_flag
#define av_malloc_array(a, b)
#define avpriv_request_sample(...)