码迷,mamicode.com
首页 > 其他好文 > 详细

【HEVC学习与研究】1、HM-16.7编码器的基本结构

时间:2016-02-14 11:41:16      阅读:772      评论:0      收藏:0      [点我收藏+]

标签:

    编码器在整个HM解决方案中的工程名为TAppEncoder,入口点函数位于encmain.cpp文件中:

技术分享
 1 int main(int argc, char* argv[])
 2 {
 3   TAppEncTop  cTAppEncTop;
 4 
 5   // print information
 6   fprintf( stdout, "\n" );
 7   fprintf( stdout, "HM software: Encoder Version [%s] (including RExt)", NV_VERSION );
 8   fprintf( stdout, NVM_ONOS );
 9   fprintf( stdout, NVM_COMPILEDBY );
10   fprintf( stdout, NVM_BITS );
11   fprintf( stdout, "\n\n" );
12 
13   // create application encoder class
14   cTAppEncTop.create();
15 
16   // parse configuration
17   try
18   {
19     if(!cTAppEncTop.parseCfg( argc, argv ))
20     {
21       cTAppEncTop.destroy();
22 #if ENVIRONMENT_VARIABLE_DEBUG_AND_TEST
23       EnvVar::printEnvVar();
24 #endif
25       return 1;
26     }
27   }
28   catch (df::program_options_lite::ParseFailure &e)
29   {
30     std::cerr << "Error parsing option \""<< e.arg <<"\" with argument \""<< e.val <<"\"." << std::endl;
31     return 1;
32   }
33 
34 #if PRINT_MACRO_VALUES
35   printMacroSettings();
36 #endif
37 
38 #if ENVIRONMENT_VARIABLE_DEBUG_AND_TEST
39   EnvVar::printEnvVarInUse();
40 #endif
41 
42   // starting time
43   Double dResult;
44   clock_t lBefore = clock();
45 
46   // call encoding function
47   cTAppEncTop.encode();
48 
49   // ending time
50   dResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC;
51   printf("\n Total Time: %12.3f sec.\n", dResult);
52 
53   // destroy application encoder class
54   cTAppEncTop.destroy();
55 
56   return 0;
57 }
main

 

主要包括:

  1. 入口点函数main()【创建cTAppEncTop类,解析输入的配置函数,设定时间相关的参数】
  2. cTAppEncTop.encode()【对编码器所使用的几个对象进行初始化,分配YUV数据缓存,循环读取YUV文件】
  3. m_cTEncTop.encode(...)【调用m_cGOPEncoder.compressGOP()实现对一个GOP的实际编码】
  4. m_cGOPEncoder.compressGOP()【调用initGOP设置GOP的参数;调用m_pcSliceEncoder->initEncSlice(),利用SPS和PPS中的信息创建编码的slice对象;调用m_pcSliceEncoder->compressSlice ( pcPic )对一个slice进行编码。】
  5. m_pcSliceEncoder->compressSlice ( pcPic )【设置编码slice的参数,对slice的每一个cu进行处理】
  6. TEncCu::compressCU()【编码一个CU】

以上各个函数分别在前一个函数中调用,形成类似一个反向的call stack的结构。

【HEVC学习与研究】1、HM-16.7编码器的基本结构

标签:

原文地址:http://www.cnblogs.com/545235abc/p/5188754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!