summaryrefslogtreecommitdiff
path: root/gst-libs/gst/vaapi/gstvaapidisplay_drm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/vaapi/gstvaapidisplay_drm.c')
-rw-r--r--gst-libs/gst/vaapi/gstvaapidisplay_drm.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapidisplay_drm.c b/gst-libs/gst/vaapi/gstvaapidisplay_drm.c
index d575ffd9..7f4d3996 100644
--- a/gst-libs/gst/vaapi/gstvaapidisplay_drm.c
+++ b/gst-libs/gst/vaapi/gstvaapidisplay_drm.c
@@ -337,15 +337,27 @@ GstVaapiDisplay *
gst_vaapi_display_drm_new (const gchar * device_path)
{
GstVaapiDisplay *display;
- guint types[2], i, num_types = 0;
+ guint types[3], i, num_types = 0;
+ gpointer device_paths[3];
g_mutex_lock (&g_drm_device_type_lock);
- if (device_path)
+ if (device_path) {
+ device_paths[num_types] = (gpointer) device_path;
types[num_types++] = 0;
- else if (g_drm_device_type)
+ } else if (g_drm_device_type) {
+ device_paths[num_types] = (gpointer) device_path;
types[num_types++] = g_drm_device_type;
- else {
+ } else {
+ const gchar *user_choice = g_getenv ("GST_VAAPI_DRM_DEVICE");
+
+ if (user_choice && g_str_has_prefix (user_choice, "/dev/dri/")) {
+ device_paths[num_types] = (gpointer) user_choice;
+ types[num_types++] = 0;
+ }
+
+ device_paths[num_types] = (gpointer) device_path;
types[num_types++] = DRM_DEVICE_RENDERNODES;
+ device_paths[num_types] = (gpointer) device_path;
types[num_types++] = DRM_DEVICE_LEGACY;
}
@@ -353,7 +365,7 @@ gst_vaapi_display_drm_new (const gchar * device_path)
g_drm_device_type = types[i];
display = g_object_new (GST_TYPE_VAAPI_DISPLAY_DRM, NULL);
display = gst_vaapi_display_config (display,
- GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) device_path);
+ GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, device_paths[i]);
if (display || device_path)
break;
}