Blame va/va_backend.h

Packit 38d9dc
/*
Packit 38d9dc
 * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
Packit 38d9dc
 *
Packit 38d9dc
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit 38d9dc
 * copy of this software and associated documentation files (the
Packit 38d9dc
 * "Software"), to deal in the Software without restriction, including
Packit 38d9dc
 * without limitation the rights to use, copy, modify, merge, publish,
Packit 38d9dc
 * distribute, sub license, and/or sell copies of the Software, and to
Packit 38d9dc
 * permit persons to whom the Software is furnished to do so, subject to
Packit 38d9dc
 * the following conditions:
Packit 38d9dc
 * 
Packit 38d9dc
 * The above copyright notice and this permission notice (including the
Packit 38d9dc
 * next paragraph) shall be included in all copies or substantial portions
Packit 38d9dc
 * of the Software.
Packit 38d9dc
 * 
Packit 38d9dc
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Packit 38d9dc
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit 38d9dc
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
Packit 38d9dc
 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
Packit 38d9dc
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Packit 38d9dc
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Packit 38d9dc
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit 38d9dc
 */
Packit 38d9dc
Packit 38d9dc
/*
Packit 38d9dc
 * Video Decode Acceleration -Backend API
Packit 38d9dc
 */
Packit 38d9dc
Packit 38d9dc
#ifndef _VA_BACKEND_H_
Packit 38d9dc
#define _VA_BACKEND_H_
Packit 38d9dc
Packit 38d9dc
#include <va/va.h>
Packit 38d9dc
Packit 38d9dc
typedef struct VADriverContext *VADriverContextP;
Packit 38d9dc
typedef struct VADisplayContext *VADisplayContextP;
Packit 38d9dc
Packit 38d9dc
/** \brief VA display types. */
Packit 38d9dc
enum {
Packit 38d9dc
    /** \brief Mask to major identifier for VA display type. */
Packit 38d9dc
    VA_DISPLAY_MAJOR_MASK = 0xf0,
Packit 38d9dc
Packit 38d9dc
    /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */
Packit 38d9dc
    VA_DISPLAY_X11      = 0x10,
Packit 38d9dc
    /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */
Packit 38d9dc
    VA_DISPLAY_GLX      = (VA_DISPLAY_X11 | (1 << 0)),
Packit 38d9dc
    /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */
Packit 38d9dc
    VA_DISPLAY_ANDROID  = 0x20,
Packit 38d9dc
    /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */
Packit 38d9dc
    VA_DISPLAY_DRM      = 0x30,
Packit 38d9dc
    /** \brief VA/DRM API is used, with a render-node device path */
Packit 38d9dc
    VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)),
Packit 38d9dc
    /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */
Packit 38d9dc
    VA_DISPLAY_WAYLAND  = 0x40,
Packit 38d9dc
};
Packit 38d9dc
Packit 38d9dc
struct VADriverVTable
Packit 38d9dc
{
Packit 38d9dc
	VAStatus (*vaTerminate) ( VADriverContextP ctx );
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQueryConfigProfiles) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAProfile *profile_list,	/* out */
Packit 38d9dc
		int *num_profiles			/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQueryConfigEntrypoints) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAProfile profile,
Packit 38d9dc
		VAEntrypoint  *entrypoint_list,	/* out */
Packit 38d9dc
		int *num_entrypoints			/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaGetConfigAttributes) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAProfile profile,
Packit 38d9dc
		VAEntrypoint entrypoint,
Packit 38d9dc
		VAConfigAttrib *attrib_list,	/* in/out */
Packit 38d9dc
		int num_attribs
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateConfig) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAProfile profile, 
Packit 38d9dc
		VAEntrypoint entrypoint, 
Packit 38d9dc
		VAConfigAttrib *attrib_list,
Packit 38d9dc
		int num_attribs,
Packit 38d9dc
		VAConfigID *config_id		/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroyConfig) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAConfigID config_id
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQueryConfigAttributes) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAConfigID config_id, 
Packit 38d9dc
		VAProfile *profile,		/* out */
Packit 38d9dc
		VAEntrypoint *entrypoint, 	/* out */
Packit 38d9dc
		VAConfigAttrib *attrib_list,	/* out */
