HEVC 中主要LCU分析函数xCompressCU说明

2014-11-24 09:02:54 · 作者: · 浏览: 0

所有LCU都是通过调用xCompressCU来实现其CU/PU划分. 然后通过其结果再调用 TEncCu::xencodeCU 函数来实现对所有CUs进行压缩编码.

xCompressCU大体可分为一下三块.
[cpp] view plaincopyprint
Void TEncCu::xCompressCU()

{

//第一块 for (Int iQP=iMinQP; iQP<=iMaxQP; iQP++)

// do inter modes, SKIP and 2Nx2N

if( rpcBestCU->getSlice()->getSliceType() != I_SLICE )

{

xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N );

xCheckRDCostMerge2Nx2N( rpcBestCU, rpcTempCU, &earlyDetectionSkipMode );

}

//第二块 for (Int iQP=iMinQP; iQP<=iMaxQP; iQP++)

// do inter modes, NxN, 2NxN, and Nx2N

if( rpcBestCU->getSlice()->getSliceType() != I_SLICE )

{

xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN );

xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N );

xCheckRDCostInter ( rpcBestCU, rpcTempCU, SIZE_2NxN );

}

//! Try AMP (SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N, SIZE_nRx2N)

// do normal intra modes // speedup for inter frames

{

xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_2Nx2N );

xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_NxN );

}

// test PCM

xCheckIntraPCM (rpcBestCU, rpcTempCU);

第三块//for (Int iQP=iMinQP; iQP<=iMaxQP; iQP++)

// further split

for ( UInt uiPartUnitIdx = 0; uiPartUnitIdx < 4; uiPartUnitIdx++ )

{

if ( rpcBestCU->isIntra(0) )

xCompressCU( pcSubBestPartCU, pcSubTempPartCU, uhNextDepth, SIZE_NONE );

else

xCompressCU( pcSubBestPartCU, pcSubTempPartCU, uhNextDepth, rpcBestCU->getPartitionSize(0) );

}

//check是否使用split

xCheckBestMode( rpcBestCU, rpcTempCU, uiDepth);

}
前2块实现对本层LCU的模式选择RDcost计算, 最后一块实现下层分割的计算,最后通过xCheckBestMode来比较是否选用分割!