利用相对和绝对增量值的数据压缩和解压缩的制作方法

文档序号:7904422阅读:428来源:国知局
专利名称:利用相对和绝对增量值的数据压缩和解压缩的制作方法
技术领域
本发明涉及数据处理中的数据压缩和解压缩领域。
背景技术
随着现代处理器的处理功率的增加,它们可处理的数据量也增加。对这种增加的数据量在不同设备间的传输表现出了其自身的问题,并且,已利用各种不同的压缩机制来处理这些问题。这些压缩机制允许在发送之前将数据压缩成更加紧密的形式,然后,在需要数据的地方在接收时将其解压缩。一种压缩数据的方法是增量(delta)压缩。已经发现,在代表如将要显示的图像的数据流中,一般而言,两个邻接数据项目之间的差异是相当小的,因此,仅发送第一数据项目然后发送代表与之前的值的差异的值而非发送每个数据项目是更加高效的。如果值是类似的,则很明显,通过这种方式可发送更少的数据。但是,例如带有以任意次序来自屏幕的不同贴图(tile)的数据的图形数据正在流中发送时可出现问题。就其本性而言,如果计算增量的数据项目是类似的,增量压缩才高效。因此,在图形数据流中,应当在相关的数据项目(例如,在数据集中邻接的那些数据)之间计算增量。这些值可能不出现在彼此靠近的数据流汇总,因此,为了计算增量值,需要用以存储之前所接收的数据项目的数据仓库。存在可以任意次序访问的成千上万的数据集, 可能未存储所需要的相关值,除非存储了非常大量的之前所接收的数据。

