diff options
author | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-07-10 15:58:31 +0200 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-07-13 13:44:31 +0200 |
commit | 655d52c3256397b0ed81db83e1af075248dab052 (patch) | |
tree | 2129ce1f5f6fd62db9917799e8c5661e642f43d8 | |
parent | 6f862a108a336003afc2f2c56c7983ad3187a436 (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.c | 74 | ||||
-rw-r--r-- | test/common/va_display.h | 4 | ||||
-rw-r--r-- | test/common/va_display_android.cpp | 1 | ||||
-rw-r--r-- | test/common/va_display_x11.c | 1 | ||||
-rw-r--r-- | test/decode/loadjpeg.c | 3 | ||||
-rw-r--r-- | test/decode/mpeg2vldemo.cpp | 2 |
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; |