AMVP运用于inter_ME模式的时候。
xEstimateMvPredAMVP进行AMVP,获得当前pu的相邻运动信息,构建AMVP列表,最终选择出最优的MVP。AMVP最终获得的MVP作为ME的起点。
xEstimateMvPredAMVP函数流程很简单:
fillMvpCand函数构建AMVP列表;
然后遍历列表中所有AMVP候选,通过xGetTemplateCost函数得到失真;
最终选择失真最小的AMVP候选,将其mvpIdx返回即可。
入口参数rcMvPred用来存储并返回AMVP最优的mvp,用于AMVP之后的ME。
void InterSearch::xEstimateMvPredAMVP( PredictionUnit& pu, PelUnitBuf& origBuf, RefPicList eRefPicList, int iRefIdx, Mv& rcMvPred, AMVPInfo& rAMVPInfo, bool bFilled, Distortion* puiDistBiP )
{
Mv cBestMv;
int iBestIdx =