发明内容
从第一方面来看,本发明提供了一种用于接收包括多个数据项目并用于输出压缩数据流的数据压缩器,所述数据压缩器包括用于接收所述数据流的数据输入端;用于生成压缩增量值的增量值计算器,所述增量值计算器被配置为从所述数据输入端接收所述多个数据项目,并被配置为针对接收的数据项目中的至少一些数据项目来访问数据仓库,以确定所述接收的数据项目的相关数据项目是否存储在所述数据仓库中,以及响应于所述相关数据项目被存储了,从所述数据仓库获取所述相关数据项目,并且,从所述接收的数据项目和所述相关数据项目计算增量值并输出所述增量值;并且响应于所述相关数据项目未被存储在所述数据仓库中,从所述接收的数据项目和预定值计算增量值并输出所述增量值;所述数据仓库,用于存储在所述数据输入端接收的所述多个数据项目;所述数据压缩器还包括数据仓库控制器,用于控制所述多个数项目在所述数据仓库中的存储,所述数据仓库控制器配置为响应于在所述数据输入端接收到数据项目而访问所述数据仓库,并确定是否给所述数据项目分配了存储位置,以及如果是,则在所述分配的存储位置中存储所述数据项目;并且如果否,则给所述数据项目分配存储位置,收回并丢弃在所述分配的存储位置中存储的任何数据,并在所述分配的存储位置中存储所述数据项目。本发明认识到利用某些数据流,可存在以任意次序接收的数据项目,使得在数据集或对象中,相邻值并不彼此相关。在数据项目之间形成增量值仅适用于压缩两个数据项目彼此类似的接收数据流,并且,一般出现为它们彼此相关,可能在数据集中邻接。但是,如果数据流包括以任意次序接收的数据项目,则在数据流中的相邻数据项目将是不相关的。 为了能够在数据集中彼此相关的数据项目之间形成增量值,需要数据仓库,以存储之前所接收的值,使得当接收新值时,可从数据仓库获取相关值,并且,计算对应的增量值。但是, 如果数据流包括以任意次序接收的许多数据项目,则数据仓库需要很大,以便确保存在所存储的相关值。如果数据仓库是诸如缓存器之类的可很快访问的数据仓库,则从面积上讲是很昂贵的,并且,具有非常大的数据仓库不是有优势的。如果使用较小的数据仓库和更便宜的存储器,则系统的延迟将取决于是否需要从存储器中获取相关数据项目,并且,这将意味着系统的延迟不是恒定的,而是取决于所获取的实际数据项目,因此,不能存在输入数据的恒定
吞吐量。本发明通过允许从没有存储相关数据项目的预定值来计算“增量值”从而解决该问题。因此,当接收新数据项目时,确定是否存储了相关数据项目,并且,如果是,则从该相关值计算增量值。但是,如果不是,则仅关于预定的存储值来计算增量值。该值可以是零 (在该情形中,实际数据项目是输出)或可以是对数据项目所计算的统计平均。这允许以相同的延迟来计算增量值,而不管是否存在已存储的相关值。因此,可存在数据的恒定吞吐量,仅在某些情况中(其中,没有存储相关数据项目),将不压缩数据,或者,将不很好地压缩该数据。数据仓库是健忘型仓库,因此,当接收新的数据项目时,确定是否给其分配了存储位置。如果是,则将值存储在该位置中,如果不是,则收回另一存储位置、丢弃数据并将新值存储在那里。这样做是可能的,因为系统能够处理未被存储的相关数据项目,因此,覆盖所存储的值将不生成错误,其可仅导致对未来值的压缩未被如此高效地执行。应当注意,一般而言,增量值作为在所接收的数据项目和其相关值或预定值之间的差异而计算。该差异可以是简单的减法,或者,其可以是确定两个值之间的不同的其他方法。 在某些实施例中,在所述数据流中的所述多个数据项目中的每一个被分类为属于多个数据对象中的一个,所述数据对象中的每一个包括多个数据项目,所述数据项目存储在包括与之相关联的标识了所述数据对象的标识符的所述数据仓库中,其中,所述数据仓库控制器配置为在所述数据仓库中将所述存储位置分配给所述数据对象。本发明的实施例特别适用于具有若干个数据对象的数据流。当存在多个数据对象时,在相同数据对象内的数据项目将彼此相关,而在其他数据对象中的那些数据项目将一般不彼此相关。因此,如果在数据流中的相邻数据项目来自不同数据对象,则在它们之间形成增量值将不压缩数据。因此,如果可将数据项目标识为属于数据对象并且数据仓库将存储位置分配给数据对象,则这是很方便的。因此,可从这些标识符来标识在数据仓库中的相关值,并且,计算对应的增量。如果数据流具有已很好定义的格式,则在数据流中的数据项目中的每一个将不必具有标识符比特,而是可从在数据流中的位置和可能从该数据对象的单个标识符比特而被标识为属于具体数据对象。在某些实施例中,所述数据项目和所述相关数据项目属于相同的数据对象,使得所述数据控制器配置为响应于确定所述相关数据项目存储在所述数据仓库中并获取所述相关数据项目以用于计算所述增量值,将所述数据项目存储在分配给所述相同数据对象的所述存储位置中,并且,收回并丢弃所述相关数据项目。在某些实施例中,将存储位置分配给数据对象,因此,当接收数据项目时,如果在数据仓库中的存储位置已被分配给该数据对象,则相关数据项目将被存储在数据仓库中, 并且,可从该相关数据项目来计算增量,当这已完成时,所接收的数据项目可被存储在该已分配的存储位置中,并且,所存储的数据项目可被收回并丢弃。一旦相关值已拥有计算增量,则其不再被需要,因此,其被所相关的值所覆盖,其将与从相同数据对象所接收的下一数据项目相关。在某些实施例中,所述数据对象的每一个包括多个数据部分,所述数据部分中的每一个包括在所述数据流中的多个相邻数据项目,所述数据仓库控制器配置为将数据部分存储在分配给所述对应数据对象的所述存储位置中的一个。在某些实施例中,所述数据仓库控制器被配置为响应于接收到所述数据部分中的一个的第一数据项目,确定来自相同数据对象的数据部分是否存储在所述数据仓库的存储位置中,使得所述存储位置被分配给所述数据对象,以及如果是,则利用所述增量值计算器从在所述所接收数据部分中的至少一个数据项目和在所述所存储的数据部分中的至少一个相关数据项目计算增量值,然后,从所述所分配的存储位置收回所述所存储的数据部分,并且,将所述所接收的数据部分存储在所述所分配的存储位置中;以及,如果不是,则从所述存储位置中的一个收回并丢弃数据,并且,将所述存储位置分配给所述数据对象,并且,将所述数据部分存储在所述所分配的存储位置中。当接收到新的数据部分时,数据仓库控制器查看来自相同的数据对象的数据部分是否存储在数据参考中,如果是,则数据部分中的数据项目中的至少一个将被用来利用所接收的数据部分中对应的数据项目来形成增量,并且,所接收的数据部分将覆盖之前所存储的数据部分。在某些实施例中,数据流包括具有相邻数据项目的数据部分,并且,数据仓库控制器将整个数据部分存储在分配给该具体数据对象的每个存储位置中。在某些实施例中,针对所述数据项目中的至少一个,所述相关数据项目包括在相同数据部分中的数据项目。从在不同数据部分但在相同数据对象中的相关数据项目计算增量。还可在数据部分内计算增量,使得在数据部分内的数据项目可以是相关的,并且,它们之间的增量值将是其压缩版。在某些实施例中,针对所述数据项目中的至少一个,所述相关数据项目包括来自属于相同数据对象的之前所接收的数据部分中的对应位置的数据项目。相关数据项目还可以是来自相同数据对象但是来自不同数据部分的对应数据项目。通过这种方式,可彼此链接数据部分,并且,可通过这些增量值来链接在数据部分中的不同数据项目。然后,可以合适地压缩数据,并且,可从所接收的值中将其解压缩。在某些实施例中,属于相同的数据对象并通过所述标识符所标识的所述数据项目被指定到相同的目的地。虽然数据对象可以是所提供的多个不同数据集,该数据集包括以某种方式彼此相关的数据,但是,在某些实施例中,其为被指定到具体的目的地的数据集。
在某些实施例中,所述至少一个数据流包括至少一个图形数据流,所述数据对象包括用于在图形显示器中绘制贴图的图形命令列表,所述数据部分包括所述图形命令中的一个,并且,所述数据项目包括在所述图像命令内的字段。通过本发明的实施例,图形数据流特别适于压缩。图形显示从贴图形成,利用图形命令列表来绘制每个贴图。因此,用于绘制贴图的图形命令列表彼此相关,并且,可在相同贴图的列表之间和在命令内的字段之间形成增量值。但是,在不同贴图的列表之间形成增量值一般将不提供对数据的压缩。因此,这种图形数据流将具有很多彼此相关的数据项目和许多彼此不相关的数据项目,并且,将以任意次序来布置数据项目。本发明的实施例利用健忘型数据仓库,并且,允许利用绝对值来压缩,这允许在即便没有存储相关数据项目的情形中也具有对这种不同数据的恒定吞吐量。虽然数据仓库可以是许多东西,但是,在某些实施例中,其包括数据缓存器。缓存器是存储数据的一种方便的方式,其可快速并简易地访问。在面积上而言它是昂贵的,因此,具有有限的大小,但是,利用健忘型缓存器并与允许不论是否存储了相关值都计算数据项目意味着可使用具有合理大小的缓存器,并且,压缩器将仍旧正确地工作。如果缓存器是数据仓库,则数据仓库的每行具有用于标识数据对象的标识值,该行被分配以存储数据对象。在某些实施示例中,所述数据对象包括用于在图形屏幕中绘制贴图的等级层的图形命令列表,其中,所述数据仓库控制器配置为响应于接收到所述数据部分中的一个的第一数据项目,确定来自相同的数据对象的数据部分是否存储在所述数据仓库的存储位置中,并且,响应于确定相同的数据对象并未存储在所述数据仓库的存储位置中,标识来自相同的贴图但是不同等级级别的数据对象,并且,利用所述增量值计算器从所述所接收数据部分中的至少一个数据项目和在所述所存储数据部分中的至少一个相关数据项目计算至少一个增量值,并且,与标识所述相关数据项目的源的指示一起输出所述增量值。如果数据流包括用于等级图形显示的数据,则用于形成增量的相关值可来自相同贴图的不同等级层。这将导致压缩,但是,也将允许解压缩,因为,当接收增量值时,之前的层将总在解压缩器处被接收。本发明的第二方面提供了一种数据格式化器,包括输入端,用于接收数据压缩器输出的值;格式化电路,被配置为将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个,所述格式中的每一个通过在所述数据分组内的标识符比特来标识;以及输出端,用于输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值, 并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组。某些数据压缩器,特别是本发明的第一方面的数据压缩器,能够特别高效地压缩某些数据项目,而其他未被很好地压缩,并且,有时确实根本未压缩。当格式化该数据以进一步发送它时,很难高效地这样做,因为代表这些数据项目的数据的大小可能非常不同。如果使用具有不同长度的数据分组,需要编码以指示每个数据分组的开始和结束。可替换地, 可使用恒定长度的数据分组,但是,这可导致由于所发送的任意数据的可变长度所带来的对数据的低效封装。当发送未高效压缩的数据时,足够大以容纳未压缩的数据的分组将具有许多空的空间。本发明通过提供恒定的数据分组长度以便无需使用比特来指示分组的长度、或开始和结束来解决该问题。这些数据分组具有多个格式中的一个,该格式通过标识符比特来标识。格式中的一个是扩展格式,使得如果数据分组的存储容量太小以至于无法存储输出值,则该值的一部分可被布置在一个或多个扩展格式分组中。通过这种方式,可使用具有适于存储一个或多个未压缩数据项目的大小的数据分组,则如果需要发送未被高效压缩的更大值,利用这些扩展数据分组,仍旧可发送它。在某些实施例中,所述所接收值包括至少某些通过增量压缩器压缩的数据,以形成增量值,并且,所述多个格式包括第一格式,该第一格式包括指示值,该指示值用于指示后续分组是否包括与预定值相关的增量值,或者,是否包括包含与之前所接收的数据项目相关的数据的增量值以及所述增量值中的至少一个的至少一部分;第二格式,该第二格式包括所述增量值中的至少一个的至少一部分;以及所述扩展格式用于将太大以至于难以存储的所述至少一个增量值的一部分存储在所述第二格式中。本发明的第二方面的实施例特别适于格式化来自本发明的第一方面的压缩器的数据。因此,数据格式分组能够处理与其他数据项目相关的增量值以及通过减去预定值所得的增量值。通过这种方式,通过本发明的第一方面的压缩器所输出的已压缩数据可被存储在恒定长度的数据分组中,并且,可被标识为与另一数据项目相关的增量值或与预定值相关的增量值,并且,通过这种方式,已压缩数据可稍后被解压缩器所识别,并且,可被再现。在某些实施例中,用于所述第一格式的所述指示值提供了对所述增量值是关于哪些之前所接收的数据项目计算的的指示。在某些实施例中,所述格式中的每一个包括专用于存储所述指示值的指示比特和专用于存储至少一个数据字段的比特,所述所接收的值中的每一个包括所述至少一个数据字段中的一个的数据。格式包括指示具体格式和随后的至少一个数据字段的指示符。每个数据字段用于存储增量值的至少一部分。在某些实施例中,所述数据格式化器配置为在紧接其所扩展的所述数据分组之前输出具有所述扩展格式的数据分组。一般在其所扩展的分组之前输出扩展格式分组。因此,可输出多个扩展分组,并且,当接收另一格式分组时,理解为这些扩展分组属于该分组,而无需任何额外的信息。因此,无需开始或结束指示符。本发明的第三方面包括一种包括根据本发明的第一方面的数据压缩器的数据压缩系统,该数据压缩器与根据本发明的第二方面的数据格式化器相耦合。本发明的第四方面提供了一种数据解压缩器,包括输入端,用于接收包括固定大小的多个数据分组的已压缩数据流,每个数据分组存储多个值,所述数据分组具有多个格式中的一个,所述多个格式中的每一个通过在所述数据分组内的标识符比特所标识,所述多个格式中的一个包括用于存储太大以至于难以在相关的数据分组中存储的至少一个输出值的一部分的扩展格式;数据解格式化器,用于从所述标识符比特识别所述数据分组的所述格式,并且用于将存储在所述扩展分组中的至少一个扩展分组中的数据和存储在所述相关数据分组中的数据相组合;数据解压缩器,用于解压缩所述数据。本发明的第五方面提供了一种压缩数据的方法,包括如下步骤在数据输入端接收包括多个数据项目的数据流;访问数据仓库,并确定与所接收的数据项目相关的数据项目是否存储在所述数据仓库中,以及响应于存储了所述相关数据项目,从所述数据仓库获取所述相关数据项目,并且计算包括所述接收的数据项目和所述相关数据项目之间的差异的增量值,并输出所述增量值;响应于在所述数据仓库中未存储所述相关数据项目,计算包括所述接收的数据项目和预定值之间的差异的增量值,并输出所述增量值;访问所述数据仓库,以确定是否给所述接收的数据项目分配了存储位置,以及如果否,则将在所述数据仓库中的存储位置分配给所述数据项目,并且收回并丢弃存储在所述存储位置的数据;将所述数据项目存储在所述分配的存储位置中。本发明的第六方面提供了一种格式化已压缩数据的方法,包括接收数据压缩器输出的值;将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个,所述格式中的每一个通过在所述数据分组内的标识符比特来标识;以及输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值,并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组。本发明的第七方面提供了一种压缩和格式化已压缩数据的方法,包括本发明的第五方面的方法,其后是根据本发明的第六方面的方法。本发明的第八方面提供了一种解压缩已压缩数据的方法,包括接收包括固定大小的多个数据分组的已压缩数据流,每个数据分组存储多个值,所述数据分组具有多个格式中的一个,所述多个格式中的每一个通过在所述数据分组内的标识符比特所标识,所述多个格式中的一个包括用于存储太大以至于难以在相关的数据分组中存储的至少一个输出值的一部分的扩展格式;从所述标识符比特识别所述数据分组的所述格式;并且将存储在所述扩展分组中的至少一个扩展分组中的数据和存储在所述相关数据分组中的数据相组合;并且解压缩所述数据。本发明的第九方面提供了一种计算机程序产品,当运行在数据处理器上时,可操作用于控制所述数据处理器执行根据本发明的第六、第七或第八方面的方法的步骤。


