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",
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) {
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 len =
av_log2(max_diff - (min_diff_minus1 + 1)) + 1;
1953 unsigned int pps_depth_layers_minus1;
1956 pps_depth_layers_minus1 =
get_bits(gb, 6);
1957 pps->pps_bit_depth_for_depth_layers_minus8 =
get_bits(gb, 4);
1958 for (
int i = 0;
i <= pps_depth_layers_minus1;
i++) {
1976 if (
pps->transform_skip_enabled_flag) {
1979 pps->cross_component_prediction_enabled_flag =
get_bits1(gb);
1980 pps->chroma_qp_offset_list_enabled_flag =
get_bits1(gb);
1981 if (
pps->chroma_qp_offset_list_enabled_flag) {
1984 if (
pps->chroma_qp_offset_list_len_minus1 > 5) {
1986 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1989 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1991 if (
pps->cb_qp_offset_list[
i]) {
1993 "cb_qp_offset_list not tested yet.\n");
1996 if (
pps->cr_qp_offset_list[
i]) {
1998 "cb_qp_offset_list not tested yet.\n");
2005 if (
pps->log2_sao_offset_scale_luma >
FFMAX(
sps->bit_depth - 10, 0)
2006 ||
pps->log2_sao_offset_scale_chroma >
FFMAX(
sps->bit_depth_chroma - 10, 0)
2019 if (
pps->residual_adaptive_colour_transform_enabled_flag =
get_bits1(gb)) {
2020 pps->pps_slice_act_qp_offsets_present_flag =
get_bits1(gb);
2025#define CHECK_QP_OFFSET(name) (pps->pps_act_ ## name ## _qp_offset <= -12 || \
2026 pps->pps_act_ ## name ## _qp_offset >= 12)
2028#undef CHECK_QP_OFFSET
2031 "PpsActQpOffsetY/Cb/Cr shall be in the range of [-12, 12].\n");
2036 if (
pps->pps_palette_predictor_initializers_present_flag =
get_bits1(gb)) {
2038 if (
pps->pps_num_palette_predictor_initializers > 0) {
2041 "pps_num_palette_predictor_initializers out of range: %u\n",
2042 pps->pps_num_palette_predictor_initializers);
2047 if (
pps->luma_bit_depth_entry !=
sps->bit_depth)
2049 if (!
pps->monochrome_palette_flag) {
2051 if (
pps->chroma_bit_depth_entry !=
sps->bit_depth_chroma)
2055 num_comps =
pps->monochrome_palette_flag ? 1 : 3;
2058 for (
int i = 0;
i <
pps->pps_num_palette_predictor_initializers;
i++)
2071 int pic_area_in_ctbs;
2072 int i, j, x, y, ctb_addr_rs, tile_id;
2078 if (!
pps->col_bd || !
pps->row_bd || !
pps->col_idxX)
2081 if (
pps->uniform_spacing_flag) {
2082 if (!
pps->column_width) {
2086 if (!
pps->column_width || !
pps->row_height)
2089 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2090 pps->column_width[
i] = ((
i + 1) *
sps->ctb_width) /
pps->num_tile_columns -
2091 (
i *
sps->ctb_width) /
pps->num_tile_columns;
2094 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2095 pps->row_height[
i] = ((
i + 1) *
sps->ctb_height) /
pps->num_tile_rows -
2096 (
i *
sps->ctb_height) /
pps->num_tile_rows;
2101 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2102 pps->col_bd[
i + 1] =
pps->col_bd[
i] +
pps->column_width[
i];
2105 for (
i = 0;
i <
pps->num_tile_rows;
i++)
2106 pps->row_bd[
i + 1] =
pps->row_bd[
i] +
pps->row_height[
i];
2108 for (
i = 0, j = 0;
i <
sps->ctb_width;
i++) {
2109 if (
i >
pps->col_bd[j])
2111 pps->col_idxX[
i] = j;
2117 pic_area_in_ctbs =
sps->ctb_width *
sps->ctb_height;
2123 if (!
pps->ctb_addr_rs_to_ts || !
pps->ctb_addr_ts_to_rs ||
2124 !
pps->tile_id || !
pps->min_tb_addr_zs_tab) {
2128 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
2129 int tb_x = ctb_addr_rs %
sps->ctb_width;
2130 int tb_y = ctb_addr_rs /
sps->ctb_width;
2135 for (
i = 0;
i <
pps->num_tile_columns;
i++) {
2136 if (tb_x < pps->col_bd[
i + 1]) {
2142 for (
i = 0;
i <
pps->num_tile_rows;
i++) {
2143 if (tb_y < pps->row_bd[
i + 1]) {
2149 for (
i = 0;
i < tile_x;
i++)
2150 val +=
pps->row_height[tile_y] *
pps->column_width[
i];
2151 for (
i = 0;
i < tile_y;
i++)
2154 val += (tb_y -
pps->row_bd[tile_y]) *
pps->column_width[tile_x] +
2155 tb_x -
pps->col_bd[tile_x];
2157 pps->ctb_addr_rs_to_ts[ctb_addr_rs] =
val;
2158 pps->ctb_addr_ts_to_rs[
val] = ctb_addr_rs;
2161 for (j = 0, tile_id = 0; j <
pps->num_tile_rows; j++)
2162 for (
i = 0;
i <
pps->num_tile_columns;
i++, tile_id++)
2163 for (y =
pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
2164 for (x =
pps->col_bd[
i]; x < pps->col_bd[
i + 1]; x++)
2165 pps->tile_id[
pps->ctb_addr_rs_to_ts[y *
sps->ctb_width + x]] = tile_id;
2168 if (!
pps->tile_pos_rs)
2171 for (j = 0; j <
pps->num_tile_rows; j++)
2172 for (
i = 0;
i <
pps->num_tile_columns;
i++)
2173 pps->tile_pos_rs[j *
pps->num_tile_columns +
i] =
2174 pps->row_bd[j] *
sps->ctb_width +
pps->col_bd[
i];
2176 log2_diff =
sps->log2_ctb_size -
sps->log2_min_tb_size;
2177 pps->min_tb_addr_zs = &
pps->min_tb_addr_zs_tab[1*(
sps->tb_mask+2)+1];
2178 for (y = 0; y <
sps->tb_mask+2; y++) {
2179 pps->min_tb_addr_zs_tab[y*(
sps->tb_mask+2)] = -1;
2180 pps->min_tb_addr_zs_tab[y] = -1;
2182 for (y = 0; y <
sps->tb_mask+1; y++) {
2183 for (x = 0; x <
sps->tb_mask+1; x++) {
2184 int tb_x = x >> log2_diff;
2185 int tb_y = y >> log2_diff;
2186 int rs =
sps->ctb_width * tb_y + tb_x;
2187 int val =
pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
2188 for (
i = 0;
i < log2_diff;
i++) {
2190 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
2192 pps->min_tb_addr_zs[y * (
sps->tb_mask+2) + x] =
val;
2207 unsigned log2_parallel_merge_level_minus2;
2228 pps->data_size = nal_size;
2236 pps->loop_filter_across_tiles_enabled_flag = 1;
2237 pps->num_tile_columns = 1;
2238 pps->num_tile_rows = 1;
2239 pps->uniform_spacing_flag = 1;
2240 pps->disable_dbf = 0;
2241 pps->beta_offset = 0;
2243 pps->log2_max_transform_skip_block_size = 2;
2246 pps->pps_id = pps_id;
2263 pps->dependent_slice_segments_enabled_flag =
get_bits1(gb);
2265 pps->num_extra_slice_header_bits =
get_bits(gb, 3);
2276 pps->num_ref_idx_l0_default_active,
pps->num_ref_idx_l1_default_active);
2286 pps->diff_cu_qp_delta_depth = 0;
2287 if (
pps->cu_qp_delta_enabled_flag)
2290 if (
pps->diff_cu_qp_delta_depth < 0 ||
2291 pps->diff_cu_qp_delta_depth >
sps->log2_diff_max_min_coding_block_size) {
2293 pps->diff_cu_qp_delta_depth);
2299 if (
pps->cb_qp_offset < -12 ||
pps->cb_qp_offset > 12) {
2306 if (
pps->cr_qp_offset < -12 ||
pps->cr_qp_offset > 12) {
2312 pps->pic_slice_level_chroma_qp_offsets_present_flag =
get_bits1(gb);
2321 if (
pps->tiles_enabled_flag) {
2325 if (num_tile_columns_minus1 < 0 ||
2326 num_tile_columns_minus1 >=
sps->ctb_width) {
2328 num_tile_columns_minus1);
2332 if (num_tile_rows_minus1 < 0 ||
2333 num_tile_rows_minus1 >=
sps->ctb_height) {
2335 num_tile_rows_minus1);
2339 pps->num_tile_columns = num_tile_columns_minus1 + 1;
2340 pps->num_tile_rows = num_tile_rows_minus1 + 1;
2344 if (!
pps->column_width || !
pps->row_height) {
2350 if (!
pps->uniform_spacing_flag) {
2352 for (
i = 0;
i <
pps->num_tile_columns - 1;
i++) {
2354 sum +=
pps->column_width[
i];
2356 if (sum >=
sps->ctb_width) {
2361 pps->column_width[
pps->num_tile_columns - 1] =
sps->ctb_width - sum;
2364 for (
i = 0;
i <
pps->num_tile_rows - 1;
i++) {
2366 sum +=
pps->row_height[
i];
2368 if (sum >=
sps->ctb_height) {
2373 pps->row_height[
pps->num_tile_rows - 1] =
sps->ctb_height - sum;
2375 pps->loop_filter_across_tiles_enabled_flag =
get_bits1(gb);
2378 pps->seq_loop_filter_across_slices_enabled_flag =
get_bits1(gb);
2380 pps->deblocking_filter_control_present_flag =
get_bits1(gb);
2381 if (
pps->deblocking_filter_control_present_flag) {
2382 pps->deblocking_filter_override_enabled_flag =
get_bits1(gb);
2384 if (!
pps->disable_dbf) {
2387 if (beta_offset_div2 < -6 || beta_offset_div2 > 6) {
2393 if (tc_offset_div2 < -6 || tc_offset_div2 > 6) {
2399 pps->beta_offset = 2 * beta_offset_div2;
2400 pps->tc_offset = 2 * tc_offset_div2;
2405 if (
pps->scaling_list_data_present_flag) {
2413 if (log2_parallel_merge_level_minus2 >
sps->log2_ctb_size) {
2415 log2_parallel_merge_level_minus2);
2419 pps->log2_parallel_merge_level = log2_parallel_merge_level_minus2 + 2;
2421 pps->slice_header_extension_present_flag =
get_bits1(gb);
2424 if (
pps->pps_extension_present_flag) {
2436 if (
pps->pps_multilayer_extension_flag) {
2441 if (
pps->pps_3d_extension_flag) {
2446 if (
pps->pps_scc_extension_flag) {
2485 int max_poc_lsb = 1 << log2_max_poc_lsb;
2486 int prev_poc_lsb = pocTid0 % max_poc_lsb;
2487 int prev_poc_msb = pocTid0 - prev_poc_lsb;
2490 if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2)
2491 poc_msb = prev_poc_msb + max_poc_lsb;
2492 else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2)
2493 poc_msb = prev_poc_msb - max_poc_lsb;
2495 poc_msb = prev_poc_msb;
2503 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 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)
static const char * profile_name(enum AVCodecID codec_id, int profile)