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>
This commit is contained in:
Haihao Xiang 2021-01-12 15:33:49 +08:00
parent e15be4cf0f
commit 54091d0290
2 changed files with 29 additions and 2 deletions

View file

@ -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)

View file

@ -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