summaryrefslogtreecommitdiffstats
path: root/video/out
diff options
context:
space:
mode:
authorAaron Boxer <boxerab@protonmail.com>2023-01-26 14:18:17 -0500
committersfan5 <sfan5@live.de>2023-01-28 16:54:48 +0100
commit881f820fdf33279186b42eeb48820dea88018bd9 (patch)
treea1952d9b9437e9024894490a3b3c5d9cb64f73ad /video/out
parente3618002e3f3441fc8543a93ea839f741f93f322 (diff)
downloadmpv-881f820fdf33279186b42eeb48820dea88018bd9.tar.bz2
mpv-881f820fdf33279186b42eeb48820dea88018bd9.tar.xz
vo_dmabuf_wayland: close file handles when surface export fails
file handles may still be opened despite failure
Diffstat (limited to 'video/out')
-rw-r--r--video/out/vo_dmabuf_wayland.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/video/out/vo_dmabuf_wayland.c b/video/out/vo_dmabuf_wayland.c
index 81fc15fd56..565fe50a97 100644
--- a/video/out/vo_dmabuf_wayland.c
+++ b/video/out/vo_dmabuf_wayland.c
@@ -74,6 +74,12 @@ static uintptr_t vaapi_key_provider(struct mp_image *src)
return va_surface_id(src);
}
+static void close_file_descriptors(VADRMPRIMESurfaceDescriptor desc)
+{
+ for (int i = 0; i < desc.num_objects; i++)
+ close(desc.objects[i].fd);
+}
+
/* va-api dmabuf importer */
static bool vaapi_dmabuf_importer(struct mp_image *src, struct wlbuf_pool_entry* entry,
struct zwp_linux_buffer_params_v1 *params)
@@ -89,6 +95,8 @@ static bool vaapi_dmabuf_importer(struct mp_image *src, struct wlbuf_pool_entry*
/* invalid surface warning => composed layers not supported */
if (status == VA_STATUS_ERROR_INVALID_SURFACE)
MP_VERBOSE(entry->vo, "vaExportSurfaceHandle: composed layers not supported.\n");
+ close_file_descriptors(desc);
+
return false;
}
bool success = false;
@@ -108,8 +116,7 @@ static bool vaapi_dmabuf_importer(struct mp_image *src, struct wlbuf_pool_entry*
success = true;
done:
- for (int i = 0; i < desc.num_objects; i++)
- close(desc.objects[i].fd);
+ close_file_descriptors(desc);
return success;
}