zoukankan      html  css  js  c++  java
  • FFmpeg打印日志函数分析

    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"
    }
  • 相关阅读:
    kkfileview v2.0 发布,文件在线预览项目方案
    margin:0 auto 与 text-align:center 的区别
    div页面居中(上下左右)
    jquery 实现页面拖拽并保存到cookie
    移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)
    javascript 匿名函数的理解,js括号中括function 如(function(){})
    百度,淘宝,腾讯三大巨头HTML页面规范分解
    Javascript触屏手势库-JTouch(更新V1.1)
    移动设备、手机浏览器Javascript滑动事件代码
    jQuery 实现上下,左右滑动
  • 原文地址:https://www.cnblogs.com/lidabo/p/15573448.html
Copyright © 2011-2022 走看看