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

Gwenole Beauchesne gb.devel at gmail.com
Tue Jul 10 09:16:03 PDT 2012


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();
+    }
+    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);
+    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 3fa39c1..40d364a 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;
 }
-- 
1.7.9.5



More information about the Libva mailing list