分割游程长度编码方法和设备的制作方法

文档序号:6500613阅读:313来源:国知局
专利名称:分割游程长度编码方法和设备的制作方法
技术领域
0001本发明涉及无损数据压缩和编码。特别地,本发明的实施例涉及基于对数据流进行编码的压缩,其中基于数据流的连续值之间的差对数据流进行编码。
背景0002打印装置包含多种输出显示装置。诸如激光打印机、喷墨打印机、绘图仪、图像设定器与其它打印设备的这些输出显示装置在纸或类似材料的表面上产生图像或视觉表示。许多打印装置通过相应于包含在位图(bitmap)或像素图(pixelmap)中的信息的打印点而在表面上形成图像。例如,光栅打印装置通过根据相应的位图打印以行和列布置的点而在表面上形成图像。
0003在计算机系统上运行的应用程序可以生成多个需要被一起打印的页面或图像。这些集合在一起的图像和页面组通常被称为作业(job)。常常可能在比可以打印每个任务更短的一段时间中请求多个作业。这些作业常常在完成先前排定的作业之后被排队等候打印。作业可以被发送到中间存储装置,在作业被发送到打印机之前将它们存储在中间存储装置中。
0004常常以页面描述语言(PDL)来描述作业中的页面,页面描述语言是用于描述将由输出装置显示的对象的高级语言。这些语言通常是允许精确表示页面的已解释语言。表示作业或作业组分(诸如页面、平面和带)的数据流或文件常常具有很大的尺寸。这导致由于其尺寸的低速数据传输和低速数据处理。
附图的简要描述0005通过举例的方式借助附图对本发明的实施例进行说明,其中相同的附图标记指示类似的元件,并且附图不是限制性的。应当注意,在本公开内容中,当提到“一个”实施例时不一定是指相同的实施例,并且这种提法意味着至少一个。
0006

