On Thu, Apr 3, 2014 at 11:34 AM, Luca Barbato <[email protected]> wrote:
> And provide extended coloring capabilities for debugging.
> The default colors do not change in 256 more to keep
> supporting people using Black on White, White on Black and
> Solarized terminals.
>
> Signed-off-by: Luca Barbato <[email protected]>
> ---
>  doc/APIchanges      |  3 +++
>  libavutil/log.c     | 57 
> +++++++++++++++++++++++++++++++++++------------------
>  libavutil/log.h     |  8 ++++++++
>  libavutil/version.h |  2 +-
>  4 files changed, 50 insertions(+), 20 deletions(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index d800253..94fdab1 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -13,6 +13,9 @@ libavutil:     2013-12-xx
>
>  API changes, most recent first:
>
> +2014-04-xx - xxxxxxx - lavu 53.08.1 - log.h
> +  Add AV_LOG(c) macro to have 256 color debug messages.
> +
>  2014-02-xx - xxxxxxx - lavu 53.08.0 - frame.h
>    Add av_frame_remove_side_data() for removing a single side data
>    instance from a frame.
> diff --git a/libavutil/log.c b/libavutil/log.c
> index 3cc811b..c447b5a 100644
> --- a/libavutil/log.c
> +++ b/libavutil/log.c
> @@ -53,35 +53,50 @@ static HANDLE con;
>  #else
>  static const uint8_t color[] = { 0x41, 0x41, 0x11, 0x03, 9, 0x02, 0x06 };
>  #define set_color(x)  fprintf(stderr, "\033[%d;3%dm", color[x] >> 4, 
> color[x]&15)
> +#define print_256color(x) fprintf(stderr, "\033[38;5;%dm", x)
>  #define reset_color() fprintf(stderr, "\033[0m")
>  #endif
>  static int use_color = -1;
>
> -static void colored_fputs(int level, const char *str)
> +static void check_color_terminal(void)
>  {
> -    if (use_color < 0) {
>  #if HAVE_SETCONSOLETEXTATTRIBUTE
> -        CONSOLE_SCREEN_BUFFER_INFO con_info;
> -        con = GetStdHandle(STD_ERROR_HANDLE);
> -        use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") &&
> -                    !getenv("AV_LOG_FORCE_NOCOLOR");
> -        if (use_color) {
> -            GetConsoleScreenBufferInfo(con, &con_info);
> -            attr_orig  = con_info.wAttributes;
> -            background = attr_orig & 0xF0;
> -        }
> +    CONSOLE_SCREEN_BUFFER_INFO con_info;
> +    con = GetStdHandle(STD_ERROR_HANDLE);
> +    use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") &&
> +                !getenv("AV_LOG_FORCE_NOCOLOR");
> +    if (use_color) {
> +        GetConsoleScreenBufferInfo(con, &con_info);
> +        attr_orig  = con_info.wAttributes;
> +        background = attr_orig & 0xF0;
> +    }
>  #elif HAVE_ISATTY
> -        use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") &&
> -                    (getenv("TERM") && isatty(2) ||
> -                     getenv("AV_LOG_FORCE_COLOR"));
> +    char *term = getenv("TERM");
> +    use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") &&
> +                (getenv("TERM") && isatty(2) || 
> getenv("AV_LOG_FORCE_COLOR"));
> +    use_color += !!strstr(term, "256color") ;
>  #else
> -        use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") &&
> -                   !getenv("AV_LOG_FORCE_NOCOLOR");
> +    use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") &&
> +               !getenv("AV_LOG_FORCE_NOCOLOR");
>  #endif
> -    }
> +}
>
> -    if (use_color) {
> +static void colored_fputs(int level, int tint, const char *str)
> +{
> +    if (use_color < 0)
> +        check_color_terminal();
> +
> +    switch (use_color) {
> +    case 1:
> +        set_color(level);
> +        break;
> +    case 2:
>          set_color(level);
> +        if (tint)
> +            print_256color(tint);
> +        break;
> +    default:
> +        break;
>      }
>      fputs(str, stderr);
>      if (use_color) {
> @@ -102,6 +117,10 @@ void av_log_default_callback(void *avcl, int level, 
> const char *fmt, va_list vl)
>      char line[1024];
>      static int is_atty;
>      AVClass* avc = avcl ? *(AVClass **) avcl : NULL;
> +    int tint = av_clip(level >> 8, 0, 256);
> +
> +    level &= 0xff;
> +
>      if (level > av_log_level)
>          return;
>      line[0] = 0;
> @@ -138,7 +157,7 @@ void av_log_default_callback(void *avcl, int level, const 
> char *fmt, va_list vl)
>          fprintf(stderr, "    Last message repeated %d times\n", count);
>          count = 0;
>      }
> -    colored_fputs(av_clip(level >> 3, 0, 6), line);
> +    colored_fputs(av_clip(level >> 3, 0, 6), tint, line);
>      av_strlcpy(prev, line, sizeof line);
>  }
>
> diff --git a/libavutil/log.h b/libavutil/log.h
> index 6d26b67..2f7811c 100644
> --- a/libavutil/log.h
> +++ b/libavutil/log.h
> @@ -144,6 +144,14 @@ typedef struct AVClass {
>  #define AV_LOG_DEBUG    48
>
>  /**
> + * Sets additional colors for extended debugging sessions.
> + * Requires 256color terminal support. Use outside debugging is not
> + * recommended.
> + */
> +
> +#define AV_LOG_C(x) (x << 8)
> +
> +/**
>   * @}
>   */
>
> diff --git a/libavutil/version.h b/libavutil/version.h
> index 7f439d7..be88e08 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -55,7 +55,7 @@
>
>  #define LIBAVUTIL_VERSION_MAJOR 53
>  #define LIBAVUTIL_VERSION_MINOR  8
> -#define LIBAVUTIL_VERSION_MICRO  0
> +#define LIBAVUTIL_VERSION_MICRO  1
>
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
>                                                 LIBAVUTIL_VERSION_MINOR, \

LGTM with the bump on minor rather than on micro


-- 
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to