Index: third_party/libva/va/va_backend.h |
diff --git a/third_party/libva/va/va_backend.h b/third_party/libva/va/va_backend.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..47ca71902da701615d68e97d53cb2dd83205dc94 |
--- /dev/null |
+++ b/third_party/libva/va/va_backend.h |
@@ -0,0 +1,475 @@ |
+/* |
+ * 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_ |
+ |
+#include <va/va.h> |
+#include <linux/videodev2.h> |
+ |
+typedef struct VADriverContext *VADriverContextP; |
+typedef struct VADisplayContext *VADisplayContextP; |
+ |
+struct VADriverVTable |
+{ |
+ VAStatus (*vaTerminate) ( VADriverContextP ctx ); |
+ |
+ VAStatus (*vaQueryConfigProfiles) ( |
+ VADriverContextP ctx, |
+ VAProfile *profile_list, /* out */ |
+ int *num_profiles /* out */ |
+ ); |
+ |
+ VAStatus (*vaQueryConfigEntrypoints) ( |
+ VADriverContextP ctx, |
+ VAProfile profile, |
+ VAEntrypoint *entrypoint_list, /* out */ |
+ int *num_entrypoints /* out */ |
+ ); |
+ |
+ VAStatus (*vaGetConfigAttributes) ( |
+ 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 */ |
+ ); |
+ |
+ VAStatus (*vaDestroyConfig) ( |
+ VADriverContextP ctx, |
+ VAConfigID config_id |
+ ); |
+ |
+ VAStatus (*vaQueryConfigAttributes) ( |
+ 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, |
+ VASurfaceID *surfaces /* out */ |
+ ); |
+ |
+ VAStatus (*vaDestroySurfaces) ( |
+ VADriverContextP ctx, |
+ VASurfaceID *surface_list, |
+ int num_surfaces |
+ ); |
+ |
+ VAStatus (*vaCreateContext) ( |
+ VADriverContextP ctx, |
+ VAConfigID config_id, |
+ int picture_width, |
+ int picture_height, |
+ int flag, |
+ VASurfaceID *render_targets, |
+ int num_render_targets, |
+ VAContextID *context /* out */ |
+ ); |
+ |
+ VAStatus (*vaDestroyContext) ( |
+ VADriverContextP ctx, |
+ VAContextID context |
+ ); |
+ |
+ VAStatus (*vaCreateBuffer) ( |
+ VADriverContextP ctx, |
+ VAContextID context, /* in */ |
+ VABufferType type, /* in */ |
+ unsigned int size, /* in */ |
+ unsigned int num_elements, /* in */ |
+ void *data, /* in */ |
+ VABufferID *buf_id /* out */ |
+ ); |
+ |
+ VAStatus (*vaBufferSetNumElements) ( |
+ VADriverContextP ctx, |
+ VABufferID buf_id, /* in */ |
+ unsigned int num_elements /* in */ |
+ ); |
+ |
+ 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, |
+ VAContextID context, |
+ VASurfaceID render_target |
+ ); |
+ |
+ VAStatus (*vaRenderPicture) ( |
+ VADriverContextP ctx, |
+ VAContextID context, |
+ VABufferID *buffers, |
+ int num_buffers |
+ ); |
+ |
+ VAStatus (*vaEndPicture) ( |
+ VADriverContextP ctx, |
+ VAContextID context |
+ ); |
+ |
+ VAStatus (*vaSyncSurface) ( |
+ VADriverContextP ctx, |
+ VASurfaceID render_target |
+ ); |
+ |
+ VAStatus (*vaQuerySurfaceStatus) ( |
+ VADriverContextP ctx, |
+ VASurfaceID render_target, |
+ VASurfaceStatus *status /* out */ |
+ ); |
+ |
+ VAStatus (*vaQuerySurfaceError) ( |
+ VADriverContextP ctx, |
+ VASurfaceID render_target, |
+ VAStatus error_status, |
+ void **error_info /*out*/ |
+ ); |
+ |
+ VAStatus (*vaPutSurface) ( |
+ VADriverContextP ctx, |
+ VASurfaceID surface, |
+ void* draw, /* Drawable of window system */ |
+ 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 */ |
+ unsigned int flags /* de-interlacing flags */ |
+ ); |
+ |
+ 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 */ |
+ ); |
+ |
+ VAStatus (*vaDeriveImage) ( |
+ VADriverContextP ctx, |
+ VASurfaceID surface, |
+ VAImage *image /* out */ |
+ ); |
+ |
+ VAStatus (*vaDestroyImage) ( |
+ VADriverContextP ctx, |
+ VAImageID image |
+ ); |
+ |
+ 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 |
+ ); |
+ |
+ VAStatus (*vaGetImage) ( |
+ VADriverContextP ctx, |
+ VASurfaceID surface, |
+ int x, /* coordinates of the upper left source pixel */ |
+ int y, |
+ unsigned int width, /* width and height of the region */ |
+ unsigned int height, |
+ VAImageID image |
+ ); |
+ |
+ VAStatus (*vaPutImage) ( |
+ 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 |
+ ); |
+ |
+ VAStatus (*vaQuerySubpictureFormats) ( |
+ VADriverContextP ctx, |
+ VAImageFormat *format_list, /* out */ |
+ unsigned int *flags, /* out */ |
+ unsigned int *num_formats /* out */ |
+ ); |
+ |
+ VAStatus (*vaCreateSubpicture) ( |
+ VADriverContextP ctx, |
+ VAImageID image, |
+ VASubpictureID *subpicture /* out */ |
+ ); |
+ |
+ VAStatus (*vaDestroySubpicture) ( |
+ VADriverContextP ctx, |
+ VASubpictureID subpicture |
+ ); |
+ |
+ VAStatus (*vaSetSubpictureImage) ( |
+ VADriverContextP ctx, |
+ VASubpictureID subpicture, |
+ VAImageID image |
+ ); |
+ |
+ VAStatus (*vaSetSubpictureChromakey) ( |
+ VADriverContextP ctx, |
+ VASubpictureID subpicture, |
+ unsigned int chromakey_min, |
+ unsigned int chromakey_max, |
+ unsigned int chromakey_mask |
+ ); |
+ |
+ VAStatus (*vaSetSubpictureGlobalAlpha) ( |
+ VADriverContextP ctx, |
+ VASubpictureID subpicture, |
+ float global_alpha |
+ ); |
+ |
+ VAStatus (*vaAssociateSubpicture) ( |
+ 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 |
+ ); |
+ |
+ VAStatus (*vaDeassociateSubpicture) ( |
+ VADriverContextP ctx, |
+ VASubpictureID subpicture, |
+ VASurfaceID *target_surfaces, |
+ int num_surfaces |
+ ); |
+ |
+ 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 |
+ ); |
+ |
+ /* used by va trace */ |
+ VAStatus (*vaBufferInfo) ( |
+ VADriverContextP ctx, /* in */ |
+ VABufferID buf_id, /* in */ |
+ VABufferType *type, /* out */ |
+ unsigned int *size, /* out */ |
+ unsigned int *num_elements /* out */ |
+ ); |
+ |
+ /* lock/unlock surface for external access */ |
+ VAStatus (*vaLockSurface) ( |
+ 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, |
+ unsigned int *buffer_name, /* if it is not NULL, assign the low lever |
+ * surface buffer name |
+ */ |
+ void **buffer /* if it is not NULL, map the surface buffer for |
+ * CPU access |
+ */ |
+ ); |
+ |
+ VAStatus (*vaUnlockSurface) ( |
+ VADriverContextP ctx, |
+ VASurfaceID surface |
+ ); |
+}; |
+ |
+struct VADriverContext |
+{ |
+ void *pDriverData; |
+ |
+ /** |
+ * The core VA implementation hooks. |
+ * |
+ * This structure is allocated from libva with calloc(). |
+ */ |
+ struct VADriverVTable *vtable; |
+ |
+ /** |
+ * The VA/GLX implementation hooks. |
+ * |
+ * This structure is intended for drivers that implement the |
+ * VA/GLX API. The driver implementation is responsible for the |
+ * allocation and deallocation of this structure. |
+ */ |
+ struct VADriverVTableGLX *vtable_glx; |
+ |
+ /** |
+ * The VA/EGL implementation hooks. |
+ * |
+ * This structure is intended for drivers that implement the |
+ * VA/EGL API. The driver implementation is responsible for the |
+ * allocation and deallocation of this structure. |
+ */ |
+ struct VADriverVTableEGL *vtable_egl; |
+ |
+ /** |
+ * The third-party/private implementation hooks. |
+ * |
+ * This structure is intended for drivers that implement the |
+ * private API. The driver implementation is responsible for the |
+ * allocation and deallocation of this structure. |
+ */ |
+ void *vtable_tpi; |
+ |
+ void *native_dpy; |
+ 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 */ |
+ |
+ void *dri_state; |
+ void *glx; /* opaque for GLX code */ |
+ void *egl; |
+ unsigned long reserved[44]; /* reserve for future add-ins, decrease the subscript accordingly */ |
+}; |
+ |
+#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ |
+struct VADisplayContext |
+{ |
+ int vadpy_magic; |
+ |
+ VADisplayContextP pNext; |
+ VADriverContextP pDriverContext; |
+ |
+ int (*vaIsValid) ( |
+ VADisplayContextP ctx |
+ ); |
+ |
+ void (*vaDestroy) ( |
+ VADisplayContextP ctx |
+ ); |
+ |
+ VAStatus (*vaGetDriverName) ( |
+ VADisplayContextP ctx, |
+ char **driver_name |
+ ); |
+ |
+ void *opaque; /* opaque for display extensions (e.g. GLX) */ |
+ |
+ VAStatus (*vaCreateNativePixmap) ( |
+ VADisplayContextP pDisplayContext, |
+ unsigned int width, |
+ unsigned int height, |
+ void **native_pixmap); |
+ |
+ VAStatus (*vaFreeNativePixmap) ( |
+ VADisplayContextP pDisplayContext, |
+ void *native_pixmap); |
+}; |
+ |
+typedef VAStatus (*VADriverInit) ( |
+ VADriverContextP driver_context |
+); |
+ |
+#endif /* _VA_BACKEND_H_ */ |