CN102016829B - 计算逆向离散余弦变换期间的误差减少 - Google Patents
计算逆向离散余弦变换期间的误差减少 Download PDFInfo
- Publication number
- CN102016829B CN102016829B CN200780023784.8A CN200780023784A CN102016829B CN 102016829 B CN102016829 B CN 102016829B CN 200780023784 A CN200780023784 A CN 200780023784A CN 102016829 B CN102016829 B CN 102016829B
- Authority
- CN
- China
- Prior art keywords
- coefficient
- value
- matrix
- butterfly structure
- module
- 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.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
- H04N19/625—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/147—Discrete 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
- H04N19/45—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder performing compensation of the inverse transform mismatch, e.g. Inverse Discrete Cosine Transform [IDCT] mismatch
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
- H04N19/61—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Mathematical Physics (AREA)
- Discrete Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (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
本发明描述使用定点计算来减少离散余弦变换的计算期间的舍入误差的技术。根据这些技术,通过使用对定点数的一系列的蝶形结构运算来计算系数向量的逆向离散余弦变换。接下来,将中点偏差值和补充偏差值加到经按比例缩放系数矩阵的DC系数。接下来,对所述所得经按比例缩放系数矩阵应用逆向离散余弦变换。接着使所述所得矩阵中的值右移,以便导出像素分量值矩阵。如本文中所描述,将所述补充偏差值加到所述DC系数减少了可归因于此右移的舍入误差。因此,使用这些技术解压缩的数字媒体文件的最终版本可更接近地类似数字媒体文件的原始版本。
Description
本申请案主张2006年6月26日申请的第60/816,697号美国临时申请案、2006年8月30日申请的第60/841,362号美国临时申请案、2006年9月25日申请的第60/847,194号美国临时申请案、2006年10月16日申请的第60/829,669号美国临时申请案以及2006年12月11日申请的第60/869,530号美国临时申请案的权益,上述临时申请案的整个内容以引用的方式并入本文中。
技术领域
本发明涉及计算机图形和多媒体,且更明确地说,涉及图形、图像和视频信息的压缩。
背景技术
许多现存的图像和视频编码标准使用压缩技术,以便允许高分辨率图像和视频作为相对紧凑的文件或数据流而存储或传输。此些编码标准包含联合照片专家组(JointPhotographic Experts Group,JPEG)、运动图片专家组(Moving Pictures Experts Group,MPEG)-1、MPEG-2、MPEG-4部分2、H.261、H.263以及其它图像或视频编码标准。
根据许多这些标准,使用“空间”编码对视频帧进行压缩。这些帧可以是原始帧(即,i帧),或可以是由使用运动补偿的时间编码过程产生的残余帧。在空间编码期间,帧分裂成大小相等的像素区块。举例来说,未经压缩的帧可分裂成一组8×8个像素区块。对于每一像素区块,将像素分量分成像素分量值矩阵。举例来说,可将每一像素区块划分成Y像素分量值矩阵、U像素分量值矩阵以及V像素分量值矩阵。在此实例中,Y像素分量值指示亮度值,且U和V像素分量值表示色度值。
此外,在空间编码期间,对正被编码的帧中的每一像素分量值矩阵应用前向离散余弦变换(forward discrete cosine transform,FDCT)。理想的一维FDCT由以下等式定义:
其中s是N个原始值的阵列,t是N个经变换值的阵列,且系数c由以下等式给出
1≤k≤N-1。
理想的二维FDCT由以下公式定义:
其中s是N个原始值的阵列,t是N个经变换值的阵列,且c(i,j)由c(i,j)=c(i)c(j)给出,且其中如在一维情况下那样定义c(k)。
当使用FDCT来变换像素分量值区块时,产生系数矩阵。可接着使用(例如)霍夫曼码或算术码来对此系数矩阵进行量化和编码。视频位流表示对一系列未经压缩的视频帧中的一系列视频帧中的所有像素分量值区块执行此过程的组合结果。
可通过使此过程反向来从视频位流导出未经压缩的视频帧。明确地说,对位流中的每一系数矩阵进行解压缩,且对所述经解压缩的值进行解量化,以便导出经变换系数矩阵。接着对每一经变换系数矩阵应用逆向离散余弦变换(inverse discrete cosine transform,“IDCT”),以便导出像素分量值矩阵。理想的一维IDCT由以下等式定义:
其中s是N个原始值的阵列,t是N个经变换值的阵列,且系数c由以下等式给出
1≤k≤N-1。
理想的二维IDCT由以下公式定义:
接着将所得的像素分量值矩阵重组成像素区块,并重组这些像素区块以形成经解码的帧。如果所述经解码的帧是i帧,那么所述帧现被完全解码。然而,如果未经压缩的帧是预测帧或双预测帧,那么所述经解码的帧仅仅是经解码的残余帧。通过使用与经解码的帧相关联的运动向量来构造重构帧,且接着将所述重构帧加到经解码的残余帧,来产生完整的帧。
在理想情况下,通过使用FDCT对像素分量值区块进行编码或使用IDCT对像素分量值区块进行解码,不会丢失信息。因此,在这些理想情况下,视频帧的经解码版本等同于所述视频帧的原始版本。然而,因为FDCT和IDCT的计算涉及乘法运算的实数和有效数字的使用,所以计算FDCT或IDCT在计算方面可能较为困难。因此,常常使用精确度有限的数字来近似表示FDCT和IDCT中所使用的实数。由于使用精确度有限的数字来表示实数值而产生舍入误差。此外,量化和解量化可能造成额外误差。
压缩和解压缩过程中的误差可导致未经压缩的原始帧与未经压缩的最终帧之间的显著差异。举例来说,未经压缩的最终帧中的色彩可能不同于未经压缩的原始帧中的色彩。此外,在对所预测帧序列进行编码和解码期间,IDCT的编码器的实施与IDCT的解码器的实施之间的失配所导致的误差可累积。这些累积误差通常被称作“IDCT漂移”。
发明内容
本发明描述使用定点计算来近似表示逆向离散余弦变换的计算的技术。根据这些技术,通过使经编码系数矩阵中的系数乘以比例因子来产生经按比例缩放系数矩阵。接下来,通过将中点偏差值和补充偏差值加到经按比例缩放系数矩阵的DC系数而产生有偏系数矩阵。接着使用定点算术对所述所得的有偏系数矩阵应用变换。接着使所述所得矩阵中的值右移,以便导出像素分量值矩阵。接着组合所述像素分量值矩阵,以创建像素矩阵。通过这些技术产生的像素矩阵接近地类似使用理想的逆向离散余弦变换(“IDCT”)进行解压缩所得的像素矩阵。
在一方面,一种方法包括使用对定点数的一系列蝶形结构运算来对源系数向量应用变换,以便产生经变换系数向量。所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值。所述方法还包含致使媒体呈现单元基于所述经变换系数向量中的经变换系数而输出可听或可视信号。由所述蝶形结构运算中的一者产生的结果与将由使用无限制精确度算术的等效蝶形结构运算产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值。
在另一方面,一种装置包括逆向变换模块,所述逆向变换模块使用对定点数的一系列蝶形结构运算来对源系数向量应用变换,以便产生经变换系数向量。所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值。媒体呈现单元能够基于所述经变换系数向量中的经变换系数而呈现可听或可视信号。由所述蝶形结构运算中的一者产生的结果与将由使用无限制精确度算术的等效蝶形结构运算产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值。
在另一方面,一种装置包括用于使用对定点数的一系列蝶形结构运算来对源系数向量应用变换以便计算经变换系数向量的装置。所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值。媒体呈现单元能够基于所述经变换系数向量中的经变换系数而呈现可听或可视信号。由所述蝶形结构运算中的一者产生的结果与将由使用无限制精确度算术的等效蝶形结构运算产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值。
在另一方面,一种计算机可读媒体包括指令。当被执行时,所述指令致使处理器使用对定点数一系列蝶形结构运算来对系数向量应用变换,以便产生经变换系数向量。所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值。所述指令还致使所述处理器致使媒体呈现单元基于经变换值向量中的经变换值而输出可听或可视信号。由所述蝶形结构运算中的一者产生的结果与将由使用无限制精确度算术的等效蝶形结构运算产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值。
在一些情况下,所述计算机可读媒体可形成可出售给制造商且/或可在装置中使用的计算机程序产品的一部分。所述计算机程序产品可包含所述计算机可读媒体,且在一些情况下,还可包含包装材料。
在附图和下文的描述内容中陈述一个或一个以上实例的细节。本发明的其它特征、目标和优点将从所述描述内容和图式且从权利要求书变得明显。
附图说明
图1是说明对媒体文件进行编码和解码的示范性装置的框图。
图2是说明编码模块的示范性细节的框图。
图3是说明解码模块的示范性细节的框图。
图4是说明编码模块的示范性操作的流程图。
图5是说明解码模块的示范性操作的流程图。
图6是说明逆向离散余弦变换(“IDCT”)模块的示范性细节的框图。
图7是说明IDCT模块的示范性操作的流程图。
图8是说明前向离散余弦变换(“FDCT”)模块的示范性细节的框图。
图9是说明FDCT模块的示范性操作的流程图。
图10是说明第一示范性一维变换的流程图。
图11是说明第二示范性一维变换的流程图。
图12是说明IDCT模块所使用的示范性经按比例缩放的一维变换的流程图。
具体实施方式
图1是说明对媒体文件进行编码和解码的示范性装置2的框图。装置2可包括个人计算机、移动无线电话(mobile radiotelephone)、服务器、网络设备、整合到运输工具中的计算机、视频游戏平台、便携型视频游戏装置、计算机工作站、计算机信息站(computer kiosk)、数字标牌(digital signage)、大型计算机、电视机顶盒、网络电话、个人数字助理、视频游戏平台、移动媒体播放器、家用媒体播放器、数字视频投影仪、个人媒体播放器(例如,iPod),或另一类型的电子装置。
装置2可包含用以产生媒体数据的媒体源4。媒体源4可包括用以俘获图像数据的数字视频或静态照片摄像机。媒体源4可内建于装置2中,或可作为外围装置附接到装置2。媒体源4还可包括用以记录音频数据的麦克风。媒体源4可向处理器6提供媒体数据。处理器6可包括数字信号处理器(digital signal processor,“DSP”)、微处理器,或某一其它类型的集成电路。
当处理器6接收到来自媒体源4的媒体数据时,编码模块8可对所述媒体数据进行编码。编码模块8可包括由处理器6执行的软件。或者,编码模块8可包括处理器6内对媒体数据进行编码的专用硬件。在又一替代方案中,编码模块8可包括用以对媒体数据进行编码的软件与硬件的任何组合。
编码模块8可将经编码的媒体数据存储在媒体储存库(media repository)10中。媒体储存库10可包括快闪存储器、随机存取存储器、硬盘驱动器,或某一其它类型的易失性或非易失性数据存储单元。
解码模块12可从媒体储存库10中检索经编码的媒体数据。解码模块12可包括由 处理器6执行的软件。或者,解码模块12可包括处理器6内对经编码的媒体数据进行解码的专用硬件。在又一替代方案中,解码模块12可包括合作以对经编码的媒体数据进行解码的软件与硬件的组合。
装置2中的呈现驱动器13致使媒体呈现单元14呈现由解码模块12解码的媒体数据。举例来说,媒体呈现单元14可包括呈现图像或视频媒体数据的计算机监视器。在另一实例中,媒体呈现单元14可包括呈现音频媒体数据的音频输出装置(例如,扬声器)。媒体呈现单元14可整合到装置2中,或可作为外围装置经由有线或无线链路连接到装置2。呈现驱动器13可包括装置驱动器或其它软件、硬件或固件单元,或致使媒体呈现单元14呈现媒体数据的某一其它机构。
装置2还可包括网络接口16。网络接口16可促进装置2与计算机网络之间经由有线或无线链路的通信。举例来说,网络接口16可促进装置2与移动电话网络之间的通信。装置2可经由网络接口16接收媒体文件。举例来说,装置2可通过网络接口16接收照片、视频剪辑、流式传输视频(例如,电视、视频会议、电影)、音频剪辑(例如,铃声、歌曲、MP3文件)、流式传输音频(例如,数字无线电台、语音呼叫等)。当网络接口16接收到媒体文件或视频位流时,网络接口16可将媒体文件或视频位流存储在媒体储存库10中。
可依据图片序列而描述视频信号,所述图片序列包含帧(整个图片)或字段(例如,包括帧的奇数行或偶数行的图片)。另外,每一帧或字段可包含两个或两个以上片段,或帧或字段的子部分。如本文中单独或结合其它词语而使用,术语“帧”可指代图片、帧、字段或其片段。
当编码模块8对一系列视频帧进行编码时,编码模块8可通过选择所述视频帧中的视频帧作为“i帧”而开始。举例来说,编码模块8可选择每一第八帧作为i帧。i帧是不参考其它帧的帧。在选择i帧之后,编码模块8使用“空间编码”来对所述i帧进行编码。此外,编码模块8可使用“时间编码”来对其余的帧进行编码。
为了使用空间编码来对帧进行编码,编码模块8可使帧数据分裂成像素区块。举例来说,编码模块8可使帧数据分裂成具有八个像素宽且八个像素高的像素区块(即,每一像素区块含有64个像素)。编码模块8可接着将每一像素区块中的像素的像素分量值分成单独的像素分量值矩阵。像素的像素分量值是表征所述像素的外观的值。举例来说,每一像素可指定Y像素分量值、Cr像素分量值和Cb像素分量值。Y像素分量值指示像素的亮度,Cr像素分量值指示像素的红色色度,且Cb像素分量值指示像素的蓝色色度。在此实例中,当编码模块8分离像素区块的像素分量值时,编码模块8可获得Y像素分量值矩阵、Cr像素分量值矩阵和Cb像素分量值矩阵。
在将像素分量值分成像素分量值矩阵之后,编码模块8通过使所述像素分量值矩阵中的像素分量值左移而产生经调节系数矩阵。编码模块8可通过使像素分量值矩阵中的像素分量值左移而首先产生经调节系数矩阵,来针对像素分量值矩阵产生经变换系数矩阵。编码模块8接着使用定点算术对所述经调节系数矩阵重复应用一维变换,进而产生系数矩阵。在一些实施方案中,编码模块8可接着通过使所述经变换系数矩阵按比例缩放一组比例因子而产生经变换系数矩阵。这些比例因子中的每一者均为整数值。已经以可使用简单的有理数来近似表示一维变换内的因子的方式选择了比例因子。在不使用按比例缩放的实施方案中,通过应用所述变换而产生的系数矩阵是经变换系数矩阵。
经变换系数矩阵中的每一系数近似表示通过对经编码系数矩阵应用理想的二维前向离散余弦变换(“FDCT”)将产生的值矩阵中的对应值。理想的一维FDCT由以下等式定义:
其中s是N个原始值的阵列,t是N个经变换值的阵列,且系数c由以下等式给出
1≤k≤N-1。
理想的二维FDCT由以下公式定义:
其中s是N个原始值的阵列,t是N个经变换值的阵列,且c(i,j)由c(i,j)=c(i)c(j)给出,且其中如在一维情况下那样定义c(k)。
在导出经变换系数矩阵之后,编码模块8通过量化所述经变换系数矩阵中的系数而产生经量化系数矩阵。量化经变换的系数可减少与经变换系数矩阵中的高频系数相关联的信息的量。在产生经量化系数矩阵之后,编码模块8可对经量化系数矩阵应用熵编码方案(entropy encoding scheme)。举例来说,编码模块8可对系数矩阵中的经量化系数 应用霍夫曼编码方案。当编码模块8对经量化系数矩阵中的每一者应用熵编码方案时,编码模块8可输出经编码的矩阵作为视频位流的一部分。
为了使用时间编码来对帧进行编码,编码模块8可将所述帧划分成“宏区块”。视所使用的编码标准而定,这些宏区块可具有固定的或可变的大小,且可为重叠或非重叠的。举例来说,每一宏区块可为16×16像素区块。对于帧中的每一宏区块,编码模块8可尝试识别一个或一个以上参考帧中的源宏区块。视编码标准而定,所述参考帧可以是i帧、预测帧或双预测帧。如果编码模块8能够识别参考帧中的源宏区块,那么编码模块8记录所述宏区块的运动向量。所述运动向量包含指示所述宏区块相对于所识别的源宏区块的水平位移的x值,以及指示所述宏区块相对于所识别的源宏区块的垂直位移的y值。如果编码模块8不能够识别所述宏区块的源宏区块,那么可不要求编码模块8记录所述宏区块的运动向量。接下来,编码模块8产生“重构”帧。所述重构帧含有由于根据当前帧的所记录的运动向量从参考帧移动宏区块而将产生的帧。在产生重构帧之后,编码模块8将重构帧的每一像素中的像素分量值从当前帧的对应像素中的对应像素分量值减去,从而产生“残余”帧。编码模块8可接着使用熵编码方案来压缩用于所述当前帧的宏区块的运动向量。此外,编码模块8使用上文所描述的空间编码技术来压缩所述残余帧。
解码模块12可与编码模块8执行类似的过程,但过程是相反的。举例来说,为了执行空间解码过程,解码模块12可对经编码的视频位流中的每一经编码的经量化系数矩阵应用熵解码方案。解码模块12可接着对每一经量化系数矩阵中的系数进行解量化,进而针对每一经量化系数矩阵产生经解量化系数矩阵。对于每一经量化系数矩阵,解码模块12通过按比例缩放所述经量化系数矩阵而产生经按比例缩放系数矩阵。
在产生所述经按比例缩放系数矩阵之后,解码模块12通过将中点偏差值和补充偏差值加到所述矩阵的DC系数而产生有偏系数矩阵。所述矩阵的DC系数是等于所述矩阵中的其它系数的平均值的系数。通常,DC系数是所述矩阵左上角处的系数。如下文详细描述,将所述偏差值加到所述DC系数可减少解码模块12使通过对矩阵的每一行和每一列应用逆向离散余弦变换因子分解而产生的值右移时的舍入误差。这些舍入误差可归因于以下事实:这些右移是计算上更昂贵的除法运算的替代方案,且定点算术中的右移运算并不总是产生与除法运算相同的结果。
在解码模块12产生有偏系数矩阵之后,解码模块12使用定点算术来针对所述有偏系数矩阵而产生经变换系数矩阵。解码模块12通过对有偏系数矩阵重复应用一维变换而产生所述经变换系数矩阵。举例来说,解码模块12可通过对有偏系数矩阵的每一行
向量应用一维变换而产生中间系数矩阵。在此实例中,解码模块12可接着通过对所述中间系数矩阵中的每一列向量应用一维变换而产生经变换系数矩阵。
解码模块12可使用一系列“蝶形结构运算(butterfly structure operation)”来应用此一维变换。一般来说,“蝶形结构运算”指代以下运算:通过使第一输入值乘以第一常数而产生第一中间值,通过使所述第一输入值乘以第二常数而产生第二中间值,通过使第二输入值乘以所述第一常数而产生第三中间值,通过使所述第二输入值乘以所述第二常数而产生第四中间值,通过使所述第一中间值与所述第三中间值相加而产生第一输出值,且通过使所述第二中间值与所述第四中间值的负数相加而产生第二输出值。在蝶形运算中,所述常数可以是任何有理数或无理数,包含1。在图10、图11和图12的实例中所说明的变换中展示实例蝶形结构运算。
在具有可用于表示数字的有限数目个位的系统中,在蝶形结构运算中执行与无理常数的相乘可能是不切实际的。因此,解码模块12可通过使值乘以近似表示无理常数的有理分数,来近似表示与无理常数的相乘。为了使值有效地乘以有理分数,解码模块12可使所述值乘以所述有理分数的分子,且接着使所得值右移所述有理分数的分母的log2。如上述所提及,右移运算可能导致舍入误差,因为定点算术中的右移运算并不总是产生与对应除法运算相等的结果。
如下文详细阐释,解码模块12可使用一些有理分数中的负分子,以便减少舍入误差。负分子的使用可排除在使值右移之前添加中点偏差值的需要。这可能是有利的,因为添加中点偏差值可能对逆向离散余弦变换的应用添加不必要的复杂性。
当解码模块12已产生经变换系数矩阵时,解码模块12通过使所述经变换系数矩阵中的每一系数右移某一数目个位置而产生经调节系数矩阵,所述数目等于通过应用所述变换而添加的位的数目加上通过按比例缩放经解量化系数矩阵的系数而添加的位的数目。解码模块12可接着通过截割所述经调节系数矩阵中的系数而产生经截割系数矩阵。截割经调节系数矩阵中的系数修改了经调节的系数,使得所述经调节的系数在像素分量值的容许范围内。因此,可将所述经截割系数矩阵表征为像素分量值矩阵。
在产生所述像素分量值矩阵之后,解码模块12可通过组合所述像素分量值矩阵与存储像素区块的其它像素分量值的矩阵而产生像素区块。接下来,解码模块12可将像素区块组合成视频帧。
为了对预测帧进行解码,解码模块12可在所述预测帧的残余图像中使用上文所描述的空间解码技术来对经量化系数矩阵进行解码。此外,解码模块12可使用熵解码方案来对预测帧的运动向量进行解码。接下来,解码模块12可通过根据所述运动向量“移 动”预测帧的参考帧的宏区块而产生重构帧。在产生重构帧之后,解码模块12将经解码的残余帧的每一像素中的像素分量值加到重构帧的对应像素中的对应像素分量值。此加法的结果是经重构的预测帧。
本发明中所描述的技术可提供若干优点。举例来说,离散余弦变换和逆向离散余弦变换的计算期间的舍入误差的减少可减少图像数据中的可视误差,且可减少音频数据中的可听误差。此外,因为这些技术可应用于定点计算,所以这些技术可在较小、较不复杂的装置中应用,例如移动电话、个人数字助理和个人媒体播放器。明确地说,可使用在尾数部分中具有极有限数目个位(例如,三个位)同时仍遵守电子电气工程师学会(Institute of Electrical and Electronics Engineers,IEEE)标准1180所指定的精确度要求的定点数来应用所述技术,所述标准1180的整个内容以引用的方式并入本文中。此外,这些技术可应用于包含以下格式的格式:国际电信联盟标准化部门(InternationalTelecommunication Union Standardization Sector,ITU-T)建议H.261、H.263、H.264、T.81(JPEG)以及国际标准化组织(International Organization for Standardization,ISO)/MEC运动图片专家组(MPEG)-1、MPEG-2和MPEG-4部分2媒体格式。
图2是说明编码模块8的实例细节的框图。编码模块8可包括一组“模块”。这些模块可包括编码模块8的软件指令的子集。或者,这些模块可包括专用硬件。在另一替代方案中,这些模块可包括软件指令和专用硬件。
如图2的实例中所说明,编码模块8包含帧控制模块20,帧控制模块20控制编码模块8将视频帧作为i帧、预测帧还是双预测帧来处理。举例来说,当编码模块8接收到视频帧时,帧控制模块20可确定与所述视频帧相关联的位流旗标指示所述帧是i帧、预测帧,还是双预测帧。如果帧控制模块20确定位流旗标指示所述帧是i帧,那么帧控制模块20可致使所述视频帧由立即对所述视频帧执行空间编码的一组模块来处理。另一方面,如果帧控制模块20确定所述帧是预测帧或双预测帧,那么帧控制模块20可致使所述视频帧由执行时间编码的一组模块来处理。
编码模块8包含对视频帧应用空间编码的一系列模块。这些模块包含区块分离器模块(block splitter module)22、分量提取模块(component extraction module)24、前向变换模块26、量化模块28以及熵编码模块30。区块分离器模块22可接收来自媒体源4、网络接口16或另一来源的未经编码的视频帧。当区块分离器模块22接收到未经编码的视频帧时,区块分离器模块22可将所述帧分成像素区块。区块分离器模块22可将像素区块提供给分量提取模块24。
当分量提取模块24接收到像素区块时,分量提取模块24可将每一像素的像素分量 值转换成不同的色彩格式。举例来说,分量提取模块24可将每一像素从红-绿-蓝(RGB)色彩格式转换成YCrCb色彩格式。在将区块中的像素转换成不同色彩格式之后,分量提取模块24可将区块中的像素的像素分量值分成像素分量值矩阵。举例来说,分量提取模块24可从一个像素区块中提取Y值矩阵、Cr值矩阵和Cb值矩阵。Y值指定像素的亮度,Cr值指定像素的红色色度,且Cb值指定像素的蓝色色度。当分量提取模块24已提取了像素分量值矩阵时,分量提取模块24可将所述矩阵中的每一者分别提供给前向变换模块26。
当前向变换模块26接收到像素分量值矩阵时,前向变换模块26产生经变换系数矩阵。此经按比例缩放系数矩阵中的每一系数近似表示通过使用理想的前向离散余弦变换来变换像素分量值矩阵将产生的系数。
前向变换模块26使用定点算术对像素分量值矩阵应用一维变换。使用定点算术在一些情况下可能是有利的。举例来说,例如移动电话的较小装置可能不包含执行浮点算术所需的浮点单元。前向变换模块26可通过使像素分量值中的每一者左移而开始产生经按比例缩放系数矩阵的过程。举例来说,前向变换模块26可通过使像素分量值中的每一者左移应用一维变换时前向变换模块26所使用的数字的定点表示的精确度位的数目(即,尾数位的数目)加上通过按比例缩放由于应用所述变换而产生的经变换系数而移除的精确度位的数目,来产生经调节系数矩阵。在使像素分量值中的每一者左移之后,前向变换模块26可对经调节系数矩阵的行向量中的每一者执行变换。对经调节系数矩阵的行向量中的每一者执行离散余弦变换会产生中间系数矩阵。接下来,前向变换模块26可对所述中间系数矩阵的列向量中的每一者执行变换。对中间系数矩阵的列向量中的每一者执行变换会产生经变换系数矩阵。
在产生经变换系数矩阵之后,前向变换模块26使经变换系数矩阵中的不同位置处的经变换系数按比例缩放不同的比例因子。如下文所描述,解码模块12可在逆向变换的应用中使用这些比例因子的倒数。当前向变换模块26已完成使经变换系数按比例缩放所述比例因子时,前向变换模块26可将所得的经按比例缩放系数矩阵输出到量化模块28。
当量化模块28接收到来自前向变换模块26的系数矩阵时,量化模块28可量化所述经按比例缩放的系数。量化模块28可依据所使用的编码标准,以多种方式来量化经按比例缩放的系数。举例来说,根据MPEG-4部分2标准,量化模块28可使用以下量化矩阵来量化i帧的经按比例缩放系数矩阵中的系数:
8 | 17 | 18 | 19 | 21 | 23 | 25 | 27 |
17 | 18 | 19 | 21 | 23 | 25 | 27 | 28 |
20 | 21 | 22 | 23 | 24 | 26 | 28 | 30 |
21 | 22 | 23 | 24 | 26 | 28 | 30 | 32 |
22 | 23 | 24 | 26 | 28 | 30 | 32 | 35 |
23 | 24 | 26 | 28 | 30 | 32 | 35 | 38 |
25 | 26 | 28 | 30 | 32 | 35 | 38 | 41 |
27 | 28 | 30 | 32 | 35 | 38 | 41 | 45 |
此外,在此实例中,量化模块28可使用以下量化矩阵来量化预测帧或双预测帧的经按比例缩放系数矩阵中的系数:
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 |
20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 |
21 | 22 | 23 | 24 | 26 | 27 | 28 | 30 |
22 | 23 | 24 | 26 | 27 | 28 | 30 | 31 |
23 | 24 | 25 | 27 | 28 | 30 | 31 | 33 |
在量化模块28产生经量化系数矩阵之后,熵编码模块30可使用熵编码方案来压缩所述经量化系数矩阵。为了使用熵编码方案来压缩经量化系数矩阵,熵编码模块30可通过采用系数的Z字形图案来将经量化的系数组织成向量。换句话说,熵编码模块30可以可预测方式将二维经量化系数矩阵中的所有经量化系数布置成经量化系数的一维向量。熵编码模块30可接着对经量化系数的所述向量应用熵编码方案,例如霍夫曼编码或算术编码。
编码模块8还包含用以执行视频帧的时间编码的一个或一个以上模块。如图2的实例中所说明,编码模块8包含运动估计模块32、重构帧产生模块34和残余帧产生模块36。运动估计模块32尝试针对当前视频帧中的每一宏区块而在参考图像中识别源宏区块。运动估计模块32可尝试通过搜索所述参考图像中与当前帧中的宏区块含有类似像素的宏区块,来识别所述当前帧中的所述宏区块的源宏区块。运动估计模块32可根据不同的编码标准来搜索不同大小的区域,以便识别当前帧中的宏区块的源宏区块。举例来说,运动估计模块32可在宽度为32个像素且高度为32个像素的区域内搜索源宏区块,其中当前宏区块位于所述搜索区域的中心。当运动估计模块32识别当前帧中的宏区块的源宏区块时,运动估计模块32计算所述当前帧中的所述宏区块的运动向量。所述当前帧中的所述宏区块的运动向量指定x值,所述x值指示所识别的源宏区块与当前 帧的所述宏区块之间的水平位置差异。在运动估计模块32已计算出运动向量或已无法为当前帧中的每一宏区块识别源宏区块时,运动估计模块32可将所计算出的当前帧的运动向量提供给重构帧产生模块34。
重构帧产生模块34可使用所述运动向量和参考帧来产生重构帧。重构帧产生模块34可通过将当前帧中的每一宏区块的运动向量应用于参考帧中的源宏区块而产生重构帧。实际上,重构帧产生模块34创建帧,在所述帧中,已使参考帧的宏区块“移动”到由当前帧的对应运动向量所指示的位置。
残余帧产生模块36可通过将重构帧中的像素分量值从当前帧中的对应像素分量值减去而产生残余帧。一般来说,残余帧与重构帧或当前帧相比包含较少信息。在残余帧产生模块36产生残余帧之后,残余帧产生模块36将残余帧提供给区块分离器模块22,以便开始对残余帧进行空间编码的过程。此外,运动估计模块32可将当前帧的运动向量提供给熵编码模块30,以便压缩所述运动向量。在对残余帧进行空间编码,且熵编码模块30已对运动向量进行编码之后,流输出模块38可对经空间编码的残余帧和经编码的运动向量进行格式化,以作为视频位流的一部分。
图3是说明解码模块12的示范性细节的框图。解码模块12可包括熵解码模块44、解量化模块46、逆向变换模块48、像素重构模块50、帧缓冲器51、区块组合器模块52、帧控制模块53、参考帧存储模块54、重构帧产生模块56以及预测帧产生模块58。这些模块中的一些模块或所有模块可包括解码模块12的软件指令的子集。或者,这些模块中的一些模块或所有模块可包括专用硬件或固件。在另一替代方案中,这些模块可包括软件指令和专用硬件或固件。
当解码模块12接收到含有视频帧的位流时,熵解码模块44可对视频帧中的经量化系数矩阵应用熵解码方案。所述位流可包含指示熵解码模块44对位流中的经量化系数矩阵应用哪种熵解码方案的值。此外,熵解码模块44可应用相同或不同的熵解码方案来对视频帧的运动向量进行解码。
在熵解码模块44对视频文件中的经量化系数矩阵应用熵解码方案之后,解量化模块46可对经量化系数矩阵的每一者中的系数进行解量化。视编码标准而定,解量化模块46可以多种方式对系数进行解量化。举例来说,根据MPEG-4部分2标准,解量化模块46可以两种不同方式来使用上文所列的两个量化矩阵。第一,解量化模块46可使用这些量化矩阵来执行H.263型解量化。在H.263型解量化中,解量化模块46从经量化的值QF[v][u]中获得重构系数F″[v][u],如下:
F″[v][u]:F″[v][u]=Sign(QF[v][u])×|F″[v][u]|
其仅涉及与量化器_标度相乘一次,且
第二,解量化模块46可使用这些量化矩阵来执行MPEG-1/2型解量化。在MPEG-1/2型解量化中,解量化模块46使用额外加权矩阵W[w][v][u],其中w指示正使用哪一加权矩阵:
其中:
当逆向变换模块48接收到经解量化系数矩阵时,逆向变换模块48产生像素分量矩阵,如下文详细描述,逆向变换模块48通过以下步骤来产生像素分量值矩阵:首先按比例缩放经解量化系数矩阵中的每一系数;将偏差值加到所述矩阵的DC系数;应用一系列一维离散余弦变换;使所得值右移;截割所述经右移的值;且接着输出所述经截割的值。
在逆向变换模块48输出像素分量值矩阵之后,像素重构模块50可通过组合所述像素分量值矩阵和与视频帧内的均等位置相关联的像素分量值矩阵而产生像素矩阵。举例来说,像素重构模块50可接收来自逆向变换模块48的Y像素分量值矩阵、Cb像素分量值矩阵和Cr像素分量值矩阵。这三个矩阵中的每一者可包含单个8×8像素区块的像素分量。所述像素中的每一者可包含Y像素分量值、Cb像素分量值和Cr像素分量值。在产生像素矩阵之后,像素重构模块50可将像素区块提供给区块组合器模块52。
当区块组合器模块52接收到像素区块时,区块组合器模块52可缓冲所述像素区块,直到区块组合器模块52接收到视频帧中的像素区块中的一些或所有像素区块为止。在接收到所述像素区块的一者或一者以上之后,区块组合器模块52可将所述像素区块组 合成视频帧,且可将所述视频帧输出到帧缓冲器51。所述视频帧可存储在帧缓冲器51中,直到所述视频帧由媒体呈现单元51显示为止。此外,区块组合器模块52可将所述视频帧输出到帧存储模块54。帧存储模块54中的视频帧可用作重构预测帧和双预测帧的参考帧。此外,帧存储模块54中的视频帧可以是重构预测帧和双预测帧中所使用的残余帧。
为了重构预测帧或双预测帧,解码模块12包含重构帧产生模块56。重构帧产生模块56接收来自熵解码模块44的经解码的运动向量。此外,重构帧产生模块56从帧存储模块54中检索当前帧的参考帧。重构帧产生模块56接着将宏区块从其在参考帧中的位置“移动”到由运动向量指示的位置中。重构帧通过以此方式移动宏区块而产生。在重构帧产生模块56产生重构帧之后,重构帧产生模块56将重构帧提供给预测帧产生模块58。
当预测帧产生模块58接收到临时帧时,预测帧产生模块58可从帧存储模块54中中检索当前帧的残余帧。在检索到残余帧之后,预测帧产生模块58可使残余帧与重构帧的每一像素中的对应色彩分量值相加。重构视频帧由此加法产生。接下来,预测帧产生模块58可将此重构帧输出到帧缓冲器51,以用于最后显示在媒体呈现单元14上。
图4是说明编码模块8的示范性操作的流程图。尽管以循序方式描述图4中所描述的操作,但应注意,所述操作可以流水线方式来执行。
最初,编码模块8接收未经编码的视频帧序列(60)。举例来说,编码模块8可接收来自媒体源4的呈像素组形式的未经编码的帧序列。当编码模块8接收到未经编码的帧序列时,编码模块8中的帧控制模块20可确定是将未经编码的帧序列中的当前帧编码为i帧还是编码为预测帧或双预测帧(62)。
如果帧控制模块20确定将当前帧编码为i帧,那么编码模块8中的区块分离器模块22可将当前帧分成像素区块(64)。举例来说,编码模块8可将当前帧分成2×2个、4×4个或8×8个像素区块。
在将当前帧分成像素区块之后,分量提取模块24可分离像素区块的每一者中的像素分量值(66)。因此,针对每一像素区块可能存在三个像素分量值区块:表示像素的亮度的Y值区块、表示像素的蓝色色度的Cb值区块以及表示像素的红色色度的Cr值区块。
编码模块8中的前向变换模块26可接着针对像素分量值矩阵中的每一者产生经按比例缩放系数矩阵(68)。这些经按比例缩放系数矩阵中的系数是通过对像素分量值矩阵中的相应矩阵使用理想的二维前向离散余弦变换将产生的值的近似值。
在前向变换模块26针对像素分量矩阵中的每一者产生经按比例缩放系数矩阵之后,编码模块8中的量化模块28可量化经按比例缩放系数矩阵的每一矩阵中的系数(70)。一旦量化模块28已量化每一经按比例缩放系数矩阵中的系数,熵编码模块30就可对经量化系数矩阵中的每一者执行熵编码过程(72)。举例来说,编码模块8可对每一经量化系数矩阵应用霍夫曼编码方案或算术编码方案。所述熵编码过程进一步压缩数据。然而,熵编码过程不会导致信息丢失。在对每一经量化系数矩阵执行熵编码过程之后,编码模块8中的流输出模块38可将经编码的经量化系数矩阵加到视频帧序列的位流(74)。在流输出模块38将经编码的矩阵加到所述位流之后,帧控制模块20可确定当前帧是否为帧序列的最后一个视频帧(76)。如果当前帧是帧序列的最后一个帧(76的“是”),那么编码模块8已完成对帧序列的编码(78)。另一方面,如果当前帧不是帧序列的最后一个帧(76的“否”),那么编码模块8可返回,且确定是否将新的当前帧编码为i帧(62)。
如果不将当前帧编码为i帧(62的“否”),那么编码模块8中的运动估计模块32可将当前帧划分成一组宏区块(80)。接下来,运动估计模块32可尝试针对当前帧中的宏区块的每一者而在一个或一个以上参考帧中识别源宏区块(82)。运动估计模块32可接着计算当前帧中的宏区块中运动估计模块32能够为其识别源宏区块的每一者的运动向量(84)。在运动估计模块32计算出运动向量之后,重构帧产生模块34使用所述运动向量来通过将参考帧中的所识别的宏区块“移动”到由所述运动向量指示的位置中而产生重构帧(86)。残余帧产生模块36可接着通过将重构帧中的像素分量值从当前帧中的对应像素分量值减去而产生当前帧的残余帧(88)。在残余帧产生模块36产生残余帧之后,熵编码模块30可使用熵编码方案来对当前帧的运动向量进行编码(90)。此外,可通过对残余帧应用步骤(66)到步骤(74)而对残余帧应用空间编码。
图5是说明解码模块12的示范性操作的流程图。尽管以循序方式描述图5中所描述的操作,但应注意,所述操作可以流水线方式来执行。
最初,解码模块12接收经编码的视频帧(100)。在接收到经编码的视频帧之后,解码模块12中的熵解码模块44可对经编码的帧内的数据区块执行熵解码过程(102)。熵解码模块44可执行等效于用于对帧进行编码的熵编码过程的熵解码过程。举例来说,如果编码模块8使用霍夫曼编码来对帧进行编码,那么熵解码模块44使用霍夫曼解码来对所述帧进行解码。由于对帧中的每一数据区块应用熵解码过程,因此熵解码模块44已产生一组经量化系数矩阵。
接下来,解码模块12中的解量化模块46可对经量化系数矩阵的每一矩阵中的系数 进行解量化(104)。在对经量化系数矩阵中的每一系数进行解量化之后,解码模块12中的逆向变换模块48产生像素分量值矩阵(106)。像素分量值矩阵的一者中的像素分量值是通过使用理想的二维逆向离散余弦变换对经量化系数矩阵的一者进行变换将产生的对应值的近似值。
当逆向变换模块48已针对系数矩阵的每一者计算出像素分量值矩阵时,解码模块12中的像素重构模块50可组合适当的像素分量值矩阵,以便创建像素区块(108)。举例来说,解码模块12可使Y值区块与相关联的Cr值区块和相关联的Cb值区块组合,以便创建YCrCb像素区块。在像素重构模块50已创建了像素区块之后,区块组合器模块52可将所述像素区块重组成视频帧(110)。
接下来,解码模块12中的帧控制模块53可确定当前帧是否为i帧(114)。如果当前帧是i帧(114的“是”),那么区块组合器模块52可将视频帧输出到帧缓冲器51(114)。另一方面,如果当前帧不是i帧(即,当前帧是预测帧或双预测帧)(114的“否”),那么熵解码模块44使用熵解码方案对所述当前帧的运动向量进行解码(116)。接下来,重构帧产生模块56使用经解码的运动向量和帧存储模块54中的一个或一个以上参考帧来产生重构帧(118)。预测帧产生模块58可接着使用所述重构帧和由区块组合器模块52产生的帧来产生重构帧(120)。
图6是说明逆向变换模块48的示范性细节的框图。如图6的实例中所说明,逆向变换模块48可包括输入模块140。输入模块140可接收来自解量化模块46的系数矩阵。举例来说,输入模块140可接收指针,所述指针指示装置2的存储器模块中存储所述系数矩阵的位置。或者,输入模块140可包含存储所述系数矩阵的内部数据结构。
当输入模块140接收到经解量化系数矩阵时,输入模块140可将所述系数矩阵提供给逆向变换模块48中的按比例缩放模块142。按比例缩放模块142通过按比例缩放所述经解量化系数矩阵中的每一系数而产生经按比例缩放系数矩阵。按比例缩放模块142可通过使每一系数左移被逆向变换模块146用来表示数字的定点表示的尾数位的数目,而按比例缩放经解量化系数矩阵中的系数。尾数位是小数点左侧的那些位(即,数字的小数部分)。以此方式,按比例缩放模块142将经解量化系数矩阵中的系数的表示有效地变换成具有适当数目个尾数位的定点表示。举例来说,如果逆向变换模块146使用包含三个尾数位的定点数,那么按比例缩放模块142通过使经解量化系数矩阵中的系数的每一者左移三个位置而产生经按比例缩放系数矩阵。
在按比例缩放模块142产生经按比例缩放系数矩阵之后,系数加偏差模块144可通过将中点偏差值和补充偏差值加到经按比例缩放系数矩阵的DC系数而产生有偏系数矩 阵。如上文所述,所述矩阵的DC系数通常是矩阵的左上位置处的系数。一般来说,DC系数表示矩阵中的其它系数的平均值。
补充偏差值是致使正误差和负误差平均起来量值相等且平均起来围绕零对称的值。举例来说,补充偏差值可以是正负号自适应偏差值(sign-adaptive bias value),其在DC系数非负时等于零,且在DC系数为负时等于负一。为了在16位处理器中将正负号自适应偏差值加到DC系数,系数加偏差模块144可使用以下公式:
DC_系数=DC_系数+(1<<(P+2))+(DC_系数>>15)。(1)
在公式(1)中,添加项(1<<(P+2))以提供中点偏差。P为常数,其指代逆向向量变换模块146所执行的变换中所使用的定点尾数位(即,在小数点右侧的位)的数目。将数字2加到P,因为右移模块148可使所有系数右移(P+3),其中数字“3”来自通过执行逆向离散余弦变换而添加的精确度位。为了详细阐述这一点,如果通过使1左移(P+2)而产生数字x,且通过使x右移(P+3)而产生数字z,那么z=1/2。(以其它方式陈述,2P+2/2P+3=20/21=1/2)。因此,将(1<<(P+2))加到DC系数等效于将(1<<(P+3))/2加到DC系数。
在公式(1)中,项(DC_系数>>15)使16位DC系数右移15个位置。其余的一个位指示DC系数的正负号。举例来说,假设DC系数为0b1111 1100 0011 0101。在此实例中,在正负号延伸的情况下,使DC系数右移15个位置会产生值0b1111 1111 1111 1111(十进制,-1)。类似地,如果DC系数为0b0111 1111 1111 1111,那么使DC系数右移15个位置会产生值0b0000 0000 0000 0000(十进制,0)。
在另一实例中,补充偏差值可以是抖动偏差值(dithering bias value)。抖动偏差值是等于-1或0的值。为了在16位处理器中将正负号抖动偏差值加到DC系数,IDCT模块34可使用以下公式:
DC_系数=DC_系数+(1<<(P+2))+抖动(-1|0)。(2)
在公式(2)中,P指示DC_系数中尾数位的数目。项(1<<(P+2))添加中点偏差。项抖动(-1|0)指示IDCT模块34在伪随机基础上选择-1或0。
系数加偏差模块144还可将中点偏差值和补充偏差值加到经按比例缩放系数矩阵中的AC系数的每一者。矩阵的AC系数是所述矩阵中除DC系数之外的所有系数。将中 点偏差值和经按比例缩放的偏差值加到所述AC系数中的每一者可进一步减少舍入误差。
在系数加偏差模块144产生有偏系数矩阵之后,逆向向量变换模块146通过使用定点算术对所述有偏系数矩阵重复应用一维变换而产生经变换系数矩阵。举例来说,逆向向量变换模块146可通过使用定点算术对有偏系数矩阵中的系数的每一行向量应用一维变换而产生中间值矩阵。接下来,逆向向量变换模块146可通过使用定点算术对所述中间值矩阵中的每一列向量应用一维变换而计算经变换系数矩阵。下文在图10和图11中说明示范性一维变换。
在逆向向量变换模块146产生经变换系数矩阵之后,右移模块148可通过使经变换系数矩阵中的系数的每一者右移某一数目个位置而产生经调节系数矩阵,所述某一数目等于在应用所述变换期间且在按比例缩放期间所添加的位的数目。举例来说,如果应用所述变换会产生额外的三个位,且按比例缩放系数会添加额外的三个位,那么右移模块148可使所述系数中的每一者右移六(3+3)个位置。
右移模块148可执行此右移,从而取代使所述系数中的每一者除以2b,其中b等于逆向向量变换模块146所添加的额外位的数目加上由按比例缩放模块142在按比例缩放期间添加到系数的尾数部分的位的数目。可能由于xn/2b与xn>>b之间的差异(其中xn是矩阵中位置n处的系数)而出现源图像数据与所得图像数据之间的差异。这些差异中的一些差异可能由于可归因于以下事实的舍入误差而引起:在定点算术的有限精确度中,(xn>>b)并非对于xn的所有值都等于(xn/2b)。举例来说,编码模块8可使用十六位定点数,且xn=63(二进制中为0000 0000 0011 1111)且b=6。在此实例中,使0000 00000011 1111向右移位六个位置会产生二进制值0000 0000 0000 0000。因此,63>>6=0。其间,63/26=31/64=0.984375。0与0.984之间的差异可导致在源图像与所得图像之间的可视差异。
将偏差值加到DC系数会减少由于舍入误差而导致的差异。举例来说,系数加偏差模块144可将中点偏差值c加到xn。中点偏差值c可等于2b/2=2(b-1)。举例来说,如果b=6,那么c=26/2=64/2=32。在此实例中,如果xn=63,那么63+32=95(0b0000 0000 01011111)。95右移6个位置等于1(二进制中为0b0000 0000 0000 0001)。在添加中点偏差值之后所产生的值1比在不添加中点偏差值的情况下所产生的值0更接近正确值0.984375。
除添加中点偏差值c之外,系数加偏差模块144还可将补充偏差值加到DC系数。举例来说,系数加偏差模块144可添加正负号自适应偏差值d(xn)。当xn为负时,正负 号自适应偏差值d(xn)可等于-1,且否则可等于0。添加正负号自适应偏差值d(xn)可产生比无正负号自适应偏差值d(xn)的值更近似的值。举例来说,在无正负号自适应偏差值d(xn)的情况下,函数(xn+c)>>b关于0不对称。举例来说,如果xn=32,b=6且c=32,那么(xn+c)>>b=1。然而,如果xn=-32,b=6且c=32,那么(xn+c)>>b=0。当计算相继的预测视频帧时,此围绕零的对称性的缺乏可能导致逐渐增大的误差。此外,xn大于零时xn>>b与xn/2b之间的差异比xn小于零时xn>>b与xn/2b之间的差异大。这也可能产生误差。
正负号自适应偏差值d(xn)可校正这些问题。举例来说,假设xn=32,b=6,c=32,那么d(xn)=0。因此,(xn+c+d(xn))>>b=1。现在,假设xn=-32,b=6,c=32,那么d(xn)=-1。因此,(xn+c+d(xn))>>b=-1。此实例说明函数(xn+c+d(xn))>>b现在围绕零对称,且不会产生在xn大于零时比在(xn)小于零时大的差异。
在替代实施方案中,系数加偏差模块144可添加抖动偏差值e而不是添加正负号自适应偏差值d。当系数加偏差模块144将抖动偏差值e加到DC系数时,系数加偏差模块144可在伪随机基础上选择值0或值-1作为e的值。为了选择抖动偏差值e的值,系数加偏差模块144可包含以下指令:
#define IB1 1
#define IB2 2
#define IB5 16
#define IB18 131072
#define MASK(IB 1+IB2+IB5)
static unsigned long iseed=0xAAAAAAAA;
int ditherBit(){
if(iseed & IB18){
iseed=((iseed^MASK)<<1)|IB 1;
return 1;
}else{
iseed<<=1;
return 0;
}
}
许多视频编码标准使用被称为图片组(group ofpictures,“GOP”)的东西。GOP包括i帧,以及参考所述i帧的一组预测帧和/或双预测帧,和/或所述GOP内的其它预测或双预测帧。举例来说,媒体文件可包含使用一组系数矩阵进行编码的i帧。为了产生 视频序列,解码模块12可基于此i帧而产生预测帧。由对所述i帧进行解码而导致的误差反映在基于所述i帧的预测帧中。此外,由对所述预测帧进行解码而导致的误差被并入下一预测帧中。如果由对所述帧进行解码而导致的误差围绕零不对称,或趋向于具有更大的正或负量值,那么这些误差可能迅速地增加或减小相继预测帧中像素分量值的值。举例来说,如果误差趋向于具有更大的正误差,那么这些误差在相继预测帧中可相加起来,从而导致像素分量值高于正确的像素分量值。因此,GOP内的相继预测帧中的像素可能不当地改变色彩或亮度。这被称为漂移误差。为了避免过于严重的漂移误差,仅可从i帧中产生有限数目个帧。由于舍入的缘故,当使用具有有限数目个尾数位(例如,三个尾数位)的定点数来执行变换时的误差的量值可能大于当使用具有较大精确度的数字来执行所述变换时的误差的量值。因此,当使用具有有限数目个尾数位的定点数来执行变换时,漂移误差尤其会成问题。
在伪随机基础上选择抖动偏差值e的值意味着每一预测帧都具有同等可能的机会得到具有较大正量值的误差或具有较大负量值的误差。因此,在图片组内,正误差和负误差趋向于量值相等,且趋向于围绕零对称。因为正误差和负误差平均起来围绕零对称,且正误差和负误差平均起来量值相等,所以所述误差不可能在随后的预测帧中传播和夸大。这是因为具有正量值的误差可能抵消另一帧中具有负量值的误差,且反之亦然。因此,因为抖动偏差值趋向于使误差围绕零对称,且趋向于使正误差和负误差量值相等,所以在整个GOP中可能存在较少漂移误差。因此,GOP中可包含更多图片。因为GOP中可包含更多图片,所以总视频序列可具有更好的压缩率。同样,添加正负号自适应偏差值会导致每一帧内的误差趋向于量值相等,且趋向于围绕零对称。因此,这些误差不会在随后的预测帧中传播和夸大。
在右移模块148使系数右移之后,截割模块150可“截割”所述系数,以便将所述系数限制在像素分量值的最大可允许范围。举例来说,在典型的JPEG图像中,色彩分量值可在-256到255的范围中。如果系数矩阵将包含等于270的系数,那么截割模块150将通过使所述系数减小到255来将此系数限制在最大可允许范围。在截割模块150完成截割所述系数之后,这些系数可表示像素分量值。当截割模块150完成截割矩阵中的系数时,截割模块150可将经截割系数矩阵提供给输出模块152。
当输出模块152接收到系数矩阵(所述系数现为像素分量值)时,输出模块152可将像素分量值矩阵输出到像素重构模块50。
图7是说明逆向变换模块34的示范性操作的流程图。最初,输入模块140接收经解量化系数矩阵(170)。当输入模块140接收到经解量化系数矩阵时,按比例缩放模块 142可按比例缩放经解量化系数矩阵中的每一值,从而产生经按比例缩放系数矩阵(172)。举例来说,按比例缩放模块142可执行以下运算:使经解量化系数矩阵中的每一系数乘以比例因子矩阵中均等定位的值。
在按比例缩放模块142产生经按比例缩放系数矩阵之后,系数加偏差模块144可将中点偏差值和补充偏差值加到所述经按比例缩放系数矩阵的DC系数,从而产生有偏系数矩阵(174)。在系数加偏差模块144将偏差值加到矩阵的DC系数之后,逆向向量变换模块146可确定行计数是否小于最大行计数(176)。最初,可将行计数设置为零。最大行计数可以是等于系数矩阵中行的数目的静态值。举例来说,如果系数矩阵包含八个行,那么最大行计数等于八。
如果行计数小于最大行计数(176的“是”),那么逆向向量变换模块146可使用定点算术对系数矩阵中由所述行计数指示的行向量应用一维变换(178)。当逆向向量变换模块146对系数矩阵的行向量应用变换时,逆向向量变换模块146可用中间系数的向量来代替系数的所述行向量中的原始系数。在逆向向量变换模块146对系数矩阵的行向量应用变换之后,逆向向量变换模块146可使行计数递增(180)。逆向向量变换模块146可接着返回,且再次确定行计数是否小于最大行计数(176)。
如果行计数不小于(即,大于或等于)最大行计数(176的“否”),那么逆向向量变换模块146可确定列计数是否小于最大列计数(182)。最初,可将列计数设置为零。最大列计数可以是等于系数矩阵中的列的数目的静态值。举例来说,如果系数矩阵包含八个列,那么最大列计数等于八。
如果列计数小于最大列计数(182的“是”),那么逆向向量变换模块146可对中间系数矩阵的由所述列计数指示的列向量应用一维变换(184)。当逆向变换模块34对中间系数的列向量应用变换时,逆向变换模块34用经变换系数的向量来代替所述列向量中的中间系数。
在逆向向量变换模块146对系数矩阵的列向量应用变换之后,逆向向量变换模块146可使列计数递增(186)。逆向向量变换模块146可接着返回并再次确定列计数是否小于最大列计数(182)。
如果列计数不小于(即,大于或等于)最大列计数(182的“否”),那么右移模块148可使矩阵中的经变换系数的每一者右移(188)。当右移模块148使系数右移时,右移模块148可使所述系数向右移位某一数目个位置。使矩阵中的第二中间系数的每一者右移的结果是经调节值矩阵。在右移模块148已使经变换系数中的每一者右移之后,截割模块150可截割所述经调节的系数,以便确保所述经调节的系数在像素分量值的适当 范围内(190)。举例来说,截割模块150可截割所述经调节的系数,以便确保所述经调节的系数在-256至255的范围内。当截割模块150完成截割经调节的系数之后,输出模块152可输出所得的像素分量值矩阵(192)。
图8是说明前向变换模块26的示范性细节的框图。如图8的实例中所说明,前向变换模块26包括输入模块210,其接收来自分量提取模块24的像素分量值矩阵。当输入模块210接收到像素分量值矩阵时,输入模块210可将所述像素分量值矩阵提供给左移模块212。左移模块212可使像素分量值矩阵中的所有像素分量值向左移位前向向量变换模块214在执行前向变换时所使用的值中所用的尾数位的数目减去通过执行前向变换而移除的尾数位的数目。举例来说,如果执行前向变换时的值中使用十个尾数位,且通过执行前向离散余弦变换而移除三个尾数位,那么左移模块212可使像素分量值向左移位七个位置。在另一实例中,如果执行前向变换时的值中使用三个尾数位,且通过执行前向变换而移除三个尾数位,那么左移模块212可使像素分量值向左移位零个位置。
在左移模块212使像素分量值移位之后,前向向量变换模块214可对像素分量值矩阵中的每一列向量应用前向变换,以便产生中间值矩阵。接下来,前向向量变换模块214可对所述中间值矩阵中的每一行向量应用前向变换,以便产生经变换系数矩阵。当前向向量变换模块214对向量应用前向变换时,前向向量变换模块214可应用下文在图12中所描述的前向变换。注意,下文在图12中所描述的变换是图11中所描述的变换的逆向变换。
在前向向量变换模块214产生经变换系数矩阵之后,按比例缩放模块216可对经变换系数矩阵中的每一经变换系数应用比例因子。按比例缩放模块216可应用逆向变换模块48中的按比例缩放模块142所使用的比例因子的倒数。举例来说,如果从所述变换中因子分解出一个或一个以上值以便改进变换的效率,那么这些值可变成比例因子矩阵的基础。可通过使系数乘以这些值来校正经变换系数矩阵中的系数。
为了减小舍入误差,前向变换模块26中的系数加偏差模块218可将中点偏差值和补充偏差值加到经按比例缩放系数矩阵中的系数。将正负号自适应偏差值或抖动偏差值加到经变换系数矩阵中的系数与当逆向变换模块48中的系数加偏差模块144加正负号自适应偏差值或抖动偏差值时具有类似的效应。即,将所述偏差值加到所述系数致使正误差和负误差平均起来量值相等,且平均起来围绕零对称。这些误差表示由于使经按比例缩放系数矩阵中的系数的有限精确度定点表示右移第一量值而产生的值与由于使经按比例缩放系数矩阵中的所述系数除以2的所述第一量值次幂而产生的结果之间的差异,其中不考虑精确度。
在系数加偏差模块218产生有偏系数矩阵之后,前向变换模块26中的右移模块220可通过使有偏系数矩阵中的系数右移而产生输出系数矩阵。右移模块220可使有偏系数矩阵中的每一系数右移有偏系数矩阵的系数中的尾数位的数目加上通过执行变换而加到所述系数的位的数目。
以下等式概括当系数加偏差模块218加正负号自适应偏差值时,按比例缩放模块216、系数加偏差模块218和右移模块220对经变换系数矩阵的作用:
F[v][u]=(F ′[v][u]*S[v][u]+(1<<(P+Q)-((F′[v][u]>=0)?0:1))>>(P+Q)。
其中v=0..7,u=0..7;其中S[v][u]是比例因子矩阵中的条目,F是经按比例缩放系数矩阵,F′是经变换系数矩阵,P指示经变换系数矩阵中的系数中尾数位的数目,且Q指示通过应用变换而加到经变换系数矩阵中的系数的位的数目。
以下等式概括当系数加偏差模块218加抖动偏差值时,按比例缩放模块216、系数加偏差模块218和右移模块220对经变换系数矩阵的作用:
F[v][u]=(F′[v][u]*S[v][u]+(1<<19)-(抖动(0:1))>>20
其中v=0..7,u=0..7;其中S[v][u]是比例因子矩阵中的条目,F是经按比例缩放系数矩阵,且F′是经变换系数矩阵。
在按比例缩放模块216产生经按比例缩放系数矩阵之后,输出模块222可将系数矩阵输出到量化模块28。
图9是说明前向变换模块26的示范性操作的流程图。起初,输入模块210接收像素分量值矩阵(230)。当输入模块140接收到像素分量值矩阵时,左移模块212可通过使像素分量值矩阵中的每一值左移而产生经调节系数矩阵(232)。举例来说,左移模块212可使所有系数向左移位十个位置。在此实例中,左移模块212可使所有系数向右移位十个位置,因为前向向量变换模块214可使用用小数部分中的十个位来对数字进行编码的定点算术。因此,通过使系数向左移位十个位置,左移模块212将像素分量值有效地转换成具有十个尾数位的定点数。
在使经调节值矩阵中的每一像素分量值左移之后,前向向量变换模块214可确定列计数是否小于最大行计数(234)。起初,可将列计数设置为零。最大列计数可以是等于经调节系数矩阵中列的数目的静态值。举例来说,如果经调节系数矩阵包含八个列,那 么最大列计数等于八。
如果列计数小于最大列计数(234的“是”),那么前向向量变换模块214可计算对由所述列计数指示的列向量的一维前向变换(236)。当前向向量变换模块214计算对经调节系数矩阵的列向量的前向变换时,前向向量变换模块214用中间系数来代替所述列向量中的原始经调节系数。在前向向量变换模块214计算对经调节系数矩阵的列向量的前向变换之后,前向向量变换模块214可使列计数递增(238)。前向向量变换模块214可接着返回,并再次确定列计数是否小于最大列计数(234)。
如果列计数不小于(即,大于或等于)最大列计数(234的“否”),那么前向向量变换模块214可确定行计数是否小于最大行计数(240)。起初,可将行计数设置为零。最大行计数可以是等于系数矩阵中的行向量数目的静态值。举例来说,如果系数矩阵包含八个行,那么最大行计数等于八。
如果行计数小于最大行计数(240的“是”),那么前向向量变换模块214可计算对由行计数指示的行向量的一维离散余弦变换(242)。因为前向向量变换模块214已经对矩阵的行向量计算了前向变换,所以系数矩阵现含有中间系数。当前向向量变换模块214计算对中间系数的行向量的前向变换时,前向向量变换模块214用经变换的系数来代替所述列向量中的中间系数。
在前向向量变换模块214计算对系数矩阵的行向量的离散余弦变换之后,前向向量变换模块214可使行计数递增(244)。前向向量变换模块214可接着循环返回,并再次确定行计数是否小于最大行计数(240)。
如果行计数不小于(即,大于或等于)最大行计数(240的“否”),那么按比例缩放模块216可按比例缩放经变换系数矩阵中的每一经变换系数(246)。在按比例缩放模块216产生经按比例缩放系数矩阵之后,系数加偏差模块218可通过将一个或一个以上偏差值加到经按比例缩放系数矩阵中的系数而产生有偏系数矩阵(248)。举例来说,系数加偏差模块218可将中点偏差值和正负号自适应或抖动补充偏差值加到经按比例缩放系数矩阵中的每一系数。接下来,右移模块220可使有偏系数矩阵中之每一系数右移(250)。右移模块220可通过使每一系数右移所述系数的每一者中尾数位的数目加上通过应用变换而加到所述系数的位的数目来产生经调节系数矩阵。在右移模块220已产生所述经调节系数矩阵之后,输出模块222可输出所得的经调节系数矩阵(252)。
图10是说明第一示范性一维变换260的图。如图10的实例中所说明,变换260可将X0到X7作为输入值。值X0到X7可表示输入系数矩阵的一个行或列的系数。变换260可输出值x0到x7。当值X0到X7是输入系数矩阵中的一行系数中的值时,值x0到x7可 表示一行中间值。当值X0到X7是一列系数中的值时,值x0到x7可表示一列经移位的像素分量值。如图10的实例中所说明,包括“+”符号的圆指示加法运算,且包括“×”符号的圆指示乘法运算。字母/数字组合指示某一值与之相乘的值。举例来说,在线x2上,“A1”符号位于包括“×”符号的圆上方。这指示线X2上的值乘以值A1。
变换260包含一组“蝶形结构运算”。“蝶形结构运算”可以是软件或硬件结构,其中通过以下步骤来计算第一输出值u:使第一输入值x乘以第一因子C,以创建第一中间值;使第二输入值y乘以第二因子S,以创建第二中间值;以及接着使所述第一中间值与所述第二中间值相加。在此较为复杂的“蝶形结构运算”中,可通过以下步骤来计算第二输出值v:使第二输入值y乘以第一因子,以创建第三中间值;使第一输入值x乘以第二因子S,以创建第四中间值;以及接着从所述第四中间值减去所述第三中间值。以下公式概括“蝶形结构运算”的数学结果:
u=x*C+y*S;
v=x*S-y*C。
蝶形结构运算264说明变换260中所使用的一种蝶形结构运算。蝶形结构运算具有此名称是由于以下事实:蝶形结构运算因为从第一输入值到第二输入值的值与从第二输入值到第一输入值的值之间的交叉而看似具有两个“翅膀”。
如变换260中所使用,第一因子C和第二因子S可以是无理数。举例来说,C可等于 且S可等于 因为逆向向量变换模块146可在16位寄存器中使用定点算术,且因为C和S常为无理值,所以使输入值x和y乘以C和S在计算上可能是不方便的。因此,逆向向量变换模块146可使用C和S的有理数近似值。这些整数近似值可以是(C′/2j)和(S′/2k)的形式,其中C′和S′是C和S的“整数化”版本,且j和k是整数。举例来说,假设 在所述实例中,逆向向量变换模块146可使用整数值C′=2217和j=12来近似表示 因为2217/212=0.541259766且 在此实例中,显然0.5411961近似等于0.541259766。因此
u=x*C+y*S;
v=x*S-y*C
上述形式的计算可由以下形式的计算代替:
u′=x*(C′/2j)+y*(S′/2k);
v′=x*(S′/2k)-y*(C′/2j)。
为了进一步简化这些计算,可用逐位右移j和k个位置的运算(使用“>>”符号表示)来代替除以2j和2k的运算:
u″=((x*C′)>>)+((y*S′)>>k);
v″=((x*S′)>>k)-((y*C′)>>j)。
然而,如上述关于将偏差值加到DC系数所论述,用逐位右移运算代替除法运算可能导致u′与u″以及v′与v″之间的差异。将中点偏差值加到这些计算中的项可减少u′与u″之间以及v′与v″之间的差异。当加中点偏差值时,计算可采用以下形式:
u″′=((x*C′+(1<<(j-1))>>j)+((y*S′+(1<<(k-1))>>k);
v″′=((x*S′+(1<<(k-1))>>k)-((y*C′+(1<<(j-1))>>j)。
虽然加中点偏差值可能导致u与u″′以及v与v″′之间的差异比u与u″′以及v与v″′之间的差异小,但加中点偏差值可增加蝶形结构运算的计算复杂性。此外,当在16位寄存器中使用定点算术时,加中点偏差值可能使u″′和v″′的计算不切实际。加中点偏差值可能使u″′和v″′的计算不切实际是因为加中点偏差值发生在右移之前,且因此可能导致寄存器溢出。
v=x*S-y*C与v″=((x*S′)>>k)-((y*C′)>>j)之间的平均差异近似为零。换句话说,所有值x和y的所有值(v″-v)的平均值近似等于零。此外,v=x*S-y*C与v″′=((x*S′+(1<<(k-1))>>k)-((y*C′+(1<<(j-1))>>j)之间的平均差异也近似为零。这是因为v″与v″′总是近似相等。v″与v″′总是近似相等是因为当j等于k时,中点偏差值通过减法而被抵消:
v″′=((x*C′+m)>>j)-((y*S′+m)>>k)≈
(x*C′+m)/2j-(y*S′+m)/2k=
(x*C′)/2j+(m/2j)-(y*S′)/2k-(m/2k)=
(x*C′)/2j-(y*S′)/2k≈
v″=((x*C′)>>j)-((y*S′)>>k)
其中m表示中点偏差值。如此实例所说明,当j等于k时,从(m/2j)减去(m/2k)抵消了中点偏差值m。因为v与v″之间的平均差异近似为零,所以逆向向量变换模块146并不将正偏差或负偏差对称地引入通过计算v″而不是v″′所产生的值中,且因为v″与v″′近似相等,所以逆向向量变换模块146可使用v″而不使用v″′。
u=x*C+y*S与u″′=((x*C′+(1<<(j-1))>>j)+((y*S′+(1<<(k-1))>>k)之间的平均差异也近似等于零。同时,u=x*C+y*S与u″=((x*C′)>>j)+((y*S′)>>k)之间的差异并非近似等于零。相反,u与u″之间的平均差异近似为-1/2。因此,u″与u″′并非近似相等。u″与u″′并非近似相等是因为中点偏差值即使在j等于k时也未被抵消:
u″′=((x*C′+m)>>k)+((y*S′+m)>>k)≈
((x*C′+m)/2j)+((y*S′+m)/2k)=
((x*C′)/2j)+(m/2j)+((y*S′)/2k)+(m/2k)=
((x*C′)/2j)+((y*S′)/2k)+(m/2j)+(m/2k)≠
u″=((x*C′)>>j)+((y*S′)>>k)。
因为u″并非近似等于u″′,所以不可用u″来代替u″′。尝试使用u″来代替u″′可能导致与u之间的显著差异。
为了避免与将中点偏差值加到每次计算相关联的复杂性和溢出问题,可使用以下公式来代替u″′和u″:
u″″=((x*C′)>>j)-((y*-S′)>>k)。
u″″等于u″,只是在u″″中,使用S′的负版本,且减去((y*-S)>>k)。类似于u″′,u″″不加中点偏差值。然而,不同于u″′,u″″与u之间的差异以0为中心。因为u″″与u之间的差异以零为中心,所以尽管应用随后的蝶形结构运算,但舍入误差未被放大。因此,逆向向量变换模块146可在蝶形结构运算中使用u″″来计算u。因此,当j等于k时,逆向向量变换模块146用来应用变换260的蝶形结构运算可具有以下形式:
u″″=((x*C′)>>j)-((y*-S′)>>k);
v″′=((x*S′)>>k)-((y*C′)>>j)。
因此,通过这种类型的蝶形结构运算而产生的结果与将通过使用无限制精确度算术的等效蝶形结构运算而产生的结果之间的差异以零为中心,且具有1或更小的正量值或负量值。
或者,当j等于k时,逆向向量变换模块146可使用已将右移推迟到蝶形结构运算的结尾的蝶形结构运算:
u′=x*(C′/2k)+y*(S′/2k);
((x*C′)/2k)+((y*S′)/2k)=
((x*C′)+(y*S′))/2k≈
u*=(((x*C′)+(y*S′)+(1<<(k-1)))>>k;
v′=x*(S′/2k)-y*(C′/2j)=
((x*S′)/2k)-((y*C′)/2k)=
((x*S′)/2k)+((-1)(y*C′)/2k)=
((x*S′)/2k)+((y*-C′)/2k)=
((x*S′)+(y*-C′))/2k≈
v*=((x*S′)+(y*-C′)+(1<<(k-1)))>>k。
将右移推迟到蝶形结构运算的结尾可减少执行蝶形结构运算所需的移位运算的总数,且可改进准确性。此外,可使用可在大多数现代16位单指令多数据(single instructionmultiple data,“SIMD”)处理器和数字信号处理器上使用的4向乘法累加指令(4-waymultiply-accumulate instruction)来高效地计算u*和v*。
乘法运算相对于加法、减法和逐位移位运算来说在计算上可能较昂贵。因此,使用与乘法运算具有相同效应的一系列加法、减法和逐位移位运算可能较简单。举例来说,假设C′=2217。在此实例中,可用以下步骤来代替r=x*C′:
x2=(x<<3)-x;
x3=x+(x2<<6);
x4=x3-x2;
r=x3+(x4<<2)。
在此实例中,x2、x3和x4是中间值。为了说明这一点,考虑x=1的实例:
7=(1<<3)-1;
449=1+(7<<6);
442=449-7;
2217=449+(442<<2)。
2217=(1*2217)=(x*2217,其中x=1)。
在此实例中,1*2217=2217,且当x=1时,此序列运算所产生的值为2217。
下表概括逆向向量变换模块146可针对常数因子A1、A2、B1、B2、C1、C2、D1和D2而使用的一组示范性整数值近似值。
表1:变换260中所使用的示范性常数因子近似值
在表1中,“整数值”栏中的值在除以212=4096时近似表示“原始值”栏中的值。
举例来说,2217/4096=0.541259766,且 类似地,5352/4096=1.30664062,且 “用于计算乘积的算法”栏中的公式概括了逆向向量变换模块146可使用对应的整数值来代替乘法运算的方法。
图11是说明第二示范性算法270的图。如在图10中,值X0、X1、X2、X3、X4、X5、X6和X7表示输入系数,且值x0、x1、x2、x3、x4、x5、x6和x7表示输出值。与包括“+”符号的圆后面的线相关联的值是与指向所述圆的箭头相关联的值相加的结果。与包括“×”符号的圆后面的线相关联的值是使紧接于所述圆而定位的系数与同穿过所述圆的线相关联的值相乘的结果。紧接于箭头的符号“-”表示与所述箭头相关联的值的求反。举例来说,如果值“10”与“-”符号之前的箭头相关联,那么值“-10”与所述“-”符号之后的箭头相关联。此外,应注意,可在算法190中使用上文所描述的使用负系数和减法来减少舍入误差的技术。
在变换270中,可使用有理分数来近似表示 和 的值。举例来说,可使用下文在表2中所列举的整数近似值来近似表示α、β、γ、δ、ε和ζ的值。
表2:变换270中所使用的示范性常数值近似值
在表2中,“整数近似值”栏中的值表示“原始值”栏中的值的整数化版本。举例来说, 且8867/16384=0.54119873046875。表2的“用于计算乘积的算法”栏中的等式表示逆向向量变换模块146可借此使用“整数近似值”栏中的值来代替乘法运算的算法。
图12是说明可由前向向量变换模块214使用的示范性变换200的流程图。在图12中,值X0、X1、X2、X3、X4、X5、X6和X7表示输出系数,且值x0、x1、x2、x3、x4、x5、x6和x7表示输入值。此外,应注意,可在变换270中使用上文所描述的使用负系数和减法来减少舍入误差的技术。
在图12的实例中,可使用有理分数来近似表示 和 的值。举例来说,可使用表2中所列举的整数近似值来近似表示α、β、γ、δ、ε和ζ的值。
可在硬件、软件、固件或其任一组合中实施本文中所描述的技术。描述为模块或组件的任何特征可在集成逻辑装置一起实施,或单独作为离散的但可共同操作的逻辑装置而实施。如果在软件中实施,那么所述技术可至少部分地由包括指令的计算机可读媒体来实现,所述指令在被执行时执行上文所描述的方法中的一者和一者以上。所述计算机可读媒体可形成计算机程序产品的一部分,所述计算机程序产品可包含包装材料。计算机可读媒体可包括例如同步动态随机存取存储器(synchronous dynamic random accessmemory,SDRAM)等随机存取存储器(random access memory,RAM)、只读存储器(read-only memory,ROM)、非易失性随机存取存储器(nonvolatile random accessmemory,NVRAM)、电可擦除可编程只读存储器(electrically erasable programmableread-only memory,EEPROM)、快闪存储器、磁性或光学数据存储媒体以及类似计算机可读媒体。所述技术可额外地或替代地至少部分由计算机可读通信媒体来实现,所述计算机可读通信媒体运载或传送呈指令或数据结构形式且可由计算机存取、读取和/或执行的代码。
所述代码可由一个或一个以上处理器执行,例如一个或一个以上数字信号处理器(digital signal processor,DSP)、通用微处理器、专用集成电路(application specific integrated circuit,ASIC)、现场可编程逻辑阵列(field programmable logic array,FPGA)或其它等效的集成或离散逻辑电路。因此,如本文中所使用的术语“处理器”可指代适合实施本文中所描述的技术的前述结构或任何其它结构中的任何一者。此外,在一些方面,可在经配置以用于编码和解码的专用软件模块或硬件模块内提供本文中所描述的功能性,或将本文中所描述的功能性并入组合式视频编码器-解码器(CODEC)中。
已描述本发明的各个实施例。这些和其它实施例在所附权利要求书的范围内。
Claims (42)
1.一种用于解码图像和视频的方法,其包括:
使用对定点数的一系列的蝶形结构运算来对源系数向量应用变换,以便产生经变换系数向量;
其中所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值;
致使媒体呈现单元基于所述经变换系数向量中的经变换系数而输出可听或可视信号,其中由所述蝶形结构运算中的一者产生的结果与将由使用无限制精确度算术的等效蝶形结构运算产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值;以及
通过按比例缩放输入系数矩阵中的每一系数而产生经按比例缩放系数矩阵;
通过将一个或多个偏差值加到所述经按比例缩放系数矩阵的DC系数而产生包含所述源系数向量的有偏系数矩阵;
使用对定点数的所述系列的蝶形结构运算来对所述系数矩阵中的每一行向量应用所述变换,以便产生中间系数矩阵;
使用对定点数的所述系列的蝶形结构运算来对所述中间系数矩阵中的每一列向量应用所述变换,以便产生经变换系数矩阵;以及
通过使所述经变换系数矩阵中的系数右移第一量值而产生像素分量值矩阵。
2.根据权利要求1所述的方法,其中使用所述系列的所述蝶形结构运算包括执行以下形式的蝶形结构运算:
u=((x*C)>>k)-((y*-S)>>k');
v=((x*S)>>k')-((y*C)>>k),
其中u和v是所得定点数,
其中C、S、k和k'是常数整数,
其中x和y是定点变量,以及
其中C/2k和S/2k'是无理常数的有理数近似值。
3.根据权利要求2所述的方法,
其中所述源系数向量由八个系数组成:x0、x1、x2、x3、x4、x5、x6和x7;
其中所述经变换系数向量由八个系数组成:z0、z1、z2、z3、z4、z5、z6和z7;以及
执行所述蝶形结构运算中的任何一者包括:
执行第一蝶形结构运算,其中x=x0,y=x4,C=1,S=1,u=x0',且v=x4';
执行第二蝶形结构运算,其中x=x2,y=x6,C=α,S=β,u=x6',且v=x2';
执行第三蝶形结构运算,其中x=x7,y=x1,C=1,S=1,u=x7',且v=x1';
执行第四蝶形结构运算,其中y=x5,C=1,S=1,u=x1”,且v=x5';
执行第五蝶形结构运算,其中y=x3,C=1,S=1,u=x7”,且v=x3';
执行第六蝶形结构运算,其中x=x0',y=x6',C=1,S=1,u=x0”,且v=x6”;
执行第七蝶形结构运算,其中x=x4',y=x2',C=1,S=1,u=x4”,且v=x2”;
执行第八蝶形结构运算,其中x=x1”,y=x7”,C=ζ,S=ε,u=x1”',且v=x7”';
执行第九蝶形结构运算,其中x=x3',y=x5',C=δ,S=γ,u=x5”,且v=x3”;
执行第十蝶形结构运算,其中x=x0”,y=x7”',C=1,S=1,u=z0,且v=z7;
执行第十一蝶形结构运算,其中x=x4”,y=x5”,C=1,S=1,u=z1,且v=z6;
执行第十二蝶形结构运算,其中x=x2”,y=x3”,C=1,S=1,u=z2,且v=z5;以及
执行第十三蝶形结构运算,其中x=x6”,y=x1”',C=1,S=1,u=z3,且v=z4。
4.根据权利要求3所述的方法,其中α、β、γ、δ、ε和ζ分别是无理值 和的近似值。
5.根据权利要求4所述的装置,其中α=8867/16384,β=21407/16384,γ=5681/4096,δ=565/2048,ε=9633/8192,ζ=12873/16384。
6.根据权利要求2所述的装置,其中使用所述系列的蝶形结构运算包括使用一系列移位、加法和减法运算,所述系列的移位、加法和减法运算产生近似表示通过执行所述蝶形结构运算中的乘法运算将产生的值的所得值。
7.根据权利要求1所述的方法,
其中产生所述有偏系数矩阵包括将中点偏差值加到所述经按比例缩放系数矩阵的所述DC系数;以及
其中所述中点偏差值等于2(P+T-1),其中P等于所述第一量值,且T是通过执行所述变换而添加的位的数目。
8.根据权利要求7所述的方法,
其中产生所述有偏系数矩阵包括将补充偏差值加到所述经按比例缩放系数矩阵的所述DC系数,
其中所述将所述补充偏差值加到所述DC系数致使正误差和负误差平均起来量值相等,且平均起来围绕零对称,以及
其中所述误差表示由于使所述经变换系数矩阵中的系数的有限精确度定点表示右移所述第一量值而产生的值与由于使所述经变换系数矩阵中的所述系数除以2P而产生的结果之间的差异,其中不考虑精确度,P等于所述第一量值。
9.根据权利要求8所述的方法,其中当所述DC系数为负时,所述补充偏差值等于-1,且当所述DC系数非负时,所述补充偏差值等于0。
10.根据权利要求8所述的方法,
其中所述方法进一步包括在伪随机基础上选择等于-1或0的值作为所述补充偏差值;以及
其中加所述补充偏差值包括加所选择的值。
11.根据权利要求1所述的方法,
其中产生所述经按比例缩放系数矩阵包括使所述输入系数矩阵中的每一系数左移第二量值;
其中使用所述系列的蝶形结构运算来应用所述变换致使所述经变换系数矩阵中的每一系数均包含通过第三量值测量到的某一数目的额外精确度位;以及
其中所述第一量值等于所述第二量值加上所述第三量值。
12.根据权利要求11所述的方法,其中所述第二量值等于应用所述变换时所使用的所述定点数的尾数位的数目。
13.根据权利要求12所述的方法,
其中所述第二量值为三;以及
其中,在给定所述输入系数矩阵的情况下,所述像素分量值满足电子电气工程师学会(IEEE)1180标准的精确度要求。
14.根据权利要求1所述的方法,其中所述方法进一步包括:
构造包含所述像素分量值矩阵中的像素分量值的像素;以及
致使显示单元显示所述像素。
15.根据权利要求1所述的方法,其中所述定点数是16位定点数。
16.一种用于解码图像和视频的装置,其包括:
逆向变换模块,所述逆向变换模块使用对定点数的一系列的蝶形结构运算来对源系数向量应用变换,以便产生经变换系数向量,其中所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值;
其中媒体呈现单元能够基于所述经变换系数向量中的经变换系数而呈现可听或可视信号;
其中由所述蝶形结构运算中的一者产生的结果与由使用无限制精确度算术的等效蝶形结构运算将产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值;
按比例缩放模块,所述按比例缩放模块通过按比例缩放输入系数矩阵中的每一系数而产生经按比例缩放系数矩阵;
系数加偏差模块,所述系数加偏差模块通过将一个或多个偏差值加到所述经按比例缩放系数矩阵的DC系数而产生包含所述源系数向量的有偏系数矩阵;以及
其中所述逆向变换模块通过使用所述系列的蝶形结构运算对所述有偏系数矩阵中的每一行向量应用所述变换而产生中间系数矩阵;
其中所述逆向变换模块通过使用所述系列的蝶形结构运算对所述中间系数矩阵中的每一列向量应用所述变换而产生经变换系数矩阵;以及
右移模块,所述右移模块通过使所述经变换系数矩阵中的系数右移第一量值而产生像素分量值矩阵,
其中所述逆向变换模块也使用所述系列的蝶形结构运算对所述源系数向量应用所述变换。
17.根据权利要求16所述的装置,其中由所述逆向变换模块执行的所述蝶形结构运算中的所述一者具有以下形式:
u=((x*C)>>k)-((y*-S)>>k');
v=((x*S)>>k')-((y*C)>>k),
其中u和v是所得定点值,
其中C、S、k和k'是常数整数,
其中x和y是定点变量,以及
其中C/2k和S/2k'是无理常数的有理数近似值。
18.根据权利要求17所述的装置,
其中所述源系数向量由八个系数组成:x0、x1、x2、x3、x4、x5、x6和x7;
其中所述经变换系数向量由八个系数组成:z0、z1、z2、z3、z4、z5、z6和z7;以及
其中所述逆向变换模块通过以下步骤来执行所述蝶形结构运算:
执行第一蝶形结构运算,其中x=x0,y=x4,C=1,S=1,u=x0',且v=x4';
执行第二蝶形结构运算,其中x=x2,y=x6,C=α,S=β,u=x6',且v=x2';
执行第三蝶形结构运算,其中x=x7,y=x1,C=1,S=1,u=x7',且v=x1';
执行第四蝶形结构运算,其中y=x5,C=1,S=1,u=x1”,且v=x5';
执行第五蝶形结构运算,其中y=x3,C=1,S=1,u=x7”,且v=x3';
执行第六蝶形结构运算,其中x=x0',y=x6',C=1,S=1,u=x0”,且v=x6”;
执行第七蝶形结构运算,其中x=x4',y=x2',C=1,S=1,u=x4”,且v=x2”;
执行第八蝶形结构运算,其中x=x1”,y=x7”,C=ζ,S=ε,u=x1”',且v=x7”';
执行第九蝶形结构运算,其中x=x3',y=x5',C=δ,S=γ,u=x5”,且v=x3”;
执行第十蝶形结构运算,其中x=x0”,y=x7”',C=1,S=1,u=z0,且v=z7;
执行第十一蝶形结构运算,其中x=x4”,y=x5”,C=1,S=1,u=z1,且v=z6;
执行第十二蝶形结构运算,其中x=x2”,y=x3”,C=1,S=1,u=z2,且v=z5;以及
执行第十三蝶形结构运算,其中x=x6”,y=x1”',C=1,S=1,u=z3,且v=z4。
19.根据权利要求18所述的装置,其中α、β、γ、δ、ε和ζ分别是无理值 和的近似值。
20.根据权利要求19所述的装置,其中α=8867/16384,β=21407/16384,γ=5681/4096,δ=565/2048,ε=9633/8192,ζ=12873/16384。
21.根据权利要求18所述的装置,其中所述逆向变换模块使用一系列移位、加法和减法运算来执行所述蝶形结构运算,所述系列的移位、加法和减法运算产生近似表示通过执行所述蝶形结构运算中的乘法运算将产生的值的所得值。
22.根据权利要求16所述的装置,
其中所述系数加偏差模块将中点偏差值加到所述经按比例缩放系数矩阵的所述DC系数,
其中所述中点偏差值等于2(P+T-1),其中P等于所述第一量值,且T是通过执行所述变换而添加的位的数目。
23.根据权利要求16所述的装置,
其中所述系数加偏差模块将补充偏差值加到所述经按比例缩放系数矩阵的所述DC系数,
其中所述将所述补充偏差值加到所述DC系数致使正误差和负误差平均起来量值相等,且平均起来围绕零对称,以及
其中所述误差表示由于使所述经变换系数矩阵中的系数的有限精确度定点表示右移所述第一量值而产生的值与由于使所述经变换系数矩阵中的所述系数除以2P而产生的结果之间的差异,其中不考虑精确度,P等于所述第一量值。
24.根据权利要求23所述的装置,其中当所述DC系数为负时,所述补充偏差值等于-1,且当所述DC系数非负时,所述补充偏差值等于0。
25.根据权利要求23所述的装置,
其中所述系数加偏差模块在伪随机基础上选择等于-1或0的值作为所述补充偏差值;以及
其中所述系数加偏差模块加作为所述补充偏差值的所选择的值。
26.根据权利要求16所述的装置,
其中所述按比例缩放模块通过使所述输入系数矩阵中的每一系数左移第二量值而按比例缩放所述输入系数矩阵中的每一系数;
其中所述逆向变换模块致使所述经变换系数矩阵中的每一系数均包含通过第三量值测量到的某一数目的额外精确度位;以及
其中所述第一量值等于所述第二量值加上所述第三量值。
27.根据权利要求26所述的装置,其中所述第二量值等于应用所述变换时所使用的所述定点数的尾数位的数目。
28.一种用于解码图像和视频的装置,其包括:
用于使用对定点数的一系列蝶形结构运算来对源系数向量应用变换以便计算经变换系数向量的装置,
其中所述经变换系数向量中的经变换系数是通过使用理想的逆向离散余弦变换对所述源系数向量进行变换将产生的值的近似值,
其中媒体呈现单元能够基于所述经变换系数向量中的所述经变换系数而呈现可听或可视信号,且
其中由所述蝶形结构运算中的一者产生的结果与由使用无限制精确度算术的等效蝶形结构运算将产生的结果之间的差异以零为中心,且正差异与负差异具有大致相等的量值;
用于通过按比例缩放输入系数矩阵中的每一系数而产生经按比例缩放系数矩阵的装置;
用于通过将一个或多个偏差值加到所述经按比例缩放系数矩阵的DC系数而产生包含所述源系数向量的有偏系数矩阵的装置;
用于通过使用所述系列的蝶形结构运算对所述有偏系数矩阵中的每一行向量应用所述变换而产生中间系数矩阵的装置;
用于通过使用所述系列的蝶形结构运算对所述中间系数矩阵中的每一列向量应用所述变换而产生经变换系数矩阵的装置;以及
用于通过使所述经变换系数矩阵中的系数右移第一量值而产生像素分量值矩阵的装置,
其中所述用于产生所述中间系数矩阵的装置或所述用于产生所述经变换系数矩阵的装置包括所述用于使用所述系列的蝶形结构运算来对所述源系数向量应用所述变换的装置。
29.根据权利要求28所述的装置,
其中所述用于使用一系列蝶形结构运算的装置包括用于执行蝶形结构运算的一组装置,
其中所述用于执行蝶形结构运算的装置中的每一者均包括用于执行以下形式的蝶形结构运算的装置:
u=((x*C)>>k)-((y*-S)>>k);
v=((x*S)>>k)-((y*C)>>k),
其中u、v、x和y是定点数,
其中x和y是输入值,且u和v是输出值;以及
其中C、S和k是整数。
30.根据权利要求29所述的装置,
其中所述源系数向量由八个系数组成:x0、x1、x2、x3、x4、x5、x6和x7;
其中所述经变换系数向量由八个系数组成:z0、z1、z2、z3、z4、z5、z6和z7;以及
其中用于执行蝶形结构运算的所述组装置包括:
用于执行第一蝶形结构运算的装置,其中x=x0,y=x4,C=1,S=1,u=x0',且v=x4';
用于执行第二蝶形结构运算的装置,其中x=x2,y=x6,C=α,S=β,u=x6',且v=x2';
用于执行第三蝶形结构运算的装置,其中x=x7,y=x1,C=1,S=1,u=x7',且v=x1';
用于执行第四蝶形结构运算的装置,其中y=x5,C=1,S=1,u=x1”,且v=x5';
用于执行第五蝶形结构运算的装置,其中y=x3,C=1,S=1,u=x7”,且v=x3';
用于执行第六蝶形结构运算的装置,其中x=x0',y=x6',C=1,S=1,u=x0”,且v=x6”;
用于执行第七蝶形结构运算的装置,其中x=x4',y=x2',C=1,S=1,u=x4”,且v=x2”;
用于执行第八蝶形结构运算的装置,其中x=x1”,y=x7”,C=ζ,S=ε,u=x1”',且v=x7”';
用于执行第九蝶形结构运算的装置,其中x=x3',y=x5',C=δ,S=γ,u=x5”,且v=x3”;
用于执行第十蝶形结构运算的装置,其中x=x0”,y=x7”',C=1,S=1,u=z0,且v=z7;
用于执行第十一蝶形结构运算的装置,其中x=x4”,y=x5”,C=1,S=1,u=z1,且v=z6;
用于执行第十二蝶形结构运算的装置,其中x=x2”,y=x3”,C=1,S=1,u=z2,且v=z5;以及
用于执行第十三蝶形结构运算的装置,其中x=x6”,y=x1”',C=1,S=1,u=z3,且v=z4。
31.根据权利要求30所述的装置,其中α、β、γ、δ、ε和ζ分别是无理值 和的近似值。
32.根据权利要求31所述的装置,其中α=8867/16384,β=21407/16384,γ=5681/4096,δ=565/2048,ε=9633/8192,ζ=12873/16384。
33.根据权利要求29所述的装置,其中所述用于使用所述系列的蝶形结构运算的装置使用一系列移位、加法和减法运算来执行所述蝶形结构运算,所述系列的移位、加法和减法运算产生近似表示通过执行所述蝶形结构运算中的乘法运算将产生的值的所得值。
34.根据权利要求28所述的装置,
其中所述用于产生所述有偏系数矩阵的装置包括用于将中点偏差值加到所述经按比例缩放系数矩阵的所述DC系数的装置,
其中所述中点偏差值等于2(P+T-1),其中P等于所述第一量值,且T是通过执行所述变换而添加的位的数目。
35.根据权利要求28所述的装置,
其中所述用于产生所述有偏系数矩阵的装置包括用于将补充偏差值加到所述经按比例缩放系数矩阵的所述DC系数的装置,
其中所述将所述补充偏差值加到所述DC系数致使正误差和负误差平均起来量值相等,且平均起来围绕零对称,以及
其中所述误差表示由于使所述经变换系数矩阵中的系数的有限精确度定点表示右移所述第一量值而产生的值与由于使所述经变换系数矩阵中的所述系数除以2P而产生的结果之间的差异,其中不考虑精确度,P等于所述第一量值。
36.根据权利要求35所述的装置,其中当所述DC系数为负时,所述补充偏差值等于-1,且当所述DC系数非负时,所述补充偏差值等于0。
37.根据权利要求35所述的装置,
其中所述装置包括用于在伪随机基础上选择等于-1或0的值作为所述补充偏差值的装置;以及
其中所述用于加所述补充偏差值的装置加作为所述补充偏差值的所选择的值。
38.根据权利要求28所述的装置,
其中所述用于产生所述经按比例缩放系数矩阵的装置包括用于通过使所述输入系数矩阵中的所述系数中的每一者左移第二量值而按比例缩放所述输入系数矩阵中的每一系数的装置;
其中所述用于使用所述系列的蝶形结构运算来应用所述变换的装置致使所述经变换系数矩阵中的每一系数均包含通过第三量值测量到的某一数目的额外精确度位;以及
其中所述第一量值等于所述第二量值加上所述第三量值。
39.根据权利要求38所述的装置,其中所述第二量值等于应用所述变换时所使用的所述定点数的尾数位的数目。
40.根据权利要求39所述的装置,
其中所述第二量值为三;以及
其中,在给定所述输入系数矩阵的情况下,所述像素分量值满足电子电气工程师学会(IEEE)1180标准的精确度要求。
41.根据权利要求28所述的装置,
其中所述装置进一步包括用于构造包含所述像素分量值矩阵中的像素分量值的像素的装置;以及
其中所述装置进一步包括用于致使显示单元显示所述像素的装置。
42.根据权利要求28所述的装置,其中所述定点数是16位定点数。
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US81669706P | 2006-06-26 | 2006-06-26 | |
US60/816,697 | 2006-06-26 | ||
US84136206P | 2006-08-30 | 2006-08-30 | |
US60/841,362 | 2006-08-30 | ||
US84719406P | 2006-09-25 | 2006-09-25 | |
US60/847,194 | 2006-09-25 | ||
US82966906P | 2006-10-16 | 2006-10-16 | |
US60/829,669 | 2006-10-16 | ||
US86953006P | 2006-12-11 | 2006-12-11 | |
US60/869,530 | 2006-12-11 | ||
PCT/US2007/072088 WO2008002897A2 (en) | 2006-06-26 | 2007-06-26 | Reduction of errors during computation of inverse discrete cosine transform |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102016829A CN102016829A (zh) | 2011-04-13 |
CN102016829B true CN102016829B (zh) | 2015-10-14 |
Family
ID=38624012
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200780021734.6A Expired - Fee Related CN102007489B (zh) | 2006-06-26 | 2007-06-25 | 逆向离散余弦变换的计算期间的误差减少 |
CN200780023784.8A Active CN102016829B (zh) | 2006-06-26 | 2007-06-26 | 计算逆向离散余弦变换期间的误差减少 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200780021734.6A Expired - Fee Related CN102007489B (zh) | 2006-06-26 | 2007-06-25 | 逆向离散余弦变换的计算期间的误差减少 |
Country Status (10)
Country | Link |
---|---|
US (2) | US8385424B2 (zh) |
EP (2) | EP2035958A2 (zh) |
JP (3) | JP5086343B2 (zh) |
KR (2) | KR101013344B1 (zh) |
CN (2) | CN102007489B (zh) |
BR (1) | BRPI0712984A2 (zh) |
CA (2) | CA2653692C (zh) |
IN (1) | IN2014MN01239A (zh) |
TW (2) | TWI373255B (zh) |
WO (2) | WO2008002881A2 (zh) |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8385424B2 (en) * | 2006-06-26 | 2013-02-26 | Qualcomm Incorporated | Reduction of errors during computation of inverse discrete cosine transform |
US8699810B2 (en) * | 2006-06-26 | 2014-04-15 | Qualcomm Incorporated | Efficient fixed-point approximations of forward and inverse discrete cosine transforms |
US8300698B2 (en) * | 2006-10-23 | 2012-10-30 | Qualcomm Incorporated | Signalling of maximum dynamic range of inverse discrete cosine transform |
US8819095B2 (en) * | 2007-08-28 | 2014-08-26 | Qualcomm Incorporated | Fast computation of products by dyadic fractions with sign-symmetric rounding errors |
US8731062B2 (en) * | 2008-02-05 | 2014-05-20 | Ntt Docomo, Inc. | Noise and/or flicker reduction in video sequences using spatial and temporal processing |
US9378751B2 (en) * | 2008-06-19 | 2016-06-28 | Broadcom Corporation | Method and system for digital gain processing in a hardware audio CODEC for audio transmission |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
NO332205B1 (no) * | 2008-12-30 | 2012-07-30 | Cisco Systems Int Sarl | Implementering av entropikoding/dekoding av transformasjonskoeffisientdata til videokompressjonssystemer i datamaskininnretninger |
US8879632B2 (en) | 2010-02-18 | 2014-11-04 | Qualcomm Incorporated | Fixed point implementation for geometric motion partitioning |
JP2013524730A (ja) * | 2010-04-12 | 2013-06-17 | クゥアルコム・インコーポレイテッド | 幾何学的動き区分のための固定小数点実装形態 |
US9185422B2 (en) | 2010-07-15 | 2015-11-10 | Qualcomm Incorporated | Variable localized bit-depth increase for fixed-point transforms in video coding |
BR112013007023A2 (pt) | 2010-09-28 | 2017-07-25 | Samsung Electronics Co Ltd | método de codificação de vídeo e método de decodificação de vídeo |
US9824066B2 (en) * | 2011-01-10 | 2017-11-21 | Qualcomm Incorporated | 32-point transform for media data coding |
US20120183047A1 (en) * | 2011-01-18 | 2012-07-19 | Louis Joseph Kerofsky | Video decoder with reduced dynamic range transform with inverse transform clipping |
US20120183048A1 (en) * | 2011-01-18 | 2012-07-19 | Louis Joseph Kerofsky | Video decoder with reduced dynamic range transform with multiple clipping |
US9807395B2 (en) * | 2011-01-18 | 2017-10-31 | Dolby International Ab | Video decoder with reduced dynamic range transform with inverse transform shifting memory |
AU2016219700B2 (en) * | 2011-01-18 | 2018-06-28 | Dolby International Ab | Video decoder with reduced dynamic range transform with inverse transform shifting memory |
US20120183045A1 (en) * | 2011-01-18 | 2012-07-19 | Louis Joseph Kerofsky | Video decoder with reduced dynamic range transform including clipping |
KR20120098499A (ko) * | 2011-02-25 | 2012-09-05 | 삼성전자주식회사 | 영상의 변환 방법 및 장치, 및 영상의 역변환 방법 및 장치 |
US9326001B2 (en) * | 2011-03-22 | 2016-04-26 | International Business Machines Corporation | Scalable image distribution in virtualized server environments |
TWI601419B (zh) | 2011-06-30 | 2017-10-01 | 三星電子股份有限公司 | 視訊解碼方法 |
CN103959780B (zh) * | 2011-12-15 | 2017-10-13 | 寰发股份有限公司 | 量化电平截取装置及方法 |
WO2013086724A1 (en) | 2011-12-15 | 2013-06-20 | Mediatek Singapore Pte. Ltd. | Method of clippling transformed coefficients before de-quantization |
WO2013109471A1 (en) * | 2012-01-19 | 2013-07-25 | Vid Scale, Inc. | System and method of video coding quantization and dynamic range control |
US9131210B2 (en) * | 2012-03-16 | 2015-09-08 | Texas Instruments Incorporated | Low-complexity two-dimensional (2D) separable transform design with transpose buffer management |
AU2013264361B2 (en) | 2012-05-25 | 2017-01-05 | Sun Patent Trust | Image encoding method, image encoding device, image decoding method, image decoding device, and image encoding/decoding device |
CA2841112C (en) | 2012-05-25 | 2019-09-17 | Panasonic Corporation | Moving picture coding and decoding using context adaptive binary arithmetic coding with fixed probability for some sample adaptive offset parameters |
WO2013175736A1 (ja) | 2012-05-25 | 2013-11-28 | パナソニック株式会社 | 動画像符号化方法、動画像符号化装置、動画像復号方法、動画像復号装置、および、動画像符号化復号装置 |
WO2013183232A1 (ja) | 2012-06-04 | 2013-12-12 | パナソニック株式会社 | 動画像符号化方法、動画像符号化装置、動画像復号方法、および、動画像復号装置 |
KR20130137951A (ko) * | 2012-06-08 | 2013-12-18 | 한국전자통신연구원 | 초고해상도 영상 코덱을 위한 역변환 방법 |
US8806489B2 (en) | 2012-07-05 | 2014-08-12 | International Business Machines Corporation | Virtual machine image distribution network |
US9648332B2 (en) * | 2013-10-28 | 2017-05-09 | Qualcomm Incorporated | Adaptive inter-color component residual prediction |
JP6102707B2 (ja) * | 2013-12-05 | 2017-03-29 | Nttエレクトロニクス株式会社 | デジタル符号化装置 |
US9432696B2 (en) | 2014-03-17 | 2016-08-30 | Qualcomm Incorporated | Systems and methods for low complexity forward transforms using zeroed-out coefficients |
US9516345B2 (en) * | 2014-03-17 | 2016-12-06 | Qualcomm Incorporated | Systems and methods for low complexity forward transforms using mesh-based calculations |
US10057587B2 (en) * | 2015-01-31 | 2018-08-21 | Qualcomm Incorporated | Coding escape pixels for palette mode coding |
KR101644039B1 (ko) * | 2015-06-11 | 2016-07-29 | 에스케이텔레콤 주식회사 | 고정소수점 연산 방법 및 고정소수점 연산 장치 |
JP2020098986A (ja) * | 2018-12-17 | 2020-06-25 | キヤノン株式会社 | 画像符号化装置及び画像復号装置及びそれらの制御方法及びプログラム |
MX2022006797A (es) * | 2019-12-06 | 2022-09-12 | Fraunhofer Ges Forschung | Intraprediccion basada en matriz con ajustes de modo global. |
EP3849089A1 (en) * | 2020-01-09 | 2021-07-14 | Microsoft Technology Licensing, LLC | Encoding for data recovery in storage systems |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6539058B1 (en) * | 1998-04-13 | 2003-03-25 | Hitachi America, Ltd. | Methods and apparatus for reducing drift due to averaging in reduced resolution video decoders |
CN1553707A (zh) * | 2003-06-02 | 2004-12-08 | 杭州高特信息技术有限公司 | 一种dct快速变换结构 |
Family Cites Families (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3120605A (en) * | 1959-09-02 | 1964-02-04 | Technion Res & Dev Foundation | General purpose transistorized function generator |
US3982112A (en) * | 1974-12-23 | 1976-09-21 | General Electric Company | Recursive numerical processor |
JP2811369B2 (ja) * | 1989-01-27 | 1998-10-15 | ドルビー・ラボラトリーズ・ライセンシング・コーポレーション | 高品質オーディオ用短時間遅延変換コーダ、デコーダ、及びエンコーダ・デコーダ |
US5129015A (en) * | 1990-04-19 | 1992-07-07 | Ricoh Company Ltd. | Apparatus and method for compressing still images without multiplication |
DE9016732U1 (de) | 1990-12-11 | 1992-04-09 | Robert Bosch Gmbh, 70469 Stuttgart | Elektrisches Gerät, insbesondere Schalt- und Steuergerät für Kraftfahrzeuge |
US5122875A (en) | 1991-02-27 | 1992-06-16 | General Electric Company | An HDTV compression system |
RU2096955C1 (ru) | 1991-03-01 | 1997-11-27 | Е.И.Дюпон Де Немур Энд Компани | Вододиспергируемая гранулированная пестицидная композиция, получаемая методом экструзии, и способ ее получения |
JPH0530470A (ja) * | 1991-07-19 | 1993-02-05 | Sony Corp | デイジタルビデオ信号の記録および/または再生方法 |
US5285402A (en) * | 1991-11-22 | 1994-02-08 | Intel Corporation | Multiplyless discrete cosine transform |
US5539836A (en) * | 1991-12-20 | 1996-07-23 | Alaris Inc. | Method and apparatus for the realization of two-dimensional discrete cosine transform for an 8*8 image fragment |
TW224553B (en) | 1993-03-01 | 1994-06-01 | Sony Co Ltd | Method and apparatus for inverse discrete consine transform and coding/decoding of moving picture |
EP0648051B1 (en) * | 1993-03-31 | 1999-02-03 | Sony Corporation | Signal processor |
JP2816295B2 (ja) * | 1993-05-21 | 1998-10-27 | 鐘紡株式会社 | 離散コサイン変換方法および離散コサイン変換回路 |
RU2122295C1 (ru) | 1994-04-29 | 1998-11-20 | Виктор Павлович Дворкович | Способ покадрового сжатия изображений |
US6549666B1 (en) * | 1994-09-21 | 2003-04-15 | Ricoh Company, Ltd | Reversible embedded wavelet system implementation |
US5701263A (en) | 1995-08-28 | 1997-12-23 | Hyundai Electronics America | Inverse discrete cosine transform processor for VLSI implementation |
US6026183A (en) * | 1995-10-27 | 2000-02-15 | Texas Instruments Incorporated | Content-based video compression |
JP3302870B2 (ja) * | 1995-12-11 | 2002-07-15 | 三菱電機株式会社 | センサのバイアス誤差推定装置 |
US5825927A (en) * | 1996-01-16 | 1998-10-20 | Hitachi America, Ltd. | Methods and apparatus for encoding video data in a manner that is well suited for decoding by regular or downconverting decoders |
US5754456A (en) | 1996-03-05 | 1998-05-19 | Intel Corporation | Computer system performing an inverse cosine transfer function for use with multimedia information |
US6020838A (en) * | 1996-12-23 | 2000-02-01 | National Instruments Corporation | System and method for generating a sigma-delta correction circuit using matrix calculation of linearity error correction coefficients |
DE59801516D1 (de) | 1997-01-31 | 2001-10-25 | Siemens Ag | Verfahren und anordnung zur codierung und decodierung eines digitalisierten bildes |
TW376628B (en) * | 1997-05-06 | 1999-12-11 | Holtek Semiconductor Inc | Method of accelerating JPEG quantization calculation in image compression |
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 |
JP3524747B2 (ja) * | 1998-01-30 | 2004-05-10 | 三洋電機株式会社 | 離散コサイン変換回路 |
WO1999039303A1 (en) | 1998-02-02 | 1999-08-05 | The Trustees Of The University Of Pennsylvania | Method and system for computing 8x8 dct/idct and a vlsi implementation |
TW395135B (en) | 1998-03-03 | 2000-06-21 | Nat Science Council | A high throughput and regular architecture of 2-D 8x8 DCT/IDCT using direct form |
US6792149B1 (en) | 1998-05-07 | 2004-09-14 | Sarnoff Corporation | Method and apparatus for resizing an image frame including field-mode encoding |
US6310919B1 (en) * | 1998-05-07 | 2001-10-30 | Sarnoff Corporation | Method and apparatus for adaptively scaling motion vector information in an information stream decoder |
KR20000013653A (ko) | 1998-08-12 | 2000-03-06 | 이종하 | 정/역 최적화 정수형 여현변환장치 및 그 방법 |
EP0990992A3 (de) | 1998-09-28 | 2002-02-13 | Siemens Aktiengesellschaft | Diskreter/invers-diskreter Cosinus-Transformationsvorrichtung und Anordnung |
GB2347038A (en) | 1999-02-18 | 2000-08-23 | Nokia Mobile Phones Ltd | A video codec using re-transmission |
US6167092A (en) * | 1999-08-12 | 2000-12-26 | Packetvideo Corporation | Method and device for variable complexity decoding of motion-compensated block-based compressed digital video |
US6529634B1 (en) | 1999-11-08 | 2003-03-04 | Qualcomm, Inc. | Contrast sensitive variance based adaptive block size DCT image compression |
KR100683380B1 (ko) * | 2000-02-21 | 2007-02-15 | 주식회사 팬택앤큐리텔 | 영상 압축 부호화를 위한 변환 및 역변환 방법 및 장치 |
JP2001318910A (ja) * | 2000-02-29 | 2001-11-16 | Sony Corp | 逆離散コサイン変換装置 |
DE10116204A1 (de) | 2000-08-12 | 2002-02-21 | Bosch Gmbh Robert | Verfahren zur ganzzahligen Approximation von Transformationskoeffizienten sowie Coder und Decoder |
KR100357689B1 (ko) * | 2000-11-13 | 2002-10-19 | 삼성전자 주식회사 | 일관된 화질을 가지는 실시간 가변 비트율 엠펙 비디오전송 시스템 |
US6859815B2 (en) | 2000-12-19 | 2005-02-22 | Koninklijke Philips Electronics N.V. | Approximate inverse discrete cosine transform for scalable computation complexity video and still image decoding |
US6799192B1 (en) * | 2001-01-09 | 2004-09-28 | Apple Computer, Inc. | Method and apparatus for inverse discrete cosine transform |
US6873655B2 (en) * | 2001-01-09 | 2005-03-29 | Thomson Licensing A.A. | Codec system and method for spatially scalable video data |
US8374237B2 (en) * | 2001-03-02 | 2013-02-12 | Dolby Laboratories Licensing Corporation | High precision encoding and decoding of video images |
JP2002374531A (ja) | 2001-06-15 | 2002-12-26 | Victor Co Of Japan Ltd | 復号装置 |
US7082450B2 (en) * | 2001-08-30 | 2006-07-25 | Nokia Corporation | Implementation of a transform and of a subsequent quantization |
US6909753B2 (en) * | 2001-12-05 | 2005-06-21 | Koninklijke Philips Electronics, N.V. | Combined MPEG-4 FGS and modulation algorithm for wireless video transmission |
US7007055B2 (en) * | 2002-03-12 | 2006-02-28 | Intel Corporation | Method of performing NxM Discrete Cosine Transform |
US20030215011A1 (en) | 2002-05-17 | 2003-11-20 | General Instrument Corporation | Method and apparatus for transcoding compressed video bitstreams |
US7379956B2 (en) * | 2002-07-14 | 2008-05-27 | Apple Inc. | Encoding and decoding data arrays |
KR100376060B1 (en) * | 2002-10-25 | 2003-03-17 | Humax Co Ltd | Method and system for re-setting image size using inverse discrete cosine transform |
US7792891B2 (en) * | 2002-12-11 | 2010-09-07 | Nvidia Corporation | Forward discrete cosine transform engine |
TWI224931B (en) * | 2003-07-04 | 2004-12-01 | Mediatek Inc | Scalable system for inverse discrete cosine transform and method thereof |
TWI257054B (en) * | 2003-09-03 | 2006-06-21 | Mediatek Inc | Rapid and low cost of inverse discrete cosine transform system and method thereof |
KR20060135613A (ko) | 2003-09-24 | 2006-12-29 | 텍사스 인스트루먼츠 인코포레이티드 | 8×8 변환 및 양자화 |
GB0323038D0 (en) * | 2003-10-02 | 2003-11-05 | Koninkl Philips Electronics Nv | Method and apparatus for improved inverse transform calculation |
JP3951036B2 (ja) | 2003-11-27 | 2007-08-01 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的小数点方式、動的小数点演算方法、並びに2次元逆離散コサイン変換方法及びその装置 |
US20050196055A1 (en) * | 2004-03-04 | 2005-09-08 | Sheng Zhong | Method and system for codifying signals that ensure high fidelity reconstruction |
US7730116B2 (en) * | 2004-12-14 | 2010-06-01 | Stmicroelectronics, Inc. | Method and system for fast implementation of an approximation of a discrete cosine transform |
US8385424B2 (en) | 2006-06-26 | 2013-02-26 | Qualcomm Incorporated | Reduction of errors during computation of inverse discrete cosine transform |
US8699810B2 (en) * | 2006-06-26 | 2014-04-15 | Qualcomm Incorporated | Efficient fixed-point approximations of forward and inverse discrete cosine transforms |
US8300698B2 (en) * | 2006-10-23 | 2012-10-30 | Qualcomm Incorporated | Signalling of maximum dynamic range of inverse discrete cosine transform |
-
2007
- 2007-06-22 US US11/767,444 patent/US8385424B2/en active Active
- 2007-06-22 US US11/767,452 patent/US8606023B2/en not_active Expired - Fee Related
- 2007-06-25 EP EP07784535A patent/EP2035958A2/en not_active Withdrawn
- 2007-06-25 WO PCT/US2007/072039 patent/WO2008002881A2/en active Application Filing
- 2007-06-25 CN CN200780021734.6A patent/CN102007489B/zh not_active Expired - Fee Related
- 2007-06-25 JP JP2009518495A patent/JP5086343B2/ja not_active Expired - Fee Related
- 2007-06-25 CA CA2653692A patent/CA2653692C/en not_active Expired - Fee Related
- 2007-06-25 KR KR1020087031503A patent/KR101013344B1/ko not_active IP Right Cessation
- 2007-06-26 CA CA2653693A patent/CA2653693C/en not_active Expired - Fee Related
- 2007-06-26 CN CN200780023784.8A patent/CN102016829B/zh active Active
- 2007-06-26 TW TW096123075A patent/TWI373255B/zh not_active IP Right Cessation
- 2007-06-26 KR KR1020087031691A patent/KR100982156B1/ko active IP Right Grant
- 2007-06-26 BR BRPI0712984-0A patent/BRPI0712984A2/pt not_active IP Right Cessation
- 2007-06-26 TW TW096123078A patent/TWI382767B/zh not_active IP Right Cessation
- 2007-06-26 JP JP2009518500A patent/JP5269782B2/ja not_active Expired - Fee Related
- 2007-06-26 WO PCT/US2007/072088 patent/WO2008002897A2/en active Application Filing
- 2007-06-26 EP EP07799026.5A patent/EP2035959B1/en active Active
-
2013
- 2013-03-11 JP JP2013048219A patent/JP5661836B2/ja not_active Expired - Fee Related
-
2014
- 2014-06-18 IN IN1239MUN2014 patent/IN2014MN01239A/en unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6539058B1 (en) * | 1998-04-13 | 2003-03-25 | Hitachi America, Ltd. | Methods and apparatus for reducing drift due to averaging in reduced resolution video decoders |
CN1553707A (zh) * | 2003-06-02 | 2004-12-08 | 杭州高特信息技术有限公司 | 一种dct快速变换结构 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102016829B (zh) | 计算逆向离散余弦变换期间的误差减少 | |
KR100963458B1 (ko) | 순이산 및 역이산 코사인 변환의 효율적인 고정 소수점 근사 | |
CN101399989B (zh) | 减少位深的量子化方法 | |
JP4924904B2 (ja) | データフレームのシーケンスの効率的な符号化/復号 | |
US7129862B1 (en) | Decoding bit streams encoded according to variable length codes | |
RU2439682C2 (ru) | Уменьшение ошибок во время вычисления обратного дискретного косинусного преобразования | |
CN102037729B (zh) | 前向和逆向离散余弦变换的高效定点近似法 | |
RU2496139C2 (ru) | Эффективные аппроксимации с фиксированной запятой прямого и обратного дискретных косинусных преобразований | |
US7630436B2 (en) | Video predictive decoding method and apparatus |
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 |