Packit 38d9dc
		int *num_attribs		/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateSurfaces) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		int width,
Packit 38d9dc
		int height,
Packit 38d9dc
		int format,
Packit 38d9dc
		int num_surfaces,
Packit 38d9dc
		VASurfaceID *surfaces		/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroySurfaces) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID *surface_list,
Packit 38d9dc
		int num_surfaces
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateContext) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAConfigID config_id,
Packit 38d9dc
		int picture_width,
Packit 38d9dc
		int picture_height,
Packit 38d9dc
		int flag,
Packit 38d9dc
		VASurfaceID *render_targets,
Packit 38d9dc
		int num_render_targets,
Packit 38d9dc
		VAContextID *context		/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroyContext) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAContextID context
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateBuffer) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAContextID context,		/* in */
Packit 38d9dc
		VABufferType type,		/* in */
Packit 38d9dc
		unsigned int size,		/* in */
Packit 38d9dc
		unsigned int num_elements,	/* in */
Packit 38d9dc
		void *data,			/* in */
Packit 38d9dc
                VABufferID *buf_id
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaBufferSetNumElements) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VABufferID buf_id,	/* in */
Packit 38d9dc
		unsigned int num_elements	/* in */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaMapBuffer) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VABufferID buf_id,	/* in */
Packit 38d9dc
		void **pbuf         /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaUnmapBuffer) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VABufferID buf_id	/* in */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroyBuffer) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VABufferID buffer_id
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaBeginPicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAContextID context,
Packit 38d9dc
		VASurfaceID render_target
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaRenderPicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAContextID context,
Packit 38d9dc
		VABufferID *buffers,
Packit 38d9dc
		int num_buffers
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaEndPicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAContextID context
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaSyncSurface) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID render_target
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQuerySurfaceStatus) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID render_target,
Packit 38d9dc
		VASurfaceStatus *status	/* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQuerySurfaceError) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID render_target,
Packit 38d9dc
                VAStatus error_status,
Packit 38d9dc
                void **error_info /*out*/
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaPutSurface) (
Packit 38d9dc
    		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID surface,
Packit 38d9dc
		void* draw, /* Drawable of window system */
Packit 38d9dc
		short srcx,
Packit 38d9dc
		short srcy,
Packit 38d9dc
		unsigned short srcw,
Packit 38d9dc
		unsigned short srch,
Packit 38d9dc
		short destx,
Packit 38d9dc
		short desty,
Packit 38d9dc
		unsigned short destw,
Packit 38d9dc
		unsigned short desth,
Packit 38d9dc
		VARectangle *cliprects, /* client supplied clip list */
Packit 38d9dc
		unsigned int number_cliprects, /* number of clip rects in the clip list */
Packit 38d9dc
		unsigned int flags /* de-interlacing flags */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQueryImageFormats) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAImageFormat *format_list,        /* out */
Packit 38d9dc
		int *num_formats           /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateImage) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAImageFormat *format,
Packit 38d9dc
		int width,
Packit 38d9dc
		int height,
Packit 38d9dc
		VAImage *image     /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDeriveImage) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID surface,
Packit 38d9dc
		VAImage *image     /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroyImage) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAImageID image
Packit 38d9dc
	);
Packit 38d9dc
	
Packit 38d9dc
	VAStatus (*vaSetImagePalette) (
Packit 38d9dc
	        VADriverContextP ctx,
Packit 38d9dc
	        VAImageID image,
Packit 38d9dc
	        /*
Packit 38d9dc
                 * pointer to an array holding the palette data.  The size of the array is
Packit 38d9dc
                 * num_palette_entries * entry_bytes in size.  The order of the components
Packit 38d9dc
                 * in the palette is described by the component_order in VAImage struct
Packit 38d9dc
                 */
Packit 38d9dc
                unsigned char *palette
Packit 38d9dc
	);
Packit 38d9dc
	
Packit 38d9dc
	VAStatus (*vaGetImage) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID surface,
Packit 38d9dc
		int x,     /* coordinates of the upper left source pixel */
Packit 38d9dc
		int y,
Packit 38d9dc
		unsigned int width, /* width and height of the region */
