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[] )
{
m_modeCtrl->initCTUEncoding( *cs.slice );
// init the partitioning manager
Partitioner *partitioner = PartitionerFactory::get( *cs.slice );
partitioner->initCtu( area, CH_L, *cs.slice ); //初始化partitioner,用于之后的递归划分
// init current context pointer
m_CurrCtx = m_CtxBuffer.data();
//tempCS和bestCS作为乒乓buffer,递归中,tempCS存储test模式的数据,bestCS存储当前最优数据
CodingStructure *tempCS = m_pTempCS[gp_sizeIdxInfo->idxFrom( area.lumaSize().width )][gp_sizeIdxInfo->idxFrom( area.lumaSize().height )];
CodingStructure *bestCS = m_pBestCS[gp_sizeIdxInfo