va_backend.h 10.4 KB
Newer Older
Waldo Bastian's avatar
Waldo Bastian committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/*
 * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sub license, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * Video Decode Acceleration -Backend API
 */

#ifndef _VA_BACKEND_H_
#define _VA_BACKEND_H_

Austin Yuan's avatar
Austin Yuan committed
32
#include <va/va.h>
Ren Zhaohan's avatar
Ren Zhaohan committed
33
#ifndef ANDROID
34
#include <X11/Xlib.h>
Ren Zhaohan's avatar
Ren Zhaohan committed
35
#endif
36
#include <linux/videodev2.h>
Waldo Bastian's avatar
Waldo Bastian committed
37

Waldo Bastian's avatar
Waldo Bastian committed
38
typedef struct VADriverContext *VADriverContextP;
Austin Yuan's avatar
Austin Yuan committed
39
typedef struct VADisplayContext *VADisplayContextP;
Waldo Bastian's avatar
Waldo Bastian committed
40

Ren Zhaohan's avatar
Ren Zhaohan committed
41 42 43 44
#ifdef ANDROID
#define Surface void
#endif

Waldo Bastian's avatar
Waldo Bastian committed
45
struct VADriverVTable
Waldo Bastian's avatar
Waldo Bastian committed
46
{
Waldo Bastian's avatar
Waldo Bastian committed
47
	VAStatus (*vaTerminate) ( VADriverContextP ctx );
Waldo Bastian's avatar
Waldo Bastian committed
48

Waldo Bastian's avatar
Waldo Bastian committed
49
	VAStatus (*vaQueryConfigProfiles) (
Waldo Bastian's avatar
Waldo Bastian committed
50 51 52 53 54 55 56 57 58 59 60 61
		VADriverContextP ctx,
		VAProfile *profile_list,	/* out */
		int *num_profiles			/* out */
	);

	VAStatus (*vaQueryConfigEntrypoints) (
		VADriverContextP ctx,
		VAProfile profile,
		VAEntrypoint  *entrypoint_list,	/* out */
		int *num_entrypoints			/* out */
	);

Waldo Bastian's avatar
Waldo Bastian committed
62
	VAStatus (*vaGetConfigAttributes) (
Waldo Bastian's avatar
Waldo Bastian committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
		VADriverContextP ctx,
		VAProfile profile,
		VAEntrypoint entrypoint,
		VAConfigAttrib *attrib_list,	/* in/out */
		int num_attribs
	);

	VAStatus (*vaCreateConfig) (
		VADriverContextP ctx,
		VAProfile profile, 
		VAEntrypoint entrypoint, 
		VAConfigAttrib *attrib_list,
		int num_attribs,
		VAConfigID *config_id		/* out */
	);

Waldo Bastian's avatar
Waldo Bastian committed
79 80 81 82 83 84
	VAStatus (*vaDestroyConfig) (
		VADriverContextP ctx,
		VAConfigID config_id
	);

	VAStatus (*vaQueryConfigAttributes) (
Waldo Bastian's avatar
Waldo Bastian committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98
		VADriverContextP ctx,
		VAConfigID config_id, 
		VAProfile *profile,		/* out */
		VAEntrypoint *entrypoint, 	/* out */
		VAConfigAttrib *attrib_list,	/* out */
		int *num_attribs		/* out */
	);

	VAStatus (*vaCreateSurfaces) (
		VADriverContextP ctx,
		int width,
		int height,
		int format,
		int num_surfaces,
Waldo Bastian's avatar
Waldo Bastian committed
99
		VASurfaceID *surfaces		/* out */
Waldo Bastian's avatar
Waldo Bastian committed
100 101
	);

Waldo Bastian's avatar
Waldo Bastian committed
102
	VAStatus (*vaDestroySurfaces) (
Waldo Bastian's avatar
Waldo Bastian committed
103
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
104
		VASurfaceID *surface_list,
Waldo Bastian's avatar
Waldo Bastian committed
105 106 107 108 109 110 111 112 113
		int num_surfaces
	);

	VAStatus (*vaCreateContext) (
		VADriverContextP ctx,
		VAConfigID config_id,
		int picture_width,
		int picture_height,
		int flag,
Waldo Bastian's avatar
Waldo Bastian committed
114
		VASurfaceID *render_targets,
Waldo Bastian's avatar
Waldo Bastian committed
115
		int num_render_targets,
Waldo Bastian's avatar
Waldo Bastian committed
116
		VAContextID *context		/* out */
Waldo Bastian's avatar
Waldo Bastian committed
117 118 119 120
	);

	VAStatus (*vaDestroyContext) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
121
		VAContextID context
Waldo Bastian's avatar
Waldo Bastian committed
122 123 124 125
	);

	VAStatus (*vaCreateBuffer) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
