天天看点

【HEVC学习与研究】37、HM编码器的基本结构2:帧内编码部分的代码骨架

主要包括:

入口点函数main()【创建cTAppEncTop类,解析输入的配置函数,设定时间相关的参数】

cTAppEncTop.encode()【对编码器所使用的几个对象进行初始化,分配YUV数据缓存,循环读取YUV文件】

m_cTEncTop.encode(...)【调用m_cGOPEncoder.compressGOP()实现对一个GOP的实际编码】

m_cGOPEncoder.compressGOP()【调用initGOP设置GOP的参数;调用m_pcSliceEncoder->initEncSlice(),利用SPS和PPS中的信息创建编码的slice对象;调用m_pcSliceEncoder->compressSlice

( pcPic )对一个slice进行编码。】

m_pcSliceEncoder->compressSlice ( pcPic )【设置编码slice的参数,对slice的每一个cu进行处理】

TEncCu::compressCU()【编码一个CU】

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

TEncCu::compressCU()函数的实现如下:

该函数的核心方法为xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 )。该函数实现了编码一个CU的多种功能,首先判断尝试进行帧间预测,然后尝试进行帧内预测,另外还包括了PCM模式的编码以及一个CU的进一步划分等。这里主要关心的是intra模式,实现的代码为:

该函数调用的xCheckRDCostIntra实现了帧内预测的具体过程:

继续阅读