You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
544 lines
14 KiB
544 lines
14 KiB
/* |
|
* 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> |
|
|
|
typedef struct VADriverContext *VADriverContextP; |
|
typedef struct VADisplayContext *VADisplayContextP; |
|
|
|
/** \brief VA display types. */ |
|
enum { |
|
/** \brief Mask to major identifier for VA display type. */ |
|
VA_DISPLAY_MAJOR_MASK = 0xf0, |
|
|
|
/** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ |
|
VA_DISPLAY_X11 = 0x10, |
|
/** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ |
|
VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), |
|
/** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ |
|
VA_DISPLAY_ANDROID = 0x20, |
|
/** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ |
|
VA_DISPLAY_DRM = 0x30, |
|
/** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ |
|
VA_DISPLAY_WAYLAND = 0x40, |
|
}; |
|
|
|
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 |
|
); |
|
|
|
/* DEPRECATED */ |
|
VAStatus |
|
(*vaGetSurfaceAttributes)( |
|
VADriverContextP ctx, |
|
VAConfigID config, |
|
VASurfaceAttrib *attrib_list, |
|
unsigned int num_attribs |
|
); |
|
|
|
VAStatus |
|
(*vaCreateSurfaces2)( |
|
VADriverContextP ctx, |
|
unsigned int format, |
|
unsigned int width, |
|
unsigned int height, |
|
VASurfaceID *surfaces, |
|
unsigned int num_surfaces, |
|
VASurfaceAttrib *attrib_list, |
|
unsigned int num_attribs |
|
); |
|
|
|
VAStatus |
|
(*vaQuerySurfaceAttributes)( |
|
VADriverContextP dpy, |
|
VAConfigID config, |
|
VASurfaceAttrib *attrib_list, |
|
unsigned int *num_attribs |
|
); |
|
}; |
|
|
|
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 */ |
|
|
|
/** |
|
* \brief DRM state. |
|
* |
|
* This field holds driver specific data for DRM-based |
|
* drivers. This structure is allocated from libva with |
|
* calloc(). Do not deallocate from within VA driver |
|
* implementations. |
|
* |
|
* All structures shall be derived from struct drm_state. So, for |
|
* instance, this field holds a dri_state structure for VA/X11 |
|
* drivers that use the DRM protocol. |
|
*/ |
|
void *drm_state; |
|
|
|
void *glx; /* opaque for GLX code */ |
|
|
|
/** |
|
* \brief The VA/VPP implementation hooks. |
|
* |
|
* This structure is allocated from libva with calloc(). |
|
*/ |
|
struct VADriverVTableVPP *vtable_vpp; |
|
|
|
/** \brief VA display type. */ |
|
unsigned long display_type; |
|
|
|
/** |
|
* The VA/Wayland implementation hooks. |
|
* |
|
* This structure is intended for drivers that implement the |
|
* VA/Wayland API. libVA allocates this structure with calloc() |
|
* and owns the resulting memory. |
|
*/ |
|
struct VADriverVTableWayland *vtable_wayland; |
|
|
|
unsigned long reserved[42]; /* 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) */ |
|
void *vatrace; /* opaque for VA trace context */ |
|
void *vafool; /* opaque for VA fool context */ |
|
}; |
|
|
|
typedef VAStatus (*VADriverInit) ( |
|
VADriverContextP driver_context |
|
); |
|
|
|
#endif /* _VA_BACKEND_H_ */
|
|
|