FFmpeg打印日志函数分析

2021年11月23日 阅读数:1
这篇文章主要向大家介绍FFmpeg打印日志函数分析,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

FFmpeg的打印日志实如今FFmpeg-n4.2.1/libavutil/log.c中。函数

1、设置log等级

一、设置日志级别

日志默认级别是AV_LOG_INFO字体

static int av_log_level = AV_LOG_INFO;

使用av_log_set_level将日志级别设置为调试级别(AV_LOG_DEBUG)调试

av_log_set_level(AV_LOG_DEBUG);

源码:日志

void av_log_set_level(int level){
    
    av_log_level = level;
}
二、日志级别列表
#define AV_LOG_QUIET    -8	 保持沉默,不输出
#define AV_LOG_PANIC     0	 确实出了问题,即将崩溃。
#define AV_LOG_FATAL     8	 有些地方出了问题,而且不可能修复
#define AV_LOG_ERROR    16	 有些地方出了问题,不能毫无损失地恢复。
#define AV_LOG_WARNING  24	 有些东西看起来不太对,有可能出问题
#define AV_LOG_INFO     32	 标准信息。
#define AV_LOG_VERBOSE  40	 详细的信息。
#define AV_LOG_DEBUG    48	 调试信息,只对libav*开发者有用的东西。
#define AV_LOG_TRACE    56	 很是冗长的调试信息,对libav*开发很是有用。

2、打印函数分析

例以下面的打印信息:code

[mpegts @ 0x7f92cc002f00] Format mpegts probed with size=2048 and score=50

这个信息由下面的函数打印:orm

av_log(logctx, AV_LOG_DEBUG, "Format %s probed with size=%d and score=%d\n", (*fmt)->name, probe_size, score);

av_log 调用 av_vlog:开发

void av_log(void* avcl, int level, const char *fmt, ...){
    
    va_list vl;
    va_start(vl, fmt);
    av_vlog(avcl, level, fmt, vl);
    va_end(vl);
}

av_vlog则调用默认注册的回调函数av_log_default_callback字符串

void av_vlog(void* avcl, int level, const char *fmt, va_list vl){
    
    void (*log_callback)(void*, int, const char*, va_list) = av_log_callback;
    if (log_callback)
        log_callback(avcl, level, fmt, vl);
}

static void (*av_log_callback)(void*, int, const char*, va_list) 
	= av_log_default_callback;

av_log_default_callback函数伪代码回调函数

void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl){
    
	if (level > av_log_level) return; "控制打印级别"
	format_line(...); "格式化输出"
	colored_fputs(...);"设置终端字体颜色:\033[字背景颜色;字体颜色m字符串\033[0m"
}