Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5362 serge 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 
33
//#include 
34
 
35
typedef struct VADriverContext *VADriverContextP;
36
typedef struct VADisplayContext *VADisplayContextP;
37
 
38
/** \brief VA display types. */
39
enum {
40
    /** \brief Mask to major identifier for VA display type. */
41
    VA_DISPLAY_MAJOR_MASK = 0xf0,
42
 
43
    /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */
44
    VA_DISPLAY_X11      = 0x10,
45
    /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */
46
    VA_DISPLAY_GLX      = (VA_DISPLAY_X11 | (1 << 0)),
47
    /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */
48
    VA_DISPLAY_ANDROID  = 0x20,
49
    /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */
50
    VA_DISPLAY_DRM      = 0x30,
51
    /** \brief VA/DRM API is used, with a render-node device path */
52
    VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)),
53
    /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */
54
    VA_DISPLAY_WAYLAND  = 0x40,
55
};
56
 
57
struct VADriverVTable
58
{
59
	VAStatus (*vaTerminate) ( VADriverContextP ctx );
60
 
61
	VAStatus (*vaQueryConfigProfiles) (
62
		VADriverContextP ctx,
63
		VAProfile *profile_list,	/* out */
64
		int *num_profiles			/* out */
65
	);
66
 
67
	VAStatus (*vaQueryConfigEntrypoints) (
68
		VADriverContextP ctx,
69
		VAProfile profile,
70
		VAEntrypoint  *entrypoint_list,	/* out */
71
		int *num_entrypoints			/* out */
72
	);
73
 
74
	VAStatus (*vaGetConfigAttributes) (
75
		VADriverContextP ctx,
76
		VAProfile profile,
77
		VAEntrypoint entrypoint,
78
		VAConfigAttrib *attrib_list,	/* in/out */
79
		int num_attribs
80
	);
81
 
82
	VAStatus (*vaCreateConfig) (
83
		VADriverContextP ctx,
84
		VAProfile profile,
85
		VAEntrypoint entrypoint,
86
		VAConfigAttrib *attrib_list,
87
		int num_attribs,
88
		VAConfigID *config_id		/* out */
89
	);
90
 
91
	VAStatus (*vaDestroyConfig) (
92
		VADriverContextP ctx,
93
		VAConfigID config_id
94
	);
95
 
96
	VAStatus (*vaQueryConfigAttributes) (
97
		VADriverContextP ctx,
98
		VAConfigID config_id,
99
		VAProfile *profile,		/* out */
100
		VAEntrypoint *entrypoint, 	/* out */
101
		VAConfigAttrib *attrib_list,	/* out */
102
		int *num_attribs		/* out */
103
	);
104
 
105
	VAStatus (*vaCreateSurfaces) (
106
		VADriverContextP ctx,
107
		int width,
108
		int height,
109
		int format,
110
		int num_surfaces,
111
		VASurfaceID *surfaces		/* out */
112
	);
113
 
114
	VAStatus (*vaDestroySurfaces) (
115
		VADriverContextP ctx,
116
		VASurfaceID *surface_list,
117
		int num_surfaces
118
	);
119
 
120
	VAStatus (*vaCreateContext) (
121
		VADriverContextP ctx,
122
		VAConfigID config_id,
123
		int picture_width,
124
		int picture_height,
125
		int flag,
126
		VASurfaceID *render_targets,
127
		int num_render_targets,
128
		VAContextID *context		/* out */
129
	);
130
 
131
	VAStatus (*vaDestroyContext) (
132
		VADriverContextP ctx,
133
		VAContextID context
134
	);
135
 
136
	VAStatus (*vaCreateBuffer) (
137
		VADriverContextP ctx,
138
		VAContextID context,		/* in */
139
		VABufferType type,		/* in */
140
		unsigned int size,		/* in */
141
		unsigned int num_elements,	/* in */
142
		void *data,			/* in */
143
		VABufferID *buf_id		/* out */
144
	);
145
 
146
	VAStatus (*vaBufferSetNumElements) (
147
		VADriverContextP ctx,
148
		VABufferID buf_id,	/* in */
149
		unsigned int num_elements	/* in */
150
	);
151
 
152
	VAStatus (*vaMapBuffer) (
153
		VADriverContextP ctx,
154
		VABufferID buf_id,	/* in */
155
		void **pbuf         /* out */
156
	);
157
 
158
	VAStatus (*vaUnmapBuffer) (
159
		VADriverContextP ctx,
160
		VABufferID buf_id	/* in */
161
	);
162
 
163
	VAStatus (*vaDestroyBuffer) (
164
		VADriverContextP ctx,
165
		VABufferID buffer_id
166
	);
167
 
168
	VAStatus (*vaBeginPicture) (
169
		VADriverContextP ctx,
170
		VAContextID context,
171
		VASurfaceID render_target
172
	);
173
 
174
	VAStatus (*vaRenderPicture) (
175
		VADriverContextP ctx,
176
		VAContextID context,
177
		VABufferID *buffers,
178
		int num_buffers
179
	);
180
 
181
	VAStatus (*vaEndPicture) (
182
		VADriverContextP ctx,
183
		VAContextID context
184
	);
185
 
186
	VAStatus (*vaSyncSurface) (
187
		VADriverContextP ctx,
188
		VASurfaceID render_target
189
	);
190
 
191
	VAStatus (*vaQuerySurfaceStatus) (
192
		VADriverContextP ctx,
193
		VASurfaceID render_target,
194
		VASurfaceStatus *status	/* out */
195
	);
196
 
197
	VAStatus (*vaQuerySurfaceError) (
198
		VADriverContextP ctx,
199
		VASurfaceID render_target,
200
                VAStatus error_status,
201
                void **error_info /*out*/
202
	);
203
 
204
	VAStatus (*vaPutSurface) (
205
    		VADriverContextP ctx,
206
		VASurfaceID surface,
207
		void* draw, /* Drawable of window system */
208
		short srcx,
209
		short srcy,
210
		unsigned short srcw,
211
		unsigned short srch,
212
		short destx,
213
		short desty,
214
		unsigned short destw,
215
		unsigned short desth,
216
		VARectangle *cliprects, /* client supplied clip list */
217
		unsigned int number_cliprects, /* number of clip rects in the clip list */
218
		unsigned int flags /* de-interlacing flags */
219
	);
220
 
221
	VAStatus (*vaQueryImageFormats) (
222
		VADriverContextP ctx,
223
		VAImageFormat *format_list,        /* out */
224
		int *num_formats           /* out */
225
	);
226
 
227
	VAStatus (*vaCreateImage) (
228
		VADriverContextP ctx,
229
		VAImageFormat *format,
230
		int width,
231
		int height,
232
		VAImage *image     /* out */
233
	);
234
 
235
	VAStatus (*vaDeriveImage) (
236
		VADriverContextP ctx,
237
		VASurfaceID surface,
238
		VAImage *image     /* out */
239
	);
240
 
241
	VAStatus (*vaDestroyImage) (
242
		VADriverContextP ctx,
243
		VAImageID image
244
	);
245
 
246
	VAStatus (*vaSetImagePalette) (
247
	        VADriverContextP ctx,
248
	        VAImageID image,
249
	        /*
250
                 * pointer to an array holding the palette data.  The size of the array is
251
                 * num_palette_entries * entry_bytes in size.  The order of the components
252
                 * in the palette is described by the component_order in VAImage struct
253
                 */
254
                unsigned char *palette
255
	);
256
 
257
	VAStatus (*vaGetImage) (
258
		VADriverContextP ctx,
259
		VASurfaceID surface,
260
		int x,     /* coordinates of the upper left source pixel */
261
		int y,
262
		unsigned int width, /* width and height of the region */
263
		unsigned int height,
264
		VAImageID image
265
	);
266
 
267
	VAStatus (*vaPutImage) (
268
		VADriverContextP ctx,
269
		VASurfaceID surface,
270
		VAImageID image,
271
		int src_x,
272
		int src_y,
273
		unsigned int src_width,
274
		unsigned int src_height,
275
		int dest_x,
276
		int dest_y,
277
		unsigned int dest_width,
278
		unsigned int dest_height
279
	);
280
 
281
	VAStatus (*vaQuerySubpictureFormats) (
282
		VADriverContextP ctx,
283
		VAImageFormat *format_list,        /* out */
284
		unsigned int *flags,       /* out */
285
		unsigned int *num_formats  /* out */
286
	);
287
 
288
	VAStatus (*vaCreateSubpicture) (
289
		VADriverContextP ctx,
290
		VAImageID image,
291
		VASubpictureID *subpicture   /* out */
292
	);
293
 
294
	VAStatus (*vaDestroySubpicture) (
295
		VADriverContextP ctx,
296
		VASubpictureID subpicture
297
	);
298
 
299
        VAStatus (*vaSetSubpictureImage) (
300
                VADriverContextP ctx,
301
                VASubpictureID subpicture,
302
                VAImageID image
303
        );
304
 
305
	VAStatus (*vaSetSubpictureChromakey) (
306
		VADriverContextP ctx,
307
		VASubpictureID subpicture,
308
		unsigned int chromakey_min,
309
		unsigned int chromakey_max,
310
		unsigned int chromakey_mask
311
	);
312
 
313
	VAStatus (*vaSetSubpictureGlobalAlpha) (
314
		VADriverContextP ctx,
315
		VASubpictureID subpicture,
316
		float global_alpha
317
	);
318
 
319
	VAStatus (*vaAssociateSubpicture) (
320
		VADriverContextP ctx,
321
		VASubpictureID subpicture,
322
		VASurfaceID *target_surfaces,
323
		int num_surfaces,
324
		short src_x, /* upper left offset in subpicture */
325
		short src_y,
326
		unsigned short src_width,
327
		unsigned short src_height,
328
		short dest_x, /* upper left offset in surface */
329
		short dest_y,
330
		unsigned short dest_width,
331
		unsigned short dest_height,
332
		/*
333
		 * whether to enable chroma-keying or global-alpha
334
		 * see VA_SUBPICTURE_XXX values
335
		 */
336
		unsigned int flags
337
	);
338
 
339
	VAStatus (*vaDeassociateSubpicture) (
340
		VADriverContextP ctx,
341
		VASubpictureID subpicture,
342
		VASurfaceID *target_surfaces,
343
		int num_surfaces
344
	);
345
 
346
	VAStatus (*vaQueryDisplayAttributes) (
347
		VADriverContextP ctx,
348
		VADisplayAttribute *attr_list,	/* out */
349
		int *num_attributes		/* out */
350
        );
351
 
352
	VAStatus (*vaGetDisplayAttributes) (
353
		VADriverContextP ctx,
354
		VADisplayAttribute *attr_list,	/* in/out */
355
		int num_attributes
356
        );
357
 
358
        VAStatus (*vaSetDisplayAttributes) (
359
		VADriverContextP ctx,
360
                VADisplayAttribute *attr_list,
361
                int num_attributes
362
        );
363
 
364
        /* used by va trace */
365
        VAStatus (*vaBufferInfo) (
366
                   VADriverContextP ctx,      /* in */
367
                   VABufferID buf_id,         /* in */
368
                   VABufferType *type,        /* out */
369
                   unsigned int *size,        /* out */
370
                   unsigned int *num_elements /* out */
371
        );
372
 
373
        /* lock/unlock surface for external access */
374
        VAStatus (*vaLockSurface) (
375
		VADriverContextP ctx,
376
                VASurfaceID surface,
377
                unsigned int *fourcc, /* out  for follow argument */
378
                unsigned int *luma_stride,
379
                unsigned int *chroma_u_stride,
380
                unsigned int *chroma_v_stride,
381
                unsigned int *luma_offset,
382
                unsigned int *chroma_u_offset,
383
                unsigned int *chroma_v_offset,
384
                unsigned int *buffer_name, /* if it is not NULL, assign the low lever
385
                                            * surface buffer name
386
                                            */
387
                void **buffer /* if it is not NULL, map the surface buffer for
388
                                * CPU access
389
                                */
390
        );
391
 
392
        VAStatus (*vaUnlockSurface) (
393
		VADriverContextP ctx,
394
                VASurfaceID surface
395
        );
396
 
397
        /* DEPRECATED */
398
        VAStatus
399
        (*vaGetSurfaceAttributes)(
400
            VADriverContextP    dpy,
401
            VAConfigID          config,
402
            VASurfaceAttrib    *attrib_list,
403
            unsigned int        num_attribs
404
        );
405
 
406
        VAStatus
407
        (*vaCreateSurfaces2)(
408
            VADriverContextP    ctx,
409
            unsigned int        format,
410
            unsigned int        width,
411
            unsigned int        height,
412
            VASurfaceID        *surfaces,
413
            unsigned int        num_surfaces,
414
            VASurfaceAttrib    *attrib_list,
415
            unsigned int        num_attribs
416
        );
417
 
418
        VAStatus
419
        (*vaQuerySurfaceAttributes)(
420
            VADriverContextP    dpy,
421
            VAConfigID          config,
422
            VASurfaceAttrib    *attrib_list,
423
            unsigned int       *num_attribs
424
        );
425
 
426
        VAStatus
427
        (*vaAcquireBufferHandle)(
428
            VADriverContextP    ctx,
429
            VABufferID          buf_id,         /* in */
430
            VABufferInfo *      buf_info        /* in/out */
431
        );
432
 
433
        VAStatus
434
        (*vaReleaseBufferHandle)(
435
            VADriverContextP    ctx,
436
            VABufferID          buf_id          /* in */
437
        );
438
};
439
 
