X264中的sad-a.asm

本文介绍了SAD(绝对误差和)在视频编解码中的重要作用,特别是在X264编码器中的实现。通过Intel多媒体指令中的SAD专用指令,如MMX和SSE2,提高了SAD计算的效率。文中详细展示了SAD在不同尺寸(如16x16、16x8等)上的汇编代码实现,包括MMX和SSE2两种指令集的优化方法。
摘要由CSDN通过智能技术生成

1.SAD即绝对误差和(sum of absolute differences),应用非常广泛,是一种测量两个图像块的差异的最简单的办法。顾名思义,其公式为:

  

2.为什么要优化SAD

    SAD在视频编解码中用处非常广泛,

       1. intra预测中选择最佳划分,最佳预测方向

        2. inter预测中选择最佳划分,运动搜索中对搜索结果的评判。

3. 作为rdo公式的失真项

     那为什么要优化sad呢?试想一下,每个宏块在进行intra预测的时候,会由16x16 8x8 4x4四类划分,4x4和8x8分别都有9中预测模式,每一种预测模式都要计算其sad。如果把每一种分块的模式都走完,sad的调用次数将是非常可观的。实际上sad或其类似算法satd,ssd是整个编码算法中调用次数最多算法。

3.SIMD中的SAD

    还好在intel的多媒体指令中,提供了sad的专用指令,可见sad的重要性。mmx和xmm中都提供了sad指令。一条指令可以做8个像素,或者更多像素的sad,大大提高了sad的运算效率。

4.SAD在x264中的实现代码可以在sad-a.asm中找到,下面对一些代码进行简单注释



;=============================================================================
; SAD MMX
;=============================================================================
;两行16像素的sad,结果累加存入mm0中,参考8x8和4x4的代码分析
%macro SAD_INC_2x16P 0
    movq    mm1,    [r0]
    movq    mm2,    [r0+8]
    movq    mm3,    [r0+r1]
    movq    mm4,    [r0+r1+8]
    psadbw  mm1,    [r2]
    psadbw  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值