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 _GNU_SOURCE 1 26#include "sysdeps.h" 27#include "va.h" 28#include "va_backend.h" 29#include "va_backend_tpi.h" 30 31#include <assert.h> 32#include <stdarg.h> 33#include <stdio.h> 34#include <stdlib.h> 35#include <string.h> 36#include <dlfcn.h> 37#include <unistd.h> 38 39#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) 40#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } 41 42 43/* 44 * Create surfaces with special inputs/requirements 45 */ 46VAStatus vaCreateSurfacesWithAttribute ( 47 VADisplay dpy, 48 int width, 49 int height, 50 int format, 51 int num_surfaces, 52 VASurfaceID *surfaces, /* out */ 53 VASurfaceAttributeTPI *attribute_tpi 54) 55{ 56 VADriverContextP ctx; 57 struct VADriverVTableTPI *tpi; 58 CHECK_DISPLAY(dpy); 59 ctx = CTX(dpy); 60 61 printf("WARNING: vaCreateSurfacesWithAttribute will be removed, please use vaCreateSurfaces\n"); 62 63 tpi = (struct VADriverVTableTPI *)ctx->vtable_tpi; 64 if (tpi && tpi->vaCreateSurfacesWithAttribute) { 65 return tpi->vaCreateSurfacesWithAttribute( ctx, width, height, format, num_surfaces, surfaces, attribute_tpi); 66 } else 67 return VA_STATUS_ERROR_UNIMPLEMENTED; 68} 69 70 71VAStatus vaPutSurfaceBuf ( 72 VADisplay dpy, 73 VASurfaceID surface, 74 unsigned char* data, 75 int* data_len, 76 short srcx, 77 short srcy, 78 unsigned short srcw, 79 unsigned short srch, 80 short destx, 81 short desty, 82 unsigned short destw, 83 unsigned short desth, 84 VARectangle *cliprects, /* client supplied clip list */ 85 unsigned int number_cliprects, /* number of clip rects in the clip list */ 86 unsigned int flags /* de-interlacing flags */ 87) 88{ 89 VADriverContextP ctx; 90 struct VADriverVTableTPI *tpi; 91 CHECK_DISPLAY(dpy); 92 ctx = CTX(dpy); 93 94 tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; 95 if (tpi && tpi->vaPutSurfaceBuf) { 96 return tpi->vaPutSurfaceBuf( ctx, surface, data, data_len, srcx, srcy, srcw, srch, 97 destx, desty, destw, desth, cliprects, number_cliprects, flags ); 98 } else 99 return VA_STATUS_ERROR_UNIMPLEMENTED; 100} 101 102VAStatus vaSetTimestampForSurface( 103 VADisplay dpy, 104 VASurfaceID surface, 105 long long timestamp 106) 107{ 108 VADriverContextP ctx; 109 struct VADriverVTableTPI *tpi; 110 CHECK_DISPLAY(dpy); 111 ctx = CTX(dpy); 112 113 tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; 114 if (tpi && tpi->vaSetTimestampForSurface) { 115 return tpi->vaSetTimestampForSurface(ctx, surface, timestamp); 116 } else 117 return VA_STATUS_ERROR_UNIMPLEMENTED; 118 119} 120 121 122