diff options
Diffstat (limited to 'src/gallium/state_trackers/va/context.c')
-rw-r--r-- | src/gallium/state_trackers/va/context.c | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c new file mode 100644 index 00000000000..71651aa75b9 --- /dev/null +++ b/src/gallium/state_trackers/va/context.c @@ -0,0 +1,151 @@ +/************************************************************************** + * + * Copyright 2010 Thomas Balling Sørensen & Orasanu Lucian. + * Copyright 2014 Advanced Micro Devices, Inc. + * 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 THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. + * + **************************************************************************/ + +#include "pipe/p_screen.h" +#include "pipe/p_video_codec.h" + +#include "util/u_memory.h" +#include "vl/vl_winsys.h" + +#include "va_private.h" + +static struct VADriverVTable vtable = +{ + &vlVaTerminate, + &vlVaQueryConfigProfiles, + &vlVaQueryConfigEntrypoints, + &vlVaGetConfigAttributes, + &vlVaCreateConfig, + &vlVaDestroyConfig, + &vlVaQueryConfigAttributes, + &vlVaCreateSurfaces, + &vlVaDestroySurfaces, + &vlVaCreateContext, + &vlVaDestroyContext, + &vlVaCreateBuffer, + &vlVaBufferSetNumElements, + &vlVaMapBuffer, + &vlVaUnmapBuffer, + &vlVaDestroyBuffer, + &vlVaBeginPicture, + &vlVaRenderPicture, + &vlVaEndPicture, + &vlVaSyncSurface, + &vlVaQuerySurfaceStatus, + &vlVaQuerySurfaceError, + &vlVaPutSurface, + &vlVaQueryImageFormats, + &vlVaCreateImage, + &vlVaDeriveImage, + &vlVaDestroyImage, + &vlVaSetImagePalette, + &vlVaGetImage, + &vlVaPutImage, + &vlVaQuerySubpictureFormats, + &vlVaCreateSubpicture, + &vlVaDestroySubpicture, + &vlVaSubpictureImage, + &vlVaSetSubpictureChromakey, + &vlVaSetSubpictureGlobalAlpha, + &vlVaAssociateSubpicture, + &vlVaDeassociateSubpicture, + &vlVaQueryDisplayAttributes, + &vlVaGetDisplayAttributes, + &vlVaSetDisplayAttributes, + &vlVaBufferInfo, + &vlVaLockSurface, + &vlVaUnlockSurface +}; + +PUBLIC VAStatus +VA_DRIVER_INIT_FUNC(VADriverContextP ctx) +{ + vlVaDriver *drv; + + if (!ctx) + return VA_STATUS_ERROR_INVALID_CONTEXT; + + drv = CALLOC(1, sizeof(vlVaDriver)); + if (!drv) + return VA_STATUS_ERROR_ALLOCATION_FAILED; + + drv->vscreen = vl_screen_create(ctx->native_dpy, ctx->x11_screen); + if (!drv->vscreen) { + FREE(drv); + return VA_STATUS_ERROR_ALLOCATION_FAILED; + } + + ctx->pDriverData = (void *)drv; + ctx->version_major = 0; + ctx->version_minor = 1; + *ctx->vtable = vtable; + ctx->max_profiles = 1; + ctx->max_entrypoints = 1; + ctx->max_attributes = 1; + ctx->max_image_formats = 1; + ctx->max_subpic_formats = 1; + ctx->max_display_attributes = 1; + ctx->str_vendor = "mesa gallium vaapi"; + + return VA_STATUS_SUCCESS; +} + +VAStatus +vlVaCreateContext(VADriverContextP ctx, VAConfigID config_id, int picture_width, + int picture_height, int flag, VASurfaceID *render_targets, + int num_render_targets, VAContextID *conext) +{ + if (!ctx) + return VA_STATUS_ERROR_INVALID_CONTEXT; + + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus +vlVaDestroyContext(VADriverContextP ctx, VAContextID context) +{ + if (!ctx) + return VA_STATUS_ERROR_INVALID_CONTEXT; + + return VA_STATUS_ERROR_UNIMPLEMENTED; +} + +VAStatus +vlVaTerminate(VADriverContextP ctx) +{ + vlVaDriver *drv; + + if (!ctx) + return VA_STATUS_ERROR_INVALID_CONTEXT; + + drv = ctx->pDriverData; + vl_screen_destroy(drv->vscreen); + FREE(drv); + + return VA_STATUS_SUCCESS; +} |