126 127 128 129 130 131
		VAContextID context,		/* in */
		VABufferType type,		/* in */
		unsigned int size,		/* in */
		unsigned int num_elements,	/* in */
		void *data,			/* in */
		VABufferID *buf_id		/* out */
Waldo Bastian's avatar
Waldo Bastian committed
132 133 134 135 136
	);

	VAStatus (*vaBufferSetNumElements) (
		VADriverContextP ctx,
		VABufferID buf_id,	/* in */
Waldo Bastian's avatar
Waldo Bastian committed
137
		unsigned int num_elements	/* in */
Waldo Bastian's avatar
Waldo Bastian committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
	);

	VAStatus (*vaMapBuffer) (
		VADriverContextP ctx,
		VABufferID buf_id,	/* in */
		void **pbuf         /* out */
	);

	VAStatus (*vaUnmapBuffer) (
		VADriverContextP ctx,
		VABufferID buf_id	/* in */
	);

	VAStatus (*vaDestroyBuffer) (
		VADriverContextP ctx,
		VABufferID buffer_id
	);

	VAStatus (*vaBeginPicture) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
158 159
		VAContextID context,
		VASurfaceID render_target
Waldo Bastian's avatar
Waldo Bastian committed
160 161 162 163
	);

	VAStatus (*vaRenderPicture) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
164
		VAContextID context,
Waldo Bastian's avatar
Waldo Bastian committed
165 166 167 168 169 170
		VABufferID *buffers,
		int num_buffers
	);

	VAStatus (*vaEndPicture) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
171
		VAContextID context
Waldo Bastian's avatar
Waldo Bastian committed
172 173 174 175
	);

	VAStatus (*vaSyncSurface) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
176
		VASurfaceID render_target
Waldo Bastian's avatar
Waldo Bastian committed
177 178 179 180
	);

	VAStatus (*vaQuerySurfaceStatus) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
181
		VASurfaceID render_target,
Waldo Bastian's avatar
Waldo Bastian committed
182 183 184 185 186
		VASurfaceStatus *status	/* out */
	);

	VAStatus (*vaPutSurface) (
    		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
187
		VASurfaceID surface,
188 189 190 191 192
#ifdef ANDROID
		Surface* draw, /* Drawable of window system */
#else
		Drawable draw,
#endif
Waldo Bastian's avatar
Waldo Bastian committed
193 194 195 196 197 198 199 200 201 202
		short srcx,
		short srcy,
		unsigned short srcw,
		unsigned short srch,
		short destx,
		short desty,
		unsigned short destw,
		unsigned short desth,
		VARectangle *cliprects, /* client supplied clip list */
		unsigned int number_cliprects, /* number of clip rects in the clip list */
Waldo Bastian's avatar
Waldo Bastian committed
203
		unsigned int flags /* de-interlacing flags */
Waldo Bastian's avatar
Waldo Bastian committed
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
	);

	VAStatus (*vaQueryImageFormats) (
		VADriverContextP ctx,
		VAImageFormat *format_list,        /* out */
		int *num_formats           /* out */
	);

	VAStatus (*vaCreateImage) (
		VADriverContextP ctx,
		VAImageFormat *format,
		int width,
		int height,
		VAImage *image     /* out */
	);

220 221 222 223 224 225
	VAStatus (*vaDeriveImage) (
		VADriverContextP ctx,
		VASurfaceID surface,
		VAImage *image     /* out */
	);

