[Libva] [PATCH 1/5] tests: simplify VA display construction.

Xiang, Haihao haihao.xiang at intel.com
Wed Jul 4 19:50:07 PDT 2012


On Mon, 2012-07-02 at 18:25 +0200, Gwenole Beauchesne wrote: 
> Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
> ---
>  configure.ac                       |    2 +
>  test/Makefile.am                   |    2 +-
>  test/common/Makefile.am            |   48 +++++++++++++++
>  test/common/va_display.c           |   82 +++++++++++++++++++++++++
>  test/common/va_display.h           |   60 +++++++++++++++++++
>  test/common/va_display_android.cpp |   90 ++++++++++++++++++++++++++++
>  test/common/va_display_x11.c       |  116 ++++++++++++++++++++++++++++++++++++
>  test/decode/Android.mk             |    4 +-
>  test/decode/Makefile.am            |   28 +++++++--
>  test/decode/mpeg2vldemo.cpp        |   81 +++++--------------------
>  test/decode/tinyjpeg.c             |   38 ++++--------
>  test/vainfo/Android.mk             |    4 +-
>  test/vainfo/Makefile.am            |   26 +++++---
>  test/vainfo/vainfo.c               |   25 +-------
>  14 files changed, 477 insertions(+), 129 deletions(-)
>  create mode 100644 test/common/Makefile.am
>  create mode 100644 test/common/va_display.c
>  create mode 100644 test/common/va_display.h
>  create mode 100644 test/common/va_display_android.cpp
>  create mode 100644 test/common/va_display_x11.c
> 
> diff --git a/configure.ac b/configure.ac
> index 5969c5a..a706c35 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -149,6 +149,7 @@ AC_DISABLE_STATIC
>  AC_PROG_LIBTOOL
>  AC_PROG_CC
>  AC_PROG_CXX
> +AM_PROG_CC_C_O
>  
>  AC_HEADER_STDC
>  AC_SYS_LARGEFILE
> @@ -246,6 +247,7 @@ AC_OUTPUT([
>      pkgconfig/libva.pc
>      test/Makefile
>      test/basic/Makefile
> +    test/common/Makefile
>      test/decode/Makefile
>      test/encode/Makefile
>      test/putsurface/Makefile
> diff --git a/test/Makefile.am b/test/Makefile.am
> index ad95136..ae3805f 100644
> --- a/test/Makefile.am
> +++ b/test/Makefile.am
> @@ -23,6 +23,6 @@
>  
>  AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/test/basic -I$(top_srcdir)/src/x11
>  
> -SUBDIRS = basic decode encode putsurface vainfo transcode
> +SUBDIRS = common basic decode encode putsurface vainfo transcode
>  
>  EXTRA_DIST = loadsurface.h loadsurface_yuv.h
> diff --git a/test/common/Makefile.am b/test/common/Makefile.am
> new file mode 100644
> index 0000000..c348fd7
> --- /dev/null
> +++ b/test/common/Makefile.am
> @@ -0,0 +1,48 @@
> +# Copyright (c) 2012 Intel Corporation. All Rights Reserved.
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the
> +# "Software"), to deal in the Software without restriction, including
> +# without limitation the rights to use, copy, modify, merge, publish,
> +# distribute, sub license, and/or sell copies of the Software, and to
> +# permit persons to whom the Software is furnished to do so, subject to
> +# the following conditions:
> +# 
> +# The above copyright notice and this permission notice (including the
> +# next paragraph) shall be included in all copies or substantial portions
> +# of the Software.
> +# 
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> +
> +noinst_LTLIBRARIES = libva-display.la
> +
> +libva_display_cflags = \
> +	-I$(top_srcdir)				\
> +	-I$(top_builddir)			\
> +	$(NULL)
> +
> +libva_display_libs = \
> +	$(top_builddir)/va/$(libvacorelib)	\
> +	$(top_builddir)/va/$(libvabackendlib)	\
> +	$(NULL)
> +
> +source_c		= va_display.c
> +source_h		= va_display.h
> +
> +source_c		+= va_display_x11.c
> +libva_display_cflags	+= $(X11_CFLAGS)
> +libva_display_libs	+= $(X11_LIBS)
> +
> +libva_display_la_SOURCES= $(source_c)
> +noinst_HEADERS		= $(source_h)
> +libva_display_la_CFLAGS	= $(libva_display_cflags)
> +libva_display_la_LIBADD	= $(libva_display_libs)
> +
> +# Extra clean files so that maintainer-clean removes *everything*
> +MAINTAINERCLEANFILES = Makefile.in
> diff --git a/test/common/va_display.c b/test/common/va_display.c
> new file mode 100644
> index 0000000..9b20591
> --- /dev/null
> +++ b/test/common/va_display.c
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + * 
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + * 
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include "config.h"
> +#include <stddef.h>
> +#include <va/va.h>
> +#include "va_display.h"
> +
> +extern const VADisplayHooks va_display_hooks_android;
> +extern const VADisplayHooks va_display_hooks_x11;
> +
> +static const VADisplayHooks *g_display_hooks;
> +static const VADisplayHooks *g_display_hooks_available[] = {
> +#ifdef ANDROID
> +    &va_display_hooks_android,
> +#else
> +    &va_display_hooks_x11,
> +#endif
> +    NULL
> +};
> +
> +VADisplay
> +va_open_display(void)
> +{
> +    VADisplay va_dpy = NULL;
> +    unsigned int i;
> +
> +    for (i = 0; !va_dpy && g_display_hooks_available[i]; i++) {
> +        g_display_hooks = g_display_hooks_available[i];
> +        if (!g_display_hooks->open_display)
> +            continue;
> +        va_dpy = g_display_hooks->open_display();

If there are two or above valid displays, is there a way to use the
second display ?


> +    }
> +    return va_dpy;
> +}
> +
> +void
> +va_close_display(VADisplay va_dpy)
> +{
> +    if (!va_dpy)
> +        return;
> +
> +    if (g_display_hooks && g_display_hooks->close_display)
> +        g_display_hooks->close_display(va_dpy);
> +}
> +
> +VAStatus
> +va_put_surface(
> +    VADisplay          va_dpy,
> +    VASurfaceID        surface,
> +    const VARectangle *src_rect,
> +    const VARectangle *dst_rect
> +)
> +{
> +    if (!va_dpy)
> +        return VA_STATUS_ERROR_INVALID_DISPLAY;
> +
> +    if (g_display_hooks && g_display_hooks->put_surface)
> +        return g_display_hooks->put_surface(va_dpy, surface, src_rect, dst_rect);
> +    return VA_STATUS_ERROR_UNIMPLEMENTED;
> +}
> diff --git a/test/common/va_display.h b/test/common/va_display.h
> new file mode 100644
> index 0000000..12992f5
> --- /dev/null
> +++ b/test/common/va_display.h
> @@ -0,0 +1,60 @@
> +/*
> + * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + * 
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + * 
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#ifndef VA_DISPLAY_H
> +#define VA_DISPLAY_H
> +
> +#include <va/va.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +typedef struct {
> +    VADisplay (*open_display)   (void);
> +    void      (*close_display)  (VADisplay va_dpy);
> +    VAStatus  (*put_surface)    (VADisplay va_dpy, VASurfaceID surface,
> +                                 const VARectangle *src_rect,
> +                                 const VARectangle *dst_rect);
> +} VADisplayHooks;
> +
> +VADisplay
> +va_open_display(void);
> +
> +void
> +va_close_display(VADisplay va_dpy);
> +
> +VAStatus
> +va_put_surface(
> +    VADisplay          va_dpy,
> +    VASurfaceID        surface,
> +    const VARectangle *src_rect,
> +    const VARectangle *dst_rect
> +);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* VA_DISPLAY_H */
> diff --git a/test/common/va_display_android.cpp b/test/common/va_display_android.cpp
> new file mode 100644
> index 0000000..33b510d
> --- /dev/null
> +++ b/test/common/va_display_android.cpp
> @@ -0,0 +1,90 @@
> +/*
> + * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + * 
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + * 
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include <va/va_android.h>
> +#include "va_display.h"
> +
> +#include <binder/IPCThreadState.h>
> +#include <binder/ProcessState.h>
> +#include <binder/IServiceManager.h>
> +#include <utils/Log.h>
> +#include <surfaceflinger/ISurfaceComposer.h>
> +#include <surfaceflinger/Surface.h>
> +#include <surfaceflinger/ISurface.h>
> +#include <surfaceflinger/SurfaceComposerClient.h>
> +#include <binder/MemoryHeapBase.h>
> +
> +static unsigned int fake_display = 0xdeada01d;
> +
> +using namespace android;
> +sp<SurfaceComposerClient> client;
> +sp<Surface> android_surface;
> +sp<ISurface> android_isurface;
> +sp<SurfaceControl> surface_ctrl;
> +#include "../android_winsys.cpp"
> +
> +static VADisplay
> +va_open_display_android(void)
> +{
> +    return vaGetDisplay(&fake_display);
> +}
> +
> +static void
> +va_close_display_android(VADisplay va_dpy)
> +{
> +}
> +
> +static VAStatus
> +va_put_surface_android(
> +    VADisplay          va_dpy,
> +    VASurfaceID        surface,
> +    const VARectangle *src_rect,
> +    const VARectangle *dst_rect
> +)
> +{
> +    sp<ProcessState> proc(ProcessState::self());
> +    ProcessState::self()->startThreadPool();
> +
> +    printf("Create window0 for thread0\n");
> +    SURFACE_CREATE(
> +        client,
> +        surface_ctrl,
> +        android_surface,
> +        android_isurface,
> +        dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height);
> +
> +    return vaPutSurface(va_dpy, surface, android_isurface,
> +                        src_rect->x, src_rect->y,
> +                        src_rect->width, src_rect->height,
> +                        dst_rect->x, dst_rect->y,
> +                        dst_rect->width, dst_rect->height,
> +                        NULL, 0,
> +                        VA_FRAME_PICTURE);
> +}
> +
> +const VADisplayHooks va_display_hooks_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
> new file mode 100644
> index 0000000..6f22821
> --- /dev/null
> +++ b/test/common/va_display_x11.c
> @@ -0,0 +1,116 @@
> +/*
> + * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + * 
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + * 
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +#include <stdio.h>
> +#include <va/va_x11.h>
> +#include "va_display.h"
> +
> +static Display *x11_display;
> +static Window   x11_window;
> +
> +static VADisplay
> +va_open_display_x11(void)
> +{
> +    x11_display = XOpenDisplay(NULL);

So a user must set the DISPLAY environment variable, is that right ?

> +    if (!x11_display) {
> +        fprintf(stderr, "error: can't connect to X server!\n");
> +        return NULL;
> +    }
> +    return vaGetDisplay(x11_display);
> +}
> +
> +static void
> +va_close_display_x11(VADisplay va_dpy)
> +{
> +    if (!x11_display)
> +        return;
> +
> +    if (x11_window) {
> +        XUnmapWindow(x11_display, x11_window);
> +        XDestroyWindow(x11_display, x11_window);
> +        x11_window = None;
> +    }
> +    XCloseDisplay(x11_display);
> +    x11_display = NULL;
> +}
> +
> +static int
> +ensure_window(unsigned int width, unsigned int height)
> +{
> +    Window win, rootwin;
> +    unsigned int black_pixel, white_pixel;
> +    int screen;
> +
> +    if (!x11_display)
> +        return 0;
> +
> +    if (x11_window) {
> +        XResizeWindow(x11_display, x11_window, width, height);
> +        return 1;
> +    }
> +
> +    screen      = DefaultScreen(x11_display);
> +    rootwin     = RootWindow(x11_display, screen);
> +    black_pixel = BlackPixel(x11_display, screen);
> +    white_pixel = WhitePixel(x11_display, screen);
> +
> +    win = XCreateSimpleWindow(
> +        x11_display,
> +        rootwin,
> +        0, 0, width, height,
> +        1, black_pixel, white_pixel
> +    );
> +    if (!win)
> +        return 0;
> +    x11_window = win;
> +
> +    XMapWindow(x11_display, x11_window);
> +    XSync(x11_display, False);
> +    return 1;
> +}
> +
> +static VAStatus
> +va_put_surface_x11(
> +    VADisplay          va_dpy,
> +    VASurfaceID        surface,
> +    const VARectangle *src_rect,
> +    const VARectangle *dst_rect
> +)
> +{
> +    if (!ensure_window(dst_rect->width, dst_rect->height))
> +        return VA_STATUS_ERROR_ALLOCATION_FAILED;
> +    return vaPutSurface(va_dpy, surface, x11_window,
> +                        src_rect->x, src_rect->y,
> +                        src_rect->width, src_rect->height,
> +                        dst_rect->x, dst_rect->y,
> +                        dst_rect->width, dst_rect->height,
> +                        NULL, 0,
> +                        VA_FRAME_PICTURE);
> +}
> +
> +const VADisplayHooks va_display_hooks_x11 = {
> +    va_open_display_x11,
> +    va_close_display_x11,
> +    va_put_surface_x11,
> +};
> diff --git a/test/decode/Android.mk b/test/decode/Android.mk
> index 3541ee2..cbbd007 100755
> --- a/test/decode/Android.mk
> +++ b/test/decode/Android.mk
> @@ -6,7 +6,9 @@ LOCAL_PATH:= $(call my-dir)
>  include $(CLEAR_VARS)
>  
>  LOCAL_SRC_FILES := \
> -  mpeg2vldemo.cpp	\
> +	mpeg2vldemo.cpp		\
> +	../common/va_display.c	\
> +	../common/va_display_android.cpp
>  
>  LOCAL_CFLAGS += \
>      -DANDROID  
> diff --git a/test/decode/Makefile.am b/test/decode/Makefile.am
> index 918c031..477383c 100644
> --- a/test/decode/Makefile.am
> +++ b/test/decode/Makefile.am
> @@ -22,15 +22,31 @@
>  
>  bin_PROGRAMS = mpeg2vldemo loadjpeg
>  
> -INCLUDES = -I$(top_srcdir)
> +libva_helpers = \
> +	$(top_builddir)/test/common/libva-display.la	\
> +	$(NULL)
> +
> +INCLUDES = \
> +	-I$(top_srcdir)				\
> +	-I$(top_srcdir)/test/common		\
> +	$(NULL)
> +
> +TEST_LIBS = \
> +	$(top_builddir)/va/$(libvabackendlib)	\
> +	$(top_builddir)/va/$(libvacorelib)	\
> +	$(libva_helpers)			\
> +	$(NULL)
>  
> -TEST_LIBS = $(top_builddir)/va/$(libvabackendlib) $(top_builddir)/va/$(libvacorelib) -lX11
> +INCLUDES	+= $(X11_CFLAGS)
> +TEST_LIBS	+= $(X11_LIBS)
>  
> -mpeg2vldemo_LDADD = $(TEST_LIBS)
> -mpeg2vldemo_SOURCES = mpeg2vldemo.cpp
> +mpeg2vldemo_LDADD	= $(TEST_LIBS)
> +mpeg2vldemo_SOURCES	= mpeg2vldemo.cpp
> +mpeg2vldemo_DEPENDENCIES = $(libva_helpers)
>  
> -loadjpeg_LDADD = $(TEST_LIBS)
> -loadjpeg_SOURCES = loadjpeg.c tinyjpeg.c
> +loadjpeg_LDADD		= $(TEST_LIBS)
> +loadjpeg_SOURCES	= loadjpeg.c tinyjpeg.c
> +loadjpeg_DEPENDENCIES	= $(libva_helpers)
>  
>  valgrind:	$(bin_PROGRAMS)
>  	for a in $(bin_PROGRAMS); do \
> diff --git a/test/decode/mpeg2vldemo.cpp b/test/decode/mpeg2vldemo.cpp
> index 9246dfe..fa7928d 100644
> --- a/test/decode/mpeg2vldemo.cpp
> +++ b/test/decode/mpeg2vldemo.cpp
> @@ -43,30 +43,7 @@
>  #include <fcntl.h>
>  #include <assert.h>
>  #include <va/va.h>
> -
> -#ifdef ANDROID
> -#include <va/va_android.h>
> -#include <binder/IPCThreadState.h>
> -#include <binder/ProcessState.h>
> -#include <binder/IServiceManager.h>
> -#include <utils/Log.h>
> -#include <surfaceflinger/ISurfaceComposer.h>
> -#include <surfaceflinger/Surface.h>
> -#include <surfaceflinger/ISurface.h>
> -#include <surfaceflinger/SurfaceComposerClient.h>
> -#include <binder/MemoryHeapBase.h>
> -#define Display unsigned int
> -
> -using namespace android;
> -sp<SurfaceComposerClient> client;
> -sp<Surface> android_surface;
> -sp<ISurface> android_isurface;
> -sp<SurfaceControl> surface_ctrl;
> -#include "../android_winsys.cpp"
> -#else
> -#include <va/va_x11.h>
> -#include <X11/Xlib.h>
> -#endif
> +#include "va_display.h"
>  
>  #define CHECK_VASTATUS(va_status,func)                                  \
>  if (va_status != VA_STATUS_SUCCESS) {                                   \
> @@ -169,28 +146,14 @@ int main(int argc,char **argv)
>      VAContextID context_id;
>      VABufferID pic_param_buf,iqmatrix_buf,slice_param_buf,slice_data_buf;
>      int major_ver, minor_ver;
> -    Display *x11_display;
>      VADisplay	va_dpy;
>      VAStatus va_status;
>      int putsurface=0;
>  
>      if (argc > 1)
>          putsurface=1;
> -#ifdef ANDROID 
> -    x11_display = (Display*)malloc(sizeof(Display));
> -    *(x11_display ) = 0x18c34078;
> -#else
> -    x11_display = XOpenDisplay(":0.0");
> -#endif
> -
> -    if (x11_display == NULL) {
> -      fprintf(stderr, "Can't connect X server!\n");
> -      exit(-1);
> -    }
> -
> -    assert(x11_display);
>      
> -    va_dpy = vaGetDisplay(x11_display);
> +    va_dpy = va_open_display();
>      va_status = vaInitialize(va_dpy, &major_ver, &minor_ver);
>      assert(va_status == VA_STATUS_SUCCESS);
>      
> @@ -289,29 +252,20 @@ int main(int argc,char **argv)
>      CHECK_VASTATUS(va_status, "vaSyncSurface");
>  
>      if (putsurface) {
> -#ifdef ANDROID 
> -        sp<ProcessState> proc(ProcessState::self());
> -        ProcessState::self()->startThreadPool();
> +        VARectangle src_rect, dst_rect;
>  
> -        printf("Create window0 for thread0\n");
> -        SURFACE_CREATE(client,surface_ctrl,android_surface, android_isurface, 0, 0, WIN_WIDTH, WIN_HEIGHT);
> +        src_rect.x      = 0;
> +        src_rect.y      = 0;
> +        src_rect.width  = CLIP_WIDTH;
> +        src_rect.height = CLIP_HEIGHT;
>  
> -        va_status = vaPutSurface(va_dpy, surface_id, android_isurface,
> -                0,0,CLIP_WIDTH,CLIP_HEIGHT,
> -                0,0,WIN_WIDTH,WIN_HEIGHT,
> -                NULL,0,0);
> -#else
> -        Window  win;
> -        win = XCreateSimpleWindow(x11_display, RootWindow(x11_display, 0), 0, 0,
> -                WIN_WIDTH,WIN_HEIGHT, 0, 0, WhitePixel(x11_display, 0));
> -        XMapWindow(x11_display, win);
> -        XSync(x11_display, False);
> -        va_status = vaPutSurface(va_dpy, surface_id, win,
> -                                0,0,CLIP_WIDTH,CLIP_HEIGHT,
> -                                0,0,WIN_WIDTH,WIN_HEIGHT,
> -                                NULL,0,0);
> -#endif
> -       CHECK_VASTATUS(va_status, "vaPutSurface");
> +        dst_rect.x      = 0;
> +        dst_rect.y      = 0;
> +        dst_rect.width  = WIN_WIDTH;
> +        dst_rect.height = WIN_HEIGHT;
> +
> +        va_status = va_put_surface(va_dpy, surface_id, &src_rect, &dst_rect);
> +        CHECK_VASTATUS(va_status, "vaPutSurface");
>      }
>      printf("press any key to exit\n");
>      getchar();
> @@ -321,11 +275,6 @@ int main(int argc,char **argv)
>      vaDestroyContext(va_dpy,context_id);
>  
>      vaTerminate(va_dpy);
> -#ifdef ANDROID
> -    free(x11_display);
> -#else
> -    XCloseDisplay(x11_display);
> -#endif
> -    
> +    va_close_display(va_dpy);
>      return 0;
>  }
> diff --git a/test/decode/tinyjpeg.c b/test/decode/tinyjpeg.c
> index 1d3205f..bd4ade1 100644
> --- a/test/decode/tinyjpeg.c
> +++ b/test/decode/tinyjpeg.c
> @@ -49,8 +49,7 @@
>  #include <assert.h>
>  #include <va/va.h>
>  #include <va/va_dec_jpeg.h>
> -#include <va/va_x11.h>
> -#include <X11/Xlib.h>
> +#include "va_display.h"
>  
> 
>  #define cY	0
> @@ -544,23 +543,13 @@ int tinyjpeg_decode(struct jdec_private *priv)
>      VAContextID context_id;
>      VABufferID pic_param_buf,iqmatrix_buf,huffmantable_buf,slice_param_buf,slice_data_buf;
>      int major_ver, minor_ver;
> -    Display *x11_display;
>      VADisplay	va_dpy;
>      VAStatus va_status;
>      int max_h_factor, max_v_factor;
>      int putsurface=1;
>      unsigned int i, j;
>  
> -    x11_display = XOpenDisplay(":0.0");
> -
> -    if (x11_display == NULL) {
> -      fprintf(stderr, "Can't connect X server!\n");
> -      exit(-1);
> -    }
> -
> -    assert(x11_display);
> -    
> -    va_dpy = vaGetDisplay(x11_display);
> +    va_dpy = va_open_display();
>      va_status = vaInitialize(va_dpy, &major_ver, &minor_ver);
>      assert(va_status == VA_STATUS_SUCCESS);
>      
> @@ -739,16 +728,16 @@ int tinyjpeg_decode(struct jdec_private *priv)
>      CHECK_VASTATUS(va_status, "vaSyncSurface");
>  
>      if (putsurface) {
> -        Window  win;
> -        win = XCreateSimpleWindow(x11_display, RootWindow(x11_display, 0), 0, 0,
> -                priv->width,priv->height, 0, 0, WhitePixel(x11_display, 0));
> -        XMapWindow(x11_display, win);
> -        XSync(x11_display, False);
> -        va_status = vaPutSurface(va_dpy, surface_id, win,
> -                                0,0,priv->width,priv->height,
> -                                0,0,priv->width,priv->height,
> -                                NULL,0,0);
> -       CHECK_VASTATUS(va_status, "vaPutSurface");
> +        VARectangle src_rect, dst_rect;
> +
> +        src_rect.x      = 0;
> +        src_rect.y      = 0;
> +        src_rect.width  = priv->width;
> +        src_rect.height = priv->height;
> +        dst_rect        = src_rect;
> +
> +        va_status = va_put_surface(va_dpy, surface_id, &src_rect, &dst_rect);
> +        CHECK_VASTATUS(va_status, "vaPutSurface");
>      }
>      printf("press any key to exit\n");
>      getchar();
> @@ -758,8 +747,7 @@ int tinyjpeg_decode(struct jdec_private *priv)
>      vaDestroyContext(va_dpy,context_id);
>  
>      vaTerminate(va_dpy);
> -    XCloseDisplay(x11_display);
> -    
> +    va_close_display(va_dpy);
>      return 0;
>  }
>  const char *tinyjpeg_get_errorstring(struct jdec_private *priv)
> diff --git a/test/vainfo/Android.mk b/test/vainfo/Android.mk
> index 0aac2cf..91ea526 100644
> --- a/test/vainfo/Android.mk
> +++ b/test/vainfo/Android.mk
> @@ -6,7 +6,9 @@ LOCAL_PATH:= $(call my-dir)
>  include $(CLEAR_VARS)
>  
>  LOCAL_SRC_FILES := \
> -  vainfo.c
> +	vainfo.c		\
> +	../common/va_display.c	\
> +	../common/va_display_android.cpp
>  
>  LOCAL_CFLAGS += \
>    -DANDROID
> diff --git a/test/vainfo/Makefile.am b/test/vainfo/Makefile.am
> index 190aa8b..e0db1a3 100644
> --- a/test/vainfo/Makefile.am
> +++ b/test/vainfo/Makefile.am
> @@ -20,18 +20,30 @@
>  # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
>  # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>  
> -
>  bin_PROGRAMS = vainfo
>  
> -INCLUDES = \
> -	-I$(top_srcdir)					\
> -	-I$(top_srcdir)/test/basic			\
> -	-DLIBVA_VERSION_S="\"${LIBVA_VERSION}\""	\
> +libva_helpers = \
> +	$(top_builddir)/test/common/libva-display.la	\
> +	$(NULL)
> +
> +vainfo_cflags = \
> +	-I$(top_srcdir)				\
> +	-I$(top_srcdir)/test/common		\
> +	-I$(top_builddir)			\
> +	-DLIBVA_VERSION_S="\"$(LIBVA_VERSION)\"" \
>  	$(NULL)
>  
> -vainfo_LDADD = $(top_builddir)/va/$(libvacorelib) $(top_builddir)/va/$(libvabackendlib) -lX11
> +vainfo_libs = \
> +	$(top_builddir)/va/$(libvacorelib)	\
> +	$(top_builddir)/va/$(libvabackendlib)	\
> +	$(libva_helpers)			\
> +	$(NULL)
>  
> -vainfo_DEPENDENCIES =  $(top_builddir)/va/$(libvacorelib) $(top_builddir)/va/$(libvabackendlib)
> +vainfo_SOURCES		= vainfo.c
> +noinst_HEADERS		= $(source_h)
> +vainfo_CFLAGS		= $(vainfo_cflags)
> +vainfo_LDADD		= $(vainfo_libs)
> +vainfo_DEPENDENCIES	= $(libva_helpers)
>  
>  valgrind:	vainfo
>  	valgrind --leak-check=full --show-reachable=yes .libs/vainfo; 
> diff --git a/test/vainfo/vainfo.c b/test/vainfo/vainfo.c
> index c386b5e..95e8531 100644
> --- a/test/vainfo/vainfo.c
> +++ b/test/vainfo/vainfo.c
> @@ -22,18 +22,11 @@
>   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>   */
>  
> -#ifndef ANDROID
> -#include <va/va_x11.h>
> -#else
> -#include "va/va_android.h"
> -#define Display unsigned int
> -#endif
> -
>  #include <stdarg.h>
>  #include <stdio.h>
>  #include <string.h>
>  #include <stdlib.h>
> -
> +#include "va_display.h"
>  
>  #define CHECK_VASTATUS(va_status,func, ret)                             \
>  if (va_status != VA_STATUS_SUCCESS) {                                   \
> @@ -85,12 +78,10 @@ static char * entrypoint_string(VAEntrypoint entrypoint)
>  
>  int main(int argc, const char* argv[])
>  {
> -  Display *dpy;
>    VADisplay va_dpy;
>    VAStatus va_status;
>    int major_version, minor_version;
>    const char *driver;
> -  const char *display = getenv("DISPLAY");
>    const char *name = strrchr(argv[0], '/'); 
>    VAProfile profile;
>    VAEntrypoint entrypoint, entrypoints[10];
> @@ -101,18 +92,7 @@ int main(int argc, const char* argv[])
>    else
>        name = argv[0];
>  
> -#ifndef ANDROID
> -  dpy = XOpenDisplay(NULL);
> -#else
> -  dpy = (Display*)malloc(sizeof(Display));
> -#endif
> -  if (NULL == dpy)
> -  {
> -      fprintf(stderr, "%s: Error, can't open display: '%s'\n", name, display ? display : "");
> -      return 1;
> -  }
> -  
> -  va_dpy = vaGetDisplay(dpy);
> +  va_dpy = va_open_display();
>    if (NULL == va_dpy)
>    {
>        fprintf(stderr, "%s: vaGetDisplay() failed\n", name);
> @@ -145,6 +125,7 @@ int main(int argc, const char* argv[])
>    }
>    
>    vaTerminate(va_dpy);
> +  va_close_display(va_dpy);
>    
>    return 0;
>  }




More information about the Libva mailing list