MMX技术在视频编码中的应用* 虞正华 谭径微 余松煜 周 璇 摘 要 本文详细地介绍了英特尔推出的MMX技术,并举例说明了MMX指令在视频编码中的具体应用。 Application of MMX Technology in Video Coding 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. 1 引 言 2 MMX技术介绍 3 MMX指令在视频编码中的应用干两维的N×N个象素的小块(本文中N=16)。在运动估计中整个小块被看成一个单元。用它来和参考帧内的块匹配。匹配的准则主要有均方误差准则(MSE)和绝对误差和准则(SAD)等,其中绝对误差和准则是最流行的,因为它不需要乘法运算而效果接近于均方误差准则。N×N块的绝对误差和匹配准则可以用公式表示为: (1) 其中In(i,j)是第n帧中象素点(i,j)的灰度或色度值。(x,y)是偏移量,如图1所示,W是搜索范围。上式中使SAD最小的(x,y)便是运动矢量。 图1 搜索窗中的当前帧和参考帧 从以上所述,可知运动估计所做的运算主要是计算各匹配块的绝对误差和。由于象素点是8位的,我们可以利用MMX技术单指令多数据的特点,先对数据进行“打包”,然后将它们在一条指令内并行处理完。绝对误差和的计算可用MMX技术汇编指令表示如表1。表中左边为汇编指令及其相应的注解,右边为指令执行结果。 表1 汇编指令及指令执行结果 |
汇编指令 | 执行结果 |
MOVQ MM0,PTR0 ;PTR0为当前宏块数据对应的地址,该语句完成将数据“打包”,然后传入MMX寄存器MM0中 | ![]() |
MOVQ MM1,PTR1 ;PTR1为参考数据块对应的地址,该语句功能同上 | ![]() |
MOVQ MM2,MM0 ;将MM0中的数据拷贝一份,存在MM2中,以备后用 | ![]() |
PSUBUSB MM0,MM1 ;MM0,MM1中对应字节进行无符号数相减,并将其结果钳位在无符号数范围内,然后再存入MM0中 | ![]() |
PSUBUSB MM1,MM2 ;功能同上 | ![]() |
POR MM0,MM1 ;MM0和MM1逻辑位或,并将结果存入MM0中 | ![]() |
MOVQ MM2,MM0 ;将MM0中的数据拷贝一份,存在MM2中,以备后用 | ![]() |
PSRLW MM0,8 ;将MM0中打包成字的数据逻辑右移8位,结果存入MM0 | ![]() |
PSRLW MM2,8 ;将MM2中打包成字的数据逻辑左移8位,结果存入MM2 | ![]() |
PSRLW MM2,8 ;将MM2中打包成字的数据逻辑右移8位,结果存入MM2 | ![]() |
PADDW MM2,MM0 ;将MM2,MM0中对应字相加,并将结果存入MM2 | ![]() |
由上表可以看出,利用MMX指令将当前宏块和参考宏块对应的8个8位象素点相减,并其差值取绝对值,然后将绝对值相加,总共只需要11条指令。上表中,将结果被暂存在寄存器MM2中;用于和以后象素点的绝对误差求和。这比不带MMX指令奔腾处理器要快好几倍。足以和当今任何高速的数字处理器(DSP)比美。 3.2 MMX指令在离散余弦变换中的应用示: (2) 式中k=0,…,N-1;a0=cos(π/4),ak=1(k=1,…,N-1时);x(n)为输入数据,y(k)为变换后的输出数据。虽然视频编码标准中采用的是8×8的两维的离散余弦变换,但它可以转化为两次一维的离散余弦变换。 图2 PMADDWD指令执行示意图 4 结束语 作者单位:上海交通大学图象通信与信息处理研究所(上海 200030) 参考文献 离散余弦变换是继运动估计后,运算量最大的部分。在视频编码中它被用于消除图空间域的冗余度。一维N点的DCT变换可以用下式来表 [1]Intel.MMX Technology Programmers Reference Manual.Intel,1996 收稿日期:1998-08-06 |