lavu: introduce av_log_format_line.

pull/2/head
Nicolas George 13 years ago
parent 15c481614b
commit 26c6fec9d9
  1. 3
      doc/APIchanges
  2. 2
      libavutil/avutil.h
  3. 35
      libavutil/log.c
  4. 10
      libavutil/log.h

@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first: 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 2011-12-03 - xxxxxxx - lavu 51.30.0
Add AVERROR_BUG. Add AVERROR_BUG.

@ -153,7 +153,7 @@
*/ */
#define LIBAVUTIL_VERSION_MAJOR 51 #define LIBAVUTIL_VERSION_MAJOR 51
#define LIBAVUTIL_VERSION_MINOR 30 #define LIBAVUTIL_VERSION_MINOR 31
#define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

@ -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; AVClass* avc = ptr ? *(AVClass **) ptr : NULL;
if (level > av_log_level)
return;
line[0] = 0; line[0] = 0;
#undef fprintf if (*print_prefix && avc) {
if (print_prefix && avc) {
if (avc->parent_log_context_offset) { if (avc->parent_log_context_offset) {
AVClass** parent = *(AVClass ***) (((uint8_t *) ptr) + AVClass** parent = *(AVClass ***) (((uint8_t *) ptr) +
avc->parent_log_context_offset); avc->parent_log_context_offset);
if (parent && *parent) { if (parent && *parent) {
snprintf(line, sizeof(line), "[%s @ %p] ", snprintf(line, line_size, "[%s @ %p] ",
(*parent)->item_name(parent), parent); (*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); 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 HAVE_ISATTY
if (!is_atty) if (!is_atty)
is_atty = isatty(2) ? 1 : -1; is_atty = isatty(2) ? 1 : -1;
#endif #endif
#undef fprintf
if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strcmp(line, prev)){ if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strcmp(line, prev)){
count++; count++;
if (is_atty == 1) if (is_atty == 1)

@ -147,6 +147,16 @@ void av_log_set_callback(void (*)(void*, int, const char*, va_list));
void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
const char* av_default_item_name(void* ctx); 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 * av_dlog macros
* Useful to print debug messages that shouldn't get compiled in normally. * Useful to print debug messages that shouldn't get compiled in normally.

Loading…
Cancel
Save