annotate log.c @ 992:a13125b5be3a libavutil

bswap: change ME to NE in macro names Other parts of FFmpeg use NE (native endian) rather than ME (machine). This makes it consistent.
author mru
date Sat, 10 Jul 2010 22:09:01 +0000
parents 1cf2ecdd1127
children 00ee3f0ffe6d
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>
907
3f0ed02fff47 4th try at getting ansi colors working with a default of color=yes_please.
michael
parents: 905
diff changeset
28 #include <stdlib.h>
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
29 #include "avutil.h"
628
51e8796fe8fc C files should #include the header files of the same name.
diego
parents: 543
diff changeset
30 #include "log.h"
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
31
797
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
32 #if LIBAVUTIL_VERSION_MAJOR > 50
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
33 static
e2fd9fd487ae Make av_log_level static at next lavu major version bump.
ramiro
parents: 672
diff changeset
34 #endif
88
b39b6310973c removing redundant mess next time we break compatiility
michael
parents: 81
diff changeset
35 int av_log_level = AV_LOG_INFO;
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
36
940
fc75699d2910 Fix compilation on windows CE
mstorsjo
parents: 937
diff changeset
37 #if defined(_WIN32) && !defined(__MINGW32CE__)
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
38 #include <windows.h>
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
39 static const uint8_t color[] = {12,12,12,14,7,7,7};
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
40 static int16_t background, attr_orig;
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
41 static HANDLE con;
937
823d95e42402 log.c: Use parameter passed to macro instead of the equivalent local variable
ramiro
parents: 936
diff changeset
42 #define set_color(x) SetConsoleTextAttribute(con, background | color[x])
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
43 #define reset_color() SetConsoleTextAttribute(con, attr_orig)
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
44 #else
935
096294624d52 Move ansi color array to outside of av_log_default_callback(). Do not pass
ramiro
parents: 934
diff changeset
45 static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9};
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
46 #define set_color(x) fprintf(stderr, "\033[%d;3%dm", color[x]>>4, color[x]&15)
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
47 #define reset_color() fprintf(stderr, "\033[0m")
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
48 #endif
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
49 static int use_color=-1;
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
50
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
51 #undef fprintf
935
096294624d52 Move ansi color array to outside of av_log_default_callback(). Do not pass
ramiro
parents: 934
diff changeset
52 static void colored_fputs(int level, const char *str){
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
53 if(use_color<0){
940
fc75699d2910 Fix compilation on windows CE
mstorsjo
parents: 937
diff changeset
54 #if defined(_WIN32) && !defined(__MINGW32CE__)
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
55 CONSOLE_SCREEN_BUFFER_INFO con_info;
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
56 con = GetStdHandle(STD_ERROR_HANDLE);
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
57 use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR");
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
58 if (use_color) {
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
59 GetConsoleScreenBufferInfo(con, &con_info);
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
60 attr_orig = con_info.wAttributes;
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
61 background = attr_orig & 0xF0;
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
62 }
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
63 #elif HAVE_ISATTY
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
64 use_color= getenv("TERM") && !getenv("NO_COLOR") && isatty(2);
907
3f0ed02fff47 4th try at getting ansi colors working with a default of color=yes_please.
michael
parents: 905
diff changeset
65 #else
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
66 use_color= 0;
907
3f0ed02fff47 4th try at getting ansi colors working with a default of color=yes_please.
michael
parents: 905
diff changeset
67 #endif
3f0ed02fff47 4th try at getting ansi colors working with a default of color=yes_please.
michael
parents: 905
diff changeset
68 }
3f0ed02fff47 4th try at getting ansi colors working with a default of color=yes_please.
michael
parents: 905
diff changeset
69
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
70 if(use_color){
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
71 set_color(level);
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
72 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
73 fputs(str, stderr);
934
252d7a7ee7d5 Rename use_ansi_color to use_color so it is not ANSI-specific.
ramiro
parents: 924
diff changeset
74 if(use_color){
936
41b43a526d0d Add win32 console color output.
ramiro
parents: 935
diff changeset
75 reset_color();
901
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
76 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
77 }
5b60f5ff30da Coloring the log with ANSI.
michael
parents: 899
diff changeset
78
922
2acb0b1891c0 av_default_item_name() so Simply AVClasses need 1 function less.
michael
parents: 917
diff changeset
79 const char* av_default_item_name(void* ptr){
2acb0b1891c0 av_default_item_name() so Simply AVClasses need 1 function less.
michael
parents: 917
diff changeset
80 return (*(AVClass**)ptr)->class_name;
2acb0b1891c0 av_default_item_name() so Simply AVClasses need 1 function less.
michael
parents: 917
diff changeset
81 }
2acb0b1891c0 av_default_item_name() so Simply AVClasses need 1 function less.
michael
parents: 917
diff changeset
82
163
dfd02ce85c5d Allow to uninstall a custom log callback
gpoirier
parents: 116
diff changeset
83 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
84 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
85 static int print_prefix=1;
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
86 static int count;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
87 static char line[1024], prev[1024];
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
88 AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
89 if(level>av_log_level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
90 return;
924
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
91 line[0]=0;
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
92 #undef fprintf
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
93 if(print_prefix && avc) {
924
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
94 if(avc->version >= (50<<16 | 15<<8 | 3) && avc->parent_log_context_offset){
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
95 AVClass** parent= *(AVClass***)(((uint8_t*)ptr) + avc->parent_log_context_offset);
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
96 if(parent && *parent){
951
1cf2ecdd1127 Print a space after the AVClass prefix.
jai_menon
parents: 940
diff changeset
97 snprintf(line, sizeof(line), "[%s @ %p] ", (*parent)->item_name(parent), parent);
924
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
98 }
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
99 }
951
1cf2ecdd1127 Print a space after the AVClass prefix.
jai_menon
parents: 940
diff changeset
100 snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ", avc->item_name(ptr), ptr);
924
d45ace227adf Print parent log context too, if available.
michael
parents: 922
diff changeset
101 }
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
102
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
103 vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
104
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
105 print_prefix= line[strlen(line)-1] == '\n';
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
106 if(print_prefix && !strcmp(line, prev)){
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
107 count++;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
108 return;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
109 }
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
110 if(count>0){
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
111 fprintf(stderr, " Last message repeated %d times\n", count);
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
112 count=0;
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
113 }
935
096294624d52 Move ansi color array to outside of av_log_default_callback(). Do not pass
ramiro
parents: 934
diff changeset
114 colored_fputs(av_clip(level>>3, 0, 6), line);
672
4cd8f715ab17 Compact repeated messages to "Last message repeated x times".
michael
parents: 642
diff changeset
115 strcpy(prev, line);
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
116 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
117
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
118 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
119
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
120 void av_log(void* avcl, int level, const char *fmt, ...)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
121 {
917
3ab411c447c4 Add means to adjust the log level per context.
michael
parents: 907
diff changeset
122 AVClass* avc= avcl ? *(AVClass**)avcl : NULL;
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
123 va_list vl;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
124 va_start(vl, fmt);
917
3ab411c447c4 Add means to adjust the log level per context.
michael
parents: 907
diff changeset
125 if(avc && avc->version >= (50<<16 | 15<<8 | 2) && avc->log_level_offset_offset && level>=AV_LOG_FATAL)
3ab411c447c4 Add means to adjust the log level per context.
michael
parents: 907
diff changeset
126 level += *(int*)(((uint8_t*)avcl) + avc->log_level_offset_offset);
81
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
127 av_vlog(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
128 va_end(vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
129 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
130
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
131 void av_vlog(void* avcl, int level, const char *fmt, va_list vl)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
132 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
133 av_log_callback(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
134 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
135
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
136 int av_log_get_level(void)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
137 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
138 return av_log_level;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
139 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
140
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
141 void av_log_set_level(int level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
142 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
143 av_log_level = level;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
144 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
145
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
146 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
147 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
148 av_log_callback = callback;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
149 }