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#include <va/va.h>
26#ifdef ANDROID
27#include <va/va_android.h>
28#else
29#include <va/va_x11.h>
30#endif
31#include "assert.h"
32#include <stdarg.h>
33#include <stdio.h>
34#include <stdlib.h>
35#include <string.h>
36#include <stdint.h>
37#include <dlfcn.h>
38
39#define ASSERT	assert
40
41void status(const char *msg, ...);
42#ifdef ANDROID
43#include "test_android.c"
44#else
45#include "test_x11.c"
46#endif
47
48Display *dpy;
49VADisplay va_dpy;
50VAStatus va_status;
51int major_version, minor_version;
52int print_status = 0;
53int num_profiles;
54VAProfile *profiles = NULL;
55
56void pre();
57void test();
58void post();
59
60void status(const char *msg, ...)
61{
62  if (!print_status) return;
63  va_list args;
64  printf("--- ");
65  va_start(args, msg);
66  vfprintf(stdout, msg, args);
67  va_end(args);
68}
69
70
71int main(int argc, const char* argv[])
72{
73  const char *name = strrchr(argv[0], '/');
74  if (name)
75      name++;
76  else
77      name = argv[0];
78  printf("*** %s: %s\n", name, TEST_DESCRIPTION);
79  pre();
80  print_status = 1;
81  test();
82  print_status = 0;
83  post();
84  printf("*** %s: Finished\n", name);
85  return 0;
86}
87
88#define PROFILE(profile)	case VAProfile##profile:	return("VAProfile" #profile);
89
90const char *profile2string(VAProfile profile)
91{
92    switch(profile)
93    {
94        PROFILE(None)
95        PROFILE(MPEG2Simple)
96        PROFILE(MPEG2Main)
97        PROFILE(MPEG4Simple)
98        PROFILE(MPEG4AdvancedSimple)
99        PROFILE(MPEG4Main)
100        PROFILE(H263Baseline)
101        PROFILE(H264Baseline)
102        PROFILE(H264Main)
103        PROFILE(H264High)
104        PROFILE(H264ConstrainedBaseline)
105        PROFILE(H264MultiviewHigh)
106        PROFILE(H264StereoHigh)
107        PROFILE(VC1Simple)
108        PROFILE(VC1Main)
109        PROFILE(VC1Advanced)
110        PROFILE(JPEGBaseline)
111        PROFILE(VP8Version0_3)
112        default:return "Unknow";
113    }
114    ASSERT(0);
115    return "Unknown";
116}
117
118#define ENTRYPOINT(profile)	case VAEntrypoint##profile:	return("VAEntrypoint" #profile);
119
120const char *entrypoint2string(VAEntrypoint entrypoint)
121{
122    switch(entrypoint)
123    {
124        ENTRYPOINT(VLD)
125        ENTRYPOINT(IZZ)
126        ENTRYPOINT(IDCT)
127        ENTRYPOINT(MoComp)
128        ENTRYPOINT(Deblocking)
129        ENTRYPOINT(EncSlice)
130        ENTRYPOINT(EncPicture)
131        ENTRYPOINT(VideoProc)
132        default:return "Unknow";
133    }
134    ASSERT(0);
135    return "Unknown";
136}
137
138
139void test_profiles()
140{
141    int max_profiles;
142    int i;
143    max_profiles = vaMaxNumProfiles(va_dpy);
144    status("vaMaxNumProfiles = %d\n", max_profiles);
145    ASSERT(max_profiles > 0);
146    profiles = malloc(max_profiles * sizeof(VAProfile));
147    ASSERT(profiles);
148
149    va_status = vaQueryConfigProfiles(va_dpy, profiles, &num_profiles);
150    ASSERT( VA_STATUS_SUCCESS == va_status );
151
152    status("vaQueryConfigProfiles reports %d profiles\n", num_profiles);
153    ASSERT(num_profiles <= max_profiles);
154    ASSERT(num_profiles > 0);
155
156    if (print_status)
157    {
158        for(i = 0; i < num_profiles; i++)
159        {
160            status("  profile %d [%s]\n", profiles[i], profile2string(profiles[i]));
161        }
162    }
163}
164