[Libva] [PATCH] Add callbacks for error and info messages.
Sean V Kelley
seanvk at posteo.de
Mon Oct 24 22:54:17 UTC 2016
On Wed, 2016-10-19 at 13:37 +0100, Emmanuel Gil Peyrot wrote:
> 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.
What version of Libva are you testing this with?
Sean
>
> Signed-off-by: Emmanuel Gil Peyrot <linkmauve at linkmauve.fr>
> ---
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/libva/attachments/20161024/0b84aa95/attachment.sig>
More information about the Libva
mailing list