186c93d9c46415cf7746351c502a3513f637e77e4root/*
286c93d9c46415cf7746351c502a3513f637e77e4root * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
386c93d9c46415cf7746351c502a3513f637e77e4root *
486c93d9c46415cf7746351c502a3513f637e77e4root * Permission is hereby granted, free of charge, to any person obtaining a
586c93d9c46415cf7746351c502a3513f637e77e4root * copy of this software and associated documentation files (the
686c93d9c46415cf7746351c502a3513f637e77e4root * "Software"), to deal in the Software without restriction, including
786c93d9c46415cf7746351c502a3513f637e77e4root * without limitation the rights to use, copy, modify, merge, publish,
886c93d9c46415cf7746351c502a3513f637e77e4root * distribute, sub license, and/or sell copies of the Software, and to
986c93d9c46415cf7746351c502a3513f637e77e4root * permit persons to whom the Software is furnished to do so, subject to
1086c93d9c46415cf7746351c502a3513f637e77e4root * the following conditions:
1186c93d9c46415cf7746351c502a3513f637e77e4root *
1286c93d9c46415cf7746351c502a3513f637e77e4root * The above copyright notice and this permission notice (including the
1386c93d9c46415cf7746351c502a3513f637e77e4root * next paragraph) shall be included in all copies or substantial portions
1486c93d9c46415cf7746351c502a3513f637e77e4root * of the Software.
1586c93d9c46415cf7746351c502a3513f637e77e4root *
1686c93d9c46415cf7746351c502a3513f637e77e4root * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1786c93d9c46415cf7746351c502a3513f637e77e4root * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1886c93d9c46415cf7746351c502a3513f637e77e4root * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
1986c93d9c46415cf7746351c502a3513f637e77e4root * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
2086c93d9c46415cf7746351c502a3513f637e77e4root * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2186c93d9c46415cf7746351c502a3513f637e77e4root * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2286c93d9c46415cf7746351c502a3513f637e77e4root * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2386c93d9c46415cf7746351c502a3513f637e77e4root */
2486c93d9c46415cf7746351c502a3513f637e77e4root
25db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuan#include <va/va.h>
26942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#ifdef ANDROID
27942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#include <va/va_android.h>
28942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#else
2986c93d9c46415cf7746351c502a3513f637e77e4root#include <va/va_x11.h>
30942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#endif
3186c93d9c46415cf7746351c502a3513f637e77e4root#include "assert.h"
3286c93d9c46415cf7746351c502a3513f637e77e4root#include <stdarg.h>
3386c93d9c46415cf7746351c502a3513f637e77e4root#include <stdio.h>
3486c93d9c46415cf7746351c502a3513f637e77e4root#include <stdlib.h>
3586c93d9c46415cf7746351c502a3513f637e77e4root#include <string.h>
3686c93d9c46415cf7746351c502a3513f637e77e4root#include <stdint.h>
3786c93d9c46415cf7746351c502a3513f637e77e4root#include <dlfcn.h>
3886c93d9c46415cf7746351c502a3513f637e77e4root
3986c93d9c46415cf7746351c502a3513f637e77e4root#define ASSERT	assert
4086c93d9c46415cf7746351c502a3513f637e77e4root
41db88fae475a5b7858d5856d52714e33399a88d2eAustin Yuanvoid status(const char *msg, ...);
42942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#ifdef ANDROID
43942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#include "test_android.c"
44942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#else
45942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#include "test_x11.c"
46942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang#endif
47942aa8ad7f4275a637fb2c1e5edfab686110cc52Kun Wang
4886c93d9c46415cf7746351c502a3513f637e77e4rootDisplay *dpy;
4986c93d9c46415cf7746351c502a3513f637e77e4rootVADisplay va_dpy;
5086c93d9c46415cf7746351c502a3513f637e77e4rootVAStatus va_status;
5186c93d9c46415cf7746351c502a3513f637e77e4rootint major_version, minor_version;
5286c93d9c46415cf7746351c502a3513f637e77e4rootint print_status = 0;
5386c93d9c46415cf7746351c502a3513f637e77e4rootint num_profiles;
5486c93d9c46415cf7746351c502a3513f637e77e4rootVAProfile *profiles = NULL;
5586c93d9c46415cf7746351c502a3513f637e77e4root
5686c93d9c46415cf7746351c502a3513f637e77e4rootvoid pre();
5786c93d9c46415cf7746351c502a3513f637e77e4rootvoid test();
5886c93d9c46415cf7746351c502a3513f637e77e4rootvoid post();
5986c93d9c46415cf7746351c502a3513f637e77e4root
6086c93d9c46415cf7746351c502a3513f637e77e4rootvoid status(const char *msg, ...)
6186c93d9c46415cf7746351c502a3513f637e77e4root{
6286c93d9c46415cf7746351c502a3513f637e77e4root  if (!print_status) return;
6386c93d9c46415cf7746351c502a3513f637e77e4root  va_list args;
6486c93d9c46415cf7746351c502a3513f637e77e4root  printf("--- ");
6586c93d9c46415cf7746351c502a3513f637e77e4root  va_start(args, msg);
6686c93d9c46415cf7746351c502a3513f637e77e4root  vfprintf(stdout, msg, args);
6786c93d9c46415cf7746351c502a3513f637e77e4root  va_end(args);
6886c93d9c46415cf7746351c502a3513f637e77e4root}
6986c93d9c46415cf7746351c502a3513f637e77e4root
7086c93d9c46415cf7746351c502a3513f637e77e4root
7186c93d9c46415cf7746351c502a3513f637e77e4rootint main(int argc, const char* argv[])
7286c93d9c46415cf7746351c502a3513f637e77e4root{
7386c93d9c46415cf7746351c502a3513f637e77e4root  const char *name = strrchr(argv[0], '/');
7486c93d9c46415cf7746351c502a3513f637e77e4root  if (name)
7586c93d9c46415cf7746351c502a3513f637e77e4root      name++;
7686c93d9c46415cf7746351c502a3513f637e77e4root  else
7786c93d9c46415cf7746351c502a3513f637e77e4root      name = argv[0];
7886c93d9c46415cf7746351c502a3513f637e77e4root  printf("*** %s: %s\n", name, TEST_DESCRIPTION);
7986c93d9c46415cf7746351c502a3513f637e77e4root  pre();
8086c93d9c46415cf7746351c502a3513f637e77e4root  print_status = 1;
8186c93d9c46415cf7746351c502a3513f637e77e4root  test();
8286c93d9c46415cf7746351c502a3513f637e77e4root  print_status = 0;
8386c93d9c46415cf7746351c502a3513f637e77e4root  post();
8486c93d9c46415cf7746351c502a3513f637e77e4root  printf("*** %s: Finished\n", name);
8586c93d9c46415cf7746351c502a3513f637e77e4root  return 0;
8686c93d9c46415cf7746351c502a3513f637e77e4root}
8786c93d9c46415cf7746351c502a3513f637e77e4root
8886c93d9c46415cf7746351c502a3513f637e77e4root#define PROFILE(profile)	case VAProfile##profile:	return("VAProfile" #profile);
8986c93d9c46415cf7746351c502a3513f637e77e4root
9086c93d9c46415cf7746351c502a3513f637e77e4rootconst char *profile2string(VAProfile profile)
9186c93d9c46415cf7746351c502a3513f637e77e4root{
9286c93d9c46415cf7746351c502a3513f637e77e4root    switch(profile)
9386c93d9c46415cf7746351c502a3513f637e77e4root    {
94409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        PROFILE(None)
9586c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(MPEG2Simple)
9686c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(MPEG2Main)
9786c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(MPEG4Simple)
9886c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(MPEG4AdvancedSimple)
9986c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(MPEG4Main)
1004b672db6ee89c9846451bbab23cf18e93c4260b2hding        PROFILE(H263Baseline)
10186c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(H264Baseline)
10286c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(H264Main)
10386c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(H264High)
1044b672db6ee89c9846451bbab23cf18e93c4260b2hding        PROFILE(H264ConstrainedBaseline)
105409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        PROFILE(H264MultiviewHigh)
106409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        PROFILE(H264StereoHigh)
10786c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(VC1Simple)
10886c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(VC1Main)
10986c93d9c46415cf7746351c502a3513f637e77e4root        PROFILE(VC1Advanced)
1104b672db6ee89c9846451bbab23cf18e93c4260b2hding        PROFILE(JPEGBaseline)
111409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        PROFILE(VP8Version0_3)
112409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        default:return "Unknow";
11386c93d9c46415cf7746351c502a3513f637e77e4root    }
11486c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(0);
11586c93d9c46415cf7746351c502a3513f637e77e4root    return "Unknown";
11686c93d9c46415cf7746351c502a3513f637e77e4root}
11786c93d9c46415cf7746351c502a3513f637e77e4root
11886c93d9c46415cf7746351c502a3513f637e77e4root#define ENTRYPOINT(profile)	case VAEntrypoint##profile:	return("VAEntrypoint" #profile);
11986c93d9c46415cf7746351c502a3513f637e77e4root
12086c93d9c46415cf7746351c502a3513f637e77e4rootconst char *entrypoint2string(VAEntrypoint entrypoint)
12186c93d9c46415cf7746351c502a3513f637e77e4root{
12286c93d9c46415cf7746351c502a3513f637e77e4root    switch(entrypoint)
12386c93d9c46415cf7746351c502a3513f637e77e4root    {
12486c93d9c46415cf7746351c502a3513f637e77e4root        ENTRYPOINT(VLD)
12586c93d9c46415cf7746351c502a3513f637e77e4root        ENTRYPOINT(IZZ)
12686c93d9c46415cf7746351c502a3513f637e77e4root        ENTRYPOINT(IDCT)
12786c93d9c46415cf7746351c502a3513f637e77e4root        ENTRYPOINT(MoComp)
12886c93d9c46415cf7746351c502a3513f637e77e4root        ENTRYPOINT(Deblocking)
1294b672db6ee89c9846451bbab23cf18e93c4260b2hding        ENTRYPOINT(EncSlice)
1304b672db6ee89c9846451bbab23cf18e93c4260b2hding        ENTRYPOINT(EncPicture)
131409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        ENTRYPOINT(VideoProc)
132409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        default:return "Unknow";
13386c93d9c46415cf7746351c502a3513f637e77e4root    }
13486c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(0);
13586c93d9c46415cf7746351c502a3513f637e77e4root    return "Unknown";
13686c93d9c46415cf7746351c502a3513f637e77e4root}
13786c93d9c46415cf7746351c502a3513f637e77e4root
13886c93d9c46415cf7746351c502a3513f637e77e4root
13986c93d9c46415cf7746351c502a3513f637e77e4rootvoid test_profiles()
14086c93d9c46415cf7746351c502a3513f637e77e4root{
14186c93d9c46415cf7746351c502a3513f637e77e4root    int max_profiles;
14286c93d9c46415cf7746351c502a3513f637e77e4root    int i;
14386c93d9c46415cf7746351c502a3513f637e77e4root    max_profiles = vaMaxNumProfiles(va_dpy);
14486c93d9c46415cf7746351c502a3513f637e77e4root    status("vaMaxNumProfiles = %d\n", max_profiles);
14586c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(max_profiles > 0);
14686c93d9c46415cf7746351c502a3513f637e77e4root    profiles = malloc(max_profiles * sizeof(VAProfile));
14786c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(profiles);
14886c93d9c46415cf7746351c502a3513f637e77e4root
14986c93d9c46415cf7746351c502a3513f637e77e4root    va_status = vaQueryConfigProfiles(va_dpy, profiles, &num_profiles);
15086c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT( VA_STATUS_SUCCESS == va_status );
15186c93d9c46415cf7746351c502a3513f637e77e4root
15286c93d9c46415cf7746351c502a3513f637e77e4root    status("vaQueryConfigProfiles reports %d profiles\n", num_profiles);
15386c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(num_profiles <= max_profiles);
15486c93d9c46415cf7746351c502a3513f637e77e4root    ASSERT(num_profiles > 0);
15586c93d9c46415cf7746351c502a3513f637e77e4root
15686c93d9c46415cf7746351c502a3513f637e77e4root    if (print_status)
15786c93d9c46415cf7746351c502a3513f637e77e4root    {
15886c93d9c46415cf7746351c502a3513f637e77e4root        for(i = 0; i < num_profiles; i++)
15986c93d9c46415cf7746351c502a3513f637e77e4root        {
16086c93d9c46415cf7746351c502a3513f637e77e4root            status("  profile %d [%s]\n", profiles[i], profile2string(profiles[i]));
16186c93d9c46415cf7746351c502a3513f637e77e4root        }
16286c93d9c46415cf7746351c502a3513f637e77e4root    }
16386c93d9c46415cf7746351c502a3513f637e77e4root}
164