440
struct VADriverContext
441
{
442
    void *pDriverData;
443
 
444
    /**
445
     * The core VA implementation hooks.
446
     *
447
     * This structure is allocated from libva with calloc().
448
     */
449
    struct VADriverVTable *vtable;
450
 
451
    /**
452
     * The VA/GLX implementation hooks.
453
     *
454
     * This structure is intended for drivers that implement the
455
     * VA/GLX API. The driver implementation is responsible for the
456
     * allocation and deallocation of this structure.
457
     */
458
    struct VADriverVTableGLX *vtable_glx;
459
 
460
    /**
461
     * The VA/EGL implementation hooks.
462
     *
463
     * This structure is intended for drivers that implement the
464
     * VA/EGL API. The driver implementation is responsible for the
465
     * allocation and deallocation of this structure.
466
     */
467
    struct VADriverVTableEGL *vtable_egl;
468
 
469
    /**
470
     * The third-party/private implementation hooks.
471
     *
472
     * This structure is intended for drivers that implement the
473
     * private API. The driver implementation is responsible for the
474
     * allocation and deallocation of this structure.
475
     */
476
    void *vtable_tpi;
477
 
478
    void *native_dpy;
479
    int x11_screen;
480
    int version_major;
481
    int version_minor;
482
    int max_profiles;
483
    int max_entrypoints;
484
    int max_attributes;
485
    int max_image_formats;
486
    int max_subpic_formats;
487
    int max_display_attributes;
488
    const char *str_vendor;
489
 
490
    void *handle;			/* dlopen handle */
491
 
492
    /**
493
     * \brief DRM state.
494
     *
495
     * This field holds driver specific data for DRM-based
496
     * drivers. This structure is allocated from libva with
497
     * calloc(). Do not deallocate from within VA driver
498
     * implementations.
499
     *
500
     * All structures shall be derived from struct drm_state. So, for
501
     * instance, this field holds a dri_state structure for VA/X11
502
     * drivers that use the DRM protocol.
503
     */
504
    void *drm_state;
505
 
506
    void *glx;				/* opaque for GLX code */
507
 
508
    /** \brief VA display type. */
509
    unsigned long display_type;
510
 
511
    /**
512
     * The VA/Wayland implementation hooks.
513
     *
514
     * This structure is intended for drivers that implement the
515
     * VA/Wayland API. libVA allocates this structure with calloc()
516
     * and owns the resulting memory.
517
     */
518
    struct VADriverVTableWayland *vtable_wayland;
519
 
520
    /**
521
     * \brief The VA/VPP implementation hooks.
522
     *
523
     * This structure is allocated from libva with calloc().
524
     */
525
    struct VADriverVTableVPP *vtable_vpp;
526
 
527
    unsigned long reserved[42];         /* reserve for future add-ins, decrease the subscript accordingly */
528
};
529
 
530
#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
531
struct VADisplayContext
532
{
533
    int vadpy_magic;
534
 
535
    VADisplayContextP pNext;
536
    VADriverContextP pDriverContext;
537
 
538
    int (*vaIsValid) (
539
	VADisplayContextP ctx
540
    );
541
 
542
    void (*vaDestroy) (
543
	VADisplayContextP ctx
544
    );
545
 
546
    VAStatus (*vaGetDriverName) (
547
	VADisplayContextP ctx,
548
	char **driver_name
549
    );
550
 
551
    void *opaque; /* opaque for display extensions (e.g. GLX) */
552
    void *vatrace; /* opaque for VA trace context */
553
    void *vafool; /* opaque for VA fool context */
554
};
555
 
556
typedef VAStatus (*VADriverInit) (
557
    VADriverContextP driver_context
558
);
559
 
560
#endif /* _VA_BACKEND_H_ */