将仅通过示例,参照附图和所说明的实施例来描述本发明,其中图1示出了根据本发明的实施例的数据压缩系统;图2示出了根据本发明的实施例的数据解压缩系统;图3示出了根据本发明的实施例的健忘型缓存器;图4示出了通过本发明的实施例所压缩的图形命令;图5和图6示出了根据本发明的实施例的已格式化压缩数据分组的示例;图7示出了根据本发明的实施例的示出了压缩数据的方法的流程图;图8示出了根据本发明的实施例的示出了在等级式图形化图像显示器中压缩图
12形数据的方法的流程图;图9示出了根据本发明的实施例的格式化数据的方法;以及图10示出了根据本发明的实施例的解压缩数据的方法。
具体实施例方式图1示出了根据本发明的实施例的数据压缩系统10。在系统10的输入端接收数据流5,然后,将其发送到健忘型(forgetful)缓存器20,该健忘型缓存器具有控制缓存器 20内的存储的缓存控制器22。当接收到数据项目时,缓存控制器22检查在缓存器20中是否存储了与所接收的数据项目相关的值,并且,如果已存储,则该值将被输出到增量压缩器 30。然后,缓存控制器22将查看是否给该具体数据项目分配了在缓存器20内的任意存储位置。如果已分配,则其将数据项目存储在所分配的位置中,并且,如果未分配,则其将给数据项目分配位置,并且,将把数据项目存储在那里,很可能在该过程中覆盖另一数据项目。可通过多种已知方式(例如,循环方式)来完成对用于覆盖的数据项目的选择。以并行方式将数据项目发送到增量压缩器30和缓存器20。因此,如果已在缓存器 20中存储了数据,则增量压缩器30接收数据项目和(很可能地)相关的数据项目。通过计算所接收的数据项目和其相关值之间的差异或者所接收的项目数据和存储在寄存器32中的预定值之间的差异(如果未存储相关数据),增量压缩器30压缩所接收的数据项目。寄存器32可存储任意值。其可存储0,在该情形中,关于该值所计算的增量值将实际上是未压缩的所接收数据项目,或者,更加通畅地,其将存储所接收的数据项目的统计平均值。因此, 一般通过从所接收的数据项目值中减去平均值,输出将更小,由此占用更少比特。然后,将输出数据发送到数据格式化器40。数据格式化器40具有格式化电路42,该格式化电路查看所接收的已压缩数据项目,并且,将其封装成恒定大小的数据分组。这些数据分组具有不同的格式。存在通用命令或分组,其对若干个大的但并不频繁变更的数据字段进行编码,并且,其具有指示比特,该指示比特可用于指示后续数据项目是处于绝对模式还是相对模式。该指示比特用于指示下一分组包括相对于存储在寄存器32中的预定值的增量值,或者,指示下一分组包括相对于相关数据项目的增量值。默认所有命令都与之前的命令相关,但是,在通用命令中的指示比特可用于使剩余的当前命令重新偏置(re-bias),以与预定恒定值相关。通过这种方式,格式化器可输出在恒定大小的数据分组中所接收的被不同压缩的数据项目。为了能够处理这些被不同压缩的值的不同大小,还存在原语(primitive)分组,该原语分组能够对整个数据项目集和这些原语的扩展进行编码,其允许存储额外的值,其中,未特别压缩该值,并且, 需要额外的空间。通过这种方式,数据分组的大小不必足够大以包括最差情形中的未压缩数据项目,而是可以是将包括一般已压缩数据项目的大小,并且,扩展分组可用于发送一个或多个值的剩余部分。在图5中更详细地描述了这些不同的格式。图2以示意性的形式示出了根据本发明的实施例的解压缩系统50。从压缩系统 10接收恒定大小的数据分组45,并且,解格式化器60从分组内的标识符识别每个分组的格式,然后,组合扩展分组和它们所属于的分组,并且,重新形成已压缩的数据项目。然后,将这些放入解压缩器70中,该解压缩器执行用以生成原始输入压缩系统10的数据流5所必须的计算。
虽然上述解压缩系统可用于所有类型的数据流,但是,对于图形数据而言,它特别有用,其中,存在形成为用于绘制具体贴图的命令列表的数据贴图。因此,每个贴图具有用于绘制该具体贴图的命令列表,并且,每个命令作为带有标识符的多个相邻数据项目发送, 该标识符标识与多个数据项目相关的贴图。图3更详细地示出了图1的存储这种命令数据的健忘型缓存器20。缓存器的每一行存储图形命令。存在与在流中的每个命令相关联的数据对象/列表标识符,该标识符标识与该命令相关的贴图和命令列表,并且,这些标识符作为与数据项目相关联的标志存储在缓存器中。这些列表标识符用于确认之前的数据项目是否已在缓存器中。在该示例中, 每个列表或贴图具有分配给它的行,其通过在标志(未示出)中的标识符所标识。因此,当接收来自该列表的新命令时,获取值以用于合适的增量计算,然后,将新近接收的值存储在分配给该具体列表的缓存器的该行中。在这方面,等级级别可作为标志的一部分被明确存储,或者,可数学地将贴图位置和等级级别组合成单个标识符字段。保持等级级别分离使得执行在用于相同贴图但属于不同等级级别的列表之间的增量更加容易。图4更加详细地示出了这种命令的性质,因此,可存在输入字段、提供应当先执行哪个命令的信息的时间戳,并且,存在在图中被标识为索引1、索引2和索引3的不同字段, 并且,这些索引与不同的原语命令相关,原语命令可以是用于绘制具体原语的命令。还存在标识命令与哪个贴图相关的标识符。图4还示出了如何组合不同字段以形成增量。在该实施例中,在每个命令内的两个字段之间以及在来自相同贴图的命令的对应字段之间形成增量。这是一种压缩数据的有效方法,因为在命令的每个列表中,对应字段很可能参照类似的顶点索引(vertex indices),因此,在命令内的对应字段将是类似的。另外,一起绘制的原语可能具有类似的大小,并且,处于类似的屏幕坐标,因此,很可能最终在相同的列表中。还通常通过软件工具来优化原语数据集,因此,一起提交的用于绘制的原语很可能具有相对不经常变更的类似顶点索引和全局状态。因此,在所示出的示例中,使用命令间压缩和命令内压缩。从获取自缓存器20的相关命令的索引3来计算用于索引3的增量,并且,关于索引3来计算用于索引2的增量, 并且,从索引2来计算用于索引1的增量。在启动时,或者,如果没有存储相关值,将关于存储在图1的寄存器32中的预定值来计算用于索引3的增量。图5示出了通过数据格式化器30输出的数据分组的某些格式的示例。数据分组具有标识它们是哪种格式的标识符。因此,在该具体示例中,存在扩展标识符、原语标识符和通用标识符,该分组用于建立某些不频繁变更的全局状态,并且,用于指示何时以下的分组是关于预定值的增量值。图6示出了带有三个正被输出的数据项目(字段A、字段B和字段C)的示例已压缩数据流。字段C还未被很好压缩,而字段A和B已被适度压缩,但未被很好压缩。如果所有三个值都已被很好压缩,则它们将刚好放入单个原语分组80中。但是,因为并非这种情况,所以已使用扩展分组82来容纳这些字段的额外比特。这些扩展分组具有公共的扩展分组格式,因此,需要较少的标识符比特。首先接收扩展分组,然后在接收到原语时,将值组合在一起。因此,该可变长度编码机制利用少量固定长度的已压缩分组来同时对多个数据字段的可变长度数据项目进行编码。具体地,在发明的实施例中,其使用四种类型的32比特分组来编码每原语最多198比特。不同的格式包括通用格式,该通用格式建立某些不频繁变更的全局状态,并且,允许在解压缩器中的增量值被可选地重置,以处理在压缩器中的缓存器的健忘性,即,其能够识别在紧随其后的分组中的增量是相对增量还是关于绝对值的增量。还存在专用格式(未示出),该专用格式提供极少变更的广数据项目的高比特,并且,存在如果已压缩值足够小则能够在单个命令中编码整个原语的原语格式。还存在原语扩展格式,该原语扩展格式用于扩展在原语格式中的所有数据字段的范围。很少使用通用格式和专用格式,到那好似,它们确实允许对非常广的数据项目的高效设置,并且,还允许在中间流中任意重置增量压缩。原语格式和原语扩展格式提供了对数据流的最频繁变更部分的高效编码的新颖方式。分配给在格式中的每个字段的比特数量是固定的,但并不必是可用比特的等同分割。 通过对多个测试数据集的统计分析来确定比特的精确比例。在压缩期间,计算增量值,并且,确定对每个字段编码所需要的最小比特数。如果任意字段无法在单个原语格式中表达,则将每个字段尽可能多的比特布置到随后被输出的扩展格式中。在增量值中的剩余比特被右移所输出的比特数,然后,重复该处理,直到所有剩余比特将刚好放入随后被输出的原语命令格式中为止。通过该处理,所有增量字段的可变长度增量值被分割成优先于单个原语格式的零个或多个这种扩展格式。通过首先输出最重要的比特,我们无需对用于这些扩展格式的序列终结标记进行编码,或指定组成第四命令的扩展格式的数量。这节约了存储带宽,因此, 节约了功率,并且,允许在压缩器和解压缩器二者中有非常简单的硬件。应当注意,未在已压缩的命令中输出立标标识符,而是格式化器将命令列表分割成不同的存储地址区域,其避免了需要去压缩列表标识符。图7示出了流程图,该流程图示出了根据本发明的实施例的压缩数据的方法。在数据压缩器处接收数据流,并且,依次考虑包括若干个数据项目的每个数据部分。计算在数据部分内的不同数据项目之间的增量值,并且,确定来自相同数据对象的数据部件是否存储在数据仓库中。如果是,则计算所存储的数据项目中的至少一个和在所接收的数据部分中的对应的数据项目之间的增量值。然后,将所接收的数据部分存储在数据仓库中用于相同数据对象的数据部分当前所存储的位置处。该存储位置已被分配该数据对象,因此,其被正确地分配给该数据部分。另外,如果该数据对象的数据项目需要计算来自相同数据对象的数据部分的增量值,则该新近存储的部分将包括所需要的数据项目。如果来自相同数据对象的数据部分未存储在数据仓库中,则计算在数据部分中的数据项目中的至少一个和所存储的常量之间的增量值。该步骤允许数据仓库不必存储所有之前所接收的数据项目。用所存储的常量来计算增量值一般而言将不提供对值的高效压缩,但是,其确实意味着总可计算增量值,而无需存储每个所接收的数据项目。然后,所接收的数据部分被存储在数据仓库中的存储位置中。由于不存在分配给该具体数据对象的存储位置,其覆盖已存储在数据仓库中的数据部分中的一个,然后,将该存储位置分配给该新的数据对象。当选择覆盖哪个数据部分时,缓存控制器利用若干个已知例程中的一个,诸如,确定哪个是存储在数据仓库中的最老的数据部分。应当注意,虽然在流程图中示出步骤以该具体次序执行,但是,它们可以以不同的次序执行,使得在数据部分之间的增量值或关于常量的增量值之后计算数据部分中的增量值。图8示出了流程图,该流程图示出了用于等级式图形显示的压缩数据的方法。在数据流中接收用于绘制贴图部分的以图形命令形式存在的数据部分。计算在所接收的数据项目中的至少两个之间的增量值,并且,确定是否在数据仓库中存储了来自相同数据对象和相同数据等级的数据部分。换言之,是否存在来自相同的命令列表和图形贴图的相同等级的另一命令。如果存在,则计算在所存储的数据项目和在所接收的数据部分中的对应数据项目之间的增量值。如果不存在来自相同等级和所存储的贴图的数据部分,则确定是否存在来自相同的贴图但来自不同的等级级别的数据部分。如果存在,则从该所存储的部分计算增量值。已发现,计算在来自相同的贴图但来自不同的等级级别的对应数据项目之间的增量值一般而言确实提供好的压缩,并且,找到可与之形成增量的之前值的机率增加了。 但是,需要与已压缩值一起输出某些指示,其指示其与另一等级级别相关。如果在数据仓库中根本不存在用于该贴图的所存储的命令,则计算在所接收的数据项目和所存储的常量之间的增量值,并且,将所接收的命令存储在数据仓库中的存储位置中,该存储位置通过某些已知方法被选择。在来自相同数据等级级别的贴图的命令出现在数据仓库中的情形中,该命令被新近接收的命令所覆盖。在来自不同数据等级级别的贴图的命令出现在数据仓库中的情形中,如果存在空间或存在当已计算增量时许多新近未被分配的行,一行被分配给该命令。与图7 —样,在合适时,可以不同的次序执行方法的步骤。图9示出了流程图,该流程图示出了根据本发明的实施例的将已压缩数据格式化成数据分组的方法。接收已压缩数据,并且,确定一个或多个值是否是关于另一数据项目的增量值。如果不是,则使用通用分组来向系统指示该增量值是关于常量而形成的,并且, 包括所接收的已压缩值,该值和指示被封装在该通用分组中,并且,如果在通用分组中不存在足够的空间,则还将其封装到通用扩展分组中。然后,将与其相关的其他增量值封装成原语,并且,必要时,封装成原语的扩展分组。这些增量值可以是与其他数据值相关的增量值, 或者,它们中的某些是关于常量的绝对值,在后一种情形中,在通用分组中的指示符将指示之。然后,分组作为通用分组、通用分组的扩展(如果需要扩展)、对原语分组的一个或多个扩展(如果需要扩展)以及指示与之相关的命令包的结束的原语分组输出。如果值是关于另一数据值所形成的增量值,则确定这些值是否将刚好放入原语数据分组中。如果可以,则将其封装到该原语数据分组中,并且,将其输出。如果不可以,将其封装到至少一个原语数据分组扩展、原语数据分组和一个或多个扩展分组中,然后,将原语数据分组输出。原语分组的输出指示命令包的数据的结束。然后,考虑所接收的进一步的值。因此,通用分组提供了增量值关于常量而形成的指示,并且,在没有这种分组的情形中,假定所有增量值是关于另一数据值的增量值。图10示出了流程图,该流程图示出了根据本发明的实施例的解压缩数据的方法。 首先,接收包括固定大小的多个数据分组的已压缩数据流。分析每个分组,并且,从在分组中的格式标识符来识别分组的格式,然后,准确确定哪些数据项目存储在数据分组中。数据项目的不同部分可存储在多个分组中,并且,组合这些以形成已压缩的数据项目。然后,确定它们与之相关的其他增量值或绝对值,然后,将其解压缩以生成原书数据项目。在所附权利要求中定义了本发明的各种进一步的方面和特征。可对此处所描述之前的实施例进行各种修改,只要不偏离本发明的范围即可。虽然此处已参照附图描述了发明的说明性实施例,但是,应当理解,发明并不限于那些准确的实施例,并且,对本领域技术人员而言,可实施各种变更和修改,只要不偏离由所附权利要求所定义的发明的范围和精神即可。
权利要求
1.一种用于接收包括多个数据项目并用于输出压缩数据流的数据压缩器,所述数据压缩器包括用于接收所述数据流的数据输入端;用于生成压缩增量值的增量值计算器,所述增量值计算器被配置为从所述数据输入端接收所述多个数据项目,并被配置为针对接收的数据项目中的至少一些数据项目来访问数据仓库,以确定所述接收的数据项目的相关数据项目是否存储在所述数据仓库中,以及响应于所述相关数据项目被存储了,从所述数据仓库获取所述相关数据项目,并且,从所述接收的数据项目和所述相关数据项目计算增量值并输出所述增量值;并且响应于所述相关数据项目未被存储在所述数据仓库中,从所述接收的数据项目和预定值计算增量值并输出所述增量值;所述数据仓库,用于存储在所述数据输入端接收的所述多个数据项目; 所述数据压缩器还包括数据仓库控制器,用于控制所述多个数项目在所述数据仓库中的存储,所述数据仓库控制器配置为响应于在所述数据输入端接收到数据项目而访问所述数据仓库,并确定是否给所述数据项目分配了存储位置,以及如果是,则在所述分配的存储位置中存储所述数据项目;并且如果否,则给所述数据项目分配存储位置,收回并丢弃在所述分配的存储位置中存储的任何数据,并在所述分配的存储位置中存储所述数据项目。
2.根据权利要求1所述的数据压缩器,其中,所述数据流中的所述多个数据项目每个被分类为属于多个数据对象中的一个数据对象,所述数据对象每个包括多个数据项目,所述数据项目存储在包括与之相关联的标识了所述数据对象的标识符的所述数据仓库中,其中所述数据仓库控制器配置为将所述数据仓库中的所述存储位置分配给所述数据对象。
3.根据权利要求2所述的数据压缩器,其中,所述数据项目和所述相关数据项目属于相同数据对象,使得响应于确定出所述相关数据项目存储在所述数据仓库中并获取所述相关数据项目用于计算所述增量值,所述数据控制器配置为将所述数据项目存储在分配给所述相同数据对象的所述存储位置中,并且收回并丢弃所述相关数据项目。
4.根据权利要求2所述的数据压缩器,其中,所述数据对象中的每一个包括多个数据部分,每个所述数据部分包括在所述数据流中的多个相邻数据项目,所述数据仓库控制器配置为将一个数据部分存储在分配给所述对应数据对象的所述存储位置中的一个存储位置中。
5.根据权利要求4所述的数据压缩器,其中,针对所述数据项目中的至少一个,所述相关数据项目包括在相同数据部分内的数据项目。
6.根据权利要求4所述的数据压缩器,其中,针对所述数据项目中的至少一个,所述相关数据项目包括来自属于相同数据对象的之前所接收的数据部分中的对应位置的数据项目。
7.根据权利要求6所述的数据压缩器,其中,所述数据仓库控制器配置为响应于接收到所述数据部分中的一个数据部分的第一数据项目,确定来自相同数据对象的数据部分是否存储在所述数据仓库的存储位置中使得所述存储位置被分配给所述数据对象,并且如果是,则利用所述增量值计算器从所述接收的数据部分中的至少一个数据项目和所述存储的数据部分中的至少一个相关数据项目计算增量值,然后从所述分配的存储位置收回所述存储的数据部分,并且将所述接收的数据部分存储在所述分配的存储位置中;并且如果否,则从所述存储位置中的一个存储位置收回并丢弃数据,将所述存储位置分配给所述数据对象,并将所述数据部分存储在所述分配的存储位置中。
8.根据权利要求2所述的数据压缩器,其中,属于相同数据对象并由所述标识符标识的所述数据项目被指定到相同目的地。
9.根据权利要求2所述的数据压缩器,其中,所述至少一个数据流包括至少一个图形数据流,所述数据对象包括用于在图形显示器中绘制贴图的图形命令列表,所述数据部分包括所述图形命令中的一个,并且,所述数据项目包括在所述图像命令内的字段。
10.根据权利要求1所述的数据压缩器,其中,所述数据仓库包括数据缓存器。
11.根据权利要求2所述的数据压缩器,其中,所述数据仓库包括数据缓存器,并且其中,所述数据缓存器的每行包括用于存储标识值的仓库,该标识值用于标识所述行被分配用以存储的所述数据对象。
12.根据权利要求11所述的数据压缩器,其中,所述数据对象中的每个包括多个数据部分,每个所述数据部分包括在所述数据流中的多个相邻数据项目,所述数据仓库控制器被配置为在分配给所述对应数据对象的所述存储位置中的一个存储位置中存储数据部分; 并且针对所述数据项目中的至少一个,所述相关数据项目包括来自属于相同数据对象的之前接收的数据部分中的对应位置的数据项目;并且所述数据对象包括用于在图形屏幕中绘制贴图的等级层的图形命令列表,其中,所述数据仓库控制器被配置为响应于接收到所述数据部分中的一个数据部分的第一数据项目, 确定来自相同数据对象的数据部分是否存储在所述数据仓库的存储位置中,并且,响应于确定出相同数据对象并未存储在所述数据仓库的存储位置中,识别来自相同贴图但是不同等级级别的数据对象,并且,利用所述增量值计算器所述接收的数据部分中的至少一个数据项目和所述存储的数据部分中的至少一个相关数据项目计算至少一个增量值,并且,与识别所述相关数据项目的源的指示一起输出所述增量值。
13.一种数据格式化器,包括输入端,用于接收数据压缩器输出的值;格式化电路,被配置为将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个,所述格式中的每一个通过在所述数据分组内的标识符比特来标识; 以及输出端,用于输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值,并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组。
14.根据权利要求13所述的数据格式化器,其中,所述接收的值包括至少一些通过增量压缩器压缩以形成增量值的数据,并且,所述多个格式包括第一格式,该第一格式包括指示值,所述指示值用于指示后续分组是否包括与预定值相关的增量值或者包括包含与之前接收的数据项目相关的数据的增量值,以及所述增量值中的至少一个增量值的至少一部分;第二格式,该第二格式包括所述增量值中的至少一个增量值的至少一部分;并且所述扩展格式用于将太大以至于难以存储的所述至少一个增量值的一部分存储在所述第二格式中。
15.根据权利要求14所述的数据格式化器,其中,用于所述第一格式的所述指示值提供了对所述增量值是关于之前接收的哪个数据项目而计算的指示。
16.根据权利要求13所述的数据格式化器,其中,所述格式中的每一个格式包括专用于存储所述指示值的指示比特和专用于存储至少一个数据字段的比特,所述接收的值中的每一个包括所述至少一个数据字段中的一个的数据。
17.根据权利要求13所述的数据格式化器,其中,所述数据格式化器被配置为在紧接其所扩展的所述数据分组之前输出具有所述扩展格式的数据分组。
18.—种包括根据权利要求1所述的数据压缩器的数据压缩系统,该数据压缩器与数据格式化器相耦合,所述数据格式化器包括输入端,用于接收数据压缩器输出的值;格式化电路,被配置为将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个,所述格式中的每一个通过在所述数据分组内的标识符比特来标识; 以及输出端,用于输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值,并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组;其中,所述接收的值包括至少一些通过增量压缩器压缩以形成增量值的数据,并且,所述多个格式包括第一格式,该第一格式包括指示值,所述指示值用于指示后续分组是否包括与预定值相关的增量值或者包括包含与之前接收的数据项目相关的数据的增量值,以及所述增量值中的至少一个增量值的至少一部分;第二格式,该第二格式包括所述增量值中的至少一个增量值的至少一部分;并且所述扩展格式用于将太大以至于难以存储的所述至少一个增量值的一部分存储在所述第二格式中。
19.一种数据解压缩器,包括输入端,用于接收包括固定大小的多个数据分组的已压缩数据流,每个数据分组存储多个值,所述数据分组具有多个格式中的一个,所述多个格式中的每一个通过在所述数据分组内的标识符比特所标识,所述多个格式中的一个包括用于存储太大以至于难以在相关的数据分组中存储的至少一个输出值的一部分的扩展格式;数据解格式化器,用于从所述标识符比特识别所述数据分组的所述格式,并且用于将存储在所述扩展分组中的至少一个扩展分组中的数据和存储在所述相关数据分组中的数据相组合;数据解压缩器,用于解压缩所述数据。
20.根据权利要求19所述的数据解压缩器,其中,至少一些所述数据分组包括通过增量压缩器压缩以形成增量值的数据,并且,所述多个格式包括第一格式,该第一格式包括指示值,所述指示值用于指示后续分组是否包括与预定值相关的增量值或者包括包含与之前接收的数据项目相关的数据的增量值,以及所述增量值中的至少一个增量值的至少一部分;第二格式,该第二格式包括所述增量值中的至少一个增量值的至少一部分;并且所述扩展格式用于将太大以至于难以存储的所述增量值的一部分存储在所述第二格式中;其中,所述格式中的每一个格式包括专用于存储所述指示值的比特和专用于存储至少一个数据字段的比特;所述数据解格式化器被配置为从所述第一格式、所述第二格式和所述扩展格式的分组提取增量值,并且所述数据解压缩器被配置为从所述所提取的增量值和所述预定值来形成原始数据项目。
21.—种压缩数据的方法,包括如下步骤 在数据输入端接收包括多个数据项目的数据流;访问数据仓库,并确定与所接收的数据项目相关的数据项目是否存储在所述数据仓库中,以及响应于存储了所述相关数据项目,从所述数据仓库获取所述相关数据项目,并且计算包括所述接收的数据项目和所述相关数据项目之间的差异的增量值,并输出所述增量值;响应于在所述数据仓库中未存储所述相关数据项目,计算包括所述接收的数据项目和预定值之间的差异的增量值,并输出所述增量值;访问所述数据仓库,以确定是否给所述接收的数据项目分配了存储位置,以及 如果否,则将在所述数据仓库中的存储位置分配给所述数据项目,并且收回并丢弃存储在所述存储位置的数据;将所述数据项目存储在所述分配的存储位置中。
22.根据权利要求21所述的压缩数据的方法,其中,在所述数据流中的所述多个数据项目中的每个被分类为属于多个数据对象中的一个数据对象,所述数据对象中的每个包括多个数据项目,所述数据仓库中的每个存储位置被分配给所述数据对象中的一个并且包括标识所述数据对象的标识符,使得响应于所述相关数据项目被存储在所述数据仓库中,所述数据项目被存储在被分配给所述相关数据项目的所述存储位置中,并且所述相关数据项目被收回并丢弃。
23.一种格式化已压缩数据的方法,包括 接收数据压缩器输出的值;将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个,所述格式中的每一个通过在所述数据分组内的标识符比特来标识;以及输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值,并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组。
24.一种压缩和格式化已压缩数据的方法,包括根据权利要求21所述的方法,其后是一种格式化已压缩数据的方法,所述格式化已压缩数据的方法包括接收数据压缩器输出的值;将所述输出值封装到固定大小的数据分组中,所述数据分组具有多个格式中的一个, 所述格式中的每一个通过在所述数据分组内的标识符比特来标识;以及输出所述数据分组;其中,所述多个格式中的一个包括用于通过存储太大以至于难以在数据分组中存储的输出值的一部分而扩展所述数据分组的容量的扩展格式,所述格式化电路响应于接收所述太大以至于难以在所述数据分组中存储的所述输出值,以在所述数据分组和至少一个具有所述扩展格式的进一步分组之间分割所述输出值,并且,在所述输出端输出所述数据分组和所述至少一个扩展数据分组。
25.一种解压缩已压缩数据的方法,包括接收包括固定大小的多个数据分组的已压缩数据流,每个数据分组存储多个值,所述数据分组具有多个格式中的一个,所述多个格式中的每一个通过在所述数据分组内的标识符比特所标识,所述多个格式中的一个包括用于存储太大以至于难以在相关的数据分组中存储的至少一个输出值的一部分的扩展格式;从所述标识符比特识别所述数据分组的所述格式;并且将存储在所述扩展分组中的至少一个扩展分组中的数据和存储在所述相关数据分组中的数据相组合;并且解压缩所述数据。
26.一种计算机程序产品,当运行在数据处理器上时,可操作用于控制所述数据处理器执行根据权利要求21所述的方法的步骤。
全文摘要
利用相对和绝对增量值的数据压缩和解压缩。数据压缩器包括接收数据流的数据输入端;生成已压缩数据值的增量值计算器,其接收多个数据项目,访问数据仓库以确定数据项目的相关数据项目是否存储在数据仓库中,响应于存储了,从数据仓库获取相关数据项目并从接收的数据项目和相关数据项目计算并输出增量值,响应于未存储,从接收的数据项目和预定值计算并输出增量值;数据仓库;控制数据项目存储的数据仓库控制器,其访问数据仓库,确定是否对数据项目分配了存储位置,如果是,则在该位置存储数据项目;如果否,则分配存储位置,收回并丢弃存储在该存储位置的数据,在分配的存储位置中存储数据项目。还公开了用于解压缩已压缩数据的数据解压缩器。
文档编号H04N7/26GK102404564SQ20111026495
公开日2012年4月4日 申请日期2011年9月5日 优先权日2010年9月3日
发明者乔·多米尼克·迈克尔·塔帕利, 埃万德·利兰, 斯恩·特里斯拉姆·艾利斯 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1