CN105451026B - 数据压缩 - Google Patents
数据压缩 Download PDFInfo
- Publication number
- CN105451026B CN105451026B CN201510600444.3A CN201510600444A CN105451026B CN 105451026 B CN105451026 B CN 105451026B CN 201510600444 A CN201510600444 A CN 201510600444A CN 105451026 B CN105451026 B CN 105451026B
- Authority
- CN
- China
- Prior art keywords
- entropy
- data value
- bit
- encoded data
- value
- 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
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
作为数据压缩过程的一部分,数据值能够根据预定的可变长度熵编码方案(例如,基于指数哥伦布编码)而被熵编码,从而它们具有≥1个前缀比特以及≥0个后缀比特。对应的熵解码过程能够被执行,由此前缀比特被分析,以确定所接收的经熵编码的数据值之间的比特边界。后缀比特和所确定的比特边界被用于解码经熵编码的数据值。以这种方式,例如通过分析并行解码单元中的前缀比特,在相同时钟周期期间能够找到多个比特边界,由此允许(使用可变长度编码方案编码的)多个经熵编码的数据值在相同时钟周期中被解码。
Description
背景技术
在数据将被存储在存储器中和/或从存储器被读取的许多应用中,无损的和有损的数据压缩两者都是值得要的。通过在将数据存储在存储器中之前压缩数据,可以减少传送至存储器的数据量。数据压缩特别有用的数据的一种示例是图像数据,诸如将被存储在深度缓冲器中的深度数据、将被存储在帧缓冲器中的像素数据、以及将被存储在纹理缓冲器中的纹理数据。这些缓冲器可以是任何适当类型的存储器,诸如缓存存储器、分离的存储器子系统、共享存储器系统中的存储器区域、或者它们的某种组合。
图形处理单元(GPU)可以被用来处理图像数据,以便确定将被存储在帧缓冲器中以用于输出至显示器的图像的像素值。GPU通常具有用于并行处理大块数据的高度并行化结构。使得GPU(尤其是意图在移动设备上实施的那些GPU)在较低的功率电平处进行操作存在着显著的商业压力。与之相抵触的是,在更快的GPU上使用更高质量的渲染算法的要求,这由此对相对有限的资源:存储器带宽施加了压力。然而,增加存储器子系统的带宽可能不是有吸引力的解决方案,因为向GPU移动数据和从GPU移动数据以及甚至在GPU内移动数据,消耗了GPU的显著一部分的功率预算。除了GPU之外,相同的问题可能也与中央处理单元(CPU)有关。
如上文所描述的,减少传送至存储器的数据量的一种方式是压缩将向存储器传送和从存储器传送的数据。用于数据被压缩和解压缩所花费的时间增加到存储器读取操作和写入操作的时延,并且因此可能影响GPU工作的速度。此外,可以准许数据被压缩的速率不同于经压缩的数据被解压缩的速率。作为一个示例,经常可以准许用于压缩纹理数据的压缩过程(其通常为有损的压缩过程)显著地慢于用于解压缩经压缩的纹理数据的解压缩过程。相对照地,用于压缩用于存储在深度缓冲器中的深度数据或者用于存储在帧缓冲器中的像素数据的压缩过程(其通常为无损的压缩过程)理想地应当以与对应的解压缩过程近似相同的速率来加以执行。GB2451911公开了一种能够压缩二维数据集合的图形渲染系统。
发明内容
本概述被提供用以采用简化形式来介绍对下文在详细描述中进一步描述的概念的选择。本概述不意图为识别所要求保护的主题的关键特征或者必要特征,也不意图用来限制所要求保护的主题的范围。
例如作为数据压缩过程的一部分,能够根据预定的可变长度熵编码方案(例如,基于指数哥伦布编码)对数据值进行熵编码,从而它们具有≥1个前缀比特以及≥0个后缀比特。在一些示例中,至少一些前缀比特与后缀比特进行交织,并且在其他示例中,前缀比特可以与后缀比特分离地被分组。对应的熵解码过程能够被执行,由此第一和第二比特被取回(例如,被解交织),并且前缀比特被分析以确定所接收的经熵编码的数据值之间的比特边界。所取出(例如,被解交织)的后缀比特和所确定的比特边界被用于解码经熵编码的数据值。以这种方式,在确定比特边界时能够考虑减少的比特集合,这进而意味着,例如通过分析并行的解码单元中的前缀比特,在相同时钟周期期间能够找到多个比特边界,由此允许多个经熵编码的数据值(它们已经使用可变长度编码方案被编码)在相同时钟周期中被解码。作为一个示例,经熵编码的数据值可以形成块(例如,8×8块),并且来自该块的一行的所有经熵编码的数据值(例如,8个经熵编码的数据值)可以在一个时钟周期中被解码。
特别地,提供了一种对经熵编码的数据值的序列执行熵解码的方法,其中经熵编码的数据值已经根据预定的可变长度熵编码方案而被编码,从而经熵编码的数据值中的每个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据熵编码方案的预定关系而与第二比特的数目有关,并且其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特,该方法包括:接收经熵编码的数据值的序列;基于经熵编码的数据值的序列中的比特的根据熵编码方案的比特位置,将所接收的经熵编码的数据值的第一比特与所接收的经熵编码的数据值的第二比特分离;对于所接收的经编码的数据值中的每个所接收的经编码的数据值,根据第一比特的数目与第二比特的数目之间的预定关系,分析所接收的经熵编码的数据值的所分离的第一比特,以确定所接收的经熵编码的数据值之间的比特边界;以及根据预定的可变长度熵编码方案,使用第二比特和所确定的比特边界来解码经熵编码的数据值。可以提供一种计算机可读存储介质,具有被编码在其上的计算机可读程序代码,该计算机可读程序代码用于生成熵解码模块,该熵解码模块被配置为执行根据本文所描述的任何示例的执行熵解码的方法。
提供了一种熵解码模块,被配置为对经熵编码的数据值的序列执行熵解码,其中经熵编码的数据值已经根据预定的可变长度熵编码方案而被编码,从而经熵编码的数据值中的每个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据熵编码方案的预定关系而与第二比特的数目有关,并且其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特,熵解码模块被配置为:接收经熵编码的数据值的序列;基于经熵编码的数据值的序列中的比特的根据熵编码方案的比特位置,将所接收的经熵编码的数据值的第一比特与所接收的经熵编码的数据值的第二比特分离;对于所接收的经编码的数据值中的每个所接收的经编码的数据值,根据第一比特的数目与第二比特的数目之间的预定关系,分析所接收的经熵编码的数据值的所分离的第一比特,以确定所接收的经熵编码的数据值之间的比特边界;以及根据预定的可变长度熵编码方案,使用第二比特和所确定的比特边界来解码经熵编码的数据值。可以提供一种数据解压缩单元,包括这样的熵解码模块。
提供了一种根据预定的可变长度熵编码方案对多个数据值执行熵编码以形成经熵编码的数据值的序列的方法,该方法包括:接收数据值;对于所接收的数据值中的每个所接收的数据值,根据熵编码方案来确定经熵编码的数据值,由此经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据熵编码方案的预定关系而与第二比特的数目有关;以及从所确定的经熵编码的数据值形成经熵编码的数据值的序列,其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特。可以提供一种计算机可读存储介质,具有被编码在其上的计算机可读程序代码,该计算机可读程序代码用于生成熵编码模块,该熵编码模块被配置为执行根据本文描述的任何示例的执行熵编码的方法。
提供了一种熵编码模块,被配置为根据预定的可变长度熵编码方案对多个数据值执行熵编码以形成经熵编码的数据值的序列,该熵编码模块被配置为:接收数据值;对于所接收的数据值中的每个所接收的数据值,根据熵编码方案来确定经熵编码的数据值,由此经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与第二比特的数目有关;以及从所确定的经熵编码的数据值形成经熵编码的数据值的序列,其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特。可以提供一种数据压缩单元,包括这样的熵编码模块。
如对本领域的技术人员将是明显的,上面的特征在适当时可以被组合,并且可以与本文所描述的示例的方面中的任何方面进行组合。
附图说明
现在将参考附图具体描述示例,在附图中:
图1示出了一种图形渲染系统;
图2示出了一种数据压缩单元;
图3示出了用于一种压缩数据的方法的流程图;
图4示出了一种数据解压缩单元;
图5示出了用于一种解压缩数据的方法的流程图;
图6示出了一种空间解相关模块;
图7示出了一种线性预测方法的图示;
图8图示了空间解相关模块的处理管线的操作;
图9示出了用于一种在数据值块上执行空间解相关的方法的流程图;
图10是图示了熵编码方案如何编码不同符号值的表格;
图11示出了一种熵编码模块;
图12示出了用于一种对多个数据值执行熵编码的方法的流程图;
图13示出了一种熵解码模块;
图14示出了用于一种对多个经熵编码的数据值执行熵解码的方法的流程图;
图15表示包括经编码的数据值的块的第一数据分组;
图16表示包括多个数据块的第二数据分组;
图17图示了通道的数据如何被存储在经编码的数据值的块中;
图18示出了一种空间重相关模块;以及
图19图示了空间重相关模块的一级处理管线的操作。
贯穿附图,在适当处使用共同的参考数字来指示类似的特征。
具体实施方式
现在通过仅为示例的方式来描述实施例。
在各种各样的不同场景中,数据压缩是有用的。本文描述的示例中的大多数示例涉及用于由GPU使用的图像数据的压缩(以及解压缩),但是类似的原理可以应用到其他类型的数据的压缩(以及解压缩),诸如音频数据、数字数据、或文本数据和/或用于由除了GPU之外的其他处理单元(诸如CPU)使用的数据。
图1示出了可以实施在电子设备(诸如移动设备)中的图形渲染系统100。图形渲染系统100包括主机CPU 102、GPU 104、存储器106(例如图形存储器)以及显示器108。CPU 102被布置为与GPU 104进行通信。数据(其可以是经压缩的数据)能够在GPU 104与存储器106之间在任一方向上加以传送。由GPU 104渲染的图像可以被显示在显示器108上。
GPU 104包括渲染单元110、压缩/解压缩单元112、存储器接口114、以及显示器接口116。系统100被布置使得数据能够在以下各项之间在任一方向上传递:(i)CPU 102与渲染单元110;(ii)CPU 102与存储器接口114;(iii)渲染单元110与存储器接口114;(iv)存储器接口114与存储器106;(v)渲染单元110与压缩/解压缩单元112;(vi)压缩/解压缩单元112与存储器接口114;以及(vii)存储器接口114与显示器接口。系统100进一步被布置使得数据能够从压缩/解压缩单元112传递到显示器接口116,并且使得数据能够从显示器接口传递到显示器108。
在操作中,GPU 104个体地处理图像数据的区域。区域可以例如表示图像的矩形(包括正方形)部分。渲染单元110可以使用诸如Z-测试和纹理映射的已知技术来执行图形基元(primitives)(诸如三角形和线)的扫描转换。渲染单元110可以包含缓存单元以减少存储器流量。一些数据由渲染单元110经由存储器接口单元114(其可以包括缓存)读取或写入至存储器106,但是对于其他数据(诸如将被存储在帧缓冲器中的数据),数据优选地从渲染单元110经由压缩/解压缩单元112去到存储器接口114。压缩/解压缩单元112通过如下文更详细描述的那样对数据进行压缩,来减少将跨越外部存储器总线而被传送至存储器106的数据量。
显示器接口116将所完成的图像数据发送至显示器108。未压缩的图像可以直接从存储器接口单元114来加以访问。经压缩的数据可以经由压缩/解压缩单元112来加以访问,并且作为未压缩的数据而被发送至显示器108。在替换的示例中,经压缩的数据可以被直接发送至显示器108,并且显示器108可以包括如下逻辑,该逻辑用于以与压缩/解压缩单元112的解压缩等同的方式来解压缩经压缩的数据。虽然被示出为单个实体,但是为了增强性能的原因,压缩/解压缩单元112可以包含多个并行的压缩和/或解压缩单元。
作为一般性的概述,压缩系统可以遵循一种基本的算法纲要(algorithmicoutline),从而执行以下步骤(并不必然按照下文给出的顺序):
1.划分为块
图像数据在逻辑上被划分为独立的非重叠的矩形块,以便于准许对经压缩的数据的随机访问。块的尺寸是依赖于实施方式的,并且块可以例如为数据值的8×8、16×4、32×2、4×4或32×16块。增加块尺寸趋于提高所实现的压缩比。然而,增加块尺寸还趋于招致更大的硬件成本,并且此外,在访问模态(pattern)变得较不连贯时,可能会具有降低的效率。因此,在选择块尺寸时存在将要达到(struck)的一个平衡,其依赖于实施方式并且其可以例如依赖于将被压缩的数据的类型的特性。可以独立于由GPU处理的区域的尺寸来选择块尺寸,然而从选择块尺寸而使得它是区域尺寸的方便倍数或者反之亦然,可能会得到某种益处。
2.格式转换
一些缓冲器(例如深度缓冲器)可以以浮点格式来存储数据,但是对浮点数执行无损算法可能是有问题的。因此,浮点值可以被解释为带符号的大小整数值以准许无损计算。在数据值包括表示不同颜色分量的数据的多个通道的场合,也可以使用格式转换,其中这些通道中的值不是8比特的倍数,例如RGB 5:6:5或者ARGB 2:10:10:10格式。数据值的格式可以被转换,从而每个通道具有8比特的倍数的值(例如ARGB 8:8:8:8格式)。在压缩过程中并不总是需要该格式转换步骤,例如,当数据已经采用整数格式或者能够对其执行无损算法的某种其他格式时。
3.颜色通道解相关
数据值可以包括表示不同颜色分量的数据的多个通道。例如,数据可以采用ARGB8:8:8:8格式,其中存在8个比特来表示数据值中的每个数据值的阿尔法通道、红色通道、绿色通道和蓝色通道中的每个通道。在这些颜色通道中的一些或所有颜色通道(例如R通道、G通道和B通道)的值之间经常存在值得考虑的相关性,并且压缩算法能够利用这种相关性通过平均地减少这些通道中的一些通道的范围来压缩数据。用于利用不同颜色通道之间的相关性的适合的颜色空间变换在本领域中是已知的,例如在GB2451911中所描述的,并且本文中没有详细描述。适合的颜色空间变换是无损的和“非扩展的”,意味着用来表示颜色值的比特数目不会由于颜色空间变换而增加。
4.空间解相关
空间解相关(也称为“预测”)移除了邻近像素之间的一些相关性,由此平均地减少了值的动态范围。下文参考图6到9详细地描述一种用于执行空间解相关的方法。
5.熵编码
熵编码利用经解相关的数据的统计性质来减少用来表示数据的比特数目。算术编码方案在计算上是相对密集和缓慢的。因此,相对简单的可变长度编码(VLC)(例如Huffman或Golomb-Rice)或者基于运行长度的熵编码方案已经被使用。然而,即使利用简单的VLC编码方案,可能还是难以高速地执行熵编码。下文参考图10到14详细地描述了一种用于高速地并且以低计算复杂度地执行熵编码和解码的新方法。
6.存储
最后,经压缩的数据被存储在存储器106中。用于将数据存储在存储器106中的机制的细节对本领域的技术人员而言将是已知的,并且如此在本文中并不非常详细地描述。
解压缩系统可以遵循上文针对压缩所给出的基本算法纲要的逆转(并非必然按照上文给出的顺序的逆转)。
上文给出的一般压缩算法可以应用在压缩/解压缩单元112中。图2示出了压缩/解压缩单元112的模块,当压缩/解压缩单元112作为压缩单元进行操作时,这些模块将被用来压缩包括四个8比特通道的ARGB数据值的块。在其他示例中,压缩/解压缩单元112可以被用来压缩具有其他格式的数据值的块。压缩单元112包括颜色解相关模块202、四个空间解相关模块2041到2044、四个熵编码模块2061到2064、以及包装(packing)模块208。
图3示出了用于一种压缩数据块的方法的流程图。在步骤S302中,在压缩单元112处接收未压缩的数据的块。在压缩单元112处接收数据之前,可以对该数据执行上文给出的一般压缩算法的第一步骤,即划分为块。替换地,可以在压缩单元112处执行这一步骤。在颜色解相关模块220处接收未压缩的数据。在步骤S304中,颜色解相关模块202可以如上文所描述的那样对数据值应用格式转换。注意,例如当数据已经采用了适合的格式(诸如,采用整数格式)时,格式转换步骤可能不被实施,从而格式转换不是必要的。在图2和3中所示出的示例中,在压缩单元112处接收的数据已经被划分为块,例如8×8块。此外,在这个示例中,所接收的数据采用ARGB 8:8:8:8格式,并且在步骤S304中不需要格式转换。也就是说,在这个示例中,8×8块中的每个数据值都包括32比特:用于阿尔法通道的8比特、用于红色通道的8比特、用于绿色通道的8比特、以及用于蓝色通道的8比特。
在步骤S304中,颜色解相关模块202还对数据值应用颜色解相关。适合的颜色解相关方法在本领域中是已知的。优选地,使用不扩展任何输出通道的颜色解相关方法,即从颜色相关模块202输出的比特数目不大于被输入到颜色解相关模块202的比特数目。
在其他示例中,阿尔法通道的数据值被发送至空间解相关模块2044,并且R通道、G通道和B通道的数据值被发送至颜色解相关模块202,从而颜色解相关模块202仅对R值、G值和B值应用颜色解相关。
已经发现了(例如,如GB2451911中所示出的)以下的非常简单的颜色转换对于8比特颜色值表现良好:
R′=R-G mod 28
G′=G
B′=B-G mod 28
A′=A
其中R、G、B和A是在颜色解相关模块202处接收的通道的数据值,并且R’、G’、B’和A’是从颜色解相关模块202输出的经解相关的颜色通道的数据值。
经转换的通道R’和B’的分布没有不类似于中心为零的(有界)拉普拉斯(Laplace)分布函数。上文所示出的在变换中执行模运算减少了分布的动态范围,从而相比于如果不执行模运算而被使用的R-G和B-G的值而言能够使用较少的比特。注意,上文给出的模运算是mod 28,因为在上文给出的示例中,通道中的每个数据值包括8比特。在其他示例中,每个数据值可以具有不同数目的比特,例如n比特,在该情况下,模运算将相应地被改变,例如改变为mod 2n。
红色通道、绿色通道、蓝色通道和阿尔法通道的经颜色解相关的值从颜色解相关模块202输出并且彼此分开,以便于被传递至相应的空间解相关模块2041、2042、2043和2044。在步骤S306中,空间解相关模块204每个都对相应颜色通道的数据值的块应用空间解相关,以由此移除该块中的像素之间的相关性的显著部分。对空间解相关方法的选择应当考虑有关因素之间的折衷,诸如能够实现的在空间相关性上的减少、空间解相关中所涉及的操作的复杂度和/或时延、以及在对经空间解相关的值进行重相关中所涉及的操作的复杂度和/或时延。下文参考图6到9更详细地描述由每个空间解相关模块204应用的空间解相关的示例。
经空间解相关的数据值从每个空间解相关模块2041到2044输出,并且被提供至对应的熵编码模块2061到2064。在步骤S308中,熵编码模块206对数据值应用熵编码。根据可变长度编码(VLC)方案来执行熵编码,从而经熵编码的值将最可能地不是都具有相同数目的比特。一般而言,利用更少的比特来编码更有可能的值。以这种方式,有可能通过熵编码将会减少用来编码数据块中的所有数据值的比特的总数目。这一般是正确的,即使是熵编码的确导致了使用更多数目的遵循熵编码的比特来表示的一些数据值,例如,在使用八个比特来表示经空间解相关的数据值的示例中的多于八个比特。存在空间解相关可能扩展数据的一些情形,并且这些情形能够被视为特殊情况(即,与其他情况不同地对待该数据),以便于限制该扩展。
VLC编码能够合理地被简单明了地以高速率执行,但是处于匹配速率的VLC解码可能显著地更加困难,因为直到经编码的数据被分析时才知晓连续存储的经编码的数据值之间的比特边界,即直到经编码的数据被分析时才知晓经编码的数据值的长度。特别地,在编码时,多个符号能够独立地被映射到它们对应的代码和代码长度,并且然后被合并到连续输出的比特流中。然而,通常在解码时,必须依次地检查经编码的比特流中的每个代码,以便于确定它的长度,它的长度进而确定下一代码的起始位置。换句话说,需要找到不同的经编码的数据值之间的比特边界。虽然有可能在流的头部处嵌入指针(即,偏移)来辅助并行地解码若干符号(例如,识别该流中的比特边界),但是这样做损害了压缩率,因为附加比特被用于这些指针/偏移。下文参考图10到12更详细地描述由每个熵编码模块206应用的熵编码的示例。
经熵编码的数据值从每个熵编码模块206输出,并且被提供至包装模块208。在步骤S310中,包装模块根据包装方案将来自不同通道的经编码的数据值一起包装到经压缩的数据块中。在步骤S312中,经包装的数据值从包装模块208输出,作为经压缩的数据。经压缩的数据可以(例如,经由存储器接口114)被发送至存储器106用于存储在其中。
对于不同的数据值迭代图3中所示出的步骤。在每次迭代时可以处理多个数据值(例如,来自未压缩数据值的块的一行数据值)。可以在相应的连续时钟周期上执行这些迭代。因此,作为一个示例,在块的一行中存在八个数据值的场合,每时钟周期可以压缩八个数据值。
图4示出了压缩/解压缩单元112的模块,当压缩/解压缩单元112作为解压缩单元进行操作时,这些模块被用来解压缩ARGB数据值的块。解压缩单元112包括颜色重相关模块402、四个空间重相关模块4041到4044、四个熵解码模块4061到4064、以及解包装模块408。
图5示出了用于一种解压缩数据块的方法的流程图。在步骤S502中,在解压缩单元112的解包装模块408处从存储器108(例如,经由存储器接口114)接收经压缩的数据。经压缩的数据已经使用上文关于图2和3描述的方法加以压缩。在步骤S504中,经压缩的数据值被解包装为用于不同颜色分量的不同通道(例如,红色通道、绿色通道、蓝色通道和阿尔法通道)。根据如下的解包装方案来解包装经压缩的数据,该解包装方案对应于在步骤S310中用来将数据值包装到经压缩的数据块中的包装方案。用于不同通道的经编码的数据值(即,经压缩的数据)被提供至熵解码模块406中的相应熵解码模块。
在步骤S506中,每个熵解码模块406对经编码的数据值应用熵解码。根据在步骤S308中用来编码数据值的可变长度编码(VLC)方案来执行熵解码。下文参考图13和14更详细地描述由每个熵解码模块406应用的熵解码的示例。
经熵解码的数据值从熵解码模块4061到4064输出,并且被提供至对应的空间重相关模块4041到4044。在步骤S508中,空间重相关模块404每个都对相应颜色通道的经熵解码的数据值应用空间重相关。以这种方式,在步骤S306中被应用至数据值的空间解相关被逆转。
R通道、G通道、B通道和A通道的数据值被发送至颜色重相关模块402。在步骤S510中,颜色重相关模块402对R通道、G通道、B通道和A通道的数据值应用颜色重相关。颜色重相关方法被选取为上文描述的在步骤S304中使用的颜色解相关方法的逆转。在一些其他示例中,阿尔法通道可能绕过颜色重相关模块402,例如,如果它不需要用于颜色重相关的话。
在步骤S510之后,用于每个通道(例如,R通道、G通道、B通道和A通道)的数据值已经被解压缩,并且在步骤S512中,这些数据值被输出作为经解压缩的数据。经解压缩的数据可以被输出至设备中的任何其他元件。经解压缩的数据可以按任何适合的方式加以使用,例如,如果数据为图像数据,则经解压缩的数据可以被输出至显示器接口116,用于输出至显示器108。在其他示例中,数据可以被使用作为用于视频合成器(video compositor)的源或者作为3D渲染器中的纹理。
针对不同的数据值迭代图5中所示出的步骤。在每次迭代时可以处理多个数据值(例如,来自经解压缩的数据值的块的一行数据值)。可以在相应的连续时钟周期上执行这些迭代。因此,作为一个示例,当块的一行中存在八个数据值时,每时钟周期可以解压缩八个数据值。当存在多个数据通道时,可以独立地解压缩这些通道。例如,ARGB系统每时钟周期可以解压缩32(即4×8)个数据值。
在每个时钟周期中允许可预测数目的数据值被压缩和/或解压缩可能是有用的。当使用可变长度熵编码时和/或当2D空间解相关将被执行时,这并不必然是无关紧要的。此外,在每个时钟周期上压缩和解压缩多个数据值(例如,八个数据值)的能力允许数据块的压缩和解压缩快速地被执行,即,相比于不能在每个时钟周期中压缩和/或解压缩一样多数据值的其他压缩或解压缩方法,具有减少的时延。
下文描述了示出空间解相关以及熵编码/解码模块如何能够实现上文所提到的压缩率/解压缩率的示例。
图6示出了可以在任一个颜色通道中实施的空间解相关模块204之一。在图6中所示出的示例中,在空间解相关模块204处接收用于该通道的数据值的8×8块602。数据块602中的数据值被布置到八行(在图6中标记为0到7)和八列(在图6中标记为A到H)的二维阵列中。在图6中所示出的示例中,每个数据值包括8比特,从而数据块的每行包括64比特。空间解相关模块204被配置为在相应的连续时钟周期上处理数据块的行,以由此对来自该块的数据值在两个维度上执行空间解相关。图9示出了用于一种在空间解相关模块204处对数据值的块602执行二维(2D)空间解相关的过程的流程图。
空间解相关模块204包括多个并行的处理管线(6041到6048),每个管线包括第一级606和第二级608。处理管线604的第一级606被配置为沿着数据值的行来实施空间解相关。除了最后的处理管线6048之外的所有处理管线604的第一级606包括处理单元610,处理单元610被配置为确定第一系数来表示来自正在被处理的行的数据值中的相应一个数据值。处理管线604的第二级608被配置为沿着数据值的列来实施空间解相关。每个处理管线604的第二级608包括存储单元(例如,寄存器612)以及处理单元614。在图6中所示出的示例中,寄存器612具有足够的容量来存储至少三个数据值,例如,每个数据值具有八比特。注意,在图6中,处理单元6101、寄存器6121、以及处理单元6141被标记用于第一处理管线6041,但是为了清楚,在图6中未标记出用于其他处理管线604n(其中2≤n≤8)的对应处理单元610n、寄存器612n、以及处理单元614n。
在操作中,在步骤S902中,接收来自数据块602的一行(例如,行0)的数据值。特别地,每个处理管线604被配置为接收来自数据块的特定行的数据值中的一个或多个数据值。在图6中所示出的示例中,处理管线6041到6047的第一级的处理单元610接收来自数据块602的特定行的多于一个数据值,但是处理管线6048的第一级只接收来自数据块602的特定行的一个数据值。在步骤S904中,每个第一级606确定第一系数,第一系数表示该特定行的数据值中的相应一个数据值。第一系数由处理管线6041到6047的处理单元610基于在步骤S902中在处理单元610处接收的数据值并且根据任何适合的预测方案(诸如,基于线性预测或者基于Haar预测的方案)来加以确定。最后的处理管线6048的第一级606简单地将第一系数确定为与在该处接收的数据值相同。
在处理管线6041到6047的每个第一级中,为了确定表示数据值的第一系数,使用其他数据值来确定数据值的预测,并且然后第一系数基于所接收的数据值与数据值的预测之间的差异。假设预测足够精确,第一系数的值(例如,实际数据值与预测值之间的差异)一般显著地小于实际数据值本身,并且能够因此使用更少的比特来加以表示。第一系数可能经常等于或者接近等于零。
线性或Haar预测方案可以包括两级过程:预测以及然后更新,即预测和误差补偿。线性和Haar预测方案基于第2代小波。也就是说,对于在一行或一列中奇数编号的位置处的每个数据值(其可以被称为“奇数数据值”),所预测的值基于在偶数位置处的一个或多个数据值(其可以被称为“偶数数据值”)的某个集合来加以确定。在Haar预测方案中,该确定基于一个偶数数据值,并且在线性预测方案中,该确定基于两个偶数数据值。奇数数据值由实际数据值与所预测的值之间的差异所替代。然后在不同的规模上重复该预测,以预测其他的数据值。更新步骤的主要目的是保留图像瞬间。当系数被量化作为有损压缩过程的一部分时,保持这样的统计性质是有用的,但是,对于如本文描述的示例中的无损数据压缩,更新步骤没有被包括。避免更新步骤:a)对平均压缩比没有显著的有害影响,b)将预测过程中的硬件操作的数目减半,以及c)极大地缩短了用于编码和解码二者的计算依赖链(calculation dependency chain)。
可以在不同的空间频率处应用线性和/或Haar预测方案,以由此预测数据值中的不同数据值。在每个频率处,数据值的集合被用来以实际数据值与所预测的数据值之间的差异替代奇数数据值。当采用最高频率时,来自数据块的所有数据值都在所使用的数据值的该集合中。该集合中的奇数数据值P2i+1(其中i为整数)从来自具有偶数索引(例如P2i和/或P2i+2)的集合的一个或多个相邻数据值来加以预测,并且P2i+1由针对P2i+1的实际值与所预测的值之间的差异所替代。在较低频率处,该集合包括来自数据块的较少(例如一半)数据值。该过程能够在较低频率处被重复,直到一行中的数据值中的除一个数据值之外的全部数据值从该行中的一个或其他数据值被预测出。例如,参考图6,从列A和C中的数据值预测列B中的数据值;从列A和E中的数据值预测列C中的数据值;并且从列A中的数据值预测列E中的数据值。被用于使用线性和Haar预测方案来确定用于奇数数据值P2i+1的第一系数P′2i+1的预测和替代操作被给出为:
P′2i+1=P2i+1-LPredict(P2i,P2i+2)mod 28(线性)
P′2i+1=P2i+1-P2i mod 28(Haar)
其中函数LPredict被给出为:
LPredict函数的目的是生成已经被计算模28的两个输入值的最可能的平均。参考图7,如果考虑具有256(即28)“分钟”的钟面,则存在两条路径能够采用,以从该时钟上的任何两个位置横越。因为,在图7中所示出的示例中,执行计算mod 28,任何8比特的值表示更大的但是有限的同余(congruent)集合中的所有值,但是假定所期待的概率分布函数严重地偏向零,具有更小量值的值更可能是实际值。作为一个示例,图7示出了在|P2i-P2i+2|≥27时LPredict函数如何能够预测用于数据值P2i+1的值。在图7中所示出的示例中,P2i=220并且P2i+2=20。如果通过确定对这些两个值取简单的平均,则结果将是120。然而,根据上文给出的等式,由于|P2i-P2i+2|≥27,则如图7中所示出的,LPredict函数的结果由给出。由于模运算,248与值-8同余。值-8比值120更为可能得多,并且如此-8(其与248同余)被确定为LPredict函数的结果。
因为“比较”是两个数据值P2i和P2i+2的两个最高有效位(MSB)的XOR,所以LPredict函数中的“分支”实施在硬件中是无关紧要的。此外,所应用的偏移(27)再次被实施为一比特XOR运算。
空间解相关由相应的空间解相关模块204独立地应用到不同的颜色通道。在一个示例中,每个空间解相关模块204在8个时钟周期中以数据值的一个8×8块的吞吐量如图6中所示出地进行操作,在每个时钟周期时每次步进到块的不同行。图6中所示出的每个处理单元(610和614)能够在每个时钟周期执行线性预测或者通过重复输入来执行Haar预测。在其他示例中,仅执行Haar预测的处理单元(例如,处理单元6101、6106和6107),可能仅接收两个输入以避免重复输入。如果在特定频率处的两个邻近的相邻数据值是可用的,则应用线性预测,而如果在特定频率处只有一个邻近的相邻数据值可用,则应用Haar预测。在每个时钟周期时,使用针对列B、D、F和C的线性预测、以及针对列H、G和E的Haar预测,在三个频率处对一行进行解相关。对于8×8块,列A没有被处理单元610执行的水平预测所修改。
上文给出的用于线性和Haar预测方案的等式涉及数据值包括8比特的情况。如何针对具有不同比特数目的数据值修改这些等式,对本领域的技术人员而言将立即是明显的。例如,对于n比特数据值,上文等式中28的出现将用2n替代并且27的出现以2n-1替代。
由处理管线604的第一级606确定的第一系数从这些第一级输出至处理管线604的对应的第二级608。
特别地,在图6中所示出的示例中,第一处理管线6041的第一级606接收来自列位置A、B和C的特定行的数据值,并且输出第一系数以表示来自列位置B的特定行的数据值;第二处理管线6042的第一级606接收来自列位置C、D和E的特定行的数据值,并且输出第一系数以表示来自列位置D的特定行的数据值;第三处理管线6043的第一级606接收来自列位置E、F和G的特定行的数据值,并且输出第一系数以表示来自列位置F的特定行的数据值;第四处理管线6044的第一级606接收来自列位置G和H的特定行的数据值,并且输出第一系数以表示来自列位置H的特定行的数据值;第五处理管线6045的第一级606接收来自列位置A、C和E的特定行的数据值,并且输出第一系数以表示来自列位置C的特定行的数据值;第六处理管线6046的第一级606接收来自列位置E和G的特定行的数据值,并且输出第一系数以表示来自列位置G的特定行的数据值;第七处理管线6047的第一级606接收来自列位置A和E的特定行的数据值,并且输出第一系数以表示来自列位置E的特定行的数据值;以及第八处理管线6048的第一级606接收来自列位置A的特定行的数据值,并且输出第一系数以表示来自列位置A的特定行的数据值。
注意,最后的管线6048不需要图6中所示出的示例中的处理单元(其中处理8×8块的数据值),因为在这种情况下,用于列A的数据值不变地传递通过管线6048的第一级606。
在步骤S906中,在处理管线604的对应的第二级608处接收从第一级606输出的第一系数。特别地,在处理管线604的第二级608的寄存器612处接收第一系数。
第一系数然后垂直地被空间解相关。数据块的行按一种顺序被输入到并行的处理管线604,使得在这些行中的第一行已经由第二级608接收并且存储在寄存器612之后,能够基于寄存器612中存储的数据值来确定在第二级608处接收的该块的每个后续行的第二系数。例如,如下文更详细描述的,各行可以按如下的顺序被供应给处理管线604:行0、行4、行6、行7、行5、行2、行3、以及然后行1。然后以目标速率,利用仅最小的附加存储,在y方向上(即,沿着列的垂直方向上)应用上文描述的水平解相关的转置。特别地,如图6和8中所示出的示例(下文中描述)中,寄存器612可能不需要在任何一次存储多于三个数据值。
如果知晓输入像素是多样本抗锯齿(MSAA)方案中的邻近样本,则能够在处理中进行一个微小的变化。对于MSAA,有高概率相邻数据值将是相等的。在这种情形下,可以使用Haar预测用于适当数目的初始频率,因为Haar预测基于两个邻近数据值之间的差异,其在这种情况下很可能为0,并且可以因此相比于如果使用线性预测而言导致较低的数据值(能够利用较少的比特来表示它们)。
在步骤S910中,从对应的第一级606接收的第一系数选择性地被存储在处理管线604的每个第二级608的寄存器612中。也就是说,对于一些行,第一系数被存储在寄存器612中,而对于其他行,第一系数不被存储在寄存器612中。特别地,如果第一系数将被用来确定针对后续行的第二系数,则这些第一系数被存储在寄存器612中。
对于每个处理管线604,寄存器612被配置为一次(例如,每时钟周期)将多至两个值输出到相应的处理单元614。在每次迭代时,从对应的处理管线604的第一级606接收的第一系数被传递至相应的处理单元614,并且寄存器612被配置为将存储在寄存器612中的零个、一个或两个第一系数输出到相应的处理单元614。在步骤S912中,每个处理单元614确定第二系数,以表示来自正被处理的行的数据值中的相应一个数据值。第二系数是表示块的数据值的经空间解相关的值,并且从空间解相关模块204输出。对于块的第一行的数据值,仅基于针对该行的数据值所接收的第一系数来确定第二系数。用于第一行的数据值的第一系数被存储在寄存器612中,从而对于来自该块的后续行的数据值,基于所存储的第一系数以及用于后一行的第一系数来确定第二系数。例如,对于除了块的第一行之外的所有行的数据值,基于以下各项来确定用于一行数据值的第二系数:(i)在第二级608处接收的用于该行的对应的第一系数,以及(ii)相应的寄存器612中存储的用于相应的至少一个其他行的至少一个第一系数。
图8示出了来自8×8块的不同行的数据值被输入到处理管线604中的顺序的示例。处理管线604的第二级608的操作被总结在图8中所示出的表格中。能够看出,处理单元614具有图8中标记为“左”、“中间”和“右”的三个输入,由此中间输入被耦合到处理单元610的输出,而左输入和右输入被耦合到寄存器612的输出。在第一时钟周期(时钟周期C0)时,管线604的第二级608接收用于行0的第一系数(输入到第二级608的值由单撇:0’指示)并且输出用于行0的第二系数(从第二级608输出的值由双撇:0”指示),其中存储单元存储用于行0的第一系数(即,在时钟周期C0之后,寄存器612存储用于行0的第一系数,标示为0’)。
在第二时钟周期(时钟周期C1)时,管线604的第二级608接收用于行4的第一系数(输入到第二级608的值为4’)并且输出用于行4的第二系数(从第二级608输出的值为4”)。也就是说,处理单元614接收中间输入上的4’并且接收左输入和右输入上的0’,从而用于行4的第二系数(标示为4”)由处理单元614基于所接收的用于行4的第一系数(标示为4’)以及所存储的用于行0的第一系数(标示为0’,从寄存器612取回)来加以确定。在时钟周期C1之后,存储单元存储用于行0和4的第一系数(即寄存器612存储用于行0和4的第一系数,标示为0’和4’)。
在第三时钟周期(时钟周期C2)时,管线604的第二级608接收用于行6的第一系数(输入到第二级608的值为6’)并且输出用于行6的第二系数(从第二级608输出的值为6”)。也就是说,处理单元614接收中间输入上的6’并且接收左输入和右输入上的4’,从而用于行6的第二系数(标示为6”)由处理单元614基于所接收的用于行6的第一系数(标示为6’)以及所存储的用于行4的第一系数(标示为4’,从寄存器612取回)来加以确定。在时钟周期C2之后,存储单元存储用于行0、4和6的第一系数(即寄存器612存储用于行0、4和6的第一系数,标示为0’、4’和6’)。
在第四时钟周期(时钟周期C3)时,管线604的第二级608接收用于行7的第一系数(输入到第二级608的值为7’)并且输出用于行7的第二系数(从第二级608输出的值为7”)。也就是说,处理单元614接收中间输入上的7’并且接收左输入和右输入上的6’,从而用于行7的第二系数(标示为7”)由处理单元614基于所接收的用于行7的第一系数(标示为7’)以及所存储的用于行6的第一系数(标示为6’,从寄存器612取回)来加以确定。在时钟周期C3之后,存储单元存储用于行0、4和6的第一系数(即寄存器612存储用于行0、4和6的第一系数,标示为0’、4’和6’)。
在第五时钟周期(时钟周期C4)时,管线604的第二级608接收用于行5的第一系数(输入到第二级608的值为5’)并且输出用于行5的第二系数(从第二级608输出的值为5”)。也就是说,处理单元614接收中间输入上的5’、接收左输入上的4’并且接收右输入上的6’,从而用于行5的第二系数(标示为5”)由处理单元614基于所接收的用于行5的第一系数(标示为5’)以及所存储的用于行4和6的第一系数(标示为4’和6’,从寄存器612取回)来加以确定。在时钟周期C4之后,存储单元存储用于行0和4的第一系数(即,寄存器612存储用于行0和4的第一系数,标示为0’和4’)。用于行6的第一系数(标示为6’)可以被丢弃,因为其不需要用于后续行,但是将6’留在寄存器612中直到其被覆写可能会更简单。
在第六时钟周期(时钟周期C5)时,管线604的第二级608接收用于行2的第一系数(输入到第二级608的值为2’)并且输出用于行2的第二系数(从第二级608输出的值为2”)。也就是说,处理单元614接收中间输入上的2’、接收左输入上的0’并且接收右输入上的4’,从而用于行2的第二系数(标示为2”)由处理单元614基于所接收的用于行2的第一系数(标示为2’)以及所存储的用于行0和4的第一系数(标示为0’和4’,从寄存器612取回)来加以确定。在时钟周期C5之后,存储单元存储用于行0、4和2的第一系数(即寄存器612存储用于行0、4和2的第一系数,标示为0’、4’和2’)。
在第七时钟周期(时钟周期C6)时,管线604的第二级608接收用于行3的第一系数(输入到第二级608的值为3’)并且输出用于行3的第二系数(从第二级608输出的值为3”)。也就是说,处理单元614接收中间输入上的3’、接收左输入上的2’并且接收右输入上的4’,从而用于行3的第二系数(标示为3”)由处理单元614基于所接收的用于行3的第一系数(标示为3’)以及所存储的用于行2和4的第一系数(标示为2’和4’,从寄存器612取回)来加以确定。在时钟周期C6之后,存储单元存储用于行0和2的第一系数(即寄存器612存储用于行0和2的第一系数,标示为0’和2’)。用于行4的第一系数(标示为4’)可以被丢弃,因为其不需要用于后续行,但是将4’留在寄存器612中直到其被覆写可能会更简单。
在第八时钟周期(时钟周期C7)时,管线604的第二级608接收用于行1的第一系数(输入到第二级608的值为1’)并且输出用于行1的第二系数(从第二级608输出的值为1”)。也就是说,处理单元614接收中间输入上的1’、接收左输入上的0’并且接收右输入上的2’,从而用于行1的第二系数(标示为1”)由处理单元614基于所接收的用于行1的第一系数(标示为1’)以及所存储的用于行0和2的第一系数(标示为0’和2’,从寄存器612取回)来加以确定。在时钟周期C7之后什么存储在寄存器612中并不重要,因为在后一时钟周期中,该过程对新的块进行重复,所以寄存器612中用于当前块的数据将不会被使用。当这样的数据将被存储在寄存器612中时,该数据可以由用于新块的数据所覆写。
在图8中所示出的示例中,寄存器612每个在任何给定时间存储多至三个第一系数,以便于处理来自包括八行数据值的块的数据值。一般而言,每个寄存器612将具有在任何给定时间存储多至log2(r)个第一系数的容量,其中r是数据值的块中的行数目。
由处理单元614执行的处理可以是线性处理或者Haar处理,例如,这取决于为了确定第二系数所提供的不同输入的数目。
对于具有不同行数目(即,不是如上文给出的示例中的八行)的块,本领域的技术人员将会知晓如何相应地修改输入行的顺序,从而在每个时钟周期(除了块的第一行被处理的时钟周期之外)时,能够基于已经被存储在寄存器612中的来自该块的先前存储的数据值的行来针对一行输出数据值。
上文描述的空间解相关模块204被配置为沿着数据值的行并且然后沿着数据值的列来实施空间解相关,从而可以在多个连续的时钟周期中的每个时钟周期时输出一行经空间解相关的值。在其他示例中,行和列的处理可以互换,从而空间解相关模块204沿着数据值的列并且然后沿着数据值的行来实施空间解相关,从而可以在多个连续时钟周期中的每个时钟周期时输出一列经空间解相关的值。
经空间解相关的数据值(即,从处理单元614输出的第二系数)从空间解相关模块204输出并且被提供给对应的熵编码模块206。在从空间解相关模块204输出的数据值被提供给熵编码模块206之前,可以执行对这些数据值进行重映射的可选步骤,例如,如果确定这将会改进熵编码过程的话。例如,归因于空间解相关过程,从空间解相关模块204输出的数据值可以很可能具有接近于零或者接近于最大值(例如,对于8比特值为255)的值,其中注意到接近于最大值的值被用来表示接近于零的负数值。因此能够考虑到,在从空间解相关模块204输出的数据值的分布中存在两个峰值。当数据值的分布中仅存在一个峰值时,熵编码可能是更加高效的。这能够通过对数据值进行重映射来实现,例如通过将符号比特(即,该值的第一比特)移动至最低有效比特位置,并且如果原来的值是负值则翻转(flipping)其他比特,但是如果原来的值不是负数则不翻转其他比特。以这种方式,上文描述的示例中的两个峰值将会被组合在一起成为一个峰值,允许执行更为高效的熵编码。重映射过程可以按改进熵编码过程的效率的任何适合方式来加以实施。
如上文所描述的,熵编码模块206使用可变长度编码方案对经空间解相关的值应用熵编码。该编码方案被选取来允许以可预测速率对数据值的快速编码,并且特别是快速解码。例如,在本文详细描述的示例中,根据熵编码方案在多个连续时钟周期中的每个时钟周期中编码八个数据值,并且根据对应的熵解码方案在多个连续时钟周期中的每个时钟周期中解码八个数据值。
适合的熵编码方案的一个示例是基于指数哥伦布(Golomb)编码、并且特别是基于也被称为Elias编码的k=0变体的编码方案。根据这一编码方案,数据值(或“符号”)被编码为经编码的数据值,每个包括N+1比特的前缀,随后是N比特的二进制值,其中N取决于符号值。在本文详细描述的示例中,前缀比特具有根据一元(unary)编码的格式,从而前缀比特包括以下两项之一:(i)被一个1跟随的可变数目的0,或者(ii)被一个0跟随的可变数目的1。在其他示例中,前缀比特可以具有其他格式。归因于对数据值的处理(例如,颜色解相关和空间解相关),在熵编码模块206处接收的数据值的分布趋于相当地“多峰”,这允许高效的熵编码。例如,在重映射如上文所描述地被应用到空间解相关模块204的输出的情况下,在熵编码模块206处接收的数据值相比于较高的值更可能具有较低的值,从而例如值0比值255更为可能得多。在本文描述的示例中,Elias编码方案被轻微地修改,并且图10示出了不同的数据值(或“符号”)如何对应于经修改的Elias编码。图10中所示出的表格中的值以大端(big-endian)顺序加以示出,从而MSB在左边,因为这是二进制值被正常表示的方式。然而,能够意识到,这些值可能已经按小端(little-endian)顺序加以表示,从而MSB在右边,并且事实上这可能更好地表示了数据如何被输出,但是为了便于人们的理解,在图10中以MSB在左边来表示这些值。图10中表格的第二列中的经修改的Elias码第一具有前缀并且第二具有采用粗体的二进制后缀而被写入。引导前缀比特在图10中所示出的表格中被加下划线。能够看出,每个N比特的后缀准确地匹配于对应符号的N个LSB,这N个LSB已经在图10中的符号的二进制表示中以粗体加以指示。相对于常规的Elias编码,这简化了用于熵编码和解码二者的映射。前缀的长度指示了后缀的长度。
因为系数‘255’将在它自己的具有17比特的组中结束,所以已经确定在本文描述的示例中,数据值255不被熵编码。替代地,如果一行包括数据值255,则该行的数据值被输出作为来自熵编码器的原始数据值。这避免了输出17比特的值的需要。此外,归因于先前的颜色和空间区相关步骤,数据值为255的期望概率非常低,并且当使用指数哥伦布编码时,例如可能大约为2-17,从而这个数据值出现在一行中的机率被预期为大约2-11。当由于一行中的一个数据值为255,所以该行数据值没有被熵编码时,可能存在效率损失,但是因为这非常不频繁地发生(例如,每211行一次),所以这一效率损失被认为是可接受的。
在本文详细描述的示例中,如图10中的表格的最后两列所示出的,前缀的引导比特(即MSB,在图10中被加下划线)与经编码的比特的剩余部分分离,并且剩余的N个前缀比特和N个后缀比特彼此交织。在经交织的比特中,前缀比特的数目与后缀比特的数目之间存在已知的关系。在图10中所示出的示例中,在经交织的比特中存在相同数目的前缀比特和后缀比特。因此,在经交织的比特中,奇数编号的比特将包含纯后缀信息,而偶数编号的比特将包含纯前缀信息。在其他示例中,前缀比特的数目与后缀比特的数目之间的关系可以不同,并且将取决于被用来编码数据值的特定编码方案,例如经交织的比特可以包括两倍于前缀比特的后缀比特(并且可以被交织为顺序:前缀、后缀、后缀、前缀、后缀、后缀、……)。将经编码的数据值拆分为分离的引导比特以及经交织的前缀和后缀比特,可以对熵编码器能够操作的速度造成可忽略的差异,但是如在下文中更详细描述的,它可以潜在地对熵解码器能够操作的速度造成巨大差异。前缀比特与后缀比特彼此是可分离的,从而在解码时,前缀比特能够被分析以找到比特边界而无需分析后缀比特,并且然后比特边界和后缀比特能够被用来确定经解码的数据值。这显著地减少了在并行的解码器中用于解码数据值的硬件成本。在上文描述的示例中,前缀比特和后缀比特被交织,这允许它们是可分离的。在其他示例中,前缀比特和后缀比特不被交织,并且替代地被分离地分组为独立地可访问的后缀比特块和前缀比特块。在其他示例中,可以实施其他方式的分离前缀比特和后缀比特。
除了示出特定符号的编码外,图10中的一些线还示出了用于编码符号组的一般规则。例如,符号1和2以二进制被表示为000000AB,其中对于符号值1,AB=01,并且对于符号值2,AB=10。用于这些符号的经修改的Elias码具有前缀01和后缀B,其被分离为引导前缀比特0和经交织的比特1B。类似地,符号3到6以二进制被表示为00000CDE,其中对于符号值3,CDE=011;对于符号值4,CDE=100;对于符号值5,CDE=101;并且对于符号值6,CDE=110。用于这些符号的经修改的Elias码具有前缀001以及后缀DE,其被分离为引导前缀比特0以及经交织的比特0D1E。类似地,符号7到14以二进制被表示为0000FGHI,其中对于符号值7,FGHI=0111;对于符号值8,FGHI=1000;以此类推直到我们到达符号值14,对于符号值14,FGHI=1110。用于这些符号的经修改的Elias码具有前缀0001和后缀GHI,其被分离为引导前缀比特0以及经交织的比特0G0H1I。从这些示例来看,符号值被编码的方式应当是明显的。
图11示出了熵编码模块206之一的更详细的视图。熵编码模块206包括多个第一编码单元11020到11027,它们被配置为接收用于将被编码的数据块的相应列的数据值。为了清楚,仅编码单元11020和11027在图11中以参考标号标示出。熵编码模块206还包括第二编码单元1104、处理单元1106、数据存储1108(例如,被实施为输出先入先出(FIFO)存储器1108)、以及编码指示符单元1110。
图12示出了用于在熵编码模块206处对数据值执行熵编码以形成经熵编码的数据值序列的过程的流程图。在步骤S1202中,将被编码的一行的数据值在第一编码单元11020到11027处被接收。
在步骤S1204中,根据经修改的Elias编码方案来确定针对每个所接收的数据值的经熵编码的数据值。为了做到这一点,第一编码单元1102检查所接收的经熵编码的数据值以确定:(i)每个经熵编码的数据值的尺寸的指示,以及(ii)用于每个经编码的数据值的后缀比特。如上文所描述的,能够容易地确定N个后缀比特,因为它们匹配于未编码的数据值的N个LSB。尺寸指示可以采用二进制格式。作为一个示例,尺寸指示可以表示值N。由于经编码的数据值中排除掉引导比特之后的比特的总数目总是为偶数(例如2N),所以其能够通过将这一数目除以2(例如,以给出N)来加以表示,从而仅需要3个比特来表示上文给出的示例中针对8比特数据值的尺寸、以及具有最大比特数目15的经修改的Elias码(具有N+1个前缀比特和N个后缀比特)(从而最大的尺寸指示Nmax为7,其能够使用仅3个二进制比特来加以表示)。第二编码单元1104从每个第一编码单元1102接收后缀比特和尺寸指示,并且生成前缀比特(不包括引导比特)。前缀比特基于经熵编码的数据值的尺寸指示来加以确定。在步骤S1206中,第二编码单元1104对上文所描述并且在图10中的表格的最后一列中示出的后缀比特和前缀比特(不包括引导比特)进行交织。第二编码单元1104可以包括多个分离的处理单元,它们被配置为处理来自不同的第一编码单元1102的输出,从而能够在多个连续时钟周期中的每个时钟周期中编码整行的数据值。对后缀比特和前缀比特的交织意味着,经熵编码的数据值的序列中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特。在其他示例中,这能够以其他方式来加以实现。例如,如果前缀比特和后缀比特未被交织,并且替代地被分离地分组到独立地可访问的后缀比特块和前缀比特块中,则经熵编码的数据值序列中每个比特位置由熵编码方案预先确定为包括第一比特或第二比特。如下文更详细描述的,这允许经熵编码的数据值序列中的第一比特和第二比特在熵解码期间,简单地基于比特的比特位置而被分离。
在步骤S1208中,尺寸指示从第一编码单元1102提供至处理单元1106,并且处理单元1106根据正使用的熵编码方案来确定经编码的数据值的引导比特并将它们分组到第一字段中。如关于上文给出的示例所描述的,前缀比特(不包括引导比特)和后缀比特以交替的方式彼此交织,并且被包括在第二字段中。如通过查看图10中的表格能够意识到的,根据本文详细描述的示例中使用的经修改的Elias编码方案,如果尺寸指示是零,则未编码的数据值为零,并且经编码的数据值将具有单个前缀比特1并且没有后缀比特,从而引导比特是1。然而,根据本文详细描述的示例中使用的经修改的Elias编码方案,如果尺寸指示不是零,则未编码的数据值不是零,并且经编码的数据值将具有多于一个比特的前缀,从而引导比特(即,前缀的MSB)将是0。因此,在处理单元1106中对引导比特的确定可以简单地通过确定尺寸指示是零还是非零来加以实施。
编码指示符单元1110接收尺寸指示,并且设置指示符来指示用来编码数据值的编码方案。在一个简单的示例中,该指示符可以是用于每行的单个比特,指示用于该行的数据是否将被熵编码或者被输出为原始数据(即未被熵编码)。例如,可以基于用于经熵编码的数据值的尺寸指示是否指示了一行的经熵编码的数据值相比于该行的原始数据值而言将使用较少的比特(即,基于少于64比特是否将被用于未编码的数据值每个具有八比特的示例中的行的八个经熵编码的数据值),来确定所使用的编码方案。
在步骤S1210中,各行的经编码的数据值(包括来自第二编码单元1104的经交织的前缀比特和后缀比特以及来自处理单元1106的引导比特)被发送至输出FIFO 1108并且被存储在其中。在多个连续时钟周期中的每个时钟周期时,一行经编码的数据值被存储在输出FIFO 1108中,直到经编码的数据值的块(例如8行)内的所有数据值已经被编码。然后,在步骤S1212中,经编码的数据值的该块从输出FIFO 1108输出并且被发送至包装模块208,其中来自每个颜色通道的经编码的数据值被包装在一起。以这种方式,经编码的数据值的序列已经被形成。经编码的数据块然后能够例如经由存储器接口114而被发送用于存储在存储器106中。
如上文所描述的,如果用于一行的经编码的数据值将不包括比原始(即未编码的)数据值更少的比特,则输出原始数据值而不是经熵编码的数据值。从编码指示符单元1110输出的指示符(原始或熵编码标记)被提供至输出FIFO 1108。输出FIFO 1108还接收原始比特(即,在第一编码单元11020到11027处接收的行的比特)。用于8×8块的8比特数据值的原始数据包括512比特,所以如果输出FIFO 1108确定经编码的数据值的块包括≥512比特(未必但有可能),则输出FIFO 1108可以输出原始数据比特而不是经编码的数据值的块。
图15表示包装模块208可以将已经如上文描述的那样被编码的经编码的数据值的8×8块(其中每个未编码的数据值每颜色通道包括8比特)包装到其中的数据分组。每个颜色通道(例如,R通道、G通道、B通道和A通道)的数据包括多至512比特,并且被存储在该数据分组的数据部分中的相应块中。在图15中所示出的示例中,其中存在M个颜色通道,对于通道0到M-2,存在相应的尺寸指示符(例如,每个有7比特)以指示用于相应通道的数据的比特数目。尺寸指示符被用来确定每个通道的数据的开始位置,并且用来确定通道的数据的格式。例如,通道1数据将从与通道0的尺寸相对应的数据部分的开始起的偏移所给出的比特位置开始。由于不存在后续的通道,所以没有必要具有用于通道M-1的尺寸指示符。然而,通道M-1的数据的格式仍然需要被指示,所以两个比特被包括在控制部分中以指示通道M-1的数据的格式。某个数目的填充比特(例如,在0和3之间)被包括在控制部分中,以确保数据部分在可被4整除的比特位置处开始。通道数据块的准确尺寸可以由9比特的尺寸指示符给出(也就是说,可能需要9比特来准确地表示从1到512比特的尺寸)。然而,如图15中所示出的,通过将尺寸除以4来给出尺寸指示符,从而仅使用7比特。能够意识到,上文描述的熵编码方案将总是使用偶数个比特,并且所以将仅需要八个比特来准确地表示通道数据块的尺寸。此外,通道数据块可以包括填充比特(其未在图15中明确地被示出)以填充通道数据块直至四比特的最接近倍数,从而所有的通道数据块在四比特的倍数的位置处开始。假设等同的概率,这意味着在50%的时间我们会浪费两个比特。因此,平均地,该方案浪费了1比特的存储,这准确地平衡了在尺寸指示符中对一比特的节省(即,从8比特减少到7比特)。然而,由于(a)尺寸的总和以及(b)用来选择通道数据的复用/移位被减少,所以相比于使用8比特用于尺寸指示符,这个方案实施起来更简单/更便宜。
为了识别通道数据以原始形式被存储的特殊情况(这有效地意味着经熵编码的数据>508比特),可以使用尺寸值“0”。最小的标准的经熵编码的数据在尺寸上为74比特,该尺寸对应于(向上取整的)尺寸指示符19(因为19×4=76)。因此,1与18(含)之间的尺寸指示符可以被用来指示其他的特殊情况。例如,尺寸指示符2可以指示通道的数据块中的数据值具有常数值,并且数据部分中的通道数据块的尺寸是八比特。如上文所描述的,对于最后的通道(通道M-1),没有必要知道它的准确尺寸,因为没有必要定位存储在它之后的数据,但是使用指示符来指示通道M-1中的数据的格式,例如,其是采用原始格式、以熵编码加以编码、还是常数,并且因此使用两个比特来指示这一格式。
当不同尺寸的数据块(例如,不是8×8块)被编码时和/或当使用不同数目的比特(例如,不是8比特)来表示每个数据值时,类似的数据结构可以被使用。
此外,在另一示例中,通过使每个尺寸指示符指示一对通道的尺寸,可以使尺寸指示符的数目减半。对用来存储控制数据的比特数目的任何减少可以是数据压缩方案中的益处,所以减少所使用的尺寸指示符的数目可以是有益的。例如,第一尺寸指示符可以指示通道0和1的组合尺寸,并且第二尺寸指示符可以指示通道2和3的组合尺寸,等等。在这一情况下,用于奇数通道的数据块可以按逆向的比特顺序被包括在数据部分中,而用于偶数通道的数据块可以按正向比特顺序被包括在数据部分中。以这种方式,对于偶数通道,尺寸指示符能够被用来指示通道数据的开始,并且通过添加前面通道的尺寸以确定通道数据的开始,偶数通道能够按之前的相同方式加以读出。然而,对于奇数通道,尺寸指示符能够被用来指示通道数据的块的结束。由于奇数通道的数据块采用逆向的比特顺序,所以通道数据的块的结束指示了通道数据的开始,即通道数据的第一比特。奇数通道的通道数据然后能够根据逆向的比特顺序(即,“后向”)从通道数据的块的结束点来加以读取。由于用于奇数通道的通道数据已经以逆向的比特顺序被存储在数据分组中,然后通道数据被正确地读出。以这种方式,奇数通道中的数据的第一比特的位置从下一偶数通道的位置来加以确定。
存储较少(例如一半)的尺寸指示符的方法能够被使用用于在数据分组中存储的任何类型的数据,其中不同的数据块被包括在该数据分组中。尺寸指示符是指示数据块在数据分组中的起始比特位置的指示符的一个示例,但是更一般地,任何适合的指示符可以被使用。指示符中的至少一个指示符可以指示用于数据分组中的一对数据块的特定起始比特位置。该对数据块中的第一数据块可以按逆向比特顺序被包括在数据分组中,第一数据块的第一比特根据所指示的特定起始比特位置被放置在数据分组中。该对数据块中的第二数据块可以按正向比特顺序被包括在数据分组中,该第二数据块的第一比特根据所指示的特定起始比特位置被放置在数据分组中。指示符被包括在数据分组中,例如数据分组的控制部分中,而数据块(例如以邻接的方式)被包括在数据分组的数据部分中。为了从数据分组中读取数据块,指示符被用来确定数据块在数据分组中的起始比特位置,并且根据所确定的数据块的起始比特位置从数据分组中读取数据块。
图16示出了一个示例,其中在数据分组的数据部分中包括标记为数据块0到数据块4的五个数据块(例如,其表示用于不同通道的数据)。在控制部分中仅存在两个指示符,它们指示数据块1与2以及数据块3与4之间的边界的比特位置。虚线示出了数据块的比特被布置的顺序。特别地,偶数数据块(数据块0、2和4)以正向比特顺序被包括,而奇数数据块(数据块1和3)以逆向比特顺序被包括。为了读取数据块0,第一比特能够在数据分组的数据部分的开始处找到。为了读取数据块1,第一指示符(指示数据块0和1的组合尺寸)被用来找出数据块1与2之间的边界。数据块1的第一比特在这个比特位置(或者,例如在这个比特位置之前的一个比特)处被找到,并且然后数据块1能够从该比特位置按逆向顺序被读出。为了读取数据块2,第一指示符(指示数据块0和1的组合尺寸)被用来找出数据块1与2之间的边界。数据块2的第一比特在这个比特位置(或者,例如在这个比特位置之后的一个比特)处被找到,并且然后数据块2能够从该比特位置以正向顺序被读出。奇数数据块(包括数据块3)如上面针对数据块1所描述的加以读出。偶数数据块(包括数据块4)如上面针对数据块2所描述的加以读出。在这一示例中,简单地通过在读出数据块之前确定数据块是奇数的还是偶数的,来确定数据块的比特顺序(即正向或逆向)。
以这种方式,相比于诸如图15中所示出的数据分组(其中对于数据分组的数据部分中的数据块之间的每个边界都存在指示符),被使用用于指示符的比特数目被减少。在图16中所示出的示例中,数据分组的控制部分中的所有指示符都指示用于一对数据块的起始比特位置,并且因此一半数目的指示符被使用在控制部分中,由此减少了数据分组中所包括的数据量。相比于按正向比特顺序来包括或读取数据块,按逆向比特顺序来包括或读取数据块并没有显著地更加复杂(如果真的会发生的话)。是包装模块208来形成数据分组,并且是解包装模块408从数据分组中读取数据块。注意,如果最后的通道是奇数通道,则在最后的奇数通道之后将不会有通道,并且最后的尺寸指示符将指示数据分组的结束。例如,如果数据块4未被包括在图15中所示出的数据分组中,则我们将仍然需要用于块2和3的尺寸指示符,其将指向块3的结束以便于找到数据块3中的数据的开始。
图17图示了在8比特数据值的8×8块的示例中如何将通道的数据存储在经编码的数据值的数据块中。通道数据包括用于每行(其具有8个与64个之间的比特)的数据块、以及用于每行的行模式标记,其指示相应行的数据值是采用原始格式还是已经被熵编码。特别地,在图17中所示出的示例中,如果用于特定行的行模式标记为0,则该行的数据值采用原始格式,并且用于该行的数据包括八个原始数据值,在这个示例中原始数据值每个具有八个比特。然而,如果用于特定行的行模式标记为1,在图17中所示出的示例中,则该行的数据值被熵编码,并且因此如上文所描述的那样包括八个引导熵比特以及0个到54个之间的经交织的前缀比特和后缀比特。
图13图示了被用来对已经如上文所描述的被熵编码的多个经熵编码的数据值执行熵解码的熵解码模块406中的任何一个熵解码模块。熵解码模块406包括移位单元1302、引导熵单元1304、前缀比特窗1306、后缀比特窗1308、七个并行的解码单元13100到13106、三个第一级别的合并单元13120到13122、两个第二级别的合并单元13140和13141、以及第三级别的合并单元1316。移位单元1302的输出被耦合到前缀比特窗1306和后缀比特窗1308的输入。前缀窗和后缀窗1306和1308的七个输出被耦合到七个并行的解码单元13100到13106的相应输入。第一和第二解码单元13100和13101的输出耦合到第一个第一级别合并单元13120的输入。第三和第四解码单元13102和13103的输出被耦合到第二个第一级别合并单元13121的输入。第五和第六解码单元13104和13105的输出被耦合到第三个第一级别合并单元13122的输入。第一和第二个第一级别合并单元13120和13121的输出被耦合到第一个第二级别合并单元13140的输入。第三个第一级别合并单元13122和第七解码单元13106的输出被耦合到第二个第二级别合并单元13141的输入。第一和第二个第二级别合并单元13140和13141的输出被耦合到第三级别合并单元1316的输入。引导熵单元1304的输出被耦合到第三级别合并单元1316的输入。第三级别合并单元1316的第一输出被提供作为熵解码模块406的输出。第三级别合并单元1316的第二输出被耦合到前缀比特窗和后缀比特窗1306和1308的输入。第三级别合并单元1316的第三输出被耦合到移位单元1302的输入。
参考图14中所示出的流程图来描述熵解码模块406的操作。在步骤S1402中,在熵解码模块406处接收数据块。如果数据值采用原始格式,则数据值绕过图13中所示出的熵解码模块406的单元,并且原始数据值从熵解码模块406输出到对应的逆向空间解相关模块404。然而,如果所接收的数据值被熵编码(如由图17中所示出的行模式标记加以指示),则如下文参考图14的流程图中所示出的步骤加以描述的,熵解码模块406对所接收的数据值执行熵解码。
在熵解码单元406处接收一行的经熵编码的数据值,并且这些经熵编码的数据值的引导熵比特被提供至引导熵单元1304。在步骤S1404中,剩余的经交织的前缀比特和后缀比特(即,除了引导比特之外的比特)根据用来编码数据值的熵编码方案加以解交织,并且前缀比特被提供至前缀比特窗1306,而后缀比特被提供至后缀比特窗1308。注意,在前缀和后缀被编码时它们没有被交织的示例中,则它们不需要在步骤S1404中解交织,并且替代地能够相应地被提供至前缀比特窗1306和后缀比特窗1308。因此,一般而言,基于比特根据熵编码方案在经熵编码的数据值的序列中的比特位置(例如,并且不基于对这些比特的值的分析),将经熵编码的数据值的第一比特与经熵编码的数据值的第二比特分离。在图13中所示出的示例中,前缀比特窗1306和后缀比特窗1308均为27比特长。以这种方式,用于整个经熵编码的行的前缀比特和后缀比特能够被存储在窗1306和1308中。注意,将被使用用于经熵编码的行的最大数目比特是62比特(62比特=8个引导前缀比特+27个其他前缀比特+27个后缀比特),因为如果需要更多比特用于熵编码,则原始数据值将替代地被使用用于该行,其使用64比特。根据在上面的示例中详细描述的熵编码方案,前缀比特的数目(减去引导熵比特)与后缀比特的数目是相同的,所以对于每个数据值,提供至前缀比特窗1306的比特数目(例如N)与提供至后缀比特窗1308的比特数目(例如N)是相同的。在上文描述的示例中(其中引导熵比特被一起分组到第一字段中,并且剩余的前缀比特和后缀比特在第二字段中以交替方式彼此被交织),来自第二字段的前缀比特和后缀比特的解交织包括:将第二字段中的数据的奇数比特与偶数比特拆分,以由此形成分别被提供至前缀比特窗1306和后缀比特窗1308的前缀比特流和对应的后缀比特流。
在多个连续时钟周期中的每个时钟周期中,由熵解码模块406处理一行经熵编码的数据值(例如八个经熵编码的数据值)。参考图10中所示出的编码方案的示例,能够看出,如果引导熵比特是“1”,则这指示了数据值是0,并且对于这些数据值将不存在被提供至前缀比特窗和后缀比特窗1306和1308的前缀比特或后缀比特。然而,对于其他经熵编码的数据值,它们具有引导熵比特“0”,从而前缀比特和后缀比特被分别提供至前缀比特窗和后缀比特窗1306和1308,前缀比特窗1306中的前缀比特“1”指示了经熵编码的数据值的结束,而前缀比特“0”指示了在特定的经熵编码的数据值中存在更多的前缀比特。
在步骤S1406中,经解交织的前缀比特(以及经解交织的后缀比特)被拆分为段(例如,每段包括四个前缀比特和四个后缀比特),并且每段被提供至解码单元1310中的相应的一个解码单元。这在图13中针对解码单元13100完全地被指示,图13示出了去往解码单元13100的“2×4”比特(即,四个前缀比特和四个后缀比特)。对于其他的解码单元13101到13106同样如此,但是为了避免使图杂乱,这在图13中简略表示为“8”比特而不是“2×4”比特。
在步骤S1408中,每个解码单元1310分析前缀比特以确定经熵编码的数据值之间的比特边界。通过确定经熵编码的数据值之间的比特边界,经熵编码的数据值的长度被确定。特别地,在使用图10中所示出的编码方案的示例中,解码单元1310识别具有值为“1”的前缀比特,因为这指示了前缀比特中的比特边界。由于在这个示例中,前缀比特(减去引导熵比特)的数目与后缀比特的数目(例如N)是相同的,则前缀比特中的比特边界与后缀比特中的比特边界是相同的。如果使用其他的编码方案,则可以基于对于每个经熵编码的数据值而言的前缀比特的数目与后缀比特的数目之间的其他关系(如由特定的熵编码方案确定),来确定后缀比特中的比特边界。
在步骤S1410中,使用后缀比特和所确定的比特边界,根据用于编码数据值的特定熵编码方案来解码经熵编码的数据值。特别地,对于在解码单元1310内结束的数据值中的任何数据值(如由前缀比特中的“1”指示),该解码单元1310使用它访问的后缀比特来输出候选的经解码的符号值。然而,由于解码单元1310可能不具有对特定符号的所有后缀比特的访问(因为在前的(多个)解码单元1310可能已经接收了该特定符号的后缀比特中的一些后缀比特),所以候选的经解码的符号值可能不是最终的经解码的符号值。合并单元1312、1314和1316确保最终的经解码的符号值考虑到符号的所有比特。如上文所描述的,熵编码方案被选取使得使用后缀比特容易地确定经解码的符号,因为经解码的符号的二进制表示的N个LSB与作为经编码的数据值的后缀的二进制比特的N比特是相同的。解码单元1310还输出用于数据值的进位输出比特(carry out bit),它们开始于解码单元1310内但不在解码单元1310内结束。进位输出比特是在解码单元1310处接收的数据值的不在解码单元1310内结束的后缀比特。进位输出比特允许合并单元1312组合解码单元1310的输出,以确定如下的数据值,这些数据值的比特已经被传递到多于一个解码单元1310。
通过示例的方式,如果解码单元1310接收到四个前缀比特[0100],则从左到右读取,能够确定前两个前缀比特是一个数据值的最后两个前缀比特(但不必然是仅有的两个前缀比特),并且接着的两个前缀比特是下一数据值的开始(但不是结束)。在解码单元1310处接收的四个后缀比特可以被标示为[S0,S1,S2,S3]。解码单元1310输出候选的经解码的符号值作为[S0,S1]以及指示符,该指示符能够被后续的合并单元1213使用,其指示了该候选的经解码的符号值的长度(例如,在这个示例中为2比特)。[S0,S1]将是经解码的数据值的最后两个比特,但是合并单元1312、1314和1316仍然需要确定经解码的数据值的其余比特(例如,在使用8比特数据值的示例中是其他六个比特)。比特S2和S3不是数据值的最后的后缀比特(因为在这个示例中最后的前缀比特均为零)。因此,来自解码单元1310的进位输出比特包括S2和S3,并且从解码单元1310向后续的合并单元1312输出指示符,其指示进位输出比特的长度(例如,在这个示例中为2比特)。合并单元1312然后能够将后缀比特S2和S3与另一解码单元1310的输出进行组合,以便确定经解码的数据值。
合并单元1312、1314和1316组合各段的分析的结果,以确定对于一行的所有经解码的数据值。特别地,合并单元13120从两个解码单元13100和13101接收候选的经解码的符号和/或进位输出比特,并且组合它们以然后向合并单元13140输出进一步的候选的经解码的符号和/或进位输出比特。例如,将来自解码单元13100的进位输出比特与来自解码单元13101的第一输出比特组合,以由此确定用于如下符号的候选的经解码的值,该符号的经编码的比特部分地落入由解码单元13100处理的段中并且部分地落入由解码单元13101处理的段中。
接着,根据上文给出的示例,合并单元13120可以从解码单元13100接收候选的经解码的符号,其具有两个比特(例如[S0,S1])以及两个进位输出比特[S2,S3],以及候选的经解码的符号和进位输出比特的长度的指示。合并单元还可以从解码单元13101接收两个候选的经解码的符号,它们分别具有一个和三个比特,[S4]和[S5,S6,S7]。合并单元13120将对来自解码单元13100的进位输出比特[S2,S3]与从解码单元13101输出的第一候选的经解码的符号的比特S4进行组合。因此,在这个示例中,合并单元13120已经确定了分别具有最后比特[S0,S1]、[S2,S3,S4]和[S5,S6,S7]的三个候选的经解码的符号。经解码的数据符号在这个示例中具有八个比特,所以合并单元13120将需要向候选的经解码的符号添加比特,使得它们具有八个比特。从图10能够看出,经解码的符号的比特包括多个后缀比特(标示为S)以及(8-S)个其他比特。其他比特中的前(8-S-1)个比特为零。如果所有后缀比特为1,则其他比特中的最后比特(即,符号的其他比特中的最右侧的比特)是0,并且如果情况不是所有后缀比特为1,则其他比特中的最后比特为1。以这种方式,合并单元13120能够通过对来自解码单元13100的进位输出比特与来自解码单元13101的第一候选的经解码的符号的比特进行组合来确定经解码的符号。
按照如上文所描述的由合并单元13120对来自解码单元13100和13101的输出进行处理的对应方式,合并单元13121处理来自解码单元13102和13103的输出,并且合并单元13122处理来自解码单元13104和13105的输出。
可能存在一些数据值,它们的比特部分地落入多于一个合并单元1312中。因此,更多层的合并单元1314和1316被用于将该行的所有比特组合在一起,以确保比特被正确地解码。例如,合并单元13140对合并单元13120和13121的输出进行组合,并且输出2个和8个之间的经解码的符号以及可选地输出一些进位输出比特。同样类似地,合并单元13141对合并单元13122和解码单元13106的输出进行组合,并且输出多至6个经解码的符号。合并单元13141可以输出或者可以不输出任何进位输出比特,因为对于这样的进位输出比特,在当前行中不存在将被组合的后续比特,但是这样的进位输出比特对于处理后续行的数据值可能是有用的。
合并单元1316然后对合并单元13140和13141的输出与来自引导熵单元13104的引导熵比特进行组合,以确定并输出该行的8个经解码的数据值(或“符号”)。
注意,对所接收的经熵编码的数据值之间的比特边界的确定不包括分析后缀比特。在确定比特边界时需要考虑的比特数目被减少(例如,减半),因为不考虑后缀比特。对于一行的不同数据值,对经熵编码的数据值之间的比特边界的确定能够(例如,在解码单元1310中)并行地加以执行,因为:(i)为了这个目的,仅考虑前缀比特;以及(ii)前缀比特的格式意味着前缀比特中的任何“1”指示了比特边界。因此,为了找到比特边界,解码单元1310简单地找到前缀比特中的“1”。因此,通过从比特边界的确定中移除后缀比特,避免了经可变长度熵编码的数据值的处理的有序性质。这允许多个经熵编码的数据值在每次迭代时(例如,在多个连续时钟周期中的每个时钟周期时)被解码。
上文参考图14的流程图所描述的方法步骤在多个连续时钟周期中的每个时钟周期时迭代进行。例如,在这些时钟周期中的每个时钟周期时,解码一行经熵编码的数据值(例如,八个经熵编码的数据值)。
在上文描述的示例中,对于任何给出的经熵编码的数据值,前缀比特的数目为N+1并且后缀比特的数目为N。在更为一般的示例中,对于任何给出的经熵编码的数据值的前缀比特数目与后缀比特数目之间的关系为,使得前缀比特的数目为(N+a)并且后缀比特的数目为kN,其中a为描述引导比特数目的常量,引导比特相比其他剩余的前缀比特将被区别对待,这正如在上文示例中详细描述的,其中a=1;并且k是描述被包括用于每个剩余前缀比特的后缀比特数目的常量。在上文详细描述的示例中,k=1。
例如,可以使用a=0并且k=1的编码方案,从而经熵编码的数据值具有偶数长度,并且前缀比特的数目等于后缀比特的数目。在a=0的情况下,不存在引导前缀比特,并且所有的前缀比特以相同的方式加以对待。表格1中给出了在这种情况下可以被用于编码不同符号的前缀比特和后缀比特的示例。
符号 | 符号的二进制表示 | 前缀 | 后缀 |
0 | 0000 0000 | 1 | 0 |
1 | 0000 0001 | 1 | 1 |
2 | 0000 0010 | 01 | 10 |
3 | 0000 0011 | 01 | 11 |
4 | 0000 0100 | 01 | 00 |
5 | 0000 0101 | 01 | 01 |
6 | 0000 0110 | 001 | 110 |
7 | 0000 0111 | 001 | 111 |
8 | 0000 1000 | 001 | 000 |
9 | 0000 1001 | 001 | 001 |
10 | 0000 1010 | 001 | 010 |
11 | 0000 1011 | 001 | 011 |
12 | 0000 1100 | 001 | 100 |
13 | 0000 1101 | 001 | 101 |
等等 | 等等 | 等等 | 等等 |
表格1
在表格1中所示出的示例中,N个后缀比特匹配于符号的二进制表示的N个LSB,正如上文关于图10中示出的表格所描述的,这可以提供优点。然而,在其他示例中,后缀比特可能不匹配于符号的二进制表示的LSB,并且例如,对于每个N值,可以替代地从零递增到(2N-1)。
作为另一示例,可以使用a=0并且k=2的编码方案,从而经熵编码的数据值具有偶数长度,并且前缀比特数目为后缀比特数目的一半。表格2中给出了在这种情况下可以被用于编码不同符号的前缀比特和后缀比特的示例。
符号 | 符号的二进制表示 | 前缀 | 后缀 |
0 | 0000 0000 | 1 | 00 |
1 | 0000 0001 | 1 | 01 |
2 | 0000 0010 | 1 | 10 |
3 | 0000 0011 | 1 | 11 |
4 | 0000 0100 | 01 | 0100 |
5 | 0000 0101 | 01 | 0101 |
6 | 0000 0110 | 01 | 0110 |
7 | 0000 0111 | 01 | 0111 |
8 | 0000 1000 | 01 | 1000 |
9 | 0000 1001 | 01 | 1001 |
10 | 0000 1010 | 01 | 1010 |
11 | 0000 1011 | 01 | 1011 |
12 | 0000 1100 | 01 | 1100 |
13 | 0000 1101 | 01 | 1101 |
等等 | 等等 | 等等 | 等等 |
表格2
在表格2中所示出的示例中,2N个后缀比特匹配于符号的二进制表示的2N个LSB,正如上文关于图10中示出的表格所描述的,这可以提供优点。然而,在其他示例中,后缀比特可能不匹配于符号的二进制表示的LSB,并且例如,对于每个N值,可以替代地从零递增到(22N-1)。
能够基于数据的类型来作出使用哪种熵编码方案的选择,数据的类型将会基于不同符号/数据值的概率来加以选择。例如,可以使用不同的熵编码方案将图像数据编码为其他类型的数据。理想地,具有概率Pi的符号Si将会具有使得的码长度Li。
在上文所示出的示例中,前缀具有根据一元编码的格式并且包括一个“1”以及可变数目的“0”。注意,在其他示例中,前缀值的“1”和“0”可以互换,从而前缀包括一个“0”以及可变数目的“1”。此外,前缀和后缀比特的字节顺序(endianness)/比特顺序可以被变更为上文示例中所描述的那样。
来自熵解码模块406的经解码的数据值被提供至对应的空间重相关模块404。空间重相关模块404执行上文关于图6到9所描述的空间解相关的逆转。参考图18和19描述了空间重相关模块404的操作示例的细节。
图18示出了包括八个处理管线18021到18028的空间重相关模块404,在每次迭代(例如,每个时钟周期)时,每个处理管线从一行数据值(在图18中标示为“A”到“H”)接收经熵解码的数据值中的一个经熵解码的数据值。为了空间重相关模块的目的,经熵解码的数据值被考虑为是经空间解相关的数据值,将对它们应用空间重相关以确定经空间重相关的数据值。每个处理管线1802包括第一级1804和第二级1806。每个第一级1804包括处理单元1808和存储1810,用于在垂直维度中(例如,在列上)执行空间重相关。每个第二级1806包括处理单元1812,用于在水平维度中(例如,在行上)执行空间重相关。与图6中所示出的编码管线604相对照地,在解码管线1802的第二级1806中存在依赖链,由此正如下文更详细描述的,一些管线1802的第二级1806使用其他管线1802的第二级1806的结果。
图19图示了处理管线1802之一的第一级1804在八次迭代上的的操作,以由此针对传入的经空间解相关的数据值的8×8块,向相应的第二级1806输出第一系数。空间重相关模块404的第一级1804执行由对应的空间解相关204的第二级608所执行的操作的逆转。经空间解相关的数据值的块的行按一种顺序被输入到并行的处理管线1802,使得在这些行中的第一行已经被第一级1804接收并且存储在寄存器1810中之后,在第一级1804处接收的该块的每个后续行的第一系数能够基于寄存器1810中所存储的第一系数来加以确定。例如,如下文更详细描述的,经空间解相关的数据值的8×8块的行可以按如下顺序被供应给处理管线1802:行0、行4、行6、行7、行5、行2、行3并且然后行1。
能够看出,在图19中处理单元1808具有被标记为“输入”、“左”和“右”的三个输入,由此经空间解相关的数据值在输入线路上被接收,而左输入和右输入被耦合到寄存器1810的输出。在第一时钟周期(时钟周期C0)时,管线1802的第一级1804接收用于行0的经空间解相关的数据值(在图19中通过双撇:0”来指示输入到第二级1804的经空间解相关的数据值),并且输出用于行0的第一系数(在图19中通过单撇:例如0’来指示从第二级1804输出的值),其中存储单元1810存储用于行0的第一系数(即,在时钟周期C0之后,寄存器1810存储用于行0的第一系数,标示为0’)。
在第二时钟周期(时钟周期C1)时,管线1802的第一级1804接收用于行4的经空间解相关的数据值(输入到第一级1804的经空间解相关的数据值是4”),并且输出用于行4的第一系数(从第二级608输出的值是4’)。也就是说,处理单元1808在输入线路上接收4”,并且在左输入和右输入上接收0’,从而用于行4的第一系数(标示为4’)由处理单元1808基于所接收的用于行4的经空间解相关的数据值(标示为4”)以及所存储的用于行0的第一系数(标示为0’,从寄存器1810取回)来加以确定。如上文所描述的,在空间解相关中,用于行4的经空间解相关的值被确定为4″=4′-0′mod 28,因此重新布置它,我们得到:4′=4″+0′mod28。
处理单元1808使用这个等式,基于输入值4”以及所存储的第一系数0’来确定标示为4’的值。在时钟周期C1之后,存储单元存储用于行0和4的第一系数(标示为0’和4’)。
在第三时钟周期(时钟周期C2)时,管线1802的第一级1804接收用于行6的经空间解相关的数据值(输入到第二级1804的值是6”),并且输出用于行6的第一系数(从第二级1804输出的值是6’)。也就是说,处理单元1808在输入线路上接收6”并且在左输入和右输入上接收4’,从而用于行6的第一系数(标示为6’)由处理单元1808基于所接收的用于行6的经空间解相关的数据值(标示为6”)以及所存储的用于行4的第一系数(标示为4’,从寄存器1810取回)来加以确定。如将是明显的,根据等式:6′=6″+4′mod 28来确定值6’。在时钟周期C2之后,寄存器1810存储用于行0、4和6的第一系数(标示为0’、4’和6’)。
如将是明显的,在第四时钟周期(时钟周期C3)时,管线1802的第一级1804接收用于行7的经空间解相关的数据值(标示为7”),并且输出用于行7的第一系数(标示为7’)。也就是说,处理单元1808在输入线路上接收7”并且在左输入和右输入上接收6’。根据等式7′=7″+6′mod 28来确定值7’。在时钟周期C3之后,寄存器1810存储用于行0、4和6的第一系数(标示为0’、4’和6’)。
如将是明显的,在第五时钟周期(时钟周期C4)时,管线1802的第一级1804接收用于行5的经空间解相关的数据值(标示为5”),并且输出用于行5的第一系数(标示为5’)。也就是说,处理单元1808在输入线路上接收5”、在左输入上接收4’并且在右输入上接收6’。根据等式5′=5″+LPredict(4′,6′)mod 28来确定值5’。在时钟周期C4之后,寄存器1810存储用于行0和4的第一系数(标示为0’和4’)。用于行6的第一系数(标示为6’)可以被丢弃,因为它不需要用于后续行,但是将6’留在寄存器1810中直到它被覆写可能会更加简单。
第一级1804在第六、第七和第八时钟周期时的操作从图19来看将是明显的,并且将遵循与上文针对前五个时钟周期所描述的相同的原理,并且所以为了简洁,我们在这里将不详细地解释这些时钟周期中的操作。注意,处理管线1802的第一级1804中的每个第一级的存储单元1810被配置为存储多至三个第一系数,并且这对于第一级1804中的所有行的处理是足够的,这归因于这些行被输入到空间重相关模块404的顺序。如上文所指出的,一般而言,寄存器1810中的每个寄存器在任何给定时间将具有存储多至log2(r)个第一系数的容量,其中r是经空间解相关的数据值的块中的行数。
因此,在每次迭代中,一行第一系数(在图18中标记为A’到H’)被提供至处理管线1802的相应的第二级1806。空间重相关模块404的第二级1806执行由对应的空间解相关模块204的第一级606所执行的操作的逆转。
如上文描述的,在空间解相关中,列A的数据值与用于列A的第一系数是相同的,即A’=A。因此,在对应的空间重相关中,在处理管线18028的第二级1806处接收的用于列A的第一系数在第二级1806的输出上不被改变,即A=A’。
然而,如上文描述的,在空间解相关中,对于列E,由等式E′=E-A mod 28来给出第一系数E’,该等式能够被写为 以更加清楚地示出mod函数的操作。因为A=A’,所以我们能够布置该等式以给出因此,处理管线18027中的处理单元1812使用输入A’和E’根据这一等式,输出用于列E的经空间解相关的数据值。
此外,如上文描述的,在空间解相关中,对于列G,由等式:来给出第一系数G’。该等式能够被重新布置以给出因此,处理管线18026中的处理单元1812使用输入E和G’根据这个等式输出用于列G的经空间解相关的数据值,其中E的值从处理管线18027的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18026的处理单元1812中(以及在处理管线18027中)可以重复E的计算,从而处理管线18026不依赖于处理管线18027的输出。在这些其他实施例中,处理管线18026的处理单元1812可以接收A和E’值作为输入以及G’值。
此外,如上文描述的,在空间解相关中,对于列C,由等式:来给出第一系数C’。使用上文给出的LPredict的定义,该等式能够被重新布置以给出: 因此,处理管线18025中的处理单元1812使用输入A、C’和E根据这个等式输出用于列C的经空间解相关的数据值,其中A的值从处理管线18028的第一级1804的输出来加以提供,并且E的值从处理管线18027中的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18025的处理单元1812中(以及在处理管线18027中)可以重复E的计算,从而处理管线18025不依赖于处理管线18027的输出,在该情况下,处理管线18025的处理单元1812可以接收E’值作为输入以及A和C’值。
此外,如上文描述的,在空间解相关中,对于列B,由等式:来给出第一系数B’。该等式能够被重新布置以给出:因此,处理管线18021中的处理单元1812使用输入A、B’和C根据这个等式输出用于列B的经空间解相关的数据值。A的值从处理管线18028的第一级1804的输出来加以提供,并且C的值从处理管线18025中的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18021的处理单元1812中(以及在处理管线18025中)可以重复C的计算,从而处理管线18021不依赖于处理管线18025的输出,在该情况下,处理管线18021的处理单元1812可以接收C’和E’值作为输入以及A和B’值。
此外,如上文描述的,在空间解相关中,对于列D,由等式:来给出第一系数D’。该等式能够被重新布置以给出:因此,处理管线18022中的处理单元1812使用输入C、D’和E根据这个等式输出用于列D的经空间解相关的数据值。C的值从处理管线18025中的处理单元1812的输出来加以提供,并且E的值从处理管线18027的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18022的处理单元1812中(以及在处理管线18025中)可以重复C的计算,从而处理管线18022不依赖于处理管线18025的输出。此外,在这些其他实施例中,可以在处理管线18022的处理单元1812中(以及在处理管线18027中)重复E的计算,从而处理管线18022不依赖于处理管线18027的输出。在这些其他实施例中,处理管线18022的处理单元1812可以接收A’、C’和E’值作为输入以及D’值。
此外,如上文描述的,在空间解相关中,对于列F,由等式:来给出第一系数F’。该等式能够被重新布置以给出:因此,处理管线18023中的处理单元1812使用输入E、F’和G根据这个等式输出用于列F的经空间解相关的数据值。E的值从处理管线18027中的处理单元1812的输出来加以提供,并且G的值从处理管线18026中的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18023的处理单元1812中(以及在处理管线18027中)可以重复E的计算,从而处理管线18023不依赖于处理管线18027的输出。此外,在这些其他实施例中,可以在处理管线18023的处理单元1812中(以及在处理管线18026中)重复G的计算,从而处理管线18023不依赖于处理管线18026的输出。在这些其他实施例中,处理管线的18023的处理单元1812可以接收A、E’和G’值作为输入以及F’值。
此外,如上文描述的,在空间解相关中,对于列H,由等式:来给出第一系数H’。该等式能够被重新布置以给出:因此,处理管线18024中的处理单元1812使用输入G和H’根据这个等式输出用于列H的经空间解相关的数据值,其中G的值从处理管线18026中的处理单元1812的输出来加以提供。在其他实施例中,在处理管线18024的处理单元1812中(以及在处理管线18026中)可以重复G的计算,从而处理管线18024不依赖于处理管线18026的输出。在这些其他实施例中,处理管线的18024的处理单元1812可以接收A和E’值作为输入以及H’值。
以这种方式,空间重相关模块404能够在多次迭代(例如,时钟周期)中的每次迭代时确定一行经空间重相关的数据值。例如,在八次迭代中能够确定8×8块的数据值。
如上文描述的,然后由颜色重相关模块402对从空间重相关模块404输出的R通道、G通道和B通道的数据值执行颜色重相关,以由此获得经解压缩的数据值。
上文已经描述了用于数据压缩和解压缩的方法和系统,其中可预测数目的数据值能够在多个连续时钟周期中的每个时钟周期时被压缩和解压缩。在上文详细描述的示例中,数据值具有ARGB 8:8:8:8格式(从而存在四个颜色通道,每个具有八比特数据值),并且数据块为数据的8×8块。在其他示例中,其他颜色格式可以被使用(例如,ARGB 2:10:10:10,其中阿尔法通道数据值具有2个比特,并且红色通道、绿色通道和蓝色通道数据值具有10个比特),和/或数据块的其他尺寸(例如,4×16、2×32、16×16等)可以被使用。本领域的技术人员将能够把上文描述的原理应用到其他颜色格式和/或其他尺寸的数据块。
此外,上文对数据块的“行”和“列”的描述在如下的意义上不是限制性的:在其他示例中,数据块的列可以如上文描述的示例中处理行那样被处理,并且数据块的行可以如上文描述的示例中处理列那样被处理。
一般而言,上文描述的任何功能、方法、技术或组件能够被实施在使用软件、固件、硬件(例如,固定逻辑电路)、或者这些实施方式的任何组合的模块中。术语“模块”、“功能”、“组件”、“块”、“单元”和“逻辑”在本文中可以被用于一般性地表示软件、固件、硬件、或者它们的任何组合。
在软件实施方式的情况下,模块、功能、组件或逻辑表示当在处理器(例如,一个或多个CPU)上被执行时执行特定任务的程序代码。在一个示例中,所描述的方法可以由配置有在计算机可读介质上存储的机器可读形式的软件的计算机执行。计算机可读介质的一个这种配置是信号承载介质,并且因此被配置为诸如经由网络向计算设备传输指令(例如,作为载波)。计算机可读介质还可以被配置作为计算机可读存储介质并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及可以使用磁、光和其他技术来存储指令或其他数据并且能够由机器访问的其他存储器设备。
软件可以采用包括计算机程序代码的计算机程序的形式或者采用包括计算机程序代码装置的计算机程序的形式,该计算机程序代码用于将计算机配置为执行所描述的方法的组成部分,当该程序在计算机上运行时,该计算机程序代码装置被适配为执行本文所描述的任何方法的所有步骤,并且其中计算机程序可以被具体化在计算机可读介质上。该程序代码能够被存储在一个或多个计算机可读介质中。本文所描述的技术的特征是独立于平台的,意味着这些技术可以被实施在具有各种处理器的各种计算平台上。
本领域的技术人员还将认识到,可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等来执行全部或部分的功能、技术或方法。例如,模块、功能、组件或逻辑可以包括采用电路形式的硬件。这样的电路可以包括晶体管和/或在制造过程中可用的其他硬件元件。这样的晶体管和/或其他元件可以被用于形成电路或结构,例如,电路或结构实施或包含存储器,诸如寄存器、触发器、或锁存器、逻辑运算器(诸如布尔运算)、数学运算器(诸如加法器、乘法器、或移位器)、以及互连。这样的元件可以被提供作为定制电路或者标准的单元库、宏、或者位于其他抽象级别。这样的元件可以按特定的布置加以互连。模块、功能、组件或逻辑可以包括固定功能的电路、以及能够被编程以执行单个功能或多个功能的电路;这样的编程可以从固件或软件升级或控制机制来加以提供。在一个示例中,硬件逻辑具有实施固定功能操作、状态机或过程的电路。
还意图涵盖“描述”或定义硬件配置的软件,该硬件实施上文描述的模块、功能、组件或逻辑,诸如HDL(硬件描述语言)软件,其被使用用于设计集成电路,或者用于配置可编程芯片,以执行所期望的功能。也就是说,可以提供计算机可读存储介质,具有被编码在其上的计算机可读程序代码,用于生成被配置为执行本文描述的任何方法的处理单元,或者用于生成包括本文描述的任何装置的处理单元。也就是说,计算机系统可以被配置为根据电路元件的定义以及定义用于组合这些电路元件的规则的数据来生成数字电路的表示,其中非瞬态计算机可读存储介质可以具有存储在其上的处理器可执行指令,这些指令当在这样的计算机系统处被执行时,使得计算机系统生成如本文描述的熵编码/解码模块。换句话说,可以提供一种非瞬态计算机可读存储介质,具有存储在其上的计算机可读指令,这些指令当在用于生成集成电路的表示的计算机系统处被处理时,使得该计算机系统根据本文描述的任何示例来生成熵编码模块或熵解码模块的表示。
术语“处理器”和“计算机”在本文中被用于指代具有处理能力从而它能够执行指令的任何设备或者它的一部分、或者能够执行全部或部分的功能或方法的专用电路、或者它们的任何组合。
虽然已经以特定于结构特征和/或方法动作的语言描述了本主题,但是被理解的是,所附权利要求中限定的主题不必然被限制为上文描述的特定特征或动作。更确切地说,上文描述的特定特征和动作被公开作为实施权利要求的示例形式。将理解,上文描述的益处和优点可以涉及一个示例或者可以涉及若干示例。
如对本领域的技术人员将是明显的,本文给出的任何范围或数值可以在不失去所追求的效果的情况下被扩展或变更。可以按任何适合的顺序或者在适当的场合同步地执行本文描述的方法的步骤。在不失去所追求的效果的情况下,上文描述的任何示例的方面可以与所描述的任何其他示例的方面进行组合以形成更多示例。
Claims (23)
1.一种对经熵编码的数据值的序列执行熵解码的方法,其中所述经熵编码的数据值已经根据预定的可变长度熵编码方案而被编码,从而所述经熵编码的数据值中的每个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与第二比特的数目有关,并且其中经熵编码的数据值的所述序列中的多个比特位置中的每个比特位置由所述熵编码方案预先确定为包括第一比特或第二比特,所述方法包括:
接收经熵编码的数据值的所述序列;
基于经熵编码的数据值的所述序列中的比特的根据所述熵编码方案的比特位置,将所接收的经熵编码的数据值的所述第一比特与所接收的经熵编码的数据值的所述第二比特分离;
对于所接收的经编码的数据值中的每个所接收的经编码的数据值,根据第一比特的数目与第二比特的数目之间的所述预定关系,分析所接收的经熵编码的数据值的所分离的第一比特,以确定所接收的经熵编码的数据值之间的比特边界;以及
根据所述预定的可变长度熵编码方案,使用所述第二比特和所确定的比特边界来解码所述经熵编码的数据值。
2.根据权利要求1所述的方法,其中分析所述第一比特包括:
将所述第一比特拆分为多个段;以及
并行地分析每个段以确定所述段内的比特边界。
3.根据权利要求2所述的方法,其中对于存在于但不结束于所述段中的一个段内的经编码的数据值的第一比特,针对所述段中的所述一个段确定进位输出比特,用于在对所述段中的每个段的分析结果进行组合中使用,以确定所述经熵解码的数据值。
4.根据任一项前述权利要求所述的方法,其中在多个连续时钟周期中的每个时钟周期时迭代进行所述方法步骤。
5.根据权利要求1到3中任一项所述的方法,其中不分析所接收的经熵编码的数据值的所述第二比特,而执行对所接收的经熵编码的数据值之间的所述比特边界的确定。
6.一种熵解码装置,被配置为对经熵编码的数据值的序列执行熵解码,其中所述经熵编码的数据值已经根据预定的可变长度熵编码方案而被编码,从而所述经熵编码的数据值中的每个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与第二比特的数目有关,并且其中经熵编码的数据值的所述序列中的多个比特位置中的每个比特位置由所述熵编码方案预先确定为包括第一比特或第二比特,所述熵解码装置包括:
用于接收经熵编码的数据值的所述序列的部件;
用于基于经熵编码的数据值的所述序列中的比特的根据所述熵编码方案的比特位置、将所接收的经熵编码的数据值的所述第一比特与所接收的经熵编码的数据值的所述第二比特分离的部件;
用于对于所接收的经编码的数据值中的每个所接收的经编码的数据值、根据第一比特的数目与第二比特的数目之间的所述预定关系、分析所接收的经熵编码的数据值的所分离的第一比特以确定所接收的经熵编码的数据值之间的比特边界的部件;以及
用于根据所述预定的可变长度熵编码方案、使用所述第二比特和所确定的比特边界来解码所述经熵编码的数据值的部件。
7.根据权利要求6所述的熵解码装置,其中经熵编码的数据值的所述序列中的所述比特位置被预先确定,从而对于包括所述第二比特中的一个或多个第二比特的经编码的数据值,所述第一比特中的至少一些第一比特根据所述熵编码方案的预定交织格式而与所述第二比特进行交织,并且其中所述熵解码装置进一步被配置为,通过根据所述预定交织格式对所接收的经熵编码的数据值的经交织的第一比特与第二比特进行解交织,来将所述第一比特与所述第二比特分离。
8.根据权利要求6或7所述的熵解码装置,包括多个并行解码单元以及一个或多个合并单元,其中所述熵解码装置被配置为通过以下各项来分析所述第一比特:
将所述第一比特拆分为多个段并且将所述段提供给所述并行解码单元中的相应的并行解码单元;以及
在所述解码单元中分析所述段以确定所述段内的比特边界,并且将分析的结果从所述解码单元输出到所述一个或多个合并单元。
9.根据权利要求6或7所述的熵解码装置,其中所述经熵编码的数据值来自经熵编码的数据值的块,并且其中所述熵解码装置被配置为在多次迭代中的每次迭代时解码来自所述块的一排的经熵编码的数据值。
10.根据权利要求7所述的熵解码装置,其中所述经熵编码的数据值来自经熵编码的数据值的块,并且其中所述熵解码装置被配置为在多次迭代中的每次迭代时解码来自所述块的一排的经熵编码的数据值,并且其中对于所述经熵编码的数据值中的每个经熵编码的数据值,第一比特的数目比第二比特的数目大一,并且其中根据所述预定交织格式,对于经熵编码的数据值的每排,来自所述排中的经编码的数据值中的每个经编码的数据值的第一比特中的一个第一比特被一起分组到第一字段中,并且所述排中的经编码的数据值中的每个经编码的数据值的剩余第一比特和第二比特以交替的方式被交织在第二字段中;
其中所述熵解码装置被配置为,通过从所述第二字段的偶数比特拆分出所述第二字段的奇数比特,以解交织所接收的经熵编码的数据值的经交织的第一比特和第二比特,来由此形成第一比特的流以及第二比特的对应流。
11.一种数据解压缩装置,包括根据权利要求6到10中任一项所述的熵解码装置。
12.一种根据预定的可变长度熵编码方案对多个数据值执行熵编码以形成经熵编码的数据值的序列的方法,所述方法包括:
接收所述数据值;
对于所接收的数据值中的每个所接收的数据值,根据所述熵编码方案来确定经熵编码的数据值,由此所述经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与第二比特的数目有关;以及
从所确定的经熵编码的数据值形成经熵编码的数据值的所述序列,其中经熵编码的数据值的所述序列中的多个比特位置中的每个比特位置由所述熵编码方案预先确定为包括第一比特或第二比特。
13.根据权利要求12所述的方法,其中在多个连续的时钟周期中的每个时钟周期时迭代所述方法步骤。
14.根据权利要求13所述的方法,其中所述数据值来自数据值的块,并且其中来自所述块的一排的数据值在每次迭代时被编码。
15.一种熵编码装置,被配置为根据预定的可变长度熵编码方案对多个数据值执行熵编码以形成经熵编码的数据值的序列,所述熵编码装置包括:
用于接收所述数据值的部件;
用于对于所接收的数据值中的每个所接收的数据值、根据所述熵编码方案来确定经熵编码的数据值的部件,由此所述经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与第二比特的数目有关;以及
用于从所确定的经熵编码的数据值形成经熵编码的数据值的所述序列的部件,其中经熵编码的数据值的所述序列中的多个比特位置中的每个比特位置由所述熵编码方案预先确定为包括第一比特或第二比特。
16.根据权利要求15所述的熵编码装置,被配置为通过以下项来形成经熵编码的数据值的所述序列:
对于包括所述第二比特中的一个或多个第二比特的经编码的数据值,所述第一比特中的至少一些第一比特与所述第二比特根据所述熵编码方案的预定交织格式进行交织。
17.根据权利要求15或16所述的熵编码装置,其中所述数据值来自数据值的块,并且其中所述熵编码装置包括多个第一编码单元,所述多个第一编码单元被配置为:
从所述块的一排接收相应的数据值;
确定所述排的所述经熵编码的数据值的第二比特;以及
确定所述排的所述经熵编码的数据值中的每个经熵编码的数据值的尺寸的指示。
18.根据权利要求16所述的熵编码装置,其中所述数据值来自数据值的块,并且其中所述熵编码装置包括:
多个第一编码单元,所述多个第一编码单元被配置为:
从所述块的一排接收相应的数据值;
确定所述排的所述经熵编码的数据值的第二比特;以及
确定所述排的所述经熵编码的数据值中的每个经熵编码的数据值的尺寸的指示;以及
一个或多个第二编码单元,所述一个或多个第二编码单元被配置为:
接收所述第二比特以及所述排的所述经熵编码的数据值的尺寸的所述指示;
基于所述经熵编码的数据值的尺寸的所接收的指示,确定所述排的所述经熵编码的数据值的第一比特;以及
将所确定的第一比特与所述经熵编码的数据值的所接收的第二比特进行交织。
19.根据权利要求18所述的熵编码装置,进一步包括处理单元,所述处理单元被配置为:
接收所述排的经熵编码的数据值的尺寸的所述指示;
基于所述经熵编码的数据值的尺寸的所接收的指示,确定所述排的经熵编码的数据值中的每个经熵编码的数据值的所述第一比特中的一个第一比特;以及
根据所述预定交织格式,将来自所述排中的经编码的数据值中的每个经编码的数据值的所述第一比特中的所述一个第一比特一起分组到第一字段中。
20.根据权利要求19所述的熵编码装置,其中对于所述经熵编码的数据值中的每个经熵编码的数据值,第一比特的数目比第二比特的数目大一,
并且其中所述第二编码单元被配置为,以交替的方式,将未被分组到所述第一字段内的第一比特与所述经熵编码的数据值的所接收的第二比特进行交织。
21.根据权利要求15-16和18-20中任一项所述的熵编码装置,进一步包括数据存储,所述数据存储被配置为存储所述经熵编码的数据值。
22.根据权利要求15-16和18-20中任一项所述的熵编码装置,进一步包括编码指示符单元,所述编码指示符单元被配置为设置指示符来指示被用于编码所述数据值的所述编码方案。
23.一种数据压缩装置,包括根据权利要求15到22中任一项所述的熵编码装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1416592.2 | 2014-09-19 | ||
GB1416592.2A GB2530312B (en) | 2014-09-19 | 2014-09-19 | Data compression |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105451026A CN105451026A (zh) | 2016-03-30 |
CN105451026B true CN105451026B (zh) | 2019-07-30 |
Family
ID=51869175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510600444.3A Active CN105451026B (zh) | 2014-09-19 | 2015-09-18 | 数据压缩 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9413387B2 (zh) |
CN (1) | CN105451026B (zh) |
DE (1) | DE102015114973B4 (zh) |
GB (1) | GB2530312B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9538044B2 (en) * | 2015-03-20 | 2017-01-03 | Kyocera Document Solutions Inc. | Apparatus and method for data decoding |
EP3648400A4 (en) * | 2017-07-29 | 2020-07-01 | Huawei Technologies Co., Ltd. | METHOD AND DEVICE FOR BIT BLOCK CURRENT PROCESSING, RATE ADJUSTMENT AND REPLACEMENT |
GB2567427B (en) | 2017-10-06 | 2020-10-07 | Imagination Tech Ltd | Data compression |
US10764590B2 (en) | 2017-11-15 | 2020-09-01 | Google Llc | Entropy coding primary and secondary coefficients of video data |
US10559093B2 (en) * | 2018-01-13 | 2020-02-11 | Arm Limited | Selecting encoding options |
US11044495B1 (en) * | 2018-02-13 | 2021-06-22 | Cyborg Inc. | Systems and methods for variable length codeword based data encoding and decoding using dynamic memory allocation |
US10747433B2 (en) * | 2018-02-21 | 2020-08-18 | Wisconsin Alumni Research Foundation | Computer architecture for high-speed, graph-traversal |
US10924591B2 (en) * | 2018-06-21 | 2021-02-16 | Intel Corporation | Low-latency link compression schemes |
GB2575122B (en) | 2018-06-29 | 2021-12-01 | Imagination Tech Ltd | Mapping an n-bit number to an m-bit number |
GB2575435B (en) | 2018-06-29 | 2022-02-09 | Imagination Tech Ltd | Guaranteed data compression |
GB2575436B (en) | 2018-06-29 | 2022-03-09 | Imagination Tech Ltd | Guaranteed data compression |
GB2575121B (en) | 2018-06-29 | 2022-12-28 | Imagination Tech Ltd | Guaranteed data compression |
GB2575434B (en) | 2018-06-29 | 2020-07-22 | Imagination Tech Ltd | Guaranteed data compression |
US10547843B1 (en) * | 2018-07-24 | 2020-01-28 | Samsung Display Co., Ltd. | Prefix coding method for high-throughput entropy coder in display interface compression |
JP7183776B2 (ja) * | 2018-12-21 | 2022-12-06 | 日本電信電話株式会社 | 符号化装置、復号装置、これらの方法及びプログラム |
US11658679B2 (en) | 2018-12-21 | 2023-05-23 | Zeropoint Technologies Ab | Methods, devices and systems for efficient compression and decompression for higher throughput |
US10491240B1 (en) | 2019-01-17 | 2019-11-26 | Cyborg Inc. | Systems and methods for variable length codeword based, hybrid data encoding and decoding using dynamic memory allocation |
US11209984B2 (en) * | 2019-02-18 | 2021-12-28 | Silicon Motion, Inc. | Method and apparatus for performing data-compression management in a storage server |
CN110266316B (zh) * | 2019-05-08 | 2023-02-21 | 创新先进技术有限公司 | 一种数据压缩、解压方法、装置和设备 |
GB201912184D0 (en) | 2019-08-23 | 2019-10-09 | Imagination Tech Ltd | Methods and decompression units for decompressing a compressed block of image data |
GB201912183D0 (en) | 2019-08-23 | 2019-10-09 | Imagination Tech Ltd | Random accessible image data compression |
GB2607692B (en) | 2019-08-23 | 2023-08-02 | Imagination Tech Ltd | Random accessible image data compression |
GB2593708C (en) | 2020-03-30 | 2022-08-31 | Imagination Tech Ltd | Methods and decompression units for decompressing image data compressed using pattern-based compression |
CN113473121A (zh) | 2020-03-30 | 2021-10-01 | 畅想科技有限公司 | 基于图案的图像数据压缩 |
GB2608260B (en) | 2020-03-30 | 2023-11-01 | Imagination Tech Ltd | Pattern-based image data compression |
CN112911314B (zh) * | 2021-01-14 | 2023-08-18 | 北京博雅慧视智能技术研究院有限公司 | 一种熵编码器的编码方法及熵编码器 |
CN112988673B (zh) * | 2021-02-22 | 2023-02-28 | 山东英信计算机技术有限公司 | 一种处理解压缩过程中数据溢出的方法和设备 |
CN114978421B (zh) * | 2022-05-05 | 2023-10-27 | 煤炭科学研究总院有限公司 | 动态编码方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101796842A (zh) * | 2007-06-28 | 2010-08-04 | 高通股份有限公司 | 用以最小化存储及总线带宽需求的有效图像压缩方案 |
CN102077468A (zh) * | 2008-07-01 | 2011-05-25 | 汤姆森许可贸易公司 | 混合Golomb-Elias Gamma编码方法 |
CN102523006A (zh) * | 2011-12-31 | 2012-06-27 | 中国科学院上海微系统与信息技术研究所 | 一种级联编码器及实现方法 |
CN102845065A (zh) * | 2010-04-19 | 2012-12-26 | 捷讯研究有限公司 | 用于重排并行熵编码和解码的方法和设备 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6873734B1 (en) * | 1994-09-21 | 2005-03-29 | Ricoh Company Ltd | Method and apparatus for compression using reversible wavelet transforms and an embedded codestream |
US6195465B1 (en) * | 1994-09-21 | 2001-02-27 | Ricoh Company, Ltd. | Method and apparatus for compression using reversible wavelet transforms and an embedded codestream |
US5589829A (en) * | 1994-10-26 | 1996-12-31 | Intel Corporation | Decoding variable-length encoded signals |
US6894628B2 (en) * | 2003-07-17 | 2005-05-17 | Fraunhofer-Gesellschaft Zur Forderung Der Angewandten Forschung E.V. | Apparatus and methods for entropy-encoding or entropy-decoding using an initialization of context variables |
US20050275570A1 (en) * | 2004-06-10 | 2005-12-15 | Wang Wen-Shan Vincent | Parallel leading bit detection for Exp-Golomb decoding |
KR100857120B1 (ko) * | 2005-10-05 | 2008-09-05 | 엘지전자 주식회사 | 신호 처리 방법 및 이의 장치, 그리고 인코딩 및 디코딩방법 및 이의 장치 |
US7545293B2 (en) * | 2006-11-14 | 2009-06-09 | Qualcomm Incorporated | Memory efficient coding of variable length codes |
GB0716158D0 (en) | 2007-08-17 | 2007-09-26 | Imagination Tech Ltd | Data compression |
US7932843B2 (en) * | 2008-10-17 | 2011-04-26 | Texas Instruments Incorporated | Parallel CABAC decoding for video decompression |
US20110075724A1 (en) * | 2009-09-29 | 2011-03-31 | Qualcomm Incorporated | Encoding parameters with unit sum |
US8520958B2 (en) * | 2009-12-21 | 2013-08-27 | Stmicroelectronics International N.V. | Parallelization of variable length decoding |
US9264706B2 (en) * | 2012-04-11 | 2016-02-16 | Qualcomm Incorporated | Bypass bins for reference index coding in video coding |
-
2014
- 2014-09-19 GB GB1416592.2A patent/GB2530312B/en active Active
-
2015
- 2015-09-07 DE DE102015114973.7A patent/DE102015114973B4/de active Active
- 2015-09-18 US US14/859,043 patent/US9413387B2/en active Active
- 2015-09-18 CN CN201510600444.3A patent/CN105451026B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101796842A (zh) * | 2007-06-28 | 2010-08-04 | 高通股份有限公司 | 用以最小化存储及总线带宽需求的有效图像压缩方案 |
CN102077468A (zh) * | 2008-07-01 | 2011-05-25 | 汤姆森许可贸易公司 | 混合Golomb-Elias Gamma编码方法 |
CN102845065A (zh) * | 2010-04-19 | 2012-12-26 | 捷讯研究有限公司 | 用于重排并行熵编码和解码的方法和设备 |
CN102523006A (zh) * | 2011-12-31 | 2012-06-27 | 中国科学院上海微系统与信息技术研究所 | 一种级联编码器及实现方法 |
Also Published As
Publication number | Publication date |
---|---|
GB2530312A (en) | 2016-03-23 |
US20160087647A1 (en) | 2016-03-24 |
DE102015114973B4 (de) | 2021-05-27 |
GB2530312B (en) | 2016-09-14 |
DE102015114973A1 (de) | 2016-03-24 |
CN105451026A (zh) | 2016-03-30 |
GB201416592D0 (en) | 2014-11-05 |
US9413387B2 (en) | 2016-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105451026B (zh) | 数据压缩 | |
CN111263169B (zh) | 空间解相关和重相关方法、处理设备、数据压缩和解压缩系统 | |
CN109660261B (zh) | 数据压缩方法和装置、数据解压缩方法和装置 | |
CN101399989B (zh) | 减少位深的量子化方法 | |
RU2125765C1 (ru) | Способ и устройство сжатия символов, стохастический кодер (варианты) | |
CN101919254B (zh) | 基于预测的图像处理 | |
CN105103548A (zh) | 根据输入数据的位深选择变换数据的最大动态范围和变换矩阵的数据精度 | |
CN105379283A (zh) | 数据编码和解码 | |
CN105409129B (zh) | 编码器设备、解码器设备和方法 | |
CN114584778A (zh) | 数据压缩和打包 | |
US20190326928A1 (en) | Method of input data compression, associated computer program product, computer system and extraction method | |
CN114584777A (zh) | 数据压缩和打包 | |
Shportko et al. | Programming the Formation of Difference Color Models for Lossless Image Compression. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |