JM8.6中的MV计算及上层块预测方法

JM8.6中的运动估计

BlockMotionSearch函数对不同帧间模式block type (1-16x16 ... 7-4x4)进行运动搜索.

从该函数中,我们可以发现,有一个局部变量,通过下面的语句将img->pred_mvpred_mv联系了起来,

这样其实通过调用函数SetMotionVectorPredictor来计算运动矢量的预测值(MVpred), 代码中向SetMotionVectorPredictor函数传递了pred_mv这个整型指针(指向img->pred_mv具体要保存的地方), 这样在函数SetMotionVectorPredictor中求出运动矢量的预测值,其实就存在了img->pred_mv中了.

具体在函数SetMotionVectorPredictor中预测MV的求解如下:

对水平和垂直两个方向进行循环

具体的计算如下

根据不同的mvPredType计算得出相应的pred_vec, 然后存在pmv[hv]中.

 

 

 

2011年4月21日11:01:18

JM8.6中对上层块模式预测的实现

下面的几个变量是定义的保存上层块预测的结果

上面这个三个数组应该都是和快速搜索有关的.

具体的pred_MV_uplayer是在函数BlockMotionSearch,如代码:

但是看代码可以发现上层块预测只在FMEable的情况下才使用的.在函数BlockMotionSearch中有对各个搜索函数的调用.

由于pred_MV_uplayer是一个全局变量, 所以在函数FastIntegerPelBlockMotionSearch中有使用pred_MV_uplayer,如下

对于模式1[16x16]是没有上层块预测的,所以只有在模式2-7的情况下可以使用的

在函数FastSubPelBlockMotionSearch中也有使用

总结上面的,我们可以发现,在进行求MVD的时候, 我们是使用利用中值预测求出来的MV的预测值, 没有使用上层块预测的结果,而上层块预测的结果是只在运动搜索中使用的.

 

posted @ 2012-07-27 17:02  Mr.Rico  阅读(969)  评论(0编辑  收藏  举报