Waldo Bastian's avatar
Waldo Bastian committed
226 227
	VAStatus (*vaDestroyImage) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
228
		VAImageID image
Waldo Bastian's avatar
Waldo Bastian committed
229
	);
Waldo Bastian's avatar
Waldo Bastian committed
230 231 232 233 234 235 236 237 238 239 240 241
	
	VAStatus (*vaSetImagePalette) (
	        VADriverContextP ctx,
	        VAImageID image,
	        /*
                 * pointer to an array holding the palette data.  The size of the array is
                 * num_palette_entries * entry_bytes in size.  The order of the components
                 * in the palette is described by the component_order in VAImage struct
                 */
                unsigned char *palette
	);
	
Waldo Bastian's avatar
Waldo Bastian committed
242 243
	VAStatus (*vaGetImage) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
244
		VASurfaceID surface,
Waldo Bastian's avatar
Waldo Bastian committed
245 246 247 248
		int x,     /* coordinates of the upper left source pixel */
		int y,
		unsigned int width, /* width and height of the region */
		unsigned int height,
Waldo Bastian's avatar
Waldo Bastian committed
249
		VAImageID image
Waldo Bastian's avatar
Waldo Bastian committed
250 251 252
	);

	VAStatus (*vaPutImage) (
253 254 255 256 257 258 259 260 261 262 263 264 265
		VADriverContextP ctx,
		VASurfaceID surface,
		VAImageID image,
		int src_x,
		int src_y,
		unsigned int src_width,
		unsigned int src_height,
		int dest_x,
		int dest_y,
		unsigned int dest_width,
		unsigned int dest_height
	);

Waldo Bastian's avatar
Waldo Bastian committed
266 267 268 269 270 271 272 273 274
	VAStatus (*vaQuerySubpictureFormats) (
		VADriverContextP ctx,
		VAImageFormat *format_list,        /* out */
		unsigned int *flags,       /* out */
		unsigned int *num_formats  /* out */
	);

	VAStatus (*vaCreateSubpicture) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
275 276
		VAImageID image,
		VASubpictureID *subpicture   /* out */
Waldo Bastian's avatar
Waldo Bastian committed
277 278 279 280
	);

	VAStatus (*vaDestroySubpicture) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
281
		VASubpictureID subpicture
Waldo Bastian's avatar
Waldo Bastian committed
282 283 284 285
	);

        VAStatus (*vaSetSubpictureImage) (
                VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
286 287
                VASubpictureID subpicture,
                VAImageID image
Waldo Bastian's avatar
Waldo Bastian committed
288
        );
289

Waldo Bastian's avatar
Waldo Bastian committed
290 291
	VAStatus (*vaSetSubpictureChromakey) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
292
		VASubpictureID subpicture,
Waldo Bastian's avatar
Waldo Bastian committed
293
		unsigned int chromakey_min,
Waldo Bastian's avatar
Waldo Bastian committed
294 295
		unsigned int chromakey_max,
		unsigned int chromakey_mask
Waldo Bastian's avatar
Waldo Bastian committed
296 297 298 299
	);

	VAStatus (*vaSetSubpictureGlobalAlpha) (
		VADriverContextP ctx,
Waldo Bastian's avatar
Waldo Bastian committed
300
		VASubpictureID subpicture,
Waldo Bastian's avatar
Waldo Bastian committed
301 302 303 304
		float global_alpha 
	);

	VAStatus (*vaAssociateSubpicture) (
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
		VADriverContextP ctx,
		VASubpictureID subpicture,
		VASurfaceID *target_surfaces,
		int num_surfaces,
		short src_x, /* upper left offset in subpicture */
		short src_y,
		unsigned short src_width,
		unsigned short src_height,
		short dest_x, /* upper left offset in surface */
		short dest_y,
		unsigned short dest_width,
		unsigned short dest_height,
		/*
		 * whether to enable chroma-keying or global-alpha
		 * see VA_SUBPICTURE_XXX values
		 */
		unsigned int flags
	);

