H264解码器实现-帧间预测之MV预测

1.前言

本文章所说的MV预测是指计算当前块MV向量的预测值,该值与码流中传输的MV残差值相加即可得到实际的MV向量。请注意,在某些宏块类型的某种情况下是不需要进行MV预测的,他们的MV可以通过其他方法得出,本文只介绍MV预测过程。另外,本文所介绍的内容在H264标准文档中的8.4.1.3小节有详细介绍,这里做个讲解方便读者理解。

2.原理说明

当前预测块的MV向量预测值(MVP)由其三个相邻宏块的预测块经过一定的规则得到。相邻块分别为左、上、右上三个块,分别命名为A块、B块、C块,且三个块可能在同一个宏块内,也可能在不同宏块内,这三个块的识别是有一套规则的,在标准文档的6.4.8.5有详细介绍,下面对当前块的不同的形状下的A、B、C块的标识及其预测方法。

2.1 8x16预测块的MV预测

(1)如果当前预测块处于宏块的左半部分,其参考索引RefIdx与A块的参考索引RefIdx相同时,当前块MVP由A块预测得到;同理如果当前预测块处于宏块的右半部分,其参考索引RefIdx与C块的参考索引RefIdx相同时,当前块MVP由C块预测;
预测块为8x16时MV预测

16x16预测块的MV预测

取A、B、C块 mv 的中值,即 mvp = mid(mvA, mvB, mvC),三个块分别处于不同的宏块中。
16x16预测块MV预测

16x8预测块的MV预测

(1)如果当前块处于宏块的上半部分,其参考索引与B块的参考索引相同时,当前块MVP由B块预测得到;同理如果当前块处于宏块的下半部分,其参考索引与A块的参考索引相同时,当前块MVP由A块预测;
预测块16x8时MV预测

8x8预测块的MV预测

取A、B、C块 mv 的中值,即 mvp = mid(mvA, mvB, mvC)。但要注意,C块处于B宏块内。这里只画出了8x8预测块在左上角的情况,其他位置上的8x8预测块的A、B、C块的位置绝对位置有变化,但是相对位置是固定的。这就意味着,A、B、C块可能有可能分别处于不同宏块中,也有可能有两个块处于相同宏块中,不存在3个块都处于同一宏块中。
8x8预测块的MV预测

8x4预测块的MV预测

取A、B、C块 mv 的中值,即 mvp = mid(mvA, mvB, mvC),描述同8x8预测块一致。
8x4预测块的MV预测

4x8预测块MV预测

取A、B、C块 mv 的中值,即 mvp = mid(mvA, mvB, mvC)。这里只画出了8x8预测块在右下角的情况,其他位置上的8x8预测块的A、B、C块的位置绝对位置有变化,但是相对位置是固定的。这就意味着,A、B、C块可能有可能分别处于不同宏块中,也有可能有两个块处于相同宏块中,甚至3个块都处于同一宏块中。
4x8预测块MV预测

4x4预测块MV预测

取A、B、C块 mv 的中值,即 mvp = mid(mvA, mvB, mvC),描述同4x8预测块一致。
4x4预测块MV预测

特殊说明

在进行上面的 mvp 计算时,还要满足下面的限制条件:
(1)只有当当前块E的参考帧和临近块(A、B、C)的参考帧为同一帧,那么才可以使用MVA、MVB、和MVC进行预测;
(2)如果MVC不可用,则用当前块的左上边块的运动矢量MVD代替MVC;
(3)如果MVA、MVB和MVC中没有可用的,当前块mvp等于0;
(4)如果MVA、MVB和MVC中只有一个可用的,那么MVP就是该可用的临近块运动矢量;
(5)如果MVA、MVB和MVC中有两个可用的,那么将另一个不可用的当作0,然后按照3个都可用的策略计算MVP。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值