数据压缩的制作方法

文档序号:9691361阅读:391来源:国知局
数据压缩的制作方法
【专利说明】数据压缩
【背景技术】
[0001] 在数据将被存储在存储器中和/或从存储器被读取的许多应用中,无损的和有损 的数据压缩两者都是值得要的。通过在将数据存储在存储器中之前压缩数据,可以减少传 送至存储器的数据量。数据压缩特别有用的数据的一种示例是图像数据,诸如将被存储在 深度缓冲器中的深度数据、将被存储在帧缓冲器中的像素数据、以及将被存储在纹理缓冲 器中的纹理数据。这些缓冲器可以是任何适当类型的存储器,诸如缓存存储器、分离的存储 器子系统、共享存储器系统中的存储器区域、或者它们的某种组合。
[0002] 图形处理单元(GPU)可以被用来处理图像数据,以便确定将被存储在帧缓冲器中 以用于输出至显示器的图像的像素值。GPU通常具有用于并行处理大块数据的高度并行化 结构。使得GPU (尤其是意图在移动设备上实施的那些GPU)在较低的功率电平处进行操作 存在着显著的商业压力。与之相抵触的是,在更快的GPU上使用更高质量的渲染算法的要 求,这由此对相对有限的资源:存储器带宽施加了压力。然而,增加存储器子系统的带宽可 能不是有吸引力的解决方案,因为向GPU移动数据和从GPU移动数据以及甚至在GPU内移 动数据,消耗了 GPU的显著一部分的功率预算。除了 GPU之外,相同的问题可能也与中央处 理单元(CPU)有关。
[0003] 如上文所描述的,减少传送至存储器的数据量的一种方式是压缩将向存储器传送 和从存储器传送的数据。用于数据被压缩和解压缩所花费的时间增加到存储器读取操作和 写入操作的时延,并且因此可能影响GPU工作的速度。此外,可以准许数据被压缩的速率不 同于经压缩的数据被解压缩的速率。作为一个示例,经常可以准许用于压缩纹理数据的压 缩过程(其通常为有损的压缩过程)显著地慢于用于解压缩经压缩的纹理数据的解压缩过 程。相对照地,用于压缩用于存储在深度缓冲器中的深度数据或者用于存储在帧缓冲器中 的像素数据的压缩过程(其通常为无损的压缩过程)理想地应当以与对应的解压缩过程近 似相同的速率来加以执行。GB2451911公开了一种能够压缩二维数据集合的图形渲染系统。

【发明内容】

