Mercurial > libavutil.hg
annotate log.c @ 914:66b39cb91dde libavutil
bswap: add macros to byteswap constants
The normal byteswap functions might use inline asm which is suboptimal
with constants (and cannot be used in static initialisers), so special
macros for constants only is needed.
We should not rely on the gcc __builtin_constant_p() test since it is
not always available.
author | mru |
---|---|
date | Thu, 29 Apr 2010 14:41:20 +0000 |
parents | 3f0ed02fff47 |
children | 3ab411c447c4 |
rev | line source |
---|---|
81 | 1 /* |
2 * log functions | |
3 * Copyright (c) 2003 Michel Bardiaux | |
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 | 8 * modify it under the terms of the GNU Lesser General Public |
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 | 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 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
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 | 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 */ | |
21 | |
22 /** | |
899
0795a743bda1
Remove explicit filename from Doxygen @file commands.
diego
parents:
797
diff
changeset
|
23 * @file |
637 | 24 * logging functions |
81 | 25 */ |
26 | |
901 | 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 | 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 | 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 | 36 |
907
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
37 static int use_ansi_color=-1; |
901 | 38 |
39 #undef fprintf | |
40 static void colored_fputs(int color, const char *str){ | |
907
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
41 if(use_ansi_color<0){ |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
42 #if HAVE_ISATTY && !defined(_WIN32) |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
43 use_ansi_color= getenv("TERM") && !getenv("NO_COLOR") && isatty(2); |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
44 #else |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
45 use_ansi_color= 0; |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
46 #endif |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
47 } |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
48 |
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
49 if(use_ansi_color){ |
904 | 50 fprintf(stderr, "\033[%d;3%dm", color>>4, color&15); |
901 | 51 } |
52 fputs(str, stderr); | |
907
3f0ed02fff47
4th try at getting ansi colors working with a default of color=yes_please.
michael
parents:
905
diff
changeset
|
53 if(use_ansi_color){ |
903
b0cedb31562f
Reenable ANSI colors, use method from VLC as suggested by ramiro.
michael
parents:
902
diff
changeset
|
54 fprintf(stderr, "\033[0m"); |
901 | 55 } |
56 } | |
57 | |
163 | 58 void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
81 | 59 { |
60 static int print_prefix=1; | |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
61 static int count; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
62 static char line[1024], prev[1024]; |
901 | 63 static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9}; |
81 | 64 AVClass* avc= ptr ? *(AVClass**)ptr : NULL; |
65 if(level>av_log_level) | |
66 return; | |
67 #undef fprintf | |
68 if(print_prefix && avc) { | |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
69 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
|
70 }else |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
71 line[0]=0; |
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 vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl); |
81 | 74 |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
75 print_prefix= line[strlen(line)-1] == '\n'; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
76 if(print_prefix && !strcmp(line, prev)){ |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
77 count++; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
78 return; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
79 } |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
80 if(count>0){ |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
81 fprintf(stderr, " Last message repeated %d times\n", count); |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
82 count=0; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
83 } |
901 | 84 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
|
85 strcpy(prev, line); |
81 | 86 } |
87 | |
88 static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback; | |
89 | |
90 void av_log(void* avcl, int level, const char *fmt, ...) | |
91 { | |
92 va_list vl; | |
93 va_start(vl, fmt); | |
94 av_vlog(avcl, level, fmt, vl); | |
95 va_end(vl); | |
96 } | |
97 | |
98 void av_vlog(void* avcl, int level, const char *fmt, va_list vl) | |
99 { | |
100 av_log_callback(avcl, level, fmt, vl); | |
101 } | |
102 | |
103 int av_log_get_level(void) | |
104 { | |
105 return av_log_level; | |
106 } | |
107 | |
108 void av_log_set_level(int level) | |
109 { | |
110 av_log_level = level; | |
111 } | |
112 | |
113 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)) | |
114 { | |
115 av_log_callback = callback; | |
116 } |