annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
1 /*
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
2 * log functions
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
3 * Copyright (c) 2003 Michel Bardiaux
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
4 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
5 * This file is part of FFmpeg.
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
6 *
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
11 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
15 * Lesser General Public License for more details.
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
16 *
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 88
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
20 */
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
21
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
22 /**
899
0795a743bda1 Remove explicit filename from Doxygen @file commands.
diego
parents: 797
diff changeset
23 * @file
637
683a6dbdd2b2 spelling/grammar/consistency review part III
diego
parents: 628
diff changeset
24 * logging functions
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
25 */
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
26
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
27 #include <unistd.h>
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
28 #include "avutil.h"
628
51e8796fe8fc C files should #include the header files of the same name.
diego
parents: 543
diff changeset
29 #include "log.h"
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
30
797
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
31 #if LIBAVUTIL_VERSION_MAJOR > 50
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
32 static
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
33 #endif
88
b39b6310973c removing redundant mess next time we break compatiility
michael
parents: 81
diff changeset
34 int av_log_level = AV_LOG_INFO;
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
35
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
36 #if !HAVE_ISATTY
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
37 #define isatty(s) 0
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
38 #endif
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
39
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
40 #undef fprintf
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
41 static void colored_fputs(int color, const char *str){
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
42 if(isatty(2)){
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
43 fprintf(stderr, "\033[%dm\033[3%dm", color>>4, color&15);
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
44 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
45 fputs(str, stderr);
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
46 if(isatty(2)){
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
47 fprintf(stderr, "\033[0m");
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
48 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
49 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
50
163
dfd02ce85c5d Allow to uninstall a custom log callback
gpoirier
parents: 116
diff changeset
51 void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
52 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
53 static int print_prefix=1;
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
54 static int count;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
55 static char line[1024], prev[1024];
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
56 static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9};
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
57 AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
58 if(level>av_log_level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
59 return;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
60 #undef fprintf
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
61 if(print_prefix && avc) {
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
62 snprintf(line, sizeof(line), "[%s @ %p]", avc->item_name(ptr), ptr);
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
63 }else
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
64 line[0]=0;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
65
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
66 vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
67
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
68 print_prefix= line[strlen(line)-1] == '\n';
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
69 if(print_prefix && !strcmp(line, prev)){
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
70 count++;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
71 return;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
72 }
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
73 if(count>0){
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
74 fprintf(stderr, " Last message repeated %d times\n", count);
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
75 count=0;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
76 }
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
77 colored_fputs(color[av_clip(level>>3, 0, 6)], line);
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
78 strcpy(prev, line);
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
79 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
80
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
81 static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
82
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
83 void av_log(void* avcl, int level, const char *fmt, ...)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
84 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
85 va_list vl;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
86 va_start(vl, fmt);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
87 av_vlog(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
88 va_end(vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
89 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
90
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
91 void av_vlog(void* avcl, int level, const char *fmt, va_list vl)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
92 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
93 av_log_callback(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
94 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
95
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
96 int av_log_get_level(void)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
97 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
98 return av_log_level;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
99 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
100
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
101 void av_log_set_level(int level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
102 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
103 av_log_level = level;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
104 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
105
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
106 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
107 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
108 av_log_callback = callback;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
109 }