OSDN Git Service

Revert Pixmap-based EGL interfaces.
[android-x86/hardware-intel-common-libva.git] / va / va_backend.h
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 /*
26  * Video Decode Acceleration -Backend API
27  */
28
29 #ifndef _VA_BACKEND_H_
30 #define _VA_BACKEND_H_
31
32 #include <va/va.h>
33 #include <linux/videodev2.h>
34
35 typedef struct VADriverContext *VADriverContextP;
36 typedef struct VADisplayContext *VADisplayContextP;
37
38 struct VADriverVTable
39 {
40         VAStatus (*vaTerminate) ( VADriverContextP ctx );
41
42         VAStatus (*vaQueryConfigProfiles) (
43                 VADriverContextP ctx,
44                 VAProfile *profile_list,        /* out */
45                 int *num_profiles                       /* out */
46         );
47
48         VAStatus (*vaQueryConfigEntrypoints) (
49                 VADriverContextP ctx,
50                 VAProfile profile,
51                 VAEntrypoint  *entrypoint_list, /* out */
52                 int *num_entrypoints                    /* out */
53         );
54
55         VAStatus (*vaGetConfigAttributes) (
56                 VADriverContextP ctx,
57                 VAProfile profile,
58                 VAEntrypoint entrypoint,
59                 VAConfigAttrib *attrib_list,    /* in/out */
60                 int num_attribs
61         );
62
63         VAStatus (*vaCreateConfig) (
64                 VADriverContextP ctx,
65                 VAProfile profile, 
66                 VAEntrypoint entrypoint, 
67                 VAConfigAttrib *attrib_list,
68                 int num_attribs,
69                 VAConfigID *config_id           /* out */
70         );
71
72         VAStatus (*vaDestroyConfig) (
73                 VADriverContextP ctx,
74                 VAConfigID config_id
75         );
76
77         VAStatus (*vaQueryConfigAttributes) (
78                 VADriverContextP ctx,
79                 VAConfigID config_id, 
80                 VAProfile *profile,             /* out */
81                 VAEntrypoint *entrypoint,       /* out */
82                 VAConfigAttrib *attrib_list,    /* out */
83                 int *num_attribs                /* out */
84         );
85
86         VAStatus (*vaCreateSurfaces) (
87                 VADriverContextP ctx,
88                 int width,
89                 int height,
90                 int format,
91                 int num_surfaces,
92                 VASurfaceID *surfaces           /* out */
93         );
94
95         VAStatus (*vaDestroySurfaces) (
96                 VADriverContextP ctx,
97                 VASurfaceID *surface_list,
98                 int num_surfaces
99         );
100
101         VAStatus (*vaCreateContext) (
102                 VADriverContextP ctx,
103                 VAConfigID config_id,
104                 int picture_width,
105                 int picture_height,
106                 int flag,
107                 VASurfaceID *render_targets,
108                 int num_render_targets,
109                 VAContextID *context            /* out */
110         );
111
112         VAStatus (*vaDestroyContext) (
113                 VADriverContextP ctx,
114                 VAContextID context
115         );
116
117         VAStatus (*vaCreateBuffer) (
118                 VADriverContextP ctx,
119                 VAContextID context,            /* in */
120                 VABufferType type,              /* in */
121                 unsigned int size,              /* in */
122                 unsigned int num_elements,      /* in */
123                 void *data,                     /* in */
124                 VABufferID *buf_id              /* out */
125         );
126
127         VAStatus (*vaBufferSetNumElements) (
128                 VADriverContextP ctx,
129                 VABufferID buf_id,      /* in */
130                 unsigned int num_elements       /* in */
131         );
132
133         VAStatus (*vaMapBuffer) (
134                 VADriverContextP ctx,
135                 VABufferID buf_id,      /* in */
136                 void **pbuf         /* out */
137         );
138
139         VAStatus (*vaUnmapBuffer) (
140                 VADriverContextP ctx,
141                 VABufferID buf_id       /* in */
142         );
143
144         VAStatus (*vaDestroyBuffer) (
145                 VADriverContextP ctx,
146                 VABufferID buffer_id
147         );
148
149         VAStatus (*vaBeginPicture) (
150                 VADriverContextP ctx,
151                 VAContextID context,
152                 VASurfaceID render_target
153         );
154
155         VAStatus (*vaRenderPicture) (
156                 VADriverContextP ctx,
157                 VAContextID context,
158                 VABufferID *buffers,
159                 int num_buffers
160         );
161
162         VAStatus (*vaEndPicture) (
163                 VADriverContextP ctx,
164                 VAContextID context
165         );
166
167         VAStatus (*vaSyncSurface) (
168                 VADriverContextP ctx,
169                 VASurfaceID render_target
170         );
171
172         VAStatus (*vaQuerySurfaceStatus) (
173                 VADriverContextP ctx,
174                 VASurfaceID render_target,
175                 VASurfaceStatus *status /* out */
176         );
177
178         VAStatus (*vaQuerySurfaceError) (
179                 VADriverContextP ctx,
180                 VASurfaceID render_target,
181                 VAStatus error_status,
182                 void **error_info /*out*/
183         );
184
185         VAStatus (*vaPutSurface) (
186                 VADriverContextP ctx,
187                 VASurfaceID surface,
188                 void* draw, /* Drawable of window system */
189                 short srcx,
190                 short srcy,
191                 unsigned short srcw,
192                 unsigned short srch,
193                 short destx,
194                 short desty,
195                 unsigned short destw,
196                 unsigned short desth,
197                 VARectangle *cliprects, /* client supplied clip list */
198                 unsigned int number_cliprects, /* number of clip rects in the clip list */
199                 unsigned int flags /* de-interlacing flags */
200         );
201
202         VAStatus (*vaQueryImageFormats) (
203                 VADriverContextP ctx,
204                 VAImageFormat *format_list,        /* out */
205                 int *num_formats           /* out */
206         );
207
208         VAStatus (*vaCreateImage) (
209                 VADriverContextP ctx,
210                 VAImageFormat *format,
211                 int width,
212                 int height,
213                 VAImage *image     /* out */
214         );
215
216         VAStatus (*vaDeriveImage) (
217                 VADriverContextP ctx,
218                 VASurfaceID surface,
219                 VAImage *image     /* out */
220         );
221
222         VAStatus (*vaDestroyImage) (
223                 VADriverContextP ctx,
224                 VAImageID image
225         );
226         
227         VAStatus (*vaSetImagePalette) (
228                 VADriverContextP ctx,
229                 VAImageID image,
230                 /*
231                  * pointer to an array holding the palette data.  The size of the array is
232                  * num_palette_entries * entry_bytes in size.  The order of the components
233                  * in the palette is described by the component_order in VAImage struct
234                  */
235                 unsigned char *palette
236         );
237         
238         VAStatus (*vaGetImage) (
239                 VADriverContextP ctx,
240                 VASurfaceID surface,
241                 int x,     /* coordinates of the upper left source pixel */
242                 int y,
243                 unsigned int width, /* width and height of the region */
244                 unsigned int height,
245                 VAImageID image
246         );
247
248         VAStatus (*vaPutImage) (
249                 VADriverContextP ctx,
250                 VASurfaceID surface,
251                 VAImageID image,
252                 int src_x,
253                 int src_y,
254                 unsigned int src_width,
255                 unsigned int src_height,
256                 int dest_x,
257                 int dest_y,
258                 unsigned int dest_width,
259                 unsigned int dest_height
260         );
261
262         VAStatus (*vaQuerySubpictureFormats) (
263                 VADriverContextP ctx,
264                 VAImageFormat *format_list,        /* out */
265                 unsigned int *flags,       /* out */
266                 unsigned int *num_formats  /* out */
267         );
268
269         VAStatus (*vaCreateSubpicture) (
270                 VADriverContextP ctx,
271                 VAImageID image,
272                 VASubpictureID *subpicture   /* out */
273         );
274
275         VAStatus (*vaDestroySubpicture) (
276                 VADriverContextP ctx,
277                 VASubpictureID subpicture
278         );
279
280         VAStatus (*vaSetSubpictureImage) (
281                 VADriverContextP ctx,
282                 VASubpictureID subpicture,
283                 VAImageID image
284         );
285
286         VAStatus (*vaSetSubpictureChromakey) (
287                 VADriverContextP ctx,
288                 VASubpictureID subpicture,
289                 unsigned int chromakey_min,
290                 unsigned int chromakey_max,
291                 unsigned int chromakey_mask
292         );
293
294         VAStatus (*vaSetSubpictureGlobalAlpha) (
295                 VADriverContextP ctx,
296                 VASubpictureID subpicture,
297                 float global_alpha 
298         );
299
300         VAStatus (*vaAssociateSubpicture) (
301                 VADriverContextP ctx,
302                 VASubpictureID subpicture,
303                 VASurfaceID *target_surfaces,
304                 int num_surfaces,
305                 short src_x, /* upper left offset in subpicture */
306                 short src_y,
307                 unsigned short src_width,
308                 unsigned short src_height,
309                 short dest_x, /* upper left offset in surface */
310                 short dest_y,
311                 unsigned short dest_width,
312                 unsigned short dest_height,
313                 /*
314                  * whether to enable chroma-keying or global-alpha
315                  * see VA_SUBPICTURE_XXX values
316                  */
317                 unsigned int flags
318         );
319
320         VAStatus (*vaDeassociateSubpicture) (
321                 VADriverContextP ctx,
322                 VASubpictureID subpicture,
323                 VASurfaceID *target_surfaces,
324                 int num_surfaces
325         );
326
327         VAStatus (*vaQueryDisplayAttributes) (
328                 VADriverContextP ctx,
329                 VADisplayAttribute *attr_list,  /* out */
330                 int *num_attributes             /* out */
331         );
332
333         VAStatus (*vaGetDisplayAttributes) (
334                 VADriverContextP ctx,
335                 VADisplayAttribute *attr_list,  /* in/out */
336                 int num_attributes
337         );
338         
339         VAStatus (*vaSetDisplayAttributes) (
340                 VADriverContextP ctx,
341                 VADisplayAttribute *attr_list,
342                 int num_attributes
343         );
344
345         /* used by va trace */        
346         VAStatus (*vaBufferInfo) (
347                    VADriverContextP ctx,      /* in */
348                    VABufferID buf_id,         /* in */
349                    VABufferType *type,        /* out */
350                    unsigned int *size,        /* out */
351                    unsigned int *num_elements /* out */
352         );
353
354         /* lock/unlock surface for external access */    
355         VAStatus (*vaLockSurface) (
356                 VADriverContextP ctx,
357                 VASurfaceID surface,
358                 unsigned int *fourcc, /* out  for follow argument */
359                 unsigned int *luma_stride,
360                 unsigned int *chroma_u_stride,
361                 unsigned int *chroma_v_stride,
362                 unsigned int *luma_offset,
363                 unsigned int *chroma_u_offset,
364                 unsigned int *chroma_v_offset,
365                 unsigned int *buffer_name, /* if it is not NULL, assign the low lever
366                                             * surface buffer name
367                                             */
368                 void **buffer /* if it is not NULL, map the surface buffer for
369                                 * CPU access
370                                 */
371         );
372     
373         VAStatus (*vaUnlockSurface) (
374                 VADriverContextP ctx,
375                 VASurfaceID surface
376         );
377 };
378
379 struct VADriverContext
380 {
381     void *pDriverData;
382
383     /**
384      * The core VA implementation hooks.
385      *
386      * This structure is allocated from libva with calloc().
387      */
388     struct VADriverVTable *vtable;
389
390     /**
391      * The VA/GLX implementation hooks.
392      *
393      * This structure is intended for drivers that implement the
394      * VA/GLX API. The driver implementation is responsible for the
395      * allocation and deallocation of this structure.
396      */
397     struct VADriverVTableGLX *vtable_glx;
398
399     /**
400      * The VA/EGL implementation hooks.
401      *
402      * This structure is intended for drivers that implement the
403      * VA/EGL API. The driver implementation is responsible for the
404      * allocation and deallocation of this structure.
405      */
406     struct VADriverVTableEGL *vtable_egl;
407
408     /**
409      * The third-party/private implementation hooks.
410      *
411      * This structure is intended for drivers that implement the
412      * private API. The driver implementation is responsible for the
413      * allocation and deallocation of this structure.
414      */
415     void *vtable_tpi;
416
417     void *native_dpy;
418     int x11_screen;
419     int version_major;
420     int version_minor;
421     int max_profiles;
422     int max_entrypoints;
423     int max_attributes;
424     int max_image_formats;
425     int max_subpic_formats;
426     int max_display_attributes;
427     const char *str_vendor;
428
429     void *handle;                       /* dlopen handle */
430     
431     void *dri_state;
432     void *glx;                          /* opaque for GLX code */
433
434     unsigned long reserved[45];         /* reserve for future add-ins, decrease the subscript accordingly */
435 };
436
437 #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
438 struct VADisplayContext
439 {
440     int vadpy_magic;
441     
442     VADisplayContextP pNext;
443     VADriverContextP pDriverContext;
444
445     int (*vaIsValid) (
446         VADisplayContextP ctx
447     );
448
449     void (*vaDestroy) (
450         VADisplayContextP ctx
451     );
452
453     VAStatus (*vaGetDriverName) (
454         VADisplayContextP ctx,
455         char **driver_name
456     );
457
458     void *opaque; /* opaque for display extensions (e.g. GLX) */
459 };
460
461 typedef VAStatus (*VADriverInit) (
462     VADriverContextP driver_context
463 );
464
465 #endif /* _VA_BACKEND_H_ */