On Mon, 2012-07-02 at 18:25 +0200, Gwenole Beauchesne wrote: > Signed-off-by: Gwenole Beauchesne <gwenole.beauche...@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; > } _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva