summaryrefslogtreecommitdiff
path: root/libavutil/log.c
diff options
context:
space:
mode:
authorRamiro Polla <ramiro.polla@gmail.com>2010-06-09 18:13:01 +0000
committerRamiro Polla <ramiro.polla@gmail.com>2010-06-09 18:13:01 +0000
commit4855f8679e40c7372e089a111538054ca57e89ca (patch)
treec61b2815b60e8e5ec660052554317e95343fd866 /libavutil/log.c
parent6e34a5582d2c4dfa0f1a49a051ac208e3390e7c9 (diff)
Add win32 console color output.
Based on patches by James Darnley <james dot darnley at gmail dot com>. Originally committed as revision 23554 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil/log.c')
-rw-r--r--libavutil/log.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/libavutil/log.c b/libavutil/log.c
index e5c06a1a59..119e199026 100644
--- a/libavutil/log.c
+++ b/libavutil/log.c
@@ -34,13 +34,33 @@ static
#endif
int av_log_level = AV_LOG_INFO;
+#ifdef _WIN32
+#include <windows.h>
+static const uint8_t color[] = {12,12,12,14,7,7,7};
+static int16_t background, attr_orig;
+static HANDLE con;
+#define set_color(x) SetConsoleTextAttribute(con, background | color[level])
+#define reset_color() SetConsoleTextAttribute(con, attr_orig)
+#else
static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9};
+#define set_color(x) fprintf(stderr, "\033[%d;3%dm", color[x]>>4, color[x]&15)
+#define reset_color() fprintf(stderr, "\033[0m")
+#endif
static int use_color=-1;
#undef fprintf
static void colored_fputs(int level, const char *str){
if(use_color<0){
-#if HAVE_ISATTY && !defined(_WIN32)
+#ifdef _WIN32
+ CONSOLE_SCREEN_BUFFER_INFO con_info;
+ con = GetStdHandle(STD_ERROR_HANDLE);
+ use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR");
+ if (use_color) {
+ GetConsoleScreenBufferInfo(con, &con_info);
+ attr_orig = con_info.wAttributes;
+ background = attr_orig & 0xF0;
+ }
+#elif HAVE_ISATTY
use_color= getenv("TERM") && !getenv("NO_COLOR") && isatty(2);
#else
use_color= 0;
@@ -48,11 +68,11 @@ static void colored_fputs(int level, const char *str){
}
if(use_color){
- fprintf(stderr, "\033[%d;3%dm", color[level]>>4, color[level]&15);
+ set_color(level);
}
fputs(str, stderr);
if(use_color){
- fprintf(stderr, "\033[0m");
+ reset_color();
}
}