|
|
|
@ -48,12 +48,14 @@ static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9}; |
|
|
|
|
static int use_color = -1; |
|
|
|
|
|
|
|
|
|
#undef fprintf |
|
|
|
|
static void colored_fputs(int level, const char *str){ |
|
|
|
|
static void colored_fputs(int level, const char *str) |
|
|
|
|
{ |
|
|
|
|
if (use_color < 0) { |
|
|
|
|
#if defined(_WIN32) && !defined(__MINGW32CE__) |
|
|
|
|
CONSOLE_SCREEN_BUFFER_INFO con_info; |
|
|
|
|
con = GetStdHandle(STD_ERROR_HANDLE); |
|
|
|
|
use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR"); |
|
|
|
|
use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") && |
|
|
|
|
!getenv("AV_LOG_FORCE_NOCOLOR"); |
|
|
|
|
if (use_color) { |
|
|
|
|
GetConsoleScreenBufferInfo(con, &con_info); |
|
|
|
|
attr_orig = con_info.wAttributes; |
|
|
|
@ -61,9 +63,11 @@ static void colored_fputs(int level, const char *str){ |
|
|
|
|
} |
|
|
|
|
#elif HAVE_ISATTY |
|
|
|
|
use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") && |
|
|
|
|
(getenv("TERM") && isatty(2) || getenv("AV_LOG_FORCE_COLOR")); |
|
|
|
|
(getenv("TERM") && isatty(2) || |
|
|
|
|
getenv("AV_LOG_FORCE_COLOR")); |
|
|
|
|
#else |
|
|
|
|
use_color= getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR"); |
|
|
|
|
use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") && |
|
|
|
|
!getenv("AV_LOG_FORCE_NOCOLOR"); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -76,7 +80,8 @@ static void colored_fputs(int level, const char *str){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const char* av_default_item_name(void* ptr){ |
|
|
|
|
const char *av_default_item_name(void *ptr) |
|
|
|
|
{ |
|
|
|
|
return (*(AVClass **) ptr)->class_name; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -94,12 +99,15 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
|
|
|
|
#undef fprintf |
|
|
|
|
if (print_prefix && avc) { |
|
|
|
|
if (avc->parent_log_context_offset) { |
|
|
|
|
AVClass** parent= *(AVClass***)(((uint8_t*)ptr) + 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] ", (*parent)->item_name(parent), parent); |
|
|
|
|
snprintf(line, sizeof(line), "[%s @ %p] ", |
|
|
|
|
(*parent)->item_name(parent), parent); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ", avc->item_name(ptr), ptr); |
|
|
|
|
snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ", |
|
|
|
|
avc->item_name(ptr), ptr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl); |
|
|
|
@ -107,10 +115,12 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
|
|
|
|
print_prefix = strlen(line) && line[strlen(line) - 1] == '\n'; |
|
|
|
|
|
|
|
|
|
#if HAVE_ISATTY |
|
|
|
|
if(!is_atty) is_atty= isatty(2) ? 1 : -1; |
|
|
|
|
if (!is_atty) |
|
|
|
|
is_atty = isatty(2) ? 1 : -1; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if(print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strncmp(line, prev, sizeof line)){ |
|
|
|
|
if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) && |
|
|
|
|
!strncmp(line, prev, sizeof line)) { |
|
|
|
|
count++; |
|
|
|
|
if (is_atty == 1) |
|
|
|
|
fprintf(stderr, " Last message repeated %d times\r", count); |
|
|
|
@ -124,14 +134,16 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
|
|
|
|
av_strlcpy(prev, line, sizeof line); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback; |
|
|
|
|
static void (*av_log_callback)(void*, int, const char*, va_list) = |
|
|
|
|
av_log_default_callback; |
|
|
|
|
|
|
|
|
|
void av_log(void* avcl, int level, const char *fmt, ...) |
|
|
|
|
{ |
|
|
|
|
AVClass* avc = avcl ? *(AVClass **) avcl : NULL; |
|
|
|
|
va_list vl; |
|
|
|
|
va_start(vl, fmt); |
|
|
|
|
if(avc && avc->version >= (50<<16 | 15<<8 | 2) && avc->log_level_offset_offset && level>=AV_LOG_FATAL) |
|
|
|
|
if (avc && avc->version >= (50 << 16 | 15 << 8 | 2) && |
|
|
|
|
avc->log_level_offset_offset && level >= AV_LOG_FATAL) |
|
|
|
|
level += *(int *) (((uint8_t *) avcl) + avc->log_level_offset_offset); |
|
|
|
|
av_vlog(avcl, level, fmt, vl); |
|
|
|
|
va_end(vl); |
|
|
|
|