[FFmpeg-cvslog] hwcontext_vulkan: wait for semaphores when unmapping from VAAPI

Lynne git at videolan.org
Sat Nov 13 15:26:26 EET 2021


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Sat Nov 13 14:22:11 2021 +0100| [9dc544cdb461789f0d950c384464fcc893cd804c] | committer: Lynne

hwcontext_vulkan: wait for semaphores when unmapping from VAAPI

We don't really want to do a full all-queue blocking wait here, since
this happens once per frame, and this could delay future frames.

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

 libavutil/hwcontext_vulkan.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index 31c7dc2aa5..e54c10156e 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -2218,6 +2218,16 @@ static void vulkan_unmap_from(AVHWFramesContext *hwfc, HWMapDescriptor *hwmap)
     VulkanDevicePriv *p = hwfc->device_ctx->internal->priv;
     FFVulkanFunctions *vk = &p->vkfn;
 
+    VkSemaphoreWaitInfo wait_info = {
+        .sType          = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
+        .flags          = 0x0,
+        .pSemaphores    = map->frame->sem,
+        .pValues        = map->frame->sem_value,
+        .semaphoreCount = planes,
+    };
+
+    vk->WaitSemaphores(hwctx->act_dev, &wait_info, UINT64_MAX);
+
     for (int i = 0; i < planes; i++) {
         vk->DestroyImage(hwctx->act_dev, map->frame->img[i], hwctx->alloc);
         vk->FreeMemory(hwctx->act_dev, map->frame->mem[i], hwctx->alloc);



More information about the ffmpeg-cvslog mailing list