MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_vulkan_encode_init

Function ff_vulkan_encode_init

libavcodec/vulkan_encode.c:739–1068  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

737}
738
739av_cold int ff_vulkan_encode_init(AVCodecContext *avctx, FFVulkanEncodeContext *ctx,
740 const FFVulkanEncodeDescriptor *vk_desc,
741 const FFVulkanCodec *codec,
742 void *codec_caps, void *quality_pnext)
743{
744 int i, err;
745 VkResult ret;
746 FFVulkanFunctions *vk = &ctx->s.vkfn;
747 FFVulkanContext *s = &ctx->s;
748 FFHWBaseEncodeContext *base_ctx = &ctx->base;
749
750 const AVPixFmtDescriptor *desc;
751
752 VkVideoFormatPropertiesKHR *ret_info;
753 uint32_t nb_out_fmts = 0;
754 const uint32_t feedback_flags = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR |
755 VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR;
756
757 VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR quality_info;
758
759 VkQueryPoolVideoEncodeFeedbackCreateInfoKHR query_create;
760
761 VkVideoSessionCreateInfoKHR session_create = {
762 .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR,
763 };
764 VkPhysicalDeviceVideoFormatInfoKHR fmt_info = {
765 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR,
766 .pNext = &ctx->profile_list,
767 };
768
769 if (!avctx->hw_frames_ctx) {
770 av_log(avctx, AV_LOG_ERROR, "A hardware frames reference is "
771 "required to associate the encoding device.\n");
772 return AVERROR(EINVAL);
773 }
774
775 ctx->base.op = &vulkan_base_encode_ops;
776 ctx->codec = codec;
777
778 s->frames_ref = av_buffer_ref(avctx->hw_frames_ctx);
779 s->frames = (AVHWFramesContext *)s->frames_ref->data;
780 s->hwfc = s->frames->hwctx;
781
782 s->device = (AVHWDeviceContext *)s->frames->device_ref->data;
783 s->hwctx = s->device->hwctx;
784
785 desc = av_pix_fmt_desc_get(avctx->sw_pix_fmt);
786 if (!desc)
787 return AVERROR(EINVAL);
788
789 s->extensions = ff_vk_extensions_to_mask(s->hwctx->enabled_dev_extensions,
790 s->hwctx->nb_enabled_dev_extensions);
791
792 if (!(s->extensions & FF_VK_EXT_VIDEO_ENCODE_QUEUE)) {
793 av_log(avctx, AV_LOG_ERROR, "Device does not support the %s extension!\n",
794 VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME);
795 return AVERROR(ENOSYS);
796 } else if (!(s->extensions & FF_VK_EXT_VIDEO_MAINTENANCE_1)) {

Callers 3

vulkan_encode_h265_initFunction · 0.85
vulkan_encode_av1_initFunction · 0.85
vulkan_encode_h264_initFunction · 0.85

Calls 15

av_logFunction · 0.85
av_buffer_refFunction · 0.85
av_pix_fmt_desc_getFunction · 0.85
ff_vk_extensions_to_maskFunction · 0.85
avcodec_get_nameFunction · 0.85
ff_vk_load_functionsFunction · 0.85
ff_vk_qf_findFunction · 0.85
ff_vk_load_propsFunction · 0.85
avcodec_profile_nameFunction · 0.85
av_get_pix_fmt_nameFunction · 0.85

Tested by

no test coverage detected