[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