B帧的直接模式

来源:互联网 发布:跨表空间导入数据 编辑:程序博客网 时间:2024/05/01 09:25
直接模式编码的B片的宏块或宏块分割不传送MV。相反,解码器计算基于已编码MV的list0和listMV并计算出解码残差像素的双向预测运动补偿。B片中的skipped宏块便由解码器用直接模式重建而得。

        片头会指明将用时间还是空间方式计算直接模式或其分割的矢量。

在空间模式中,list0和list1预测矢量计算如下:
    如果第一副list1参考图像的co-located MB 或分割有一个MV幅度上小于+,-1/2亮度像素,其一个或两个预测矢量置为0;否则预测list0和list1矢量用以计算双向运动补偿。

在时间模式中,计算步骤如下:
        1. 找出list1图像co-located MB 或分割相应的list0参考图像。该list0参考作为当前MB或分割的list0参考;
        2. 找出list1图像co-located MB 或分割相应的list0MV;
        3. 计算当前图像的list1图像的POC的MV,作为新的list1 MV1;
        4.  计算当前图像和list0图像的POC的MV,作为新的list0 MV0;
        这些模式在预测参考宏块或分割不提供或帧内编码等情况下需做出调整。

        注:毕厚杰116页

h264cn.pdf  第155页,B帧的解码

B_Skip类型宏块(200503版标准,表7-14最后一行):          无像素残差,无运动矢量残差(MVD)。解码时,通过Direct预测模式(时间或空间)计算出前、后向MV后,直接利用前、后向MV得到像素预测值。像素重构值=像素预测值        

B_Direct_16*16类型宏块(200503版标准,表7-14第一行):有像素残差,无运动矢量残差(MVD)。解码时,通过Direct预测模式(时间或空间)计算出前、后向MV后,利用前、后向MV得到像素预测值。然后,像素重构值=像素预测值+像素残差解码值       

P_Skip类型宏块(200503版标准,表7-13最后一行):          也就是COPY宏块。无像素残差,无运动矢量残差(MVD)。直接利用预测MV得到像素预测值。像素重构值=像素预测值 

【特别说明】:
1、有残差就有CBP(表示残差编码状态,详见BBS帖子“CBP详解”),反过来没有残差当然就没有CBP;       
2、请一定不要把 Direct 类型宏块、Skip 类型宏块、Direct 预测模式这三个混淆了。B_Skip 类型宏块(大小为 16*16)、B_Direct_8*8 类型块(大小为 8*8)和B_Direct 类型宏块(大小为 16*16)都采用的是 Direct 预测模式;
3、关于时间和空间的Direct 预测模式,请大家参考标准文档的8.4.1.2小节;
4、与另一篇帖子“请问Skipped Macroblock是什么意思? ”参照学习;
5、我是跟踪JM86解码过程得出以上结论的。如果某些部分有点错误,请大家指正。

如果满足以下三个条件则将宏块按 Skip 类型进行编码:
(1)最佳模式选择为Inter16×16;
(2)MC得到的最终运动矢量等于预测运动矢量,即运动矢量的残差为0;
(3)变换系数均被量化为0。

skip类型块(或宏块)没有运动矢量差,但是有残差,只是在编码的时候扔掉了
对于残差的处理
在rdo和非rdo下的处理是不一样的
在非rdo下,需要对残差进行变化量化,若16x16为最终模式且cbp为0(或者有少量的4x4block为非零),那么该宏块就是skip模式,简单的说,在非rdo情况下,skip模式是16x16模式的一个特殊情况
在rdo情况下,不需要对残差进行变化量化,直接对skip模式计算rdcost(skip的码率即编码所占的比特数,虽然不对残差和矢量差进行编码,但是编码比特数也是不为零的,比如模式所占的比特数、是宏块内第几个skip块等语法元素信息),通过判断rdcost是否最小,来判定宏块是否为skip模式,就是说,在rdo情况下,skip是独立的一种模式

http://bbs.chinavideo.org/viewthread.php?tid=994&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D16

RDO模式和非RDO模式的区别
非RDO下,模式选择的依据是运动估计得到的代价,cost=SAD(当前块-预测块)+cost(MV)
RDO , 模式选择的依据宏块在每种模式下的率失真代价值rdcost,rdcost=distortion+lambda*rate , 其中失真度distortion=SSD(当前块-重建块)
0 0