x264_mb_predict_mv_16x16

x264_mb_predict_mv_16x16

由于色度块帧间预测使用的是相应亮度块的运动矢量,所以视频解码中只需要对亮度块的运动矢量进行预测。一个亮度块E和它相邻亮度8×8块A、B、C和D之间的空间位置如图1所示。E的大小可以是16×16、16×8、8×16或8×8。A、B、D都是与E的左上角样本紧邻的块,C是与E的右上角样本紧邻的块。

图1中,A、B、C、D的原始运动矢量分别为mvA、mvB、mvC、mvD,对应的BlockDistance分别为BlockDistanceA、BlockDistanceB、BlockDistanceC、BlockDistanceD,对应的参考索引值分别为refA、refB、refC、refD。其中BlockDistance是当前块(属于当前图像)和它的运动矢量所指向的参考块(属于参考图像)之间的距离;参考索引值用来确定当前图像进行解码处理所用的参考图像,参考图像的两场可有不同的参考索引值,因此参考索引取值范围是0~3。下面如果将参考索引值赋值为-1,那仅仅是运动矢量预测中的一个标记,不代表实际的参考索引值。具体预测过程如下:

--如果A"不可用"或者采用帧内预测,或与当前块没有同一个预测方向的运动矢量,则mvA为零矢量,BlockDistanceA等于1,refA为-1;B和D块的处理方式和A块完全相同。

 


x264_mb_predict_mv_16x16 - 无罪 - 无罪的技术博客
--如果C"不可用",那么mvC等于mvD,BlockDistanceC等于BlockDistanceD,C的参考索引值等于D的参考索引值;如果C采用帧内预测模式,或者与当前块E没有同一预测方向的运动矢量,mvC为零矢量,BlockDistanceC等于1,C的参考索引值为-1。

上面提到的块"不可用"指该块不存在,或者尚未解码。

当前块E的运动矢量预测值MVEPred主要有三步:

第一步,如果A、B、C三者中只有一个块X的参考索引值不为-1,那么MVEPred等于mvx(x为A、B或C);否则进行第二步;第二步,如果E所在宏块按16×8或8×16模式编码,且E的参考索引和相应周围块参考索引满足一定的条件,则MVEPred等于相应的mvX,否则进行第三步;第三步,根据缩放公式MVX=(mvX×BlockDistanceE ×(256/BlockDistanceX)+128)>>8(X为A、B或C)对mvA、mvB、mvC进行缩放,得到MVA、MVB、MVC,再计算各MVX之间的距离,根据距离的中间值选择MVX作为MVEPred。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值