Waldo Bastian's avatar
Waldo Bastian committed
324 325 326 327 328 329 330
	VAStatus (*vaDeassociateSubpicture) (
		VADriverContextP ctx,
		VASubpictureID subpicture,
		VASurfaceID *target_surfaces,
		int num_surfaces
	);

Waldo Bastian's avatar
Waldo Bastian committed
331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
	VAStatus (*vaQueryDisplayAttributes) (
		VADriverContextP ctx,
		VADisplayAttribute *attr_list,	/* out */
		int *num_attributes		/* out */
        );

	VAStatus (*vaGetDisplayAttributes) (
		VADriverContextP ctx,
		VADisplayAttribute *attr_list,	/* in/out */
		int num_attributes
        );
        
        VAStatus (*vaSetDisplayAttributes) (
		VADriverContextP ctx,
                VADisplayAttribute *attr_list,
                int num_attributes
        );

349 350
        /* device specific */
	VAStatus (*vaCreateSurfaceFromCIFrame) (
Waldo Bastian's avatar
Waldo Bastian committed
351
		VADriverContextP ctx,
352 353
		unsigned long frame_id,
		VASurfaceID *surface		/* out */
Waldo Bastian's avatar
Waldo Bastian committed
354
	);
355 356
    
    
357 358 359 360 361 362
        VAStatus (*vaCreateSurfaceFromV4L2Buf) (
		VADriverContextP ctx,
                int v4l2_fd,         /* file descriptor of V4L2 device */
                struct v4l2_format *v4l2_fmt,       /* format of V4L2 */
                struct v4l2_buffer *v4l2_buf,       /* V4L2 buffer */
                VASurfaceID *surface	           /* out */
Austin Yuan's avatar
Austin Yuan committed
363
        );
Austin Yuan's avatar
Austin Yuan committed
364 365 366 367 368 369 370 371 372 373

        VAStatus (*vaBufferInfo) (
                   VADriverContextP ctx,
                   VAContextID context, /* in */
                   VABufferID buf_id, /* in */
                   VABufferType *type,    /* out */
                   unsigned int *size,    /* out */
                   unsigned int *num_elements /* out */
        );

374 375 376 377 378 379 380 381 382 383 384 385 386
    
        VAStatus (*vaCopySurfaceToBuffer) (
		VADriverContextP ctx,
                VASurfaceID surface,
                unsigned int *fourcc, /* out  for follow argument */
                unsigned int *luma_stride,
                unsigned int *chroma_u_stride,
                unsigned int *chroma_v_stride,
                unsigned int *luma_offset,
                unsigned int *chroma_u_offset,
                unsigned int *chroma_v_offset,
                void **buffer
        );
Waldo Bastian's avatar
Waldo Bastian committed
387 388 389 390 391 392
};

struct VADriverContext
{
    void *pDriverData;
    struct VADriverVTable vtable;
Waldo Bastian's avatar
Waldo Bastian committed
393

394
    void *native_dpy;
Waldo Bastian's avatar
Waldo Bastian committed
395 396 397 398 399 400 401 402 403 404 405 406
    int x11_screen;
    int version_major;
    int version_minor;
    int max_profiles;
    int max_entrypoints;
    int max_attributes;
    int max_image_formats;
    int max_subpic_formats;
    int max_display_attributes;
    const char *str_vendor;

    void *handle;			/* dlopen handle */
407 408
    
    void *dri_state;
Waldo Bastian's avatar
Waldo Bastian committed
409 410
};

411
#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
Austin Yuan's avatar
Austin Yuan committed
412 413
struct VADisplayContext
{
414 415
    int vadpy_magic;
    
Austin Yuan's avatar
Austin Yuan committed
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
    VADisplayContextP pNext;
    VADriverContextP pDriverContext;

    int (*vaIsValid) (
	VADisplayContextP ctx
    );

    void (*vaDestroy) (
	VADisplayContextP ctx
    );

    VAStatus (*vaGetDriverName) (
	VADisplayContextP ctx,
	char **driver_name
    );
};

Waldo Bastian's avatar
Waldo Bastian committed
433 434 435 436 437 438
typedef VAStatus (*VADriverInit) (
    VADriverContextP driver_context
);


#endif /* _VA_BACKEND_H_ */