From 5c06499420685dbca3e54fab7bf706a79d5d7178 Mon Sep 17 00:00:00 2001 From: Waldo Bastian Date: Mon, 24 Sep 2007 12:34:03 -0700 Subject: First test cases --- test/Makefile.am | 22 +++++-- test/test_01.c | 42 +++++++++++++ test/test_02.c | 42 +++++++++++++ test/test_03.c | 67 +++++++++++++++++++++ test/test_04.c | 84 ++++++++++++++++++++++++++ test/test_05.c | 77 ++++++++++++++++++++++++ test/test_common.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test/testplan.txt | 55 +++++++++++++++-- 8 files changed, 549 insertions(+), 10 deletions(-) create mode 100644 test/test_01.c create mode 100644 test/test_02.c create mode 100644 test/test_03.c create mode 100644 test/test_04.c create mode 100644 test/test_05.c create mode 100644 test/test_common.c (limited to 'test') diff --git a/test/Makefile.am b/test/Makefile.am index a42608d..9ec3dea 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -20,14 +20,26 @@ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -check_PROGRAMS = test +check_PROGRAMS = test_01 test_02 test_03 test_04 test_05 testdir = $(bindir) -# This gives better backtraces when running valgrind: -# test_LDADD = ../src/libva.la ../../psb-video/src/psb_drv_video.la -test_LDADD = ../src/libva.la - AM_CFLAGS = -I$(top_srcdir)/../../include/external/ -I$(top_srcdir)/src test_SOURCES = test.c TESTS = $(check_PROGRAMS) + +test_01_LDADD = ../src/libva.la +test_01_SOURCES = test_01.c + +test_02_LDADD = ../src/libva.la +test_02_SOURCES = test_02.c + +test_03_LDADD = ../src/libva.la +test_03_SOURCES = test_03.c + +test_04_LDADD = ../src/libva.la +test_04_SOURCES = test_04.c + +test_05_LDADD = ../src/libva.la +test_05_SOURCES = test_05.c + diff --git a/test/test_01.c b/test/test_01.c new file mode 100644 index 0000000..4075655 --- /dev/null +++ b/test/test_01.c @@ -0,0 +1,42 @@ +/* + * 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. + */ + +#define TEST_DESCRIPTION "Initialize & Terminate" + +#include "test_common.c" + +void pre() +{ +} + +void post() +{ +} + +void test() +{ + test_init(); + + test_terminate(); +} diff --git a/test/test_02.c b/test/test_02.c new file mode 100644 index 0000000..5622a18 --- /dev/null +++ b/test/test_02.c @@ -0,0 +1,42 @@ +/* + * 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. + */ + +#define TEST_DESCRIPTION "Query profiles" + +#include "test_common.c" + +void pre() +{ + test_init(); +} + +void test() +{ + test_profiles(); +} + +void post() +{ + test_terminate(); +} diff --git a/test/test_03.c b/test/test_03.c new file mode 100644 index 0000000..d2af494 --- /dev/null +++ b/test/test_03.c @@ -0,0 +1,67 @@ +/* + * 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. + */ + +#define TEST_DESCRIPTION "Query entrypoints for all profiles" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +void test() +{ + int max_entrypoints; + int num_entrypoints; + int i, j; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + status("vaMaxEntryPoints = %d\n", max_entrypoints); + ASSERT(max_entrypoints > 0); + + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + for(i = 0; i < num_profiles; i++) + { + memset(entrypoints, 0xff, max_entrypoints * sizeof(VAEntrypoint)); + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaQueryConfigEntryPoints(%s) reports %d entrypoints\n", profile2string(profiles[i]), num_entrypoints); + ASSERT(num_entrypoints <= max_entrypoints); + ASSERT(num_entrypoints > 0); + for(j = 0; j < num_entrypoints; j++) + { + status(" entrypoint %d [%s]\n", entrypoints[j], entrypoint2string(entrypoints[j])); + } + } + + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/test/test_04.c b/test/test_04.c new file mode 100644 index 0000000..2e3329c --- /dev/null +++ b/test/test_04.c @@ -0,0 +1,84 @@ +/* + * 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. + */ + +#define TEST_DESCRIPTION "Get config attributes for all profiles / entrypoints" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +#define DEADVALUE 0xdeaddead + +void test() +{ + VAConfigAttrib attributes[] = { + { type: VAConfigAttribRTFormat, value: DEADVALUE }, + { type: VAConfigAttribSpatialResidual, value: DEADVALUE }, + { type: VAConfigAttribSpatialClipping, value: DEADVALUE }, + { type: VAConfigAttribIntraResidual, value: DEADVALUE }, + { type: VAConfigAttribEncryption, value: DEADVALUE } + }; + int max_entrypoints; + int num_entrypoints; + int num_attribs = sizeof(attributes) / sizeof(VAConfigAttrib); + int i, j, k; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + VAConfigAttrib *attrib_list = (VAConfigAttrib *) malloc(sizeof(attributes)); + ASSERT(attrib_list); + + for(i = 0; i < num_profiles; i++) + { + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + memcpy(attrib_list, attributes, sizeof(attributes)); + status("vaGetConfigAttributes for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + va_status = vaGetConfigAttributes(va_dpy, profiles[i], entrypoints[j], attrib_list, num_attribs); + ASSERT( VA_STATUS_SUCCESS == va_status ); + for(k = 0; k < num_attribs; k++) + { + status(" %d -> %08x\n", attrib_list[k].type, attrib_list[k].value); + ASSERT(attrib_list[k].value != DEADVALUE); + } + } + } + + free(attrib_list); + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/test/test_05.c b/test/test_05.c new file mode 100644 index 0000000..1901810 --- /dev/null +++ b/test/test_05.c @@ -0,0 +1,77 @@ +/* + * 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. + */ + +#define TEST_DESCRIPTION "Create configs for all profiles / entrypoints" + +#include "test_common.c" + +void pre() +{ + test_init(); + test_profiles(); +} + +void test() +{ + int max_entrypoints; + int num_entrypoints; + int i, j, k; + int config_count = 0; + max_entrypoints = vaMaxNumEntrypoints(va_dpy); + ASSERT(max_entrypoints > 0); + VAEntrypoint *entrypoints = malloc(max_entrypoints * sizeof(VAEntrypoint)); + ASSERT(entrypoints); + + VAConfigID *configs = malloc(max_entrypoints * num_profiles * sizeof(VAConfigID)); + + for(i = 0; i < num_profiles; i++) + { + va_status = vaQueryConfigEntrypoints(va_dpy, profiles[i], entrypoints, &num_entrypoints); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + for(j = 0; j < num_entrypoints; j++) + { + status("vaCreateConfig for %s, %s\n", profile2string(profiles[i]), entrypoint2string(entrypoints[j])); + va_status = vaCreateConfig(va_dpy, profiles[i], entrypoints[j], NULL, 0, &(configs[config_count])); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaCreateConfig returns %08x\n", configs[config_count]); + config_count++; + } + } + + for(i = 0; i < config_count; i++) + { + status("vaDestroyConfig for config %08x\n", configs[i]); + va_status = vaDestroyConfig( va_dpy, configs[i] ); + ASSERT( VA_STATUS_SUCCESS == va_status ); + } + + free(configs); + free(entrypoints); +} + +void post() +{ + test_terminate(); +} diff --git a/test/test_common.c b/test/test_common.c new file mode 100644 index 0000000..3e536fd --- /dev/null +++ b/test/test_common.c @@ -0,0 +1,170 @@ +/* + * 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 "assert.h" +#include +#include +#include +#include + +#define ASSERT assert + +Display *dpy; +VADisplay va_dpy; +VAStatus va_status; +int major_version, minor_version; +int print_status = 0; +int num_profiles; +VAProfile *profiles = NULL; + +void pre(); +void test(); +void post(); + +void status(const char *msg, ...) +{ + if (!print_status) return; + va_list args; + printf("--- "); + va_start(args, msg); + vfprintf(stdout, msg, args); + va_end(args); +} + + +int main(int argc, const char* argv[]) +{ + const char *name = rindex(argv[0], '/'); + if (name) + name++; + else + name = argv[0]; + printf("*** %s: %s\n", name, TEST_DESCRIPTION); + pre(); + print_status = 1; + test(); + print_status = 0; + post(); + printf("*** %s: Finished\n", name); + return 0; +} + +void test_init() +{ + dpy = XOpenDisplay(NULL); + ASSERT( dpy ); + status("XOpenDisplay: dpy = %08x\n", dpy); + + va_dpy = vaGetDisplay(dpy); + ASSERT( va_dpy ); + status("vaGetDisplay: va_dpy = %08x\n", va_dpy); + + va_status = vaInitialize(va_dpy, &major_version, &minor_version); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaInitialize: major = %d minor = %d\n", major_version, minor_version); +} + +void test_terminate() +{ + va_status = vaTerminate(va_dpy); + ASSERT( VA_STATUS_SUCCESS == va_status ); + status("vaTerminate\n"); + + XCloseDisplay(dpy); + status("XCloseDisplay\n"); + + if (profiles) + { + free(profiles); + profiles = NULL; + } +} + +#define PROFILE(profile) case VAProfile##profile: return("VAProfile" #profile); + +const char *profile2string(VAProfile profile) +{ + switch(profile) + { + PROFILE(MPEG2Simple) + PROFILE(MPEG2Main) + PROFILE(MPEG4Simple) + PROFILE(MPEG4AdvancedSimple) + PROFILE(MPEG4Main) + PROFILE(H264Baseline) + PROFILE(H264Main) + PROFILE(H264High) + PROFILE(VC1Simple) + PROFILE(VC1Main) + PROFILE(VC1Advanced) + } + ASSERT(0); + return "Unknown"; +} + +#define ENTRYPOINT(profile) case VAEntrypoint##profile: return("VAEntrypoint" #profile); + +const char *entrypoint2string(VAEntrypoint entrypoint) +{ + switch(entrypoint) + { + ENTRYPOINT(VLD) + ENTRYPOINT(IZZ) + ENTRYPOINT(IDCT) + ENTRYPOINT(MoComp) + ENTRYPOINT(Deblocking) + } + ASSERT(0); + return "Unknown"; +} + + +void test_profiles() +{ + int max_profiles; + int i; + max_profiles = vaMaxNumProfiles(va_dpy); + status("vaMaxNumProfiles = %d\n", max_profiles); + ASSERT(max_profiles > 0); + profiles = malloc(max_profiles * sizeof(VAProfile)); + ASSERT(profiles); + + va_status = vaQueryConfigProfiles(va_dpy, profiles, &num_profiles); + ASSERT( VA_STATUS_SUCCESS == va_status ); + + status("vaQueryConfigProfiles reports %d profiles\n", num_profiles); + ASSERT(num_profiles <= max_profiles); + ASSERT(num_profiles > 0); + + if (print_status) + { + for(i = 0; i < num_profiles; i++) + { + status(" profile %d [%s]\n", profiles[i], profile2string(profiles[i])); + } + } +} diff --git a/test/testplan.txt b/test/testplan.txt index 71a02cf..4c6ccea 100644 --- a/test/testplan.txt +++ b/test/testplan.txt @@ -12,17 +12,16 @@ Test 3 - vaQueryConfigEntryPoints, vaMaxNumEntryPoints Test 4 -- Query Config attributes for all profiles / entrypoints -- vaQueryConfigAttributes, vaMaxNumConfigAttributes +- Get Config attributes for all profiles / entrypoints +- vaGetConfigAttributes Test 5 - Create & destroy config for each profile / entrypoint -- vaCreateConfig -- NOTE: vaDestroyConfig does not exist +- vaCreateConfig, vaDestroyConfig Test 6 - Get config attributes of various possible configs -- vaGetConfigAttributes +- vaQueryConfigAttributes, vaMaxNumConfigAttributes - Check if results for vaGetConfigAttributes match with vaQueryConfigAttributes for a given profile / entrypoint @@ -57,5 +56,51 @@ Test 11 - For each different buffertype, copy data to the buffer with vaBufferData. Then map the buffer and verify the contents of the buffer. +Test 12 +- Render single MPEG2 I-frame +- vaBeginPicture, vaRenderPicture (num_buffers == 1), vaEndPicture + +Test 13 +- Render single MPEG2 I-frame, multiple buffer submission +- vaRenderPicture (num_buffers > 1) + +Test 14 +- Render single MPEG2 I-frame, split buffers +- Slice split over 2 buffers + +Test 15 +- Render single MPEG2 I-frame, split buffers +- Slice split over 3 buffers + +Test 16 +- Sync Surface +- Render single MPEG2 I-frame, then check vaQuerySurfaceStatus, vaSyncSurface and vaQuerySurfaceStatus + +Test 17 +- Query image formats +- vaMaxNumImageFormats, vaQueryImageFormats + +Test 18 +- Create and destroy vaImage +- vaCreateImage, vaDestroyImage + +Test 19 +- Get image data +- Render single MPEG2 I-frame, copy surface data to image, check resulting +image +- vaGetImage + +Test 20 +- Put image data +- Render single MPEG2 I-frame, copy half of a VAImage to surface, copy +surface back to VAImage, check resulting image +- vaPutImage + +Test 21 +- Query subpicture formats +- vaMaxNumSubpictureFormats, vaQuerySubpictureFromats +Test 22 +- Create and destory subpictures +- vaCreateSubpicture, vaDestroySubpicture -- cgit v1.2.3