CN1848692A - 编码设备、解码设备、编码方法、解码方法和程序 - Google Patents
编码设备、解码设备、编码方法、解码方法和程序 Download PDFInfo
- Publication number
- CN1848692A CN1848692A CNA2006100754409A CN200610075440A CN1848692A CN 1848692 A CN1848692 A CN 1848692A CN A2006100754409 A CNA2006100754409 A CN A2006100754409A CN 200610075440 A CN200610075440 A CN 200610075440A CN 1848692 A CN1848692 A CN 1848692A
- Authority
- CN
- China
- Prior art keywords
- code
- matching length
- internal state
- string
- sub
- 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.)
- Granted
Links
Images
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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
在编码处理中,动态地改变匹配长度和匹配长度代码之间的关系,以便独立地将可由匹配长度代码表达的匹配长度从一个值转换到另一个值。通过使用数据缓冲器中的滑动窗口作为词典,字符串搜索部分搜索与输入数据中的子字符串相匹配的状态。匹配长度扩展表用于存储作为依赖于存储在内部状态保存部分中的内部状态的关系的、匹配长度和匹配长度代码之间的关系。匹配长度编码部分参考匹配长度扩展表,以便动态地确定作为依赖于内部状态的关系的、匹配长度和匹配长度代码之间的关系。字符串编码部分基于滑动窗口中的匹配子字符串的相对位置、以及与该匹配子字符串的匹配长度相关联的匹配长度代码,而生成代码串。
Description
相关申请的交叉引用
本发明包含与2005年4月14日向日本专利局提交的日本专利申请JP2005-117604相关的主题,在此将其全文引作参考。
技术领域
本发明涉及一种基于LZSS(Lempel-Ziv-Storer-Szymanski)代码的编码设备和解码设备。更具体地说,本发明涉及一种动态地改变编码处理中的匹配长度和其代码之间的关系的编码设备和解码设备,并且涉及一种由编码设备采用的编码方法、由解码设备采用的解码方法、以及使计算机执行该编码方法和解码方法的程序。
背景技术
LZSS代码是用于基于词典的编码处理的代码之一。基于LZSS代码的编码处理包括在由Tomohiko Uematsu著作、并且在1994年10月15日由CQ出版社出版的“Introduction to Algorithms for Compressing Text Data”的第131到138页(非专利文献1)中公开的可逆数据压缩处理。在基于LZSS代码的编码处理中,将要编码的输入数据分隔(delimited)成多个码元,每个码元具有M位的固定长度。这样的码元的示例是字符。事实上,在下面的描述中,将这样的码元统一说明成字符。这样,以字符作为最小单元。将数据理解成长字符串。将包括在作为字符序列的字符串内的部分作为子字符串来处理。将整个字符串分解成多个子字符串,并且将CODE代码分配给每个子字符串。存在两种CODE代码被分配给每个子字符串。其中一种代码是PTR代码,其是作为通过参考已编码数据Qenc中的匹配子字符串而执行的编码处理的结果而获得的。另一种代码是RAW代码,其是原始字符本身。另外,提供了具有1位长度的FLG子代码,作为用于表明代码类型是PTR还是RAW的标志。FLG子代码和CODE代码形成一对代码。这对代码是作为对子字符串进行编码处理的结果而获得的代码。
顺序地从输入数据的第一字符开始确认子字符串的长度,以便逐渐地推进分解处理,以使子字符串相互分离。作为分解处理的结果而获得的子字符串不包括重叠部分。以这样的方式执行使子字符串相互分离的分解处理,即,当将一个子字符串与剩余的子字符串相分离时,紧接在所分离的子字符串的尾字符之后的字符变成所分离的子字符串之后的子字符串的头字符。然后,顺序地对在分解处理中相互分离的子字符串进行编码。在分解处理之前,仅仅确认子字符串的头字符H,但是长度是不确定的。然而,在根据下面的过程将输入数据分解成多个子字符串之后,确定每个子字符串的长度。
首先,在已编码数据Qenc中搜索与在分解处理中要被分离的子字符串s的头字符H相匹配的字符。已编码数据Qenc是等于从输入数据的头字符开始、并且以已编码子字符串的尾字符结束的输入数据的字符串。预先确定的范围Qewin以相对于在分解处理中要被分离的子字符串s的位置已被设置在已编码数据Qenc中。已编码数据Qenc可以仅仅与范围Qewin的字符相比较。范围Qewin也被称为滑动窗口、滑动词典或其它名称。
当在已编码数据Qenc的范围Qewin中搜索每个与在分解处理中要被分离的子字符串s的头字符H相匹配的字符、并且在搜索处理中找到至少一个字符时,将各自具有所找到的字符作为其头字符的所有子字符串都各自作为与子字符串s比较的对象。通过逐渐增加子字符串s的长度执行比较,以便搜索具有最大长度的匹配子字符串。然后,将在范围Qewin中具有最大长度的匹配子字符串称作最长的匹配子字符串mstr。最长的匹配子字符串mstr的长度被称为mlen。范围Qewin中的匹配子字符串mstr的头字符通过其相对于头字符H的位置来识别。如果以NP位表示该位置,则范围Qewin可以用于存储多达2NP个字符,其中记号2NP表示等于2的NP次幂的值。也就是说,N是可以存储在范围Qewin中的字符数的上限。
在对LZSS代码进行编码的处理中,将最大匹配长度mlen与预定阈值PTH进行比较。首先,让我们考虑最大匹配长度mlen大于预定阈值PTH的情况。在这种情况下,如果最大匹配长度mlen不大于可以由匹配长度代码表达的最大长度lmax,则将最大匹配长度mlen设置在匹配长度len中。另一方面,如果最大匹配长度mlen大于最大长度lmax,则将最大长度lmax设置在匹配长度len中。如果以这种方式设置匹配长度len,则在分解处理中,分离具有匹配长度len并且以头字符H作为其头字符的子字符串s,并且对其进行编码,从而生成作为PTR代码的(NP+NC)位,其是代码p和代码c的组合。详细地说,包括NP位的代码p是表示以下数目的代码,该数目表示范围Qewin中的最长匹配子字符串mstr的头字符mH的位置mpos。另一方面,包括NC位的代码c是表示匹配长度len的代码。在这种情况下,PTR代码的FLG子代码的值是0。
如图43A所示,让我们假定阈值PTH是2,并且在搜索处理中检测到数据缓冲器110的滑动窗口111中的三个字符的子串‘fgh’,作为与紧接在滑动窗口111之后的子字符串相匹配的子字符串。在这种情况下,被定义为与紧接在滑动窗口111之后的子字符串相匹配的子字符串的长度的匹配长度是三个字符。滑动窗口111中的三个字符的子串‘fgh’的头字符是字符‘f’,并且滑动窗口111中的头字符的相对位置是四的位置。这样,PTR代码是(4,3)。将FLG子代码设为0,从而表明作为编码处理的结果而获得的代码是PTR代码。
另一方面,如果最大匹配长度mlen不大于阈值PTH,或者没有与已编码数据相匹配的子字符串,则仅仅子字符串的头字符H受到分解处理,并且头字符H用作按照原样具有M位长度的RAW代码。在这种情况下,将FLG子代码设为1,从而表明作为编码处理的结果而获得的代码是RAW代码。
例如,如图43B所示,没有子字符串包括在滑动窗口111内,作为与紧接在滑动窗口111之后的头字符‘k’相匹配的子字符串。在这种情况下,输出头字符‘k’作为RAW代码,并且将FLG子代码设为一,从而表明作为编码处理结果而获得的代码是RAW代码。
另一方面,在LZSS代码解码处理中,对与按照编码处理中生成的代码相同的次序从第一个开始并且在最后一个结束的输入代码相对应的所有子字符串进行解码。将作为解码处理结果而获得的子字符串作为附加Qdec链接到已解码数据Qdec的尾部。以这种方式,作为逐渐变长的字符串,获得通过解码处理生成的原始数据。非常类似于作为编码处理结果而获得的数据Qenc,通过使用表明相对于用作解码处理的解码对象的子字符串s的位置的数,引用作为解码处理结果而获得的数据Qdec。输入代码中的FLG子代码0表明输入代码的CODE代码是PTR代码。另一方面,输入代码中的FLG子代码1表明输入代码的CODE代码是RAW代码。在RAW代码的情况下,将仅仅包括一个字符的字符串链接到已解码数据Qdec的尾部,作为CODE代码。另一方面,在PTR代码的情况下,对代码p进行解码,以生成匹配子字符串的头字符的位置,并且对代码c进行解码,以生成子字符串的匹配长度。使用该位置和匹配长度从已解码数据Qdec确定子字符串。然后,从头字符开始逐字符地拷贝所确定的子字符串,并且将拷贝处理的结果链接到已解码数据Qdec。以这种方式,获得子字符串,作为对CODE代码进行解码的处理的结果。通过如上所述从头字符开始逐字符地拷贝所确定的子字符串,并且将拷贝处理的结果链接到已解码数据Qdec,即使所确定的子字符串部分地或全部地与正被解码的字符串重叠,也可以正确地执行拷贝处理。匹配子字符串的匹配长度从表达式(PTH+1)的值变成表达式(2的NC次幂+PTH)的值,其中记号NC代表表示匹配长度代码c的位数。
发明内容
如上所述,LZSS代码的PTR代码是这样的代码,其包括表示数据缓冲器中的匹配子字符串的头字符的位置mpos的数目、以及匹配子字符串的长度len。让我们假定,我们考虑这样的情况,其中长度len基于一一对应的关系与具有固定位计数NC的代码相关联。在这种情况下,如果位计数NC小,则仅仅很少的有限长度len可以与具有固定位计数NC的代码相关联。另一方面,如果位计数NC大,则很多长度len可以与具有固定位计数NC的代码相关联。然而,使用具有小的可能位计数NC的代码来表示信息,与使用具有大的位计数NC的代码来表示同一信息相比,提供了更高的压缩效率。
正如公知的那样,较好的是提供具有大约8,000个字符的大小的搜索范围Qewin作为已编码数据的搜索范围。对于更多的有关搜索范围的信息,建议读者参考诸如较早描述的非专利文献1的文献。从搜索范围Qewin的大小确定上述位置mpos的位计数NP。例如,如果搜索范围Qewin的大小是4,092个字符,则可以使用12位的位计数NP来表达上述位置mpos。然而,要被分解成诸如1,000个字符的大长度的子字符串不常常出现。相反地,将子字符串分解成小长度的频率较高。因此,在很多情况下,将长度len的位计数设为小于位置mpos的位计数NP的值。这样,在具有4,092个字符的大小的搜索范围Qewin情况下,让我们假定找到具有1,000个字符的长度的子字符串。即使在这种情况下,也有可能分解子字符串直至具有等于最大值的长度的子字符串,其中该最大值作为匹配长度的最大值而由长度len的位计数限制。例如,让我们假定匹配长度代码的位计数NC是4,并且阈值PTH是2。在这种情况下,可以由匹配长度代码表达16个不同长度,即,3到18的长度。这样,即使匹配长度的最大值是1,000个字符,但是最终,也要通过将字符串分解成各自具有不超过18个字符的长度的子字符串,而对字符串进行编码。
作为摆脱该浪费的方法,将表示长度扩展的转义码(escape code)分配给16个匹配长度代码中的一个,并且在对该转义码进行解码的处理之后,还取出另一固定位计数。以这种方式,有可能采用这样一种想得到的方法,其使用具有分级增加的可变位计数的代码。即使使用该方法,但是为了执行扩展操作以产生长的字符串,例如具有一定长度或1,000个字符的串,该代码也必须受到使用若干转义码的若干级扩展操作。这样,该方法引发了这样的问题,即,也不能分配短代码并且处理变得复杂。
本发明人已设计了一种设备/方法,其能够在编码处理中动态地改变匹配长度和匹配长度的代码之间的关系,并且独立地将可由匹配长度的代码表达的匹配长度从一个值转换到另一个值。
根据本发明的实施例,提供了一种编码设备,其特征在于该编码设备包括:
码元串搜索装置,用于在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作输入数据的编码对象的子码元串相匹配的状态;
内部状态保存装置,用于保存预定的内部状态;
匹配长度编码装置,用于根据由内部状态保存装置保存的内部状态,在分配处理中将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理的结果而由码元串搜索装置检测到的匹配状态中的子码元串的长度,并然后根据该匹配长度,更新由内部状态保存装置保存的内部状态;以及
码元串编码装置,用于基于作为搜索处理结果而由码元串搜索装置检测到的匹配状态中的子码元串的位置,并且基于由匹配长度编码装置分配的匹配长度代码,而对子码元串进行编码。
因此,根据本发明的实施例所提供的编码设备实现了这样的功能:即,基于根据内部状态分配给匹配长度的匹配长度代码而对子码元串进行编码。
在本发明的实施例的编码设备中,匹配长度编码装置能够执行以下控制:
如果匹配长度代码小于预定阈值,则将由内部状态保存装置保存的内部状态重置为最低级;
如果匹配长度代码等于最大值,则驱动由内部状态保存装置保存的内部状态,以便转变到更高级;以及
如果匹配长度代码至少等于预定阈值但小于最大值,则驱动由内部状态保存装置保存的内部状态,以便转变到更低级。
因此,根据本发明的实施例所提供的编码设备实现了这样的功能:即,根据子码元串的匹配状态,从一个内部状态转变到另一个内部状态。
在根据本发明的实施例所提供的编码设备中,匹配长度编码装置能够:
如果匹配长度代码小于预定阈值,则在分配处理中,将为匹配长度确定的代码作为匹配长度代码分配给该匹配长度,而与由内部状态保存装置保存的内部状态无关;以及
如果匹配长度代码等于或大于预定阈值,则在分配处理中,依赖于由内部状态保存装置保存的内部状态并且依赖于匹配长度,而将为该匹配长度确定的代码作为匹配长度代码分配给该匹配长度。
因此,根据本发明的实施例所提供的编码设备实现了这样的功能:即,根据匹配长度代码和阈值之间的关系,判断在确定要分配给匹配长度的匹配长度代码的处理中,是否有必要考虑内部状态。
根据本发明的实施例所提供的编码设备还具有匹配长度扩展装置,其用于将匹配长度和要分配给该匹配长度的匹配长度代码之间的关系设置为根据由内部状态保存装置保存的内部状态的关系,其中该匹配长度编码装置能够:
如果匹配长度代码小于预定阈值,则在分配处理中将为匹配长度确定的代码作为匹配长度代码分配给该匹配长度,而与由内部状态保存装置保存的内部状态无关;以及
如果匹配长度代码等于或大于预定阈值,则将由匹配长度扩展装置为匹配长度确定的代码作为匹配长度代码分配给该匹配长度。
因此,根据本发明的实施例提供的编码设备实现了这样的功能:即,借助于匹配长度扩展装置,其是用于依赖于匹配长度代码和预定阈值之间的关系、而将匹配长度代码和要分配给该匹配长度代码的匹配长度之间的关系设置为根据由内部状态保存装置保存的内部状态的关系的装置。
根据本发明的另一实施例,提供了一种解码设备,包括:
解码缓冲器,用于保存作为对代码串进行解码处理的结果而获得的子码元串;
代码缓冲器,用于保存要被解码的代码串;
代码获取装置,用于从代码缓冲器获取子码元串代码,其包括子码元串的位置并且包括子码元串的匹配长度代码;
内部状态保存装置,用于保存预定的内部状态;
匹配长度解码装置,用于根据由内部状态保存装置保存的内部状态,在解码处理中对匹配长度代码进行解码,以生成由匹配长度代码表示的匹配长度,作为表示子码元串的长度的匹配长度,并然后根据该匹配长度来更新由内部状态保存装置保存的内部状态;以及
码元串解码装置,用于根据子码元串的位置并且根据子码元串的匹配长度代码,在解码处理中通过参考解码缓冲器来对子码元串代码进行解码,以生成由子码元串代码表示的子码元串。
因此,根据本发明的另一实施例提供的解码设备实现了这样的功能:即,基于编码处理中的内部状态,根据分配给匹配长度的匹配长度代码,而对子代码串进行解码。
在根据本发明的另一实施例提供的解码设备中,匹配长度解码装置能够执行以下控制:
如果匹配长度代码小于预定阈值,则将由内部状态保存装置保存的内部状态重置为最低级;
如果匹配长度代码等于最大值,则驱动由内部状态保存装置保存的内部状态,以便转变到更高级;
如果匹配长度代码至少等于预定阈值但小于最大值,则驱动由内部状态保存装置保存的内部状态,以便转变到更低级;
因此,根据本发明的第二方面提供的解码设备实现了这样的功能:即,根据子码元串的匹配状态,而从一个内部状态转变到另一个内部状态。
在根据本发明的另一实施例提供的解码设备中,该匹配长度解码装置能够:
如果匹配长度代码小于预定阈值,则在解码处理中对匹配长度代码进行解码,以生成为匹配长度代码确定的匹配长度,作为子码元串的长度,而与由内部状态保存装置保存的内部状态无关;和
如果匹配长度代码等于或大于预定阈值,则在解码处理中,根据由内部状态保存装置保存的内部状态并且根据匹配长度代码,对匹配长度代码进行解码,以生成为匹配长度代码确定的匹配长度,作为子码元串的长度。
因此,根据本发明的另一实施例提供的解码设备实现了这样的功能:即,根据匹配长度代码和阈值之间的关系,判断在为匹配长度代码确定匹配长度的处理中,是否有必要考虑内部状态。
根据本发明的另一实施例提供的解码设备还具有匹配长度代码扩展装置,其用于将匹配长度代码和作为对该匹配长度代码进行解码处理的结果而获得的匹配长度之间的关系设置为根据由内部状态保存装置保存的内部状态的关系,其中该匹配长度解码装置能够:
如果匹配长度代码小于预定阈值,则在解码处理中,对匹配长度代码进行解码,以生成为匹配长度代码确定的匹配长度,作为子码元串的长度,而与由内部状态保存装置保存的内部状态无关;和
如果匹配长度代码等于或大于预定阈值,则对匹配长度代码进行解码,以生成由匹配长度扩展装置为匹配长度代码确定的匹配长度。
因此,根据本发明的另一实施例提供的解码设备实现了这样的功能:即,求助于匹配长度扩展装置,其是用于依赖于匹配长度代码和预定阈值之间的关系、而将匹配长度代码和作为对匹配长度代码进行解码处理的结果而获得的匹配长度之间的关系设置为根据由内部状态保存装置保存的内部状态的关系的装置。
根据本发明的另一实施例提供的解码设备还包括代码缓冲器控制装置,其用于执行控制,以便以块单元将代码串提供给代码缓冲器,其中每当对块单元中的一个进行解码时,匹配长度解码装置执行控制,以便将有关接下来要被执行的处理的信息预先存储在存储装置中,并然后根据所存储的有关接下来要被执行的处理的信息,而对下一个块单元进行解码。
因此,根据本发明的另一实施例提供的解码设备实现了这样的功能:即,在具有仅仅足以装入块单元的小存储容量的代码缓冲器的情况下,以块单元对代码串进行解码。
根据本发明的另一实施例,提供了一种压缩程序解压缩设备,包括:
解压缩程序缓冲器,用于保存作为对压缩程序进行解压缩处理的结果而获得的子码元串;
压缩程序缓冲器,用于保存要被解压缩的压缩程序;
代码获取装置,用于从压缩程序缓冲器获取子码元串代码,其包括子码元串的位置并且包括子码元串的匹配长度代码;
内部状态保存装置,用于保存预定的内部状态;
匹配长度解码装置,用于根据由内部状态保存装置保存的内部状态,在解码处理中对匹配长度代码进行解码,以生成表示子码元串的长度的匹配长度,并然后根据该匹配长度来更新由内部状态保存装置保存的内部状态;以及
码元串解码装置,用于根据子码元串的位置并且根据子码元串的匹配长度代码,在解码处理中通过参考解压缩程序缓冲器来对子码元串代码进行解码,以生成由子码元串代码表示的子码元串。
因此,根据本发明的另一实施例提供的压缩程序解压缩设备实现了这样的功能:即,根据压缩处理中的内部状态,基于分配给匹配长度的匹配长度代码,而对包括在压缩程序内的子代码串进行解码。
根据本发明的另一实施例,提供了一种程序,其特征在于,通过计算机执行该程序,以便实现一种包括以下步骤的编码方法:
在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作输入数据的编码对象的子码元串相匹配的状态;
根据预定的内部状态,在分配处理中,将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理的结果而检测到的匹配状态中的子码元串的长度;
根据匹配长度来更新内部状态;以及
基于作为搜索处理的结果而检测到的匹配状态中的子码元串的位置的、包括在数据缓冲器内的位置的相对地址,并且基于匹配长度代码,而对子码元串进行编码。
因此,根据本发明的另一实施例提供的程序提供了这样的功能:即,根据内部状态,基于分配给匹配长度的匹配长度代码而对包括在压缩程序中的子代码串进行解码。
根据本发明的另一实施例,提供了一种由计算机执行的程序,以便实现一种解码方法,其用于在代码解码处理中,对保存在代码缓冲器中的代码串进行解码,并且将作为代码解码处理的结果而获得的子码元串存储到解码缓冲器中。该程序的特征在于,该解码方法包括以下步骤:
从代码缓冲器获取子码元串代码,其包括子码元串的相对地址并且包括子码元串的匹配长度代码;
根据预定的内部状态,在长度解码处理中对匹配长度代码进行解码,以生成表示子码元串的长度的匹配长度;
根据作为长度解码处理的结果而获得的匹配长度来更新内部状态;以及
根据子码元串的相对地址并且根据子码元串的匹配长度代码,在串解码处理中,通过参考解码缓冲器来对子码元串代码进行解码,以生成由子码元串代码表示的子码元串。
因此,根据本发明的另一实施例提供的该程序实现了这样的功能:即,根据编码处理中的内部状态,基于分配给匹配长度的匹配长度代码而对子代码串进行解码。
根据本发明的实施例,在编码处理的过程中,动态地改变匹配长度和该匹配长度的匹配长度代码之间的关系。这样,本发明在独立地将可由匹配长度代码表达的长度从一个值转换到另一个值的能力上显现了极好的效果。
附图说明
图1是示出根据本发明实施例的数据编码设备的典型配置的方框图;
图2A和2B示出了作为根据本发明实施例的代码、由数据编码设备输出的代码的数据结构的图;
图3是示出本发明实施例的内部状态之间的典型转变的图;
图4A和4B示出了作为根据本发明实施例的关系的、匹配长度代码c和匹配长度len之间的典型关系的表;
图5是示出根据本发明实施例的解码设备200的典型配置的方框图;
图6A到6D是各自示出要在下面描述中使用的关系的图,其中该关系是作为数据缓冲器和滑动窗口之间的关系而由本发明的实施例提供的关系;
图7示出了表示根据本发明实施例的编码处理的主要流程的流程图;
图8示出了表示根据本发明实施例的初始化编码处理变量的处理过程的流程图;
图9示出了表示根据本发明实施例的初始化数据缓冲器110的处理过程的流程图;
图10示出了表示根据本发明实施例的输入数据的处理过程的流程图;
图11示出了表示根据本发明实施例的输入一个字符的处理过程的流程图;
图12示出了表示根据本发明实施例的搜索最长匹配字符串的处理过程的流程图;
图13示出了表示根据本发明实施例而执行的PTR编码处理过程的流程图;
图14示出了表示根据本发明实施例的为了确定匹配长度代码而执行的处理过程的流程图;
图15示出了表示根据本发明实施例而执行的RAW编码处理过程的流程图;
图16示出了表示根据本发明实施例的为了更新数据缓冲器而执行的处理过程的流程图;
图17示出了表示根据本发明实施例的为了输出代码而执行的处理过程的流程图;
图18示出了表示根据本发明实施例而执行的FLG子代码输出处理过程的流程图;
图19示出了表示根据本发明实施例而执行的RAW代码输出处理过程的流程图;
图20A和20B示出了表示根据本发明实施例而执行的PTR代码输出处理过程的流程图;
图21示出了图解根据本发明实施例而执行的批解码处理的主要流程的流程图;
图22示出了表示根据本发明实施例的为了初始化有关代码的信息而执行的处理过程的流程图;
图23示出了表示根据本发明实施例而执行的解码初始化处理过程的流程图;
图24示出了表示根据本发明实施例的为了确定代码结束而执行的处理过程的流程图;
图25示出了表示根据本发明实施例而执行的FLG子代码获取处理过程的流程图;
图26示出了表示根据本发明实施例的为了获取具有M位长度的代码而执行的处理过程的流程图;
图27示出了表示根据本发明实施例的为了对RAW代码进行解码而执行的处理过程的流程图;
图28A和28B示出了各自表示根据本发明实施例的为了获取PTR代码而执行的处理过程的流程图;
图29示出了表示根据本发明实施例的为了对PTR代码进行解码而执行的处理过程的流程图;
图30示出了表示根据本发明实施例的为了对匹配长度进行解码而执行的处理过程的流程图;
图31示出了表示根据本发明实施例而执行的拷贝处理过程的流程图;
图32示出了表示根据本发明实施例而执行的划分解码处理的主要流程的流程图;
图33示出了表示根据本发明实施例而执行的划分解码初始化处理过程的流程图;
图34示出了表示根据本发明实施例而执行的划分解码处理过程的流程图;
图35示出了表示根据本发明实施例的为了初始化块代码信息而执行的处理过程的流程图;
图36示出了表示根据本发明实施例的为了确定代码缓冲器的空状态而执行的处理过程的流程图;
图37示出了表示根据本发明实施例的为了获取具有M位长度的代码而执行的处理过程的流程图;
图38A和38B示出了各自表示根据本发明实施例而执行的选择性解码处理过程的流程图;
图39示出了各自表示根据本发明实施例的为了更新有关代码的信息而执行的处理过程的流程图;
图40是示出作为根据本发明实施例的压缩率的子字符串的压缩率的表;
图41是示出本发明实施例中的子字符串的最大匹配长度的典型分布的图;
图42是示出本发明实施例的由计算机系统执行以便对程序进行解压缩的处理的典型应用的方框图;以及
图43A和43B是各自示出典型的LZSS代码编码处理的图。
具体实施方式
接下来,通过参考附图详细说明本发明的优选实施例。
图1是示出根据本发明实施例的数据编码设备100的典型配置的方框图。如图所示,数据编码设备100包括数据缓冲器110、数据缓冲器控制部分120、字符串搜索部分130、内部状态保存部分140、匹配长度扩展表150、匹配长度编码部分160和字符串编码部分170。
数据缓冲器110是用于适当地保存要被编码的输入数据的缓冲器。即使在编码之后,也不立即删除存储在数据缓冲器110中的输入数据。代替地,数据缓冲器110继续临时保存输入数据作为已编码数据,以用于搜索的目的。已编码数据的搜索范围被称为滑动窗口或滑动词典。
数据缓冲器控制部分120是用于根据编码进展状态来执行数据缓冲器110的控制的部分。更具体地说,数据缓冲器控制部分120执行诸如以下处理:接收要被保存在数据缓冲器110中的输入数据的处理、从数据缓冲器110输出已编码数据的处理、以及管理滑动窗口的处理。
字符串搜索部分130是用于在数据缓冲器110中的滑动窗口内搜索与正位于滑动窗口之后的子字符串相匹配的字符串的部分。如果在搜索处理中,字符串搜索部分130找到具有不小于预定值的长度的匹配字符串,则生成滑动窗口中的匹配字符串的头字符的位置以及该匹配字符串的长度。在下面描述中,将匹配字符串的长度称为匹配长度。另一方面,如果在搜索处理中,字符串搜索部分130没有找到具有不小于预定值的长度的匹配字符串,或者如果在搜索处理中,字符串搜索部分130找到具有小于预定值的长度的匹配字符串,则按照原样将正位于滑动窗口之后的头字符从数据编码设备100输出。
内部状态保存部分140是用于保存本发明实施例的内部状态的部分。如后所述,内部状态是根据编码进展的状态进行状态转变的结果。在预定条件下,存储在内部状态保存部分140中的内部状态是确定匹配长度与其代码之间的关系的因素,其中该代码被称为匹配长度代码。
匹配长度扩展表150是示出匹配长度与其代码之间的关系的表,其中该代码是上述匹配长度代码。如后所述,匹配长度和匹配长度代码之间的关系取决于存储在内部状态保存部分140中的内部状态。
匹配长度编码部分160是用于将与字符串搜索部分130所生成的匹配长度相对应的匹配长度代码分配给该匹配长度的部分。更具体地说,在对匹配长度进行编码的处理中,匹配长度编码部分160参考匹配长度扩展表150,以便找到匹配长度的匹配长度代码,作为与存储在内部状态保存部分140中的内部状态相对应的匹配长度代码。如图4所示,对于不大于预定阈值的匹配长度代码,匹配长度扩展表1 50将匹配长度和匹配长度代码之间的关系表示为与存储在内部状态保存部分140中的内部状态无关的关系。然而,如果匹配长度代码大于预定阈值,则匹配长度和匹配长度代码之间的关系取决于存储在内部状态保存部分140中的内部状态。
字符串编码部分170是用于对子字符串进行编码的部分。如果在搜索处理中,字符串搜索部分130找到具有不小于预定值的长度的字符串,作为与位于紧接在滑动窗口之后的位置处的子字符串相匹配的字符串,则字符串编码部分170输出滑动窗口中的字符串的头字符的位置、以及匹配长度代码,作为字符串的代码。如上所述,匹配长度代码是由匹配长度编码部分160分配给字符串的匹配长度的代码。另一方面,如果在搜索处理中,字符串搜索部分130没有找到具有不小于预定值的长度的字符串,或者如果在搜索处理中,字符串搜索部分130找到具有小于预定值的长度的字符串,则按照原样将紧接在滑动窗口之后的头字符作为该字符的代码从数据编码设备100输出。
图2示出了作为根据本发明实施例的代码而由数据编码设备100输出的代码的数据结构的图。如图2A所示,存在两种CODE代码的格式,即PTR和RAW代码。PTR代码包括作为与正位于滑动窗口之后的子字符串相匹配的字符串而包括在滑动窗口中的字符串的头字符的位置p及其匹配长度代码c。另一方面,RAW代码是字符数据本身。
包括在如图2A所示的CODE代码内的FLG子代码是表明CODE代码是PTR还是RAW的标志。更具体地,FLG子代码0表明CODE代码是PTR。另一方面,FLG子代码1表明CODE代码是RAW。
假定FLG子代码的宽度是1位,并且CODE代码的宽度是16位。在这种情况下,图2B示出了存储器中的FLG子代码和CODE代码的可能布局。如图所示,分别用于16个CODE代码#0到#15的FLG子代码#0到#15被集中并且布置在数组中。以这种方式,可以避免存储器中的碎片。应当注意,该布局不过是典型的布局。例如,可以将FLG子代码放置在相邻于与FLG子代码相关联的CODE代码的位置处。作为另一可选方案,还可以将32个或更多个FLG子代码集中并布置在数组中。
图3是示出本发明实施例的内部状态之间的典型转变的图。存在(SMAX+1)个可能的内部状态,即内部状态0到SMAX。如图所示,根据匹配长度代码c的值,内部状态转变到另一内部状态。
让我们假定当前内部状态是st。在这种情况下,根据紧邻前面的子字符串的匹配长度代码c的值,当前内部状态st可以转变到具有更小或更大状态号的内部状态。具有更小状态号的内部状态是内部状态0或(st-1),而具有更大状态号的内部状态是内部状态(st+1)或SMAX。更具体地,如果分配给紧邻前面的子字符串的匹配长度len的匹配长度代码c相对大,则当前内部状态st转变到内部状态(st+1)或SMAX。另一方面,如果分配给紧邻前面的子字符串的匹配长度len的匹配长度代码c相对小,则当前内部状态st转变到内部状态0或(st-1)。
匹配长度代码c具有(CMAX+1)个可能值(即0到CMAX)中的一个。让我们假定对于匹配长度代码c,阈值CTH满足关系式0≤CTH<CMAX。对于满足关系式0≤c≤CTH的匹配长度代码c的值,用与内部状态无关的L(c)来表示匹配长度的值。在这种情况下,通过采用与LZSS代码相同的分配方法来表达匹配长度的值。另一方面,对于满足关系式CTH<c≤CMAX的匹配长度代码c的值,用取决于内部状态的L(c)[st]来表示匹配长度的值。这是因为可以预期:事实上,在具有大的匹配长度的长子字符串之后,存在很多对短字符串进行编码的处理,并且只要数据不是简单数据,短字符串的出现频率就高。
内部状态的初始状态是状态0。在该状态中,非常类似于LZSS代码,小的长度与匹配长度代码c相关联。当对一个子字符串进行编码处理之后所获得的匹配长度在该状态中具有与匹配长度代码c的最大值CMAX相对应的值L(CMAX)[st]时,则认为已执行了生成小于实际匹配长度的匹配长度的编码处理,其中实际匹配长度是前述最大匹配长度mlen。为此,在这种情况下,通过增加匹配长度值L(CMAX)[st]来驱动内部状态转变到其编号增1的状态,从而在下一处理中跟上更大的匹配长度。
如果匹配长度小于L(CMAX)[st]但是至少等于L(CTH)[st],则驱动内部状态转变到其编号减1的状态,以便柔和地减小L(CMAX)[st]。
如果匹配长度小于L(CTH)[st],则认为长子字符串的出现频率具有小值。这样,为了立即返回到初始状态,驱动内部状态转变到状态0。另外,在RAW代码的情况下,将匹配长度解释成0长度。另外,在这种情况下,驱动内部状态立即转变到状态0。
注意,在下面的描述中假定:匹配长度代码c的宽度NC是4位,位置p的宽度NP是12位,匹配长度代码c的阈值CTH是13,匹配长度代码c的最大值CMAX是15,并且内部状态的最大值SMAX是3。
图4示出了作为根据本发明实施例的关系的、匹配长度代码c和匹配长度len之间的典型关系的表。如图4A所示,对于范围0到13中的匹配长度代码c的值,其中13是匹配长度代码c的阈值CTH,将匹配长度len的固定值分配给匹配长度代码c的每个值。由与内部状态无关的表达式(c+PTH+1)来表达所分配的匹配长度len的固定值。另一方面,如图4B所示,对于超出匹配长度代码c的阈值CTH的、范围14到15中的匹配长度代码c的值,作为匹配长度len的值的、与内部状态无关地确定的值被分配给匹配长度代码c的每个值。表达式(c+PTH+1)中的记号PTH表示为了防止将对于匹配长度代码c太小的匹配长度len分配给匹配长度代码c所提供的阈值。在本实施例中,PTH值是2。这样,如果匹配长度len是2或更小,则匹配长度len不与匹配长度代码c相关联。也就是说,使用字符本身作为RAW代码。
图4B是示出L(c)[state]值的表,其中L(c)[state]是范围14到15的匹配长度代码c的匹配长度len。图4B所示的表对应于包括在图1所示的配置中的匹配长度扩展表150。假定记号x表示匹配长度代码c的值,并且记号y表示内部状态的值。这样,记号L(x)[y]表示L(c)[state]。在这种情况下,x和y的值满足下面的条件:对于大于CTH的x,将匹配长度len(=L(x)[y]+1)分配给x,并且下面关系式成立:
L(CTH)<L(x)[y]
L(x)[y]<L(x+1)[y]
L(x)[y]<L(x)[y+1].
从上面的条件可以清楚,随着x和y值的增加,L(x)[y]的值也增加。在图4所示的示例的情况下,对于内部状态y=3以及匹配长度代码c=15,将1,792(=1,791+1)的最大匹配长度len分配给匹配长度代码c。
图5是示出根据本发明实施例的解码设备200的典型配置的方框图。如图所示,解码设备200包括代码缓冲器210、代码缓冲器控制部分220、代码获取部分230、内部状态保存部分240、匹配长度扩展表250、匹配长度解码部分260、字符串解码部分270和解码缓冲器280。
代码缓冲器210是用于适当地存储要被解码的代码串的缓冲器。存在两种将代码串保存在代码缓冲器210中的方法。根据该方法中的一种,成批地将整个代码串存储在代码缓冲器210中。另一方面,根据另一方法,将代码串划分成预定的多个块,然后顺序地将其中的每个块存储在代码缓冲器210中。
代码缓冲器控制部分220是用于执行代码缓冲器210的控制的部分。更具体地说,代码缓冲器控制部分220对成批地将代码串存储在代码缓冲器210中、或者通过将代码串划分成多个块来将代码串存储在代码缓冲器210中执行控制。
代码获取部分230是这样的部分,其用于从代码缓冲器210获取期望代码,并且根据FLG子代码解释CODE代码。也就是说,如果FLG子代码是0,则代码获取部分230从作为PTR代码的CODE代码提取位置p和匹配长度代码c。另一方面,如果FLG子代码是1,则代码获取部分230从作为RAW代码的CODE代码提取字符数据。
内部状态保存部分240是用于保存本发明实施例的内部状态的部分。内部状态保存部分240具有与较早通过参考图1说明的数据编码设备100中所采用的内部状态保存部分140类似的功能。匹配长度扩展表250是表示匹配长度与匹配长度代码之间的关系的表,其中匹配长度代码是表示匹配长度的代码。通过保存在内部状态保存部分240中的内部状态来确定匹配长度和匹配长度代码之间的关系。也就是说,匹配长度扩展表250具有与较早通过参考图1说明的数据编码设备100中所采用的匹配长度扩展表150类似的功能。
匹配长度解码部分260是用于为代码获取部分230提取的匹配长度代码确定与该匹配长度代码对应的匹配长度的部分。更具体地说,为了将匹配长度代码解码成匹配长度,匹配长度解码部分260在匹配长度扩展表250中搜索与匹配长度代码相对应的匹配长度,作为与存储在内部状态保存部分240中的内部状态相关联的匹配长度。然而,如果匹配长度代码小于预定阈值,则匹配长度解码部分260对该匹配长度代码进行解码,以便生成与存储在内部状态保存部分240中的内部状态无关的匹配长度。
字符串解码部分270是这样的部分,其用于对代码串进行解码以生成字符或字符串,并且将该字符或该字符串存储在解码缓冲器280中。在PTR代码的情况下,基于从代码获取部分230接收的位置和从匹配长度解码部分260接收的搜索长度,字符串解码部分270在解码缓冲器280中搜索字符串作为解码结果。另一方面,在RAW代码的情况下,使用RAW代码的字符数据作为由解码处理产生的字符。
解码缓冲器280是用于存储作为由字符串解码部分270执行的解码处理的结果的字符或字符串的缓冲器。输出存储在解码缓冲器280中的字符串,作为由字符串解码部分270执行解码处理的结果而获得的数据,并且用于解码处理。
接下来,如下通过参考附图说明由本发明实施例实现的、由数据编码设备100和解码设备200执行的操作。
图6A到6D是示出了在下面描述中所要使用的关系的图。作为根据本发明实施例的关系的如图所示的关系是数据缓冲器110和滑动窗口111之间的关系。如图6A所示,在本例中,假定数据缓冲器110具有用于存储(2N+FMAX+1)个字符的存储容量,其中记号N表示滑动窗口111的最大容量,并且记号FMAX表示作为匹配长度的最大值的L(CMAX)[SMAX]。
如图6B所示,最初,将滑动窗口111放置在数据缓冲器110的开头处。滑动窗口111被定位成从bstart到(r-1)的范围,其中记号bstart表示数据缓冲器110的有效区域的开始地址,并且记号r表示代表紧接在滑动窗口111之后的头字符的位置的变量。
随着编码处理的进行,滑动窗口111沿着朝右端的方向移动。然后,如图6C所示,当变量r达到至少2N时,沿着朝左端的方向将滑动窗口111返回N,以便被定位成如图6D所示。
图7示出了表示根据本发明实施例的编码处理的主要流程的流程图。如图所示,流程图从初始化用于编码处理的变量的步骤S710开始。然后,在下一步骤S720执行的处理中,初始化数据缓冲器110。随后,只要变量r小于作为数据缓冲器110的有效区域的结束地址的bend,就重复执行下面处理。
在下一步骤S730执行的处理中,以由变量r表示的位置处的头字符作为参考,在滑动窗口111中搜索匹配字符串。然后,在下一步骤S701执行的处理中,将实际匹配长度(也就是,最大匹配长度mlen)与阈值PTH进行比较。如果发现实际匹配长度大于阈值PTH,则处理流程继续到步骤S750,在其中执行编码处理,以产生PTR代码。另一方面,如果实际匹配长度不大于阈值PTH,则处理流程继续到步骤S760,在其中执行编码处理,以产生RAW代码。在执行编码处理以产生RAW代码的情况下,在步骤S760之前的步骤S702执行的处理中,将第(flag_count)位设为1。第(flag_count)位是通过从变量flgM的最低有效位开始对位进行计数直至作为计数结果所获得的计数值变得等于变量flag_count的值时所找到的位。变量flgM是表示M个FLG子代码的、具有M位长度的数据。也就是说,变量flgM是从该变量的LSB(最低有效位)开始顺序排列的FLG子代码的数组。另一方面,变量flag_count是用于对FLG子代码的数目进行计数的计数器。
如后所述,变量flag_count的值是递增的。在下一步骤S703执行的处理中找到的等于(M-1)的递增值揭示了这样的事实:即,已完成了顺序设置M个FLG子代码的重复操作。在这种情况下,处理流程继续到步骤S770,在其中输出M个FLG子代码和CODE代码。然后,在下一步骤S704执行的处理中,重置变量flgM,以便在下一处理中使用。
在下一步骤S705执行的处理中,变量flag_count按1递增。当按1递增之后的变量flag_count变成等于M时,将变量flag_count重置为0。也就是说,按1递增之后的变量flag_count除以M,并且该除法的余数用作变量flag_count的更新值。
然后,在下一步骤S706执行的处理中,通过将按1递增之后的最大匹配长度mlen加到开始地址bstart,而更新数据缓冲器110的有效区域的开始地址bstart。同样地,通过将按1递增之后的最大匹配长度mlen加到变量r来更新变量r。这样,按照等于已编码子字符串的长度的距离来移动滑动窗口111。
如图6C所示,当变量r变得等于至少2N时,如较早通过参考图6D说明的那样,滑动窗口111沿着朝左端的方向返回N,以便在步骤S780执行的处理中更新数据缓冲器110。
在重复上述处理多次之后在步骤S708执行的处理中变量flag_count不等于0揭示了:存在尚未输出的代码。在这种情况下,处理流程继续到步骤S790,在其中输出剩余的FLG子代码和剩余的CODE代码。最后,编码处理的执行结束。
图8示出了表示根据本发明实施例的初始化编码处理变量的处理过程的流程图。初始化编码处理变量的处理对应于在作为表示编码处理的流程图的图7所示流程图的步骤S710执行的处理。
如图8所示,该流程图从步骤S711开始,在其中将变量flag_count和变量flgM各自重置为0。如前所述,变量flag_count是用于对FLG子代码的数目进行计数的计数器。另一方面,变量flgM是FLG子代码的数组。然后,在下一步骤S712执行的处理中,将FMAX设为L(15)[3],其在本例中是最大匹配长度len,其中FMAX表示在搜索子代码串的处理中用作子代码串长度的最大值的最大值。随后,在下一步骤S713执行的处理中,将内部状态重置为0。
最后,在下一步骤S714执行的处理中,将数据缓冲器110的有效区域的开始地址bstart重置为0,并且将表示紧接在滑动窗口111之后的头字符的位置的变量r设为(N-L(15)[0]+1)。如较早通过参考图6B所说明的那样,滑动窗口111被定位成从开始地址bstart到(r-1)的范围。
应当注意,初始化编码处理变量的处理,在步骤S712到S714执行的处理是本发明的实施例所特有的处理。
图9示出了表示根据本发明实施例的初始化数据缓冲器110的处理过程的流程图。初始化数据缓冲器110的处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S720执行的处理。
如图9所示,该流程图从步骤S721开始,在其中,将数据缓冲器110的有效区域的结束地址bend重置为0。然后,在下一步骤S722执行的处理中,将数据缓冲器110的元素data_buffer[bend]设为0。随后,在下一步骤S723执行的处理中,按1递增结束地址bend。只要结束地址bend小于变量r的值,就重复执行步骤S722和S723的处理。
在如上所述将值0设置在滑动窗口111中的情况下,在下一步骤S729执行的处理中,将输入数据存储在数据缓冲器110的剩余部分中。
图10示出了表示根据本发明实施例的输入数据的处理过程的流程图。输入数据的处理对应于在作为表示初始化数据缓冲器110的处理的流程图的、图9所示的流程图的步骤S729执行的处理,并对应于在作为表示如后所述更新数据缓冲器110的处理的流程图的、图16所示的流程图的步骤S789执行的处理。
在输入数据的处理中,只要结束地址bend小于数据缓冲器110的结束处,也就是,只要结束地址bend小于(2N+FMAX),就重复执行下面的处理,同时在S7298执行的处理中,每次按1递增数据缓冲器110的有效区域的结束地址bend。首先,在下一步骤S7291执行的处理中,输入输入数据的字符。然后,在下一步骤S7296执行的处理中,检查表明输入数据的状态的变量data_status,以确定变量data_status是否表明输入数据的结束。如果变量data_status没有表明输入数据的结束,则处理流程继续到步骤S7297,在其中将输入字符设置在数据缓冲器110的元素data_buffer[bend]中。
图11示出了表示根据本发明实施例的输入字符的处理过程的流程图。输入字符的处理对应于作为表示输入数据的处理的流程图的、图10所示的流程图的步骤S7291。
首先,在下一步骤S7292执行的处理中,检查数据缓冲器110,以便确定在数据缓冲器110中是否仍然剩余有输入数据。如果在数据缓冲器110中仍然剩余有输入数据,则处理流程继续到步骤S7293,在其中取出输入数据的M位,并且保存在变量data中。然后,在下一步骤S7294执行的处理中,将变量data_status设为揭示有效数据的值。另一方面,如果在数据缓冲器110中不再剩余有输入数据,则处理流程继续到步骤S7295,在其中将变量data_status设为揭示输入数据结束的值。
图12示出了表示根据本发明实施例的搜索最长匹配字符串的处理过程的流程图。该搜索最长匹配字符串的处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S730执行的处理。
首先,在步骤S731执行的处理中,得到数据缓冲器110的有效区域的结束地址bend和变量r之间的差值,并且将该差值设置在差值变量rd中。然后,在下一步骤S732执行的处理中,将差值变量rd与FMAX比较。如果发现差值变量rd至少等于FMAX,则处理流程继续到步骤S734,在其中将FMAX设置在变量ff中。另一方面,如果发现差值变量rd小于FMAX,则处理流程继续到步骤S733,在其中将差值变量的内容设置在变量ff中。
在任一情况下,处理流程继续到下一步骤S735,在其中将表示匹配字符串的头字符的位置的变量mpos和表示最大匹配长度的变量mlen各自重置为0。然后,在下一步骤S736执行的处理中,将表示滑动窗口的边界的值(r-1)设置在变量i中。随后,当在下一步骤S744执行的处理中每次按1递减变量i时,只要变量i大于或等于数据缓冲器110的有效区域的开始地址bstart,就重复执行下面处理。
在重复处理中,如果在步骤S737执行的处理中产生的确定结果表明元素data_buffer[i]与元素data_buffer[r]相匹配,则处理流程继续到步骤S738,在其中将变量j重置为0。然后,在下一步骤S743执行的处理中每次按1递增变量j时,只要变量j小于变量ff,就重复执行下面子处理。在重复子处理中,如果在步骤S739执行的处理中产生的确定结果表明元素data_buffer[i+j+1]与元素data_buffer[r+j+1]相匹配,并且在步骤S741执行的处理中产生的确定结果表明变量j大于最大匹配长度mlen,则处理流程继续到步骤S742,在其中将变量i的值设置在变量mpos中,并且将变量j的值设置在变量mlen中,作为新的最大匹配长度。
在如上所述的搜索最长匹配字符串的处理中,在滑动窗口中搜索与紧接在滑动窗口之后的头字符相同的字符。如果在搜索处理中找到这样的字符,则在滑动窗口中搜索以该字符作为其头字符的最长匹配字符串。最长匹配字符串是具有尽可能大的长度的与紧接在滑动窗口之后的字符串相匹配的字符串。如果在搜索处理中找到这样的最长匹配字符串,则将表达式(匹配长度-1)的值设置在变量mlen中,并且将数据缓冲器110中的字符的位置设置在变量mpos中。另一方面,如果在搜索处理中没有找到这样的字符,则在继续到下一处理之前,将变量mlen重置为0。
图13示出了表示根据本发明实施例而执行的PTR编码处理过程的流程图。PTR编码处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S750执行的处理。
如上所述,在步骤S751执行的确定匹配长度代码c的处理中,确定匹配长度代码c,并且内部状态从一个状态转变到另一个状态。然后,在下一步骤S753执行的处理中,将作为将变量r除以N的结果而获得的余数设置在变量rN中。另一方面,在同一步骤执行的处理中,将作为将变量mpos除以N的结果而获得的余数设置在变量pos中。然后,如果在下一步骤S754执行的处理中产生的确定结果表明变量rN的值大于变量pos的值,则处理流程继续到步骤S755,在其中从变量rN的值中减去变量pos的值,并且将作为减法结果而获得的差值设置在变量p中。另一方面,如果在步骤S754执行的处理中产生的确定结果表明变量rN的值不大于变量pos的值,则处理流程继续到步骤S756,在其中从N和变量rN的值之和中减去变量pos的值,并且将作为减法结果而获得的差值设置在变量p中。以这种方式,将滑动窗口211中的匹配字符串的头字符的相对位置设置在变量p中。
然后,在下一步骤S757执行的处理中,将16位值设置在数组元素CPTR[flag_count]中,其中该16位值是作为将如上所述获得的相对位置p的12个低阶位链接到匹配长度代码c的4个低阶位的高阶侧的结果而获得的。数组CPTR[flag_count]是用于保存各自与变量flag_count的值相对应的PTR代码的数组。
图14示出了表示根据本发明实施例的、为了确定匹配长度代码而执行的处理过程的流程图。确定匹配长度代码的处理对应于在作为表示PTR编码处理的流程图的、图13所示的流程图的步骤S751执行的处理。
如图所示,该流程图从步骤S7511开始,在其中将作为从最大匹配长度mlen中减去阈值PTH的结果而获得的差值设置在匹配长度代码c中。在将该差值设置在匹配长度代码c的操作中所采用的方法与用于LZSS代码的代码分配方法相同。在本实施例的情况下,如果在下一步骤S7521执行的处理中产生的确定结果表明最大匹配长度mlen小于(13+PTH),则采用该代码分配方法。在这种情况下,处理流程继续到步骤S7521,在其中将内部状态初始化到状态0。另外,作为本发明的实施例所特有的处理,执行下面的处理。
如果在步骤S7521执行的处理中产生的确定结果表明最大匹配长度mlen不小于(13+PTH),则处理流程继续到步骤S7513,以产生关于最大匹配长度mlen是否小于L(14)[state]的确定结果。如果确定结果表明最大匹配长度mlen小于L(14)[state],则处理流程继续到步骤S7515,在其中将最大匹配长度mlen设为(13+PTH),并且将匹配长度代码c确定为13。然后,处理流程继续到下一步骤S7522,以便产生关于内部状态是否是状态x的确定结果,其中记号x表示大于0的整数。如果确定结果表明内部状态是状态x,则处理流程继续到步骤S7523,在其中驱动内部状态转变到状态y,其中记号y表示等于(x-1)的整数。
另一方面,如果在步骤S7513产生的确定结果表明最大匹配长度mlen不小于L(14)[state],则处理流程继续到步骤S7514,以便产生关于最大匹配长度mlen是否小于L(15)[state]的确定结果。如果在步骤S7514执行的处理中产生的确定结果表明最大匹配长度mlen小于L(15)[state],则处理流程继续到步骤S7516,在其中将最大匹配长度mlen设置为L(14)[state],并且将匹配长度代码c确定为14。另外,在这种情况下,处理流程然后继续到上述的下一步骤S7522。如果在步骤S7522执行的处理中产生的确定结果表明内部状态是状态x,其中记号x表示大于0的整数,则处理流程继续到步骤S7523,在其中驱动内部状态转变到状态y,其中记号y表示等于(x-1)的整数。
另一方面,如果在步骤S7514执行的处理中产生的确定结果表明最大匹配长度mlen不小于L(15)[state],则处理流程继续到步骤S7517,在其中将最大匹配长度mlen设为L(15)[state],并且将匹配长度代码c确定为15。然后,处理流程继续到步骤S7524,以产生关于内部状态是否是状态x的确定结果,其中记号x表示小于最大值SMAX的整数。如果在步骤S7524执行的处理中产生的确定结果表明内部状态是状态x,则处理流程继续到步骤S7525,在其中驱动内部状态转变到状态y,其中记号y表示等于(x+1)的整数。
如上所述,确定匹配长度代码c,并且驱动内部状态从一个状态转变到另一个状态。
图15示出了表示根据本发明实施例而执行的RAW编码处理过程的流程图。RAW编码处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S760执行的处理。
在该处理中,利用字符数据。这样,在该流程图的第一步骤S761执行的处理中,将紧接在滑动窗口111之后的字符data_buffer元素[r]设置在数组元素CRAW[flag_count]中。数组CRAW[flag_count]是各自与变量flag_count的值相对应的RAW代码的数组。在这种情况下,在下一步骤S762执行的处理中,将最大匹配长度mlen设为0。另外,作为本发明的实施例所特有的处理,在下面步骤S763执行的处理中,将内部状态初始化到状态0。
图16示出了表示根据本发明实施例的、为了更新数据缓冲器而执行的处理过程的流程图。更新数据缓冲器的处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S780执行的处理。
图16所示的流程图从步骤S781开始,在其中将变量i设为0。然后,在下一步骤S782执行的处理中,将data_buffer元素[i+N]的值移动到data_buffer元素[i]。随后,在下一步骤S783执行的处理中,按1递增变量i的值。只要变量i的值等于或小于[N+FMAX],就重复执行步骤S782和S783的处理。然后,在下一步骤S784执行的处理中,从数据缓冲器110的有效区域的开始地址bstart、从数据缓冲器110的有效区域的结束地址bend、以及从变量r减去N。以这种方式,沿着朝左端的方向将滑动窗口111回移对应于N的距离,从而将其定位成如图6(d)所示。随后,在下一步骤S789执行的处理中,在较早通过参考图10所示的流程图所说明的数据输入处理中,将输入数据读入到数据缓冲器110的剩余部分中。
图17示出了表示根据本发明实施例的、为了输出代码而执行的处理过程的流程图。输出代码的处理对应于在作为表示编码处理的流程图的、图7所示的流程图的步骤S770到S790执行的处理。
图17所示的流程图从步骤S791开始,在其中执行FLG子代码输出处理。然后,在下一步骤S792执行的处理中,将变量k重置为0。随后,如果在下一步骤S793执行的处理中产生的确定结果表明从最低有效位开始的flgM的第k位是1,则处理流程继续到步骤S794,在其中输出RAW代码。另一方面,如果在下一步骤S794执行的处理中产生的确定结果表明从最低有效位开始的flgM的第K位是0,则处理流程继续到步骤S795,在其中输出PTR代码。然后,在步骤S796执行的处理中,按1递增变量k。只要变量k小于M,就重复执行步骤S793、S794(或S795)和S796的处理。
图18示出了表示根据本发明实施例的、为了输出FLG子代码而执行的处理过程的流程图。输出FLG子代码的处理对应于在作为表示输出代码的处理的流程图的、图17所示的流程图的步骤S791执行的处理。在图18所示的流程图的步骤S7911执行的处理中,将flgM的M个低阶位输出到输出目的地。
图19示出了表示根据本发明实施例而执行的RAW代码输出处理过程的流程图。RAW代码输出处理对应于在作为表示处理输出代码的流程图的、图17所示的流程图的步骤S794执行的处理。在图19所示的流程图的步骤S7941执行的处理中,将数组元素CRAW[k]的M个低阶位输出到输出目的地。
图20示出了表示根据本发明实施例而执行的PTR代码输出处理过程的流程图。PTR代码输出处理对应于在作为表示输出代码的处理的流程图的、图17所示的流程图的步骤S795执行的处理。
对于M=8执行的PTR代码输出处理不同于对于M=16执行的PTR代码输出处理。在对于M=8执行的PTR代码输出处理的情况下,在图20所示的流程图的步骤S7951执行的处理中,将数组元素CPTR[k]的M个低阶位输出到输出目的地。然后,在图20所示的流程图的下一步骤S7952执行的处理中,将数组元素CPTR[k]的2M个低阶位中的M个高阶位输出到输出目的地。另一方面,在对于M=16执行的PTR代码输出处理的情况下,在图20所示的流程图的步骤S7953执行的处理中,将数组元素CPTR[k]的M个低阶位输出到输出目的地。
如上所述,将输入数据编码成代码串。在对作为上述编码处理的结果而获得的代码串进行解码的处理中,有可能采用两种可能方法中的一种。根据所述方法中的一种,在单个处理中对整个代码串进行解码。另一方面,根据另一方法,以块为单位对代码串进行解码,其中每一块是代码串中的B个字符。
图21示出了根据本发明实施例而执行的批解码处理的主要流程的流程图。如图所示,该流程图从步骤S801开始,在其中将代码串传输到代码缓冲器210。然后,在下一步骤S810执行的处理中,初始化有关代码的信息。随后,在下一步骤S820执行的处理中,初始化用于解码目的的变量。然后,重复执行步骤S830、步骤S830之后的步骤S802、以及步骤S802之后的步骤的处理,直至检测到要被解码的代码的结束。
步骤S802之后的步骤从步骤S840开始,在其中取出FLG子代码(或变量flag)。然后,处理流程继续到步骤S803,以便产生关于变量flag是0还是1的确定结果。具有值1的变量flag表明正被解码的代码是RAW代码。在这种情况下,处理流程继续到步骤S850,在其中获得具有M位长度的RAW代码。然后,在下一步骤S860执行的处理中,对RAW代码进行解码。另一方面,具有值0的变量flag表明正被解码的代码是PTR代码。在这种情况下,在步骤S880,取出PTR代码。然后,在下一步骤S890执行的处理中,对PTR代码进行解码。应当注意,在步骤S870和S804执行的处理中,检查正被解码的代码,以确定该代码是否是代码结束,其中在步骤S870和S804执行的处理先于在步骤S880执行的取出PTR代码的处理。
图22示出了表示根据本发明实施例的、为了初始化有关代码的信息而执行的处理过程的流程图。初始化有关代码的信息的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S810执行的处理,并对应于作为后面将要描述的表示划分解码处理的流程图的、图33所示的流程图的步骤S910执行的处理。
图22所示的流程图以从步骤S811开始的步骤开始,在步骤S811,将用于对已处理代码数目进行计数的变量code_count重置为0。然后,在下一步骤S812执行的处理中,将用于对FLG子代码数目进行计数的变量flag_count也重置为0。随后,在下一步骤S813执行的处理中,将要被解码的代码的总长度设置到变量code_length中。应当注意,要被解码的代码的总长度是作为各自具有M位长度的字符而包括在代码串内的字符的数目。
图23示出了表示根据本发明实施例而执行的解码初始化处理过程的流程图。解码初始化处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S820执行的处理,并对应于在作为后面将要描述的表示上述划分解码处理的流程图的、图33所示的流程图的步骤S920执行的处理。
图23所示的流程图从步骤S821开始,在其中设置数组dst的地址,该数组dst用于存储作为解码处理的结果而获得的数据。然后,在下一步骤S822执行的处理中,将变量r重置为0,该变量r用于存储解码对象的头字符的位置。随后,在下一步骤S823执行的处理中,将内部状态初始化到状态0。
图24示出了表示根据本发明实施例的、为了确定代码结束而执行的处理过程的流程图。确定代码结束的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S830或S870执行的处理,并对应于在作为后面将要描述的表示划分解码处理的流程图的、图34所示的流程图的步骤S930执行的处理。
图24所示的流程图从步骤S831开始,在其中将变量code_count与变量code_length进行比较,以产生关于变量code_count的值是否小于变量code_length的值的确定结果。如果确定结果表明变量code_count的值小于变量code_length的值,则处理流程继续到步骤S832,在其中将变量code_status设为表明仍然剩有要被解码的代码的值。另一方面,如果确定结果表明变量code_count的值等于或大于变量code_length的值,则处理流程继续到步骤S833,在其中将变量code_status设为表明已完成了解码处理的值。也就是说,通过对已解码代码的数目进行计数,有可能确定是否已完成了解码处理。
图25示出了表示根据本发明实施例而执行的FLG子代码获取处理过程的流程图。FLG子代码获取处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S840执行的处理,并对应于在作为后面将要描述的表示上述划分解码处理的流程图的、图34所示的流程图的步骤S940执行的处理。
图25所示的流程图从步骤S841开始,以产生关于变量flag_count的值是否是0的确定结果。如果确定结果表明变量flag_count的值不是0,则处理流程继续到步骤S842,在其中将变量flagM的LSB值设置在变量flag中。然后,在下一步骤S843执行的处理中,将变量flagM沿着朝LSB的方向移动1位。随后,在下一步骤S844执行的处理中,变量flag_count递减1。
另一方面,如果在步骤S841执行的处理中产生的确定结果表明变量flag_count的值是0,则处理流程继续到步骤S845,在其中获取具有M位长度的代码作为变量code。然后,在下一步骤S846执行的处理中,将所获取的变量code的值传输到变量flagM。随后,在下一步骤S847执行的处理中,将值M设置在变量flag_count中。
图26示出了表示根据本发明实施例的、为了获取具有M位长度的代码而执行的处理过程的流程图。获取具有M位长度的代码的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S850执行的处理,并对应于在作为表示FLG子代码获取处理的流程图的、图25所示的流程图的步骤S845执行的处理。
图26所示的流程图从步骤S851开始,在其中,将作为由变量code_count指向的元素而包括在存在于数据缓冲器110中的code_buffer[code_count]内的元素设置在变量code中。然后,在下一步骤S852执行的处理中,变量code_count递增1。
图27示出了表示根据本发明实施例的、为了对RAW代码进行解码而执行的处理过程的流程图。获取RAW代码的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S860执行的处理,并对应于在作为后面将要描述的各自表示选择性解码处理的流程图的、图38所示的流程图的步骤S9792和S9782执行的处理。
图27所示的流程图从步骤S861开始,在其中将变量code的内容设置在由变量r指向的数据存储数组元素dst[r]中。然后,在下一步骤S862执行的处理中,变量r递增1。随后,在下一步骤S863执行的处理中,将内部状态初始化到状态0。
图28示出了各自表示根据本发明实施例的、为了获取PTR代码而执行的处理过程的流程图。获取PTR代码的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S880执行的处理。
可以对于M=8和M=16执行PTR代码获取处理。以与如下对于M=16执行的PTR代码获取处理不同的方式,而对于M=8执行PTR代码获取处理。在对于M=8执行的PTR代码获取处理的情况下,首先,在步骤S881执行的处理中,将元素code_buffer[code_count]的值设置在变量code 0中。然后,在下一步骤S882执行的处理中,将元素code_buffer[code_count+1]的值设置在变量code 1中。随后,在下一步骤S883执行的处理中,变量code_count递增2。然后,在下一步骤S884执行的处理中,将作为将code 1的M个低阶位链接到code 0的M个低阶位的高阶侧的结果而获得的2M个位设置在变量code中。
另一方面,在对于M=16执行的PTR代码获取处理的情况下,首先,在步骤S885执行的处理中,将元素code_buffer[code_count]的值设置在变量code中。随后,在下一步骤S886执行的处理中,变量code_count递增1。
图29示出了表示根据本发明实施例的、为了对PTR代码进行解码而执行的处理过程的流程图。对PTR代码进行解码的处理对应于在作为表示批解码处理的流程图的、图21所示的流程图的步骤S890执行的处理,并对应于在作为各自表示选择性解码处理的流程图的、图38所示的流程图的步骤S9797和S9787执行的处理。
图29所示的流程图从步骤S891开始,在其中将变量code的12个高阶位设置在变量i中。然后,在下一步骤S892执行的处理中,将变量code的4个低阶位设置在变量j中。随后,在下一步骤S893执行的处理中,对匹配长度代码进行解码。最后,在下一步骤S895执行的处理中,通过执行拷贝处理来对编码的子字符串进行解码。
图30示出了表示根据本发明实施例的、为了对匹配长度进行解码而执行的处理过程的流程图。对匹配长度进行解码的处理对应于在作为表示PTR代码解码处理的流程图的、图29所示的流程图的步骤S893执行的处理。
图30所示的流程图从步骤S8931开始,在其中将由变量j的值表示的匹配长度代码c和阈值PTH之和设置在变量j中。以这种方式,通过采用与LZSS代码相同的解码方法,将表达式(匹配长度len-1)的值设置在变量j中。在本发明实施例的情况下,对于不大于13的匹配长度代码c,采用该解码方法,以将匹配长度len分配给匹配长度代码c。在步骤S8931之后的后续步骤中执行的下面处理是本发明的实施例所特有的处理。
随后,在下一步骤S8932执行的处理中,检查变量j的值,以便产生关于该值是否等于表达式(15+PTH)的值的确定结果。如果确定结果表明变量j的值等于表达式(15+PTH)的值,则处理流程继续到步骤S8933,在其中将L(15)[state]的值设置在变量j中。然后,处理流程继续到步骤S8941,以产生关于内部状态的编号是否小于最大值SMAX的确定结果。如果确定结果表明内部状态的编号小于最大值SMAX,则处理流程继续到步骤S8942,在其中内部状态的编号递增1。
另一方面,如果在步骤S8932执行的处理中产生的确定结果表明变量j的值不等于表达式(15+PTH)的值,则处理流程继续到步骤S8934,在其中检查变量j的值,以便产生关于变量j的值是否等于表达式(14+PTH)的值的确定结果。如果确定结果表明变量j的值等于表达式(14+PTH)的值,则处理流程继续到步骤S8935,在其中将L(14)[state]的值设置在变量j中。然后,处理流程继续到步骤S8943。
另一方面,如果在步骤S8934执行的处理中产生的确定结果表明变量j的值不等于表达式(14+PTH)的值,则处理流程继续到步骤S8943,以产生关于变量j的值是否至少等于表达式(13+PTH)的值、并且内部状态的编号是否大于0的确定结果。如果确定结果表明变量j的值至少等于表达式(13+PTH)的值,并且内部状态的编号大于0,则处理流程继续到步骤S8944,在其中内部状态的编号递减1。否则,处理流程继续到步骤S8945,在其中将内部状态的编号初始化为0。
通过如上所述执行对匹配长度进行解码的处理,将表达式(匹配长度-1)的值设置在变量j中,并且驱动内部状态转变到另一值。
图31示出了表示根据本发明实施例而执行的拷贝处理过程的流程图。拷贝处理对应于在作为表示PTR代码解码处理的流程图的、图29所示的流程图的步骤S895执行的处理。
图31所示的流程图从步骤S8951开始,在其中,将作为从变量r的值中减去变量i的值的结果而获得的差值设置在变量k中。然后,在下一步骤S8952执行的处理中,将作为将变量j的值加到变量k的值的结果而获得的和设置在变量end中。以这种方式,要被拷贝的子字符串的头字符的位置被设置在变量k中,并且要被拷贝的子字符串的尾字符的位置被设置在变量end中。
然后,在下一步骤S8953执行的处理中,检查变量k的值,以便产生关于该值是否等于0的确定结果。如果确定结果表明变量k的值等于0,则处理流程继续到步骤S8954,在其中将数组元素dst[r]重置为0。另一方面,如果确定结果表明变量k的值不等于0,则处理流程继续到步骤S8955,在其中将数组元素dst[k]的值拷贝到数组元素dst[r]。在任一情况下,处理流程继续到步骤S8956,在其中变量k和r的值各自递增1。只要变量k的值不大于变量end的值,就重复执行步骤S8953、步骤S8954或S8955以及步骤S8956的处理。
如上所述执行了代码串的批解码处理。下面描述将说明以块为单位对代码串进行解码的划分解码处理,其中每个块由包括在该串内的B个字符组成。
图32示出了表示根据本发明实施例而执行的划分解码处理的主要流程的流程图。如图所示,该流程图从步骤S901开始,在其中执行划分解码初始化处理。然后,在下一步骤S903执行的处理中,将B个连续代码传输到代码缓冲器210。随后,在下一步骤S970执行的处理中,对B个代码执行划分解码处理。只要在步骤S904执行的处理中产生的确定结果表明剩有要被解码的块,就重复执行步骤S903和S970的处理。
图33示出了表示根据本发明实施例而执行的划分解码初始化处理过程的流程图。划分解码初始化处理对应于在作为表示划分解码处理的主要流程的流程图的、图32所示的流程图的步骤S901执行的处理。
图33所示的流程图从步骤S910开始,在其中,以与由图21所示的流程图表示的批解码处理相同的方式,初始化有关代码的信息。然后,在下一步骤S920执行的处理中,初始化用于解码的变量。随后,在下一步骤S902执行的处理中,将表明要执行获取FLG子代码的处理的值OP_FLG设置在用于保存有关接下来要被执行的处理的信息的变量op中。
图34示出了表示根据本发明实施例而执行的划分解码处理过程的流程图。在作为表示划分解码处理的主要流程的流程图的、图32所示的流程图的步骤S970执行该划分解码处理。
图34所示的流程图从步骤S971开始,在其中执行有关块代码的信息。然后,在下一步骤S972执行的处理中,将用于保存解码状态的变量decode_status设为表明解码处理正在进行的值。随后,在步骤S973和S974执行的处理中,检查代码缓冲器210,以便产生关于代码缓冲器210是否为空的确定结果。然后,只要在步骤S974执行的处理中产生的确定结果表明代码缓冲器210不为空,并且只要在步骤S930之后的步骤S975执行的处理中产生的确定结果表明还没有完成对所有代码进行解码的处理,就重复执行下面处理。
如果在步骤S975执行的处理中产生的确定结果表明还没有完成对所有代码进行解码的处理,则处理流程继续到步骤S978。如果在步骤S978执行的处理中产生的确定结果表明值OP_FLG已被设置在变量op中,则处理流程继续到步骤S940,在其中执行FLG代码获取处理。然后,在下一步骤S987执行的处理中,检查变量flag,以便产生关于变量flag是否已被设为1的确定结果。如果确定结果表明变量flag已被设为1,则处理流程继续到步骤S988,在其中将值OP_RAW设置在变量op中。另一方面,如果确定结果表明变量flag已被重置到0,则处理流程继续到步骤S989,在其中将值OP_PTR设置在变量op中。
另一方面,如果在步骤S978执行的处理中产生的确定结果表明不同于值OP_FLG的值已被设置在变量op中,则处理流程继续到步骤S950,在其中执行获取具有M位长度的代码的处理。然后,在下一步骤S979,执行根据解码处理的进展状态的选择性解码处理。
另一方面,如果在步骤S975执行的处理中产生的确定结果表明已完成了对所有代码进行解码的处理,则处理流程继续到步骤S976,在其中将表明完成了对所有代码进行解码的处理的值设置在变量decode_status中。然后,在下一步骤S977执行的处理中,更新变量code_count。变量code_count是用于对已被解码的编码代码的数目进行计数的代码信息。
图35示出了表示根据本发明实施例的、为了初始化块代码信息而执行的处理过程的流程图。块代码信息初始化处理对应于在作为表示划分解码处理的流程图的、图34所示的流程图的步骤S971执行的处理。在块代码信息初始化处理中,在步骤S9711,将表示代码缓冲器210中的读取位置的变量code_offset重置为0。
图36示出了表示根据本发明实施例的、为了确定缓冲器的空状态而执行的处理过程的流程图。确定缓冲器空状态的处理对应于在作为表示划分解码处理的流程图的、图34所示的流程图的步骤S973执行的处理。
缓冲器空状态确定处理从步骤S9731开始,以产生关于变量code_offset的值是否小于块大小B的确定结果。如果确定结果表明变量code_offset的值小于块大小B,则处理流程继续到步骤S9732,在其中将变量code_status设为表明仍然剩有要被解码的数据的值。另一方面,如果确定结果的结果表明变量code_offset的值至少等于块大小B,则处理流程继续到步骤S9733,在其中将变量code_status设为表明代码缓冲器为空的值。
图37示出了表示根据本发明实施例的M位代码获取处理过程的流程图。获取具有M位长度的代码的处理对应于在作为表示划分解码处理的流程图的、图34所示的流程图的步骤S950执行的处理。
获取具有M位长度的代码的处理从步骤S951开始,在其中将由变量code_buffer指向的代码缓冲器元素code_buffer[code_offset]的值设置在变量code中。然后,在下一步骤S952执行的处理中,变量code_offset递增1。
图38示出了表示根据本发明实施例的选择性解码处理过程的流程图。选择性解码处理对应于在作为表示划分解码处理的流程图的图34的步骤S979的处理。
可以对于M=8和M=16执行选择性解码处理。以如下与对于M=16执行的PTR代码获取处理不同的方式,对于M=8执行选择性解码处理。包括两个或一个字符的PTR代码取决于M的值。在包括2个字符的PTR代码的情况下,使用2个值,即OP_PTR和OP_PTR2,将代码获取和解码处理划分成2个处理。另一方面,在包括一个字符的PTR代码的情况下,通过仅仅使用值OP_PTR,而执行代码获取和解码处理。
作为表示针对M=8的选择性解码处理的流程图的图38A所示的流程图从步骤S9791开始,在其中检查变量op的值。如果该变量的值为值OP_RAW,则处理流程继续到步骤S9792,在其中执行RAW解码处理。然后,在下一步骤S9793执行的处理中,将值OP_FLG设置在变量op中。如果在步骤S9791执行的处理中发现该变量的值为值OP_PTR,则处理流程继续到步骤S9794,在其中将变量code的M个低阶位设置在变量code 0中。然后,在下一步骤S9795执行的处理中,将值OP_PTR2设置在变量op中。如果在步骤S9791执行的处理中发现该变量的值为值OP_PTR2,则处理流程继续到步骤S9796,在其中将作为将变量code的M个低阶位链接到变量code 0的M个低阶位的高阶侧的结果而获得的2M位设置在变量code中。随后,在下一步骤S9797执行的处理中,执行PTR解码处理。然后,在下一步骤S9798执行的处理中,将值OP_FLG设置在变量op中。
另一方面,作为表示针对M=16的选择性解码处理的流程图的、图38B所示的流程图从步骤S9781开始,在其中检查变量op的值。如果该变量的值为值OP_RAW,则处理流程继续到步骤S9782,在其中执行RAW解码处理。然后,在下一步骤S9783执行的处理中,将值OP_FLG设置在变量op中。另一方面,如果在步骤S9781执行的处理中发现该变量的值为值OP_PTR,则处理流程继续到步骤S9787,在其中执行PTR解码处理。然后,在下一步骤S9788执行的处理中,将值OP_FLG设置在变量op中。
图39示出了表示根据本发明实施例的代码信息更新处理过程的流程图。更新有关代码的信息的处理对应于在作为表示划分解码处理的流程图的图34中的步骤S977执行的处理。在步骤S9771执行的处理中,将变量code_offset的值加到变量code_count的值上,并且将其存储在变量code_count中。作为该加法的结果而获得的和的、存储在变量code_count中的和表示已被解码的编码字符的数目。
如上所述,将代码串划分成各自包括B个字符的多个块,并且以块为单位对代码串进行解码。应当注意,可以提供多个代码缓冲器,并且适当地选择其作为用于存储代码的缓冲器。在这种情况下,在对存储在代码缓冲器中的代码进行解码的同时,可以将另一代码存储在下一代码缓冲器中。
下面描述将说明根据本发明实施例的在编码处理中实现的具体典型压缩率。
图40是示出作为通过本发明的实施例实现的压缩率的、子字符串的压缩率的表。对于CODE代码的每个内容,存在2种用于子字符串的压缩率。在所述类型中的一种的情况下,压缩率是针对M=8而PTH=2的比率,其中M=8意味着每个字符8位,并且PTH=2意味着将匹配长度3分配给匹配长度代码0。另一方面,在另一类型的情况下,压缩率是针对M=16且PTH=1的比率,其中M=16意味着每个字符16位,并且PTH=1意味着将匹配长度2分配给匹配长度代码0。
将具有1位长度的FLG子代码与具有多位长度的CODE代码相组合,以形成子字符串的代码长度。由于压缩率被定义为作为将代码长度除以原始子字符串的长度的结果而获得的商,因此压缩率越小,则压缩率的效率越好。根据传统方法,可以将表达式(匹配长度-PTH-1)实现成多达15的CODE值。这样,最佳压缩率对于M=8是11.81%,并且对于M=16是6.25%。
为了解决该问题,本发明的实施例增加了匹配长度。结果,将最佳压缩率改进得更小,对于M=8减至0.12%,并且对于M=16减至0.06%。然而,如果从开头就不存在具有大匹配长度的字符串,则低压缩率是不适用的。这样,必需具有其中存在具有大匹配长度的字符串的输入数据。
程序包括指令代码和诸如变量的初始值的数据。一般而言,以可以容易地管理指令代码和数据的方式将程序存储在存储器中。在正常情况下,将数据存储在紧接在指令代码的存储位置之后的位置。由于指令代码被识别为短的子字符串,因此可以预期,短的最大匹配子字符串的出现频率具有较大值。另外,在一定程度上,以模板的形式由编译器如用于C语言的编译器来生成指令代码,并且生成近似处理作为近似的指令代码。因此,在类似的功能中,指令代码几乎保持不变。在这种情况下,可以预期将指令代码分解成长的匹配字符串。
另外,在上述数据的情况下,很多变量的初始值是0。这样,在很多情况下,可以将数据分解成相对长的匹配字符串。在具有这样的特征的这种程序的情况下,可以预期通过应用由本发明提供的代码分配技术来改善压缩率。
图41是示出本发明实施例中的子字符串的最大匹配长度的典型分布的图。假定即使对于12位的相对位置NP、11位的匹配长度代码NC、8位的字符大小M、等于2的阈值PTH、以及2,000个字符的匹配长度,也可以分解程序。在这种情况下,通过采用LZSS方法将特定程序分解成子字符串,并且顺序地绘制子字符串的最大匹配长度,以产生分布。也就是说,横轴表示组成程序的子字符串的出现次序,并且纵轴表示子字符串的最大匹配长度。
将具有189,520字节大小的程序分解成52,590个子字符串。虽然大多数子字符串具有不超过20字符的匹配长度,但是显然的是,一些子字符串各自具有大于100字符的最大匹配长度。特别地,显然的是,在放置于程序的最后部分中的数据区域内看到最大数据长度。
当以M=8、PTH=2、NC=4并且NP=12对程序进行编码时,根据传统LZSS方法的压缩率是46.20%,但是根据本发明的压缩率是43.78%。在如上所述可以分解成具有大的最大匹配长度的子字符串的程序中,可以实现压缩率的改善。特别地,在具有大量的重复简单数据的程序的情况下,可以预期压缩率至少改善20%。
应当注意,作为所说明的代码的典型的位计数,已选择了等于4的NC以及等于12的NP。这样,PTR代码具有16位的长度。以M位为单位封装FLG子代码,其中记号M表示整数8或16。RAW代码是按照原样保持不变的原始字符。RAW代码也具有8或16位的长度。通过以这种方式将所有代码的位计数设为8的倍数,则无需不必要的位操作。这样,本发明所提供的技术适于诸如软件处理的处理。在本发明的实施例中,仅仅改变匹配长度向匹配长度代码c的分配,而NC=4保持原样。这样,不仅可以将程序分解成各自具有大的最大匹配长度的子字符串,还可以以各自具有等于位计数8的倍数的长度的单元,处理所得到的代码。结果,可以高速地执行软件处理。
图42是示出本发明实施例的由计算机系统执行以对程序进行解压缩的处理的典型应用的方框图。假定计算机系统具有通过系统总线340相互连接的处理器310、RAM 320和ROM330。
处理器310是用于通过使用RAM320作为工作区域来执行程序的部分。在很多情况下,计算机系统采用具有高速和大存储容量的SRAM作为RAM320。另一方面,计算机系统通常采用具有相对小存储容量的存储器如闪存作为ROM330。
让我们假定ROM330用于存储作为压缩程序代码332的压缩程序。在下面描述中,压缩程序被称为程序A。将压缩程序代码332一次性地(once)传输到包括在RAM320内的压缩程序缓冲器322。RAM320还用于预先存储用于对程序A进行解压缩的程序。用于对程序A进行解压缩的程序(被称为程序X)在该图中被示出为解压缩处理程序321。处理器310执行程序X,以便解压缩存储在压缩程序缓冲器322中的程序A,并且将作为解压缩的结果而获得的解压缩程序存储在解压缩程序缓冲器323中。
本发明所提供的解压缩处理可以应用于根据解压缩处理程序321的解压缩处理。也就是说,通过使用用于保存根据本发明实施例进行编码的程序A的压缩程序缓冲器322作为代码缓冲器210,并且使用解压缩程序缓冲器323作为解码缓冲器280,通过执行解压缩处理程序321来对程序A进行解压缩,其中解压缩处理程序321被称为程序X,其用于实现根据本发明实施例的解码方法。
如上所述,在通过执行预先存储在诸如闪存的外部存储器中然后传输到具有高速度的内部存储器的程序而激活的设备中,从外部存储器读出该程序的操作对激活时间具有显著影响。为了解决激活时间受影响的问题,预先以压缩状态将程序存储在外部存储器中,并且在传输到内部存储器之后,对其进行解压缩。以这种方式,可以以更高的速度执行处理。由于压缩原始程序所花费的时间一般比对压缩程序进行解压缩所花费的时间长,因此,总体上,可以预期缩短的激活时间,该激活时间仅仅包括执行解压缩处理所花费的时间。另外,同样在通过执行经过网络从外部源传输的程序而激活的设备中,可以通过在传输之前压缩程序来缩短传输时间。这样,以同样的方式也可以缩短激活时间。
如上所述,根据本发明的实施例,匹配长度编码部分160参考匹配长度扩展表150,以便根据存储在内部状态保存部分140中的内部状态,而动态地确定匹配长度和匹配长度代码之间的关系。同样地,匹配长度解码部分260参考匹配长度扩展表250,以便根据存储在内部状态保存部分240中的内部状态,而动态地确定匹配长度和匹配长度代码之间的关系。以这种方式,可以独立地将可由匹配长度代码表达的匹配长度从一个值转换到另一个值。
应当注意,本发明的实施例各自是用于实现本发明的实施例。这样,在权利要求中描述的发明元素对应于这些实施例的其相应元素。然而,本发明的范围不局限于这些实施例。也就是说,可以对这些实施例进行各种改变,只要该改变不脱离本发明的实质即可。
例如,在权利要求1中描述的字符串搜索部分、内部状态保存部分、匹配长度编码部分和码元串编码部分典型地分别对应于字符串搜索部分130、内部状态保存部分140、匹配长度编码部分160和字符串编码部分170。
在权利要求4中描述的匹配长度扩展部分典型地对应于匹配长度扩展表150。
在权利要求5中描述的解码缓冲器、代码获取部分、内部状态保存部分、匹配长度解码部分和码元串解码部分典型地分别对应于解码缓冲器280、代码获取部分230、内部状态保存部分240、匹配长度解码部分260和字符串解码部分270。
在权利要求8中描述的匹配长度扩展部分典型地对应于匹配长度扩展表250。
在权利要求9中描述的代码缓冲器控制部分典型地对应于代码缓冲器控制部分220。
在权利要求10中描述的解压缩程序缓冲器、压缩程序缓冲器、代码获取部分、内部状态保存部分、匹配长度解码部分和码元串解码部分典型地分别对应于解压缩程序缓冲器323、压缩程序缓冲器322、代码获取部分230、内部状态保存部分240、匹配长度解码部分260和字符串解码部分270。
在权利要求11或13中描述的发明元素对应于下面的其相应的实施例元素。在用于保存输入数据的数据缓冲器中的预定搜索范围内搜索以匹配用作输入数据的编码对象的子码元串的过程典型地对应于步骤S730。用于根据预定的内部状态而将匹配长度代码分配给作为用作输入数据的编码对象的子码元串在搜索处理中找到的子码元串的匹配长度的过程典型地对应于步骤S7511到S7517。用于根据匹配长度来更新内部状态的过程典型地对应于步骤S7521到S7525。用于基于子码元串的数据缓冲器中的相对地址并且基于匹配长度代码而对子码元串进行编码的过程典型地对应于步骤S757。
在权利要求12或14中描述的发明元素如下对应于其相应的实施例元素。用于获取包括子码元串中的相对地址并且包括匹配长度代码的子码元串的过程典型地对应于步骤S880。用于根据预定的内部状态将表示子码元串长度的匹配长度代码解码成匹配长度的过程典型地对应于步骤S8931到S8935。用于根据作为解码处理的结果而获得的匹配长度来更新内部状态的过程典型地对应于步骤S8941到S8945。用于基于子码元串中的相对地址并且基于匹配长度而通过参考解码缓冲器对与子码元串代码相对应的子码元串进行解码的过程典型地对应于步骤S895。
应当注意,可以将在本发明实施例的描述中说明的处理过程解释成包括一系列这样的过程的方法。作为可选方案,可以将这样的处理过程解释成由计算机执行以实现一系列这样的过程的程序、以及用于存储该程序的记录介质。
另外,本领域的技术人员应当理解,根据设计要求及其他因素,可以进行各种修改、组合、子组合和变更,只要它们在所附权利要求或其等效物的范围之内即可。
Claims (15)
1.一种编码设备,包括:
码元串搜索装置,用于在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作所述输入数据的编码对象的子码元串相匹配的状态;
内部状态保存装置,用于保存预定的内部状态;
匹配长度编码装置,用于根据由所述内部状态保存装置保存的内部状态,在分配处理中将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理结果而由所述码元串搜索装置检测的匹配状态中的所述子码元串的长度,然后根据所述匹配长度,更新由所述内部状态保存装置保存的所述内部状态;以及
码元串编码装置,用于基于作为搜索处理结果而由所述码元串搜索装置检测的匹配状态中的所述子码元串的位置,并且基于由所述匹配长度编码装置分配的所述匹配长度代码,而对所述子码元串进行编码。
2.根据权利要求1的编码设备,其中所述匹配长度编码装置用于:
如果所述匹配长度代码小于预定阈值,则将由所述内部状态保存装置保存的内部状态重置为最低级;
如果所述匹配长度代码等于最大值,则驱动由所述内部状态保存装置保存的内部状态,以便转变到更高级;或者
如果所述匹配长度代码至少等于所述预定阈值但小于所述最大值,则驱动由所述内部状态保存装置保存的内部状态,以便转变到更低级。
3.根据权利要求1的编码设备,其中所述匹配长度编码装置用于:
如果所述匹配长度代码小于预定阈值,则在分配处理中,将为匹配长度确定的代码作为所述匹配长度代码分配给所述匹配长度,而与由所述内部状态保存装置保存的内部状态无关;或者
如果所述匹配长度代码等于或大于所述预定阈值,则在分配处理中,依赖于由所述内部状态保存装置保存的内部状态并且依赖于所述匹配长度,将为匹配长度确定的代码作为所述匹配长度代码分配给所述匹配长度。
4.根据权利要求1的编码设备,所述编码设备还具有匹配长度扩展装置,其用于将匹配长度和要分配给所述匹配长度的匹配长度代码之间的关系设置为根据由所述内部状态保存装置保存的内部状态的关系,其中所述匹配长度编码装置用于:
如果所述匹配长度代码小于预定阈值,则在分配处理中将为匹配长度确定的代码作为所述匹配长度代码分配给所述匹配长度,而与由所述内部状态保存装置保存的内部状态无关;或者
如果所述匹配长度代码等于或大于所述预定阈值,将由所述匹配长度扩展装置为匹配长度确定的代码作为所述匹配长度代码分配给所述匹配长度。
5.一种解码设备,包括:
解码缓冲器,用于保存作为对代码串进行解码处理的结果而获得的子码元串;
代码缓冲器,用于保存要被解码的所述代码串;
代码获取装置,用于从所述代码缓冲器获取子码元串代码,其包括所述子码元串的位置并且包括所述子码元串的匹配长度代码;
内部状态保存装置,用于保存预定的内部状态;
匹配长度解码装置,用于根据由所述内部状态保存装置保存的内部状态,在解码处理中对所述匹配长度代码进行解码,以生成由所述匹配长度代码表示的匹配长度,作为表示所述子码元串的长度的匹配长度,并然后根据所述匹配长度来更新由所述内部状态保存装置保存的所述内部状态;以及
码元串解码装置,用于根据所述子码元串的所述位置并且根据所述子码元串的所述匹配长度代码,在解码处理中通过参考所述解码缓冲器来对所述子码元串代码进行解码,以生成由所述子码元串代码表示的所述子码元串。
6.根据权利要求5的解码设备,其中所述匹配长度解码装置用于:
如果所述匹配长度代码小于预定阈值,则将由所述内部状态保存装置保存的内部状态重置为最低级;
如果所述匹配长度代码等于最大值,则驱动由所述内部状态保存装置保存的内部状态,以便转变到更高级;或者
如果所述匹配长度代码至少等于所述预定阈值但小于所述最大值,则驱动由所述内部状态保存装置保存的内部状态,以便转变到更低级。
7.根据权利要求5的解码设备,其中所述匹配长度解码装置用于:
如果所述匹配长度代码小于预定阈值,则在解码处理中对匹配长度代码进行解码,以生成为所述匹配长度代码确定的匹配长度,作为子码元串的长度,而与由所述内部状态保存装置保存的内部状态无关;或者
如果所述匹配长度代码等于或大于所述预定阈值,则在解码处理中,根据由所述内部状态保存装置保存的内部状态并且根据所述匹配长度代码,对匹配长度代码进行解码,以生成为所述匹配长度代码确定的匹配长度,作为子码元串的长度。
8.根据权利要求5的解码设备,其中所述解码设备还具有匹配长度扩展装置,其用于将匹配长度代码和作为对所述匹配长度代码进行解码处理的结果而获得的匹配长度之间的关系设置为根据由所述内部状态保存装置保存的内部状态的关系,其中所述匹配长度解码装置用于:
如果所述匹配长度代码小于预定阈值,则在解码处理中,对匹配长度代码进行解码,以生成为所述匹配长度代码确定的匹配长度,作为子码元串的长度,而与由所述内部状态保存装置保存的内部状态无关;或
如果所述匹配长度代码等于或大于所述预定阈值,则对匹配长度代码进行解码,以生成由所述匹配长度扩展装置为所述匹配长度代码确定的匹配长度。
9.根据权利要求5的解码设备,其中所述解码设备还具有代码缓冲器控制装置,其用于对以块单元将所述代码串提供给所述代码缓冲器执行控制,其中每当对所述块单元中的一个进行解码时,所述匹配长度解码装置将有关接下来要被执行的处理的信息预先存储在存储装置中,然后根据所述存储的有关接下来要被执行的所述处理的信息,而对所述块单元中的下一个进行解码。
10.一种压缩程序解压缩设备,包括:
解压缩程序缓冲器,用于保存作为对压缩程序进行解压缩处理的结果而获得的子码元串;
压缩程序缓冲器,用于保存要被解压缩的所述压缩程序;
代码获取装置,用于从所述压缩程序缓冲器获取子码元串代码,其包括所述子码元串的位置并且包括所述子码元串的匹配长度代码;
内部状态保存装置,用于保存预定的内部状态;
匹配长度解码装置,用于根据由所述内部状态保存装置保存的内部状态,在解码处理中对所述匹配长度代码进行解码,以生成表示所述子码元串的长度的匹配长度,然后根据所述匹配长度来更新由所述内部状态保存装置保存的所述内部状态;以及
码元串解码装置,用于根据所述子码元串的所述位置并且根据所述子码元串的所述匹配长度代码,在解码处理中通过参考所述解压缩程序缓冲器来对所述子码元串代码进行解码,以生成由所述子码元串代码表示的所述子码元串。
11.一种编码方法,包括以下步骤:
在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作所述输入数据的编码对象的子码元串相匹配的状态;
根据预定的内部状态,在分配处理中,将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理的结果而检测到的匹配状态中的所述子码元串的长度;
根据所述匹配长度来更新所述内部状态;以及
基于作为搜索处理的结果而检测到的匹配状态中的所述子码元串的位置的、包括在所述数据缓冲器内的位置的相对地址,并且基于所述匹配长度代码,而对所述子码元串进行编码。
12.一种解码方法,其用于在代码解码处理中对保存在代码缓冲器中的代码串进行解码,并且将作为所述代码解码处理的结果而获得的子码元串存储到解码缓冲器中,所述解码方法包括以下步骤:
从所述代码缓冲器获取子码元串代码,其包括所述子码元串的相对地址并且包括所述子码元串的匹配长度代码;
根据预定的内部状态,在长度解码处理中对所述匹配长度代码进行解码,以生成表示所述子码元串的长度的匹配长度;
根据作为所述长度解码处理的结果而获得的所述匹配长度来更新所述内部状态;以及
根据所述子码元串的所述相对地址并且根据所述子码元串的所述匹配长度代码,在串解码处理中,通过参考所述解码缓冲器来对所述子码元串代码进行解码,以生成由所述子码元串代码表示的所述子码元串。
13.一种程序,其由计算机执行以便实现以下步骤:
在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作所述输入数据的编码对象的子码元串相匹配的状态;
根据预定的内部状态,在分配处理中,将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理的结果而检测到的匹配状态中的所述子码元串的长度;
根据所述匹配长度来更新所述内部状态;以及
基于作为搜索处理的结果而检测到的匹配状态中的所述子码元串的位置的、包括在所述数据缓冲器内的位置的相对地址,并且基于所述匹配长度代码,而对所述子码元串进行编码。
14.一种程序,其由计算机执行,以便在代码解码处理中,对保存在代码缓冲器中的代码串进行解码,并且将作为所述代码解码处理的结果而获得的子码元串存储到解码缓冲器中,所述程序包括以下步骤:
从所述代码缓冲器获取子码元串代码,其包括所述子码元串的相对地址并且包括所述子码元串的匹配长度代码;
根据预定的内部状态,在长度解码处理中对所述匹配长度代码进行解码,以生成表示所述子码元串的长度的匹配长度;
根据作为所述长度解码处理的结果而获得的所述匹配长度来更新所述内部状态;以及
根据所述子码元串的所述相对地址并且根据所述子码元串的所述匹配长度代码,在串解码处理中,通过参考所述解码缓冲器来对所述子码元串代码进行解码,以生成由所述子码元串代码表示的所述子码元串。
15.一种编码设备,包括:
码元串搜索部分,用于在用于保存输入数据的数据缓冲器的预定搜索范围内搜索与用作所述输入数据的编码对象的子码元串相匹配的状态;
内部状态保存部分,用于保存预定的内部状态;
匹配长度编码部分,用于根据由所述内部状态保存部分保存的内部状态,在分配处理中将匹配长度代码分配给匹配长度,其中该匹配长度表示作为搜索处理结果而由所述码元串搜索部分检测到的匹配状态中的所述子码元串的长度,并然后根据所述匹配长度,而更新由所述内部状态保存部分保存的所述内部状态;以及
码元串编码部分,用于基于作为搜索处理结果而由所述码元串搜索部分检测的匹配状态中的所述子码元串的位置,并且基于由所述匹配长度编码部分分配的所述匹配长度代码,而对所述子码元串进行编码。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005117604A JP2006295853A (ja) | 2005-04-14 | 2005-04-14 | 符号化装置、復号装置、および、符号化方法ならびに復号方法 |
JP117604/05 | 2005-04-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1848692A true CN1848692A (zh) | 2006-10-18 |
CN1848692B CN1848692B (zh) | 2012-07-18 |
Family
ID=37078087
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006100754409A Expired - Fee Related CN1848692B (zh) | 2005-04-14 | 2006-04-14 | 编码设备、解码设备、编码方法和解码方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7253752B2 (zh) |
JP (1) | JP2006295853A (zh) |
CN (1) | CN1848692B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110868222A (zh) * | 2019-11-29 | 2020-03-06 | 中国人民解放军战略支援部队信息工程大学 | Lzss压缩数据误码检测方法及装置 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4814999B2 (ja) * | 2008-01-31 | 2011-11-16 | 富士通株式会社 | データ圧縮・復元方法及び圧縮・復元プログラム |
WO2012069886A1 (en) * | 2010-11-26 | 2012-05-31 | Nokia Corporation | Coding of strings |
CN111131818B (zh) | 2014-10-01 | 2023-05-26 | 株式会社Kt | 对视频信号进行解码的方法和对视频信号进行编码的方法 |
US9564917B1 (en) * | 2015-12-18 | 2017-02-07 | Intel Corporation | Instruction and logic for accelerated compressed data decoding |
CN107066116B (zh) * | 2017-04-13 | 2021-07-30 | 海信视像科技股份有限公司 | 字符串生成方法、字符解析方法及装置 |
CN109428603A (zh) * | 2017-08-30 | 2019-03-05 | 前海中科芯片控股(深圳)有限公司 | 一种数据编码方法、装置以及存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05197519A (ja) * | 1991-06-12 | 1993-08-06 | Sony Corp | データ圧縮方法及び装置 |
JP3127016B2 (ja) * | 1991-11-14 | 2001-01-22 | 富士通株式会社 | データ圧縮及び復元方法 |
CA2077271C (en) * | 1991-12-13 | 1998-07-28 | David J. Craft | Method and apparatus for compressing data |
JP3397431B2 (ja) * | 1994-03-16 | 2003-04-14 | 富士通株式会社 | データ圧縮方法および装置ならびにデータ復元方法および装置 |
US5564045A (en) * | 1994-07-28 | 1996-10-08 | Motorola, Inc. | Method and apparatus for string searching in a linked list data structure using a termination node at the end of the linked list |
JP2910639B2 (ja) * | 1994-10-04 | 1999-06-23 | 日本電気株式会社 | データ圧縮装置 |
JPH0964753A (ja) * | 1995-08-29 | 1997-03-07 | Casio Comput Co Ltd | データ圧縮装置、及びデータ伸長装置 |
JP3273119B2 (ja) * | 1995-09-29 | 2002-04-08 | 京セラ株式会社 | データ圧縮・伸長装置 |
JP3541930B2 (ja) * | 1998-08-13 | 2004-07-14 | 富士通株式会社 | 符号化装置及び復号化装置 |
JP3839604B2 (ja) * | 1998-12-22 | 2006-11-01 | 株式会社東芝 | データ処理方法 |
JP2004120251A (ja) * | 2002-09-25 | 2004-04-15 | Kawasaki Microelectronics Kk | データ圧縮方法 |
EP1578020B1 (en) * | 2002-12-26 | 2014-08-27 | Fujitsu Limited | Data compressing method, program and apparatus |
US7609722B2 (en) * | 2003-02-14 | 2009-10-27 | Atheros Communications, Inc. | Method and apparatus for transmitting and receiving compressed frame of data over a wireless channel |
-
2005
- 2005-04-14 JP JP2005117604A patent/JP2006295853A/ja active Pending
-
2006
- 2006-04-12 US US11/279,526 patent/US7253752B2/en not_active Expired - Fee Related
- 2006-04-14 CN CN2006100754409A patent/CN1848692B/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110868222A (zh) * | 2019-11-29 | 2020-03-06 | 中国人民解放军战略支援部队信息工程大学 | Lzss压缩数据误码检测方法及装置 |
CN110868222B (zh) * | 2019-11-29 | 2023-12-15 | 中国人民解放军战略支援部队信息工程大学 | Lzss压缩数据误码检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US7253752B2 (en) | 2007-08-07 |
JP2006295853A (ja) | 2006-10-26 |
US20070146173A1 (en) | 2007-06-28 |
CN1848692B (zh) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1848692A (zh) | 编码设备、解码设备、编码方法、解码方法和程序 | |
CN1099766C (zh) | 数据压缩方法、数据复原方法及信息处理装置 | |
CN1096752C (zh) | 自适应编码方法 | |
CN1264089C (zh) | 编译设备和编译方法 | |
CN1171459C (zh) | 图像编码装置及图像译码装置 | |
CN1187716C (zh) | 用于编码和解码关键字数据的装置和方法 | |
CN101069354A (zh) | 信息压缩编码装置、其解码装置、及其方法和程序以及记录介质 | |
CN1159854C (zh) | 交织地址生成装置及其方法 | |
CN101039422A (zh) | 图像编码装置、图像解码装置及它们的控制方法 | |
CN1097226C (zh) | 编译程序器 | |
CN1226039A (zh) | 指数计算装置和解码装置 | |
CN1630202A (zh) | 编码设备、程序和数据处理方法 | |
CN1284791A (zh) | 编码器 | |
CN1552032A (zh) | 数据库 | |
CN1222997A (zh) | 音频信号编码方法、解码方法,及音频信号编码装置、解码装置 | |
CN1515077A (zh) | 数字地图形状矢量编码方法和位置信息发送方法 | |
CN1613188A (zh) | 霍夫曼编码 | |
CN1669071A (zh) | 用于在音频代码的编码/解码处理之间转换代码的方法和装置以及使用该方法和装置的存储介质 | |
CN101078994A (zh) | 编译器装置、编译器方法和编译器程序 | |
CN1390391A (zh) | 并行涡轮编码器实施方案 | |
CN1160667C (zh) | 轮廓平滑化处理方法及其装置 | |
CN1314208C (zh) | 可扩展标记语言数据流压缩器及其压缩方法 | |
CN1144178C (zh) | 音频信号编码装置和译码装置以及音频信号编码和译码方法 | |
CN1187902C (zh) | 解码设备 | |
CN1194295C (zh) | 程序变换装置及程序变换方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20061018 |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120718 Termination date: 20140414 |