HEVC帧间预测之三――TEncCu::xCheckRDCostMerge2Nx2N函数分析(二)

2014-11-24 07:27:14 · 作者: · 浏览: 4
/!< CBF为0,说明变换系数全为0
{
mergeCandBuffer[uiMergeCand] = 1;
}
}

rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth );

Int orgQP = rpcTempCU->getQP( 0 );
xCheckDQP( rpcTempCU );
xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); //!< 更新最佳模式
rpcTempCU->initEstData( uhDepth, orgQP ); //!< 重新初始化预测参数,为下一次预测做准备

if( m_pcEncCfg->getUseFastDecisionForMerge() && !bestIsSkip ) //!< m_useFastDecisionForMerge默认为true
{
bestIsSkip = rpcBestCU->getQtRootCbf(0) == 0;
}

}//!< if( !(bestIsSkip && uiNoResidual == 0) )

}//!< if(!(uiNoResidual==1 && mergeCandBuffer[uiMergeCand]==1))
}//!<
}//!< for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand )

if(uiNoResidual == 0 && m_pcEncCfg->getUseEarlySkipDetection()) //!< 第一次对merging candidates迭代后

{
if(rpcBestCU->getQtRootCbf( 0 ) == 0) //!< earlyDetectionSkip 算法
{
if( rpcBestCU->getMergeFlag( 0 ))
{
*earlyDetectionSkipMode = true;
}
else
{
Int absoulte_MV=0;
for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
{ www.2cto.com
if ( rpcBestCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
{
TComCUMvField* pcCUMvField = rpcBestCU->getCUMvField(RefPicList( uiRefListIdx ));
Int iHor = pcCUMvField->getMvd( 0 ).getAbsHor();
Int iVer = pcCUMvField->getMvd( 0 ).getAbsVer();
absoulte_MV+=iHor+iVer;
}
}

if(absoulte_MV == 0)

{
*earlyDetectionSkipMode = true;
}
}//!< else
}//!< if(rpcBestCU->getQtRootCbf( 0 ) == 0)
}//!< if(uiNoResidual == 0 && m_pcEncCfg->getUseEarlySkipDetection())
}//!< for( UInt uiNoResidual = 0; uiNoResidual < iteration; ++uiNoResidual )
}