MMX技术在视频编码中的应用

MMX技术在视频编码中的应用* 虞正华 谭径微 余松煜

周 璇

  摘 要 本文详细地介绍了英特尔推出的MMX技术,并举例说明了MMX指令在视频编码中的具体应用。
  关键词 MMX技术 视频编码 运动估计 离散余弦变换

Application of MMX Technology in Video Coding
Zhou Xuan,et al
Institute of Image Communciation & Information Processing,Shanghai Jiaotong University,Shanghai 200030

  Abstract In this paper,Intel's MMX technology will be introduced in detail and will illustrate the application of MMX technology in video coding domain.
  Keywords MMX technology,video coding,motion estimation,discrete cosine transfer

1 引 言
  MMX技术是英特尔公司为加速其微处理器在多媒体和通信中的应用而首先引入的。紧接其后,AMD和Cyrix公司推出的微处理器也开始支持MMX技术,以下我们主要介绍英特尔MMX技术。由于最近推出的英特尔奔腾处理器(部分主频为166兆和主频高于200兆以及更高档次的奔腾处理器)中引入了MMX技术,这些处理器可以执行许多多媒体和通信算法中固有的并行运算。从而使得英特尔处理器在三维图形处理、运动图象编码、语音处理以及虚拟现实等领域的处理能力成倍增长。MMX技术被誉为继英特尔80386以来处理器结构最重大的革新。

2 MMX技术介绍
  和以前的处理器技术相比,MMX技术有以下主要特点:①单指令多数据技术。这是MMX技术的关键,由于多媒体
和通信中用到的数据类型通常是8位或16位的,利用单指令多数据技术,可以在一条指令内同时对多个数据操作,从而使其效率成倍增长。②57条新的指令。这些指令是针对多媒体和通信算法中固有的并行运算而引入的,其最大特点是对“打包”数据进行并行处理。57条新指令包括以下几类:算术指令、比较指令、转换指令、逻辑指令、移位指令、数据传输指令以及MMX状态清空(EMMS)指令。③8个64位宽的MMX寄存器(MM0~MM7)。这8个64位的通用寄存器是和原有的浮点寄存器公用的,它们分别对应8个80位浮点寄存器的低64位。因此,当MMX指令和浮点运算指令切换时,在MMX指令结束以后浮点运算开始之前必需用EMMS指令将浮点寄存器的标志位(FP tag bits)清零。④4个新的数据类型。它们是:“打包”的字节(由8个字节打包而成的64位数据)、“打包”的字(由4个16位字“打包”而成的64位数据)、“打包”的双字(由2个32位的双字“打包”而成的64位数据)和四字(quadword)。⑤更多的指令数据缓存。指令、数据缓存分别由原来的8k变成16k。
  虽然MMX技术具有以上新特点,但是它没有引入任何异常和状态信息。因此,现有的操作系统就可以支持带MMX指令的应用。并且,带MMX技术的处理器完全兼容非MMX应用程序[1、2]

3 MMX指令在视频编码中的应用干两维的N×N个象素的小块(本文中N=16)。在运动估计中整个小块被看成一个单元。用它来和参考帧内的块匹配。匹配的准则主要有均方误差准则(MSE)和绝对误差和准则(SAD)等,其中绝对误差和准则是最流行的,因为它不需要乘法运算而效果接近于均方误差准则。N×N块的绝对误差和匹配准则可以用公式表示为:
  近年来,视频编码技术日趋成熟,并且已经实用化。MPEG-1、MPEG-2、H.261、H.263等一系列针对不同应用领域的国际标准也相继制定。这些标准的最大特点的共同之处是:它们采用的都是帧间预测,帧内离散余弦变换最后是可变长编码以形成符合标准的码流。其中,帧间预测是通过运动估计来实现的,它是视频编码算法中运算量最大的部分,占整个编码算法运算量的60%以上。正、反离散余弦变换是运算量仅次于运动估计的部分。下面我们将举例说明MMX指令在运动估计和离散余弦变换中应用。
3.1 MMX指令在运动估计中的应用
  运动估计是消除运动图象帧间冗余度的有力手段,它直接影响到编码后图象的质量和码率。运动估计主要有块匹配法、象素递归法、相位相关法等[3]。其中块匹配法因为它的算法简单有效以及易于大规模集成而在视频编码中得到广泛应用,从H.261到MPEG-1、2,H.263等国际标准都采用块匹配法。
  在块匹配法中,每个当前帧被分成若