Packit 38d9dc
		unsigned int height,
Packit 38d9dc
		VAImageID image
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaPutImage) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASurfaceID surface,
Packit 38d9dc
		VAImageID image,
Packit 38d9dc
		int src_x,
Packit 38d9dc
		int src_y,
Packit 38d9dc
		unsigned int src_width,
Packit 38d9dc
		unsigned int src_height,
Packit 38d9dc
		int dest_x,
Packit 38d9dc
		int dest_y,
Packit 38d9dc
		unsigned int dest_width,
Packit 38d9dc
		unsigned int dest_height
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQuerySubpictureFormats) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAImageFormat *format_list,        /* out */
Packit 38d9dc
		unsigned int *flags,       /* out */
Packit 38d9dc
		unsigned int *num_formats  /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaCreateSubpicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VAImageID image,
Packit 38d9dc
		VASubpictureID *subpicture   /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDestroySubpicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASubpictureID subpicture
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaSetSubpictureImage) (
Packit 38d9dc
                VADriverContextP ctx,
Packit 38d9dc
                VASubpictureID subpicture,
Packit 38d9dc
                VAImageID image
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaSetSubpictureChromakey) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASubpictureID subpicture,
Packit 38d9dc
		unsigned int chromakey_min,
Packit 38d9dc
		unsigned int chromakey_max,
Packit 38d9dc
		unsigned int chromakey_mask
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaSetSubpictureGlobalAlpha) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASubpictureID subpicture,
Packit 38d9dc
		float global_alpha 
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaAssociateSubpicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASubpictureID subpicture,
Packit 38d9dc
		VASurfaceID *target_surfaces,
Packit 38d9dc
		int num_surfaces,
Packit 38d9dc
		short src_x, /* upper left offset in subpicture */
Packit 38d9dc
		short src_y,
Packit 38d9dc
		unsigned short src_width,
Packit 38d9dc
		unsigned short src_height,
Packit 38d9dc
		short dest_x, /* upper left offset in surface */
Packit 38d9dc
		short dest_y,
Packit 38d9dc
		unsigned short dest_width,
Packit 38d9dc
		unsigned short dest_height,
Packit 38d9dc
		/*
Packit 38d9dc
		 * whether to enable chroma-keying or global-alpha
Packit 38d9dc
		 * see VA_SUBPICTURE_XXX values
Packit 38d9dc
		 */
Packit 38d9dc
		unsigned int flags
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaDeassociateSubpicture) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VASubpictureID subpicture,
Packit 38d9dc
		VASurfaceID *target_surfaces,
Packit 38d9dc
		int num_surfaces
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaQueryDisplayAttributes) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VADisplayAttribute *attr_list,	/* out */
Packit 38d9dc
		int *num_attributes		/* out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
	VAStatus (*vaGetDisplayAttributes) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
		VADisplayAttribute *attr_list,	/* in/out */
Packit 38d9dc
		int num_attributes
Packit 38d9dc
        );
Packit 38d9dc
        
Packit 38d9dc
        VAStatus (*vaSetDisplayAttributes) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
                VADisplayAttribute *attr_list,
Packit 38d9dc
                int num_attributes
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        /* used by va trace */        
Packit 38d9dc
        VAStatus (*vaBufferInfo) (
Packit 38d9dc
                   VADriverContextP ctx,      /* in */
Packit 38d9dc
                   VABufferID buf_id,         /* in */
Packit 38d9dc
                   VABufferType *type,        /* out */
Packit 38d9dc
                   unsigned int *size,        /* out */
Packit 38d9dc
                   unsigned int *num_elements /* out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        /* lock/unlock surface for external access */    
Packit 38d9dc
        VAStatus (*vaLockSurface) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
                VASurfaceID surface,
Packit 38d9dc
                unsigned int *fourcc, /* out  for follow argument */
Packit 38d9dc
                unsigned int *luma_stride,
Packit 38d9dc
                unsigned int *chroma_u_stride,
Packit 38d9dc
                unsigned int *chroma_v_stride,
Packit 38d9dc
                unsigned int *luma_offset,
Packit 38d9dc
                unsigned int *chroma_u_offset,
Packit 38d9dc
                unsigned int *chroma_v_offset,
Packit 38d9dc
                unsigned int *buffer_name, /* if it is not NULL, assign the low lever
Packit 38d9dc
                                            * surface buffer name
Packit 38d9dc
                                            */
Packit 38d9dc
                void **buffer /* if it is not NULL, map the surface buffer for
Packit 38d9dc
                                * CPU access
Packit 38d9dc
                                */
Packit 38d9dc
        );
