zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

HEVC Study One(基于HM14.0平台)

平台 基于 One study HEVC
2023-09-14 08:57:59 时间
p span >HM14.0下载地址:http://download.csdn.net/detail/frd2009041510/7707363

一、程序从TAppEncoder中的encmain.cpp开始,在主程序中按顺序做了以下几件事情:

①、创建类cTAppEncTop,为TAppEncTop.cpp做准备,同时在TAppEncTop.cpp中初始化m_iFrameRcvd(number of received frames)、m_totalBytes和m_essentialBytes(其实,利用Step Into调试可以发现里面涉及众多的初始化工作,不详)。

②、打印相关信息,如软件版本等,见下图。


③、解析配置文件


④、调用编码函数cTAppEncTop.encode()(这里有个小插曲,即编码时间从此刻开始计时)。

TAppEncoder的encmain.cpp中剩余部分都无关紧要,也就是结束编码时间和破坏类等琐事。


二、接着程序进入TAppEncTop.cpp中的TAppEncTop::encode(),主要按顺序完成了以下几件事情:

①、利用fstream构造命名文件并指定模式(这里涉及一坨C文件,不详)。

②、图像YUV缓冲区类创建: 

TComPicYuv*       pcPicYuvOrg = new TComPicYuv;

TComPicYuv*       pcPicYuvRec = NULL;

具体细节在TComPicYuv.cpp和TComPicYuv.h中,very important.

③、初始化内部类和成员变量: 

xInitLibCfg();( initialize internal variables )

xCreateLib();( create files   encoder class )

xInitLib(m_isField);( initialize encoder class )

 

④、初始化编码循环变量iNumEncoded和bEos;

⑤、分配原始YUV缓冲区;

⑥、进入编码循环,利用bEos控制(最关键部分);

⑦、释放原始YUV缓冲区;

⑧、释放在编码类中使用的缓冲区;

⑨、释放缓冲区和类;

⑩、打印总结信息(Bitrate、PSNR、编码时间等)。


待续。。。。。。