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",
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));
348 if (status < 0 ||
get_bits_left(gb) < 8 + (8*2 * (max_num_sub_layers - 1 > 0))) {
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++) {
364 if (
ptl->sub_layer_profile_present_flag[
i] &&
367 "PTL information for sublayer %i too short\n",
i);
370 if (
ptl->sub_layer_level_present_flag[
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 + 256U + 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) {
1283 if ((ret =
parse_ptl(gb, avctx, 1, &
sps->ptl,
sps->max_sub_layers)) < 0)
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 > 3U) {
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 - 1U);
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)
1740 unsigned int sps_id;
1756 nuh_layer_id, apply_defdispwin,
1763 "Parsed SPS: id %d; coded wxh: %dx%d; "
1764 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1765 sps_id,
sps->width,
sps->height,
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++)
1863 if (
pps-> luma_bit_depth_cm_output < pps-> luma_bit_depth_cm_input
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++)
2164 for (
i = 0;
i <
pps->num_tile_columns;
i++, tile_id++)
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++)
2167 pps->tile_id[
pps->ctb_addr_rs_to_ts[y *
sps->ctb_width + x]] = tile_id;
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;
2248 pps->pps_id = pps_id;
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;
static double val(void *priv, double ch)
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
#define FF_DEBUG_BITSTREAM
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
static int FUNC timing_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawTimingInfo *current)
#define i(width, name, range_min, range_max)
static int FUNC sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static int FUNC vps(CodedBitstreamContext *ctx, RWContext *rw, H265RawVPS *current)
#define AV_EF_BITSTREAM
detect bitstream specification deviations
#define AV_PROFILE_UNKNOWN
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
#define AV_PROFILE_HEVC_REXT
#define AV_EF_EXPLODE
abort decoding on minor error detection
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
static SDL_Window * window
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 uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
static const uint8_t * align_get_bits(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static int get_bits_bytesize(const GetBitContext *s, int round_up)
Get the size of the GetBitContext's buffer in bytes.
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
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.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#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_VERBOSE
Detailed information.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
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...
void ff_h2645_decode_common_vui_params(GetBitContext *gb, H2645VUI *vui, void *logctx)
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 hevc_sps_free(AVRefStructOpaque opaque, void *obj)
static void hevc_pps_free(AVRefStructOpaque unused, void *obj)
static const uint8_t default_scaling_list_intra[]
static int pps_multilayer_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps, const HEVCVPS *vps)
static int colour_mapping_table(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps)
static int pps_scc_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
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 decode_vui(GetBitContext *gb, AVCodecContext *avctx, int apply_defdispwin, HEVCSPS *sps)
static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, const HEVCSPS *sps)
int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, unsigned nuh_layer_id, int apply_defdispwin, const HEVCVPS *const *vps_list, AVCodecContext *avctx)
Parse the SPS from the bitstream into the provided HEVCSPS struct.
static const uint8_t hevc_sub_width_c[]
static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
static int compare_sps(const HEVCSPS *sps1, const HEVCSPS *sps2)
static const uint8_t default_scaling_list_inter[]
static int setup_pps(AVCodecContext *avctx, GetBitContext *gb, HEVCPPS *pps, const HEVCSPS *sps)
static int decode_hrd(GetBitContext *gb, int common_inf_present, HEVCHdrParams *hdr, int max_sublayers)
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)
static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth, int idx_y, int idx_cb, int idx_cr, int inp_length)
static void delta_dlt(GetBitContext *gb, HEVCPPS *pps)
static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb, HEVCSublayerHdrParams *par, int subpic_params_present)
static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx, int profile_present, PTL *ptl, int max_num_sub_layers)
#define check_profile_idc(idc)
#define CHECK_QP_OFFSET(name)
static void hevc_vps_free(AVRefStructOpaque opaque, void *obj)
static int decode_vps_ext(GetBitContext *gb, AVCodecContext *avctx, HEVCVPS *vps, uint64_t layer1_id_included)
static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
int ff_hevc_compute_poc2(unsigned log2_max_poc_lsb, int pocTid0, int poc_lsb, int nal_unit_type)
Compute POC of the current frame and return it.
static int pps_3d_extension(GetBitContext *gb, AVCodecContext *avctx, HEVCPPS *pps, const HEVCSPS *sps)
int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps, unsigned nuh_layer_id, int apply_defdispwin)
#define u(width, name, range_min, range_max)
@ HEVC_SCALABILITY_AUXILIARY
@ HEVC_SCALABILITY_MULTIVIEW
@ HEVC_MAX_LONG_TERM_REF_PICS
@ HEVC_MAX_PALETTE_PREDICTOR_SIZE
@ HEVC_MAX_SHORT_TERM_REF_PIC_SETS
void * av_calloc(size_t nmemb, size_t size)
Memory handling functions.
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), YZX and ST 428-1
const AVProfile ff_hevc_profiles[]
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
const void * av_refstruct_ref_c(const void *obj)
Analog of av_refstruct_ref(), but for constant objects.
static void * av_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque, void(*free_cb)(AVRefStructOpaque opaque, void *obj))
A wrapper around av_refstruct_alloc_ext_c() for the common case of a non-const qualified opaque.
#define FF_ARRAY_ELEMS(a)
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).
int video_signal_type_present_flag
int video_full_range_flag
enum AVColorSpace matrix_coeffs
int colour_description_present_flag
uint8_t fixed_pic_rate_general_flag
uint8_t low_delay_hrd_flag
uint8_t fixed_pic_rate_within_cvs_flag
uint8_t initial_cpb_removal_delay_length_minus1
uint8_t sub_pic_cpb_params_in_pic_timing_sei_flag
uint8_t vcl_hrd_parameters_present_flag
uint8_t dpb_output_delay_du_length_minus1
uint8_t nal_hrd_parameters_present_flag
uint8_t tick_divisor_minus2
uint8_t sub_pic_hrd_params_present_flag
uint8_t cpb_size_du_scale
uint16_t elemental_duration_in_tc_minus1[HEVC_MAX_SUB_LAYERS]
HEVCSublayerHdrParams nal_params[HEVC_MAX_SUB_LAYERS]
uint8_t dpb_output_delay_length_minus1
HEVCSublayerHdrParams vcl_params[HEVC_MAX_SUB_LAYERS]
uint8_t au_cpb_removal_delay_length_minus1
uint8_t cpb_cnt_minus1[HEVC_MAX_SUB_LAYERS]
uint8_t du_cpb_removal_delay_increment_length_minus1
const HEVCVPS * vps_list[HEVC_MAX_VPS_COUNT]
RefStruct references.
const HEVCPPS * pps_list[HEVC_MAX_PPS_COUNT]
RefStruct references.
const HEVCSPS * sps_list[HEVC_MAX_SPS_COUNT]
RefStruct references.
uint32_t cpb_size_du_value_minus1[HEVC_MAX_CPB_CNT]
uint32_t bit_rate_du_value_minus1[HEVC_MAX_CPB_CNT]
uint32_t bit_rate_value_minus1[HEVC_MAX_CPB_CNT]
uint32_t cpb_size_value_minus1[HEVC_MAX_CPB_CNT]
unsigned int right_offset
unsigned int bottom_offset
uint8_t rps_idx_num_delta_pocs
uint8_t num_negative_pics
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 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 min_spatial_segmentation_idc
int neutra_chroma_indication_flag
int default_display_window_flag
int restricted_ref_pic_lists_flag
uint32_t vui_num_units_in_tick
#define av_malloc_array(a, b)
#define avpriv_request_sample(...)
RefStruct is an API for creating reference-counted objects with minimal overhead.
static double cr(void *priv, double x, double y)
static double cb(void *priv, double x, double y)