[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