HM intra部分
intra中几个函数:
estIntraPredQT主要做模式选择的工作,选出对于当前PU的最优模式,如DC,planar,角度方向。
estIntraPredChromaQT做了类似的工作,不过是针对于色度。
xRecurIntraCodingQT和xRecurIntraChromaCodingQT函数是依据给定的候选模式采用递归进行PU的分割,进而依据TU进行重建estIntraPredQT。
estIntraPredQT在这里面首先对N个候选模式进行粗粒度筛选:采用SATD+λ*ModeBits,从M个模式选出N个最可能的候选模式,在粗选时没有采用TU分割。所涉及的函数:
predIntraLumaAng: 根据mode算出当前PU的预测值
calcHAD: 计算SATD代价
xModeBitsIntra: 计算当前模式所耗费的比特数目
xUpdateCandList: 更新mode代价,保持前N个模式的代价最小
在选出N个模式后,这N个模式会进入xRecurIntraCodingQT函数从而进行TU的分割
xRecurIntraCodingQT
为了加速RQT过程,这个函数会被调用两次:
第一次的调用不进行PU分割为TU的过程, PU直接转换为TU,只为算出N个模式的RD代价,从而选出一个最优的,在这个最优的模式被选出后,会第二次调用这个函数,再对这个最优的模式进行PU的分割。这个过程所涉及的函数:
xIntraCodingLumaBlk: 进行对当前TU进行求残差,对残差变换,量化,反量化,反变换,重建当前TU等一系列编码工作,并求得失真
xGetIntraBitsQT: 求出当前模式的所有信息进行熵编码会产生的比特数
calcRdCos:根据xIntraCodingLumaBlk得到的失真和xGetIntraBitsQT产生的比特数目进行RD代价的计算,比较各模式的优劣
xSetIntraResultQT:保存最优模式的数据