]> git.sesse.net Git - ffmpeg/commitdiff
hwcontext_vulkan: fix uploading and downloading from/to flipped images
authorLynne <dev@lynne.ee>
Tue, 26 May 2020 11:01:54 +0000 (12:01 +0100)
committerLynne <dev@lynne.ee>
Tue, 26 May 2020 11:03:42 +0000 (12:03 +0100)
We want to copy the lowest amount of bytes per line, but while the buffer
stride is sanitized, the src/dst stride can be negative, and negative numbers
of bytes do not make a lot of sense.

libavutil/hwcontext_vulkan.c

index 8066b8536a1b561224a2075b002a9a9b226b018d..5e51d0390f22c185430931eaa5fb3b4357b27794 100644 (file)
@@ -3063,7 +3063,8 @@ static int vulkan_transfer_data_from_mem(AVHWFramesContext *hwfc, AVFrame *dst,
 
         av_image_copy_plane(tmp.data[i], tmp.linesize[i],
                             (const uint8_t *)src->data[i], src->linesize[i],
-                            FFMIN(tmp.linesize[i], src->linesize[i]), p_height);
+                            FFMIN(tmp.linesize[i], FFABS(src->linesize[i])),
+                            p_height);
     }
 
     if ((err = unmap_buffers(dev_ctx, bufs, planes, 1)))
@@ -3251,7 +3252,8 @@ static int vulkan_transfer_data_to_mem(AVHWFramesContext *hwfc, AVFrame *dst,
 
         av_image_copy_plane(dst->data[i], dst->linesize[i],
                             (const uint8_t *)tmp.data[i], tmp.linesize[i],
-                            FFMIN(tmp.linesize[i], dst->linesize[i]), p_height);
+                            FFMIN(tmp.linesize[i], FFABS(dst->linesize[i])),
+                            p_height);
     }
 
     err = unmap_buffers(dev_ctx, bufs, planes, 0);