summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-07-10 15:58:31 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-07-13 13:44:31 +0200
commit655d52c3256397b0ed81db83e1af075248dab052 (patch)
tree2129ce1f5f6fd62db9917799e8c5661e642f43d8
parent6f862a108a336003afc2f2c56c7983ad3187a436 (diff)
tests: allow selection of display.
Make it possible to select display for test applications that need to render the decoded surfaces. Usage: --display <name> args. Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
-rw-r--r--test/common/va_display.c74
-rw-r--r--test/common/va_display.h4
-rw-r--r--test/common/va_display_android.cpp1
-rw-r--r--test/common/va_display_x11.c1
-rw-r--r--test/decode/loadjpeg.c3
-rw-r--r--test/decode/mpeg2vldemo.cpp2
6 files changed, 85 insertions, 0 deletions
diff --git a/test/common/va_display.c b/test/common/va_display.c
index 7a4e563..80955a5 100644
--- a/test/common/va_display.c
+++ b/test/common/va_display.c
@@ -25,7 +25,10 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include <stdio.h>
+#include <stdlib.h>
#include <stddef.h>
+#include <string.h>
#include <va/va.h>
#include "va_display.h"
@@ -42,6 +45,66 @@ static const VADisplayHooks *g_display_hooks_available[] = {
NULL
};
+static const char *g_display_name;
+
+static const char *
+get_display_name(int argc, char *argv[])
+{
+ const char *display_name = NULL;
+ int i;
+
+ for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--display") != 0)
+ continue;
+ argv[i] = NULL;
+
+ if (++i < argc) {
+ display_name = argv[i];
+ argv[i] = NULL;
+ }
+ }
+ return display_name;
+}
+
+static void
+print_display_names(void)
+{
+ const VADisplayHooks **h;
+
+ printf("Available displays:\n");
+ for (h = g_display_hooks_available; *h != NULL; h++)
+ printf(" %s\n", (*h)->name);
+}
+
+static void
+sanitize_args(int *argc, char *argv[])
+{
+ char **out_args = argv;
+ int i, n = *argc;
+
+ for (i = 0; i < n; i++) {
+ if (argv[i])
+ *out_args++ = argv[i];
+ }
+ *out_args = NULL;
+ *argc = out_args - argv;
+}
+
+void
+va_init_display_args(int *argc, char *argv[])
+{
+ const char *display_name;
+
+ display_name = get_display_name(*argc, argv);
+ if (display_name && strcmp(display_name, "help") == 0) {
+ print_display_names();
+ exit(0);
+ }
+ g_display_name = display_name;
+
+ sanitize_args(argc, argv);
+}
+
VADisplay
va_open_display(void)
{
@@ -50,10 +113,21 @@ va_open_display(void)
for (i = 0; !va_dpy && g_display_hooks_available[i]; i++) {
g_display_hooks = g_display_hooks_available[i];
+ if (g_display_name &&
+ strcmp(g_display_name, g_display_hooks->name) != 0)
+ continue;
if (!g_display_hooks->open_display)
continue;
va_dpy = g_display_hooks->open_display();
}
+
+ if (!va_dpy) {
+ fprintf(stderr, "error: failed to initialize display");
+ if (g_display_name)
+ fprintf(stderr, " '%s'", g_display_name);
+ fprintf(stderr, "\n");
+ abort();
+ }
return va_dpy;
}
diff --git a/test/common/va_display.h b/test/common/va_display.h
index 12992f5..4ed33e0 100644
--- a/test/common/va_display.h
+++ b/test/common/va_display.h
@@ -32,6 +32,7 @@ extern "C" {
#endif
typedef struct {
+ const char *name;
VADisplay (*open_display) (void);
void (*close_display) (VADisplay va_dpy);
VAStatus (*put_surface) (VADisplay va_dpy, VASurfaceID surface,
@@ -39,6 +40,9 @@ typedef struct {
const VARectangle *dst_rect);
} VADisplayHooks;
+void
+va_init_display_args(int *argc, char *argv[]);
+
VADisplay
va_open_display(void);
diff --git a/test/common/va_display_android.cpp b/test/common/va_display_android.cpp
index 77bdc1d..1e45ae9 100644
--- a/test/common/va_display_android.cpp
+++ b/test/common/va_display_android.cpp
@@ -85,6 +85,7 @@ va_put_surface_android(
extern "C"
const VADisplayHooks va_display_hooks_android = {
+ "android",
va_open_display_android,
va_close_display_android,
va_put_surface_android
diff --git a/test/common/va_display_x11.c b/test/common/va_display_x11.c
index de252a7..336bf86 100644
--- a/test/common/va_display_x11.c
+++ b/test/common/va_display_x11.c
@@ -132,6 +132,7 @@ va_put_surface_x11(
}
const VADisplayHooks va_display_hooks_x11 = {
+ "x11",
va_open_display_x11,
va_close_display_x11,
va_put_surface_x11,
diff --git a/test/decode/loadjpeg.c b/test/decode/loadjpeg.c
index 6258e28..7a9a235 100644
--- a/test/decode/loadjpeg.c
+++ b/test/decode/loadjpeg.c
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#include "va_display.h"
static void exitmessage(const char *message) __attribute__((noreturn));
static void exitmessage(const char *message)
@@ -114,6 +115,8 @@ int main(int argc, char *argv[])
unsigned int duration;
int current_argument;
+ va_init_display_args(&argc, argv);
+
if (argc < 2)
usage();
diff --git a/test/decode/mpeg2vldemo.cpp b/test/decode/mpeg2vldemo.cpp
index fa7928d..715ea49 100644
--- a/test/decode/mpeg2vldemo.cpp
+++ b/test/decode/mpeg2vldemo.cpp
@@ -150,6 +150,8 @@ int main(int argc,char **argv)
VAStatus va_status;
int putsurface=0;
+ va_init_display_args(&argc, argv);
+
if (argc > 1)
putsurface=1;