[Libva] [PATCH 3/3] tests: allow selection of display.

Xiang, Haihao haihao.xiang at intel.com
Thu Jul 12 20:11:14 PDT 2012


On Tue, 2012-07-10 at 18:16 +0200, Gwenole Beauchesne wrote: 
> Make it possible to select display for test applications that need
> to render the decoded surfaces. Usage: --display <name> args.

Usually a X client also uses --display to specify a X display, so it is
easy to confuse the user on X11, at least for me. At first glance, I
thought it was used to set a X display too. In addition, a user doesn't
know what is a valid display name unless he(she) reviews the code, so
could you add a function to print out the usage of --display and list
all valid displays ?

Thanks
Haihao

> 
> Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
> ---
>  test/common/va_display.c           |   56 ++++++++++++++++++++++++++++++++++++
>  test/common/va_display.h           |    4 +++
>  test/common/va_display_android.cpp |    1 +
>  test/common/va_display_x11.c       |    1 +
>  test/decode/loadjpeg.c             |    3 ++
>  test/decode/mpeg2vldemo.cpp        |    2 ++
>  6 files changed, 67 insertions(+)
> 
> diff --git a/test/common/va_display.c b/test/common/va_display.c
> index 9b20591..47928fb 100644
> --- a/test/common/va_display.c
> +++ b/test/common/va_display.c
> @@ -23,7 +23,10 @@
>   */
>  
>  #include "config.h"
> +#include <stdio.h>
> +#include <stdlib.h>
>  #include <stddef.h>
> +#include <string.h>
>  #include <va/va.h>
>  #include "va_display.h"
>  
> @@ -40,6 +43,48 @@ 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
> +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[])
> +{
> +    g_display_name = get_display_name(*argc, argv);
> +    sanitize_args(argc, argv);
> +}
> +
>  VADisplay
>  va_open_display(void)
>  {
> @@ -48,10 +93,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 33b510d..23630d7 100644
> --- a/test/common/va_display_android.cpp
> +++ b/test/common/va_display_android.cpp
> @@ -84,6 +84,7 @@ va_put_surface_android(
>  }
>  
>  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 6f22821..65ea60e 100644
> --- a/test/common/va_display_x11.c
> +++ b/test/common/va_display_x11.c
> @@ -110,6 +110,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;
>      




More information about the Libva mailing list