代码版本:VTHECDec
代码函数:motionCompensation
时间:2015/3/9
作者: LB
帧间MV预测的函数调用流程图如下图:
由上图可以看出,函数motionCompensation()分别调用流程图后续的函数,完成帧间MV预测运动补偿过程。整个过程主要有三部分,下面分开说明。
第一:函数getpuNum()
作用:根据Cu到Pu的划分方式,计算Pu的个数。返回当前Cu包含的Pu的个数。
帧间预测的Cu到Pu共有八种划分方式,后四种是不规则划分。较短的那一条边长度占原边长度的 1/4。如:2NxnU UP的那一个Pu的Width = 2N * 1/4 = 1/2*N。
划分结束之后,接着是对当前Cu的每个Pu进行运动补偿,即根据MV计算参考像素值。
第二:函数get_puPartIndexAndSize()
作用: 返回当前Pu的宽高,以及Pu在当前Cu中的相对位置(最小TU为单位计算)。
Pu在Cu中的相对位置,可以参照第一页中的Cu,Pu,TU关系图
以这八种划分方式的第二个PU的相对位置为例,假设当前CU有N个最小TU,则:
1、0 ; 2、1/2*N ; 3、1/4*N ; 4、1/4*N ;
5、1/8*N ; 6、5/8*N ; 7、1/16*N ; 8、5/16*N;
第三:函数pred_interBi()
作用:运用插值算法计算并得到参考像素值
这一部分根据编码端传过来的MV,以及参考像素帧,采用亚像素精度插值方法得到当前PU的像素预测值。
具体原因是,在实际场景中,由于物体的运动距离不一定是像素的整数倍,因此在帧间预测时,当前像素值的最优预测值不一定在参考帧的