1b0fac498ca4863166252f1268fda83394db54153Fei Jiang/* 2b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Copyright (c) 2007 Intel Corporation. All Rights Reserved. 3b0fac498ca4863166252f1268fda83394db54153Fei Jiang * 4b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Permission is hereby granted, free of charge, to any person obtaining a 5b0fac498ca4863166252f1268fda83394db54153Fei Jiang * copy of this software and associated documentation files (the 6b0fac498ca4863166252f1268fda83394db54153Fei Jiang * "Software"), to deal in the Software without restriction, including 7b0fac498ca4863166252f1268fda83394db54153Fei Jiang * without limitation the rights to use, copy, modify, merge, publish, 8b0fac498ca4863166252f1268fda83394db54153Fei Jiang * distribute, sub license, and/or sell copies of the Software, and to 9b0fac498ca4863166252f1268fda83394db54153Fei Jiang * permit persons to whom the Software is furnished to do so, subject to 10b0fac498ca4863166252f1268fda83394db54153Fei Jiang * the following conditions: 11b0fac498ca4863166252f1268fda83394db54153Fei Jiang * 12b0fac498ca4863166252f1268fda83394db54153Fei Jiang * The above copyright notice and this permission notice (including the 13b0fac498ca4863166252f1268fda83394db54153Fei Jiang * next paragraph) shall be included in all copies or substantial portions 14b0fac498ca4863166252f1268fda83394db54153Fei Jiang * of the Software. 15b0fac498ca4863166252f1268fda83394db54153Fei Jiang * 16b0fac498ca4863166252f1268fda83394db54153Fei Jiang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17b0fac498ca4863166252f1268fda83394db54153Fei Jiang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18b0fac498ca4863166252f1268fda83394db54153Fei Jiang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19b0fac498ca4863166252f1268fda83394db54153Fei Jiang * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 20b0fac498ca4863166252f1268fda83394db54153Fei Jiang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21b0fac498ca4863166252f1268fda83394db54153Fei Jiang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22b0fac498ca4863166252f1268fda83394db54153Fei Jiang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23b0fac498ca4863166252f1268fda83394db54153Fei Jiang */ 24b0fac498ca4863166252f1268fda83394db54153Fei Jiang 25b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define _GNU_SOURCE 1 26cceaa0568f77a7452857559614100b71fb36ee3awangkun#include "sysdeps.h" 27b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va.h" 28b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va_backend.h" 29b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va_backend_tpi.h" 30b0fac498ca4863166252f1268fda83394db54153Fei Jiang 31b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <assert.h> 32b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdarg.h> 33b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdio.h> 34b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdlib.h> 35b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <string.h> 36b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <dlfcn.h> 37b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <unistd.h> 38b0fac498ca4863166252f1268fda83394db54153Fei Jiang 39b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) 40b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } 41b0fac498ca4863166252f1268fda83394db54153Fei Jiang 42cceaa0568f77a7452857559614100b71fb36ee3awangkun 43cceaa0568f77a7452857559614100b71fb36ee3awangkun/* 444b672db6ee89c9846451bbab23cf18e93c4260b2hding * Create surfaces with special inputs/requirements 45cceaa0568f77a7452857559614100b71fb36ee3awangkun */ 464b672db6ee89c9846451bbab23cf18e93c4260b2hdingVAStatus vaCreateSurfacesWithAttribute ( 474b672db6ee89c9846451bbab23cf18e93c4260b2hding VADisplay dpy, 484b672db6ee89c9846451bbab23cf18e93c4260b2hding int width, 494b672db6ee89c9846451bbab23cf18e93c4260b2hding int height, 504b672db6ee89c9846451bbab23cf18e93c4260b2hding int format, 514b672db6ee89c9846451bbab23cf18e93c4260b2hding int num_surfaces, 524b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceID *surfaces, /* out */ 534b672db6ee89c9846451bbab23cf18e93c4260b2hding VASurfaceAttributeTPI *attribute_tpi 5411419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang) 5511419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang{ 5611419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang VADriverContextP ctx; 5711419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang struct VADriverVTableTPI *tpi; 5811419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang CHECK_DISPLAY(dpy); 5911419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang ctx = CTX(dpy); 60cceaa0568f77a7452857559614100b71fb36ee3awangkun 61f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun printf("WARNING: vaCreateSurfacesWithAttribute will be removed, please use vaCreateSurfaces\n"); 62f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun 6311419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang tpi = (struct VADriverVTableTPI *)ctx->vtable_tpi; 644b672db6ee89c9846451bbab23cf18e93c4260b2hding if (tpi && tpi->vaCreateSurfacesWithAttribute) { 654b672db6ee89c9846451bbab23cf18e93c4260b2hding return tpi->vaCreateSurfacesWithAttribute( ctx, width, height, format, num_surfaces, surfaces, attribute_tpi); 6611419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang } else 6711419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang return VA_STATUS_ERROR_UNIMPLEMENTED; 6811419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang} 69cceaa0568f77a7452857559614100b71fb36ee3awangkun 70cceaa0568f77a7452857559614100b71fb36ee3awangkun 71b0fac498ca4863166252f1268fda83394db54153Fei JiangVAStatus vaPutSurfaceBuf ( 72b0fac498ca4863166252f1268fda83394db54153Fei Jiang VADisplay dpy, 73b0fac498ca4863166252f1268fda83394db54153Fei Jiang VASurfaceID surface, 74b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned char* data, 75b0fac498ca4863166252f1268fda83394db54153Fei Jiang int* data_len, 76b0fac498ca4863166252f1268fda83394db54153Fei Jiang short srcx, 77b0fac498ca4863166252f1268fda83394db54153Fei Jiang short srcy, 78b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short srcw, 79b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short srch, 80b0fac498ca4863166252f1268fda83394db54153Fei Jiang short destx, 81b0fac498ca4863166252f1268fda83394db54153Fei Jiang short desty, 82b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short destw, 83b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned short desth, 84b0fac498ca4863166252f1268fda83394db54153Fei Jiang VARectangle *cliprects, /* client supplied clip list */ 85b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned int number_cliprects, /* number of clip rects in the clip list */ 86b0fac498ca4863166252f1268fda83394db54153Fei Jiang unsigned int flags /* de-interlacing flags */ 87b0fac498ca4863166252f1268fda83394db54153Fei Jiang) 88b0fac498ca4863166252f1268fda83394db54153Fei Jiang{ 89b0fac498ca4863166252f1268fda83394db54153Fei Jiang VADriverContextP ctx; 90b0fac498ca4863166252f1268fda83394db54153Fei Jiang struct VADriverVTableTPI *tpi; 91b0fac498ca4863166252f1268fda83394db54153Fei Jiang CHECK_DISPLAY(dpy); 92b0fac498ca4863166252f1268fda83394db54153Fei Jiang ctx = CTX(dpy); 93b0fac498ca4863166252f1268fda83394db54153Fei Jiang 94b0fac498ca4863166252f1268fda83394db54153Fei Jiang tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; 95b0fac498ca4863166252f1268fda83394db54153Fei Jiang if (tpi && tpi->vaPutSurfaceBuf) { 96b0fac498ca4863166252f1268fda83394db54153Fei Jiang return tpi->vaPutSurfaceBuf( ctx, surface, data, data_len, srcx, srcy, srcw, srch, 974b672db6ee89c9846451bbab23cf18e93c4260b2hding destx, desty, destw, desth, cliprects, number_cliprects, flags ); 98b0fac498ca4863166252f1268fda83394db54153Fei Jiang } else 99b0fac498ca4863166252f1268fda83394db54153Fei Jiang return VA_STATUS_ERROR_UNIMPLEMENTED; 100b0fac498ca4863166252f1268fda83394db54153Fei Jiang} 101166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang 102166c85d0cdc279aa572e0e59f335eaf85e6be699Fei JiangVAStatus vaSetTimestampForSurface( 103f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun VADisplay dpy, 104f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun VASurfaceID surface, 105f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun long long timestamp 106166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang) 107166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang{ 108f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun VADriverContextP ctx; 109f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun struct VADriverVTableTPI *tpi; 110f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun CHECK_DISPLAY(dpy); 111f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun ctx = CTX(dpy); 112166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang 113f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; 114f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun if (tpi && tpi->vaSetTimestampForSurface) { 115f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun return tpi->vaSetTimestampForSurface(ctx, surface, timestamp); 116f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun } else 117f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun return VA_STATUS_ERROR_UNIMPLEMENTED; 118166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang 119166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang} 120f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun 121f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun 122