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
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 /**
642
70bdd5501662 Use full internal pathname in doxygen @file directives.
diego
parents: 637
diff changeset
23 * @file libavutil/log.c
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
31
163
dfd02ce85c5d Allow to uninstall a custom log callback
gpoirier
parents: 116
diff changeset
32 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
33 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
37 AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
38 if(level>av_log_level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
39 return;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
40 #undef fprintf
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
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
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
59 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
60
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
61 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
62
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
63 void av_log(void* avcl, int level, const char *fmt, ...)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
64 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
65 va_list vl;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
66 va_start(vl, fmt);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
67 av_vlog(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
68 va_end(vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
69 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
70
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
71 void av_vlog(void* avcl, int level, const char *fmt, va_list vl)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
72 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
73 av_log_callback(avcl, level, fmt, vl);
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
74 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
75
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
76 int av_log_get_level(void)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
77 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
78 return av_log_level;
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 void av_log_set_level(int level)
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
82 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
83 av_log_level = level;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
84 }
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
85
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
86 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
87 {
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
88 av_log_callback = callback;
5cfa773a3bdd Move av_log() & friends to libavutil
lucabe
parents:
diff changeset
89 }