DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

FFmpeg的打印日志实现在FFmpeg-n4.2.1/libavutil/log.c中。

一、设置log等级

1、设置日志级别

日志默认级别是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;
}
2、日志级别列表
#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*开发非常有用。

二、打印函数分析

例如下面的打印信息:

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

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

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"
}
posted on   DoubleLi  阅读(491)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-11-18 linux添加service服务,设置自启
2020-11-18 [Linux]服务管理:service、systemctl、chkconfig
2020-11-18 详解Linux 服务管理两种方式service和systemctl
2020-11-18 linux 将自己的服务添加到系统service服务
2017-11-18 UCRT: VC 2015 Universal CRT, by Microsoft
2017-11-18 vs2015部署---下一代VC运行时库系统:the Universal CRT
2017-11-18 VS2015开发的C++应用如何不依赖Visual C++ 2015 redistributable?
点击右上角即可分享
微信分享提示