欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

H264 解码器的实现--MV 预测的帧间预测-2。

最编程 2024-07-19 13:56:22
...

当前预测块的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。

推荐阅读