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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HEVC学习与研究1HM-16.7编码器的基本结构相关的知识,希望对你有一定的参考价值。

    编码器在整个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学习与研究1HM-16.7编码器的基本结构的主要内容,如果未能解决你的问题,请参考以下文章

TIP 2018论文概述:基于深度学习的HEVC复杂度优化

Codecs系列HEVC标准:大尺寸四叉树分割技术

Codecs系列HEVC标准:大尺寸四叉树分割技术

HEVC代码学习1:TAppEncoder的main函数

音视频数据处理(二)-H265/HEVC视频码流分析

HEVC视频编码技术