Packit 38d9dc
    
Packit 38d9dc
        VAStatus (*vaUnlockSurface) (
Packit 38d9dc
		VADriverContextP ctx,
Packit 38d9dc
                VASurfaceID surface
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        /* DEPRECATED */
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaGetSurfaceAttributes)(
Packit 38d9dc
            VADriverContextP    dpy,
Packit 38d9dc
            VAConfigID          config,
Packit 38d9dc
            VASurfaceAttrib    *attrib_list,
Packit 38d9dc
            unsigned int        num_attribs
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaCreateSurfaces2)(
Packit 38d9dc
            VADriverContextP    ctx,
Packit 38d9dc
            unsigned int        format,
Packit 38d9dc
            unsigned int        width,
Packit 38d9dc
            unsigned int        height,
Packit 38d9dc
            VASurfaceID        *surfaces,
Packit 38d9dc
            unsigned int        num_surfaces,
Packit 38d9dc
            VASurfaceAttrib    *attrib_list,
Packit 38d9dc
            unsigned int        num_attribs
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaQuerySurfaceAttributes)(
Packit 38d9dc
            VADriverContextP    dpy,
Packit 38d9dc
            VAConfigID          config,
Packit 38d9dc
            VASurfaceAttrib    *attrib_list,
Packit 38d9dc
            unsigned int       *num_attribs
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaAcquireBufferHandle)(
Packit 38d9dc
            VADriverContextP    ctx,
Packit 38d9dc
            VABufferID          buf_id,         /* in */
Packit 38d9dc
            VABufferInfo *      buf_info        /* in/out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaReleaseBufferHandle)(
Packit 38d9dc
            VADriverContextP    ctx,
Packit 38d9dc
            VABufferID          buf_id          /* in */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaCreateMFContext) (
Packit 38d9dc
            VADriverContextP ctx,
Packit 38d9dc
            VAMFContextID *mfe_context    /* out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaMFAddContext) (
Packit 38d9dc
            VADriverContextP ctx,
Packit 38d9dc
            VAMFContextID mf_context,
Packit 38d9dc
            VAContextID context
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaMFReleaseContext) (
Packit 38d9dc
            VADriverContextP ctx,
Packit 38d9dc
            VAMFContextID mf_context,
Packit 38d9dc
            VAContextID context
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaMFSubmit) (
Packit 38d9dc
            VADriverContextP ctx,
Packit 38d9dc
            VAMFContextID mf_context,
Packit 38d9dc
            VAContextID *contexts,
Packit 38d9dc
            int num_contexts
Packit 38d9dc
        );
Packit 38d9dc
	VAStatus (*vaCreateBuffer2) (
Packit 38d9dc
            VADriverContextP ctx,
Packit 38d9dc
            VAContextID context,                /* in */
Packit 38d9dc
            VABufferType type,                  /* in */
Packit 38d9dc
            unsigned int width,                 /* in */
Packit 38d9dc
            unsigned int height,                /* in */
Packit 38d9dc
            unsigned int *unit_size,            /* out */
Packit 38d9dc
            unsigned int *pitch,                /* out */
Packit 38d9dc
            VABufferID *buf_id                  /* out */
Packit 38d9dc
	);
Packit 38d9dc
Packit 38d9dc
        VAStatus (*vaQueryProcessingRate) (
Packit 38d9dc
            VADriverContextP ctx,               /* in */
Packit 38d9dc
            VAConfigID config_id,               /* in */
Packit 38d9dc
            VAProcessingRateParameter *proc_buf,/* in */
Packit 38d9dc
            unsigned int *processing_rate	/* out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        VAStatus
Packit 38d9dc
        (*vaExportSurfaceHandle)(
Packit 38d9dc
            VADriverContextP    ctx,
Packit 38d9dc
            VASurfaceID         surface_id,     /* in */
Packit 38d9dc
            uint32_t            mem_type,       /* in */
Packit 38d9dc
            uint32_t            flags,          /* in */
Packit 38d9dc
            void               *descriptor      /* out */
Packit 38d9dc
        );
Packit 38d9dc
Packit 38d9dc
        /** \brief Reserved bytes for future use, must be zero */
Packit 38d9dc
        unsigned long reserved[57];
Packit 38d9dc
};
Packit 38d9dc
Packit 38d9dc
struct VADriverContext
Packit 38d9dc
{
Packit 38d9dc
    void *pDriverData;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * The core VA implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is allocated from libva with calloc().
Packit 38d9dc
     */
Packit 38d9dc
    struct VADriverVTable *vtable;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * The VA/GLX implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is intended for drivers that implement the
Packit 38d9dc
     * VA/GLX API. The driver implementation is responsible for the
Packit 38d9dc
     * allocation and deallocation of this structure.
Packit 38d9dc
     */
Packit 38d9dc
    struct VADriverVTableGLX *vtable_glx;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * The VA/EGL implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is intended for drivers that implement the
Packit 38d9dc
     * VA/EGL API. The driver implementation is responsible for the
Packit 38d9dc
     * allocation and deallocation of this structure.
Packit 38d9dc
     */
Packit 38d9dc
    struct VADriverVTableEGL *vtable_egl;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * The third-party/private implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is intended for drivers that implement the
Packit 38d9dc
     * private API. The driver implementation is responsible for the
Packit 38d9dc
     * allocation and deallocation of this structure.
Packit 38d9dc
     */
Packit 38d9dc
    void *vtable_tpi;
Packit 38d9dc
Packit 38d9dc
    void *native_dpy;
Packit 38d9dc
    int x11_screen;
Packit 38d9dc
    int version_major;
Packit 38d9dc
    int version_minor;
Packit 38d9dc
    int max_profiles;
Packit 38d9dc
    int max_entrypoints;
Packit 38d9dc
    int max_attributes;
Packit 38d9dc
    int max_image_formats;
Packit 38d9dc
    int max_subpic_formats;
Packit 38d9dc
    int max_display_attributes;
Packit 38d9dc
    const char *str_vendor;
Packit 38d9dc
Packit 38d9dc
    void *handle;			/* dlopen handle */
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * \brief DRM state.
Packit 38d9dc
     *
Packit 38d9dc
     * This field holds driver specific data for DRM-based
Packit 38d9dc
     * drivers. This structure is allocated from libva with
Packit 38d9dc
     * calloc(). Do not deallocate from within VA driver
Packit 38d9dc
     * implementations.
Packit 38d9dc
     *
Packit 38d9dc
     * All structures shall be derived from struct drm_state. So, for
Packit 38d9dc
     * instance, this field holds a dri_state structure for VA/X11
Packit 38d9dc
     * drivers that use the DRM protocol.
Packit 38d9dc
     */
Packit 38d9dc
    void *drm_state;
Packit 38d9dc
Packit 38d9dc
    void *glx;				/* opaque for GLX code */
Packit 38d9dc
Packit 38d9dc
    /** \brief VA display type. */
Packit 38d9dc
    unsigned long display_type;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * The VA/Wayland implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is intended for drivers that implement the
Packit 38d9dc
     * VA/Wayland API. libVA allocates this structure with calloc()
Packit 38d9dc
     * and owns the resulting memory.
Packit 38d9dc
     */
Packit 38d9dc
    struct VADriverVTableWayland *vtable_wayland;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * \brief The VA/VPP implementation hooks.
Packit 38d9dc
     *
Packit 38d9dc
     * This structure is allocated from libva with calloc().
Packit 38d9dc
     */
Packit 38d9dc
    struct VADriverVTableVPP *vtable_vpp;
Packit 38d9dc
Packit 38d9dc
    char *override_driver_name;
Packit 38d9dc
Packit 38d9dc
    void *pDisplayContext;
Packit 38d9dc
Packit 38d9dc
    /**
Packit 38d9dc
     * Error callback.
Packit 38d9dc
     *
Packit 38d9dc
     * This is set by libva when the driver is opened, and will not be
Packit 38d9dc
     * changed thereafter.  The driver can call it with an error message,
Packit 38d9dc
     * which will be propagated to the API user through their error
Packit 38d9dc
     * callbacks, or sent to a default output if no callback is available.
Packit 38d9dc
     *
Packit 38d9dc
     * It is expected that end users will always be able to see these
Packit 38d9dc
     * messages, so it should be called only for serious errors.  For
Packit 38d9dc
     * example, hardware problems or fatal configuration errors.
Packit 38d9dc
     *
Packit 38d9dc
     * @param pDriverContext  Pointer to the driver context structure
Packit 38d9dc
     *                        being used by the current driver.
Packit 38d9dc
     * @param message  Message to send to the API user.  This must be a
Packit 38d9dc
     *                 null-terminated string.
Packit 38d9dc
     */
Packit 38d9dc
    void (*error_callback)(VADriverContextP pDriverContext,
Packit 38d9dc
                           const char *message);
Packit 38d9dc
    /**
Packit 38d9dc
     * Info callback.
Packit 38d9dc
     *
Packit 38d9dc
     * This has the same behaviour as the error callback, but has its
Packit 38d9dc
     * own set of callbacks to the API user.
Packit 38d9dc
     *
Packit 38d9dc
     * It should be used for informational messages which may be useful
Packit 38d9dc
     * for an application programmer or for debugging.  For example, minor
Packit 38d9dc
     * configuration errors, or information about the reason when another
Packit 38d9dc
     * API call generates an error return.  It is not expected that end
Packit 38d9dc
     * users will see these messages.
Packit 38d9dc
     *
Packit 38d9dc
     * @param pDriverContext  Pointer to the driver context structure
Packit 38d9dc
     *                        being used by the current driver.
Packit 38d9dc
     * @param message  Message to send to the API user.  This must be a
Packit 38d9dc
     *                 null-terminated string.
Packit 38d9dc
     */
Packit 38d9dc
    void (*info_callback)(VADriverContextP pDriverContext,
Packit 38d9dc
                          const char *message);
Packit 38d9dc
Packit 38d9dc
    unsigned long reserved[38];         /* reserve for future add-ins, decrease the subscript accordingly */
Packit 38d9dc
};
Packit 38d9dc
Packit 38d9dc
#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */
Packit 38d9dc
struct VADisplayContext
Packit 38d9dc
{
Packit 38d9dc
    int vadpy_magic;
Packit 38d9dc
    
Packit 38d9dc
    VADisplayContextP pNext;
Packit 38d9dc
    VADriverContextP pDriverContext;
Packit 38d9dc
Packit 38d9dc
    int (*vaIsValid) (
Packit 38d9dc
	VADisplayContextP ctx
Packit 38d9dc
    );
Packit 38d9dc
Packit 38d9dc
    void (*vaDestroy) (
Packit 38d9dc
	VADisplayContextP ctx
Packit 38d9dc
    );
Packit 38d9dc
Packit 38d9dc
    VAStatus (*vaGetDriverName) (
Packit 38d9dc
	VADisplayContextP ctx,
Packit 38d9dc
	char **driver_name
Packit 38d9dc
    );
Packit 38d9dc
Packit 38d9dc
    void *opaque; /* opaque for display extensions (e.g. GLX) */
Packit 38d9dc
    void *vatrace; /* opaque for VA trace context */
Packit 38d9dc
    void *vafool; /* opaque for VA fool context */
Packit 38d9dc
Packit 38d9dc
    VAMessageCallback error_callback;
Packit 38d9dc
    void *error_callback_user_context;
Packit 38d9dc
    VAMessageCallback info_callback;
Packit 38d9dc
    void *info_callback_user_context;
Packit 38d9dc
Packit 38d9dc
    /** \brief Reserved bytes for future use, must be zero */
Packit 38d9dc
    unsigned long reserved[32];
Packit 38d9dc
};
Packit 38d9dc
Packit 38d9dc
typedef VAStatus (*VADriverInit) (
Packit 38d9dc
    VADriverContextP driver_context
Packit 38d9dc
);
Packit 38d9dc
Packit 38d9dc
#endif /* _VA_BACKEND_H_ */