2 * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
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:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
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.
26 * Video Decode Acceleration -Backend API
29 #ifndef _VA_BACKEND_H_
30 #define _VA_BACKEND_H_
36 #include <linux/videodev2.h>
38 typedef struct VADriverContext *VADriverContextP;
39 typedef struct VADisplayContext *VADisplayContextP;
47 VAStatus (*vaTerminate) ( VADriverContextP ctx );
49 VAStatus (*vaQueryConfigProfiles) (
51 VAProfile *profile_list, /* out */
52 int *num_profiles /* out */
55 VAStatus (*vaQueryConfigEntrypoints) (
58 VAEntrypoint *entrypoint_list, /* out */
59 int *num_entrypoints /* out */
62 VAStatus (*vaGetConfigAttributes) (
65 VAEntrypoint entrypoint,
66 VAConfigAttrib *attrib_list, /* in/out */
70 VAStatus (*vaCreateConfig) (
73 VAEntrypoint entrypoint,
74 VAConfigAttrib *attrib_list,
76 VAConfigID *config_id /* out */
79 VAStatus (*vaDestroyConfig) (
84 VAStatus (*vaQueryConfigAttributes) (
87 VAProfile *profile, /* out */
88 VAEntrypoint *entrypoint, /* out */
89 VAConfigAttrib *attrib_list, /* out */
90 int *num_attribs /* out */
93 VAStatus (*vaCreateSurfaces) (
99 VASurfaceID *surfaces /* out */
102 VAStatus (*vaDestroySurfaces) (
103 VADriverContextP ctx,
104 VASurfaceID *surface_list,
108 VAStatus (*vaCreateContext) (
109 VADriverContextP ctx,
110 VAConfigID config_id,
114 VASurfaceID *render_targets,
115 int num_render_targets,
116 VAContextID *context /* out */
119 VAStatus (*vaDestroyContext) (
120 VADriverContextP ctx,
124 VAStatus (*vaCreateBuffer) (
125 VADriverContextP ctx,
126 VAContextID context, /* in */
127 VABufferType type, /* in */
128 unsigned int size, /* in */
129 unsigned int num_elements, /* in */
131 VABufferID *buf_id /* out */
134 VAStatus (*vaBufferSetNumElements) (
135 VADriverContextP ctx,
136 VABufferID buf_id, /* in */
137 unsigned int num_elements /* in */
140 VAStatus (*vaMapBuffer) (
141 VADriverContextP ctx,
142 VABufferID buf_id, /* in */
143 void **pbuf /* out */
146 VAStatus (*vaUnmapBuffer) (
147 VADriverContextP ctx,
148 VABufferID buf_id /* in */
151 VAStatus (*vaDestroyBuffer) (
152 VADriverContextP ctx,
156 VAStatus (*vaBeginPicture) (
157 VADriverContextP ctx,
159 VASurfaceID render_target
162 VAStatus (*vaRenderPicture) (
163 VADriverContextP ctx,
169 VAStatus (*vaEndPicture) (
170 VADriverContextP ctx,
174 VAStatus (*vaSyncSurface) (
175 VADriverContextP ctx,
176 VASurfaceID render_target
179 VAStatus (*vaQuerySurfaceStatus) (
180 VADriverContextP ctx,
181 VASurfaceID render_target,
182 VASurfaceStatus *status /* out */
185 VAStatus (*vaPutSurface) (
186 VADriverContextP ctx,
188 void * draw, /* Drawable of window system */
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 */
202 VAStatus (*vaPutSurfaceBuf) (
203 VADriverContextP ctx,
205 Drawable draw, /* X Drawable */
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 */
221 VAStatus (*vaQueryImageFormats) (
222 VADriverContextP ctx,
223 VAImageFormat *format_list, /* out */
224 int *num_formats /* out */
227 VAStatus (*vaCreateImage) (
228 VADriverContextP ctx,
229 VAImageFormat *format,
232 VAImage *image /* out */
235 VAStatus (*vaDeriveImage) (
236 VADriverContextP ctx,
238 VAImage *image /* out */
241 VAStatus (*vaDestroyImage) (
242 VADriverContextP ctx,
246 VAStatus (*vaSetImagePalette) (
247 VADriverContextP ctx,
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
254 unsigned char *palette
257 VAStatus (*vaGetImage) (
258 VADriverContextP ctx,
260 int x, /* coordinates of the upper left source pixel */
262 unsigned int width, /* width and height of the region */
267 VAStatus (*vaPutImage) (
268 VADriverContextP ctx,
273 unsigned int src_width,
274 unsigned int src_height,
277 unsigned int dest_width,
278 unsigned int dest_height
281 VAStatus (*vaQuerySubpictureFormats) (
282 VADriverContextP ctx,
283 VAImageFormat *format_list, /* out */
284 unsigned int *flags, /* out */
285 unsigned int *num_formats /* out */
288 VAStatus (*vaCreateSubpicture) (
289 VADriverContextP ctx,
291 VASubpictureID *subpicture /* out */
294 VAStatus (*vaDestroySubpicture) (
295 VADriverContextP ctx,
296 VASubpictureID subpicture
299 VAStatus (*vaSetSubpictureImage) (
300 VADriverContextP ctx,
301 VASubpictureID subpicture,
305 VAStatus (*vaSetSubpictureChromakey) (
306 VADriverContextP ctx,
307 VASubpictureID subpicture,
308 unsigned int chromakey_min,
309 unsigned int chromakey_max,
310 unsigned int chromakey_mask
313 VAStatus (*vaSetSubpictureGlobalAlpha) (
314 VADriverContextP ctx,
315 VASubpictureID subpicture,
319 VAStatus (*vaAssociateSubpicture) (
320 VADriverContextP ctx,
321 VASubpictureID subpicture,
322 VASurfaceID *target_surfaces,
324 short src_x, /* upper left offset in subpicture */
326 unsigned short src_width,
327 unsigned short src_height,
328 short dest_x, /* upper left offset in surface */
330 unsigned short dest_width,
331 unsigned short dest_height,
333 * whether to enable chroma-keying or global-alpha
334 * see VA_SUBPICTURE_XXX values
339 VAStatus (*vaDeassociateSubpicture) (
340 VADriverContextP ctx,
341 VASubpictureID subpicture,
342 VASurfaceID *target_surfaces,
346 VAStatus (*vaQueryDisplayAttributes) (
347 VADriverContextP ctx,
348 VADisplayAttribute *attr_list, /* out */
349 int *num_attributes /* out */
352 VAStatus (*vaGetDisplayAttributes) (
353 VADriverContextP ctx,
354 VADisplayAttribute *attr_list, /* in/out */
358 VAStatus (*vaSetDisplayAttributes) (
359 VADriverContextP ctx,
360 VADisplayAttribute *attr_list,
364 /* device specific */
365 VAStatus (*vaCreateSurfaceFromCIFrame) (
366 VADriverContextP ctx,
367 unsigned long frame_id,
368 VASurfaceID *surface /* out */
372 VAStatus (*vaCreateSurfaceFromV4L2Buf) (
373 VADriverContextP ctx,
374 int v4l2_fd, /* file descriptor of V4L2 device */
375 struct v4l2_format *v4l2_fmt, /* format of V4L2 */
376 struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */
377 VASurfaceID *surface /* out */
380 VAStatus (*vaBufferInfo) (
381 VADriverContextP ctx,
382 VAContextID context, /* in */
383 VABufferID buf_id, /* in */
384 VABufferType *type, /* out */
385 unsigned int *size, /* out */
386 unsigned int *num_elements /* out */
390 VAStatus (*vaCopySurfaceToBuffer) (
391 VADriverContextP ctx,
393 unsigned int *fourcc, /* out for follow argument */
394 unsigned int *luma_stride,
395 unsigned int *chroma_u_stride,
396 unsigned int *chroma_v_stride,
397 unsigned int *luma_offset,
398 unsigned int *chroma_u_offset,
399 unsigned int *chroma_v_offset,
404 struct VADriverContext
407 struct VADriverVTable vtable;
416 int max_image_formats;
417 int max_subpic_formats;
418 int max_display_attributes;
419 const char *str_vendor;
421 void *handle; /* dlopen handle */
426 #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
427 struct VADisplayContext
431 VADisplayContextP pNext;
432 VADriverContextP pDriverContext;
435 VADisplayContextP ctx
439 VADisplayContextP ctx
442 VAStatus (*vaGetDriverName) (
443 VADisplayContextP ctx,
448 typedef VAStatus (*VADriverInit) (
449 VADriverContextP driver_context
453 #endif /* _VA_BACKEND_H_ */