您的位置:首页 > 其它

HEVC的帧间预测解码(1)

2016-04-21 16:03 375 查看

HEVC的帧间预测解码(1)

HEVC的帧间预测解码(2)

HEVC的帧间预测解码(3)

HEVC的帧间预测解码(4)





1.概述

HEVC的帧间预测过程的复杂程度实在是令人发指。

我从解码角度详细分析一下,由于细节非常多,难免有错误或者遗漏。

所以,请结合标准阅读本系列,否则很难理解

帧间预测(inter prediction)过程为解码提供帧间预测值(predSamples[x][y]),对应标准8.5.2中的内容。

简单说,帧间预测就是以预测块(PU,prediction unit)为单位,计算PU的运动向量(MV,motion vector),并根据MV从对应的参考帧中获得预测值的过程。

个人觉得此过程的焦点和难点就在于两点:1.参考队列缓存区(DPB)的维护 2.MV的计算。

其中第1点在文章HEVC的参考队列解码中已经详细介绍了。

本文着重介绍第2点,mv的计算。

2.PU相关

PU(prediction unit)预测单元,是进行帧间预测和运动补偿的基本单元。其划分的方法在文章HEVC标准中的图像分割(2)中已经介绍过了。如图,大的方框代表CTU,共有8中分块方式。



图1 PU的分块

PU(prediction unit)预测单元,是进行帧间预测和运动补偿的基本单元。每一个PU中包含的参数有:

merge_flag:1表示当前PU的mvp计算采用merge模式,0表示不采用merge模式,默认为0,当包含PU的CU为skip模式时,merge_flag为1。
merge_idx:给出在merge模式时,从merging mvp候选列表(merging candidate list,在本文中简称MCL)中选取mvp所使用的index。
inter_pred_idc:给出PU的参考方向。0表示PRED_L0, 前向预测;1表示PRED_l1, 后向预测;2表示PRED_BI,双向预测(除了4x8和8x4的PU,这一点在后面会解释)。
ref_idx_l0:指出当前PU在reflist0(参考队列0,详见HEVC的参考队列解码)中的参考帧。
ref_idx_l1:指出当前PU在reflist1(参考队列1,详见HEVC的参考队列解码)中的参考帧。
mvp_l0_flag:指出在非merge模式时,从mvp候选列表(motion vector predictor candidate list 0)中选取mvp所使用的index。
mvp_l1_flag:指出在非merge模式时,从mvp候选列表(motion vector predictor candidate list 1)中选取mvp所使用的index。

除了上述的参数,我们的已知条件还有:当前CTU的左上角坐标 ( xCb, yCb ),当前PU的左上角坐标( xPb, yPb ),CTU的尺寸nCbS,PU的尺寸(nPbW X
nPbH),PU的partIdx。
下面分成merge模式和非merge模式进行mv的计算。

3.Merge模式的mv计算

3.1 Merge模式整体流程

当PU的merge_flag等于1时,采用merge模式计算mv。
前置处理,当Log2ParMrgLevel >2 且nCbS == 8时有:

( xPb, yPb ) = ( xCb, yCb )
nPbW = nPbH= nCbS
partIdx = 0


就是说,PU所在的CTU尺寸为8x8且Log2ParMrgLevel >2时,PU的坐标和尺寸都用CU的代替。

参数Log2ParMrgLevel 位于pps中,含义就是merge模式中多大的尺寸的块内部的PU可以平行(parallel)做mv运算。

比如Log2ParMrgLevel = 6,那么64x64内PU的merge模式的mv可以同时计算。具体的为什么能平行做,我们将在后面解释。
Merge模式的mv计算用一句话概括就是:组成一个mv候选值的列表,然后根据merge_idx从列表里选择出mv。

其中列表中的每一项候选值都包含如下元素:

availableFlag,refIdxLX,predFlagLX,mvLX(其中X等于0,1,分别代表前后向)
比如时域候选值(俗称的collocated)就包含(availableFlagCol,refIdxLXCol,predFlagLXCol,mvLXCol)

Merge模式的具体流程如下:

M1.计算空域候选值(spatial merging candidates)

M2.将时域候选值(temporal merging candidates)的refIdx,即refIdxLXCol(X等于0,或者1)设为0.

M3.计算前向参考的时域候选值的其他元素。

M4.如果当前slice为B,再计算一次后向参考的时域候选值。

M5.组成MCL(merging
candidate list)

M6.将变量numCurrMergeCand和numOrigMergeCand设为MCL中候选值的个数。

M7.如果当前slice为B,计算组合双向预测参考值(combined
bi-predictive merging candidates)。

M8.计算零运动向量参考值(zero motion vector merging candidates)。

M9.用merge_idx从MCL中选出MCL[merge_idx]。mvLX,refIdxLX, predFlagLX等于参考值的对应元素。

M10.如果predFlagL0等于1,predFlagL1等于1,且PU的尺寸为4x8和8x4,则
refIdxL1 = −1,predFlagL1 = 0。什么意思呢?只有前向参考,后向参考被弃掉了。所以4x8和8x4的PU没有可能双向参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: