This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 24db09a881c9e0eb5b36dcf693c6ac17e9d56be8 Author: Benjamin Cheng <[email protected]> AuthorDate: Tue Dec 30 11:47:46 2025 -0500 Commit: Benjamin Cheng <[email protected]> CommitDate: Tue Dec 30 14:15:46 2025 -0500 lavc/vulkan_video: Restrict usages for image views These image views are used only internally for video coding, so they do not need all the usages of the image it's created from. --- libavcodec/vulkan_decode.c | 8 +++++--- libavcodec/vulkan_encode.c | 6 +++--- libavcodec/vulkan_video.c | 9 ++++++++- libavcodec/vulkan_video.h | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index de786ad808..31ed14f517 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -217,7 +217,7 @@ int ff_vk_decode_prepare_frame(FFVulkanDecodeContext *dec, AVFrame *pic, err = ff_vk_create_view(&ctx->s, &ctx->common, &vkpic->view.ref[0], &vkpic->view.aspect_ref[0], (AVVkFrame *)vkpic->dpb_frame->data[0], - dpb_hwfc->format[0], !is_current); + dpb_hwfc->format[0], VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR); if (err < 0) return err; @@ -231,7 +231,9 @@ int ff_vk_decode_prepare_frame(FFVulkanDecodeContext *dec, AVFrame *pic, err = ff_vk_create_view(&ctx->s, &ctx->common, &vkpic->view.out[0], &vkpic->view.aspect[0], (AVVkFrame *)pic->data[0], - hwfc->format[0], !is_current); + hwfc->format[0], + VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | + (!is_current ? VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR : 0)); if (err < 0) return err; @@ -1404,7 +1406,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) &ctx->common.layered_view, &ctx->common.layered_aspect, (AVVkFrame *)ctx->common.layered_frame->data[0], - s->hwfc->format[0], 1); + s->hwfc->format[0], VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR); if (err < 0) goto fail; } diff --git a/libavcodec/vulkan_encode.c b/libavcodec/vulkan_encode.c index 7b534ffa30..c820b63666 100644 --- a/libavcodec/vulkan_encode.c +++ b/libavcodec/vulkan_encode.c @@ -71,7 +71,7 @@ static int vulkan_encode_init(AVCodecContext *avctx, FFHWBaseEncodePicture *pic) /* Input image view */ err = ff_vk_create_view(&ctx->s, &ctx->common, &vp->in.view, &vp->in.aspect, - vkf, vkfc->format[0], 0); + vkf, vkfc->format[0], VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR); if (err < 0) return err; @@ -81,7 +81,7 @@ static int vulkan_encode_init(AVCodecContext *avctx, FFHWBaseEncodePicture *pic) AVVkFrame *rvkf = (AVVkFrame *)rf->data[0]; err = ff_vk_create_view(&ctx->s, &ctx->common, &vp->dpb.view, &vp->dpb.aspect, - rvkf, ctx->pic_format, 1); + rvkf, ctx->pic_format, VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR); if (err < 0) return err; } else { @@ -635,7 +635,7 @@ static int vulkan_encode_create_dpb(AVCodecContext *avctx, FFVulkanEncodeContext &ctx->common.layered_view, &ctx->common.layered_aspect, (AVVkFrame *)ctx->common.layered_frame->data[0], - hwfc->format[0], 1); + hwfc->format[0], VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR); if (err < 0) return err; diff --git a/libavcodec/vulkan_video.c b/libavcodec/vulkan_video.c index d73479d14d..8bc3e9b907 100644 --- a/libavcodec/vulkan_video.c +++ b/libavcodec/vulkan_video.c @@ -290,14 +290,21 @@ StdVideoAV1Profile ff_vk_av1_profile_to_vk(int profile) int ff_vk_create_view(FFVulkanContext *s, FFVkVideoCommon *common, VkImageView *view, VkImageAspectFlags *aspect, - AVVkFrame *src, VkFormat vkf, int is_dpb) + AVVkFrame *src, VkFormat vkf, VkImageUsageFlags usage) { VkResult ret; FFVulkanFunctions *vk = &s->vkfn; VkImageAspectFlags aspect_mask = ff_vk_aspect_bits_from_vkfmt(vkf); + int is_dpb = usage & (VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | + VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR); + VkImageViewUsageCreateInfo usage_create_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, + .usage = usage, + }; VkSamplerYcbcrConversionInfo yuv_sampler_info = { .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, + .pNext = &usage_create_info, .conversion = common->yuv_sampler, }; VkImageViewCreateInfo img_view_create_info = { diff --git a/libavcodec/vulkan_video.h b/libavcodec/vulkan_video.h index 1b29f7adc7..14168b7cc8 100644 --- a/libavcodec/vulkan_video.h +++ b/libavcodec/vulkan_video.h @@ -85,7 +85,7 @@ StdVideoAV1Profile ff_vk_av1_profile_to_vk(int profile); */ int ff_vk_create_view(FFVulkanContext *s, FFVkVideoCommon *common, VkImageView *view, VkImageAspectFlags *aspect, - AVVkFrame *src, VkFormat vkf, int is_dpb); + AVVkFrame *src, VkFormat vkf, VkImageUsageFlags flags); /** * Initialize video session, allocating and binding necessary memory. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
