一、编码端主函数的调用关系
二、TAppEncoder中main()函数的代码详解
一、编码端主函数的调用关系:
该函数位于HM子项目 TAppEncoder
中的 Source Files
中,文件名称是 encmain.cpp
二、TAppEncoder中的mian()函数
下面是HM中该编码主函数的代码:
#include <time.h>
#include <iostream>
#include "TAppEncTop.h"
#include "TAppCommon/program_options_lite.h"
#include "../Lib/TLibCommon/Debug.h"
int main(int argc, char* argv[])
{
//HEVC编码器应用类,继承自TAPPEncCfg,实现了整个编码框架的入口、读取文件、初始化、编码、写数据以及结束处理等操作。其中父类TAPPEncCfg,是编码器的配置信息类,定义了一大堆的配置信息
TAppEncTop cTAppEncTop;
// 打印信息,标准输出HM的版本信息
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" );
// 创建一个编码器应用类,实际creat是一个空函数,不做任何的操作
cTAppEncTop.create();
// 解析cfg配置文件
try
{
//如果cfg文件正确,会调用xCheckParameter函数,在命令行窗口中输出解析提示,并条用XPreintParameter来回显参数
if(!cTAppEncTop.parseCfg( argc, argv ))
{
//如果cfg文件错误,调用destroy函数,实际也是一个空函数,不做任何的操作
cTAppEncTop.destroy();
#if ENVIRONMENT_VARIABLE_DEBUG_AND_TEST
EnvVar::printEnvVar();
#endif
return 1;
}
}
//异常处理,如果cfg文件错误是回显错误提示
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
//定义该变量,用于记录编码所花费的时间
Double dResult;
//开始计时
clock_t lBefore = clock();
//唤起编码功能,执行了实际的编码工作
cTAppEncTop.encode();
//结束时间,并计算出整个编码过程花费了多长的时间
dResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC;
printf("\n Total Time: %12.3f sec.\n", dResult);
//销毁编码器应用类
cTAppEncTop.destroy();
return 0;
}
注意:其中调用了一个重要的函数TAppEncTop.encode();
函数,该函数是编码器的最上层的入口
更多关于视频编码的知识和资源,更精致的文章排版,欢迎关注博主微信公众号,一起交流、学习、进步!!!