刚开始看H265代码,做一些笔记。
TAppEncoder
程序初始化部分
TAppEncTop cTAppEncTop;
// print information
fprintf( stdout, "\n" );
fprintf( stdout, "HM software: Encoder Version [%s]", NV_VERSION );
fprintf( stdout, NVM_ONOS );
fprintf( stdout, NVM_COMPILEDBY );
fprintf( stdout, NVM_BITS );
fprintf( stdout, "\n" );
// create application encoder class
cTAppEncTop.create();
// parse configuration
try
{
if(!cTAppEncTop.parseCfg( argc, argv ))
{
cTAppEncTop.destroy();
return 1;
}
}
catch (po::ParseFailure& e)
{
cerr << "Error parsing option \""<< e.arg <<"\" with argument \""<< e.val <<"\"." << endl;
return 1;
}
其中,create函数是空的,argc和argv是配置的参数,这里我设置的是官方给的cfg文件,encoder_intra_main.cfg和BasketballDrill.cfg文件。
parseCfg函数应该就是读取cfg文件,设置一些参数。
接下来进入parceCfg函数内部,里面略显复杂。
po::Options opts;
opts.addOptions()
("help", do_help, false, "this help text")
("c", po::parseConfigFile, "configuration file name")
addOptions()后面又跟了一个括号,仔细看了一下program_options_lite.h里面的实现,OptionSpecific类重载了括号运算符,所以addOptions后面括号里的是参数,相当于赋值了,都插入到opts包含的若干列表和映射中。