This lets any application using libva choose the best way to report info and error messages to the user, for example graphical application can open a popup on errors and write info messages in the toolbar.
Signed-off-by: Emmanuel Gil Peyrot <[email protected]> --- va/sysdeps.h | 20 -------------------- va/va.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ va/va.h | 15 +++++++++++++++ 3 files changed, 68 insertions(+), 20 deletions(-) diff --git a/va/sysdeps.h b/va/sysdeps.h index 4de764d..164a274 100644 --- a/va/sysdeps.h +++ b/va/sysdeps.h @@ -46,26 +46,6 @@ /* Android logging utilities */ # include <utils/Log.h> - -# ifdef ANDROID_ALOG -# define va_log_error(buffer) do { ALOGE("%s", buffer); } while (0) -# define va_log_info(buffer) do { ALOGI("%s", buffer); } while (0) -# elif ANDROID_LOG -# define va_log_error(buffer) do { LOGE("%s", buffer); } while (0) -# define va_log_info(buffer) do { LOGI("%s", buffer); } while (0) -# endif -#endif - -#ifndef va_log_error -#define va_log_error(buffer) do { \ - fprintf(stderr, "libva error: %s", buffer); \ - } while (0) -#endif - -#ifndef va_log_info -#define va_log_info(buffer) do { \ - fprintf(stderr, "libva info: %s", buffer); \ - } while (0) #endif #if defined __GNUC__ && defined HAVE_GNUC_VISIBILITY_ATTRIBUTE diff --git a/va/va.c b/va/va.c index b524fc7..5cf7220 100644 --- a/va/va.c +++ b/va/va.c @@ -106,12 +106,62 @@ 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_ALOG + ALOGE("%s", buffer); +# elif ANDROID_LOG + LOGE("%s", buffer); +# else + fprintf(stderr, "libva error: %s", buffer); +# endif +} + +static void default_log_info(const char *buffer) +{ +# ifdef ANDROID_ALOG + ALOGI("%s", buffer); +# elif ANDROID_LOG + LOGI("%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_errorMessage(const char *msg, ...) { 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); @@ -137,6 +187,9 @@ void va_infoMessage(const char *msg, ...) 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); diff --git a/va/va.h b/va/va.h index 665aafb..88628a8 100644 --- a/va/va.h +++ b/va/va.h @@ -230,6 +230,21 @@ typedef struct _VARectangle unsigned short height; } VARectangle; +/** Type of a message callback, used for both error and info log. */ +typedef void (*vaMessageCallback)(const char *message); + +/** + * Set the callback for error messages, or NULL for no logging. + * Returns the previous one, or NULL if it was disabled. + */ +vaMessageCallback vaSetErrorCallback(vaMessageCallback); + +/** + * Set the callback for info messages, or NULL for no logging. + * Returns the previous one, or NULL if it was disabled. + */ +vaMessageCallback vaSetInfoCallback(vaMessageCallback); + /** * Initialization: * A display must be obtained by calling vaGetDisplay() before calling -- 2.10.0 _______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
