学了一段时间的hevc,理论基本了解了,开始读代码,看看能不能搞出点什么吧。新人入手,力求多做注释,难免出错,欢迎评论。
选择的版本是HM16.5,首先进入到TAppEncoder工程,找到encmain.cpp文件。看里边的main函数就可以了。
#include <time.h>
#include <iostream>
#include "TAppEncTop.h"
#include "TAppCommon/program_options_lite.h"
//! \ingroup TAppEncoder
//! \{
#include "../Lib/TLibCommon/Debug.h"
// ====================================================================================================================
// Main function
// ====================================================================================================================
int main(int argc, char* argv[])
/*两个参数是给读入命令行参数的 argc表示参数个数,包括执行文件名 argv存放参数,包括执行文件名*/
{
TAppEncTop cTAppEncTop;//顶层编码类
// print information屏幕打印的信息:软件版本等
fprintf( stdout, "\n" );
fprintf( stdout, "HM software: Encoder Version [%s] (including RExt)", NV_VERSION );
fprintf( stdout, NVM_ONOS );
fprintf( stdout, NVM_COMPILEDBY );
fprintf( stdout, NVM_BITS );
fprintf( stdout, "\n\n" );
// create application encoder class创建编码类,定义为空函数
cTAppEncTop.create();
// parse configuration异常处理 try catch语句
try
{
if(!cTAppEncTop.parseCfg( argc, argv ))
{
cTAppEncTop.destroy();
#if ENVIRONMENT_VARIABLE_DEBUG_AND_TEST
EnvVar::printEnvVar();
#endif
return 1;
}
}
catch (df::program_options_lite::ParseFailure &e)
{
std::cerr << "Error parsing option \""<< e.arg <<"\" with argument \""<< e.val <<"\"." << std::endl;
return 1;
}
#if PRINT_MACRO_VALUES
printMacroSettings();
#endif
#if ENVIRONMENT_VARIABLE_DEBUG_AND_TEST
EnvVar::printEnvVarInUse();
#endif
// starting time开始时间
Double dResult;//定义双精度变量dResult
clock_t lBefore = clock();
// call encoding function使用编码函数
cTAppEncTop.encode();
// ending time结束时间
dResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC;//dResult就是开始时间除以结束时间再除以(一秒钟会有多少个时钟计时单元)
printf("\n Total Time: %12.3f sec.\n", dResult);
// destroy application encoder class释放编码类
cTAppEncTop.destroy();
getchar();
return 0;
}
//! \}