36
36
#if defined(_WIN32) && !defined(__MINGW32CE__)
37
37
#include <windows.h>
38
static const uint8_t color[] = {12,12,12,14,7,7,7};
38
static const uint8_t color[] = { 12, 12, 12, 14, 7, 7, 7 };
39
39
static int16_t background, attr_orig;
41
41
#define set_color(x) SetConsoleTextAttribute(con, background | color[x])
42
42
#define reset_color() SetConsoleTextAttribute(con, attr_orig)
44
static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9};
45
#define set_color(x) fprintf(stderr, "\033[%d;3%dm", color[x]>>4, color[x]&15)
44
static const uint8_t color[] = { 0x41, 0x41, 0x11, 0x03, 9, 9, 9 };
45
#define set_color(x) fprintf(stderr, "\033[%d;3%dm", color[x] >> 4, color[x]&15)
46
46
#define reset_color() fprintf(stderr, "\033[0m")
48
static int use_color=-1;
48
static int use_color = -1;
51
static void colored_fputs(int level, const char *str){
51
static void colored_fputs(int level, const char *str)
53
54
#if defined(_WIN32) && !defined(__MINGW32CE__)
54
55
CONSOLE_SCREEN_BUFFER_INFO con_info;
55
56
con = GetStdHandle(STD_ERROR_HANDLE);
56
use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") && !getenv("FFMPEG_FORCE_NOCOLOR");
57
use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR") &&
58
!getenv("AV_LOG_FORCE_NOCOLOR");
58
60
GetConsoleScreenBufferInfo(con, &con_info);
59
61
attr_orig = con_info.wAttributes;
60
62
background = attr_orig & 0xF0;
63
use_color= !getenv("NO_COLOR") && !getenv("FFMPEG_FORCE_NOCOLOR") &&
64
(getenv("TERM") && isatty(2) || getenv("FFMPEG_FORCE_COLOR"));
65
use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") &&
66
(getenv("TERM") && isatty(2) ||
67
getenv("AV_LOG_FORCE_COLOR"));
66
use_color= getenv("FFMPEG_FORCE_COLOR") && !getenv("NO_COLOR") && !getenv("FFMPEG_FORCE_NOCOLOR");
69
use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") &&
70
!getenv("AV_LOG_FORCE_NOCOLOR");
73
77
fputs(str, stderr);
79
const char* av_default_item_name(void* ptr){
80
return (*(AVClass**)ptr)->class_name;
83
const char *av_default_item_name(void *ptr)
85
return (*(AVClass **) ptr)->class_name;
83
88
void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
85
static int print_prefix=1;
90
static int print_prefix = 1;
87
92
static char prev[1024];
89
94
static int is_atty;
90
AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
91
if(level>av_log_level)
95
AVClass* avc = ptr ? *(AVClass **) ptr : NULL;
96
if (level > av_log_level)
95
if(print_prefix && avc) {
100
if (print_prefix && avc) {
96
101
if (avc->parent_log_context_offset) {
97
AVClass** parent= *(AVClass***)(((uint8_t*)ptr) + avc->parent_log_context_offset);
98
if(parent && *parent){
99
snprintf(line, sizeof(line), "[%s @ %p] ", (*parent)->item_name(parent), parent);
102
AVClass** parent = *(AVClass ***) (((uint8_t *) ptr) +
103
avc->parent_log_context_offset);
104
if (parent && *parent) {
105
snprintf(line, sizeof(line), "[%s @ %p] ",
106
(*parent)->item_name(parent), parent);
102
snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ", avc->item_name(ptr), ptr);
109
snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ",
110
avc->item_name(ptr), ptr);
105
113
vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
107
print_prefix = strlen(line) && line[strlen(line)-1] == '\n';
115
print_prefix = strlen(line) && line[strlen(line) - 1] == '\n';
110
if(!is_atty) is_atty= isatty(2) ? 1 : -1;
119
is_atty = isatty(2) ? 1 : -1;
113
if(print_prefix && (flags & AV_LOG_SKIP_REPEATED) && !strncmp(line, prev, sizeof line)){
122
if (print_prefix && (flags & AV_LOG_SKIP_REPEATED) &&
123
!strncmp(line, prev, sizeof line)) {
116
126
fprintf(stderr, " Last message repeated %d times\r", count);
120
130
fprintf(stderr, " Last message repeated %d times\n", count);
123
colored_fputs(av_clip(level>>3, 0, 6), line);
133
colored_fputs(av_clip(level >> 3, 0, 6), line);
124
134
av_strlcpy(prev, line, sizeof line);
127
static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback;
137
static void (*av_log_callback)(void*, int, const char*, va_list) =
138
av_log_default_callback;
129
140
void av_log(void* avcl, int level, const char *fmt, ...)
131
AVClass* avc= avcl ? *(AVClass**)avcl : NULL;
142
AVClass* avc = avcl ? *(AVClass **) avcl : NULL;
133
144
va_start(vl, fmt);
134
if(avc && avc->version >= (50<<16 | 15<<8 | 2) && avc->log_level_offset_offset && level>=AV_LOG_FATAL)
135
level += *(int*)(((uint8_t*)avcl) + avc->log_level_offset_offset);
145
if (avc && avc->version >= (50 << 16 | 15 << 8 | 2) &&
146
avc->log_level_offset_offset && level >= AV_LOG_FATAL)
147
level += *(int *) (((uint8_t *) avcl) + avc->log_level_offset_offset);
136
148
av_vlog(avcl, level, fmt, vl);