@ -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 ) ;
}