HM版本:16.18
从本文开始,我们将从编码端层层剖析HM的代码。我们首先从编码端入手,在TAppEncoder
中我们可以看到有一个encmain.cpp
文件,这个文件即是编码的主函数。
在encmain.cpp
中主要做了以下几件事:
其中TAppEncTop
继承自TAppEncCfg
,在父类TAppEncCfg
中,定义了大量成员变量来保存参数,子类TAppEncTop
中除了父类的成员外,还包括编码所需要的各种成员变量和成员方法。
实际上在代码中给出的英文注释已经非常详细了,这里就不再机械的翻译一遍了,后面遇到代码中未进行注释的地方将会使用中文进行注释。最后是encmain.cpp
的代码:
#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[])
{
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
// for (int i = 0; i < 9; i++) {
//std:cout << *argv++ << endl;
// }
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;
clock_t lBefore = clock();
// call encoding function
cTAppEncTop.encode();
// ending time
dResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC;
printf("\n Total Time: %12.3f sec.\n", dResult);
// destroy application encoder class
cTAppEncTop.destroy();
system("PAUSE");
return 0;
}