CN1132114C - 对二维矩阵进行二维逆离散余弦变换的计算机实现方法 - Google Patents

对二维矩阵进行二维逆离散余弦变换的计算机实现方法 Download PDF

Info

Publication number
CN1132114C
CN1132114C CN97194236A CN97194236A CN1132114C CN 1132114 C CN1132114 C CN 1132114C CN 97194236 A CN97194236 A CN 97194236A CN 97194236 A CN97194236 A CN 97194236A CN 1132114 C CN1132114 C CN 1132114C
Authority
CN
China
Prior art keywords
data
matrix
movq
ptr
mmword
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CN97194236A
Other languages
English (en)
Other versions
CN1217077A (zh
Inventor
B·埃坦
B·尼森鲍姆
M·菲德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1217077A publication Critical patent/CN1217077A/zh
Application granted granted Critical
Publication of CN1132114C publication Critical patent/CN1132114C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Discrete Mathematics (AREA)
  • Complex Calculations (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Abstract

一种用于执行二维逆离散余弦变换的计算机系统(100),包括多媒体输入装置(125,126)、存储器(104)及处理器(109)。该处理器(109)通过执行SIMD数学与SIMD移位指令来实现变换。利用移位来保持精度。

Description

对二维矩阵进行二维逆离散余弦变换的计算机实现方法
本发明涉及多媒体计算机领域。具体地,本发明涉及用单指令多数据(SIMD)计算机处理器在多媒体数据上执行逆离散余弦变换。
计算机多媒体应用通常包含处理大量表示音频信号与视频图象的小数据值。处理多媒体数据通常包含执行变换编码,这是将数据值转换成供更高效地传输、计算、编码、压缩或其它处理算法的一系列变换系数的方法。
更具体地,多媒体数据值通常将信号表示为时间的函数。变换系数将同一信号表示为诸如频率的函数。存在着包含快速傅里叶变换(FFT)、离散余弦变换(DCT)及已变换在内的许多变换算法。诸如逆离散余弦变换(iDCT)等对应的逆变换算法将变换系数转换成样本数据值。许多这种算法包含涉及十进制数的多个数学步骤。
在大多数先有技术系统中,包含十进制数的数学步骤是用浮点数学软件例程库或浮点协处理器执行的。浮点数为用尾数与指数表示的带有限精度的十进制数。图1示出如何在计算机系统的寄存器与存储器中典型地表示浮点数的实施例。浮点数占用分成尾数部分10与指数部分20的固定大小的存储器。尾数10表示正在表示的十进制数的最有效位。指数部分20表示小数点应放在何处。采用二进制数浮点表示,浮点数的值可表达为:值=尾数×2指数
利用在通用处理上执行的浮点数学软件例程库来执行浮点运算是费时的。如果必须实时执行计算,这一方法是不够的。
为了补救这一问题,许多计算机处理器拥有浮点协处理器。浮点协处理器为专用于在浮点值上执行计算的处理器。浮点协处理器可位于紧连接到主处理器集成电路上的独立集成电路上或者浮点协处理器可以是与中央处理器核心并行运行的片上处理器。
然而,对于需要大量实时数学处理的应用,即使浮点协处理器也不能提供满意的性能。例如,实时视频信息的压缩与解压缩要求非常快地执行非常大量的处理以便提供流畅的视频数据流。从而,希望具有利用浮点数学例程库或浮点协处理器实现需要非常快的浮点运算的运算方法。
公开了利用逆离散变换处理多媒体数据的方法。本方法使用定点信息而非浮点信息使处理更快。定点信息是由单指令多数据处理器处理的,该处理器能同时单个地在多个数据上执行单一的数学或逻辑运算。在逆离散变换的各处理步骤之间,小心地将寄存器中的数据移位以便能保持处理步骤的有效位来保持精度。
从下面参照附图的本发明的较佳实施例的详细描述中,本发明的目的、特征与优点将是显而易见的。
图1a示出计算机系统内的浮点值的典型表示。
图1b示出按照本发明的一个实施例的计算机系统。
图2示出组合64位数据值的三种不同格式的表示。
图3a示出用在本发明的方法中的一个实施例中的高位组合乘法运算。
图3b示出用在本发明的方法中的一个实施例中的组合减法运算。
图3c示出用在本发明的方法中的一个实施例中的组合加法运算。
图3d示出用在本发明的方法中的一个实施例中的MOVQ运算。
图3e示出用在本发明的方法中的一个实施例中的组合逻辑左移运算。
图3f示出用在本发明的方法中的一个实施例中的组合算术右移运算。
图4示出Arai-Agui-Nakajima离散余弦变换算法的流程图。
图5示出Winograd离散傅里叶变换算法的流程图。
图6示出逆离散余弦变换算法的流程图。
图7a示出逆Winograd离散傅里叶变换算法的流程图。
图7b示出呈现四路并行性的Winograd离散傅里叶变换算法的第一部分的流程图。
图7c示出呈现四路并行性的Winograd离散傅里叶变换算法的第二部分的流程图。
图8a与8b示出按照本发明的一个实施例的计算机系统中的逆离散余弦变换的应用。
在下面的描述中,为了说明的目的,提出了特定的数字、材料与配置以便提供对本发明的彻底理解。然而对于熟悉本技术的人员而言,本发明可以不用这些特定的细节实行。在其它示例中,为了不冲淡本发明,省略或简化了众所周知的特征。本发明的计算机系统
图1b示出按照本发明的一个实施例构造的计算机系统100的方框图。计算机系统100包括用于信息通信的总线101、连接到总线101上用于信息处理的处理器109、及连接到总线101上用于为处理器109存储信息与指令的存储器104。
处理器109包括执行单元130、寄存器存储器150、高速缓冲存储器160、解码器165、及内部总线170。为处理器109存储频繁地与/或最近使用的信息的高速缓冲存储器160是连接到执行单元130上的。寄存器存储器150存储处理器109中的信息并通过内部总线170连接到执行单元130上。在本发明的一个实施例中,寄存器存储器150包含用于存储多媒体信息的多媒体寄存器151。在一个实施例中,多媒体寄存器151各存储多达64位组合数据。多媒体寄存器151可以是专用多媒体寄存器或用于存储多媒体信息与其它信息的寄存器。在一个实施例中,多媒体寄存器151在执行多媒体操作时存储多媒体数据而在执行浮点运算时存储浮点数据。
执行单元130按照处理器109所接收的包含在组合指令集140中的指令在组合数据上操作。执行单元130还按照实现在通用处理器上的指令在标量数据上操作。在本发明的一个实施例中,处理器109支持Pentium微处理器指令集及组合指令集140。通过将组合指令集140包含进诸如Pentium微处理器指令集等标准微处理器指令集中,便能容易地将组合数据指令包含进现有软件中(以前为标准微处理器指令集编写的)。根据所描述的发明,也可使用诸如PowerPCTM及AlphaTM处理器指令集等其它标准指令集。(Pentium为Intel公司的注册商标。PowerPCTM为IBM、苹果计算机及MOTOROLA的商标。AlphaTM为数字设备公司的商标。)
在本发明的一个实施例中,组合指令集140包括用于执行组合高位乘法146、组合加法142、组合减法运算144、组合逻辑左移运算141及组合算术右移运算143的指令。
通过在通用处理器109的指令集中包含组合指令集140连同执行这些指令的相关电路,许多现有多媒体应用所使用的运算可在通用处理器中用组合数据执行。从而,许多多媒体应用可通过采用在组合数据上执行运算的处理器的数据总线的全宽度而更高效地执行。这消除了为每一次在一个数据元素上执行一种或多种运算而在处理器的数据总线上传送较小单位的数据的要求。
仍参见图1,本发明的计算机系统100包含诸如监视器等显示装置121。显示装置121可包含诸如帧缓冲器等中间装置。计算机系统100包括诸如键盘等输入装置122及诸如鼠标器、或跟踪球、或跟踪板等光标控制123。显示装置121、输入装置122及光标控制123都连接到总线101上。计算机系统100也可包含网络连接器124使计算机系统100成为局域网(LAN)或广域网(WAN)的一部分。此外可将计算机系统100连接到用于录音与/或播放的装置125上,诸如耦合在用于记录话音输入供语音识别的音频数字化器上。计算机系统100也可包含能用来捕捉视频图象的视频数字化装置126、诸如打印机等硬拷贝装置127及CD-ROM装置128。装置124-128也连接到总线101上。本发明的组合数据格式
在本发明的一个实施例中,执行单元130在若干种不同组合数据格式的数据上操作。例如,在一个实施例中,计算机系统100操作64位数据组。图2示出格式化与解释64位数据的三种可能的组合方法。图2的组合数据格式包括:组合字节格式210、组合字格式220或组合双字(dword)格式230。组合字节格式210的组合数据包含8个独立的8位数据元素。组合字格式220中的组合数据包含4个独立的16位数据元素。组合双字格式230中的组合数据包含两个独立的32位数据元素。下面对照组合字格式讨论特定操作的示例。然而,这些操作类似地适用于本发明的任何组合数据格式。
此外,组合指令集140中的许多指令能在带符号或不带符号的数据上操作并能带或不带“饱和”执行。如果运算是用饱和执行的,则在运算结果超出数据元素的范围时便将数据元素的值定位在预定的最大值或最小值上。超出数据元素的范围也称作上溢或下溢。饱和的采用避免了数据上溢或下溢导致的有害副作用。本发明的组合数据指令
参见图3a-3f,其中更详细地描述了来自分组指令集140的一些指令的一个实施例。在下面描述的各例中,源1、源2与结果信息是位于多媒体寄存器151中的组合数据。其它实施例可直接从计算机的存储器104中存取源1、源2与/或结果信息。在其它实施例中,这些寄存器可存储在通用寄存器存储器中。
图3a示出组合高位乘法(PMULH)运算146的示例。结果203的数据元素203a包含源201的数据元素201a与源202的数据元素202a之积的高16位。结果203的数据元素203b包含源201的数据元素201b与源202的数据元素202b之积的高16位。以类似方式计算结果203的其它数据元素。忽略结果的低位。在替代实施例中,可利用组合数据存储器运算数作为源2来生成结果203。
图3b示出组合减法运算144的示例。结果303的数据元素303a为源301的数据元素301a与源302的数据元素302a之差。结果303的数据元素303b为源301的数据元素301b与源302的数据元素302b之差。
图3c示出组合加法运算142的示例。结果403的数据元素403a为源401的数据元素401a与源402的数据元素402a之和。结果403的数据元素403b为源401的数据元素401b与源402的数据元素402b之和。
本发明的一个实施例包含称作MOVQ148的传送操作,它用来向或从多媒体寄存器151传送64个数据位,即四个组合字。图3d示出MOVQ操作的示例。将具有位于存储器中的组合字504、506、508与510的组合数据502传送给一多媒体寄存器151,并分别作为数据元素512、514、516与518存储。
图3e示出组合逻辑左移运算141的示例。在组合逻辑左移运算中,寄存器的数据元素各独立地向左移位一个标量移位计数。各元素的低位用零填充。移位计数解释为不带符号的。移位计数大于15(对于字)、31(对于双字)或63(其它)产生全零。
图3f示出组合算术右移运算143的示例。在组合算术右移运算中,源的带符号数据元素各独立地向右移位一个标量移位计数。各元素的高位用源中的数据元素的符号位的原来值填充。移位计数解释为不带符号的。取决于源中的数据元素的符号位的初始值,移位计数大于15(对于字)或31(对于双字)产生全1或零。逆离散余弦变换
如上所述,本发明涉及执行通常用在多媒体算法中的数据值的逆离散余弦变换(iDCT)的有效方法。具体地,本发明涉及利用以定点组合数据格式存储的数据值执行逆离散余弦变换的唯一的方法。通常,在执行逆离散余弦变换时采用浮点数将达到可接受的精度。然而本方法用定点算术实现逆离散余弦变换以并不牺牲精度到不可接受的地步的方式。因此,本发明的实现生成的结果快于以前的实现而且具有可接受的精度。
为了高效地执行逆离散余弦变换(iDCT),本发明采纳了YukihiroArai、Takeshi Agui与Masayuki Nakajima公布的名为“图象的快速DCT-SQ方案”的算法。(此后称作Arai-Agui-Nakajima算法。)Arai-Agui-Nakajima算法是公布在IEICE会刊,第71卷,第11期,1095页,1988年11月,上的。
Arai-Agui-Nakajima算法为一维预定标的DCT/iDCT算法。Arai-Agui-Nakajima算法从8个预定标值定标的8个输入系数开始。然后Arai-Agui-Nakajima算法以只须5次乘法及29次加法的变换方式作用在预定标的系数上。Arai-Agui-Nakajima算法最吸引人的特征之一是它以最少数目的乘法运算计算8点DCT。此外,大多数乘法运算能并行执行,使得该算法对于并行实现是理想的。
Arai-Agui-Nakajima算法利用16点DFT计算8点DCT。图4示出说明该算法如何利用只提供系数的实部的16点DFT计算8点DCT的数据流图。为了执行只提供系数的实部快速16点DFT,选择了Winograd FFT算法。(见S.Winograd,“计算机上的离散傅里叶变换”,IBM研究报告,RC-6291,1976年11月)。
图5示出利用Winograd FFT算法生成系数的实部的信号流。如图5的流图所示,只需要5次乘法运算。实现高效逆离散余弦变换
在带有多媒体信息的使用中逆离散余弦变换是非常重要的运算。特别是,逆DCT通常用来压缩及解压缩诸如音频与视频多媒体信息。理想上,计算机应能实时压缩及解压缩音频与视频信息,使得能将它用在诸如实时电视电话等应用中。
为了得到这一结果,本发明实现了利用Arai-Agui-Nakajima算法的并行性的逆离散余弦变换的非常快与高效的版本。本发明的并行实现最高效地利用能执行四路SIMD(单指令多数据)指令的计算机体系结构特征。
为了执行逆离散余弦变换,以相反次序执行Arai-Agui-Nakajima算法的步骤。特别是,如图6中所示,按照Arai-Agui-Nakajima算法的逆版本首先定标系数。定标之后,执行Winograd DFT算法的逆算法。图7a示出从16点DFT的实部中恢复原始值的逆Winograd DFT算法的信号流。
为了实现图6与7a的逆离散余弦变换,本发明利用处理器109的组合指令集140。在一个实施例中,组合指令集140是结合以组合字格式存储的多媒体数据使用的,其中数据是作为单一多媒体寄存器内的四个独立的16位数据元素存储的。
四个独立的16位数据元素中的各个包含带符号的标量数据值。由于通常需要浮点运算,这四个独立的16位标量数据值将解释为定点小数值。然而小数点的放置是隐含的,因此必须由逆离散余弦变换实现保持跟踪。
图6中所示的第一步为适当的标定输入值。这能用将组合数据字相乘的组合乘法指令146来完成。乘法运算将输入值与来自按照图6的算法的表中的对应定标因子相乘。然而,为了使有效位保持不溢出,在执行组合乘法指令146之前首先用组合算术右移指令将数据向右移位。
随后,执行16点逆离散傅里叶变换是从前面的16点离散傅里叶变换的实部中恢复原始值。图7a中示出了执行这一变换的整个流程图。为了用能并行在四个字上运算的计算机处理器有效地执行变换,可分解逆离散傅里叶变换算法。
图7b示出所执行的逆离散傅里叶变换算法的第一部分。如图7b所示,只在四个数据值上运算。这四个数据值可用组合字格式存储在单个多媒体寄存器内。通过检验图7b中的运算的数据流,便能看出由于不存在相关性而所有数字运算能并行执行。从而图7b中的运算能用组合乘法运算146、组合加法运算142及组合减法运算144实现。
在算法中的每次运算之后,存储在多媒体寄存器中的数据值可能接近上溢或下溢。为了防止出现这一点,为了为下一运算最好地保留有效位,可右移或左移寄存器的内容。这些移位运算是用左移组合逻辑运算141及组合算术右移运算143执行的。注意在本实施例中,所有组合字值都必须位移相同的量。在确定移位各中间结果多少位时必须考虑这一点。在图7b的数据流图的结束处,作为临时结果存储这四个数据值。
图7c示出所执行的逆离散傅里叶变换算法的第二部分。如同图7b的数据流,对于图7c中的大多数数据流,只在四个数据值上进行运算。这四个数据值也能用组合字格式存储在单个多媒体寄存器中,并且也能同时进行运算。接近图7c的数据流图的结束时,组合来自图7b的四个临时结果值以提供逆离散傅里叶变换的结果。
由于Arai-Agui-Nakajima算法只是一维iDCT,必须执行附加处理来计算多媒体系统中常用的8×8iDCT。为了执行二维的8×8iDCT,首先必须用一维Arai-Agui-Nakajima算法来变换列,然后用一维Arai-Agui-Nakajima算法变换结果的行。通过首先在行上应用一维Arai-Agui-Nakajima iDCT算法然后到列上应用而颠倒这一次序,便能提供相同的结果。
在特定的SIMD指令集上实现8×8iDCT时,发现在列上执行Arai-Agui-Nakajima算法比在行上效率高得多。将一维Arai-Agui-Nakajima iDCT算法应用在矩阵的行上复杂得多且效率低。建议下列步骤:
1.预定标输入系数。
2.在矩阵的列上执行一维iDCT。
3.转置该矩阵。
4.在转置的矩阵的列上执行第二次iDCT。(这等效于在原始矩阵
  的行上执行iDCT)。
5.将矩阵转置回来。
如上所示,执行了两次似乎没有必要的转置操作,因此寻找降低这些步骤的费用的方法。iDCT是设计成用在MPEG-2解码算法的前后关系中的。为了建立要变换的矩阵,在输入数据流上执行锯齿形扫描。为了在锯齿形扫描中执行矩阵转置只增加了可以忽略不计的时间量。所以实现下列改进的步骤:
1.在锯齿形扫描中转置输入系数。
2.预定标转置的输入矩阵的输入系数。
3.在矩阵的列上执行一维iDCT。(等效于在原始矩阵的行上执行
  iDCT。)
4.转置该矩阵。
5.在最终的矩阵的列上执行第二次iDCT。
附录A中能找到本发明如何利用Arai-Agui-Nakajima iDCT算法实现8×8iDCT的详细说明。在多媒体系统内使用逆离散余弦变换
图8A与8B示出按照本发明的实施例的逆离散余弦转换函数的应用,其中多媒体信息是在存储、显示或传输其相关数据之前用压缩信号来操作的。在本发明的其它实施例中,可在计算机系统上通过执行解压、滤波或图象边缘处理与检测操作多媒体数据来使用逆离散余弦转换函数。
在图8A中,摄像机800把活动图象视频信号传送给在第一计算机系统中的并与摄像机连接的一接收级802。对于在其中本发明与电视会议应用结合实现的实施例,在接收级802上所接收的图象主要是与远程的第二计算机系统821的操作员通信的第一计算机系统820的操作员的图象。对于其中的计算机操作员希望例如编辑、存储或处理动画或静止动画图象的其它实施例,则将VCR、其它图象捕捉单元、另一计算机系统、CD-ROM或其它激光盘的输出馈送给计算机系统的接收级。
连接到电视摄像机800或诸如麦克风等另一多媒体输入装置上的可以是数字化装置,后者又连接到计算机的总线上。多媒体输入装置接收声音或图象输入,而数字化单元则生成表示输入的数字数据。从而,数字化单元至少包括位于多媒体输入装置中的模数转换器、I/O扩展卡或硬接线到主板上。此外,数字化单元可包含滤波、数据压缩、数据加密或其它相关步骤来操作表示图象的数据。这些步骤可用多媒体输入装置内的硬件或软件与/或在计算机系统820的处理器上执行的软件来执行。
在接收级802上,将与视频信号关联的数据存储在一部分计算机系统的存储器中。这一存储的数据表示诸如摄像机所传输的视频信号的数字样本。对于一个实施例,将数据组织成使计算机系统存储器内的多个寄存器中的各个包含一个组合数据集,其中该组合数据集的各数据元素表示视频图象的帧的相关象素。例如,对于一个实施例,一个64位寄存器包含8个组合字节,各字节与不同的象素关联,其中各字节的值表示其相关象素的256种可能颜色之一。在包含4个字的64位寄存器或包含8个字的128位寄存器,而各字与不同的象素关联的实施例中,可使用更大的彩色调色板。
关于另一实施例,用两个或更多独立数据元素来定义单个的象素。例如,在红绿兰(RGB)编码方案中,第一组合数据集中的一个数据元素定义象素的R值;第二组合数据集中的另一数据元素定义同一象素的G值;而第三组合数据集中的第三数据元素定义同一象素的B值。对于在其中实现联合图形专家组(JPEG)标准或运动图像专家组(MPEG)标准的实施例中,编码方案将象素的亮度与该象素的色度分开,在分开的组合数据集中存储表示它们中的各种的数据元素。象素的亮度表示该象素的灰度或亮度,而色度则表示该象素的颜色。
人眼比耐受亮度误差更能耐受颜色误差。通过分开表示象素亮度的数据元素与表示象素色度的数据元素,能使表示亮度的数据元素比表示象素色度的数据元素更大,从而为各象素保证更高的亮度精确性,同时使用来存储颜色信息的空间更经济。例如,对于一个实施例,用来表示亮度的数据元素的长度两倍于用来表示色度的数据元素的长度。分开存储亮度与色度数据元素的另一优点在于能用不同的压缩算法来压缩亮度与色度数据,优化用于要压缩的数据类型的每一种算法。
注意按照本发明的一个实施例,执行了视频信号的数字抽样。可用在接收级802或摄像机800之一中的模数转换器来执行视频信号的抽样。以相同方式,可用数模转换器执行将抽样的信号重新转换回模拟信号。可用诸如数字信号处理器等专用硬件实现模数及数模转换。然而,为了避免不必要地冲淡本发明,这里不详细描述波形抽样,并且为了清楚起见,图8B中示出的所有信号都是连续波形式。
一旦已将视频信号作为数据存储在计算机系统存储器中,便在压缩级803上操作该数据,其中可包含将数据压缩进较小的存储器空间中。此外,在本发明的其它实施例中,能用在计算机系统上的这一级上的逆离散余弦变换通过执行解压、滤波或图象边缘处理与检测操作多媒体数据。然而,在图8中,在级803上,通过占用较小的存储器空间,因为要修改、存储或传输的数据较少,更容易修改、存储或传输视频信号,需要更少的处理能力及系统资源。如图8B中所示,将存储在计算机系统的存储器寄存器中的视频信号812引导到压缩级803。在空间域中,视频信号812是用波形表示的,其中的信号振幅用垂直位移指示而时间或空间则用水平位移指示。
对于许多压缩方法,在分析或修改信号之前,希望将信号从空间域中变换到诸如频率域等另一域中。在压缩级803上接收视频信号812之后,便将信号从空间域变换到频率域中。在频率域中,原始信号的特定频率分量(如正弦或余弦波)的振幅是用垂直位移指示的,而原始信号的各频率分量的频率则是用水平位移指示的,在压缩级803内的步骤813上在频率域中示出视频波形812。
在一个实施例中,信号从空间域到频率域的变换包含执行表示该信号的数据元素的离散余弦变换。例如,按照某些JPEG与MPEG标准,将通常为8×8象素阵列的视频图象的正方形子区用离散余弦变换函数从空间域变换到频率域中。这一8×8象素阵列对应于8个存储器寄存器,各包含8个数字元素的组合数据集,各数据元素对应于8×8阵列中其相关象素的值(如颜色、亮度等)。对于另一实施例,实现其它变换函数,诸如傅里叶变换、快速傅里叶变换、快速哈特莱变换或子波变换。
一旦变换到频率域中,便能有选择地分析、衰减、放大或丢弃信号的单个频率分量。滤波是修改信号的一定频率分量的技术。通过选择丢弃某些频率分量而不明显地降低视频图象的外观的适当的滤波器函数,借此压缩视频信号,因为只有较少的定义该视频图象的频率分量。在压缩级803内的步骤814上以这一方式实现视频信号的频率分量的滤波。
将波形的各频率分量乘以低通滤波器函数的相关系数,或者当相关系数为0时,简单地不作为变换函数的一部分计算该频率分量。如图8B中所示,低通滤波器消除或衰减波形的高频分量,而允许低频分量通过。高频分量为超过预定极限(在一些应用中称作“截止频率”)的频率,而低频分量为低于预定极限的频率。
注意按照本发明的其它实施例,可用其它技术在频率域中处理波形的频率分量。对于一个实施例,用计算机系统820以类似方式分析与处理麦克风801传输的音频波形。例如,按照语音识别应用进行频率域中的音频波形的高次谐波分析。作为另一示例,在时间上调制音频波形的谐波频谱来起动话音声、声音效果或乐器。结合声音传输或存储应用,用滤波技术压缩音频波形。
除了只是压缩视频数据之外,视频图象也能在频率域中类似地处理。例如,对于本发明的一个实施例,在边缘检测技术中将高通滤波器作用在视频信号上。高通滤波器消除或衰减信号的低频分量而允许高频分量通过。因为视频图象的尖锐的高对比度边缘通常对应于相关视频图象的高频分量,高通滤波器将孤立出这些边缘。这一技术在运动与图象检测及识别应用中找到用处。同时,这一技术可在预测矢量量化压缩中找到应用,其中跟踪运动图象视频信号的连续帧中的边界的运动与预测生成相继的图象。
对于本发明的一个实施例,滤波了视频信号之后,通过将逆变换作用在数据上而将信号重新转换到空间域中。作为替代,信号保持在频率域中而在解压级中变换回空间域中,如下所述。从原始视频信号中消除这些高频分量并不明显地降低图像质量。通常,信号压缩得越多,图象保真度损失越大。因为人眼对亮度中的误差比色度中的更敏感,如上所述,视频信号的色度部分比亮度部分受到更高度的压缩。
此外,按照JPEG、MPEG及其它视频压缩方法,可在视频图象的不同区域上作用不同程度的压缩,以获得在需要较少图象细节的区域中更多的压缩而在需要较多细节的区域中较少的压缩。对于图象质量并不主要的实施例,诸如在电视会议应用中,高压缩与低帧率是适当的。高压缩是适当的,因为用户通常只须能辨别讲话人的脸而无须辨别复杂的细节。低帧率是适当的因为视频图象中可能只有较少物体的运动。达到较高压缩的一种方法是简单地使作用在视频信号上的低通滤波器函数变窄,从而消除更多高频分量。
通过截掉数据的精度然后采用以高效的方式存储重复项的编码方案便能达到进一步的压缩。按照MPEG标准,通过匹配相继的帧中的相似象素阵列并只编码帧间的差别或内插便能达到进一步的压缩。通过以这一方式压缩视频信号,信号将占用存储器中较少量的空间。压缩之后,便在步骤816上存储、显示与/或传输信号。例如,按照图8A中所示的实施例,在视频信号离开压缩级803之后,该信号便进入将压缩的视频信号传输到第二计算机系统821的接收级807的传输级804。因为视频信号是压缩的,极大地降低了将信号从发射机804传输到接收机807所需的带宽,使诸如电话线能用于传输。对于本发明的一个实施例,除了传输视频信号还在传输级804上加密视频信号。
在接收级807上接收到压缩的视频信号时,便将与该信号关联的数据加载进计算机系统存储器中。此外,如果视频信号是加密的,便在那里解密。在解压级808上,用包含诸如将逆变换作用在数据上将信号翻译回空间域中等方法解压该信号。这假定已从计算机系统820以频率域中的压缩格式传输了信号。对于在空间域中传输压缩的视频信号的实施例,可以不需要在解压级中的逆变换。然而,在频率域中可以更容易地完成音频或视频信号的解压,这要求将解压级808所接收的空间域信号变换到频率域中供解压,然后变换回到空间域中供显示。
一旦解压缩,便将信号传送给显示级809,该级可包括视频RAM(VRAM)阵列,并将图象显示在显示装置811上。利用这一技术,计算机系统820上的用户能将视频图象传输给计算机系统821供在第二计算机终端上观看。此外,计算机系统820也能将麦克风801采集的音频信息压缩并传输给计算机系统821,从扬声器810得到播放。类似地,计算机系统821可具有类似的视频与音频传输能力(未示出),允许在计算机系统820的显示装置806及扬声器805上分别显示与音频播放。
从以上描述中,显而易见这里所公开的发明提供了用于执行表示多媒体信息的组合数据的逆离散余弦变换的新颖的、加速的及优越的计算机系统。如熟悉本技术的人员所能理解的,本发明可不脱离其主要特征、而以其它特定形式实施,从而所描述的实施例并不限制本发明的范围。以下的权利要求指明本发明的范围,并且进入这些权利要求的等效意义与范围内的所有变型都包含在它们的范围之内。
                        附录A
为了实现8×8逆离散余弦变换(iDCT),在8×8矩阵的列与行上应用一维Arai-Agui-Nakajima iDCT算法。在本实施例中,利用单指令多数据(SIMD)指令集来实现本发明。在SIMD指令集中,使用了在4个分开的16位值上运算的指令。为了将8×8矩阵分成4个数据值,选择了以下结构:
     M1     M2
     M3     M4
以这一结构,可将矩阵的转置实现如下:
     M1     M2                  M1t      M3t
                 ——转置—→
     M3     M4                  M2t      M4t
整个8×8的实现提供在以下程序清单中。提供了用代码执行的步骤的概述以便简化代码的阅读:
1.预定标:16次组合乘法
2.列0:偶数部分
3.列0:奇数部分
4.列0:输出蝶形
5.列1:偶数部分
6.列1:奇数部分
7.列1:输出蝶形
8.转置:M4部分
9.转置:M3部分
10.列1:偶数部分(转置后)
11.列1:奇数部分(转置后)
12.列1:输出蝶形(转置后)
13.转置:M2部分
14.转置:M1部分
15.列0:偶数部分(转置后)
16.列0:奇数部分(转置后)
17.列0:输出蝶形(转置后)
18.清除其中:a.列0表示前四列而列1表示其余四列。b.偶数部分表示使用偶下标元素的Arai-Agui-Nakajima iDCT算法部分c.奇数部分表示使用奇下标元素的Arai-Agui-Nakajima iDCT算法部分;以及d.输出蝶形表示使用偶数与奇数部分的结果生成一维iDCT的Arai-Agui-Nakajima iDCT算法的结束步骤。
6.0. 二维iDCT代码清单
;esi-输入及输出数据指针
;将输入数据转置,并且将8×8矩阵中的每个
16位元素在对齐    
;即以11...1110000格式
;如果iDCT是I宏块,则需要将0.5加到DC分量上。
;(矩阵的元素[0][0])
.nolist
include iammx.inc                     ;IAMMX仿真器宏
MMWORD TEXTEQU<DWORD>
.list
.586
.model flac
_DATA SEGMENT PARA PUBLIC USE32′DATA′
x0005000200010001       DQ 0005000200010001h
x0040000000000000   DQ 40000000000000h
x5a825a825a825a82  DW 5a82h,5a82h,5a82h,5a82h;23170
x539f539f539f539f  DW 539fh,539fh,539fh,539fh;21407
x4546454645464546  DW 4546h,4546h,4546h,4546h;17734
x61f861f861f861f8  DW 61f8h,61f8h,61f8h,61f8h;25080
scratch1 DQ 0
scratch3 DQ 0
scratch5 DQ 0
scratch7 DQ 0
;只用于调试    
x0 DQ 0
preSC DW 16384,22725,21407,19266,16384,12873,8867,4520

    DW 22725,31521,29692,26722,22725,17855,12299,6270

    DW 21407,29692,27969,25172,21407,16819,11585,5906

    DW 19266,26722,25172,22654,19266,15137,10426,5315

    DW 16384,22725,21407,19266,16384,12873,8867,4520
    DW 12873,17855,16819,15137,25746,20228,13933,7103

    DW 17739,24598,23170,20853,17734,13933,9597,4892

    DW 18081,25080,23624,21261,18081,14206,9785,4988
				
				<dp n="d16"/>
_DATA ENDS
_TEXT SEGMENT PARA PUBLIC USE32′CODE′
COMMENT  
void idct8x8aan(

    int16 *src result);
public_idct8x8aan
_idct8x8aan proc near
push ebp
lea ecx,[preSC]
mov ebp,esp
push esi
mov esi,DWORD PTR[ebp+8]       ;源
;槽
;列0:偶部分
;利用V4,V12,V0,V8生成V22..V25
movq mmo,mmword ptr[ecx+8*12]           ;第一个mul有可能与iHuff

                            ;中的去量化一起进行
module?     —
;槽
pmulhw mm0,mmword ptr[esi+8*12];V12
;槽
movq mm1,mmword ptr[ecx+8*4]
;槽
pmulhw mm1,mmword ptr[esi+8*4];V4
;槽
movq mm3,mmword ptr[ecx+8*0]
psraw mm0,1                       ;t64=t66
pmulhw mm3,mmword ptr[esi+8*0];V0
;槽
				
				<dp n="d17"/>
movq mm5,mmword ptr[ecx+8*8]
movq mm2,mm1                        ;复制V4
pmulhw mm5,mmword ptr[esi+8*8];V8
psubsw mm1,mm0                         ;V16
pmulhw mm1,mmword ptr x5a825a825a825a82;23170->V18
paddsw mm2,mm0                         ;V17
movq mm0,mm2                        ;复制V17
psraw mm2,1                         ;t75=t82
psraw mm0,2                         ;t72
movq mm4,mm3                        ;复制V0
paddsw mm3,mm5                         ;V19
psubsw mm4,mm5                         ;V20;mm5释放
;moved from the block below
movq mm7,mmword ptr[ecx+8*10]
psraw mm3,1                         ;t74=t81
movq mm6,mm3                        ;复制t74=t81
psraw mm4,2                         ;t77=t79
psubsw mm1,-mm0                         ;V21;mm0释放
paddsw,mm3,mm2                         ;V22
movq mm5,mm1                        ;复制V21
paddsw mm1,mm4                          ;V23
movq mmword ptr[esi+8*4],mm3        ;V22
psubsw mm4,mm5                          ;V24;mm5释放
movq mmword ptr[esi+8*12],mm1       ;V23
psubsw mm6,mm2                          ;V25;mm2释放
movq mmword ptr[esi+8*0],mm4        ;V24
;槽
;在下一个块中使mm6保持活跃
;movq mmword ptr[esi+8*8],mm6      ;V25
				
				<dp n="d18"/>
;列0:奇部分
;使用V2,V6,V10,V14产生V31,V39,V40,V41
;moved above
;movq mm7,mmword ptr[ecx+8*10]
pmulhw mm7,mmword ptr[esi+8*10];V10
;槽
movq mm0,mmword ptr[ecx+8*6]
;槽
pmulhw mm0,mmword ptr[esi+8*6];V6
;槽    
movq mm5,mmword ptr[ecx+8*2]
movq mm3,mm7                        ;复制V10
pmulhw mm5,mmword ptr[esi+8*2];V2
;槽
movq mm4,mmword ptr [ecx+8*14]
psubsw mm7,mm0                        ;V26
pmulhw mm4,mmword ptr[esi+8*14];V14
paddsw mm3,mm0                        ;V29;释放mm0
movq mm1,mm7                        ;复制V26
psraw mm3,1                         ;t91=t94
pmulhw mm7,mmword ptr x539f539f539f539f;V33
psraw mm1,1                         ;t96
movq mm0,mm5                        ;复制V2
psraw mm4,2                         ;t85=t87
paddsw mm5,mm4                        ;V27
psubsw mm0,mm4                        ;V28;释放mm4
movq mm2,mm0                        ;复制V28
psraw mm5,1                         ;t90=t93
				
				<dp n="d19"/>
pmulhw mm0,mmword ptr x4546454645464546;V35
psraw mm2,1                          ;t97
movq mm4,mm5                         ;复制t90=t93
psubsw mm1,mm2                          ;V32;释放mm2
pmulhw mm1,mmword ptr x61f861f861f861f8;V36
psllw mm7,1                          ;t107
paddsw mm5,mm3                          ;V31
psubsw mm4,mm3                          ;V30;释放mm3
pmulhw mm4,mmword ptr x5a825a825a825a82;V34
nop ;槽
psubsw mm0,mm1                          ;V38
psubsw mm1,mm7                          ;V37;释放mm7
psllw mm1,1                           ;t114
;从下一块移动
movq mm3,mm6                         ;复制V25
;从下一块移动
movq mm7,mmword ptr[esi+8*4]          ;V22
psllw mm0,1                           ;t110
psubsw mm0._mm5                           ;V39(下一块仍需要mm5)
psllw mm4,2                           ;t112
;从下一块移动
movq mm2,mmword ptr[esi+8*12]        ;V23
psubsw mm4,mm0                            ;V40
paddsw mm1,mm4                            ;V41;释放mm0
;从下一块移动    
psllw mm2,1                            ;t117=t125
;列0:蝶形输出
;move adove
;movq mm3,mm6                         ;复制V25
;movq mm7,mmword ptr[esi+8*4]         ;V22
;movq mm2,mmword ptr[esi+8*12]        ;V23
				
				<dp n="d20"/>
;psllw mm2,1                         ;t117=t125
psubsw mm6,mm1                             ;tm6
paddsw mm3,mm1                             ;tm8;释放mm1
movq mm1,mm7                          ;复制V22
paddsw mm7,mm5                             ;tm0
movq mmword ptr[esi+8*8],mm3       ;tm8;释mm3
psubsw mm1,mm5                             ;tm14;释放mm5
movq mmword ptr[esi+8*6],mm6          ;tm6;释放mm6
movq mm3,mm2                          ;复制t117=t125
movq mm6,mmword ptr[esi+8*0]          ;V24
paddsw mm2,mm0                             ;tm2
movq mmword ptr[esi+8*0],mm7       ;tm0;释mm7
psubsw mm3,mm0                             ;tm12;释放mm0
movq mmword ptr[esi+8*14],mm1         ;tm14;释放mm1
psllw mm6,1                           ;t119=t123
movq mmword ptr[esi+8*2],mm2          ;tm2;释放mm2
movq mm0,mm6                          ;复制t119=t123
movq.mmword ptr_[esi+8*12],mm3     ;tm12;释放mm3
paddsw mm6,mm4                             ;tm4
;从下一块移动
movq mm1,mmword ptr[ecx+8*5]
psubsw mm0,mm4                             ;tm10;释mm4
;从下一块移动
pmulhw mm1,mmword ptr[esi+8*5];V5
;槽
movq mmword ptr[esi+8*4],mm6               ;tm4;释放mm6
;槽
movq mmword ptr[esi+8*10],mm0           ;tm10;释放mm0
;槽
				
				<dp n="d21"/>
;列1:偶数部分
;利用V5,V13,V1,V9产生V56..V59
;移到前一块    
;movq mm1,mmword ptr[ecx+8*5]
;pmulhw mm1,mmword ptr[asi+8*5];V5
movq mm7,mmword ptr[ecx+8*13]
psllw mm1,1                           ;t128=t130
pmulhw mm7,mmword ptr[esi+8*13];V13
movq mm2,mm1                          ;复制t128=t130
movq mm3,mmword ptr[ecx+8*1]
;槽
pmulhw mm3,mmword ptr[esi+8*1];V1
;槽
movq mm5,mmword ptr[ecx+8*9]
psubsw mm1,mm7                           ;V50
pmulhw mm5,mmword ptr[esi+8*9];V9
paddsw mm2,mm7                           ;V51
pmulhw mm1,mmword ptr x5a825a825a825a82  ;23170->V52
movq mm6,mm2                         ;复制V51
psraw mm2,1                          ;t138=t144
movq mm4,mm3                         ;复制V1
psraw mm6,2                              ;t136
paddsw mm3,mm5                           ;V53
psubsw mm4,mm5                           ;V54;mm5释放
movq mm7,mm3                         ;复制V53
;从下一块移动
movq mm0,mmword ptr[ecx+8*11]
psraw mm4,1                          ;t140=t142
psubsw mm1,mm6                           ;V55;mm6释放
paddsw mm3,mm2                           ;V56
				
				<dp n="d22"/>
movq mm5,mm4                        ;复制t140=t142
paddsw mm4,mm1                      ;V57
movq mmword ptr[esi+8*5],mm3        ;V56
psubsw mm5,mm1                      ;V58;mm1释放
movq mmword ptr[esi+8*13],mm4       ;V57
psubsw mm7,mm2                      ;V59;mm2释放
movq mmword ptr[esi+8*9],mm5        ;V58
;槽
;keep mm7 alive all along the next block
;movq mmword ptr[esi+8*1],mm7      ;V59
;moved above
;movq mm0,mmword ptr[ecx+8*11]
pmulhw mm0,mmword ptr[esi+8*11];V11
;槽
movq mm6,mmword ptr[ecx+8*7]
;槽
pmulhw mm6,mmword ptr[esi+8*7];V7
;槽

              -
movq mm4,mmword ptr[ecx+8*15]
movq mm3,mm0                        ;复制V11
pmulhw mm4,mmword ptr[esi+8*15];V15
;槽
movq mm5,mmword ptr[ecx+8*3]
psllw mm6,1                         ;t146=t152
pmulhw mm5,mmword ptr[esi+8*3];V3
paddsw mm0,mm6                          ;V63
;注:V15计算具有校正步骤;
;这是重新位移该结果使之更接近预期
结果的‘magic’常量
				
				<dp n="d23"/>
;在稍后阶段当该数实际上乘以16时,通过
;进行该校正步骤可将该魔常数重新定义
以更进一步减少误差
paddw mm4,mmword ptr x0005000200010001
psubsw mm3,mm6                             ;V60;释放mm6
psraw mm0,1                          ;t154=t156
movq mm1,mm3                         ;复制V60
pmulhw mm1,mmword ptr x539f539f539f539f;V67
movq mm6,mm5                         ;复制V3
psraw mm4,2                          ;t148=t150
;slot
paddsw mm5,mm4                            ;V61
psubsw mm6,mm4                            ;V62;释放mm4
movq mm4,mm5                         ;复制V61
psllw mm1,1                          ;t169
paddsw mm5,mm0                            ;V65->结果
psubsw mm4,mm0                            ;V64;释放mm0
pmulhw mm4,mmword ptr x5a825a825a825a82;V68
psraw mm3,1                          ;t158
psubsw mm3,mm6                            ;V66
movq mm2,mm5                    ;复制V65
pmulhw mm3,mmword ptr x61f861f861f861f8;V70
psllw mm6,1                          ;t165
pmulhw mm6,mmword ptr x4546454645464546;V69
psraw mm2,1                          ;t172
;moved from next block    
movq mm0,mmword ptr[esi+8*5]         ;V56
psllw mm4,1                          ;t174
;moved from next block
psraw mm0,1                          ;t177=t188
				
				<dp n="d24"/>
nop;槽
psubsw mm6,mm3                               ;V72
psubsw mm3,mm1                               ;V71;释放mm1
psubsw mm6,mm2                               ;V73;释放mm2
;moved from next block    
psraw mm5,1                             ;t178=t189
psubsw mm4,mm6                               ;V74
;moved from next block
movq mm1,mm0                            ;复制t177=t188
paddsw mm3,mm4                               ;V75
;moved from next block
paddsw mm0,mm5                               ;tm1
;location
; 5-V56
;13-V57
; 9-V58
; X-V59,mm7
; X-V65,mm5
; X-V73,mm6
; X-V74,mm4
; X-V75,mm3
;free mm0,mm1 &amp; mm2
;move above
;movq mm0,mmword ptr[esi+8*5]         ;V56
;psllw mm0,1                          ;t177=t188!new!!
;psllw mm5,1                          ;t178=t189!new!!
;movq mm1,mm0                         ;复制t177=t188
;paddsw mm0,mm5                             ;tm1
movq mm2,mmword ptr[esi+8*13]          ;V57
psubsw mm1,mm5                              ;tm15;释放mm5
movq mmword ptr[esi+8*1],mm0           ;tm1;释放mm0
psraw mm7,1                              ;t182=t184!new!!
;将该结果保存起来作为在转置中直接使用的
;movq mmword ptr[esi+8*15],mm1          ;tm15;释放mm1
movq mm5,mm7                           ;复制t182=t184
				
				<dp n="d25"/>
psubsw mm7,mm3                               ;tm7
paddsw mm5,mm3                               ;tm9;释mm3
;slot
movq mm0,mmword ptr[esi+8*9]            ;V58
movq mm3,mm2                            ;复制V57
movq mmword ptr[esi+8*7],mm7            ;tm7;释mm7
psubsw mm3,mm6                               ;tm13
paddsw mm2,mm6                               ;tm3;释放mm6
;从转置向上移动
movq mm7,mm3
;从转置向上移动
punpcklwd mm3,mm1
movq mm6,mm0                            ;复制V58
movq mmword ptr[esi+8*3],mm2            ;tm3;释放mm2
paddsw mm0,mm4                               ;tm5
psubsw mm6,mm4                               ;tm11;释放mm4
;从转置向上移动
punpckhwd mm7,mm1
movq mmword-ptr[esi+8*5],mm0            ;tm5;释放mm0
;从转置向上移动
movq mm2,mm5
;转置-M4部分
;---------      ---------
;|M1|M2|       |M1′|M3′|
;--------- -->  ---------
;|M3|M4|       |M2′|M4′|
;---------      ---------
;两种选择:使用全mmword方案,使在进行转置没有存储
;之前调度下列代码,或者使用更快的
;半mmword存储(在可能时)
movdf dword ptr[esi+8*9+4|,mm3;tmt9的MS部分
				
				<dp n="d26"/>
punpcklwd mm5,mm6
movdf dword ptr[esi+8*13+4],mm7;tmt13的MS部分
punpckhwd mm2,mm6
movdf dword ptr[esi+8*9],mm5          ;tmt9的LS部分
punpckhdq mm5,mm3                     ;释放mm3
movdf dword ptr[esi+8*13],mm2         ;tmt13的LS部分
punpckhdq mm2,mm7                     ;释放mm7
;从M3转置向上移动
movq mm0,mmword ptr[esi+8*8]
;slot
;从M3转置向上移动
movq mm1,mmword ptr[esi+8*10]
;moved up from the M3 transpose
movq mm3,mm0
;重排其余的数据,并用2次mmword写入将它写入
movq mmword ptr[esi+8*11],mm5     ;tmt11
;从M3转置向上移动
punpcklwd mm0,mm1
movq mmword ptr[esi+8*15],mm2          ;tmt15
;moyed up from the M3 transpose
punpckhwd mm3,mm1
;转置-M3部分
;移向前一代码段
;movq mm0,mmword ptr[esi+8*8]
;movq mm1, mmword ptr[esi+8*10]
;movq mm3,mm0
;punpcklwd mm0,mm1
;punpckhwd mm3,mm1
movq mm6,mmword ptr[esi+8*12]
;槽
movq mm4,mmword ptr[esi+8*14]
movq mm2,mm6
				
				<dp n="d27"/>
;重排数据,并且以4个dword写该转置的较低部分
punpcklwd mm6,mm4
movq mm1,mm0
punpckhdq mm1,mm6
movq mm7,mm3
punpckhwd mm2,mm4;释放mm4
;槽
punpckldq mm0,mm6                        ;释mm6
;槽
;从下一块移动
movq mm4,mmword ptr[esi+8*13]            ;tmt13
punpckldq mm3,mm2
punpckhdq mm7,mm2                        ;释放mm2
;从下一块移动    
movq mm5,mm3                             ;复制tmt5
;列1:偶数部分(转置后)
;moved above
;movq mm5 -mm3                           ;复制tmt5
;mcvq mm4,mmword ptr[esi+8*13]          ;tmt13
psubsw mm3,mm4                           ;V134
;槽
pmulhw mm3,mmword ptr x5a825a825a825a82  ;23170->V136
;槽
movq mm6,mmword ptr[esi+8+9]       ;tmt9
paddsw mm5,mm4                           ;V135;mm4释放
movq mm4,mm0                       ;复制tmt1
paddsw mm0,mm6                           ;V137
psubsw mm4,mm6                           ;V138;mm6释放
psllw mm3,2                        ;t290
				
				<dp n="d28"/>
psubsw·mm3,mm5                                 ;V139
movq mm6,mm0                              ;复制V137
paddsw mm0,mm5                                  ;V140
movq mm2,mm4                              ;复制V138
paddsw mm2,mm3                                  ;V141
psubsw mm4,mm3                                  ;V142;mm3释放
movq mmword ptr[esi+8*9],mm0              ;V140
psubsw mm6,mm5                                  ;V143;mm5释放
;从下一块移动
movq mm0,mmword ptr[esi+8*11]             ;tmt11
;槽
movq mmword ptr[esi+8*13],mm2;V141
;从下一块移动
movq mm2,mm0                              ;复制tmt11
;列1:奇数部分(转置后)
;移向前一块
;movq mm0,mmword ptr[esi+8*11]           ;tmt11
;movq mm2,mm0                            ;复制tmt11
movq mm5,mmword ptr[esi+8*15]             ;tmt15
psubsw mm0,mm7                                 ;V144
movq mm3,mm0                              ;复制V144
paddsw mm2,mm7                                 ;V147;释mm7
pmulhw mm0,mmword ptr x539f539f539f539f            ;21407->V151
movq mm7,mm1                              ;复制tmt3
paddsw mm7,mm5                                 ;V145
psubsw mm1,mm5                                 ;V146;释放mm5
psubsw mm3,mm1                                 ;V150
movq mm5,mm7                              ;复制V145
pmulhw mm1,mmword ptr x4546454645464546            ;17734->V153
				
				<dp n="d29"/>
psubsw mm5,mm2                                 ;V148
pmulhw mm3,mmword ptr x61f861f861f861f8        ;25080->V154
psllw mm0,2                           ;t311
pmulhw mm5,mmword ptr x5a825a825a825a82        ;23170->V152
paddsw mm7,mm2                              ;V149;释放mm2
psllw mm1,1                           ;t313
nop;槽
;用上述nop在此冻结一个时钟
;该nop清除一些位    
movq mm2,mm3                         ;复制V154
psubsw mm3,mm0                              ;V155;释放mm0
psubsw mm1,mm2                              ;V156;释放mm2
;moved from he next block
movq mm2,mm6                         ;复制V143
;moved from he next block
movq mm0,mmword ptr[esi+8+13]        ;V141
psllw mm1,1                                 ;t315
psubsw mm1,mm7                                   ;V157(keep V149)
psllw mm5,2                                 ;t317
psubsw,mm5,mm1                                  ;V158
psllw mm3,1                                 ;t319
paddsw mm3,mm5                                   ;V159
;槽
;列1:蝶形输出(转置后)
;移至前一块
;movq mm2,mm6                              ;复制V143
;movq mm0,mmword ptr[esi+8*13]             ;V141
psubsw mm2,mm3                                   ;V163
paddsw mm6,mm3                                   ;V164;释放mm3
movq mm3,mm4                                ;复制V142
psubsw mm4,mm5                                   ;V165;释放mm5
				
				<dp n="d30"/>
movq mmword ptr scratch7,mm2               ;out7
psraw mm6,4
psraw mm4,4
paddsw mm3,mm5                                  ;V162
movq mm2,mmword ptr[esi+8*9]               ;V140
movq mm5,mm0                               ;复制V141
;in order not to preculate this line up,we read[esi+8*9]very
near to this location
movq mmword ptr[esi+8*9],mm6               ;out9
paddsw mm0,mm1                                  ;V161
movq mmword ptr scratch5,mm3               ;out5
psubsw mm5,mm1                                  ;V166;释放mm1
movq mmword ptr[esi+8*11],mm4              ;out11
psraw mm5,4
movq mmword ptr scratch3,mm0               ;out3
movq mm4,mm2                               ;复制V140
movq mmword ptr[esi+8*13],mm5              ;out13
paddsw mm2,mm7                                  ;V160
;从下一块移动
movq mm0,mmword ptr[esi+8*1] 
psubsw mm4,mm7                                  ;V167;释放mm7
;从下一块移动
movq mm7,mmword ptr[esi+8*3]
psraw mm4,4
movq mmword ptr scratch1,mm2               ;out1
;从下一块移动
movq mm1,mm0
movq mmword ptr[esi+8*15],mm4              ;out15
;从下一块移动
punpcklwd mm0,mm7
				
				<dp n="d31"/>
;转置-M2部分
;moved up to the prev block
;movq mm0,mmword ptr[esi+8*1]
;movq mm7,mmword ptr[esi+8*3]
;movq mm1,mm0
;punpcklwd mm0,mm7
movq mm5,mmword ptr[esi+8*5]
punpckhwd mm1,mm7
movq mm4,mmword ptr[esi+8*7]
movq mm3,mm5
;重排数据并  以4个dword写转置的较低部分
in 4 dwords
movdf dword ptr[esi+8*8],mm0            ;tmt8的LS部分
punpcklwd mm5,mm4
movdf dword ptr[esi+8*12],mm1      ;tmt12的LS部分
punpckhwd mm3,mm4
movdf dword ptr[esi+8*8+4 ],mm5    ;tmt8的MS部分
punpckhdq mm0,mm5                       ;tmt10
movdf dword ptr[esi+8*12+4],mm3         ;tmt12的MS部分
punpckhdq mm1,mm3                       ;tmt14
;转置-M1部分
movq mm7,mmword ptr[esi]
;槽
movq mm2,mmword ptr[esi+8*2]
movq mm6,mm7
movq mm5,mmword ptr[esi+8*4]
punpcklwd mm7,mm2
movq mm4,mmword ptr[esi+8*6]
punpckhwd mm6,mm2;free mm2
movq mm3,mm5
punpcklwd mm5,mm4
				
				<dp n="d32"/>
paddsw mm5,mm3                ;out2
psraw mm1, 4
movq mmword ptr[esi],mm7           ;out0;释放mm7
psraw mm5,4
movq mmword ptr[esi+8*14],mm1           ;out14;释放mm1
psubsw mm2,mm3           ;out12;释放mm3
movq mmword ptr[esi+8*2]  ,mm5           ;out2;释放mm5
psraw mm2,4
;向前一块移动
movq mm4,mmword ptr scratch7
;向前一块移动
psraw mm0,4
movq mmword ptr[esi+8*12],mm2   ;out12 ;释放mm2
Psraw mm6,4
;将该数据移回正确位置
;向前一块移动
;movq mm0,mmword ptr scratch3
;movq mm6,mmword ptr scratch5
;movq mm4,mmword ptr scratch7
;psraw mm0,4
;psraw mm6,4
movq mm1,mmword ptr scratch1
psraw mm4,4
movq mmword ptr[esi+8*3],mm0        ;out3
psraw mm1,4
movq mmword ptr[esi+8*5],mm6        ;out5
;槽
movq mmword ptr[esi+8*7],mm4        ;out7
;槽
movq mmword ptr[esi+8*1],mm1        ;out1
				
				<dp n="d33"/>
psllw mm0,2            ;t266
movq mmword ptr[esi+8*0],mm1      ;保存V115
psllw mm5,1            ;t268
psubsw mm5,mm4               ;V122
psubsw mm4,mm0               ;V121;释放mm0
psllw mm5,1                  ;t270
;槽
psubsw mm5,mm1                    ;V123;释放mm1
psllw mm2,2                  ;t272
psubsw mm2,mm5                    ;V124(保持V123)
psllw mm4,1                  ;t274
movq mmword ptr[esi+8*2],mm5             ;保存V123;释放mm5
paddsw mm4,mm2                    ;V125(保持V124)
;列0:偶数部分(转置后)
movq mm0,mmword ptr[esi+8*12]            ;tmt12
movq mm3,mm6                 ;复制tmt4
psubsw mm6,mm0                    ;V100
paddsw mm3,mm0                    ;V101;释放mm0
pmulhw mm6,mmword ptr x5a825a825a825a82             ;23170->V102
movq mm5,mm7                 ;复制tmt0
movq mm1,mmword ptr[esi+8*8]      ;tmt8
;槽
paddsw mm7,mm1               ;V103
psubsw mm5,mm1               ;V104;释放mm1
movq mm0,mm7            ;复制V103
psllw mm6,2             ;t245
paddsw mm7,mm3               ;V106
movq mm1,mm5            ;复制V104
psubsw mm6,mm3               ;V105
				
				<dp n="d34"/>
punpckhwd mm3,mm4;释放mm4
movq mm2,mm7
movq mm4,mm6
punpckldq mm7,mm5    ;tmt0
punpckhdq mm2,mm5    ;tmt2;释放mm5
;槽
;重排其余的数据并以2次mmword写对它进行写
punpckldq mm6,mm3    ;tmt4
;从下一移动
movq mm5,mm2         ;复制tmt2
punpckhdq mm4,mm3    ;tmt6;释放mm3
;从下一块移动
movq mm3,mm0         ;复制tmt10
;列0:奇数部分(转置后)
;向前一块移动
;movq mm3,mm0       ;复制tmt10
;movq mm5,mm2       ;复制tmt2
psubsw mm0,mm4             ;V110
paddsw mm3,mm4             ;V113;释放mm4
movq mm4,mm0         ;复制V110
paddsw mm2,mm1             ;V111
pmulhw mm0,mmword ptr x539f539f539f539f      ;21407->V117
psubsw mm5,mm1             ;V112;释放mm1
psubsw mm4,mm5             ;V116
movq mm1,mm2         ;复制V111
pmulhw mm5,mmword ptr x454645464546456       ;17734->V119
psubsw mm2,mm3             ;V114
pmulhw mm4,mmword ptr x61f861f861f861f8       ;25080->V120
paddsw mm1,mm3             ;V115;释放mm3
pmulhw mm2,mmword ptr x5a825a825a825a82       ;23170->V118
				
				<dp n="d35"/>
psubsw mm0,mm3            ; V109;释放mm3
paddsw mm5,mm6            ; V107
psubsw mm1,mm6            ;V108;释放mm6
;列0:蝶形输出(转置后)
movq mm3,mm1   ;复制V108
paddsw mm1,mm2      ;out4
psraw mm1,4
psubsw mm3,mm2      ;out10;释放mm2
psraw mm3,4
movq mm6,mm0   ;复制V109
movq mmword ptr[esi+8*4],mm1       ;out4;释放mm1
psubsw mm0,mm4      ;out6
movq mmword ptr[esi+8*10],mm3      ;out10;释放mm3
psraw mm0,4
paddsw mm6,mm4       ;out8;释放mm4
movq mm1,mm7   ;复制V106
movq mmword ptr[esi+8*6],mm0       ;out6;释放mm0
psraw mm6,4
movq mm4;mmword ptr[esi+8*0] ;V115
;槽
movq mmword ptr[esi+8*8],mm6       ;out8;释放mm6
movq mm2,mm5   ;复制V107
movq mm3,mmword ptr[esi+8*2]  ;V123
paddsw mm7,mm4        ;out0
;从下一块移动
movq mm0,mmword ptr scratch3
psraw mm7,4
;从下一块移动
movq mm6,mmword ptr scratch5
psubsw mm1,mm4        ;out14;释放mm4    
				
				<dp n="d36"/>
;槽
emms
pop esi
pop ebp
ret 0
_idct8x8aan  ENDP
_TEXT ENDS
END

Claims (13)

1.一种使用一个组合SIMD指令集对一个组合数据的二维矩阵进行二维逆离散余弦变换的计算机实现方法,该方法包括:
通过使用组合高位乘法SIMD运算对所述组合数据的每一个乘以预定的定标因子以产生一个定标数据矩阵,从而定标所述组合数据的矩阵;
对所述定标数据的矩阵中的列执行Winograd逆快速傅里叶变换,以产生一个定标、变换数据的矩阵;
转置所述定标、变换数据的矩阵以产生一个转置矩阵;
对所述转置矩阵中的列执行第二次Winograd逆快速傅里叶变换,以产生一个转置、变换矩阵;以及
再次转置所述转置、变换矩阵,以完成所述二维逆离散余弦变换。
2.权利要求1中所要求的计算机实现方法,其中所述组合数据的矩阵是一个8×8矩阵,而所述Winograd逆快速傅里叶变换是一个16点快速傅里叶变换。
3.权利要求2中所要求的计算机实现方法,其中对所述8×8矩阵中的所述列的其中之一执行逆离散傅里叶变换包括:
对所述列中的四个数据值执行第一次逆离散傅里叶变换;
临时存储所述第一次逆离散傅里叶变换的结果;
对所述列中的其余四个数据值执行第二次逆离散傅里叶变换;以及
结合所述第一次和第二次逆离散傅里叶变换的结果以产生变换数据的一个完全列。
4.权利要求3中所要求的计算机实现方法,其中所述8×8矩阵中的所述数据值以定点、组合数据格式存储在多媒体寄存器内。
5.权利要求4中所要求的计算机实现方法,其中所述组合数据的矩阵是通过对多媒体MPEG数据的锯齿形扫描来获取的。
6.权利要求5中所要求的计算机实现方法,其中所述转置所述矩阵的步骤是在所述多媒体MPEG数据的所述锯齿形扫描期间执行的。
7.权利要求4中所要求的计算机实现方法,其中存储在所述多媒体寄存器中的所述组合、定点数据利用SIMD组合右移运算被移位,以保持所述数据的有效数字位。
8.权利要求4中所要求的计算机实现方法,其中存储在所述多媒体寄存器中的所述组合、定点数据利用SIMD组合左移运算被移位,以保持所述数据的有效数字位。
9.权利要求4中所要求的计算机实现方法,其中构成所述组合数据的矩阵的各数据元素表示一个视频图象的帧的一个象素。
10.一种执行如权利要求1中所要求的二维逆离散余弦变换的计算机实现方法,其中所述组合数据的二维矩阵是一个8×8矩阵,它包括:左上象限M1、右上象限M2、左下象限M3、和右下象限M4,每一个所述象限包括一个2×2组合数据矩阵,而且所述对所述矩阵的转置包括:
转置每一个所述2×2矩阵以产生一个左上转置矩阵M1t、一个右上转置矩阵M2t、一个左下转置矩阵M3t、和一个右下转置矩阵M4t;以及
将所述右上转置矩阵M2t和所述左下转置矩阵M3t调换。
11.一种执行如权利要求10中所要求的二维逆离散余弦变换的计算机实现方法,其中所述组合数据的二维矩阵是一个8×8矩阵,它包括:左上象限M1、右上象限M2、左下象限M3、和右下象限M4,每一个所述象限包括一个2×2组合数据矩阵,而且所述对所述矩阵的转置包括:
转置每一个所述2×2矩阵以产生一个左上转置矩阵M1t、一个右上转置矩阵M2t、一个左下转置矩阵M3t、和一个右下转置矩阵M4t;以及
将所述右上转置矩阵M2t和所述左下转置矩阵M3t调换。
12.一种对MPEG数据的二维矩阵执行二维逆离散余弦变换的计算机实现方法,该MPEG数据是通过利用一个组合的SIMD指令集来进行锯齿形扫描而获得的,该方法包括:
在所述锯齿形扫描期间转置所述MPEG数据的二维矩阵,以产生一个组合数据的转置矩阵;
通过使用组合高位乘法SIMD运算对所述组合数据的每一个乘以预定的定标因子以产生一个定标数据矩阵,从而定标所述组合数据的转置矩阵;
对所述定标数据的矩阵中的列执行Arai-Agui-Nakajima逆离散余弦变换,以产生一个定标、变换数据的矩阵;
转置所述定标、变换数据的矩阵以产生一个转置矩阵;和
对所述转置矩阵中的列执行第二次Arai-Agui-Nakajima逆离散余弦变换,以完成所述二维逆离散余弦变换。
13.一种对一个MPEG数据的8×8矩阵执行二维逆离散余弦变换的计算机实现方法,该MPEG数据是通过利用一个组合的SIMD指令集来进行锯齿形扫描而获得的,所述8×8矩阵包括:左上象限M1、右上象限M2、左下象限M3、和右下象限M4,每一个所述象限包括一个2×2组合数据矩阵,该方法包括:
转置每一个所述2×2矩阵以产生一个左上转置矩阵M1t、一个右上转置矩阵M2t、一个左下转置矩阵M3t、和一个右下转置矩阵M4t
将所述右上转置矩阵M2t和所述左下转置矩阵M3t调换,以产生一个转置的8×8矩阵;
通过使用组合高位乘法SIMD运算对所述组合数据的每一个乘以预定的定标因子以产生一个定标数据的8×8矩阵,从而定标所述转置的8×8矩阵;
对所述定标数据的8×8矩阵中的列执行Winograd逆快速傅里叶变换或Arai-Agui-Nakajima逆离散余弦变换,以产生一个定标、变换数据的矩阵;
再次转置所述定标、变换数据的矩阵以产生一个8×8再次转置矩阵;
对所述8×8再次转置矩阵中的列执行第二次Winograd逆快速傅里叶变换或Arai-Agui-Nakajima逆离散余弦变换,以完成所述二维逆离散余弦变换。
CN97194236A 1996-03-05 1997-03-05 对二维矩阵进行二维逆离散余弦变换的计算机实现方法 Expired - Lifetime CN1132114C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/610,872 US5754456A (en) 1996-03-05 1996-03-05 Computer system performing an inverse cosine transfer function for use with multimedia information
US08/610,872 1996-03-05

Publications (2)

Publication Number Publication Date
CN1217077A CN1217077A (zh) 1999-05-19
CN1132114C true CN1132114C (zh) 2003-12-24

Family

ID=24446757

Family Applications (1)

Application Number Title Priority Date Filing Date
CN97194236A Expired - Lifetime CN1132114C (zh) 1996-03-05 1997-03-05 对二维矩阵进行二维逆离散余弦变换的计算机实现方法

Country Status (6)

Country Link
US (1) US5754456A (zh)
EP (2) EP0885421A4 (zh)
KR (1) KR100331136B1 (zh)
CN (1) CN1132114C (zh)
AU (1) AU2531097A (zh)
WO (1) WO1997033236A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101131686B (zh) * 2006-08-25 2010-06-02 辉达公司 二维变换的方法及系统、视频处理系统和变换引擎电路

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6134270A (en) * 1997-06-13 2000-10-17 Sun Microsystems, Inc. Scaled forward and inverse discrete cosine transform and video compression/decompression systems employing the same
EP0983557B1 (en) 1998-03-18 2019-10-02 Koninklijke Philips N.V. Data processing device for executing in parallel additions and subtractions on packed data
US6473534B1 (en) * 1999-01-06 2002-10-29 Hewlett-Packard Company Multiplier-free implementation of DCT used in image and video processing and compression
US6772186B1 (en) 1999-07-19 2004-08-03 Renesas Technology Corp. Multimedia multiply-adder
US6421696B1 (en) 1999-08-17 2002-07-16 Advanced Micro Devices, Inc. System and method for high speed execution of Fast Fourier Transforms utilizing SIMD instructions on a general purpose processor
US6832232B1 (en) * 2000-07-10 2004-12-14 Advanced Micro Devices, Inc. Dual-block inverse discrete cosine transform method
US6742010B1 (en) * 2000-07-10 2004-05-25 Advanced Micro Devices, Inc. Dual-block discrete consine transform method
US6973469B1 (en) 2001-02-01 2005-12-06 Advanced Micro Devices, Inc. Two-dimensional discrete cosine transform using SIMD instructions
US6996595B2 (en) * 2001-05-16 2006-02-07 Qualcomm Incorporated Apparatus and method for consolidating output data from a plurality of processors
FI111592B (fi) * 2001-09-06 2003-08-15 Oulun Yliopisto Menetelmä ja laite peräkkäisten kuvien koodaamiseksi
KR100475246B1 (ko) * 2001-10-23 2005-03-10 한국전자통신연구원 고정 소수점 코드 변환을 이용한 엠펙1 오디오 화일의디코딩 성능 향상 방법 및 이를 위한 기록 매체
US7007055B2 (en) * 2002-03-12 2006-02-28 Intel Corporation Method of performing NxM Discrete Cosine Transform
US7003461B2 (en) 2002-07-09 2006-02-21 Renesas Technology Corporation Method and apparatus for an adaptive codebook search in a speech processing system
US7376280B2 (en) * 2002-07-14 2008-05-20 Apple Inc Video encoding and decoding
US7379956B2 (en) * 2002-07-14 2008-05-27 Apple Inc. Encoding and decoding data arrays
US8699810B2 (en) * 2006-06-26 2014-04-15 Qualcomm Incorporated Efficient fixed-point approximations of forward and inverse discrete cosine transforms
KR100963459B1 (ko) * 2006-06-26 2010-06-17 퀄컴 인코포레이티드 순이산 및 역이산 코사인 변환의 효율적인 고정 소수점 근사
US8385424B2 (en) * 2006-06-26 2013-02-26 Qualcomm Incorporated Reduction of errors during computation of inverse discrete cosine transform
US8300698B2 (en) * 2006-10-23 2012-10-30 Qualcomm Incorporated Signalling of maximum dynamic range of inverse discrete cosine transform
GB2444744B (en) * 2006-12-12 2011-05-25 Advanced Risc Mach Ltd Apparatus and method for performing re-arrangement operations on data
US8237865B2 (en) * 2006-12-18 2012-08-07 Emanuele Salvucci Multi-compatible low and high dynamic range and high bit-depth texture and video encoding system
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
CN110221807B (zh) * 2019-06-06 2021-08-03 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质
US20220207342A1 (en) * 2020-12-30 2022-06-30 Industrial Technology Research Institute Data compression method, data compression system and operation method of deep learning acceleration chip
US11941397B1 (en) * 2022-05-31 2024-03-26 Amazon Technologies, Inc. Machine instructions for decoding acceleration including fuse input instructions to fuse multiple JPEG data blocks together to take advantage of a full SIMD width of a processor

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG45281A1 (en) * 1992-06-26 1998-01-16 Discovision Ass Method and arrangement for transformation of signals from a frequency to a time domain
US5483475A (en) * 1993-09-15 1996-01-09 Industrial Technology Research Institute Fast pipelined 2-D discrete cosine transform architecture
JP3697717B2 (ja) * 1993-09-24 2005-09-21 ソニー株式会社 2次元離散コサイン変換装置および2次元逆離散コサイン変換装置
US5428567A (en) * 1994-05-09 1995-06-27 International Business Machines Corporation Memory structure to minimize rounding/trunction errors for n-dimensional image transformation
US5610849A (en) * 1995-06-23 1997-03-11 United Microelectronics Corporation Real time two-dimensional discrete cosine transform/inverse discrete cosine transform circuit

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101131686B (zh) * 2006-08-25 2010-06-02 辉达公司 二维变换的方法及系统、视频处理系统和变换引擎电路

Also Published As

Publication number Publication date
US5754456A (en) 1998-05-19
CN1217077A (zh) 1999-05-19
KR100331136B1 (ko) 2002-05-09
EP0885421A1 (en) 1998-12-23
EP1363198A3 (en) 2005-11-02
AU2531097A (en) 1997-09-22
EP1363198A2 (en) 2003-11-19
WO1997033236A1 (en) 1997-09-12
EP0885421A4 (en) 1999-08-25
KR19990087552A (ko) 1999-12-27

Similar Documents

Publication Publication Date Title
CN1132114C (zh) 对二维矩阵进行二维逆离散余弦变换的计算机实现方法
US7272622B2 (en) Method and apparatus for parallel shift right merge of data
US7685212B2 (en) Fast full search motion estimation with SIMD merge instruction
Lee et al. MediaStation 5000: Integrating video and audio
TWI270007B (en) Method and apparatus for shuffling data
CN1126065C (zh) 压缩和解压缩图象
CN1791222A (zh) 对有损及无损的2-d数据压缩的可逆转换
CN1697328A (zh) 快速视频编解码变换实现
JPH10222476A (ja) Mpegオーディオデコーディング装置およびそのデコーディング方法
US5757432A (en) Manipulating video and audio signals using a processor which supports SIMD instructions
US5754457A (en) Method for performing an inverse cosine transfer function for use with multimedia information
Garrido et al. An FPGA-based architecture for the versatile video coding multiple transform selection core
Dias et al. Unified transform architecture for AVC, AVS, VC-1 and HEVC high-performance codecs
Basoglu et al. Single‐chip processor for media applications: the MAP1000™
Panchbhaiyye et al. An efficient FIFO based accelerator for convolutional neural networks
Shahbahrami et al. Matrix register file and extended subwords: two techniques for embedded media processors
Sun et al. A low-cost VLSI architecture of multiple-size IDCT for H. 265/HEVC
De Neve et al. GPU-assisted decoding of video samples represented in the YCoCg-R color space
CN102043605B (zh) 一种多媒体变换乘法器及其处理方法
An et al. A computation structure for 2-D DCT watermarking
JP2004201047A (ja) 画像処理装置、プログラム及び記憶媒体
CN1275393C (zh) 数据格式代码转换装置
Yang et al. An efficient two-dimensional inverse discrete cosine transform algorithm for HDTV receivers
June An Introduction to Digital Video Data Compression in Java
Nguyen et al. Designing and Implementing a 2D Integer DCT Hardware Accelerator Fully Compatible with Versatile Video Coding

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20031224