diff options
author | Lynne <dev@lynne.ee> | 2021-12-10 17:16:49 +0100 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2021-12-10 17:16:49 +0100 |
commit | 0c1d47a6b39ba19c0883e6322ca509eb8e73e875 (patch) | |
tree | 93d10aa74e6617e20d27f2406681e1d018698dda | |
parent | f45cbb775e47c9991cb518841b2c094e1046dff9 (diff) | |
download | ffmpeg-0c1d47a6b39ba19c0883e6322ca509eb8e73e875.tar.gz |
hwcontext_vulkan: wait on semaphores when exporting to DRM
There is no synchronization method for DRM yet.
-rw-r--r-- | libavutil/hwcontext_vulkan.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 507c4f4454..83a7527198 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -3301,6 +3301,11 @@ static int vulkan_map_to_drm(AVHWFramesContext *hwfc, AVFrame *dst, VkImageDrmFormatModifierPropertiesEXT drm_mod = { .sType = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT, }; + VkSemaphoreWaitInfo wait_info = { + .sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, + .flags = 0x0, + .semaphoreCount = planes, + }; AVDRMFrameDescriptor *drm_desc = av_mallocz(sizeof(*drm_desc)); if (!drm_desc) @@ -3310,6 +3315,12 @@ static int vulkan_map_to_drm(AVHWFramesContext *hwfc, AVFrame *dst, if (err < 0) goto end; + /* Wait for the operation to finish so we can cleanly export it. */ + wait_info.pSemaphores = f->sem; + wait_info.pValues = f->sem_value; + + vk->WaitSemaphores(hwctx->act_dev, &wait_info, UINT64_MAX); + err = ff_hwframe_map_create(src->hw_frames_ctx, dst, src, &vulkan_unmap_to_drm, drm_desc); if (err < 0) goto end; |