28a.gif (1477 bytes)

(1)

  其中In(i,j)是第n帧中象素点(i,j)的灰度或色度值。(x,y)是偏移量,如图1所示,W是搜索范围。上式中使SAD最小的(x,y)便是运动矢量。

28.gif (6034 bytes)

图1 搜索窗中的当前帧和参考帧

  从以上所述,可知运动估计所做的运算主要是计算各匹配块的绝对误差和。由于象素点是8位的,我们可以利用MMX技术单指令多数据的特点,先对数据进行“打包”,然后将它们在一条指令内并行处理完。绝对误差和的计算可用MMX技术汇编指令表示如表1。表中左边为汇编指令及其相应的注解,右边为指令执行结果。

表1 汇编指令及指令执行结果

汇编指令执行结果
MOVQ   MM0,PTR0
;PTR0为当前宏块数据对应的地址,该语句完成将数据“打包”,然后传入MMX寄存器MM0中
28c.gif (1895 bytes)
MOVQ   MM1,PTR1
;PTR1为参考数据块对应的地址,该语句功能同上
28d.gif (2064 bytes)
MOVQ   MM2,MM0
;将MM0中的数据拷贝一份,存在MM2中,以备后用
28e.gif (1733 bytes)
PSUBUSB   MM0,MM1
;MM0,MM1中对应字节进行无符号数相减,并将其结果钳位在无符号数范围内,然后再存入MM0中
29b.gif (2787 bytes)
PSUBUSB   MM1,MM2
;功能同上
29c.gif (2808 bytes)
POR    MM0,MM1
;MM0和MM1逻辑位或,并将结果存入MM0中
29d.gif (2742 bytes)
MOVQ   MM2,MM0
;将MM0中的数据拷贝一份,存在MM2中,以备后用
29e.gif (2780 bytes)
PSRLW   MM0,8
;将MM0中打包成字的数据逻辑右移8位,结果存入MM0
29f.gif (2799 bytes)
PSRLW   MM2,8
;将MM2中打包成字的数据逻辑左移8位,结果存入MM2
29g.gif (2676 bytes)
PSRLW   MM2,8
;将MM2中打包成字的数据逻辑右移8位,结果存入MM2
29i.gif (1995 bytes)
PADDW   MM2,MM0
;将MM2,MM0中对应字相加,并将结果存入MM2
29h.gif (2342 bytes)

  由上表可以看出,利用MMX指令将当前宏块和参考宏块对应的8个8位象素点相减,并其差值取绝对值,然后将绝对值相加,总共只需要11条指令。上表中,将结果被暂存在寄存器MM2中;用于和以后象素点的绝对误差求和。这比不带MMX指令奔腾处理器要快好几倍。足以和当今任何高速的数字处理器(DSP)比美。
3.2 MMX指令在离散余弦变换中的应用示:

29a.gif (999 bytes)

(2)

式中k=0,…,N-1;a0=cos(π/4),ak=1(k=1,…,N-1时);x(n)为输入数据,y(k)为变换后的输出数据。虽然视频编码标准中采用的是8×8的两维的离散余弦变换,但它可以转化为两次一维的离散余弦变换。
  由(2)式可以看出,离散余弦变换中主要运算是乘加,MMX指令集中的PMADDWD指令正好可以执行这种运算。图2为PMADDWD指令执行示意图。从图中可以看到,一条PMADDWD指令可以并行执行两个乘加运算。

29.gif (6593 bytes)

图2 PMADDWD指令执行示意图

4 结束语
  从以上的介绍可以看出,MMX技术对于视频编码算法的快速实现是很有帮助的。值得注意的是,由于MMX寄存器用的是浮点寄存器,由MMX指令到浮点运算指令转换有时要花费50个时钟周期。编程要注意减少MMX指令到浮点运算指令的转换次数。

作者单位:上海交通大学图象通信与信息处理研究所(上海 200030)
*男,30岁,在读博士研究生

参考文献


  离散余弦变换是继运动估计后,运算量最大的部分。在视频编码中它被用于消除图空间域的冗余度。一维N点的DCT变换可以用下式来表

 [1]Intel.MMX Technology Programmers Reference Manual.Intel,1996
 [2]Intel.MMX Technology Developers Guide.Intel,1996
 [3]余松煜,郑自航.图象通信中的运动估值.通信学报,1993;14(3):63~68

收稿日期:1998-08-06

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值