X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=va%2Fva.c;h=0a129a9d2adecdd43428ddaab7565ba918e433d2;hb=b4d0874dcbe99d1f47bd39d0c156ea89ecd0ebcc;hp=9bdb041c2e075beb476715883922e0b772a2bcae;hpb=fe252d93f5217b2fda90657a654cd04eb7735173;p=android-x86%2Fhardware-intel-common-libva.git diff --git a/va/va.c b/va/va.c index 9bdb041..0a129a9 100644 --- a/va/va.c +++ b/va/va.c @@ -37,6 +37,16 @@ #include #include #include +#ifdef ANDROID +#include +/* support versions < JellyBean */ +#ifndef ALOGE +#define ALOGE LOGE +#endif +#ifndef ALOGI +#define ALOGI LOGI +#endif +#endif #define DRIVER_EXTENSION "_drv_video.so" @@ -50,7 +60,7 @@ /* * read a config "env" for libva.conf or from environment setting - * liva.conf has higher priority + * libva.conf has higher priority * return 0: the "env" is set, and the value is copied into env_value * 1: the env is not set */ @@ -65,17 +75,19 @@ int va_parseConfig(char *env, char *env_value) fp = fopen("/etc/libva.conf", "r"); while (fp && (fgets(oneline, 1024, fp) != NULL)) { - if (strlen(oneline) == 1) - continue; + if (strlen(oneline) == 1) + continue; token = strtok_r(oneline, "=\n", &saveptr); - value = strtok_r(NULL, "=\n", &saveptr); + value = strtok_r(NULL, "=\n", &saveptr); - if (NULL == token || NULL == value) - continue; + if (NULL == token || NULL == value) + continue; if (strcmp(token, env) == 0) { - if (env_value) + if (env_value) { strncpy(env_value,value, 1024); + env_value[1023] = '\0'; + } fclose(fp); @@ -88,8 +100,10 @@ int va_parseConfig(char *env, char *env_value) /* no setting in config file, use env setting */ value = getenv(env); if (value) { - if (env_value) + if (env_value) { strncpy(env_value, value, 1024); + env_value[1023] = '\0'; + } return 0; } @@ -102,12 +116,77 @@ int vaDisplayIsValid(VADisplay dpy) return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); } +static void default_log_error(const char *buffer) +{ +# ifdef ANDROID + ALOGE("%s", buffer); +# else + fprintf(stderr, "libva error: %s", buffer); +# endif +} + +static void default_log_info(const char *buffer) +{ +# ifdef ANDROID + ALOGI("%s", buffer); +# else + fprintf(stderr, "libva info: %s", buffer); +# endif +} + +static vaMessageCallback va_log_error = default_log_error; +static vaMessageCallback va_log_info = default_log_info; + +/** + * Set the callback for error messages, or NULL for no logging. + * Returns the previous one, or NULL if it was disabled. + */ +vaMessageCallback vaSetErrorCallback(vaMessageCallback callback) +{ + vaMessageCallback old_callback = va_log_error; + va_log_error = callback; + return old_callback; +} + +/** + * Set the callback for info messages, or NULL for no logging. + * Returns the previous one, or NULL if it was disabled. + */ +vaMessageCallback vaSetInfoCallback(vaMessageCallback callback) +{ + vaMessageCallback old_callback = va_log_info; + va_log_info = callback; + return old_callback; +} + +void va_MessagingInit() +{ +#if ENABLE_VA_MESSAGING + char env_value[1024]; + + if (va_parseConfig("LIBVA_MESSAGING_LEVEL", &env_value[0]) == 0) { + if (strcmp(env_value, "0") == 0) { + vaSetInfoCallback(NULL); + vaSetErrorCallback(NULL); + } + + if (strcmp(env_value, "1") == 0) { + vaSetInfoCallback(NULL); + } + } +#endif +} + void va_errorMessage(const char *msg, ...) { +#if ENABLE_VA_MESSAGING char buf[512], *dynbuf; va_list args; int n, len; + if (va_log_error == NULL) + return; + va_start(args, msg); len = vsnprintf(buf, sizeof(buf), msg, args); va_end(args); @@ -125,14 +204,19 @@ void va_errorMessage(const char *msg, ...) } else if (len > 0) va_log_error(buf); +#endif } void va_infoMessage(const char *msg, ...) { +#if ENABLE_VA_MESSAGING char buf[512], *dynbuf; va_list args; int n, len; + if (va_log_info == NULL) + return; + va_start(args, msg); len = vsnprintf(buf, sizeof(buf), msg, args); va_end(args); @@ -150,6 +234,7 @@ void va_infoMessage(const char *msg, ...) } else if (len > 0) va_log_info(buf); +#endif } static bool va_checkVtable(void *ptr, char *function) @@ -246,6 +331,7 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) int minor; } compatible_versions[] = { { VA_MAJOR_VERSION, VA_MINOR_VERSION }, + { 0, 39 }, { 0, 38 }, { 0, 37 }, { 0, 36 }, @@ -523,6 +609,8 @@ VAStatus vaInitialize ( va_FoolInit(dpy); + va_MessagingInit(); + va_infoMessage("VA-API version %s\n", VA_VERSION_S); vaStatus = va_getDriverName(dpy, &driver_name); @@ -740,10 +828,16 @@ VAStatus vaDestroyConfig ( ) { VADriverContextP ctx; + VAStatus vaStatus = VA_STATUS_SUCCESS; + CHECK_DISPLAY(dpy); ctx = CTX(dpy); - return ctx->vtable->vaDestroyConfig ( ctx, config_id ); + vaStatus = ctx->vtable->vaDestroyConfig ( ctx, config_id ); + + VA_TRACE_ALL(va_TraceDestroyConfig, dpy, config_id); + + return vaStatus; } VAStatus vaQueryConfigAttributes ( @@ -1015,10 +1109,16 @@ VAStatus vaDestroyContext ( ) { VADriverContextP ctx; + VAStatus vaStatus; + CHECK_DISPLAY(dpy); ctx = CTX(dpy); - return ctx->vtable->vaDestroyContext( ctx, context ); + vaStatus = ctx->vtable->vaDestroyContext( ctx, context ); + + VA_TRACE_ALL(va_TraceDestroyContext, dpy, context); + + return vaStatus; } VAStatus vaCreateBuffer (