fillMvpCand是AMVP技术构建候选列表的实现。AMVP利用空域和时域上mv的相关性,为当前PU建立了候选预测mv列表。编码器从中选出最优的预测mvp,并对mv进行差分编码;解码端通过建立相同的列表,仅需要MVD和mvp在候选列表中的序列号,即可计算出当前PU的mv。
mv候选列表的构建:
(1)空域列表的建立。
左侧A0->A1->scaled A0->scaled A1;
当A0和A1不可用时,上方B0->B1->B2->scaled B0->scaled B1->scaled B2
(2)时域列表的建立。
scaled H;若H位置不可用,则选取scaled C3
AMVP候选列表的构建流程:
Void TComDataCU::fillMvpCand ( const UInt partIdx, const UInt partAddr, const RefPicList eRefPicList, const Int refIdx, AMVPInfo* pInfo ) const
{
//AMVP候选列表的构建
pInfo->iN = 0;
if (refIdx < 0)
{
return;
}
//-- Get Spatial MV
UInt partIdxLT, partIdxRT, partIdxLB;
deriveLeftRightTopIdx( partIdx, partIdxLT, partIdxRT );//得到当前CU最左上边4*4小块的Z索引partIdxLT和最右上边4*4小块的Z索引partIdxRT
deriveLeftBottomIdx( partIdx, partIdxLB );//得到左下边