您的位置:首页 > 其它

H.264中的P-Skip宏块和BSkip宏块简介

2015-03-22 21:46 267 查看
先说PSkip宏块,再说BSkip宏块.

P-Skip宏块是一种特殊的P宏块,在H.264中非常常见,那么P-Skip宏块特殊在什么地方呢?下面会慢慢道来.

对于一般的P宏块而言,像素残差和运动矢量残差都会写入码流,从编码端传到解码端,但是P-Skip宏块的特殊之处就在于,既不传送像素残差,也不传送运动矢量残差(在这种情况下,像素残差和运动矢量残差必定都为零,所以根本不需要传送).编码端除了传送一些标识该宏块是PSkip宏块的很少量的bit外,不在需要传送关于该宏块的其他信息,那么解码端如何恢复出像素呢?

我们知道,mvd = mv - mvp, 刚才说了,运动矢量残差mvd为零,而从解码端可以得到mvp, 所以,在解码端也就知道了mv. 在解码端有参考帧对应宏块的重建像素,根据这个重建像素和mv, 就可以恢复出本帧本宏块的像素值(如果mv是分数,则需要插值),这就是所谓的P-skip宏块原理,从字面理解就是跳过了这个宏块,相当于这个宏块没有编码,在解码端采取了近似替代的恢复办法.

为什么要引入P-skip宏块呢?如果本帧的一宏块和参考帧的一宏块像素(不要求两宏块在同一位置)几乎完全一致,很显然,当前帧的宏块压根就不用编码,在解码端,直接就可以用近似替代的办法恢复出本帧本宏块的像素值. 比如在第一帧中有个乒乓球,在第二帧中也有个乒乓球,那个第二帧中乒乓球这个宏块就很可能编成了PSkip宏块.

小结一下:用Elecard分析码流可以见,在H.264视频中, PSkip非常常见,一般而言,视频运动越小,QP越大,PSkip宏块出现的概率就会越高,对于PSkip宏块而言,像素残差和运动矢量残差必定为零(运动矢量不一定为零),下面给出用H.264visa分析的运动矢量不为零(运动矢量为(-1/2,
0))的一个PSkip宏块:

==== MB 17(6, 1) ====

Location : (96, 16),

Slice No. : 0

Slice Type : P Slice

MB Type : P_Skip

NumMbPart : 1

MbPartSize : (16, 16)

****** Inter Info ******

Pos(0, 0):

L0=MV(-2, 0),POC: 2,refIdx:0,DecNo:2

BSkip宏块的原理和PSkip宏块的原理一样,只不过是从前后两个方向进行罢了,所以对于BSkip宏块就不在赘述.(之前博文在剖析B宏块编码原理时就有一个地方选用了BSkip宏块简化分析)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: