HM16.9支持的预测类型有两大类:MODE_INTER和MODE_INTRA。
/// supported prediction type
enum PredMode
{
MODE_INTER = 0, ///< inter-prediction mode
MODE_INTRA = 1, ///< intra-prediction mode
NUMBER_OF_PREDICTION_MODES = 2,
};
merge属于MODE_INTER预测类型。
inter/merge模式,获取时域候选列表对应的函数是TComDataCU::xGetColMVP。
TMVP的原理是从collocated的PU获得MV,并根据距离远近做伸缩变换,具体做法如下(Recommendation 8.5.3.2.6 Derivation process for motion vector predictor candidates):
上面的公式看起来很复杂,其实就是MV乘了一个距离的比例。为了防止编解码端失配,运算过程中不能出现浮点数,所以运算过程中先将数值放大,计算完再右移,计算过程全程为整数。