diff options
author | Haihao Xiang <haihao.xiang@intel.com> | 2021-01-12 15:33:49 +0800 |
---|---|---|
committer | Haihao Xiang <haihao.xiang@intel.com> | 2021-02-24 04:40:14 +0000 |
commit | 54091d0290a8a4c8ae662978e6e9f51c2f515f43 (patch) | |
tree | aa17bfe488c7891b5f6eddac24e8e2393702e907 /sys | |
parent | e15be4cf0fd686ad1bdcb31421c2c88a1703aeac (diff) | |
download | gstreamer-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.c | 26 | ||||
-rw-r--r-- | sys/msdk/meson.build | 5 |
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 |