ffmpeg-日志输出av_log()

本文深入分析了FFmpeg的日志输出系统,核心函数av_log()的功能、参数及其实现机制。av_log()用于统一日志输出,避免使用printf(),并支持多种日志级别。其内部使用va_list处理可变参数,通过av_vlog()传递日志信息。日志级别包括AV_LOG_PANIC到AV_LOG_DEBUG,可通过av_log_set_level()和av_log_get_level()设置和获取当前级别。

本文分析一下FFmpeg的日志(Log)输出系统的源代码。日志输出部分的核心函数只有一个:av_log()
函数调用结构图
FFmpeg日志输出系统的函数调用结构图。
在这里插入图片描述
av_log()
av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使用av_log()。
av_log()的头文件:libavutil\log.h

void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);  

这个函数的声明有两个地方比较特殊:
(1)函数最后一个参数是“…”。
在C语言中,在函数参数数量不确定的情况下使用“…”来代表参数。printf()的原型定义如下:

int printf (const char*, ...);

(2)声明后面有一个av_printf_format(3, 4)。网上资料说它的作用是按照printf()的格式检查av_log()的格式。
av_log()每个字段的含义如下:
avcl:指定一个包含AVClass的结构体。
level:log的级别
fmt:和printf()一样。
由此可见,av_log()和printf()的不同主要在于前面多了两个参数。其中第一个参数指定该log所属的结构体,例如AVFormatContext、AVCodecContext等等。第二个参数指定log的级别,源代码中定义了如下几个级别。

#define AV_LOG_QUIET    -8  
#define 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值