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
