summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorWaldo Bastian <waldo.bastian@intel.com>2007-12-17 14:00:17 -0800
committerWaldo Bastian <waldo.bastian@intel.com>2007-12-17 14:00:17 -0800
commit563092b87a49483b6e0da071e3416723b13ea863 (patch)
treeb81be2f16f8a9bb4c95b2623b04729030265ae08 /test
parent8de3509ff26510ef02a00fdda78c3431b4329253 (diff)
Update to libva v0.26
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am5
-rw-r--r--test/test.c18
-rw-r--r--test/test_07.c40
-rw-r--r--test/test_08.c14
-rw-r--r--test/test_09.c10
-rw-r--r--test/test_10.c55
-rw-r--r--test/test_11.c69
-rw-r--r--test/vainfo.c73
8 files changed, 231 insertions, 53 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 13bff08..c2fb501 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -23,6 +23,8 @@
check_PROGRAMS = test_01 test_02 test_03 test_04 test_05 test_06 \
test_07 test_08 test_09 test_10 test_11
+bin_PROGRAMS = vainfo
+
testdir = $(bindir)
AM_CFLAGS = -I$(top_srcdir)/../../include/external/ -I$(top_srcdir)/src
@@ -31,6 +33,9 @@ TESTS = $(check_PROGRAMS)
TEST_LIBS = ../src/libva.la
+vainfo_LDADD = ../src/libva.la
+vainfo_SOURCES = vainfo.c
+
test_01_LDADD = $(TEST_LIBS)
test_01_SOURCES = test_01.c
diff --git a/test/test.c b/test/test.c
index 70f3125..b088487 100644
--- a/test/test.c
+++ b/test/test.c
@@ -53,23 +53,23 @@ int main(int argc, const char* argv[])
printf("vaInitialize: major = %d minor = %d\n", major_version, minor_version);
{
- VASurface surfaces[21];
+ VASurfaceID surfaces[21];
int i;
- surfaces[20].surface_id = -1;
+ surfaces[20] = -1;
va_status = vaCreateSurfaces(va_dpy, 720, 480, VA_RT_FORMAT_YUV420, 20, surfaces);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( -1 == surfaces[20].surface_id ); /* bounds check */
+ ASSERT( -1 == surfaces[20] ); /* bounds check */
for(i = 0; i < 20; i++)
{
- printf("Surface %d surface_id = %08x\n", i, surfaces[i].surface_id);
+ printf("Surface %d surface_id = %08x\n", i, surfaces[i]);
}
Window win = XCreateSimpleWindow(dpy, RootWindow(dpy, 0), 0, 0, 720, 480, 0, 0, WhitePixel(dpy, 0));
printf("Window = %08x\n", win);
XMapWindow(dpy, win);
XSync(dpy, False);
- vaPutSurface(va_dpy, &(surfaces[0]), win, 0, 0, 720, 480, 0, 0, 720, 480, 0);
+ vaPutSurface(va_dpy, surfaces[0], win, 0, 0, 720, 480, 0, 0, 720, 480, 0);
sleep(10);
va_status = vaDestroySurface(va_dpy, surfaces, 20);
@@ -94,14 +94,14 @@ int main(int argc, const char* argv[])
}
{
- VASurface surfaces[20];
- VAContext context;
+ VASurfaceID surfaces[20];
+ VAContextID context;
VAConfigAttrib attrib;
VAConfigID config_id;
int i;
attrib.type = VAConfigAttribRTFormat;
- va_status = vaQueryConfigAttributes(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD,
+ va_status = vaGetConfigAttributes(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD,
&attrib, 1);
ASSERT( VA_STATUS_SUCCESS == va_status );
@@ -118,7 +118,7 @@ int main(int argc, const char* argv[])
va_status = vaCreateContext(va_dpy, config_id, 720, 480, 0 /* flag */, surfaces, 20, &context);
ASSERT( VA_STATUS_SUCCESS == va_status );
- va_status = vaDestroyContext(va_dpy, &context);
+ va_status = vaDestroyContext(va_dpy, context);
ASSERT( VA_STATUS_SUCCESS == va_status );
va_status = vaDestroySurface(va_dpy, surfaces, 20);
diff --git a/test/test_07.c b/test/test_07.c
index 3ae8f01..cb1edce 100644
--- a/test/test_07.c
+++ b/test/test_07.c
@@ -33,7 +33,7 @@ void pre()
#define DEAD_SURFACE_ID (VASurfaceID) 0xbeefdead
-void test_unique_surfaces(VASurface *surface_list1, int surface_count1, VASurface *surface_list2, int surface_count2)
+void test_unique_surfaces(VASurfaceID *surface_list1, int surface_count1, VASurfaceID *surface_list2, int surface_count2)
{
int i,j;
@@ -42,9 +42,9 @@ void test_unique_surfaces(VASurface *surface_list1, int surface_count1, VASurfac
for(j = 0; j < surface_count2; j++)
{
if ((surface_list1 == surface_list2) && (i == j)) continue;
- ASSERT(surface_list1[i].surface_id != VA_INVALID_SURFACE);
- ASSERT(surface_list2[j].surface_id != VA_INVALID_SURFACE);
- ASSERT(surface_list1[i].surface_id != surface_list2[j].surface_id);
+ ASSERT(surface_list1[i] != VA_INVALID_SURFACE);
+ ASSERT(surface_list2[j] != VA_INVALID_SURFACE);
+ ASSERT(surface_list1[i] != surface_list2[j]);
}
}
}
@@ -52,10 +52,10 @@ void test_unique_surfaces(VASurface *surface_list1, int surface_count1, VASurfac
void test()
{
- VASurface surfaces_1[1+1];
- VASurface surfaces_4[4+1];
- VASurface surfaces_16[16+1];
- VASurface surfaces_6[6+1];
+ VASurfaceID surfaces_1[1+1];
+ VASurfaceID surfaces_4[4+1];
+ VASurfaceID surfaces_16[16+1];
+ VASurfaceID surfaces_6[6+1];
memset(surfaces_1, 0xff, sizeof(surfaces_1));
memset(surfaces_4, 0xff, sizeof(surfaces_4));
@@ -63,22 +63,22 @@ void test()
memset(surfaces_6, 0xff, sizeof(surfaces_6));
status("vaCreateSurfaces 1 surface\n");
- surfaces_1[1].surface_id = DEAD_SURFACE_ID;
+ surfaces_1[1] = DEAD_SURFACE_ID;
va_status = vaCreateSurfaces(va_dpy, 352, 288, VA_RT_FORMAT_YUV420, 1, surfaces_1);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( DEAD_SURFACE_ID == surfaces_1[1].surface_id ); /* bounds check */
+ ASSERT( DEAD_SURFACE_ID == surfaces_1[1] ); /* bounds check */
status("vaCreateSurfaces 4 surfaces\n");
- surfaces_4[4].surface_id = DEAD_SURFACE_ID;
+ surfaces_4[4] = DEAD_SURFACE_ID;
va_status = vaCreateSurfaces(va_dpy, 352, 288, VA_RT_FORMAT_YUV420, 4, surfaces_4);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( DEAD_SURFACE_ID == surfaces_4[4].surface_id ); /* bounds check */
+ ASSERT( DEAD_SURFACE_ID == surfaces_4[4] ); /* bounds check */
status("vaCreateSurfaces 16 surfaces\n");
- surfaces_16[16].surface_id = DEAD_SURFACE_ID;
+ surfaces_16[16] = DEAD_SURFACE_ID;
va_status = vaCreateSurfaces(va_dpy, 352, 288, VA_RT_FORMAT_YUV420, 16, surfaces_16);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( DEAD_SURFACE_ID == surfaces_16[16].surface_id ); /* bounds check */
+ ASSERT( DEAD_SURFACE_ID == surfaces_16[16] ); /* bounds check */
test_unique_surfaces(surfaces_1, 1, surfaces_4, 4);
test_unique_surfaces(surfaces_4, 4, surfaces_16, 4);
@@ -87,29 +87,29 @@ void test()
test_unique_surfaces(surfaces_1, 16, surfaces_16, 16);
status("vaDestroySurface 4 surfaces\n");
- va_status = vaDestroySurface(va_dpy, surfaces_4, 4);
+ va_status = vaDestroySurfaces(va_dpy, surfaces_4, 4);
ASSERT( VA_STATUS_SUCCESS == va_status );
status("vaCreateSurfaces 6 surfaces\n");
- surfaces_6[6].surface_id = DEAD_SURFACE_ID;
+ surfaces_6[6] = DEAD_SURFACE_ID;
va_status = vaCreateSurfaces(va_dpy, 352, 288, VA_RT_FORMAT_YUV420, 6, surfaces_6);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( DEAD_SURFACE_ID == surfaces_6[6].surface_id ); /* bounds check */
+ ASSERT( DEAD_SURFACE_ID == surfaces_6[6] ); /* bounds check */
test_unique_surfaces(surfaces_1, 1, surfaces_6, 6);
test_unique_surfaces(surfaces_6, 6, surfaces_16, 16);
test_unique_surfaces(surfaces_1, 6, surfaces_16, 6);
status("vaDestroySurface 16 surfaces\n");
- va_status = vaDestroySurface(va_dpy, surfaces_16, 16);
+ va_status = vaDestroySurfaces(va_dpy, surfaces_16, 16);
ASSERT( VA_STATUS_SUCCESS == va_status );
status("vaDestroySurface 1 surface\n");
- va_status = vaDestroySurface(va_dpy, surfaces_1, 1);
+ va_status = vaDestroySurfaces(va_dpy, surfaces_1, 1);
ASSERT( VA_STATUS_SUCCESS == va_status );
status("vaDestroySurface 6 surfaces\n");
- va_status = vaDestroySurface(va_dpy, surfaces_6, 6);
+ va_status = vaDestroySurfaces(va_dpy, surfaces_6, 6);
ASSERT( VA_STATUS_SUCCESS == va_status );
}
diff --git a/test/test_08.c b/test/test_08.c
index ce4932d..8c743b6 100644
--- a/test/test_08.c
+++ b/test/test_08.c
@@ -33,17 +33,17 @@ void pre()
#define DEAD_SURFACE_ID (VASurfaceID) 0xbeefdead
-void test_unique_surfaces(VASurface *surface_list, int surface_count)
+void test_unique_surfaces(VASurfaceID *surface_list, int surface_count)
{
int i,j;
for(i = 0; i < surface_count; i++)
{
- ASSERT(surface_list[i].surface_id != VA_INVALID_SURFACE);
+ ASSERT(surface_list[i] != VA_INVALID_SURFACE);
for(j = 0; j < i; j++)
{
if (i == j) continue;
- ASSERT(surface_list[i].surface_id != surface_list[j].surface_id);
+ ASSERT(surface_list[i] != surface_list[j]);
}
}
}
@@ -65,7 +65,7 @@ test_size_t test_sizes[] = {
void test()
{
- VASurface surfaces[NUM_SIZES+1];
+ VASurfaceID surfaces[NUM_SIZES+1];
int i;
memset(surfaces, 0xff, sizeof(surfaces));
@@ -73,16 +73,16 @@ void test()
for(i = 0; i < NUM_SIZES; i++)
{
status("vaCreateSurfaces create %dx%d surface\n", test_sizes[i].w, test_sizes[i].h);
- surfaces[i+1].surface_id = DEAD_SURFACE_ID;
+ surfaces[i+1] = DEAD_SURFACE_ID;
va_status = vaCreateSurfaces(va_dpy, test_sizes[i].w, test_sizes[i].h, VA_RT_FORMAT_YUV420, 1, &surfaces[i]);
ASSERT( VA_STATUS_SUCCESS == va_status );
- ASSERT( DEAD_SURFACE_ID == surfaces[i+1].surface_id );
+ ASSERT( DEAD_SURFACE_ID == surfaces[i+1] );
}
test_unique_surfaces(surfaces, NUM_SIZES);
status("vaDestroySurface all surfaces\n");
- va_status = vaDestroySurface(va_dpy, surfaces, NUM_SIZES);
+ va_status = vaDestroySurfaces(va_dpy, surfaces, NUM_SIZES);
ASSERT( VA_STATUS_SUCCESS == va_status );
}
diff --git a/test/test_09.c b/test/test_09.c
index c3d5b18..7d6cd4b 100644
--- a/test/test_09.c
+++ b/test/test_09.c
@@ -44,7 +44,7 @@ void test()
ASSERT(entrypoints);
VAConfigID *configs = malloc(max_entrypoints * num_profiles * sizeof(VAConfigID));
- VAContext *contexts = malloc(max_entrypoints * num_profiles * sizeof(VAContext));
+ VAContextID *contexts = malloc(max_entrypoints * num_profiles * sizeof(VAContextID));
for(i = 0; i < num_profiles; i++)
{
@@ -66,7 +66,7 @@ void test()
int surface_count = 4;
int total_surfaces = config_count * surface_count;
- VASurface *surfaces = malloc(total_surfaces * sizeof(VASurface));
+ VASurfaceID *surfaces = malloc(total_surfaces * sizeof(VASurfaceID));
// TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config
va_status = vaCreateSurfaces(va_dpy, width, height, VA_RT_FORMAT_YUV420, total_surfaces, surfaces);
@@ -82,8 +82,8 @@ void test()
for(i = 0; i < config_count; i++)
{
- status("vaDestroyContext for context %08x\n", contexts[i].context_id);
- va_status = vaDestroyContext( va_dpy, &contexts[i] );
+ status("vaDestroyContext for context %08x\n", contexts[i]);
+ va_status = vaDestroyContext( va_dpy, contexts[i] );
ASSERT( VA_STATUS_SUCCESS == va_status );
}
@@ -94,7 +94,7 @@ void test()
ASSERT( VA_STATUS_SUCCESS == va_status );
}
- va_status = vaDestroySurface(va_dpy, surfaces, total_surfaces);
+ va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces);
ASSERT( VA_STATUS_SUCCESS == va_status );
free(contexts);
diff --git a/test/test_10.c b/test/test_10.c
index 3158184..6a7b978 100644
--- a/test/test_10.c
+++ b/test/test_10.c
@@ -26,9 +26,34 @@
#include "test_common.c"
+VAConfigID config;
+VAContextID context;
+VASurfaceID *surfaces;
+int total_surfaces;
+
void pre()
{
test_init();
+
+ va_status = vaCreateConfig(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, NULL, 0, &config);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+ status("vaCreateConfig returns %08x\n", config);
+
+ int width = 352;
+ int height = 288;
+ int surface_count = 4;
+ total_surfaces = surface_count;
+
+ surfaces = malloc(total_surfaces * sizeof(VASurfaceID));
+
+ // TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config
+ va_status = vaCreateSurfaces(va_dpy, width, height, VA_RT_FORMAT_YUV420, total_surfaces, surfaces);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ status("vaCreateContext with config %08x\n", config);
+ int flags = 0;
+ va_status = vaCreateContext( va_dpy, config, width, height, flags, surfaces, surface_count, &context );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
}
void test_unique_buffers(VABufferID *buffer_list, int buffer_count)
@@ -55,9 +80,22 @@ VABufferType buffer_types[] =
VAMacroblockParameterBufferType,
VAResidualDataBufferType,
VADeblockingParameterBufferType,
- VAImageBufferType
};
+unsigned int buffer_sizes[] =
+{
+ sizeof(VAPictureParameterBufferMPEG4),
+ sizeof(VAIQMatrixBufferH264),
+ 32*1024,
+ 48*1024,
+ sizeof(VASliceParameterBufferMPEG2),
+ 128*1024,
+ sizeof(VAMacroblockParameterBufferMPEG2),
+ 32*1024,
+ 15*1024,
+};
+
+
#define NUM_BUFFER_TYPES (sizeof(buffer_types) / sizeof(VABufferType))
#define DEAD_BUFFER_ID ((VABufferID) 0x1234ffff)
@@ -70,7 +108,7 @@ void test()
for(i=0; i < NUM_BUFFER_TYPES; i++)
{
buffer_ids[i+1] = DEAD_BUFFER_ID;
- va_status = vaCreateBuffer(va_dpy, buffer_types[i], &buffer_ids[i]);
+ va_status = vaCreateBuffer(va_dpy, context, buffer_types[i], buffer_sizes[i], 1, NULL, &buffer_ids[i]);
ASSERT( VA_STATUS_SUCCESS == va_status );
ASSERT( DEAD_BUFFER_ID == buffer_ids[i+1] ); /* Bounds check */
}
@@ -85,5 +123,18 @@ void test()
void post()
{
+ status("vaDestroyContext for context %08x\n", context);
+ va_status = vaDestroyContext( va_dpy, context );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ status("vaDestroyConfig for config %08x\n", config);
+ va_status = vaDestroyConfig( va_dpy, config );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ free(surfaces);
+
test_terminate();
}
diff --git a/test/test_11.c b/test/test_11.c
index 53a1bd5..8f3c4b8 100644
--- a/test/test_11.c
+++ b/test/test_11.c
@@ -26,9 +26,47 @@
#include "test_common.c"
+VAConfigID config;
+VAContextID context;
+VASurfaceID *surfaces;
+int total_surfaces;
+
void pre()
{
test_init();
+
+ va_status = vaCreateConfig(va_dpy, VAProfileMPEG2Main, VAEntrypointVLD, NULL, 0, &config);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+ status("vaCreateConfig returns %08x\n", config);
+
+ int width = 352;
+ int height = 288;
+ int surface_count = 4;
+ total_surfaces = surface_count;
+
+ surfaces = malloc(total_surfaces * sizeof(VASurfaceID));
+
+ // TODO: Don't assume VA_RT_FORMAT_YUV420 is supported / needed for each config
+ va_status = vaCreateSurfaces(va_dpy, width, height, VA_RT_FORMAT_YUV420, total_surfaces, surfaces);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ status("vaCreateContext with config %08x\n", config);
+ int flags = 0;
+ va_status = vaCreateContext( va_dpy, config, width, height, flags, surfaces, surface_count, &context );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+}
+
+void test_unique_buffers(VABufferID *buffer_list, int buffer_count)
+{
+ int i,j;
+
+ for(i = 0; i < buffer_count; i++)
+ {
+ for(j = 0; j < i; j++)
+ {
+ ASSERT(buffer_list[i] != buffer_list[j]);
+ }
+ }
}
VABufferType buffer_types[] =
@@ -42,7 +80,6 @@ VABufferType buffer_types[] =
VAMacroblockParameterBufferType,
VAResidualDataBufferType,
VADeblockingParameterBufferType,
- VAImageBufferType
};
unsigned int buffer_sizes[] =
@@ -56,11 +93,13 @@ unsigned int buffer_sizes[] =
sizeof(VAMacroblockParameterBufferMPEG2),
32*1024,
15*1024,
- 32*1024,
};
+
#define NUM_BUFFER_TYPES (sizeof(buffer_types) / sizeof(VABufferType))
+#define DEAD_BUFFER_ID ((VABufferID) 0x1234ffff)
+
void test()
{
VABufferID buffer_ids[NUM_BUFFER_TYPES+1];
@@ -70,9 +109,6 @@ void test()
for(i=0; i < NUM_BUFFER_TYPES; i++)
{
uint32_t *data;
- va_status = vaCreateBuffer(va_dpy, buffer_types[i], &buffer_ids[i]);
- ASSERT( VA_STATUS_SUCCESS == va_status );
- status("vaCreateBuffer created buffer %08x of type %d\n", buffer_ids[i], buffer_types[i]);
input_data[i] = malloc(buffer_sizes[i]+4);
ASSERT(input_data[i]);
@@ -88,9 +124,10 @@ void test()
ASSERT(data);
memcpy(data, input_data[i], buffer_sizes[i]);
- /* Send to VA Buffer */
- va_status = vaBufferData(va_dpy, buffer_ids[i], buffer_sizes[i], 1, data);
+ /* Create buffer and fill with data */
+ va_status = vaCreateBuffer(va_dpy, context, buffer_types[i], buffer_sizes[i], 1, data, &buffer_ids[i]);
ASSERT( VA_STATUS_SUCCESS == va_status );
+ status("vaCreateBuffer created buffer %08x of type %d\n", buffer_ids[i], buffer_types[i]);
/* Wipe secondary buffer */
memset(data, 0, buffer_sizes[i]);
@@ -101,9 +138,6 @@ void test()
{
void *data = NULL;
/* Fetch VA Buffer */
- va_status = vaBufferData(va_dpy, buffer_ids[i], buffer_sizes[i], 1, NULL);
- ASSERT( VA_STATUS_SUCCESS == va_status );
-
va_status = vaMapBuffer(va_dpy, buffer_ids[i], &data);
ASSERT( VA_STATUS_SUCCESS == va_status );
status("vaMapBuffer mapped buffer %08x\n", buffer_ids[i]);
@@ -124,7 +158,22 @@ void test()
}
}
+
+
void post()
{
+ status("vaDestroyContext for context %08x\n", context);
+ va_status = vaDestroyContext( va_dpy, context );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ status("vaDestroyConfig for config %08x\n", config);
+ va_status = vaDestroyConfig( va_dpy, config );
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ va_status = vaDestroySurfaces(va_dpy, surfaces, total_surfaces);
+ ASSERT( VA_STATUS_SUCCESS == va_status );
+
+ free(surfaces);
+
test_terminate();
}
diff --git a/test/vainfo.c b/test/vainfo.c
new file mode 100644
index 0000000..a793e14
--- /dev/null
+++ b/test/vainfo.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2007 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.h"
+#include "X11/Xlib.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+
+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 = rindex(argv[0], '/');
+
+ if (name)
+ name++;
+ else
+ name = argv[0];
+
+ dpy = XOpenDisplay(NULL);
+ if (NULL == dpy)
+ {
+ fprintf(stderr, "%s: Error, can't open display: '%s'\n", name, display ? display : "");
+ return 1;
+ }
+
+ va_dpy = vaGetDisplay(dpy);
+ if (NULL == va_dpy)
+ {
+ fprintf(stderr, "%s: vaGetDisplay() failed\n", name);
+ return 2;
+ }
+
+ va_status = vaInitialize(va_dpy, &major_version, &minor_version);
+ if (VA_STATUS_SUCCESS != va_status )
+ {
+ fprintf(stderr, "%s: vaInitialize failed with error code %d (%s)\n",
+ name, va_status, vaErrorStr(va_status));
+ }
+ printf("%s: VA API version: %d.%d\n", name, major_version, minor_version);
+ driver = vaQueryVendorString(va_dpy);
+ printf("%s: Driver version: %s\n", name, driver ? driver : "<unknown>");
+ vaTerminate(va_dpy);
+ return 0;
+}