[0004] 本概述被提供用以采用简化形式来介绍对下文在详细描述中进一步描述的概念 的选择。本概述不意图为识别所要求保护的主题的关键特征或者必要特征,也不意图用来 限制所要求保护的主题的范围。
[0005] 例如作为数据压缩过程的一部分,能够根据预定的可变长度熵编码方案(例如, 基于指数哥伦布编码)对数据值进行熵编码,从而它们具有多1个前缀比特以及多〇个后 缀比特。在一些示例中,至少一些前缀比特与后缀比特进行交织,并且在其他示例中,前缀 比特可以与后缀比特分离地被分组。对应的熵解码过程能够被执行,由此第一和第二比特 被取回(例如,被解交织),并且前缀比特被分析以确定所接收的经熵编码的数据值之间的 比特边界。所取出(例如,被解交织)的后缀比特和所确定的比特边界被用于解码经熵编 码的数据值。以这种方式,在确定比特边界时能够考虑减少的比特集合,这进而意味着,例 如通过分析并行的解码单元中的前缀比特,在相同时钟周期期间能够找到多个比特边界, 由此允许多个经熵编码的数据值(它们已经使用可变长度编码方案被编码)在相同时钟周 期中被解码。作为一个示例,经熵编码的数据值可以形成块(例如,8X8块),并且来自该 块的一行的所有经熵编码的数据值(例如,8个经熵编码的数据值)可以在一个时钟周期中 被解码。
[0006] 特别地,提供了一种对经熵编码的数据值的序列执行熵解码的方法,其中经熵编 码的数据值已经根据预定的可变长度熵编码方案而被编码,从而经熵编码的数据值中的每 个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码 的数据值中的每个经编码的数据值,第一比特的数目根据熵编码方案的预定关系而与第二 比特的数目有关,并且其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置 由熵编码方案预先确定为包括第一比特或第二比特,该方法包括:接收经熵编码的数据值 的序列;基于经熵编码的数据值的序列中的比特的根据熵编码方案的比特位置,将所接收 的经熵编码的数据值的第一比特与所接收的经熵编码的数据值的第二比特分离;对于所接 收的经编码的数据值中的每个所接收的经编码的数据值,根据第一比特的数目与第二比特 的数目之间的预定关系,分析所接收的经熵编码的数据值的所分离的第一比特,以确定所 接收的经熵编码的数据值之间的比特边界;以及根据预定的可变长度熵编码方案,使用第 二比特和所确定的比特边界来解码经熵编码的数据值。可以提供一种计算机可读存储介 质,具有被编码在其上的计算机可读程序代码,该计算机可读程序代码用于生成熵解码模 块,该熵解码模块被配置为执行根据本文所描述的任何示例的执行熵解码的方法。
[0007] 提供了一种熵解码模块,被配置为对经熵编码的数据值的序列执行熵解码,其中 经熵编码的数据值已经根据预定的可变长度熵编码方案而被编码,从而经熵编码的数据值 中的每个经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于 经编码的数据值中的每个经编码的数据值,第一比特的数目根据熵编码方案的预定关系而 与第二比特的数目有关,并且其中经熵编码的数据值的序列中的多个比特位置中的每个比 特位置由熵编码方案预先确定为包括第一比特或第二比特,熵解码模块被配置为:接收经 熵编码的数据值的序列;基于经熵编码的数据值的序列中的比特的根据熵编码方案的比特 位置,将所接收的经熵编码的数据值的第一比特与所接收的经熵编码的数据值的第二比特 分离;对于所接收的经编码的数据值中的每个所接收的经编码的数据值,根据第一比特的 数目与第二比特的数目之间的预定关系,分析所接收的经熵编码的数据值的所分离的第一 比特,以确定所接收的经熵编码的数据值之间的比特边界;以及根据预定的可变长度熵编 码方案,使用第二比特和所确定的比特边界来解码经熵编码的数据值。可以提供一种数据 解压缩单元,包括这样的熵解码模块。
[0008] 提供了一种根据预定的可变长度熵编码方案对多个数据值执行熵编码以形成经 熵编码的数据值的序列的方法,该方法包括:接收数据值;对于所接收的数据值中的每个 所接收的数据值,根据熵编码方案来确定经熵编码的数据值,由此经熵编码的数据值包括 一个或多个第一比特以及零个或更多第二比特,其中对于经编码的数据值中的每个经编码 的数据值,第一比特的数目根据熵编码方案的预定关系而与第二比特的数目有关;以及从 所确定的经熵编码的数据值形成经熵编码的数据值的序列,其中经熵编码的数据值的序列 中的多个比特位置中的每个比特位置由熵编码方案预先确定为包括第一比特或第二比特。 可以提供一种计算机可读存储介质,具有被编码在其上的计算机可读程序代码,该计算机 可读程序代码用于生成熵编码模块,该熵编码模块被配置为执行根据本文描述的任何示例 的执行熵编码的方法。
[0009] 提供了一种熵编码模块,被配置为根据预定的可变长度熵编码方案对多个数据值 执行熵编码以形成经熵编码的数据值的序列,该熵编码模块被配置为:接收数据值;对于 所接收的数据值中的每个所接收的数据值,根据熵编码方案来确定经熵编码的数据值,由 此经熵编码的数据值包括一个或多个第一比特以及零个或更多第二比特,其中对于经编码 的数据值中的每个经编码的数据值,第一比特的数目根据所述熵编码方案的预定关系而与 第二比特的数目有关;以及从所确定的经熵编码的数据值形成经熵编码的数据值的序列, 其中经熵编码的数据值的序列中的多个比特位置中的每个比特位置由熵编码方案预先确 定为包括第一比特或第二比特。可以提供一种数据压缩单元,包括这样的熵编码模块。
[0010] 如对本领域的技术人员将是明显的,上面的特征在适当时可以被组合,并且可以 与本文所描述的示例的方面中的任何方面进行组合。
【附图说明】
[0011] 现在将参考附图具体描述示例,在附图中:
[0012] 图1示出了一种图形渲染系统;
[0013] 图2示出了 一种数据压缩单元;
[0014] 图3示出了用于一种压缩数据的方法的流程图;
[0015] 图4示出了一种数据解压缩单元;
[0016] 图5示出了用于一种解压缩数据的方法的流程图;
[0017] 图6示出了一种空间解相关模块;
[0018] 图7示出了一种线性预测方法的图示;
[0019] 图8图示了空间解相关模块的处理管线的操作;
[0020] 图9示出了用于一种在数据值块上执行空间解相关的方法的流程图;
[0021] 图10是图示了熵编码方案如何编码不同符号值的表格;
[0022] 图11示出了一种熵编码模块;
[0023] 图12示出了用于一种对多个数据值执行熵编码的方法的流程图;
[0024] 图13示出了一种熵解码模块;
[0025] 图14示出了用于一种对多个经熵编码的数据值执行熵解码的方法的流程图;
[0026] 图15表示包括经编码的数据值的块的第一数据分组;
[0027] 图16表示包括多个数据块的第二数据分组;
[0028] 图17图示了通道的数据如何被存储在经编码的数据值的块中;
[0029] 图18示出了一种空间重相关模块;以及
[0030] 图19图示了空间重相关模块的一级处理管线的操作。
[0031 ] 贯穿附图,在适当处使用共同的参考数字来指示类似的特征。
【具体实施方式】
[0032] 现在通过仅为示例的方式来描述实施例。
[0033] 在各种各样的不同场景中,数据压缩是有用的。本文描述的示例中的大多数示例 涉及用于由GPU使用的图像数据的压缩(以及解压缩),但是类似的原理可以应用到其他类 型的数据的压缩(以及解压缩),诸如音频数据、数字数据、或文本数据和/或用于由除了 GHJ之外的其他处理单元(诸如CPU)使用的数据。
[0034] 图1示出了可以实施在电子设备(诸如移动设备)中的图形渲染系统100。图形 渲染系统100包括主机CPU 102、GPU 104、存储器106 (例如图形存储器)以及显示器108。 CPU 102被布置为与GPU 104进行通信。数据(其可以是经压缩的数据)能够在GPU 104 与存储器106之间在任一方向上加以传送。由GPU 104渲染的图像可以被显示在显示器 108 上。
[0035] GPU 104包括渲染单元110、压缩/解压缩单元112、存储器接口 114、以及显示器 接口 116。系统100被布置使得数据能够在以下各项之间在任一方向上传递:(i)CPU 102 与渲染单元110 ;(ii)CPU 102与存储器接口 114 渲染单元110与存储器接口 114 ; (iv)存储器接口 114与存储器106 ; (v)植染单元110与压缩/解压缩单元112 ; (vi)压缩 /解压缩单元112与存储器接口 114 ;以及(vii)存储器接口 114与显示器接口。系统100 进一步被布置使得数据能够从压缩/解压缩单元112传递到显示器接口 116,并且使得数据 能够从显示器接口传递到显示器108。
[0036] 在操作中,GPU 104个体地处理图像数据的区域。区域可以例如表示图像的矩形 (包括正方形)部分。渲染单元110可以使用诸如Z-测试和纹理映射的已知技术来执行图 形基元(primitives)(诸如三角形和线)的扫描转换。植染单元110可以包含缓存单元以 减少存储器流量。一些数据由渲染单元110经由存储器接口单元114(其可以包括缓存) 读取或写入至存储器106,但是对于其他数据(诸如将被存储在帧缓冲器中的数据),数据 优选地从渲染单元110经由压缩/解压缩单元112去到存储器接口 114。压缩/解压缩单 元112通过如下文更详细描述的那样对数据进行压缩,来减少将跨越外部存储器总线而被 传送至存储器106的数据量。
[0037] 显示器接口 116将所完成的图像数据发送至显示器108。未压缩的图像可以直接 从存储器接口单元114来加以访问。经压缩的数据可以经由压缩/解压缩单元112来加以 访问,并且作为未压缩的数据而被发送至显示器108。在替换的示例中,经压缩的数据可以 被直接发送至显示器108,并且显示器108可以包括如下逻辑,该逻辑用于以与压缩/解压 缩单元112的解压缩等同的方式来解压缩经压缩的数据。虽然被示出为单个实体,但是为 了增强性能的原因,压缩/解压缩单元112可以包含多个并行的压缩和/或解压缩单元。
[0038] 作为一般性的概述,压缩系统可以遵循一种基本的算法纲要(algorithmic outline),从而执行以下步骤(并不必然按照下文给出的顺序):
[0039] 1.划分为块
[0040]图像数据在逻辑上被划分为独立的非重叠的矩形块,以便于准许对经压缩的数 据的随机访问。块的尺寸是依赖于实施方式的,并且块可以例如为数据值的8X8、16X4、 32X2、4X4或32X16块。增加块尺寸趋于提高所实现的压缩比。然而,增加块尺寸还趋于 招致更大的硬件成本,并且此外,在访问模态(pattern)变得较不连贯时,可能会具有降低 的效率。因此,在选择块尺寸时存在将要达到(struck)的一个平衡,其依赖于实施方式并 且其可以例如依赖于将被压缩的数据的类型的特性。可以独立于由GPU处理的区域的尺寸 来选择块尺寸,然而从选择块尺寸而使得它是区域尺寸的方便倍数或者反之亦然,可能会 得到某种益处。
[0041] 2.格式转换
[0042] 一些缓冲器(例如深度缓冲器)可以以浮点格式来存储数据,但是对浮点数执行 无损算法可能是有问题的。因此,浮点值可以被解释为带符号的大小整数值以准许无损计 算。在数据值包括表示不同颜色分量的数据的多个通道的场合,也可以使用格式转换,其中 这些通道中的值不是8比特的倍数,例如RGB 5:6:5或者ARGB 2:10:10:10格式。数据值 的格式可以被转换,从而每个通道具有8比特的倍数的值(例如ARGB 8:8:8:8格式)。在 压缩过程中并不总是需要该格式转换步骤,例如,当数据已经采用整数格式或者能够对其 执行无损算法的某种其他格式时。
[0043] 3.颜色通道解相关
[0044] 数据值可以包括表示不同颜色分量的数据的多个通道。例如,数据可以采用ARGB 8:8:8:8格式,其中存在8个比特来表示数据值中的每个数据值的阿尔法通道、红色通道、 绿色通道和蓝色通道中的每个通道。在这些颜色通道中的一些或所有颜色通道(例如R通 道、G通道和B通道)的值之间经常存在值得考虑的相关性,并且压缩算法能够利用这种相 关性通过平均地减少这些通道中的一些通道的范围来压缩数据。用于利用不同颜色通道之 间的相关性的适合的颜色空间变换在本领域中是已知的,例如在GB2451911中所描述的, 并且本文中没有详细描述。适合的颜色空间变换是无损的和"非扩展的",意味着用来表示 颜色值的比特数目不会由于颜色空间变换而增加。
[0045] 4.空间解相关
[0046] 空间解相关(也称为"预测")移除了邻近像素之间的一些相关性,由此平均地减 少了值的动态范围。下文参考图6到9详细地描述一种用于执行空间解相关的方法。
[0047] 5.熵编码
[0048] 熵编码利用经解相关的数据的统计性质来减少用来表示数据的比特数目。算术 编码方案在计算上是相对密集和缓慢的。因此,相对简单的可变长度编码(VLC)(例如 Huffman或Golomb-Rice)或者基于运行长度的熵编码方案已经被使用。然而,即使利用简 单的VLC编码方案,可能还是难以高速地执行熵编码。下文参考图10到14详细地描述了 一种用于高速地并且以低计算复杂度地执行熵编码和解码的新方法。
[0049] 6.存储
[0050] 最后,经压缩的数据被存储在存储器106中。用于将数据存储在存储器106中的机 制的细节对本领域的技术人员而言将是已知的,并且如此在本文中并不非常详细地描述。
[0051] 解压缩系统可以遵循上文针对压缩所给出的基本算法纲要的逆转(并非必然按 照上文给出的顺序的逆转)。
[0052] 上文给出的一般压缩算法可以应用在压缩/解压缩单元112中。图2示出了压缩 /解压缩单元112的模块,当压缩/解压缩单元112作为压缩单元进行操作时,这些模块将 被用来压缩包括四个8比特通道的ARGB数据值的块。在其他示例中,压缩/解压缩单元 112可以被用来压缩具有其他格式的数据值的块。压缩单元112包括颜色解相关模块202、 四个空间解相关模块204$」204 4、四个熵编码模块206$」206 4、以及包装(packing)模块 208 〇
[0053] 图3示出了用于一种压缩数据块的方法的流程图。在步骤S302中,在压缩单元 112处接收未压缩的数据的块。在压缩单元112处接收数据之前,可以对该数据执行上文 给出的一般压缩算法的第一步骤,即划分为块。替换地,可以在压缩单元112处执行这一步 骤。在颜色解相关模块220处接收未压缩的数据。在步骤S304中,颜色解相关模块202可 以如上文所描述的那样对数据值应用格式转换。注意,例如当数据已经采用了适合的格式 (诸如,采用整数格式)时,格式转换步骤可能不被实施,从而格式转换不是必要的。在图2 和3中所示出的示例中,在压缩单元112处接收的数据已经被划分为块,例如8X8块。此 外,在这个示例中,所接收的数据采用ARGB 8:8:8:8格式,并且在步骤S304中不需要格式 转换。也就是说,在这个示例中,8X8块中的每个数据值都包括32比特:用于阿尔法通道 的8比特、用于红色通道的8比特、用于绿色通道的8比特、以及用于蓝色通道的8比特。
[0054] 在步骤S304中,颜色解相关模块202还对数据值应用颜色解相关。适合的颜色解 相关方法在本领域中是已知的。优选地,使用不扩展任何输出通道的颜色解相关方法,即从 颜色相关模块202输出的比特数目不大于被输入到颜色解相关模块202的比特数目。
[0055] 在其他示例中,阿尔法通道的数据值被发送至空间解相关模块2044,并且R通道、G 通道和B通道的数据值被发送至颜色解相关模块202,从而颜色解相关模块202仅对R值、 G值和B值应用颜色解相关。
[0056] 已经发现了(例如,如GB2451911中所示出的)以下的非常简单的颜色转换对于 8比特颜色值表现良好:
[0057] R' = R-G mod 2 8
[0058] G' = G
[0059] B' = B_G mod 2 8
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1