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  */
vaCreateSurfacesWithAttribute(VADisplay dpy,int width,int height,int format,int num_surfaces,VASurfaceID * surfaces,VASurfaceAttributeTPI * attribute_tpi)46 VAStatus 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 
vaPutSurfaceBuf(VADisplay dpy,VASurfaceID surface,unsigned char * data,int * data_len,short srcx,short srcy,unsigned short srcw,unsigned short srch,short destx,short desty,unsigned short destw,unsigned short desth,VARectangle * cliprects,unsigned int number_cliprects,unsigned int flags)71 VAStatus 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 
vaSetTimestampForSurface(VADisplay dpy,VASurfaceID surface,long long timestamp)102 VAStatus 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