本文共 1830 字,大约阅读时间需要 6 分钟。
libx264中输出日志的API函数x264_log()
/**************************************************************************** * x264_log: ****************************************************************************///日志输出函数void x264_log( x264_t *h, int i_level, const char *psz_fmt, ... ){ if( !h || i_level <= h->param.i_log_level ) { va_list arg; va_start( arg, psz_fmt ); if( !h ) x264_log_default( NULL, i_level, psz_fmt, arg );//默认日志输出函数 else h->param.pf_log( h->param.p_log_private, i_level, psz_fmt, arg ); va_end( arg ); }}
可以看出x264_log()再开始的时候做了一个判断:只有该条日志级别i_level小于当前系统的日志级别param.i_log_level的时候,才会输出日志。libx264中定义了下面几种日志级别,数值越小,代表日志越紧急。
/* Log level */#define X264_LOG_NONE (-1)#define X264_LOG_ERROR 0#define X264_LOG_WARNING 1#define X264_LOG_INFO 2#define X264_LOG_DEBUG 3
接下来x264_log()会根据输入的结构体x264_t是否为空来决定是调用x264_log_default()或者是x264_t中的param.pf_log()函数。假如都使用默认配置的话,param.pf_log()在x264_param_default()函数中也会被设置为指向x264_log_default()。因此可以继续看一下x264_log_default()函数。
x264_log_default()是libx264默认的日志输出函数。该函数的定义如下所示。
//默认日志输出函数static void x264_log_default( void *p_unused, int i_level, const char *psz_fmt, va_list arg ){ char *psz_prefix; //日志级别 switch( i_level ) { case X264_LOG_ERROR: psz_prefix = "error"; break; case X264_LOG_WARNING: psz_prefix = "warning"; break; case X264_LOG_INFO: psz_prefix = "info"; break; case X264_LOG_DEBUG: psz_prefix = "debug"; break; default: psz_prefix = "unknown"; break; } //日志级别两边加上“[]” //输出到stderr fprintf( stderr, "x264 [%s]: ", psz_prefix ); x264_vfprintf( stderr, psz_fmt, arg );}
转载地址:http://gfhrn.baihongyu.com/