HEVC帧内预测关于MPM的获取问题
再研究HEVC帧内预测时,中间有一个MPM算法,要得到左边和上边的预测模式,而在获取上边CU的地址时,获取的函数为pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx, true, true ),为什么后面两个参数设置为TURE。在具体跟到函数代码时,贴下来:
TComDataCU* TComDataCU::getPUAbove( UInt& uiAPartUnitIdx,
UInt uiCurrPartUnitIdx,
Bool bEnforceSliceRestriction,
Bool planarAtLCUBoundary ,
Bool bEnforceTileRestriction )
#endif
{
UInt uiAbsPartIdx = g_auiZscanToRaster[uiCurrPartUnitIdx];
UInt uiAbsZorderCUIdx = g_auiZscanToRaster[m_uiAbsIdxInLCU];
UInt uiNumPartInCUWidth = m_pcPic->getNumPartInWidth();
if ( !RasterAddress::isZeroRow( uiAbsPartIdx, uiNumPartInCUWidth ) )
{
uiAPartUnitIdx = g_auiRasterToZscan[ uiAbsPartIdx - uiNumPartInCUWidth ];
if ( RasterAddress::isEqualRow( uiAbsPartIdx, uiAbsZorderCUIdx, uiNumPartInCUWidth ) )
{
return m_pcPic->getCU( getAddr() );
}
else
{
uiAPartUnitIdx -= m_uiAbsIdxInLCU;
return this;
}
}
if(planarAtLCUBoundary)
{
return NULL;
}
uiAPartUnitIdx = g_auiRasterToZscan[ uiAbsPartIdx + m_pcPic->getNumPartInCU() - uiNumPartInCUWidth ];
if ( (bEnforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || m_pcCUAbove->getSCUAddr()+uiAPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)))
||
(bEnforceTileRestriction &&(m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))))
)
{
return NULL;
}
return m_pcCUAbove;
}
函数具体怎么求出来上边CU地址的,求大神指点。