summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges3
-rw-r--r--libavutil/avutil.h2
-rw-r--r--libavutil/log.c35
-rw-r--r--libavutil/log.h10
4 files changed, 35 insertions, 15 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index 6f7d46df9e..5207b42358 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first:
+2011-12-08 - xxxxxxx - lavu 51.31.0
+ Add av_log_format_line.
+
2011-12-03 - xxxxxxx - lavu 51.30.0
Add AVERROR_BUG.
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index af43cc5e8f..acc4c22b87 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -153,7 +153,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 30
+#define LIBAVUTIL_VERSION_MINOR 31
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/log.c b/libavutil/log.c
index 3182885ace..3161e4e7ff 100644
--- a/libavutil/log.c
+++ b/libavutil/log.c
@@ -92,40 +92,47 @@ static void sanitize(uint8_t *line){
}
}
-void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
+void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl,
+ char *line, int line_size, int *print_prefix)
{
- static int print_prefix = 1;
- static int count;
- static char prev[1024];
- char line[1024];
- static int is_atty;
AVClass* avc = ptr ? *(AVClass **) ptr : NULL;
- if (level > av_log_level)
- return;
line[0] = 0;
-#undef fprintf
- if (print_prefix && avc) {
+ if (*print_prefix && avc) {
if (avc->parent_log_context_offset) {
AVClass** parent = *(AVClass ***) (((uint8_t *) ptr) +
avc->parent_log_context_offset);
if (parent && *parent) {
- snprintf(line, sizeof(line), "[%s @ %p] ",
+ snprintf(line, line_size, "[%s @ %p] ",
(*parent)->item_name(parent), parent);
}
}
- snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ",
+ snprintf(line + strlen(line), line_size - strlen(line), "[%s @ %p] ",
avc->item_name(ptr), ptr);
}
- vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
+ vsnprintf(line + strlen(line), line_size - strlen(line), fmt, vl);
+
+ *print_prefix = strlen(line) && line[strlen(line) - 1] == '\n';
+}
+
+void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
+{
+ static int print_prefix = 1;
+ static int count;
+ static char prev[1024];
+ char line[1024];
+ static int is_atty;
- print_prefix = strlen(line) && line[strlen(line) - 1] == '\n';
+ if (level > av_log_level)
+ return;
+ av_log_format_line(ptr, level, fmt, vl, line, sizeof(line), &print_prefix);
#if HAVE_ISATTY
if (!is_atty)
is_atty = isatty(2) ? 1 : -1;
#endif
+#undef fprintf
if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strcmp(line, prev)){
count++;
if (is_atty == 1)
diff --git a/libavutil/log.h b/libavutil/log.h
index b8683302a2..02a0e1ac8c 100644
--- a/libavutil/log.h
+++ b/libavutil/log.h
@@ -148,6 +148,16 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
const char* av_default_item_name(void* ctx);
/**
+ * Format a line of log the same way as the default callback.
+ * @param line buffer to receive the formated line
+ * @param line_size size of the buffer
+ * @param print_prefix used to store whether the prefix must be printed;
+ * must point to a persistent integer initially set to 1
+ */
+void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl,
+ char *line, int line_size, int *print_prefix);
+
+/**
* av_dlog macros
* Useful to print debug messages that shouldn't get compiled in normally.
*/