From 2e6cd5c2e476b6cea4ca72449e8393f2888980d7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Sun, 3 Oct 2021 16:53:54 +0200 Subject: [PATCH] va: Make libgudev dependency optional. libgudev is a problematic dependency, particularly in sandboxed environments, such as flatpak. This patch implements a way to get the available VA devices using brute-forced traverse of /dev/drm/renderD* directory. Thus usable in those sandboxed environments. Part-of: --- subprojects/gst-plugins-bad/sys/va/gstvadevice.c | 28 ++++++++++++++++++++++++ subprojects/gst-plugins-bad/sys/va/meson.build | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-bad/sys/va/gstvadevice.c b/subprojects/gst-plugins-bad/sys/va/gstvadevice.c index 1faa61f..33ab55a 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvadevice.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvadevice.c @@ -24,7 +24,9 @@ #include "gstvadevice.h" +#if HAVE_GUDEV #include +#endif #define GST_CAT_DEFAULT gstva_debug GST_DEBUG_CATEGORY_EXTERN (gstva_debug); @@ -62,6 +64,7 @@ compare_device_path (gconstpointer a, gconstpointer b, gpointer user_data) return strcmp (pa->render_device_path, pb->render_device_path); } +#if HAVE_GUDEV GList * gst_va_device_find_devices (void) { @@ -96,6 +99,31 @@ gst_va_device_find_devices (void) return devices.head; } +#else +GList * +gst_va_device_find_devices (void) +{ + GstVaDisplay *dpy; + GQueue devices = G_QUEUE_INIT; + gchar path[64]; + guint i; + + for (i = 0; i < 8; i++) { + g_snprintf (path, sizeof (path), "/dev/dri/renderD%d", 128 + i); + if (!g_file_test (path, G_FILE_TEST_EXISTS)) + continue; + + if (!(dpy = gst_va_display_drm_new_from_path (path))) + continue; + + GST_INFO ("Found VA-API device: %s", path); + g_queue_push_head (&devices, gst_va_device_new (dpy, path)); + } + + g_queue_sort (&devices, compare_device_path, NULL); + return devices.head; +} +#endif void gst_va_device_list_free (GList * devices) diff --git a/subprojects/gst-plugins-bad/sys/va/meson.build b/subprojects/gst-plugins-bad/sys/va/meson.build index 4d33fad..6f47c5a 100644 --- a/subprojects/gst-plugins-bad/sys/va/meson.build +++ b/subprojects/gst-plugins-bad/sys/va/meson.build @@ -26,7 +26,7 @@ if va_option.disabled() or host_system != 'linux' subdir_done() endif -libgudev_dep = dependency('gudev-1.0', required: va_option) +libgudev_dep = dependency('gudev-1.0', required: false) if not gstva_dep.found() or not libgudev_dep.found() if va_option.enabled() @@ -39,6 +39,7 @@ if libva_dep.version().version_compare('>= 1.8') va_sources += 'gstvaav1dec.c' endif +cdata.set10('HAVE_GUDEV', libgudev_dep.found()) driverdir = libva_dep.get_variable(pkgconfig: 'driverdir', internal: 'driverdir', default_value: '') if driverdir == '' -- 2.7.4