43 .encode_op = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR,
45 .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME,
46 .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION,
69 VkVideoEncodeH265NaluSliceSegmentInfoKHR
vkslice;
75 StdVideoEncodeH265LongTermRefPics
l_rps;
76 StdVideoH265ShortTermRefPicSet
s_rps;
96 VkVideoEncodeH265CapabilitiesKHR
caps;
111 VkVideoEncodeRateControlInfoKHR *rc_info,
112 VkVideoEncodeRateControlLayerInfoKHR *rc_layer)
118 hp->
vkrc_info = (VkVideoEncodeH265RateControlInfoKHR) {
119 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR,
120 .flags = VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR |
121 VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR,
122 .idrPeriod =
ctx->base.gop_size,
123 .gopFrameCount =
ctx->base.gop_size,
124 .consecutiveBFrameCount =
FFMAX(
ctx->base.b_per_p - 1, 0),
129 if (rc_info->rateControlMode > VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR) {
134 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR,
136 .useMinQp = avctx->
qmin > 0,
137 .minQp.qpI = avctx->
qmin > 0 ? avctx->
qmin : 0,
138 .minQp.qpP = avctx->
qmin > 0 ? avctx->
qmin : 0,
139 .minQp.qpB = avctx->
qmin > 0 ? avctx->
qmin : 0,
141 .useMaxQp = avctx->
qmax > 0,
142 .maxQp.qpI = avctx->
qmax > 0 ? avctx->
qmax : 0,
143 .maxQp.qpP = avctx->
qmax > 0 ? avctx->
qmax : 0,
144 .maxQp.qpB = avctx->
qmax > 0 ? avctx->
qmax : 0,
146 .useMaxFrameSize = 0,
169 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_IDR;
176 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_I;
180 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_P;
184 for (irap_ref = pic; irap_ref; irap_ref = irap_ref->
refs[1][0]) {
189 hp->
pic_type = STD_VIDEO_H265_PICTURE_TYPE_B;
202 .nuh_temporal_id_plus1 = 1,
224 const int mapping[3] = {1, 2, 0};
225 const int chroma_den = 50000;
226 const int luma_den = 10000;
228 for (
int i = 0;
i < 3;
i++) {
229 const int j = mapping[
i];
268 clli->max_pic_average_light_level =
FFMIN(clm->
MaxFALL, 65535);
276 size_t sei_a53cc_len;
299 hp->
slice_wt = (StdVideoEncodeH265WeightTable) {
300 .flags = (StdVideoEncodeH265WeightTableFlags) {
301 .luma_weight_l0_flag = 0,
302 .chroma_weight_l0_flag = 0,
303 .luma_weight_l1_flag = 0,
304 .chroma_weight_l1_flag = 0,
306 .luma_log2_weight_denom = 0,
307 .delta_chroma_log2_weight_denom = 0,
308 .delta_luma_weight_l0 = { 0 },
309 .luma_offset_l0 = { 0 },
310 .delta_chroma_weight_l0 = { { 0 } },
311 .delta_chroma_offset_l0 = { { 0 } },
312 .delta_luma_weight_l1 = { 0 },
313 .luma_offset_l1 = { 0 },
314 .delta_chroma_weight_l1 = { { 0 } },
315 .delta_chroma_offset_l1 = { { 0 } },
318 hp->
slice_hdr = (StdVideoEncodeH265SliceSegmentHeader) {
319 .flags = (StdVideoEncodeH265SliceSegmentHeaderFlags) {
320 .first_slice_segment_in_pic_flag = 1,
321 .dependent_slice_segment_flag = 0,
324 .num_ref_idx_active_override_flag = 0,
325 .mvd_l1_zero_flag = 0,
326 .cabac_init_flag = 0,
327 .cu_chroma_qp_offset_enabled_flag = 0,
328 .deblocking_filter_override_flag = 0,
329 .slice_deblocking_filter_disabled_flag = 0,
330 .collocated_from_l0_flag = 1,
331 .slice_loop_filter_across_slices_enabled_flag = 0,
335 .slice_segment_address = 0,
336 .collocated_ref_idx = 0,
337 .MaxNumMergeCand = 5,
338 .slice_cb_qp_offset = 0,
339 .slice_cr_qp_offset = 0,
340 .slice_beta_offset_div2 = 0,
341 .slice_tc_offset_div2 = 0,
342 .slice_act_y_qp_offset = 0,
343 .slice_act_cb_qp_offset = 0,
344 .slice_act_cr_qp_offset = 0,
347 .pWeightTable =
NULL,
350 hp->
vkslice = (VkVideoEncodeH265NaluSliceSegmentInfoKHR) {
351 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR,
356 .pStdSliceSegmentHeader = &hp->
slice_hdr,
359 if (enc->
common.
opts.
rc_mode != VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR)
371 VkVideoEncodeInfoKHR *encode_info)
378 .flags = (StdVideoEncodeH265ReferenceListsInfoFlags) {
379 .ref_pic_list_modification_flag_l0 = 0,
380 .ref_pic_list_modification_flag_l1 = 0,
384 .num_ref_idx_l0_active_minus1 = pic->
nb_refs[0] - 1,
385 .num_ref_idx_l1_active_minus1 = pic->
nb_refs[1] - 1,
387 .list_entry_l0 = { 0 },
388 .list_entry_l1 = { 0 },
391 for (
i = 0;
i < STD_VIDEO_H265_MAX_NUM_LIST_REF;
i++)
396 VkVideoReferenceSlotInfoKHR *slot_info;
397 slot_info = (VkVideoReferenceSlotInfoKHR *)&encode_info->pReferenceSlots[
i];
403 VkVideoReferenceSlotInfoKHR *slot_info;
404 slot_info = (VkVideoReferenceSlotInfoKHR *)&encode_info->pReferenceSlots[pic->
nb_refs[0] +
i];
411 StdVideoH265ShortTermRefPicSet *rps;
417 hp->
h265pic_info.flags.short_term_ref_pic_set_sps_flag = 0;
420 memset(rps, 0,
sizeof(*rps));
424 for (j = 0; j < pic->
nb_refs[
i]; j++) {
427 rps_used[rps_pics] = 1;
433 if (pic->
dpb[
i] == pic)
436 for (j = 0; j < pic->
nb_refs[0]; j++) {
440 if (j < pic->nb_refs[0])
443 for (j = 0; j < pic->
nb_refs[1]; j++) {
447 if (j < pic->nb_refs[1])
452 rps_used[rps_pics] = 0;
456 for (
i = 1;
i < rps_pics;
i++) {
457 for (j =
i; j > 0; j--) {
458 if (rps_poc[j] > rps_poc[j - 1])
461 FFSWAP(
int, rps_poc[j], rps_poc[j - 1]);
462 FFSWAP(
int, rps_used[j], rps_used[j - 1]);
467 for (
i = 0;
i < rps_pics;
i++)
472 for (
i = 0;
i < rps_pics;
i++) {
478 rps->num_negative_pics =
i;
479 rps->used_by_curr_pic_s0_flag = 0x0;
481 for (j =
i - 1; j >= 0; j--) {
482 rps->delta_poc_s0_minus1[
i - 1 - j] = poc - rps_poc[j] - 1;
483 rps->used_by_curr_pic_s0_flag |= rps_used[j] << (
i - 1 - j);
487 rps->num_positive_pics = rps_pics -
i;
488 rps->used_by_curr_pic_s1_flag = 0x0;
490 for (j =
i; j < rps_pics; j++) {
491 rps->delta_poc_s1_minus1[j -
i] = rps_poc[j] - poc - 1;
492 rps->used_by_curr_pic_s1_flag |= rps_used[j] << (j -
i);
496 hp->
l_rps.num_long_term_sps = 0;
497 hp->
l_rps.num_long_term_pics = 0;
500 hp->
slice_hdr.flags.collocated_from_l0_flag = 1;
501 hp->
h265pic_info.flags.slice_temporal_mvp_enabled_flag =
503 if (hp->
h265pic_info.flags.slice_temporal_mvp_enabled_flag) {
504 if (hp->
slice_hdr.slice_type == STD_VIDEO_H265_SLICE_TYPE_B)
505 hp->
slice_hdr.flags.collocated_from_l0_flag = 1;
509 hp->
slice_hdr.flags.num_ref_idx_active_override_flag = 0;
519 VkVideoEncodeInfoKHR *encode_info)
525 VkVideoReferenceSlotInfoKHR *ref_slot;
532 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR,
534 .pNaluSliceSegmentEntries =
NULL,
535 .naluSliceSegmentEntryCount = 0,
540 .flags = (StdVideoEncodeH265PictureInfoFlags) {
543 .used_for_long_term_reference = 0,
544 .discardable_flag = 0,
545 .cross_layer_bla_flag = 0,
546 .pic_output_flag = 1,
547 .no_output_of_prior_pics_flag = 0,
548 .short_term_ref_pic_set_sps_flag = 0,
553 .sps_video_parameter_set_id = 0,
554 .pps_seq_parameter_set_id = 0,
555 .pps_pic_parameter_set_id = 0,
556 .short_term_ref_pic_set_idx = 0,
561 .pShortTermRefPicSet =
NULL,
562 .pLongTermRefPics =
NULL,
567 .flags = (StdVideoEncodeH265ReferenceInfoFlags) {
568 .used_for_long_term_reference = 0,
569 .unused_for_reference = 0,
577 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR,
583 ref_slot = (VkVideoReferenceSlotInfoKHR *)encode_info->pSetupReferenceSlot;
594 VkVideoProfileInfoKHR *
profile,
void *pnext)
601 VkVideoEncodeH265CapabilitiesKHR h265_caps = {
602 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR,
604 VkVideoEncodeCapabilitiesKHR enc_caps = {
605 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR,
608 VkVideoCapabilitiesKHR caps = {
609 .sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
615 static const int known_profiles[] = {
631 enc->
profile = (VkVideoEncodeH265ProfileInfoKHR) {
632 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR,
647 for (
int i = 0;
i < nb_profiles;
i++) {
649 ret = vk->GetPhysicalDeviceVideoCapabilitiesKHR(
s->hwctx->phys_dev,
652 if (
ret == VK_SUCCESS) {
655 last_supported = known_profiles[
i];
667 avctx->
profile = last_supported;
686 "must have initial buffer size (%d) <= "
687 "buffer size (%"PRId64
").\n",
696 if (enc->
common.
opts.
rc_mode == VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR) {
715 "%d / %d / %d for IDR- / P- / B-frames.\n",
737 unsigned min_tb_size;
738 unsigned max_tb_size;
739 unsigned max_transform_hierarchy;
763 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR);
765 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR);
770 if (enc->
caps.ctbSizes & VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR)
772 else if (enc->
caps.ctbSizes & VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR)
777 if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR)
779 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR)
781 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR)
783 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR)
786 if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR)
788 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR)
790 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR)
792 else if (enc->
caps.transformBlockSizes & VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR)
800 max_transform_hierarchy =
av_log2(max_ctb_size) -
av_log2(min_tb_size);
819 StdVideoH265SequenceParameterSet
sps;
820 StdVideoH265ShortTermRefPicSet
str[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE];
821 StdVideoH265LongTermRefPicsSps
ltr;
831 StdVideoH265PictureParameterSet
pps;
834 StdVideoH265VideoParameterSet
vps;
846 StdVideoH265SequenceParameterSet *vksps = &vk_units->
sps;
847 StdVideoH265ShortTermRefPicSet *str = vk_units->
str;
848 StdVideoH265LongTermRefPicsSps *ltr = &vk_units->
ltr;
849 StdVideoH265ProfileTierLevel *ptl_sps = &vk_units->
ptl_sps;
850 StdVideoH265DecPicBufMgr *dpbm_sps = &vk_units->
dpbm_sps;
852 StdVideoH265HrdParameters *vui_header_sps = &vk_units->
vui_header_sps;
853 StdVideoH265SequenceParameterSetVui *vui_sps = &vk_units->
vui_sps;
855 StdVideoH265SubLayerHrdParameters *slhdrnal = vk_units->
slhdrnal;
856 StdVideoH265SubLayerHrdParameters *slhdrvcl = vk_units->
slhdrvcl;
859 StdVideoH265PictureParameterSet *vkpps = &vk_units->
pps;
862 StdVideoH265VideoParameterSet *vkvps = &vk_units->
vps;
863 StdVideoH265ProfileTierLevel *ptl_vps = &vk_units->
ptl_vps;
864 StdVideoH265DecPicBufMgr *dpbm_vps = &vk_units->
dpbm_vps;
865 StdVideoH265HrdParameters *vui_header_vps = &vk_units->
vui_header_vps;
869 memcpy(&slhdrnal[
i], &
sps->vui.hrd_parameters.nal_sub_layer_hrd_parameters[
i],
sizeof(*slhdrnal));
870 memcpy(&slhdrvcl[
i], &
sps->vui.hrd_parameters.vcl_sub_layer_hrd_parameters[
i],
sizeof(*slhdrvcl));
871 slhdrnal[
i].cbr_flag = 0x0;
872 slhdrvcl[
i].cbr_flag = 0x0;
874 slhdrnal[
i].cbr_flag |=
sps->vui.hrd_parameters.nal_sub_layer_hrd_parameters[
i].cbr_flag[j] <<
i;
875 slhdrvcl[
i].cbr_flag |=
sps->vui.hrd_parameters.vcl_sub_layer_hrd_parameters[
i].cbr_flag[j] <<
i;
879 *vui_header_sps = (StdVideoH265HrdParameters) {
880 .flags = (StdVideoH265HrdFlags) {
881 .nal_hrd_parameters_present_flag =
sps->vui.hrd_parameters.nal_hrd_parameters_present_flag,
882 .vcl_hrd_parameters_present_flag =
sps->vui.hrd_parameters.vcl_hrd_parameters_present_flag,
883 .sub_pic_hrd_params_present_flag =
sps->vui.hrd_parameters.sub_pic_hrd_params_present_flag,
884 .sub_pic_cpb_params_in_pic_timing_sei_flag =
sps->vui.hrd_parameters.sub_pic_cpb_params_in_pic_timing_sei_flag,
885 .fixed_pic_rate_general_flag = 0x0,
886 .fixed_pic_rate_within_cvs_flag = 0x0,
887 .low_delay_hrd_flag = 0x0,
889 .tick_divisor_minus2 =
sps->vui.hrd_parameters.tick_divisor_minus2,
890 .du_cpb_removal_delay_increment_length_minus1 =
sps->vui.hrd_parameters.du_cpb_removal_delay_increment_length_minus1,
891 .dpb_output_delay_du_length_minus1 =
sps->vui.hrd_parameters.dpb_output_delay_du_length_minus1,
892 .bit_rate_scale =
sps->vui.hrd_parameters.bit_rate_scale,
893 .cpb_size_scale =
sps->vui.hrd_parameters.cpb_size_scale,
894 .cpb_size_du_scale =
sps->vui.hrd_parameters.cpb_size_du_scale,
895 .initial_cpb_removal_delay_length_minus1 =
sps->vui.hrd_parameters.initial_cpb_removal_delay_length_minus1,
896 .au_cpb_removal_delay_length_minus1 =
sps->vui.hrd_parameters.au_cpb_removal_delay_length_minus1,
897 .dpb_output_delay_length_minus1 =
sps->vui.hrd_parameters.dpb_output_delay_length_minus1,
899 .pSubLayerHrdParametersNal = slhdrnal,
900 .pSubLayerHrdParametersVcl = slhdrvcl,
904 vui_header_sps->flags.fixed_pic_rate_general_flag |=
sps->vui.hrd_parameters.fixed_pic_rate_general_flag[
i] <<
i;
905 vui_header_sps->flags.fixed_pic_rate_within_cvs_flag |=
sps->vui.hrd_parameters.fixed_pic_rate_within_cvs_flag[
i] <<
i;
906 vui_header_sps->flags.low_delay_hrd_flag |=
sps->vui.hrd_parameters.low_delay_hrd_flag[
i] <<
i;
909 for (
int i = 0;
i < STD_VIDEO_H265_SUBLAYERS_LIST_SIZE;
i++) {
910 dpbm_sps->max_latency_increase_plus1[
i] =
sps->sps_max_latency_increase_plus1[
i];
911 dpbm_sps->max_dec_pic_buffering_minus1[
i] =
sps->sps_max_dec_pic_buffering_minus1[
i];
912 dpbm_sps->max_num_reorder_pics[
i] =
sps->sps_max_num_reorder_pics[
i];
915 *ptl_sps = (StdVideoH265ProfileTierLevel) {
916 .flags = (StdVideoH265ProfileTierLevelFlags) {
917 .general_tier_flag =
sps->profile_tier_level.general_tier_flag,
918 .general_progressive_source_flag =
sps->profile_tier_level.general_progressive_source_flag,
919 .general_interlaced_source_flag =
sps->profile_tier_level.general_interlaced_source_flag,
920 .general_non_packed_constraint_flag =
sps->profile_tier_level.general_non_packed_constraint_flag,
921 .general_frame_only_constraint_flag =
sps->profile_tier_level.general_frame_only_constraint_flag,
927 for (
int i = 0;
i < STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS;
i++) {
930 str[
i] = (StdVideoH265ShortTermRefPicSet) {
931 .flags = (StdVideoH265ShortTermRefPicSetFlags) {
936 .use_delta_flag = 0x0,
938 .used_by_curr_pic_flag = 0x0,
939 .used_by_curr_pic_s0_flag = 0x0,
940 .used_by_curr_pic_s1_flag = 0x0,
958 ltr->used_by_curr_pic_lt_sps_flag = 0;
959 for (
int i = 0;
i < STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS;
i++) {
960 ltr->used_by_curr_pic_lt_sps_flag |=
sps->lt_ref_pic_poc_lsb_sps[
i] <<
i;
961 ltr->lt_ref_pic_poc_lsb_sps[
i] =
sps->lt_ref_pic_poc_lsb_sps[
i];
964 *vksps = (StdVideoH265SequenceParameterSet) {
965 .flags = (StdVideoH265SpsFlags) {
966 .sps_temporal_id_nesting_flag =
sps->sps_temporal_id_nesting_flag,
967 .separate_colour_plane_flag =
sps->separate_colour_plane_flag,
968 .conformance_window_flag =
sps->conformance_window_flag,
969 .sps_sub_layer_ordering_info_present_flag =
sps->sps_sub_layer_ordering_info_present_flag,
970 .scaling_list_enabled_flag =
sps->scaling_list_enabled_flag,
971 .sps_scaling_list_data_present_flag =
sps->sps_scaling_list_data_present_flag,
972 .amp_enabled_flag =
sps->amp_enabled_flag,
973 .sample_adaptive_offset_enabled_flag =
sps->sample_adaptive_offset_enabled_flag,
974 .pcm_enabled_flag =
sps->pcm_enabled_flag,
975 .pcm_loop_filter_disabled_flag =
sps->pcm_loop_filter_disabled_flag,
976 .long_term_ref_pics_present_flag =
sps->long_term_ref_pics_present_flag,
977 .sps_temporal_mvp_enabled_flag =
sps->sps_temporal_mvp_enabled_flag,
978 .strong_intra_smoothing_enabled_flag =
sps->strong_intra_smoothing_enabled_flag,
979 .vui_parameters_present_flag =
sps->vui_parameters_present_flag,
980 .sps_extension_present_flag =
sps->sps_extension_present_flag,
981 .sps_range_extension_flag =
sps->sps_range_extension_flag,
982 .transform_skip_rotation_enabled_flag =
sps->transform_skip_rotation_enabled_flag,
983 .transform_skip_context_enabled_flag =
sps->transform_skip_context_enabled_flag,
984 .implicit_rdpcm_enabled_flag =
sps->implicit_rdpcm_enabled_flag,
985 .explicit_rdpcm_enabled_flag =
sps->explicit_rdpcm_enabled_flag,
986 .extended_precision_processing_flag =
sps->extended_precision_processing_flag,
987 .intra_smoothing_disabled_flag =
sps->intra_smoothing_disabled_flag,
988 .high_precision_offsets_enabled_flag =
sps->high_precision_offsets_enabled_flag,
989 .persistent_rice_adaptation_enabled_flag =
sps->persistent_rice_adaptation_enabled_flag,
990 .cabac_bypass_alignment_enabled_flag =
sps->cabac_bypass_alignment_enabled_flag,
991 .sps_scc_extension_flag =
sps->sps_scc_extension_flag,
992 .sps_curr_pic_ref_enabled_flag =
sps->sps_curr_pic_ref_enabled_flag,
993 .palette_mode_enabled_flag =
sps->palette_mode_enabled_flag,
994 .sps_palette_predictor_initializers_present_flag =
sps->sps_palette_predictor_initializer_present_flag,
995 .intra_boundary_filtering_disabled_flag =
sps->intra_boundary_filtering_disable_flag,
997 .chroma_format_idc =
sps->chroma_format_idc,
998 .pic_width_in_luma_samples =
sps->pic_width_in_luma_samples,
999 .pic_height_in_luma_samples =
sps->pic_height_in_luma_samples,
1000 .sps_video_parameter_set_id =
sps->sps_video_parameter_set_id,
1001 .sps_max_sub_layers_minus1 =
sps->sps_max_sub_layers_minus1,
1002 .sps_seq_parameter_set_id =
sps->sps_seq_parameter_set_id,
1003 .bit_depth_luma_minus8 =
sps->bit_depth_luma_minus8,
1004 .bit_depth_chroma_minus8 =
sps->bit_depth_chroma_minus8,
1005 .log2_max_pic_order_cnt_lsb_minus4 =
sps->log2_max_pic_order_cnt_lsb_minus4,
1006 .log2_min_luma_coding_block_size_minus3 =
sps->log2_min_luma_coding_block_size_minus3,
1007 .log2_diff_max_min_luma_coding_block_size =
sps->log2_diff_max_min_luma_coding_block_size,
1008 .log2_min_luma_transform_block_size_minus2 =
sps->log2_min_luma_transform_block_size_minus2,
1009 .log2_diff_max_min_luma_transform_block_size =
sps->log2_diff_max_min_luma_transform_block_size,
1010 .max_transform_hierarchy_depth_inter =
sps->max_transform_hierarchy_depth_inter,
1011 .max_transform_hierarchy_depth_intra =
sps->max_transform_hierarchy_depth_intra,
1012 .num_short_term_ref_pic_sets =
sps->num_short_term_ref_pic_sets,
1013 .num_long_term_ref_pics_sps =
sps->num_long_term_ref_pics_sps,
1014 .pcm_sample_bit_depth_luma_minus1 =
sps->pcm_sample_bit_depth_luma_minus1,
1015 .pcm_sample_bit_depth_chroma_minus1 =
sps->pcm_sample_bit_depth_chroma_minus1,
1016 .log2_min_pcm_luma_coding_block_size_minus3 =
sps->log2_min_pcm_luma_coding_block_size_minus3,
1017 .log2_diff_max_min_pcm_luma_coding_block_size =
sps->log2_diff_max_min_pcm_luma_coding_block_size,
1020 .palette_max_size =
sps->palette_max_size,
1021 .delta_palette_max_predictor_size =
sps->delta_palette_max_predictor_size,
1022 .motion_vector_resolution_control_idc =
sps->motion_vector_resolution_control_idc,
1023 .sps_num_palette_predictor_initializers_minus1 =
sps->sps_num_palette_predictor_initializer_minus1,
1024 .conf_win_left_offset =
sps->conf_win_left_offset,
1025 .conf_win_right_offset =
sps->conf_win_right_offset,
1026 .conf_win_top_offset =
sps->conf_win_top_offset,
1027 .conf_win_bottom_offset =
sps->conf_win_bottom_offset,
1028 .pProfileTierLevel = ptl_sps,
1029 .pDecPicBufMgr = dpbm_sps,
1030 .pScalingLists =
NULL,
1031 .pShortTermRefPicSet = str,
1032 .pLongTermRefPicsSps = ltr,
1033 .pSequenceParameterSetVui = vui_sps,
1034 .pPredictorPaletteEntries =
NULL,
1038 *vkpps = (StdVideoH265PictureParameterSet) {
1039 .flags = (StdVideoH265PpsFlags) {
1040 .dependent_slice_segments_enabled_flag =
pps->dependent_slice_segments_enabled_flag,
1041 .output_flag_present_flag =
pps->output_flag_present_flag,
1042 .sign_data_hiding_enabled_flag =
pps->sign_data_hiding_enabled_flag,
1043 .cabac_init_present_flag =
pps->cabac_init_present_flag,
1044 .constrained_intra_pred_flag =
pps->constrained_intra_pred_flag,
1045 .transform_skip_enabled_flag =
pps->transform_skip_enabled_flag,
1046 .cu_qp_delta_enabled_flag =
pps->cu_qp_delta_enabled_flag,
1047 .pps_slice_chroma_qp_offsets_present_flag =
pps->pps_slice_chroma_qp_offsets_present_flag,
1048 .weighted_pred_flag =
pps->weighted_pred_flag,
1049 .weighted_bipred_flag =
pps->weighted_bipred_flag,
1050 .transquant_bypass_enabled_flag =
pps->transquant_bypass_enabled_flag,
1051 .tiles_enabled_flag =
pps->tiles_enabled_flag,
1052 .entropy_coding_sync_enabled_flag =
pps->entropy_coding_sync_enabled_flag,
1053 .uniform_spacing_flag =
pps->uniform_spacing_flag,
1054 .loop_filter_across_tiles_enabled_flag =
pps->loop_filter_across_tiles_enabled_flag,
1055 .pps_loop_filter_across_slices_enabled_flag =
pps->pps_loop_filter_across_slices_enabled_flag,
1056 .deblocking_filter_control_present_flag =
pps->deblocking_filter_control_present_flag,
1057 .deblocking_filter_override_enabled_flag =
pps->deblocking_filter_override_enabled_flag,
1058 .pps_deblocking_filter_disabled_flag =
pps->pps_deblocking_filter_disabled_flag,
1059 .pps_scaling_list_data_present_flag =
pps->pps_scaling_list_data_present_flag,
1060 .lists_modification_present_flag =
pps->lists_modification_present_flag,
1061 .slice_segment_header_extension_present_flag =
pps->slice_segment_header_extension_present_flag,
1062 .pps_extension_present_flag =
pps->pps_extension_present_flag,
1063 .cross_component_prediction_enabled_flag =
pps->cross_component_prediction_enabled_flag,
1064 .chroma_qp_offset_list_enabled_flag =
pps->chroma_qp_offset_list_enabled_flag,
1065 .pps_curr_pic_ref_enabled_flag =
pps->pps_curr_pic_ref_enabled_flag,
1066 .residual_adaptive_colour_transform_enabled_flag =
pps->residual_adaptive_colour_transform_enabled_flag,
1067 .pps_slice_act_qp_offsets_present_flag =
pps->pps_slice_act_qp_offsets_present_flag,
1068 .pps_palette_predictor_initializers_present_flag =
pps->pps_palette_predictor_initializer_present_flag,
1069 .monochrome_palette_flag =
pps->monochrome_palette_flag,
1070 .pps_range_extension_flag =
pps->pps_range_extension_flag,
1072 .pps_pic_parameter_set_id =
pps->pps_pic_parameter_set_id,
1073 .pps_seq_parameter_set_id =
pps->pps_seq_parameter_set_id,
1074 .sps_video_parameter_set_id =
sps->sps_video_parameter_set_id,
1075 .num_extra_slice_header_bits =
pps->num_extra_slice_header_bits,
1076 .num_ref_idx_l0_default_active_minus1 =
pps->num_ref_idx_l0_default_active_minus1,
1077 .num_ref_idx_l1_default_active_minus1 =
pps->num_ref_idx_l1_default_active_minus1,
1078 .init_qp_minus26 =
pps->init_qp_minus26,
1079 .diff_cu_qp_delta_depth =
pps->diff_cu_qp_delta_depth,
1080 .pps_cb_qp_offset =
pps->pps_cb_qp_offset,
1081 .pps_cr_qp_offset =
pps->pps_cr_qp_offset,
1082 .pps_beta_offset_div2 =
pps->pps_beta_offset_div2,
1083 .pps_tc_offset_div2 =
pps->pps_tc_offset_div2,
1084 .log2_parallel_merge_level_minus2 =
pps->log2_parallel_merge_level_minus2,
1085 .log2_max_transform_skip_block_size_minus2 =
pps->log2_max_transform_skip_block_size_minus2,
1086 .diff_cu_chroma_qp_offset_depth =
pps->diff_cu_chroma_qp_offset_depth,
1087 .chroma_qp_offset_list_len_minus1 =
pps->chroma_qp_offset_list_len_minus1,
1088 .log2_sao_offset_scale_luma =
pps->log2_sao_offset_scale_luma,
1089 .log2_sao_offset_scale_chroma =
pps->log2_sao_offset_scale_chroma,
1090 .pps_act_y_qp_offset_plus5 =
pps->pps_act_y_qp_offset_plus5,
1091 .pps_act_cb_qp_offset_plus5 =
pps->pps_act_cb_qp_offset_plus5,
1092 .pps_act_cr_qp_offset_plus3 =
pps->pps_act_cr_qp_offset_plus3,
1093 .pps_num_palette_predictor_initializers =
pps->pps_num_palette_predictor_initializer,
1094 .luma_bit_depth_entry_minus8 =
pps->luma_bit_depth_entry_minus8,
1095 .chroma_bit_depth_entry_minus8 =
pps->chroma_bit_depth_entry_minus8,
1096 .num_tile_columns_minus1 =
pps->num_tile_columns_minus1,
1097 .num_tile_rows_minus1 =
pps->num_tile_rows_minus1,
1098 .pScalingLists =
NULL,
1099 .pPredictorPaletteEntries =
NULL,
1102 for (
int i = 0;
i <
pps->num_tile_columns_minus1;
i++)
1103 vkpps->column_width_minus1[
i] =
pps->column_width_minus1[
i];
1105 for (
int i = 0;
i <
pps->num_tile_rows_minus1;
i++)
1106 vkpps->row_height_minus1[
i] =
pps->row_height_minus1[
i];
1108 for (
int i = 0;
i <=
pps->chroma_qp_offset_list_len_minus1;
i++) {
1109 vkpps->cb_qp_offset_list[
i] =
pps->cb_qp_offset_list[
i];
1110 vkpps->cr_qp_offset_list[
i] =
pps->cr_qp_offset_list[
i];
1114 for (
int i = 0;
i < STD_VIDEO_H265_SUBLAYERS_LIST_SIZE;
i++) {
1115 dpbm_vps->max_latency_increase_plus1[
i] =
vps->vps_max_latency_increase_plus1[
i];
1116 dpbm_vps->max_dec_pic_buffering_minus1[
i] =
vps->vps_max_dec_pic_buffering_minus1[
i];
1117 dpbm_vps->max_num_reorder_pics[
i] =
vps->vps_max_num_reorder_pics[
i];
1120 *ptl_vps = (StdVideoH265ProfileTierLevel) {
1121 .flags = (StdVideoH265ProfileTierLevelFlags) {
1122 .general_tier_flag =
vps->profile_tier_level.general_tier_flag,
1123 .general_progressive_source_flag =
vps->profile_tier_level.general_progressive_source_flag,
1124 .general_interlaced_source_flag =
vps->profile_tier_level.general_interlaced_source_flag,
1125 .general_non_packed_constraint_flag =
vps->profile_tier_level.general_non_packed_constraint_flag,
1126 .general_frame_only_constraint_flag =
vps->profile_tier_level.general_frame_only_constraint_flag,
1132 *vkvps = (StdVideoH265VideoParameterSet) {
1133 .flags = (StdVideoH265VpsFlags) {
1134 .vps_temporal_id_nesting_flag =
vps->vps_temporal_id_nesting_flag,
1135 .vps_sub_layer_ordering_info_present_flag =
vps->vps_sub_layer_ordering_info_present_flag,
1136 .vps_timing_info_present_flag =
vps->vps_timing_info_present_flag,
1137 .vps_poc_proportional_to_timing_flag =
vps->vps_poc_proportional_to_timing_flag,
1139 .vps_video_parameter_set_id =
vps->vps_video_parameter_set_id,
1140 .vps_max_sub_layers_minus1 =
vps->vps_max_sub_layers_minus1,
1143 .vps_num_units_in_tick =
vps->vps_num_units_in_tick,
1144 .vps_time_scale =
vps->vps_time_scale,
1145 .vps_num_ticks_poc_diff_one_minus1 =
vps->vps_num_ticks_poc_diff_one_minus1,
1147 .pDecPicBufMgr = dpbm_vps,
1148 .pHrdParameters = vui_header_vps,
1149 .pProfileTierLevel = ptl_vps,
1165 VkVideoEncodeH265SessionParametersAddInfoKHR h265_params_info;
1166 VkVideoEncodeH265SessionParametersCreateInfoKHR h265_params;
1177 if (
ctx->session_params)
1178 vk->DestroyVideoSessionParametersKHR(
s->hwctx->act_dev,
1179 ctx->session_params,
1182 h265_params_info = (VkVideoEncodeH265SessionParametersAddInfoKHR) {
1183 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR,
1184 .pStdSPSs = &vk_units.
sps,
1186 .pStdPPSs = &vk_units.
pps,
1188 .pStdVPSs = &vk_units.
vps,
1191 h265_params = (VkVideoEncodeH265SessionParametersCreateInfoKHR) {
1192 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR,
1193 .maxStdSPSCount = 1,
1194 .maxStdPPSCount = 1,
1195 .maxStdVPSCount = 1,
1196 .pParametersAddInfo = &h265_params_info,
1204 int sps_override,
int pps_override)
1263 VkVideoEncodeH265SessionParametersGetInfoKHR h265_params_info;
1264 VkVideoEncodeSessionParametersGetInfoKHR params_info;
1265 VkVideoEncodeH265SessionParametersFeedbackInfoKHR h265_params_feedback;
1266 VkVideoEncodeSessionParametersFeedbackInfoKHR params_feedback;
1269 size_t data_size = 0;
1284 h265_params_info = (VkVideoEncodeH265SessionParametersGetInfoKHR) {
1285 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR,
1293 params_info = (VkVideoEncodeSessionParametersGetInfoKHR) {
1294 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR,
1295 .pNext = &h265_params_info,
1296 .videoSessionParameters =
ctx->session_params,
1299 h265_params_feedback = (VkVideoEncodeH265SessionParametersFeedbackInfoKHR) {
1300 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR,
1302 params_feedback = (VkVideoEncodeSessionParametersFeedbackInfoKHR) {
1303 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR,
1304 .pNext = &h265_params_feedback,
1307 ret = vk->GetEncodedVideoSessionParametersKHR(
s->hwctx->act_dev, ¶ms_info,
1310 if (
ret == VK_INCOMPLETE ||
1311 (
ret == VK_SUCCESS) && (data_size > 0)) {
1316 av_log(avctx,
AV_LOG_ERROR,
"Unable to get feedback for H.265 units = %lu\n", data_size);
1320 ret = vk->GetEncodedVideoSessionParametersKHR(
s->hwctx->act_dev, ¶ms_info,
1323 if (
ret != VK_SUCCESS) {
1328 av_log(avctx,
AV_LOG_VERBOSE,
"Feedback units written, overrides: %i (SPS: %i PPS: %i VPS: %i)\n",
1329 params_feedback.hasOverrides,
1330 h265_params_feedback.hasStdSPSOverrides,
1331 h265_params_feedback.hasStdPPSOverrides,
1332 h265_params_feedback.hasStdVPSOverrides);
1334 params_feedback.hasOverrides = 1;
1335 h265_params_feedback.hasStdSPSOverrides = 1;
1336 h265_params_feedback.hasStdPPSOverrides = 1;
1339 if (!params_feedback.hasOverrides)
1344 h265_params_feedback.hasStdSPSOverrides,
1345 h265_params_feedback.hasStdPPSOverrides);
1367 "type = %d.\n",
header->nal_unit_type);
1373 uint8_t *
data,
size_t *data_len,
1384 if (*data_len < au->data_size) {
1398 uint8_t *
data,
size_t *data_len)
1432 uint8_t *
data,
size_t *data_len)
1482 uint8_t *
data,
size_t *data_len)
1492 .nuh_temporal_id_plus1 = 1,
1512 .filler_header_size = 7,
1523 int err, ref_l0, ref_l1;
1532 enc->
caps = (VkVideoEncodeH265CapabilitiesKHR) {
1533 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR,
1536 enc->
quality_props = (VkVideoEncodeH265QualityLevelPropertiesKHR) {
1537 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR,
1549 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR));
1551 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR));
1553 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR));
1555 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR));
1557 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR));
1559 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR));
1561 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR ?
1563 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR ?
1566 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR));
1568 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR));
1570 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR ?
1572 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR ?
1575 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR));
1577 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR));
1579 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR));
1581 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR));
1583 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR ?
1585 enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR ?
1588 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR));
1590 !!(enc->
caps.stdSyntaxFlags & VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR));
1594 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR));
1596 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR));
1598 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR));
1600 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR));
1602 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR));
1604 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR));
1606 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR));
1608 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR));
1610 !!(enc->
caps.flags & VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR));
1614 enc->
caps.maxLevelIdc);
1616 enc->
caps.maxSliceSegmentCount);
1618 enc->
caps.maxTiles.width, enc->
caps.maxTiles.height);
1620 enc->
caps.ctbSizes);
1622 enc->
caps.transformBlockSizes);
1624 enc->
caps.maxPPictureL0ReferenceCount,
1625 enc->
caps.maxBPictureL0ReferenceCount);
1627 enc->
caps.maxL1ReferenceCount);
1629 enc->
caps.maxSubLayerCount);
1631 enc->
caps.expectDyadicTemporalSubLayerPattern);
1635 enc->
caps.prefersGopRemainingFrames);
1637 enc->
caps.requiresGopRemainingFrames);
1644 if (!enc->
caps.maxPPictureL0ReferenceCount &&
1645 !enc->
caps.maxBPictureL0ReferenceCount &&
1646 !enc->
caps.maxL1ReferenceCount) {
1649 ref_l0 = ref_l1 = 0;
1650 }
else if (!enc->
caps.maxPPictureL0ReferenceCount) {
1653 ref_l0 = enc->
caps.maxBPictureL0ReferenceCount;
1654 ref_l1 = enc->
caps.maxL1ReferenceCount;
1655 }
else if (!enc->
caps.maxBPictureL0ReferenceCount &&
1656 !enc->
caps.maxL1ReferenceCount) {
1659 ref_l0 = enc->
caps.maxPPictureL0ReferenceCount;
1663 ref_l0 =
FFMIN(enc->
caps.maxPPictureL0ReferenceCount,
1664 enc->
caps.maxBPictureL0ReferenceCount);
1665 ref_l1 = enc->
caps.maxL1ReferenceCount;
1701 #define OFFSET(x) offsetof(VulkanEncodeH265Context, x)
1702 #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
1707 {
"profile",
"Set profile (profile_idc and constraint_set*_flag)",
1711 #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1712 { .i64 = value }, 0, 0, FLAGS, .unit = "profile"
1718 {
"tier",
"Set tier (general_tier_flag)",
OFFSET(common.opts.tier),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1,
FLAGS, .unit =
"tier" },
1722 {
"level",
"Set level (general_level_idc)",
1726 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \
1727 { .i64 = value }, 0, 0, FLAGS, .unit = "level"
1730 {
LEVEL(
"2.1", 63) },
1732 {
LEVEL(
"3.1", 93) },
1733 {
LEVEL(
"4", 120) },
1734 {
LEVEL(
"4.1", 123) },
1735 {
LEVEL(
"5", 150) },
1736 {
LEVEL(
"5.1", 153) },
1737 {
LEVEL(
"5.2", 156) },
1738 {
LEVEL(
"6", 180) },
1739 {
LEVEL(
"6.1", 183) },
1740 {
LEVEL(
"6.2", 186) },
1754 {
"i_qfactor",
"1" },
1755 {
"i_qoffset",
"0" },
1756 {
"b_qfactor",
"6/5" },
1757 {
"b_qoffset",
"0" },
1771 .
p.
name =
"hevc_vulkan",
1792 .p.wrapper_name =
"vulkan",