openh264帧间预测过程之skip模式的判定

openh264在做运动估计之前是要先check一下skip模式,判断当前宏块是否为skip模式首先要判断两个条件:
(1)当前帧的参考图片是P帧,并且当前宏块在参考图片中的同位块是skip模式或者Background模式;
(2)当前宏块相邻的左边、上边、左上和右上宏块至少有一个存在并且是skip模式。
若满足这两个条件中的一个就继续向下执行,否则当前宏块一定不会是skip模式。
接下来的过程为:
1、预测skip模式的SAD值(iSadPredSkip):根据左边、上边、左上、右上相邻宏块是否存在、是否是skip模式来确定。
(1)如果左边宏块存在并且是skip模式,其他相邻宏块不存在,则iSadPredSkip值取左边宏块的SAD值,即iSadPredSkip=sadLeft;
(2)若相邻宏块都存在(左上、右上相邻块可以存在一个),当右上宏块存在的时候就不判断左上宏块,否则使用左上宏块;若右上和左上宏块都存在,就用右上宏块,那么有以下几种情况:

  • 若只有左边相邻宏块是skip模式,则iSadPredSkip值取左边宏块的SAD值,即iSadPredSkip=sadLeft;
  • 若只有上边相邻宏块是skip模式,则iSadPredSkip值取上边宏块的SAD值,即iSadPredSkip=sadTop;
  • 若只有左上或者右上相邻宏块是skip模式,则iSadPredSkip值取左上或者右上宏块的SAD值,即iSadPredSkip=sadTopRight or sadTopLeft;
  • 若相邻宏块至少有两个为skip模式,则iSadPredSkip值取它们的中值。

2、预测skip模式的MV(sMvp):

(1)若左边、上边相邻宏块都不存在,或者存在一个且其Mv为0,或者两个都存在且MV都为0,则sMvp等于0;
(2)若左边、上边相邻宏块都存在,且Mv都不为0,左上、右上相邻宏块取一个做参考,右上宏块存在就用右上宏块,右上宏块不存在时用左上宏块,则sMvp取三种相邻宏块MV的中值。
3、计算sMvp对应的参考宏块和当前宏块之间的亮度和色度sad值,sadCostMb,若
(sadCostMb=0 )|| (sadCostMb < iSadPredSkip) ||
(参考图片是P帧 && 参考图片中同位块的类型是skip模式 && sadCostMb 小于参考图片中同位块的skipSad值),
则当前宏块就可判断为skip模式;
若不满足上述条件,则对当前宏块进行DCT变换,得到变换系数,对Y、U、V三个分量的变换系数进行量化,若量化后系数全为0,则当前宏块就可判定为skip模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值