44 .encode_op = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR,
46 .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME,
47 .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION,
70 VkVideoEncodeH265NaluSliceSegmentInfoKHR
vkslice;
76 StdVideoEncodeH265LongTermRefPics
l_rps;
77 StdVideoH265ShortTermRefPicSet
s_rps;
97 VkVideoEncodeH265CapabilitiesKHR
caps;
112 VkVideoEncodeRateControlInfoKHR *rc_info,
113 VkVideoEncodeRateControlLayerInfoKHR *rc_layer)
119 hp->
vkrc_info = (VkVideoEncodeH265RateControlInfoKHR) {
120 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR,
121 .flags = VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR |
122 VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR,
123 .idrPeriod =
ctx->base.gop_size,
124 .gopFrameCount =
ctx->base.gop_size,
125 .consecutiveBFrameCount =
FFMAX(
ctx->base.b_per_p - 1, 0),
130 if (rc_info->rateControlMode > VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR) {
135 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR,
137 .useMinQp = avctx->
qmin > 0,
138 .minQp.qpI = avctx->
qmin > 0 ? avctx->
qmin : 0,
139 .minQp.qpP = avctx->
qmin > 0 ? avctx->
qmin : 0,
140 .minQp.qpB = avctx->
qmin > 0 ? avctx->
qmin : 0,
142 .useMaxQp = avctx->
qmax > 0,
143 .maxQp.qpI = avctx->
qmax > 0 ? avctx->
qmax : 0,
144 .maxQp.qpP = avctx->
qmax > 0 ? avctx->
qmax : 0,
145 .maxQp.qpB = avctx->
qmax > 0 ? avctx->
qmax : 0,
147 .useMaxFrameSize = 0,
170 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_IDR;
177 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_I;
181 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_P;
185 for (irap_ref = pic; irap_ref; irap_ref = irap_ref->
refs[1][0]) {
190 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_B;
203 .nuh_temporal_id_plus1 = 1,
225 const int mapping[3] = {1, 2, 0};
226 const int chroma_den = 50000;
227 const int luma_den = 10000;
229 for (
int i = 0;
i < 3;
i++) {
230 const int j = mapping[
i];
269 clli->max_pic_average_light_level =
FFMIN(clm->
MaxFALL, 65535);
277 size_t sei_a53cc_len;
300 hp->
slice_wt = (StdVideoEncodeH265WeightTable) {
301 .flags = (StdVideoEncodeH265WeightTableFlags) {
302 .luma_weight_l0_flag = 0,
303 .chroma_weight_l0_flag = 0,
304 .luma_weight_l1_flag = 0,
305 .chroma_weight_l1_flag = 0,
307 .luma_log2_weight_denom = 0,
308 .delta_chroma_log2_weight_denom = 0,
309 .delta_luma_weight_l0 = { 0 },
310 .luma_offset_l0 = { 0 },
311 .delta_chroma_weight_l0 = { { 0 } },
312 .delta_chroma_offset_l0 = { { 0 } },
313 .delta_luma_weight_l1 = { 0 },
314 .luma_offset_l1 = { 0 },
315 .delta_chroma_weight_l1 = { { 0 } },
316 .delta_chroma_offset_l1 = { { 0 } },
319 hp->
slice_hdr = (StdVideoEncodeH265SliceSegmentHeader) {
320 .flags = (StdVideoEncodeH265SliceSegmentHeaderFlags) {
321 .first_slice_segment_in_pic_flag = 1,
322 .dependent_slice_segment_flag = 0,
325 .num_ref_idx_active_override_flag = 0,
326 .mvd_l1_zero_flag = 0,
327 .cabac_init_flag = 0,
328 .cu_chroma_qp_offset_enabled_flag = 0,
329 .deblocking_filter_override_flag = 0,
330 .slice_deblocking_filter_disabled_flag = 0,
331 .collocated_from_l0_flag = 1,
332 .slice_loop_filter_across_slices_enabled_flag = 0,
336 .slice_segment_address = 0,
337 .collocated_ref_idx = 0,
338 .MaxNumMergeCand = 5,
339 .slice_cb_qp_offset = 0,
340 .slice_cr_qp_offset = 0,
341 .slice_beta_offset_div2 = 0,
342 .slice_tc_offset_div2 = 0,
343 .slice_act_y_qp_offset = 0,
344 .slice_act_cb_qp_offset = 0,
345 .slice_act_cr_qp_offset = 0,
348 .pWeightTable =
NULL,
351 hp->
vkslice = (VkVideoEncodeH265NaluSliceSegmentInfoKHR) {
352 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR,
357 .pStdSliceSegmentHeader = &hp->
slice_hdr,
360 if (enc->
common.
opts.
rc_mode != VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR)
372 VkVideoEncodeInfoKHR *encode_info)
379 .flags = (StdVideoEncodeH265ReferenceListsInfoFlags) {
380 .ref_pic_list_modification_flag_l0 = 0,
381 .ref_pic_list_modification_flag_l1 = 0,
385 .num_ref_idx_l0_active_minus1 = pic->
nb_refs[0] - 1,
386 .num_ref_idx_l1_active_minus1 = pic->
nb_refs[1] - 1,
388 .list_entry_l0 = { 0 },
389 .list_entry_l1 = { 0 },
392 for (
i = 0;
i < STD_VIDEO_H265_MAX_NUM_LIST_REF;
i++)
397 VkVideoReferenceSlotInfoKHR *slot_info;
398 slot_info = (VkVideoReferenceSlotInfoKHR *)&encode_info->pReferenceSlots[
i];
404 VkVideoReferenceSlotInfoKHR *slot_info;
405 slot_info = (VkVideoReferenceSlotInfoKHR *)&encode_info->pReferenceSlots[pic->
nb_refs[0] +
i];
412 StdVideoH265ShortTermRefPicSet *rps;
418 hp->
h265pic_info.flags.short_term_ref_pic_set_sps_flag = 0;
421 memset(rps, 0,
sizeof(*rps));
425 for (j = 0; j < pic->
nb_refs[
i]; j++) {
428 rps_used[rps_pics] = 1;
434 if (pic->
dpb[
i] == pic)
437 for (j = 0; j < pic->
nb_refs[0]; j++) {
441 if (j < pic->nb_refs[0])
444 for (j = 0; j < pic->
nb_refs[1]; j++) {
448 if (j < pic->nb_refs[1])
453 rps_used[rps_pics] = 0;
457 for (
i = 1;
i < rps_pics;
i++) {
458 for (j =
i; j > 0; j--) {
459 if (rps_poc[j] > rps_poc[j - 1])
462 FFSWAP(
int, rps_poc[j], rps_poc[j - 1]);
463 FFSWAP(
int, rps_used[j], rps_used[j - 1]);
468 for (
i = 0;
i < rps_pics;
i++)
473 for (
i = 0;
i < rps_pics;
i++) {
479 rps->num_negative_pics =
i;
480 rps->used_by_curr_pic_s0_flag = 0x0;
482 for (j =
i - 1; j >= 0; j--) {
483 rps->delta_poc_s0_minus1[
i - 1 - j] = poc - rps_poc[j] - 1;
484 rps->used_by_curr_pic_s0_flag |= rps_used[j] << (
i - 1 - j);
488 rps->num_positive_pics = rps_pics -
i;
489 rps->used_by_curr_pic_s1_flag = 0x0;
491 for (j =
i; j < rps_pics; j++) {
492 rps->delta_poc_s1_minus1[j -
i] = rps_poc[j] - poc - 1;
493 rps->used_by_curr_pic_s1_flag |= rps_used[j] << (j -
i);
497 hp->
l_rps.num_long_term_sps = 0;
498 hp->
l_rps.num_long_term_pics = 0;
501 hp->
slice_hdr.flags.collocated_from_l0_flag = 1;
502 hp->
h265pic_info.flags.slice_temporal_mvp_enabled_flag =
504 if (hp->
h265pic_info.flags.slice_temporal_mvp_enabled_flag) {
505 if (hp->
slice_hdr.slice_type == STD_VIDEO_H265_SLICE_TYPE_B)
506 hp->
slice_hdr.flags.collocated_from_l0_flag = 1;
510 hp->
slice_hdr.flags.num_ref_idx_active_override_flag = 0;
520 VkVideoEncodeInfoKHR *encode_info)
526 VkVideoReferenceSlotInfoKHR *ref_slot;
533 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR,
535 .pNaluSliceSegmentEntries =
NULL,
536 .naluSliceSegmentEntryCount = 0,
541 .flags = (StdVideoEncodeH265PictureInfoFlags) {
544 .used_for_long_term_reference = 0,
545 .discardable_flag = 0,
546 .cross_layer_bla_flag = 0,
547 .pic_output_flag = 1,
548 .no_output_of_prior_pics_flag = 0,
549 .short_term_ref_pic_set_sps_flag = 0,
554 .sps_video_parameter_set_id = 0,
555 .pps_seq_parameter_set_id = 0,
556 .pps_pic_parameter_set_id = 0,
557 .short_term_ref_pic_set_idx = 0,
562 .pShortTermRefPicSet =
NULL,
563 .pLongTermRefPics =
NULL,
568 .flags = (StdVideoEncodeH265ReferenceInfoFlags) {
569 .used_for_long_term_reference = 0,
570 .unused_for_reference = 0,
578 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR,
584 ref_slot = (VkVideoReferenceSlotInfoKHR *)encode_info->pSetupReferenceSlot;
595 VkVideoProfileInfoKHR *
profile,
void *pnext)
602 VkVideoEncodeH265CapabilitiesKHR h265_caps = {
603 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR,
605 VkVideoEncodeCapabilitiesKHR enc_caps = {
606 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR,
609 VkVideoCapabilitiesKHR caps = {
610 .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
616 static const int known_profiles[] = {
632 enc->
profile = (VkVideoEncodeH265ProfileInfoKHR) {
633 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR,
648 for (
int i = 0;
i < nb_profiles;
i++) {
650 ret = vk->GetPhysicalDeviceVideoCapabilitiesKHR(
s->hwctx->phys_dev,
653 if (
ret == VK_SUCCESS) {
656 last_supported = known_profiles[
i];
668 avctx->
profile = last_supported;
687 "must have initial buffer size (%d) <= "
688 "buffer size (%"PRId64
").\n",
697 if (enc->
common.
opts.
rc_mode == VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR) {
716 "%d / %d / %d for IDR- / P- / B-frames.\n",
738 unsigned min_tb_size;
739 unsigned max_tb_size;
740 unsigned max_transform_hierarchy;
764 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR);
766 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR);
771 if (enc->
caps.ctbSizes & VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR)
773 else if (enc->
caps.ctbSizes & VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR)
778 if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR)
780 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR)
782 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR)
784 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR)
787 if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR)
789 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR)
791 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR)
793 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR)
801 max_transform_hierarchy =
av_log2(max_ctb_size) -
av_log2(min_tb_size);
820 StdVideoH265SequenceParameterSet
sps;
821 StdVideoH265ShortTermRefPicSet
str[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE];
822 StdVideoH265LongTermRefPicsSps
ltr;
832 StdVideoH265PictureParameterSet
pps;
835 StdVideoH265VideoParameterSet
vps;
847 StdVideoH265SequenceParameterSet *vksps = &vk_units->
sps;
848 StdVideoH265ShortTermRefPicSet *str = vk_units->
str;
849 StdVideoH265LongTermRefPicsSps *ltr = &vk_units->
ltr;
850 StdVideoH265ProfileTierLevel *ptl_sps = &vk_units->
ptl_sps;
851 StdVideoH265DecPicBufMgr *dpbm_sps = &vk_units->
dpbm_sps;
853 StdVideoH265HrdParameters *vui_header_sps = &vk_units->
vui_header_sps;
854 StdVideoH265SequenceParameterSetVui *vui_sps = &vk_units->
vui_sps;
856 StdVideoH265SubLayerHrdParameters *slhdrnal = vk_units->
slhdrnal;
857 StdVideoH265SubLayerHrdParameters *slhdrvcl = vk_units->
slhdrvcl;
860 StdVideoH265PictureParameterSet *vkpps = &vk_units->
pps;
863 StdVideoH265VideoParameterSet *vkvps = &vk_units->
vps;
864 StdVideoH265ProfileTierLevel *ptl_vps = &vk_units->
ptl_vps;
865 StdVideoH265DecPicBufMgr *dpbm_vps = &vk_units->
dpbm_vps;
866 StdVideoH265HrdParameters *vui_header_vps = &vk_units->
vui_header_vps;
870 memcpy(&slhdrnal[
i], &
sps->vui.hrd_parameters.nal_sub_layer_hrd_parameters[
i],
sizeof(*slhdrnal));
871 memcpy(&slhdrvcl[
i], &
sps->vui.hrd_parameters.vcl_sub_layer_hrd_parameters[
i],
sizeof(*slhdrvcl));
872 slhdrnal[
i].cbr_flag = 0x0;
873 slhdrvcl[
i].cbr_flag = 0x0;
875 slhdrnal[
i].cbr_flag |=
sps->vui.hrd_parameters.nal_sub_layer_hrd_parameters[
i].cbr_flag[j] <<
i;
876 slhdrvcl[
i].cbr_flag |=
sps->vui.hrd_parameters.vcl_sub_layer_hrd_parameters[
i].cbr_flag[j] <<
i;
880 *vui_header_sps = (StdVideoH265HrdParameters) {
881 .flags = (StdVideoH265HrdFlags) {
882 .nal_hrd_parameters_present_flag =
sps->vui.hrd_parameters.nal_hrd_parameters_present_flag,
883 .vcl_hrd_parameters_present_flag =
sps->vui.hrd_parameters.vcl_hrd_parameters_present_flag,
884 .sub_pic_hrd_params_present_flag =
sps->vui.hrd_parameters.sub_pic_hrd_params_present_flag,
885 .sub_pic_cpb_params_in_pic_timing_sei_flag =
sps->vui.hrd_parameters.sub_pic_cpb_params_in_pic_timing_sei_flag,
886 .fixed_pic_rate_general_flag = 0x0,
887 .fixed_pic_rate_within_cvs_flag = 0x0,
888 .low_delay_hrd_flag = 0x0,
890 .tick_divisor_minus2 =
sps->vui.hrd_parameters.tick_divisor_minus2,
891 .du_cpb_removal_delay_increment_length_minus1 =
sps->vui.hrd_parameters.du_cpb_removal_delay_increment_length_minus1,
892 .dpb_output_delay_du_length_minus1 =
sps->vui.hrd_parameters.dpb_output_delay_du_length_minus1,
893 .bit_rate_scale =
sps->vui.hrd_parameters.bit_rate_scale,
894 .cpb_size_scale =
sps->vui.hrd_parameters.cpb_size_scale,
895 .cpb_size_du_scale =
sps->vui.hrd_parameters.cpb_size_du_scale,
896 .initial_cpb_removal_delay_length_minus1 =
sps->vui.hrd_parameters.initial_cpb_removal_delay_length_minus1,
897 .au_cpb_removal_delay_length_minus1 =
sps->vui.hrd_parameters.au_cpb_removal_delay_length_minus1,
898 .dpb_output_delay_length_minus1 =
sps->vui.hrd_parameters.dpb_output_delay_length_minus1,
900 .pSubLayerHrdParametersNal = slhdrnal,
901 .pSubLayerHrdParametersVcl = slhdrvcl,
905 vui_header_sps->flags.fixed_pic_rate_general_flag |=
sps->vui.hrd_parameters.fixed_pic_rate_general_flag[
i] <<
i;
906 vui_header_sps->flags.fixed_pic_rate_within_cvs_flag |=
sps->vui.hrd_parameters.fixed_pic_rate_within_cvs_flag[
i] <<
i;
907 vui_header_sps->flags.low_delay_hrd_flag |=
sps->vui.hrd_parameters.low_delay_hrd_flag[
i] <<
i;
910 for (
int i = 0;
i < STD_VIDEO_H265_SUBLAYERS_LIST_SIZE;
i++) {
911 dpbm_sps->max_latency_increase_plus1[
i] =
sps->sps_max_latency_increase_plus1[
i];
912 dpbm_sps->max_dec_pic_buffering_minus1[
i] =
sps->sps_max_dec_pic_buffering_minus1[
i];
913 dpbm_sps->max_num_reorder_pics[
i] =
sps->sps_max_num_reorder_pics[
i];
916 *ptl_sps = (StdVideoH265ProfileTierLevel) {
917 .flags = (StdVideoH265ProfileTierLevelFlags) {
918 .general_tier_flag =
sps->profile_tier_level.general_tier_flag,
919 .general_progressive_source_flag =
sps->profile_tier_level.general_progressive_source_flag,
920 .general_interlaced_source_flag =
sps->profile_tier_level.general_interlaced_source_flag,
921 .general_non_packed_constraint_flag =
sps->profile_tier_level.general_non_packed_constraint_flag,
922 .general_frame_only_constraint_flag =
sps->profile_tier_level.general_frame_only_constraint_flag,
928 for (
int i = 0;
i < STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS;
i++) {
931 str[
i] = (StdVideoH265ShortTermRefPicSet) {
932 .flags = (StdVideoH265ShortTermRefPicSetFlags) {
937 .use_delta_flag = 0x0,
939 .used_by_curr_pic_flag = 0x0,
940 .used_by_curr_pic_s0_flag = 0x0,
941 .used_by_curr_pic_s1_flag = 0x0,
959 ltr->used_by_curr_pic_lt_sps_flag = 0;
960 for (
int i = 0;
i < STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS;
i++) {
961 ltr->used_by_curr_pic_lt_sps_flag |=
sps->lt_ref_pic_poc_lsb_sps[
i] <<
i;
962 ltr->lt_ref_pic_poc_lsb_sps[
i] =
sps->lt_ref_pic_poc_lsb_sps[
i];
965 *vksps = (StdVideoH265SequenceParameterSet) {
966 .flags = (StdVideoH265SpsFlags) {
967 .sps_temporal_id_nesting_flag =
sps->sps_temporal_id_nesting_flag,
968 .separate_colour_plane_flag =
sps->separate_colour_plane_flag,
969 .conformance_window_flag =
sps->conformance_window_flag,
970 .sps_sub_layer_ordering_info_present_flag =
sps->sps_sub_layer_ordering_info_present_flag,
971 .scaling_list_enabled_flag =
sps->scaling_list_enabled_flag,
972 .sps_scaling_list_data_present_flag =
sps->sps_scaling_list_data_present_flag,
973 .amp_enabled_flag =
sps->amp_enabled_flag,
974 .sample_adaptive_offset_enabled_flag =
sps->sample_adaptive_offset_enabled_flag,
975 .pcm_enabled_flag =
sps->pcm_enabled_flag,
976 .pcm_loop_filter_disabled_flag =
sps->pcm_loop_filter_disabled_flag,
977 .long_term_ref_pics_present_flag =
sps->long_term_ref_pics_present_flag,
978 .sps_temporal_mvp_enabled_flag =
sps->sps_temporal_mvp_enabled_flag,
979 .strong_intra_smoothing_enabled_flag =
sps->strong_intra_smoothing_enabled_flag,
980 .vui_parameters_present_flag =
sps->vui_parameters_present_flag,
981 .sps_extension_present_flag =
sps->sps_extension_present_flag,
982 .sps_range_extension_flag =
sps->sps_range_extension_flag,
983 .transform_skip_rotation_enabled_flag =
sps->transform_skip_rotation_enabled_flag,
984 .transform_skip_context_enabled_flag =
sps->transform_skip_context_enabled_flag,
985 .implicit_rdpcm_enabled_flag =
sps->implicit_rdpcm_enabled_flag,
986 .explicit_rdpcm_enabled_flag =
sps->explicit_rdpcm_enabled_flag,
987 .extended_precision_processing_flag =
sps->extended_precision_processing_flag,
988 .intra_smoothing_disabled_flag =
sps->intra_smoothing_disabled_flag,
989 .high_precision_offsets_enabled_flag =
sps->high_precision_offsets_enabled_flag,
990 .persistent_rice_adaptation_enabled_flag =
sps->persistent_rice_adaptation_enabled_flag,
991 .cabac_bypass_alignment_enabled_flag =
sps->cabac_bypass_alignment_enabled_flag,
992 .sps_scc_extension_flag =
sps->sps_scc_extension_flag,
993 .sps_curr_pic_ref_enabled_flag =
sps->sps_curr_pic_ref_enabled_flag,
994 .palette_mode_enabled_flag =
sps->palette_mode_enabled_flag,
995 .sps_palette_predictor_initializers_present_flag =
sps->sps_palette_predictor_initializer_present_flag,
996 .intra_boundary_filtering_disabled_flag =
sps->intra_boundary_filtering_disable_flag,
998 .chroma_format_idc =
sps->chroma_format_idc,
999 .pic_width_in_luma_samples =
sps->pic_width_in_luma_samples,
1000 .pic_height_in_luma_samples =
sps->pic_height_in_luma_samples,
1001 .sps_video_parameter_set_id =
sps->sps_video_parameter_set_id,
1002 .sps_max_sub_layers_minus1 =
sps->sps_max_sub_layers_minus1,
1003 .sps_seq_parameter_set_id =
sps->sps_seq_parameter_set_id,
1004 .bit_depth_luma_minus8 =
sps->bit_depth_luma_minus8,
1005 .bit_depth_chroma_minus8 =
sps->bit_depth_chroma_minus8,
1006 .log2_max_pic_order_cnt_lsb_minus4 =
sps->log2_max_pic_order_cnt_lsb_minus4,
1007 .log2_min_luma_coding_block_size_minus3 =
sps->log2_min_luma_coding_block_size_minus3,
1008 .log2_diff_max_min_luma_coding_block_size =
sps->log2_diff_max_min_luma_coding_block_size,
1009 .log2_min_luma_transform_block_size_minus2 =
sps->log2_min_luma_transform_block_size_minus2,
1010 .log2_diff_max_min_luma_transform_block_size =
sps->log2_diff_max_min_luma_transform_block_size,
1011 .max_transform_hierarchy_depth_inter =
sps->max_transform_hierarchy_depth_inter,
1012 .max_transform_hierarchy_depth_intra =
sps->max_transform_hierarchy_depth_intra,
1013 .num_short_term_ref_pic_sets =
sps->num_short_term_ref_pic_sets,
1014 .num_long_term_ref_pics_sps =
sps->num_long_term_ref_pics_sps,
1015 .pcm_sample_bit_depth_luma_minus1 =
sps->pcm_sample_bit_depth_luma_minus1,
1016 .pcm_sample_bit_depth_chroma_minus1 =
sps->pcm_sample_bit_depth_chroma_minus1,
1017 .log2_min_pcm_luma_coding_block_size_minus3 =
sps->log2_min_pcm_luma_coding_block_size_minus3,
1018 .log2_diff_max_min_pcm_luma_coding_block_size =
sps->log2_diff_max_min_pcm_luma_coding_block_size,
1021 .palette_max_size =
sps->palette_max_size,
1022 .delta_palette_max_predictor_size =
sps->delta_palette_max_predictor_size,
1023 .motion_vector_resolution_control_idc =
sps->motion_vector_resolution_control_idc,
1024 .sps_num_palette_predictor_initializers_minus1 =
sps->sps_num_palette_predictor_initializer_minus1,
1025 .conf_win_left_offset =
sps->conf_win_left_offset,
1026 .conf_win_right_offset =
sps->conf_win_right_offset,
1027 .conf_win_top_offset =
sps->conf_win_top_offset,
1028 .conf_win_bottom_offset =
sps->conf_win_bottom_offset,
1029 .pProfileTierLevel = ptl_sps,
1030 .pDecPicBufMgr = dpbm_sps,
1031 .pScalingLists =
NULL,
1032 .pShortTermRefPicSet = str,
1033 .pLongTermRefPicsSps = ltr,
1034 .pSequenceParameterSetVui = vui_sps,
1035 .pPredictorPaletteEntries =
NULL,
1039 *vkpps = (StdVideoH265PictureParameterSet) {
1040 .flags = (StdVideoH265PpsFlags) {
1041 .dependent_slice_segments_enabled_flag =
pps->dependent_slice_segments_enabled_flag,
1042 .output_flag_present_flag =
pps->output_flag_present_flag,
1043 .sign_data_hiding_enabled_flag =
pps->sign_data_hiding_enabled_flag,
1044 .cabac_init_present_flag =
pps->cabac_init_present_flag,
1045 .constrained_intra_pred_flag =
pps->constrained_intra_pred_flag,
1046 .transform_skip_enabled_flag =
pps->transform_skip_enabled_flag,
1047 .cu_qp_delta_enabled_flag =
pps->cu_qp_delta_enabled_flag,
1048 .pps_slice_chroma_qp_offsets_present_flag =
pps->pps_slice_chroma_qp_offsets_present_flag,
1049 .weighted_pred_flag =
pps->weighted_pred_flag,
1050 .weighted_bipred_flag =
pps->weighted_bipred_flag,
1051 .transquant_bypass_enabled_flag =
pps->transquant_bypass_enabled_flag,
1052 .tiles_enabled_flag =
pps->tiles_enabled_flag,
1053 .entropy_coding_sync_enabled_flag =
pps->entropy_coding_sync_enabled_flag,
1054 .uniform_spacing_flag =
pps->uniform_spacing_flag,
1055 .loop_filter_across_tiles_enabled_flag =
pps->loop_filter_across_tiles_enabled_flag,
1056 .pps_loop_filter_across_slices_enabled_flag =
pps->pps_loop_filter_across_slices_enabled_flag,
1057 .deblocking_filter_control_present_flag =
pps->deblocking_filter_control_present_flag,
1058 .deblocking_filter_override_enabled_flag =
pps->deblocking_filter_override_enabled_flag,
1059 .pps_deblocking_filter_disabled_flag =
pps->pps_deblocking_filter_disabled_flag,
1060 .pps_scaling_list_data_present_flag =
pps->pps_scaling_list_data_present_flag,
1061 .lists_modification_present_flag =
pps->lists_modification_present_flag,
1062 .slice_segment_header_extension_present_flag =
pps->slice_segment_header_extension_present_flag,
1063 .pps_extension_present_flag =
pps->pps_extension_present_flag,
1064 .cross_component_prediction_enabled_flag =
pps->cross_component_prediction_enabled_flag,
1065 .chroma_qp_offset_list_enabled_flag =
pps->chroma_qp_offset_list_enabled_flag,
1066 .pps_curr_pic_ref_enabled_flag =
pps->pps_curr_pic_ref_enabled_flag,
1067 .residual_adaptive_colour_transform_enabled_flag =
pps->residual_adaptive_colour_transform_enabled_flag,
1068 .pps_slice_act_qp_offsets_present_flag =
pps->pps_slice_act_qp_offsets_present_flag,
1069 .pps_palette_predictor_initializers_present_flag =
pps->pps_palette_predictor_initializer_present_flag,
1070 .monochrome_palette_flag =
pps->monochrome_palette_flag,
1071 .pps_range_extension_flag =
pps->pps_range_extension_flag,
1073 .pps_pic_parameter_set_id =
pps->pps_pic_parameter_set_id,
1074 .pps_seq_parameter_set_id =
pps->pps_seq_parameter_set_id,
1075 .sps_video_parameter_set_id =
sps->sps_video_parameter_set_id,
1076 .num_extra_slice_header_bits =
pps->num_extra_slice_header_bits,
1077 .num_ref_idx_l0_default_active_minus1 =
pps->num_ref_idx_l0_default_active_minus1,
1078 .num_ref_idx_l1_default_active_minus1 =
pps->num_ref_idx_l1_default_active_minus1,
1079 .init_qp_minus26 =
pps->init_qp_minus26,
1080 .diff_cu_qp_delta_depth =
pps->diff_cu_qp_delta_depth,
1081 .pps_cb_qp_offset =
pps->pps_cb_qp_offset,
1082 .pps_cr_qp_offset =
pps->pps_cr_qp_offset,
1083 .pps_beta_offset_div2 =
pps->pps_beta_offset_div2,
1084 .pps_tc_offset_div2 =
pps->pps_tc_offset_div2,
1085 .log2_parallel_merge_level_minus2 =
pps->log2_parallel_merge_level_minus2,
1086 .log2_max_transform_skip_block_size_minus2 =
pps->log2_max_transform_skip_block_size_minus2,
1087 .diff_cu_chroma_qp_offset_depth =
pps->diff_cu_chroma_qp_offset_depth,
1088 .chroma_qp_offset_list_len_minus1 =
pps->chroma_qp_offset_list_len_minus1,
1089 .log2_sao_offset_scale_luma =
pps->log2_sao_offset_scale_luma,
1090 .log2_sao_offset_scale_chroma =
pps->log2_sao_offset_scale_chroma,
1091 .pps_act_y_qp_offset_plus5 =
pps->pps_act_y_qp_offset_plus5,
1092 .pps_act_cb_qp_offset_plus5 =
pps->pps_act_cb_qp_offset_plus5,
1093 .pps_act_cr_qp_offset_plus3 =
pps->pps_act_cr_qp_offset_plus3,
1094 .pps_num_palette_predictor_initializers =
pps->pps_num_palette_predictor_initializer,
1095 .luma_bit_depth_entry_minus8 =
pps->luma_bit_depth_entry_minus8,
1096 .chroma_bit_depth_entry_minus8 =
pps->chroma_bit_depth_entry_minus8,
1097 .num_tile_columns_minus1 =
pps->num_tile_columns_minus1,
1098 .num_tile_rows_minus1 =
pps->num_tile_rows_minus1,
1099 .pScalingLists =
NULL,
1100 .pPredictorPaletteEntries =
NULL,
1103 for (
int i = 0;
i <
pps->num_tile_columns_minus1;
i++)
1104 vkpps->column_width_minus1[
i] =
pps->column_width_minus1[
i];
1106 for (
int i = 0;
i <
pps->num_tile_rows_minus1;
i++)
1107 vkpps->row_height_minus1[
i] =
pps->row_height_minus1[
i];
1109 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1110 vkpps->cb_qp_offset_list[
i] =
pps->cb_qp_offset_list[
i];
1111 vkpps->cr_qp_offset_list[
i] =
pps->cr_qp_offset_list[
i];
1115 for (
int i = 0;
i < STD_VIDEO_H265_SUBLAYERS_LIST_SIZE;
i++) {
1116 dpbm_vps->max_latency_increase_plus1[
i] =
vps->vps_max_latency_increase_plus1[
i];
1117 dpbm_vps->max_dec_pic_buffering_minus1[
i] =
vps->vps_max_dec_pic_buffering_minus1[
i];
1118 dpbm_vps->max_num_reorder_pics[
i] =
vps->vps_max_num_reorder_pics[
i];
1121 *ptl_vps = (StdVideoH265ProfileTierLevel) {
1122 .flags = (StdVideoH265ProfileTierLevelFlags) {
1123 .general_tier_flag =
vps->profile_tier_level.general_tier_flag,
1124 .general_progressive_source_flag =
vps->profile_tier_level.general_progressive_source_flag,
1125 .general_interlaced_source_flag =
vps->profile_tier_level.general_interlaced_source_flag,
1126 .general_non_packed_constraint_flag =
vps->profile_tier_level.general_non_packed_constraint_flag,
1127 .general_frame_only_constraint_flag =
vps->profile_tier_level.general_frame_only_constraint_flag,
1133 *vkvps = (StdVideoH265VideoParameterSet) {
1134 .flags = (StdVideoH265VpsFlags) {
1135 .vps_temporal_id_nesting_flag =
vps->vps_temporal_id_nesting_flag,
1136 .vps_sub_layer_ordering_info_present_flag =
vps->vps_sub_layer_ordering_info_present_flag,
1137 .vps_timing_info_present_flag =
vps->vps_timing_info_present_flag,
1138 .vps_poc_proportional_to_timing_flag =
vps->vps_poc_proportional_to_timing_flag,
1140 .vps_video_parameter_set_id =
vps->vps_video_parameter_set_id,
1141 .vps_max_sub_layers_minus1 =
vps->vps_max_sub_layers_minus1,
1144 .vps_num_units_in_tick =
vps->vps_num_units_in_tick,
1145 .vps_time_scale =
vps->vps_time_scale,
1146 .vps_num_ticks_poc_diff_one_minus1 =
vps->vps_num_ticks_poc_diff_one_minus1,
1148 .pDecPicBufMgr = dpbm_vps,
1149 .pHrdParameters = vui_header_vps,
1150 .pProfileTierLevel = ptl_vps,
1166 VkVideoEncodeH265SessionParametersAddInfoKHR h265_params_info;
1167 VkVideoEncodeH265SessionParametersCreateInfoKHR h265_params;
1178 if (
ctx->session_params)
1179 vk->DestroyVideoSessionParametersKHR(
s->hwctx->act_dev,
1180 ctx->session_params,
1183 h265_params_info = (VkVideoEncodeH265SessionParametersAddInfoKHR) {
1184 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR,
1185 .pStdSPSs = &vk_units.
sps,
1187 .pStdPPSs = &vk_units.
pps,
1189 .pStdVPSs = &vk_units.
vps,
1192 h265_params = (VkVideoEncodeH265SessionParametersCreateInfoKHR) {
1193 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR,
1194 .maxStdSPSCount = 1,
1195 .maxStdPPSCount = 1,
1196 .maxStdVPSCount = 1,
1197 .pParametersAddInfo = &h265_params_info,
1205 int sps_override,
int pps_override)
1264 VkVideoEncodeH265SessionParametersGetInfoKHR h265_params_info;
1265 VkVideoEncodeSessionParametersGetInfoKHR params_info;
1266 VkVideoEncodeH265SessionParametersFeedbackInfoKHR h265_params_feedback;
1267 VkVideoEncodeSessionParametersFeedbackInfoKHR params_feedback;
1270 size_t data_size = 0;
1285 h265_params_info = (VkVideoEncodeH265SessionParametersGetInfoKHR) {
1286 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR,
1294 params_info = (VkVideoEncodeSessionParametersGetInfoKHR) {
1295 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR,
1296 .pNext = &h265_params_info,
1297 .videoSessionParameters =
ctx->session_params,
1300 h265_params_feedback = (VkVideoEncodeH265SessionParametersFeedbackInfoKHR) {
1301 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR,
1303 params_feedback = (VkVideoEncodeSessionParametersFeedbackInfoKHR) {
1304 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR,
1305 .pNext = &h265_params_feedback,
1308 ret = vk->GetEncodedVideoSessionParametersKHR(
s->hwctx->act_dev, ¶ms_info,
1311 if (
ret == VK_INCOMPLETE ||
1312 (
ret == VK_SUCCESS) && (data_size > 0)) {
1321 ret = vk->GetEncodedVideoSessionParametersKHR(
s->hwctx->act_dev, ¶ms_info,
1324 if (
ret != VK_SUCCESS) {
1329 av_log(avctx,
AV_LOG_VERBOSE,
"Feedback units written, overrides: %i (SPS: %i PPS: %i VPS: %i)\n",
1330 params_feedback.hasOverrides,
1331 h265_params_feedback.hasStdSPSOverrides,
1332 h265_params_feedback.hasStdPPSOverrides,
1333 h265_params_feedback.hasStdVPSOverrides);
1335 params_feedback.hasOverrides = 1;
1336 h265_params_feedback.hasStdSPSOverrides = 1;
1337 h265_params_feedback.hasStdPPSOverrides = 1;
1340 if (!params_feedback.hasOverrides)
1345 h265_params_feedback.hasStdSPSOverrides,
1346 h265_params_feedback.hasStdPPSOverrides);
1368 "type = %d.\n",
header->nal_unit_type);
1374 uint8_t *
data,
size_t *data_len,
1385 if (*data_len < au->data_size) {
1399 uint8_t *
data,
size_t *data_len)
1433 uint8_t *
data,
size_t *data_len)
1483 uint8_t *
data,
size_t *data_len)
1493 .nuh_temporal_id_plus1 = 1,
1513 .filler_header_size = 7,
1524 int err, ref_l0, ref_l1;
1533 enc->
caps = (VkVideoEncodeH265CapabilitiesKHR) {
1534 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR,
1537 enc->
quality_props = (VkVideoEncodeH265QualityLevelPropertiesKHR) {
1538 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR,
1550 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR));
1552 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR));
1554 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR));
1556 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR));
1558 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR));
1560 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR));
1562 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR ?
1564 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR ?
1567 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR));
1569 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR));
1571 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR ?
1573 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR ?
1576 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR));
1578 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR));
1580 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR));
1582 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR));
1584 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR ?
1586 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR ?
1589 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR));
1591 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR));
1595 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR));
1597 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR));
1599 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR));
1601 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR));
1603 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR));
1605 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR));
1607 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR));
1609 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR));
1611 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR));
1615 enc->
caps.maxLevelIdc);
1617 enc->
caps.maxSliceSegmentCount);
1619 enc->
caps.maxTiles.width, enc->
caps.maxTiles.height);
1621 enc->
caps.ctbSizes);
1623 enc->
caps.transformBlockSizes);
1625 enc->
caps.maxPPictureL0ReferenceCount,
1626 enc->
caps.maxBPictureL0ReferenceCount);
1628 enc->
caps.maxL1ReferenceCount);
1630 enc->
caps.maxSubLayerCount);
1632 enc->
caps.expectDyadicTemporalSubLayerPattern);
1636 enc->
caps.prefersGopRemainingFrames);
1638 enc->
caps.requiresGopRemainingFrames);
1645 if (!enc->
caps.maxPPictureL0ReferenceCount &&
1646 !enc->
caps.maxBPictureL0ReferenceCount &&
1647 !enc->
caps.maxL1ReferenceCount) {
1650 ref_l0 = ref_l1 = 0;
1651 }
else if (!enc->
caps.maxPPictureL0ReferenceCount) {
1654 ref_l0 = enc->
caps.maxBPictureL0ReferenceCount;
1655 ref_l1 = enc->
caps.maxL1ReferenceCount;
1656 }
else if (!enc->
caps.maxBPictureL0ReferenceCount &&
1657 !enc->
caps.maxL1ReferenceCount) {
1660 ref_l0 = enc->
caps.maxPPictureL0ReferenceCount;
1664 ref_l0 =
FFMIN(enc->
caps.maxPPictureL0ReferenceCount,
1665 enc->
caps.maxBPictureL0ReferenceCount);
1666 ref_l1 = enc->
caps.maxL1ReferenceCount;
1702 #define OFFSET(x) offsetof(VulkanEncodeH265Context, x)
1703 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
1708 {
"profile",
"Set profile (profile_idc and constraint_set*_flag)",
1712 #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1713 { .i64 = value }, 0, 0, FLAGS, .unit = "profile"
1719 {
"tier",
"Set tier (general_tier_flag)",
OFFSET(common.opts.tier),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1,
FLAGS, .unit =
"tier" },
1723 {
"level",
"Set level (general_level_idc)",
1727 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1728 { .i64 = value }, 0, 0, FLAGS, .unit = "level"
1731 {
LEVEL(
"2.1", 63) },
1733 {
LEVEL(
"3.1", 93) },
1734 {
LEVEL(
"4", 120) },
1735 {
LEVEL(
"4.1", 123) },
1736 {
LEVEL(
"5", 150) },
1737 {
LEVEL(
"5.1", 153) },
1738 {
LEVEL(
"5.2", 156) },
1739 {
LEVEL(
"6", 180) },
1740 {
LEVEL(
"6.1", 183) },
1741 {
LEVEL(
"6.2", 186) },
1755 {
"i_qfactor",
"1" },
1756 {
"i_qoffset",
"0" },
1757 {
"b_qfactor",
"6/5" },
1758 {
"b_qoffset",
"0" },
1772 .
p.
name =
"hevc_vulkan",
1793 .p.wrapper_name =
"vulkan",