VAStatus vaQuerySurfaceAttributes( VADisplay dpy, VAConfigID config, VASurfaceAttrib *attrib_list, unsigned int *num_attribs ) { VADriverContextP ctx; VAStatus vaStatus; CHECK_DISPLAY(dpy); ctx = CTX(dpy); if (!ctx) return VA_STATUS_ERROR_INVALID_DISPLAY; if (!ctx->vtable->vaQuerySurfaceAttributes) vaStatus = va_impl_query_surface_attributes(ctx, config, attrib_list, num_attribs); else vaStatus = ctx->vtable->vaQuerySurfaceAttributes(ctx, config, attrib_list, num_attribs); VA_TRACE_LOG(va_TraceQuerySurfaceAttributes, dpy, config, attrib_list, num_attribs); return vaStatus; }
/* * After this call, all library internal resources will be cleaned up */ VAStatus vaTerminate ( VADisplay dpy ) { VAStatus vaStatus = VA_STATUS_SUCCESS; VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; VADriverContextP old_ctx; CHECK_DISPLAY(dpy); old_ctx = CTX(dpy); if (old_ctx->handle) { vaStatus = old_ctx->vtable->vaTerminate(old_ctx); // dlclose(old_ctx->handle); old_ctx->handle = NULL; } free(old_ctx->vtable); old_ctx->vtable = NULL; free(old_ctx->vtable_vpp); old_ctx->vtable_vpp = NULL; VA_TRACE_LOG(va_TraceTerminate, dpy); va_TraceEnd(dpy); va_FoolEnd(dpy); if (VA_STATUS_SUCCESS == vaStatus) pDisplayContext->vaDestroy(pDisplayContext); return vaStatus; }
VAStatus vaCreateSurfaces( VADisplay dpy, unsigned int format, unsigned int width, unsigned int height, VASurfaceID *surfaces, unsigned int num_surfaces, VASurfaceAttrib *attrib_list, unsigned int num_attribs ) { VADriverContextP ctx; VAStatus vaStatus; CHECK_DISPLAY(dpy); ctx = CTX(dpy); if (!ctx) return VA_STATUS_ERROR_INVALID_DISPLAY; if (ctx->vtable->vaCreateSurfaces2) vaStatus = ctx->vtable->vaCreateSurfaces2(ctx, format, width, height, surfaces, num_surfaces, attrib_list, num_attribs); else if (attrib_list && num_attribs > 0) vaStatus = VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; else vaStatus = ctx->vtable->vaCreateSurfaces(ctx, width, height, format, num_surfaces, surfaces); VA_TRACE_LOG(va_TraceCreateSurfaces, dpy, width, height, format, num_surfaces, surfaces, attrib_list, num_attribs); return vaStatus; }
VAStatus vaCreateContext ( VADisplay dpy, VAConfigID config_id, int picture_width, int picture_height, int flag, VASurfaceID *render_targets, int num_render_targets, VAContextID *context /* out */ ) { VADriverContextP ctx; VAStatus vaStatus; CHECK_DISPLAY(dpy); ctx = CTX(dpy); vaStatus = ctx->vtable->vaCreateContext( ctx, config_id, picture_width, picture_height, flag, render_targets, num_render_targets, context ); /* keep current encode/decode resoluton */ VA_TRACE_LOG(va_TraceCreateContext, dpy, config_id, picture_width, picture_height, flag, render_targets, num_render_targets, context); return vaStatus; }
VAStatus vaCreateBuffer ( VADisplay dpy, VAContextID context, /* in */ VABufferType type, /* in */ unsigned int size, /* in */ unsigned int num_elements, /* in */ void *data, /* in */ VABufferID *buf_id /* out */ ) { VADriverContextP ctx; VAStatus vaStatus; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_FOOL_FUNC(va_FoolCreateBuffer, dpy, context, type, size, num_elements, data, buf_id); vaStatus = ctx->vtable->vaCreateBuffer( ctx, context, type, size, num_elements, data, buf_id); VA_TRACE_LOG(va_TraceCreateBuffer, dpy, context, type, size, num_elements, data, buf_id); return vaStatus; }
VAStatus vaPutSurface ( VADisplay dpy, VASurfaceID surface, Drawable draw, /* X Drawable */ 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 */ ) { VADriverContextP ctx; if (va_fool_postp) return VA_STATUS_SUCCESS; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_TRACE_LOG(va_TracePutSurface, dpy, surface, (void *)draw, srcx, srcy, srcw, srch, destx, desty, destw, desth, cliprects, number_cliprects, flags ); return ctx->vtable->vaPutSurface( ctx, surface, (void *)draw, srcx, srcy, srcw, srch, destx, desty, destw, desth, cliprects, number_cliprects, flags ); }
VAStatus vaInitialize ( VADisplay dpy, int *major_version, /* out */ int *minor_version /* out */ ) { const char *driver_name_env = NULL; char *driver_name = NULL; VAStatus vaStatus; CHECK_DISPLAY(dpy); va_TraceInit(dpy); va_FoolInit(dpy); va_infoMessage("VA-API version %s\n", VA_VERSION_S); vaStatus = va_getDriverName(dpy, &driver_name); va_infoMessage("va_getDriverName() returns %d\n", vaStatus); driver_name_env = getenv("LIBVA_DRIVER_NAME"); if ((VA_STATUS_SUCCESS == vaStatus) && driver_name_env && (geteuid() == getuid())) { /* Don't allow setuid apps to use LIBVA_DRIVER_NAME */ if (driver_name) /* memory is allocated in va_getDriverName */ free(driver_name); driver_name = strdup(driver_name_env); vaStatus = VA_STATUS_SUCCESS; va_infoMessage("User requested driver '%s'\n", driver_name); } if ((VA_STATUS_SUCCESS == vaStatus) && (driver_name != NULL)) { vaStatus = va_openDriver(dpy, driver_name); va_infoMessage("va_openDriver() returns %d\n", vaStatus); *major_version = VA_MAJOR_VERSION; *minor_version = VA_MINOR_VERSION; } else va_errorMessage("va_getDriverName() failed with %s,driver_name=%s\n", vaErrorStr(vaStatus), driver_name); if (driver_name) free(driver_name); VA_TRACE_LOG(va_TraceInitialize, dpy, major_version, minor_version); return vaStatus; }
/* Get maximum number of display attributes supported by the implementation */ int vaMaxNumDisplayAttributes ( VADisplay dpy ) { int tmp; if (!vaDisplayIsValid(dpy)) return 0; tmp = CTX(dpy)->max_display_attributes; VA_TRACE_LOG(va_TraceMaxNumDisplayAttributes, dpy, tmp); return tmp; }
VAStatus vaDestroyBuffer ( VADisplay dpy, VABufferID buffer_id ) { VADriverContextP ctx; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); VA_TRACE_LOG(va_TraceDestroyBuffer, dpy, buffer_id); return ctx->vtable->vaDestroyBuffer( ctx, buffer_id ); }
VAStatus vaSyncSurface ( VADisplay dpy, VASurfaceID render_target ) { VAStatus va_status; VADriverContextP ctx; CHECK_DISPLAY(dpy); ctx = CTX(dpy); va_status = ctx->vtable->vaSyncSurface( ctx, render_target ); VA_TRACE_LOG(va_TraceSyncSurface, dpy, render_target); return va_status; }
/* * Set display attributes * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED */ VAStatus vaSetDisplayAttributes ( VADisplay dpy, VADisplayAttribute *attr_list, int num_attributes ) { VADriverContextP ctx; VAStatus va_status; CHECK_DISPLAY(dpy); ctx = CTX(dpy); va_status = ctx->vtable->vaSetDisplayAttributes ( ctx, attr_list, num_attributes ); VA_TRACE_LOG(va_TraceSetDisplayAttributes, dpy, attr_list, num_attributes); return va_status; }
VAStatus vaRenderPicture ( VADisplay dpy, VAContextID context, VABufferID *buffers, int num_buffers ) { VADriverContextP ctx; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_TRACE_LOG(va_TraceRenderPicture, dpy, context, buffers, num_buffers); VA_FOOL_FUNC(va_FoolCheckContinuity, dpy); return ctx->vtable->vaRenderPicture( ctx, context, buffers, num_buffers ); }
VAStatus vaQuerySurfaceStatus ( VADisplay dpy, VASurfaceID render_target, VASurfaceStatus *status /* out */ ) { VAStatus va_status; VADriverContextP ctx; CHECK_DISPLAY(dpy); ctx = CTX(dpy); va_status = ctx->vtable->vaQuerySurfaceStatus( ctx, render_target, status ); VA_TRACE_LOG(va_TraceQuerySurfaceStatus, dpy, render_target, status); return va_status; }
VAStatus vaQuerySurfaceError ( VADisplay dpy, VASurfaceID surface, VAStatus error_status, void **error_info /*out*/ ) { VAStatus va_status; VADriverContextP ctx; CHECK_DISPLAY(dpy); ctx = CTX(dpy); va_status = ctx->vtable->vaQuerySurfaceError( ctx, surface, error_status, error_info ); VA_TRACE_LOG(va_TraceQuerySurfaceError, dpy, surface, error_status, error_info); return va_status; }
VAStatus vaBeginPicture ( VADisplay dpy, VAContextID context, VASurfaceID render_target ) { VADriverContextP ctx; VAStatus va_status; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_TRACE_LOG(va_TraceBeginPicture, dpy, context, render_target); VA_FOOL_RETURN(); va_status = ctx->vtable->vaBeginPicture( ctx, context, render_target ); return va_status; }
VAStatus vaDestroySurfaces ( VADisplay dpy, VASurfaceID *surface_list, int num_surfaces ) { VADriverContextP ctx; VAStatus vaStatus; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_TRACE_LOG(va_TraceDestroySurfaces, dpy, surface_list, num_surfaces); vaStatus = ctx->vtable->vaDestroySurfaces( ctx, surface_list, num_surfaces ); return vaStatus; }
VAStatus vaMapBuffer ( VADisplay dpy, VABufferID buf_id, /* in */ void **pbuf /* out */ ) { VADriverContextP ctx; VAStatus va_status; int ret = 0; CHECK_DISPLAY(dpy); ctx = CTX(dpy); VA_FOOL_FUNC(va_FoolMapBuffer, dpy, buf_id, pbuf); if (ret) return VA_STATUS_SUCCESS; va_status = ctx->vtable->vaMapBuffer( ctx, buf_id, pbuf ); VA_TRACE_LOG(va_TraceMapBuffer, dpy, buf_id, pbuf); return va_status; }
VAStatus vaInitialize ( VADisplay dpy, int *major_version, /* out */ int *minor_version /* out */ ) { char *driver_name = NULL; VAStatus vaStatus; CHECK_DISPLAY(dpy); va_TraceInit(dpy); va_FoolInit(dpy); va_infoMessage("VA-API version %s\n", VA_VERSION_S); vaStatus = va_getDriverName(dpy, &driver_name); va_infoMessage("va_getDriverName() returns %d\n", vaStatus); if ((VA_STATUS_SUCCESS == vaStatus) && (driver_name != NULL)) { vaStatus = va_openDriver(dpy, driver_name); va_infoMessage("va_openDriver() returns %d\n", vaStatus); *major_version = VA_MAJOR_VERSION; *minor_version = VA_MINOR_VERSION; } else va_errorMessage("va_getDriverName() failed with %s,driver_name=%s\n", vaErrorStr(vaStatus), driver_name); if (driver_name) free(driver_name); VA_TRACE_LOG(va_TraceInitialize, dpy, major_version, minor_version); return vaStatus; }
VAStatus vaCreateConfig ( VADisplay dpy, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs, VAConfigID *config_id /* out */ ) { VADriverContextP ctx; VAStatus vaStatus = VA_STATUS_SUCCESS; int ret = 0; CHECK_DISPLAY(dpy); ctx = CTX(dpy); vaStatus = ctx->vtable->vaCreateConfig ( ctx, profile, entrypoint, attrib_list, num_attribs, config_id ); /* record the current entrypoint for further trace/fool determination */ VA_TRACE_LOG(va_TraceCreateConfig, dpy, profile, entrypoint, attrib_list, num_attribs, config_id); VA_FOOL_FUNC(va_FoolCreateConfig, dpy, profile, entrypoint, attrib_list, num_attribs, config_id); return vaStatus; }