图1A是示意性的解码数据路径的图示。
0007图1B是示意性的编码数据路径的图示。
0008图2A是编码处理的流程图。
0009图2B是解码处理的流程图。
0010图3A是示意性的分类的图示。
0011图3B是示意性的编码的图示。
0012图3C是示意性的编码的第二模式的图示。
详细描述0013图1A和1B是示意性的编码和解码数据路径的图。图1A说明了解码数据路径,其中从存储装置117上的文件或类似的数据结构中获取编码的数据并将其放置在存储器119中。存储装置117可以是硬盘、可移动的介质或类似的存储装置。存储器119可以是同步动态随机存取存储器(SDRAM)或类似的装置。解码处理器121从存储器119中取出编码的数据。在一个实施例中,解码处理器121可以是运行解码应用程序的软件实现的通用处理器(GPP)。在另一实施例中,解码处理器121是专用集成电路(ASIC)。解码处理器121包括检出器101和解码器103。检出器101对来自存储器119的编码的数据字进行解析,并向解码器103发送单独的代码。检出器101可以是电路或由解码处理器121执行的软件。解码器103可以是电路或由解码处理器121执行的软件。解码器103将所述代码转换成光栅数据流或类似格式的数据流,该数据流被发送到输出接口105。输出接口105准备数据并将数据发送到诸如应用程序、存储装置或类似目的地的输出目的地。在一个实施例中,输出接口105可以是打印控制器接口,其将进入的光栅数据流转换成一组驱动打印机械(print engine)的信号。
0014图1B说明编码数据路径,其中从例如扫描机械或类似装置的输入源中接收作为数据流的数据。该数据流通过诸如通用串行总线(USB)或类似介质的介质被输入接口129所接收。输入接口129向编码处理器127发送作为一组字节或字的数据。在一个实施例中,编码处理器127可以是执行编码应用程序的软件实现的GPP。在另一实施例中,编码处理器127是ASIC。编码处理器127包括编码器113和打包器115。编码器113可以是使用下面描述的分割游程长度编码(SRLE)对从输入接口129接收的字节进行编码的电路或软件。然后编码的数据被发送到打包器115。打包器115可以是电路或软件,其接收可变大小的代码,并通过将代码填塞到字中以及将代码分解在多个字上来形成字。然后将打包的代码的字存储在存储器125中,并随后将其发送到存储装置117。存储器125可以是SDRAM或类似的装置。存储装置117可以是硬盘、可移动介质或类似的存储装置。
0015多个解码和解码处理器(121,127)可以各自被用在并行数据路径中。在一个实施例中,独立的数据路径可以被用来处理带、页面、或平面。例如,独立的并行数据路径可以被用于红、绿和蓝平面(RGB)。
0016图2A是用于通过编码处理器对数据流进行编码的SRLE编码处理的流程图。在一个实施例中,对每一个进入的字节或数据单位进行分类、分组,并将其编码为字面值(Literal)代码、近匹配(NearMatch)代码、或匹配(Match)代码。近匹配代码可以被进一步划分成近匹配重复代码和近匹配单一代码。
0017字面值代码被用来对数据流的值序列中的单一初始值和偏离先前值超过已定义范围的各单一值进行编码。例如,如果范围被定义为-16到+15或近似于15或16的绝对值差,则如果值50(十进制)跟在值20的后面,那么值50将被编码为字面值。然而,如果值50跟在值45的后面,则值50将不被编码为字面值,这是因为所述差5落入-16到+15的范围内。
0018近匹配代码被用来对数据流序列中的在已定义范围内偏离先前值的值进行编码。近匹配代码包括游程长度字段,以便指示在数据流中出现的连续相同值的数量。在一个实施例中,独立的近匹配单一代码具有比一般的近匹配代码更小的尺寸,并且可以在压缩方面被用作最佳化。近匹配单一编码不具有游程长度字段,这使其比可以具有任意大小的游程长度字段的一般的近匹配代码更小。在另一实施例中,不使用近匹配单一编码,并且近匹配重复代码可以对长度为1的游程长度进行编码。在一个实施例中,游程长度字段的大小是10比特。
0019匹配代码被用来对数据流序列中的与位于其之前的值相同的值进行编码。例如,如果字面值代码后面的值完全相同,那么就使用匹配代码。匹配代码包括游程长度字段,以便指示在数据流中出现的连续相同值的数量。在一个实施例中,游程长度是10比特。游程长度字段的大小可以被改变,以处理更长或更短的游程。
0020在一个实施例中,通过对一组状态变量进行初始化,编码处理开始(块201)。状态变量可以包括跟踪当前被处理的游程类型的游程类型变量、跟踪当前游程的长度(即,相同连续值的数量)的游程长度变量、以及跟踪之前被处理的先前值的“旧值”。在这个上下文中,游程是可以以单一代码进行编码的一组值。游程类型相应于可能的编码类型(例如,近匹配、匹配或字面值)。默认的旧值可以是0或其它任何已知的值。默认的游程长度是0。
0021通过在数据流中顺序地获取下一个值或者“新值”(例如,字节),该处理继续(块203)。数据流可以包含8比特每像素的值(bpp)。在另一实施例中,编码的基本单位可以是字或一组任意长度的比特。然后可以确定是否已到达文件末尾(块205)。如果已到达文件末尾,那么基于指定的游程类型和所计算的游程长度对任何未编码的游程进行编码(块207)。如果检测到文件末尾,则可以生成附加的文件末尾代码(块208)。
0022如果未检测到文件末尾,那么检查新值,以确定其是否和所存储的旧值相同(块209)。如果新值和旧值相同,那么游程长度增加1(块211)。在对数据流中的每一值进行处理时,游程长度变量充当计数(tally),以跟踪游程的长度。在游程长度计数已被增加之后,然后检查游程类型,以确定是否已经为当前游程指定了近匹配(块213)。例如,如果值序列0×20 0×26 0×26(十六进制)出现,则第二值0×26开始一个近匹配的游程。当对第三值0×26进行处理时,游程长度增加1。在检测到值的变化或者游程长度超出固定的编码界限之前,不对游程进行编码。
0023在一个实施例中,如果已指定近匹配,那么对游程长度进行检查以确定是否已达到编码界限(块215)。如果游程长度没超出其编码界限,那么就获取下一个值以用于处理(块203)。在一个实施例中,检查游程长度以确定其是否超出4。如果游程长度已超出4,那么该游程被编码为近匹配重复代码(块217)。然后对于任何也是相同的后续值将游程类型指定为匹配(块219)。如果序列中的值与先前值精确匹配,则指定匹配游程,其中该先前值被编码为字面值或者(在游程长度有限的情况下)被编码为近匹配重复。然后将游程长度复位到0(块220)。然后可以获取下一个值以用于处理(块203)。对于游程长度4的检查和对于近匹配重复代码的编码基于只具有2比特以用于对游程长度进行编码的近匹配重复代码。在另一实施例中,近匹配重复代码可以具有更大或更小的比特长度,以允许编码不同大小的游程长度。对游程长度的检查将被相应地调整到用于游程长度字段的比特数。在另一个实施例中,近匹配重复代码可以被构造成处理任意大小的游程长度。
0024然后,在新值等于旧值(块209)并且游程类型不是近匹配(块213)的情况下,指定匹配的游程类型(块221)。在一个实施例中,如果已指定匹配,那么对游程长度进行检查以确定是否已达到编码界限(块223)。如果游程长度已超出其编码界限,那么获取下一个值以用于处理(块203)。在一个实施例中,检查游程长度以确定其是否超出1027。如果游程长度超出1027,那么将该游程编码为匹配代码(块225)。然后将游程长度复位到0(块227)。然后可以获取下一个值以用于处理(块203)。对于游程长度1027的检查和对于匹配代码的编码基于只具有10比特以用于对游程长度进行编码的匹配代码。在另一实施例中,匹配代码可以具有更大或更小的比特长度,以允许对不同大小的游程长度进行编码。对游程长度的检查可以被相应地调整到游程长度字段的比特数。在进一步的实施例中,可以将匹配代码构造成处理任意大小的游程长度。
0025在新值不等于旧值的情况下(块209),进行检查以确定游程长度是否大于0(块229)。大于0的游程长度指示一个未编码的游程已结束,这是因为已出现值的变化。对游程类型进行检查以确定该游程是否是近匹配游程(块231)。如果该游程不是近匹配游程,那么将其编码为匹配代码(块239)。如果该游程是近匹配,那么进行检查以确定游程长度是否等于1(块233)。如果游程长度等于1,那么该游程被编码为近匹配单一代码(块235)。如果游程长度不等于1,那么将该游程编码为近匹配重复代码(块237)。在另一实施例中,可以不使用近匹配单一代码,并且不是匹配的所有游程都被编码为近匹配代码。不管对游程的编码如何(匹配、近匹配重复或近匹配单一),处理继续,这是因为对游程的编码不包括新值。新值通过偏离旧值来指示游程结束。
0026在新值不等于旧值的情况下(块209),将新值与旧值相比较,以确定二者的差是否落入预定义范围内(块241)。在一个实施例中,通过使用8bpp值,可以使用-16到+15的范围。这个范围确定新字节中的低阶比特是否已从先前字节中的低阶比特发生变化。在流的第一值被分析的情况中,可以使用默认的已知旧值。例如,该默认值可以是0。如果该差在范围之外,那么该值被编码为字面值(块243),并且游程类型被指定为字面值(块245)。例如,数据流的初始值可以是0×20。如果默认旧值是0,那么值0×20被编码为字面值。游程长度被复位到0,这是因为在当前流程中上一个获取的值已被编码,并且要获取的下一个值将开始下一游程(块247)。
0027然而,如果所述差在预定义范围内,那么游程类型被指定为近匹配(块251)。将游程指定为近匹配是标识这种情况的分类当前被分析的值序列将被编码为近匹配,并且在编码可以完成之前必须确定游程的长度。近匹配的游程长度被设置为1,这是因为当前游程包括上一个获取的值(块253)。在任一种情况中(编码为字面值或指定为近匹配),在下一个值被获取(块203)之前,新值被保存为旧值(块249)并且对数据流的处理继续。
0028在一个实施例中,图2A的流程图中的编码方案是用来对数据流进行编码的第一编码模式。第一编码处理对于高分辨率原始图像数据是最优的。第一编码处理可以是默认处理。使用这个第一编码模式,可以使用图2B的流程图所示的简单解码处理对所编码的数据进行解码。通过获得下一个要被解码的代码,解码处理开始(块271),并且解码处理生成从该代码导出的二进制值(块273)。字面值包含精确的二进制值。近匹配代码指示要被生成的二进制值和已生成的先前二进制值之间的差。匹配代码指示要被生成的二进制值与先前的二进制值相同。解码处理通过检查正被评估的代码的游程长度来确定该游程是否完成(块275)。如果该游程未完成,则解码处理减少游程长度(块281)并生成下一个值(块273)。当该游程完成时,该处理检查文件代码的末尾(块277)。如果没有到达文件的末尾,那么获取要被评估的下一个代码(块271)。如果找到文件的末尾,那么解码处理完成(块279)。
0029在一个实施例中,可以与关于图2A在上面描述的第一编码处理相结合地利用第二解码处理。第二编码处理可以用于已知包含许多长的值游程的数据流。例如,第二编码处理可以用于包含许多长的相同像素游程的图像。在一个实施例中,第二编码处理和已被过滤的数据一起使用。第二处理连同紧随其后的相同值的数量的游程长度一起对像素、字节或数据单位的完全值进行编码。第一编码方法(即,SRLE编码)和第二编码方法包括指示切换到其它模式的代码。这使编码器能依据数据类型或文档的已知属性、使用上述两种编码处理来对文档进行编码。在第一处理和第二处理之间的切换可以由编码器按照需要在扫描线内、从扫描线到扫描线或从带到带自适应地完成。这实现改进的压缩比,同时保持图像质量。切换代码允许解码器容易地检测到编码处理中的切换,以便对文件或数据流进行快速解码。在另一实施例中,可以利用其它编码处理以作为第二编码方法。其它的第二编码方法包括TIFF、JPEG和类似的算法。
0030可以和被分割成平面(例如,青、黄、品红和黑平面)、带或类似结构的文档一起使用第一和第二编码系统。可以与面向对象的文档和文件一起使用第一和第二编码系统,其中,主要对由文件或这些文件的解释所关联或封装的数据进行编码。所述两种编码处理都是无损的。
0031第一编码系统可以达到513.5∶1和0。8∶1之间的压缩比(即,在压缩文件和原始文件之间的513.5∶1的压缩比)。具有600点每英寸(dpi)的图片文件的压缩比平均在2到6比1之间。包含文本的文件的压缩比平均高于30比1。包含艺术线条的文件的压缩比平均高于10比1。第二编码系统可以达到391.2∶1和0.73∶1之间的压缩比。具有600dpi的图片文件的压缩比平均在3到10比1之间。包含文本的文件的压缩比平均高于30比1。包含艺术线条的文件的压缩比平均高于30比1。
0032图3A是示意性的编码和数据流。数据流301由一系列的连续字节组成。所述字节以十六进制编写。第一字节303是0×20,并且最后的字节305是0×62。各字节被顺序处理。第一字节303被编码为字面值307。在一个实施例中,没有先前值,并且第一字节303必须被分类为字面值。在另一实施例中,编码处理器利用已知的默认起始值,并且关于该默认值对第一实际值进行分类。
0033数据流中下两个字节309都是0×26。第一个被分类为近匹配,这是因为其与先前值0×20的差值落入-16到+15的预定范围内(即,6)。下一个值也是0×26。这个值与先前值分组在一起,并且分类被最终定为具有2字节的游程的近匹配311。下一个字节313被分类为近匹配单一315,这是因为随后的字节不具有匹配值。字节317具有值0×57。这个字节与先前字节的差落在已定义范围之外。字节317被编码为字面值。随后的具有值0×57的字节组319被编码为具有游程8的匹配。在文件末尾处生成专用的文件末尾代码321。
0034图3B是数据流301的示意性的编码。这个编码利用表I的操作码和格式。本领域技术人员应当理解,可以使用其它代码将数据分类成字面值、近匹配、匹配和专用逸出码的基础分类。所有的值都是二进制的。操作码标识数据分类的类型。与操作码相关联的游程长度字段标识该类别的连续值的数量。值字段是编码的序列的实际值或与先前编码的差值。用于字面值的字段长度基于对8比特每像素数据进行的编码。该字段大小可以被调整,以反映要被编码的数据的每像素比特的大小。近匹配操作码的字段大小基于标识该数据类别的范围。如果利用更宽或更窄的范围,可以调整字段长度。
表I0035图3C是对数据流进行编码的示意性第二模式的图示。第二编码模式对于具有相等值的长游程的数据是最优的。数据流351被解析为一组值和游程长度对353。每一对的所述值是序列的值,并且游程长度是该值的连续出现的数量。数据流351的第一值361是0×00。有8个匹配的连续值。示意性的编码流355是值和游程长度对353的二进制表示。所述编码是基于示意性的编码方案,其中前8个比特表示编码的值,并且接下来的3个比特表示游程的长度,或指示在随后的10比特中对长流程进行编码(即,二进制值0b000-0b110编码1到7的游程长度,同时二进制值0b111指示接下来的10比特编码长度为8到1027的游程)。本领域普通技术人员应当理解,可以用其它类似的编码方案来表示游程长度。例如可以用多于3或10个比特来指示游程,或者可以使用单一游程字段长度。第二模式也可以具有保留的值以指示文件的末尾(例如,二进制值xxxxxxxx 111 11111111100)或者编码模式的切换(例如,二进制值xxxxxxxx 111 1111111111)。
0036在前述的说明书中,已经参考其特定实施例对本发明进行了描述。然而很明显的是,在不脱离所附权利要求书中阐述的本发明的精神和范围的情况下,另外可以进行各种修改和变化。因此,说明书和附图应被看作是说明性而不是限制性的。
权利要求
1.一种方法,包括将一组数据的值与先前值进行比较;如果其差在一个范围之外,就用第一代码对该组数据进行编码;如果该组数据的值不匹配该先前值但是在该范围内,就用第二代码对该组数据进行编码;以及如果第一组数据的值不匹配该先前值,就用第三代码对该组数据进行编码。
2.如权利要求1所述的方法,其中第一代码包括该组数据的实际值。
3.如权利要求1所述的方法,其中第二代码包括所述差和相同连续值的数量。
4.如权利要求1所述的方法,其中第三代码指示匹配和相同连续值的数量。
5.如权利要求1所述的方法,其中利用第一代码、第二代码和第三代码的其中之一对第一组数据进行的编码是无损的。
6.如权利要求1所述的方法,进一步包括如果第一组数据的值在第一范围内且随后的值不匹配第一组数据的值,就用第四代码对该组数据进行编码。
7.如权利要求1所述的方法,其中所述范围被最优化,以对包括8比特像素的该组数据进行编码。
8.如权利要求1所述的方法,进一步包括切换到替换的编码模式。
9.一种设备,包括对包括第一值和第二值的数据流进行编码的处理器,该处理器将数据的第一值与第二值进行比较以确定其差,如果该差是0,则该处理器用第一代码对第二值进行编码,如果该差在一个范围内,则该处理器用第二代码对第二值进行编码,而如果该差在该范围之外,则该处理器用第三代码对第二值进行编码。
10.如权利要求9所述的设备,进一步包括耦合到该处理器的第一装置,其用于将从该处理器接收的代码的数据流分割成一组字。
11.如权利要求9所述的设备,其中所述处理器是专用集成电路。
12.如权利要求9所述的设备,进一步包括存储该数据流的存储器装置。
13.一种设备,包括对数据流进行解码的处理器,该处理器从包括一组对该数据流进行编码的操作码的该数据流中生成二进制输出,其中第一操作码标识字面值,第二操作码标识一组匹配值,第三操作码标识一组匹配值和差值。
14.如权利要求12所述的设备,进一步包括耦合到该处理器的第一装置,其用于对来自该数据流的字进行解析以输出到该处理器。
15.如权利要求12所述的设备,其中所述处理器是通用处理器。
16.如权利要求13所述的设备,进一步包括存储该数据流的存储器装置。
17.一种设备,包括用于将一组数据的值与先前值进行比较的装置;如果其差在一个范围之外、用于用第一代码对该组数据进行编码的装置;如果该组数据的值不匹配该先前值但是在该范围内、用于用第二代码对该组数据进行编码的装置;以及如果该组数据的值不匹配该先前值、用于用第三代码对该组数据进行编码的装置。
18.如权利要求17所述的设备,进一步包括如果该值在第一范围内并且随后的值不匹配该组数据的值、用于用第四代码对该组数据进行编码的装置。
19.如权利要求17所述的设备,其中所述范围被最优化,以对包括8比特像素的该组数据进行编码。
20.如权利要求17所述的设备,进一步包括对于具有相同像素的长游程的数据流最优化的、用于切换编码模式的装置。
21.一种机器可该介质,具有存储在其中的一组指令,当执行该组指令时,该组指令导致机器执行一组操作,该组操作包括将一组数据的值与先前值进行比较;如果其差在一个范围之外,就用第一代码对该组数据进行编码;如果该组数据的值不匹配该先前值但是在该范围内,就用第二代码对该组数据进行编码;以及如果第一组数据的值不匹配该先前值,就用第三代码对该组数据进行编码。
22.如权利要求21所述的机器可读介质,具有存储在其中的另外的指令,当执行所述另外的指令时,所述另外的指令导致机器执行一组操作,该组操作进一步包括如果第一组数据的值在第一范围内并且随后的值不匹配第一组数据的值,就用第四代码对该组数据进行编码。
23.如权利要求21所述的机器可读介质,具有存储在其中的另外的指令,当执行所述另外的指令时,所述另外的指令导致机器执行一组操作,该组操作进一步包括切换到替换的编码模式。
全文摘要
本发明的实施例包括一种用于对数据流进行无损编码和压缩的系统和方法。该数据流可以是图像、文本或二者的组合。可以从计算机应用程序或外设中接收该数据流。所述编码通过将数据流的连续值进行比较并基于连续数据值之间的差对数据进行编码来对数据流进行压缩。
文档编号G06FGK1902826SQ200480034816
公开日2007年1月24日 申请日期2004年9月24日 优先权日2003年9月25日
发明者M·R·利普曼, D·苏, R·B·罗宾逊 申请人:皮尔雷斯系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1