接下来看看 parse_loglevel(argc, argv, options)这个函数,从函数名字来看就是解析“loglevel”,看看注释是怎么样的
/**
* Find the '-loglevel' option in the command line args and apply it.
*/
翻译过来就是发现 “-loglevel”参数在命令中,并且执行运用它。
这个函数在cmdutils.c也就是在公共命令集,不再任何包中,这个也就为了特定的运用环境而编写的。这样理解:cmdutils.c不是ffmpeg的API一部分,而是属于具体的项目。
看看函数的源码部分:
void parse_loglevel(int argc, char **argv, const OptionDef *options)
{
int idx = locate_option(argc, argv, options, "loglevel");(1) //定位 输入的命令参数项中有没有 “loglevel”
if (!idx) //如果没有则看看有没有“v”
idx = locate_option(argc, argv, options, "v");
if (idx && argv[idx + 1])
opt_loglevel("loglevel", argv[idx + 1]);(2)
}
看看 locate_option函数,注释是这样的:Return index of option opt in argv or 0 if not found.
现在又有一个数据结构需要去探讨:OptionDef这个数据结构,其定义在cmdutils.h中,也就是说该数据结构为本项目而写,不是ffmpeg的数据结构
typedef struct OptionDef {
constchar*name; // option的名字
intflags; //option的标志
#defineHAS_ARG 0x0001 //命令含有参数选项的标致
#defineOPT_BOOL 0x0002 布尔型数据标志
#defineOPT_EXPERT 0x0004