libvmaf/src/log.c (38 lines of code) (raw):
/**
*
* Copyright 2016-2020 Netflix, Inc.
*
* Licensed under the BSD+Patent License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSDplusPatent
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include "libvmaf/libvmaf.h"
#include <stdarg.h>
#include <unistd.h>
static enum VmafLogLevel vmaf_log_level = VMAF_LOG_LEVEL_INFO;
static int istty = 0;
void vmaf_set_log_level(enum VmafLogLevel level)
{
level = level < VMAF_LOG_LEVEL_NONE ? VMAF_LOG_LEVEL_NONE : level;
level = level > VMAF_LOG_LEVEL_DEBUG ? VMAF_LOG_LEVEL_DEBUG : level;
vmaf_log_level = level;
istty = isatty(fileno(stderr));
}
static const char *level_str[] = {
[VMAF_LOG_LEVEL_ERROR] = "ERROR",
[VMAF_LOG_LEVEL_WARNING] = "WARNING",
[VMAF_LOG_LEVEL_INFO] = "INFO",
[VMAF_LOG_LEVEL_DEBUG] = "DEBUG",
};
static const char *level_str_color[] = {
[VMAF_LOG_LEVEL_ERROR] = "\x1B[31m",
[VMAF_LOG_LEVEL_WARNING] = "\x1B[33m",
[VMAF_LOG_LEVEL_INFO] = "\x1B[32m",
[VMAF_LOG_LEVEL_DEBUG] = "\x1B[34m",
};
void vmaf_log(enum VmafLogLevel level, const char *fmt, ...)
{
if (level <= VMAF_LOG_LEVEL_NONE) return;
if (level > vmaf_log_level) return;
va_list(args);
fprintf(stderr, "%slibvmaf%s %s%s%s ",
istty ? "\x1B[35m" : "",
istty ? "\x1B[0m" : "",
istty ? level_str_color[level] : "",
level_str[level],
istty ? "\x1B[0m" : "");
va_start(args, fmt);
vfprintf(stderr, fmt, args);
}