1 /*
2  * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 #define TEST_DESCRIPTION	"Create and destory surfaces of different sizes"
26 
27 #include "test_common.c"
28 
pre()29 void pre()
30 {
31     test_init();
32 }
33 
34 #define DEAD_SURFACE_ID 	(VASurfaceID) 0xbeefdead
35 
test_unique_surfaces(VASurfaceID * surface_list,int surface_count)36 void test_unique_surfaces(VASurfaceID *surface_list, int surface_count)
37 {
38     int i,j;
39 
40     for(i = 0; i < surface_count; i++)
41     {
42         ASSERT(surface_list[i] != VA_INVALID_SURFACE);
43         for(j = 0; j < i; j++)
44         {
45             if (i == j) continue;
46             ASSERT(surface_list[i] != surface_list[j]);
47         }
48     }
49 }
50 
51 typedef struct test_size { int w; int h; } test_size_t;
52 
53 test_size_t test_sizes[] = {
54   {  10, 10 },
55   {  128, 128 },
56   {  176, 144 },
57   {  144, 176 },
58   {  352, 288 },
59   {  399, 299 },
60   {  640, 480 },
61   {  1280, 720 }
62 };
63 
64 #define NUM_SIZES 	(sizeof(test_sizes) / sizeof(test_size_t))
65 
test()66 void test()
67 {
68     VASurfaceID surfaces[NUM_SIZES+1];
69     unsigned int i;
70 
71     memset(surfaces, 0xff, sizeof(surfaces));
72 
73     for(i = 0; i < NUM_SIZES; i++)
74     {
75         status("vaCreateSurfaces create %dx%d surface\n", test_sizes[i].w, test_sizes[i].h);
76         surfaces[i+1] = DEAD_SURFACE_ID;
77         va_status = vaCreateSurfaces(va_dpy,  VA_RT_FORMAT_YUV420, test_sizes[i].w, test_sizes[i].h, &surfaces[i], 1, NULL, 0);
78         ASSERT( VA_STATUS_SUCCESS == va_status );
79         ASSERT( DEAD_SURFACE_ID == surfaces[i+1] );
80     }
81 
82     test_unique_surfaces(surfaces, NUM_SIZES);
83 
84     status("vaDestroySurface all surfaces\n");
85     va_status = vaDestroySurfaces(va_dpy, surfaces, NUM_SIZES);
86     ASSERT( VA_STATUS_SUCCESS == va_status );
87 }
88 
post()89 void post()
90 {
91     test_terminate();
92 }
93