lavu: introduce av_log_format_line.
authorNicolas George <nicolas.george@normalesup.org>
Thu, 8 Dec 2011 12:54:05 +0000 (13:54 +0100)
committerNicolas George <nicolas.george@normalesup.org>
Thu, 8 Dec 2011 17:47:47 +0000 (18:47 +0100)
doc/APIchanges
libavutil/avutil.h
libavutil/log.c
libavutil/log.h

index 6f7d46d..5207b42 100644 (file)
@@ -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.
 
index af43cc5..acc4c22 100644 (file)
  */
 
 #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, \
index 3182885..3161e4e 100644 (file)
@@ -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)
index b868330..02a0e1a 100644 (file)
@@ -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.
  */