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