Mercurial > libavutil.hg
annotate log.c @ 728:1fa3820b1a84 libavutil
ARM asm for AV_RN*()
ARMv6 and later support unaligned loads and stores for single
word/halfword but not double/multiple. GCC is ignorant of this and
will always use bytewise accesses for unaligned data. Casting to an
int32_t pointer is dangerous since a load/store double or multiple
instruction might be used (this happens with some code in FFmpeg).
Implementing the AV_[RW]* macros with inline asm using only supported
instructions gives fast and safe unaligned accesses. ARM RVCT does
the right thing with generic code.
This gives an overall speedup of up to 10%.
author | mru |
---|---|
date | Sat, 18 Apr 2009 00:00:28 +0000 |
parents | 4cd8f715ab17 |
children | e2fd9fd487ae |
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 /** | |
642
70bdd5501662
Use full internal pathname in doxygen @file directives.
diego
parents:
637
diff
changeset
|
23 * @file libavutil/log.c |
637 | 24 * logging functions |
81 | 25 */ |
26 | |
27 #include "avutil.h" | |
628
51e8796fe8fc
C files should #include the header files of the same name.
diego
parents:
543
diff
changeset
|
28 #include "log.h" |
81 | 29 |
88
b39b6310973c
removing redundant mess next time we break compatiility
michael
parents:
81
diff
changeset
|
30 int av_log_level = AV_LOG_INFO; |
81 | 31 |
163 | 32 void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
81 | 33 { |
34 static int print_prefix=1; | |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
35 static int count; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
36 static char line[1024], prev[1024]; |
81 | 37 AVClass* avc= ptr ? *(AVClass**)ptr : NULL; |
38 if(level>av_log_level) | |
39 return; | |
40 #undef fprintf | |
41 if(print_prefix && avc) { | |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
42 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
|
43 }else |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
44 line[0]=0; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
45 |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
46 vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl); |
81 | 47 |
672
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
48 print_prefix= line[strlen(line)-1] == '\n'; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
49 if(print_prefix && !strcmp(line, prev)){ |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
50 count++; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
51 return; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
52 } |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
53 if(count>0){ |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
54 fprintf(stderr, " Last message repeated %d times\n", count); |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
55 count=0; |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
56 } |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
57 fputs(line, stderr); |
4cd8f715ab17
Compact repeated messages to "Last message repeated x times".
michael
parents:
642
diff
changeset
|
58 strcpy(prev, line); |
81 | 59 } |
60 | |
61 static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback; | |
62 | |
63 void av_log(void* avcl, int level, const char *fmt, ...) | |
64 { | |
65 va_list vl; | |
66 va_start(vl, fmt); | |
67 av_vlog(avcl, level, fmt, vl); | |
68 va_end(vl); | |
69 } | |
70 | |
71 void av_vlog(void* avcl, int level, const char *fmt, va_list vl) | |
72 { | |
73 av_log_callback(avcl, level, fmt, vl); | |
74 } | |
75 | |
76 int av_log_get_level(void) | |
77 { | |
78 return av_log_level; | |
79 } | |
80 | |
81 void av_log_set_level(int level) | |
82 { | |
83 av_log_level = level; | |
84 } | |
85 | |
86 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)) | |
87 { | |
88 av_log_callback = callback; | |
89 } |