HM學習(2):TAppEncoder編碼入口:encmain.cpp

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;
}
發佈了41 篇原創文章 · 獲贊 24 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章