[FFmpeg-cvslog] avutil/hwcontext_vulkan: don't over-map buffers with prior padding

Niklas Haas git at videolan.org
Tue Jul 15 14:46:54 EEST 2025


ffmpeg | branch: master | Niklas Haas <git at haasn.dev> | Tue Jul 15 12:46:11 2025 +0200| [053a113ad8f853c398c0e268408bfdc280b23f11] | committer: Niklas Haas

avutil/hwcontext_vulkan: don't over-map buffers with prior padding

If the image data is not at the start of the buffer allocation, such as
when the buffer has padding before the image data, this function maps too
much memory, since src_data + src_buf->size exceeds the buffer size.

Fix this by subtracting the difference between the buffer start and the
provided image data pointer from the size of the memory range to map.

An easy way to reproduce this issue is using the vf_pad filter, which
allocates image data buffers with a nonzero offset whenever padding is
requested before the start of the image data.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=053a113ad8f853c398c0e268408bfdc280b23f11
---

 libavutil/vulkan.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index f36f2bb7cf..04cc45ee05 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -1408,7 +1408,8 @@ int ff_vk_host_map_buffer(FFVulkanContext *s, AVBufferRef **dst,
         return AVERROR(ENOMEM);
 
     /* Add the offset at the start, which gets ignored */
-    buffer_size = offs + src_buf->size;
+    const ptrdiff_t src_offset = src_data - src_buf->data;
+    buffer_size = offs + (src_buf->size - src_offset);
     buffer_size = FFALIGN(buffer_size, s->props.properties.limits.minMemoryMapAlignment);
     buffer_size = FFALIGN(buffer_size, s->hprops.minImportedHostPointerAlignment);
 



More information about the ffmpeg-cvslog mailing list