summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2021-01-12 15:33:49 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2021-02-24 04:40:14 +0000
commit54091d0290a8a4c8ae662978e6e9f51c2f515f43 (patch)
treeaa17bfe488c7891b5f6eddac24e8e2393702e907 /sys
parente15be4cf0fd686ad1bdcb31421c2c88a1703aeac (diff)
downloadgstreamer-plugins-bad-54091d0290a8a4c8ae662978e6e9f51c2f515f43.tar.gz
msdk: allow user specify a drm device via an env variable
User may specify the required device via GST_MSDK_DRM_DEVICE Example: GST_MSDK_DRM_DEVICE=/dev/dri/card0 gst-launch-1.0 videotestsrc ! msdkh264enc ! fakesink Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1953>
Diffstat (limited to 'sys')
-rw-r--r--sys/msdk/gstmsdkcontext.c26
-rw-r--r--sys/msdk/meson.build5
2 files changed, 29 insertions, 2 deletions
diff --git a/sys/msdk/gstmsdkcontext.c b/sys/msdk/gstmsdkcontext.c
index 012efe615..df635c7ff 100644
--- a/sys/msdk/gstmsdkcontext.c
+++ b/sys/msdk/gstmsdkcontext.c
@@ -34,6 +34,7 @@
#ifndef _WIN32
#include <fcntl.h>
#include <unistd.h>
+#include <xf86drm.h>
#include <va/va_drm.h>
#include <gudev/gudev.h>
#endif
@@ -76,6 +77,31 @@ get_device_id (void)
const gchar *devnode_path;
const gchar *devnode_files[2] = { "renderD[0-9]*", "card[0-9]*" };
int fd = -1, i;
+ const gchar *user_choice = g_getenv ("GST_MSDK_DRM_DEVICE");
+
+ if (user_choice) {
+ if (g_str_has_prefix (user_choice, "/dev/dri/"))
+ fd = open (user_choice, O_RDWR | O_CLOEXEC);
+
+ if (fd >= 0) {
+ drmVersionPtr drm_version = drmGetVersion (fd);
+
+ if (!drm_version || strncmp (drm_version->name, "i915", 4)) {
+ GST_WARNING ("The specified device isn't an Intel device, "
+ "use the default device instead");
+ drmFreeVersion (drm_version);
+ close (fd);
+ fd = -1;
+ } else {
+ GST_DEBUG ("Opened the specified drm device %s", user_choice);
+ drmFreeVersion (drm_version);
+ return fd;
+ }
+ } else {
+ GST_WARNING ("The specified device isn't a valid drm device, "
+ "use the default device instead");
+ }
+ }
client = g_udev_client_new (NULL);
if (!client)
diff --git a/sys/msdk/meson.build b/sys/msdk/meson.build
index 2c817b62f..98570e5ba 100644
--- a/sys/msdk/meson.build
+++ b/sys/msdk/meson.build
@@ -124,8 +124,9 @@ else
libva_dep = dependency('libva-drm', required: get_option('msdk'))
libdl_dep = cc.find_library('dl', required: get_option('msdk'))
libgudev_dep = dependency('gudev-1.0', required: get_option('msdk'))
- msdk_deps = declare_dependency(dependencies: [libva_dep, libdl_dep, libgudev_dep])
- msdk_deps_found = libva_dep.found() and libdl_dep.found() and libgudev_dep.found()
+ libdrm_dep = dependency('libdrm', required: get_option('msdk'))
+ msdk_deps = declare_dependency(dependencies: [libva_dep, libdl_dep, libgudev_dep, libdrm_dep])
+ msdk_deps_found = libva_dep.found() and libdl_dep.found() and libgudev_dep.found() and libdrm_dep.found()
endif
if msdk_deps_found