diff log.c @ 901:5b60f5ff30da libavutil

Coloring the log with ANSI. Ive checked this on black and white background and found no problem in terms of readability. flames welcome.
author michael
date Thu, 22 Apr 2010 18:58:39 +0000
parents 0795a743bda1
children 143b937b0b03
line wrap: on
line diff
--- a/log.c	Wed Apr 21 17:57:48 2010 +0000
+++ b/log.c	Thu Apr 22 18:58:39 2010 +0000
@@ -24,6 +24,7 @@
  * logging functions
  */
 
+#include <unistd.h>
 #include "avutil.h"
 #include "log.h"
 
@@ -32,11 +33,27 @@
 #endif
 int av_log_level = AV_LOG_INFO;
 
+#if !HAVE_ISATTY
+#define isatty(s) 0
+#endif
+
+#undef fprintf
+static void colored_fputs(int color, const char *str){
+    if(isatty(2)){
+        fprintf(stderr, "\033[%dm\033[3%dm", color>>4, color&15);
+    }
+    fputs(str, stderr);
+    if(isatty(2)){
+        fprintf(stderr, "\033[0m");
+    }
+}
+
 void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
 {
     static int print_prefix=1;
     static int count;
     static char line[1024], prev[1024];
+    static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9};
     AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
     if(level>av_log_level)
         return;
@@ -57,7 +74,7 @@
         fprintf(stderr, "    Last message repeated %d times\n", count);
         count=0;
     }
-    fputs(line, stderr);
+    colored_fputs(color[av_clip(level>>3, 0, 6)], line);
     strcpy(prev, line);
 }