Blob Blame History Raw
From f36a392a969a0b3045f2832495fc1ccfd4bf90e5 Mon Sep 17 00:00:00 2001
From: "Xiang, Haihao" <haihao.xiang@intel.com>
Date: Fri, 23 Jun 2017 09:13:01 +0800
Subject: [PATCH 01/02] vainfo: add an option "--device" to specify a drm
 device

This option is only available when the drm display is specified in the
command line

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
---
 common/va_display.c     | 24 ++++++++++++++++++++++++
 common/va_display_drm.c | 21 +++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/common/va_display.c b/common/va_display.c
index 68aa43f..30a25ae 100644
--- a/common/va_display.c
+++ b/common/va_display.c
@@ -56,6 +56,7 @@ static const VADisplayHooks *g_display_hooks_available[] = {
 };
 
 static const char *g_display_name;
+const char *g_drm_device_name;
 
 static const char *
 get_display_name(int argc, char *argv[])
@@ -76,6 +77,25 @@ get_display_name(int argc, char *argv[])
     return display_name;
 }
 
+static const char *
+get_drm_device_name(int argc, char *argv[])
+{
+    const char *device_name = NULL;
+    int i;
+
+    for (i = 1; i < argc; i++) {
+        if (argv[i] && (strcmp(argv[i], "--device") != 0))
+            continue;
+        argv[i] = NULL;
+
+        if (++i < argc) {
+            device_name = argv[i];
+            argv[i] = NULL;
+        }
+    }
+    return device_name;
+}
+
 static void
 print_display_names(void)
 {
@@ -104,6 +124,7 @@ void
 va_init_display_args(int *argc, char *argv[])
 {
     const char *display_name;
+    const char *device_name;
 
     display_name = get_display_name(*argc, argv);
     if (display_name && strcmp(display_name, "help") == 0) {
@@ -112,6 +133,9 @@ va_init_display_args(int *argc, char *argv[])
     }
     g_display_name = display_name;
 
+    if (g_display_name && strcmp(g_display_name, "drm") == 0)
+        g_drm_device_name = get_drm_device_name(*argc, argv);
+
     sanitize_args(argc, argv);
 }
 
diff --git a/common/va_display_drm.c b/common/va_display_drm.c
index b6394cd..4d9c656 100644
--- a/common/va_display_drm.c
+++ b/common/va_display_drm.c
@@ -23,6 +23,7 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
 #ifdef IN_LIBVA
@@ -33,6 +34,7 @@
 #include "va_display.h"
 
 static int drm_fd = -1;
+extern const char *g_drm_device_name;
 
 static VADisplay
 va_open_display_drm(void)
@@ -46,6 +48,25 @@ va_open_display_drm(void)
         NULL
     };
 
+    if (g_drm_device_name) {
+        drm_fd = open(g_drm_device_name, O_RDWR);
+        if (drm_fd < 0) {
+            printf("Failed to open the given device!\n");
+            exit(1);
+            return NULL;
+        }
+
+        va_dpy = vaGetDisplayDRM(drm_fd);
+        if (va_dpy)
+            return va_dpy;
+
+        printf("Failed to a DRM display for the given device\n");
+        close(drm_fd);
+        drm_fd = -1;
+        exit(1);
+        return NULL;
+    }
+
     for (i = 0; drm_device_paths[i]; i++) {
         drm_fd = open(drm_device_paths[i], O_RDWR);
         if (drm_fd < 0)
-- 
2.13.6