本文考察实现去方块滤波的核心函数xDeblockCU:
Void TComLoopFilter::xDeblockCU( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int Edge )
{
if(pcCU->getPic()==0||pcCU->getPartitionSize(uiAbsZorderIdx)==SIZE_NONE)
{
return;
}
TComPic* pcPic = pcCU->getPic();
UInt uiCurNumParts = pcPic->getNumPartInCU() >> (uiDepth<<1); //!< 当前CU中的4x4 partition 数目
UInt uiQNumParts = uiCurNumParts>>2; //!< 将当前CU再次划分成4个CU后每个CU中的4x4 partition 数目
if( pcCU->getDepth(uiAbsZorderIdx) > uiDepth ) //!< 当前CU还没达到经RDO确定下来的最佳划分的深度
{
for ( UInt uiPartIdx = 0; uiPartIdx < 4; uiPartIdx++, uiAbsZorderIdx+=uiQNumParts ) //!< 对每个子CU进行遍历
{
UInt uiLPelX = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsZorderIdx] ];
UInt uiTPelY = pcCU->getCUPelY() + g_aui