compressCtu函数是对一个ctu进行编码的函数,入口参数cs是pictrue的cs,这个cs里面存储当前帧的所有已编码过CTU的cu、pu、tu等信息。
area为当前要编码ctu的区域,ctuRsAddr为当前ctu的rs扫描地址。
其中调用xCompressCU函数,来进行具体的ctu递归编码任务。
void EncCu::compressCtu( CodingStructure& cs, const UnitArea& area, const unsigned ctuRsAddr, const int prevQP[], const int currQP[] )
{
#if JVET_L0293_CPR
if (m_pcEncCfg->getCPRHashSearch() && ctuRsAddr == 0 && cs.slice->getSPS()->getSpsNext().getCPRMode())
{
m_cprHashMap.rebuildPicHashMap(cs.picture->getOrigBuf());
}
#endif
m_modeCtrl->initCTUEncoding( *cs.slice );
// init the partitioning manager
Partitioner *partitioner = PartitionerFactory::get( *cs.slice );
partitioner->initCtu( area, CH_L, *cs.slice ); //初始化partitioner,用于之后的递归划分
#if JVET_L0293_CPR
if (m_pcEncCfg->getCPRMode()) //CPR模式
{
m_pcInterSearch->resetCtuRecord();
m_ctuCprSearchRangeX = m_pcEncCfg->getCPRLocalSearchRangeX();
m_ctuCprSearchRangeY = m_pcEncCfg->getCPRLocalSearchRangeY();
}
if (m_pcEncCfg->getCPRMode() && m_pcEncCfg->getCPRHashSearch() && (m_pcEncCfg->getCPRFastMethod() & CPR_FAST_METHOD_ADAPTIVE_SEARCHRANGE