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]

Reply via email to