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、编码时间等)。
待续。。。。。。