專利名稱:分割游程長度編碼方法和設備的制作方法
技術領域:
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·羅賓遜 申請人:皮爾雷斯系統公司