(57)【特許請求の範囲】
【請求項１】
圧縮対象データをデフレート圧縮することによって、前記圧縮対象データに対応する圧縮データを生成する圧縮デバイスと、
前記圧縮データを伸長することによって、前記圧縮データに対応する伸長データを出力する伸長デバイスと、
を備え、
前記伸長デバイスは、
ＦＩＦＯバッファと、
前記圧縮データに含まれるハフマン符号を順次復号して、前記圧縮データに対応する復号データを前記ＦＩＦＯバッファに入力する復号ユニットと、
前記復号ユニットから前記ＦＩＦＯバッファへの入力順に前記ＦＩＦＯバッファから入力される、前記復号データに対する伸長処理を実行することにより、前記伸長データを出力する伸長ユニットであって、前記伸長処理として、前記ＦＩＦＯバッファからの前記復号データがスライド辞書に対する参照記号を表す場合には、前記参照記号から特定される前記スライド辞書内のデータを前記伸長データとして出力し、前記復号データがリテラル値である場合には、前記リテラル値を前記伸長データとして出力する処理を実行する伸長ユニットと、
を備え、
前記圧縮デバイスは、
前記圧縮対象データをブロック毎に決定された符号化方式でデフレート圧縮する圧縮ユニットと、
前記圧縮ユニットによりデフレート圧縮される各ブロックを順に注目ブロックに選択し、前記注目ブロックの符号化方式を決定する決定ユニットと、
前記決定ユニットが前記注目ブロックの符号化方式をカスタムハフマン符号化方式に決定して前記圧縮ユニットが前記注目ブロックを前記カスタムハフマン符号化方式によりデフレート圧縮した場合に、前記伸長デバイスにおいて前記注目ブロックの復号の開始前に実行される前記注目ブロックの前処理であって前記注目ブロックの前に復号される先行ブロックの復号完了後に実行される前記前処理の実行時間である前記注目ブロックの前処理時間を推定する前処理時間推定ユニットと、
前記伸長デバイスによる前記先行ブロックの復号完了時点から前記先行ブロックに対する前記伸長処理が完了するまでに要する時間である前記先行ブロックの伸長時間を推定する伸長時間推定ユニットと、
を備え、
前記決定ユニットは、前記伸長時間推定ユニットにより推定された前記先行ブロックの前記伸長時間が前記前処理時間推定ユニットにより推定された前記注目ブロックの前記前処理時間より長い場合には、前記注目ブロックの符号化方式をカスタムハフマン符号化方式に決定し、前記先行ブロックの前記伸長時間が前記注目ブロックの前記前処理時間より短い場合には、前記注目ブロックの符号化方式を固定ハフマン符号化方式に決定し、
前記圧縮ユニットは、前記圧縮対象データを前記ブロック毎に、前記決定ユニットにより決定された符号化方式でデフレート圧縮すること
を特徴とするデータ処理システム。
【請求項２】
圧縮対象データをデフレート圧縮することによって、前記圧縮対象データに対応する圧縮データを生成する圧縮デバイスと、
前記圧縮データを伸長することによって、前記圧縮データに対応する伸長データを出力する伸長デバイスと、
を備え、
前記伸長デバイスは、
ＦＩＦＯバッファと、
前記圧縮データに含まれるハフマン符号を順次復号して、前記圧縮データに対応する復号データを前記ＦＩＦＯバッファに入力する復号ユニットと、
前記復号ユニットから前記ＦＩＦＯバッファへの入力順に前記ＦＩＦＯバッファから入力される、前記復号データに対する伸長処理を実行することにより、前記伸長データを出力する伸長ユニットであって、前記伸長処理として、前記ＦＩＦＯバッファからの前記復号データがスライド辞書に対する参照記号を表す場合には、前記参照記号から特定される前記スライド辞書内のデータを前記伸長データとして出力し、前記復号データがリテラル値である場合には、前記リテラル値を前記伸長データとして出力する処理を実行する伸長ユニットと、
を備え、
前記圧縮デバイスは、
前記圧縮対象データをブロック化する分割ユニットと、
前記圧縮対象データをブロック毎にカスタムハフマン符号化方式によりデフレート圧縮する圧縮ユニットと、
前記圧縮ユニットがデフレート圧縮している前記圧縮対象データ内の位置である圧縮位置において前記分割ユニットが前記圧縮対象データを分割し、当該分割によって前記圧縮対象データ内の分割位置より前に位置する先行ブロックのデフレート圧縮を前記圧縮ユニットが終了し、前記分割位置より後に位置する後続ブロックのデフレート圧縮を前記圧縮ユニットが開始した場合に、前記伸長デバイスにおいて前記後続ブロックの復号の開始前に実行される前記後続ブロックの前処理であって前記先行ブロックの復号完了後に実行される前記前処理の実行時間である前記後続ブロックの前処理時間を推定する前処理時間推定ユニットと、
前記伸長デバイスによる前記先行ブロックの復号完了時点から前記先行ブロックに対する前記伸長処理が完了するまでに要する時間である前記先行ブロックの伸長時間を推定する伸長時間推定ユニットと、
を備え、
前記分割ユニットは、前記先行ブロックの前記伸長時間及び前記後続ブロックの前記前処理時間に基づき、前記伸長時間と前記前処理時間との差が所定条件を満足しない場合には、前記圧縮位置で前記圧縮対象データを分割せず、前記所定条件を満足する場合に、前記圧縮位置で前記圧縮対象データを分割してブロック化し、
前記圧縮ユニットは、前記分割ユニットが前記圧縮対象データを分割した場合には、前記先行ブロックのデフレート圧縮を終了し、前記後続ブロックのデフレート圧縮を開始すること
を特徴とするデータ処理システム。
【請求項３】
前記分割ユニットは、前記伸長時間が前記前処理時間未満である場合には、前記差が前記所定条件を満足しないと判定して、前記圧縮位置で前記圧縮対象データを分割せず、前記伸長時間が前記前処理時間以上である場合には、前記差が前記所定条件を満足すると判定して、前記圧縮位置で前記圧縮対象データを分割してブロック化すること
を特徴とする請求項２記載のデータ処理システム。
【請求項４】
前記前処理時間推定ユニットは、前記前処理時間を、前記前処理の実行後に開始される前記復号に際して用いられるカスタムハフマン符号テーブルの符号割当数に基づき推定すること
を特徴とする請求項１記載のデータ処理システム。
【請求項５】
前記伸長時間推定ユニットは、前記先行ブロックの文字数と、前記先行ブロックの復号に要する時間を特定可能な前記先行ブロックに含まれる前記リテラル値の数及び前記参照記号の数と、に基づき、前記伸長時間を推定すること
を特徴とする請求項１〜請求項４のいずれか一項記載のデータ処理システム。
【請求項６】
圧縮対象データをデフレート圧縮することによって、伸長デバイスが伸長可能な圧縮データを生成する圧縮デバイスであって、
前記伸長デバイスは、前記圧縮データに含まれるハフマン符号を順次復号して、前記圧縮データに対応する復号データをＦＩＦＯバッファに入力し、前記ＦＩＦＯバッファへの入力順に前記ＦＩＦＯバッファから出力される前記復号データに対する伸長処理を実行することにより、前記圧縮データに対応する伸長データを出力するように構成され、前記伸長処理として、前記ＦＩＦＯバッファからの前記復号データがスライド辞書に対する参照記号を表す場合には、前記参照記号から特定される前記スライド辞書内のデータを前記伸長データとして出力し、前記復号データがリテラル値である場合には、前記リテラル値を前記伸長データとして出力する処理を実行するように構成された伸長デバイスであり、
前記圧縮デバイスは、
前記圧縮対象データをブロック毎に決定された符号化方式でデフレート圧縮する圧縮ユニットと、
前記圧縮ユニットによりデフレート圧縮される各ブロックを順に注目ブロックに選択し、前記注目ブロックの符号化方式を決定する決定ユニットと、
前記決定ユニットが前記注目ブロックの符号化方式をカスタムハフマン符号化方式に決定して前記圧縮ユニットが前記注目ブロックを前記カスタムハフマン符号化方式によりデフレート圧縮した場合に、前記伸長デバイスにおいて前記注目ブロックの復号の開始前に実行される前記注目ブロックの前処理であって前記注目ブロックの前に復号される先行ブロックの復号完了後に実行される前記前処理の実行時間である前記注目ブロックの前処理時間を推定する前処理時間推定ユニットと、
前記伸長デバイスによる前記先行ブロックの復号完了時点から前記先行ブロックに対する前記伸長処理が完了するまでに要する時間である前記先行ブロックの伸長時間を推定する伸長時間推定ユニットと、
を備え、
前記決定ユニットは、前記伸長時間推定ユニットにより推定された前記先行ブロックの前記伸長時間が前記前処理時間推定ユニットにより推定された前記注目ブロックの前記前処理時間より長い場合には、前記注目ブロックの符号化方式をカスタムハフマン符号化方式に決定し、前記先行ブロックの前記伸長時間が前記注目ブロックの前記前処理時間より短い場合には、前記注目ブロックの符号化方式を固定ハフマン符号化方式に決定し、
前記圧縮ユニットは、前記圧縮対象データを前記ブロック毎に、前記決定ユニットにより決定された符号化方式でデフレート圧縮すること
を特徴とする圧縮デバイス。
【請求項７】
圧縮対象データをデフレート圧縮することによって、伸長デバイスが伸長可能な圧縮データを生成する圧縮デバイスであって、
前記伸長デバイスは、前記圧縮データに含まれるハフマン符号を順次復号して、前記圧縮データに対応する復号データをＦＩＦＯバッファに入力し、前記ＦＩＦＯバッファへの入力順に前記ＦＩＦＯバッファから出力される前記復号データに対する伸長処理を実行することにより、前記圧縮データに対応する伸長データを出力するように構成され、前記伸長処理として、前記ＦＩＦＯバッファからの前記復号データがスライド辞書に対する参照記号を表す場合には、前記参照記号から特定される前記スライド辞書内のデータを前記伸長データとして出力し、前記復号データがリテラル値である場合には、前記リテラル値を前記伸長データとして出力する処理を実行するように構成された伸長デバイスであり、
前記圧縮デバイスは、
前記圧縮対象データをブロック化する分割ユニットと、
前記圧縮対象データをブロック毎にカスタムハフマン符号化方式によりデフレート圧縮する圧縮ユニットと、
前記圧縮ユニットがデフレート圧縮している前記圧縮対象データ内の位置である圧縮位置において前記分割ユニットが前記圧縮対象データを分割し、当該分割によって前記圧縮対象データ内の分割位置より前に位置する先行ブロックのデフレート圧縮を前記圧縮ユニットが終了し、前記分割位置より後に位置する後続ブロックのデフレート圧縮を前記圧縮ユニットが開始した場合に、前記伸長デバイスにおいて前記後続ブロックの復号の開始前に実行される前記後続ブロックの前処理であって前記先行ブロックの復号完了後に実行される前記前処理の実行時間である前記後続ブロックの前処理時間を推定する前処理時間推定ユニットと、
前記伸長デバイスによる前記先行ブロックの復号完了時点から前記先行ブロックに対する前記伸長処理が完了するまでに要する時間である前記先行ブロックの伸長時間を推定する伸長時間推定ユニットと、
を備え、
前記分割ユニットは、前記先行ブロックの前記伸長時間及び前記後続ブロックの前記前処理時間に基づき、前記伸長時間と前記前処理時間との差が所定条件を満足しない場合には、前記圧縮位置で前記圧縮対象データを分割せず、前記所定条件を満足する場合に、前記圧縮位置で前記圧縮対象データを分割してブロック化し、
前記圧縮ユニットは、前記分割ユニットが前記圧縮対象データを分割した場合には、前記先行ブロックのデフレート圧縮を終了し、前記後続ブロックのデフレート圧縮を開始すること
を特徴とする圧縮デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データを圧縮する及び伸長するデータ処理システムに関する。
【背景技術】
【０００２】
従来、デフレート（Ｄｅｆｌａｔｅ）圧縮アルゴリズムに従ってデータ圧縮を行う圧縮デバイス、及び、この圧縮デバイスにより生成された圧縮データを伸長する伸長デバイスが知られている（特許文献１参照）。
【０００３】
デフレート圧縮アルゴリズムは、ＬＺ７７及びＬＺＳＳ圧縮アルゴリズムに代表されるスライド辞書型圧縮アルゴリズムを内包する。スライド辞書型圧縮では、入力文字列が順に符号化される。入力文字列はバッファに一定量記憶保持される。スライド辞書は、バッファに記憶保持される文字列に対応する。符号化対象の文字列がスライド辞書内の文字列と一致する場合、その文字列は、スライド辞書への参照記号に変換されて符号化される。
【０００４】
圧縮アルゴリズムとしては、ハフマン符号を用いた圧縮アルゴリズムも知られている。デフレート圧縮アルゴリズムもハフマン符号を利用する。複数のハフマン符号テーブルを、切り替えて用いる圧縮デバイスも知られている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１５／０１９４８４号
【特許文献２】国際公開第２０１０／０１３２９０号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術によれば、デフレート圧縮された圧縮データを伸長する場合、符号展開部において圧縮データ内のハフマン符号を復号した後、スライド辞書を参照して復号データ内に含まれるスライド辞書への参照記号を、対応する文字列に伸長する。
【０００７】
しかしながら、ハフマン符号を復号する前段処理部、及び、スライド辞書に基づく伸長を行う後段処理部の内、後段処理部は、前段処理部によって復号されたデータがなければ、スライド辞書に基づく伸長を行うことができない。即ち、従来技術によれば、前段処理部による復号が滞ると、後段処理部による伸長処理も行うことができなくなる。
【０００８】
付言すれば、ハフマン符号を復号する際には、復号に必要なハフマン符号テーブルを生成する前処理が必要である。ハフマン符号化方式としては、固定ハフマン符号化方式とカスタムハフマン符号化方式とが知られている。
【０００９】
周知のように、カスタムハフマン符号化方式により圧縮されたデータの復号に必要な前処理の実行時間は、固定ハフマン符号化方式と比較してかなり長い。従来技術によれば、前処理の実行中には、後段処理部による伸長処理も行えない。このような前処理の非効率な実行は、伸長データの出力を遅延させる原因となる。
【００１０】
そこで、本開示の一側面においては、復号に先立って実行される前処理に起因して伸長データの出力が遅延するのを抑制可能な技術を提供できることが望ましい。
【課題を解決するための手段】
【００１１】
本開示の一側面に係るデータ処理システムは、圧縮対象データをデフレート圧縮することによって、圧縮対象データに対応する圧縮データを生成する圧縮デバイスと、圧縮データを伸長することによって、圧縮データに対応する伸長データを出力する伸長デバイスとを備える。
【００１２】
伸長デバイスは、ＦＩＦＯバッファと、復号ユニットと、伸長ユニットとを備える。復号ユニットは、圧縮データに含まれるハフマン符号を順次復号して、圧縮データに対応する復号データをＦＩＦＯバッファに入力する。伸長ユニットは、ＦＩＦＯバッファから入力される復号データに対する伸長処理を実行することにより、伸長データを出力する。復号データは、復号ユニットからＦＩＦＯバッファへの入力順に、ＦＩＦＯバッファから伸長ユニットに入力される。
【００１３】
伸長ユニットは、上記伸長処理として、ＦＩＦＯバッファからの復号データがスライド辞書に対する参照記号を表す場合には、参照記号から特定されるスライド辞書内のデータを伸長データとして出力し、復号データがリテラル値である場合には、リテラル値を伸長データとして出力する処理を実行する。
【００１４】
本開示の一側面において、圧縮デバイスは、圧縮ユニットと、決定ユニットと、前処理時間推定ユニットと、伸長時間推定ユニットとを備えた構成にされる。圧縮ユニットは、圧縮対象データをブロック毎に決定ユニットにより決定された符号化方式でデフレート圧縮する。決定ユニットは、圧縮ユニットによりデフレート圧縮される各ブロックを順に注目ブロックに選択し、注目ブロックの符号化方式を決定する。
【００１５】
決定ユニットは、伸長時間推定ユニットにより推定される、伸長デバイスによる先行ブロックの伸長時間、及び、前処理時間推定ユニットにより推定される、伸長デバイスによる注目ブロックの前処理時間に基づき、注目ブロックの符号化方式を決定する。
【００１６】
前処理時間推定ユニットは、決定ユニットが注目ブロックの符号化方式をカスタムハフマン符号化方式に決定して、これにより圧縮ユニットが注目ブロックをカスタムハフマン符号化方式によりデフレート圧縮した場合における、伸長デバイスによる注目ブロックの前処理時間を推定する。ここで推定される注目ブロックの前処理時間は、伸長デバイスにおいて注目ブロックの復号の開始前に実行される注目ブロックの前処理であって注目ブロックの前に復号される先行ブロックの復号完了後に実行される前処理の実行時間である。
【００１７】
伸長時間推定ユニットは、上記先行ブロックの伸長時間として、伸長デバイスによる先行ブロックの復号完了時点から先行ブロックに対する伸長処理が完了するまでに要する時間を推定する。
【００１８】
上述の決定ユニットは、この伸長時間推定ユニットにより推定された先行ブロックの伸長時間が前処理時間推定ユニットにより推定された注目ブロックの前処理時間より長い場合には、注目ブロックの符号化方式をカスタムハフマン符号化方式に決定し、先行ブロックの伸長時間が注目ブロックの前処理時間より短い場合には、注目ブロックの符号化方式を固定ハフマン符号化方式に決定するようにして、注目ブロックの符号化方式を決定する。
【００１９】
カスタムハフマン符号化方式では、固定ハフマン符号化方式より通常高いデータ圧縮率を得ることができる。但し、カスタムハフマン符号化方式により圧縮されたデータの復号に必要な前処理の実行時間は、固定ハフマン符号化方式により圧縮されたデータの復号に必要な前処理の実行時間よりかなり長い。そこで、本開示の一側面では、先行ブロックの伸長時間及び注目ブロックの前処理時間に基づき、注目ブロックの符号化方式を選択する。
【００２０】
本開示の一側面では、伸長デバイスがＦＩＦＯバッファを備えるので、復号ユニットから伸長ユニットに向けての復号データの提供が一時的に滞っても、伸長ユニットでは、ＦＩＦＯバッファに蓄積された復号データに基づく伸長処理を実行することができる。しかしながら、復号の前処理に時間を要すると、ＦＩＦＯバッファ内の復号データを伸長ユニットが伸長し終わった後もなお、復号ユニットによる復号が始まらないことになる。
【００２１】
このような事象は、先行ブロックの伸長時間が注目ブロックの前処理時間より短い場合に生じる。先行ブロックの伸長時間が注目ブロックの前処理時間より短い場合には、先行ブロックの伸長が終わるまでに、前処理が終わらず後続ブロックの復号が始まらないため、伸長ユニットで、復号ユニットからの復号データの待ち動作が発生することになる。このような待ち動作は、非効率な伸長の原因となり、伸長データの出力に遅延を生じさせる。
【００２２】
本開示の一側面では、こうした非効率な伸長を抑えるために、データ圧縮の符号化方式を選択している。従って、本開示の一側面に係るデータ処理システムによれば、復号に先立って実行される前処理に起因して伸長データの出力が遅延するのを抑制することできる。
【００２３】
本開示の一側面において、データ処理システムは、分割ユニットと、圧縮ユニットと、前処理時間推定ユニットと、伸長時間推定ユニットとを備える圧縮デバイス、を備えた構成にされてもよい。
【００２４】
この圧縮デバイスにおいて、分割ユニットは、圧縮対象データをブロック化する。圧縮ユニットは、圧縮対象データをブロック毎にカスタムハフマン符号化方式によりデフレート圧縮する。前処理時間推定ユニットは、圧縮ユニットがデフレート圧縮している圧縮対象データ内の位置である圧縮位置において分割ユニットが圧縮対象データを分割し、当該分割によって圧縮対象データ内の分割位置より前に位置する先行ブロックのデフレート圧縮を圧縮ユニットが終了し、分割位置より後に位置する後続ブロックのデフレート圧縮を圧縮ユニットが開始した場合における、伸長デバイスによる後続ブロックの前処理時間を推定する。ここで推定される後続ブロックの前処理時間は、伸長デバイスにおいて後続ブロックの復号の開始前に実行される後続ブロックの前処理であって先行ブロックの復号完了後に実行される前処理の実行時間である。
【００２５】
伸長時間推定ユニットは、伸長デバイスによる先行ブロックの復号完了時点から先行ブロックに対する伸長処理が完了するまでに要する時間である先行ブロックの伸長時間を推定する。
【００２６】
この圧縮デバイスにおいて、分割ユニットは、先行ブロックの伸長時間及び後続ブロックの前処理時間に基づき、伸長時間と前処理時間との差が所定条件を満足しない場合には、圧縮位置で圧縮対象データを分割せず、所定条件を満足する場合に、圧縮位置で圧縮対象データを分割してブロック化するように構成される。圧縮ユニットは、分割ユニットが圧縮対象データを分割した場合には、先行ブロックのデフレート圧縮を終了し、後続ブロックのデフレート圧縮を開始するように構成される。
【００２７】
本開示の一側面において、分割ユニットは、伸長時間が前処理時間未満である場合には、差が上記所定条件を満足しないと判定して、圧縮位置で圧縮対象データを分割せず、伸長時間が前処理時間以上である場合には、差が所定条件を満足すると判定して、圧縮位置で圧縮対象データを分割してブロック化するように構成にされる。
【００２８】
伸長時間と前処理時間とが同一である場合には、前処理のために復号ユニットからＦＩＦＯバッファへの復号データの入力が停止したときに、伸長ユニットがＦＩＦＯバッファに蓄積された復号データに対する伸長処理を完了するタイミングで、復号ユニットにおける前処理の実行が終了して復号データのＦＩＦＯバッファへの入力が再開される。
【００２９】
換言すれば、伸長時間が前処理時間未満であるときには、復号ユニットにおいて前処理の実行が終了するまでの期間に、伸長ユニットで伸長処理が完了し、復号データの待ち動作が発生することになる。このような待ち動作は、非効率な伸長の原因となり、伸長データの出力に遅延を生じさせる。
【００３０】
上述した圧縮デバイスによれば、このような待ち動作の発生を抑えるように、圧縮対象データをデフレート圧縮することができる。従って、復号の前処理に起因して伸長データの出力が遅延するのを抑制することができる。
【００３１】
ところで、前処理時間は、前処理の実行後に開始される復号に際して用いられるカスタムハフマン符号テーブルのサイズ、即ち、カスタムハフマン符号テーブルにおける符号割当数によって変化し得る。
【００３２】
従って、本開示の一側面によれば、前処理時間推定ユニットは、前処理時間を、前処理の実行後に開始される復号に際して用いられるカスタムハフマン符号テーブルの符号割当数に基づき推定するように構成されてもよい。このように構成された前処理時間推定ユニットによれば、より正確に前処理時間を推定可能である。
【００３３】
本開示の一側面において、伸長時間推定ユニットは、先行ブロックの文字数と、先行ブロックの復号に要する時間を特定可能な先行ブロックに含まれるリテラル値の数及び参照記号の数と、に基づき、伸長時間を推定するように構成されてもよい。こうした伸長時間の推定方法によれば、伸長前のデータ圧縮時において、適切に伸長時間を推定することができる。本開示の一側面によれば、上述した圧縮デバイス及び伸長デバイスは、夫々個別に提供されてもよい。
【図面の簡単な説明】
【００３４】
【図１】電子機器の構成を表すブロック図である。
【図２】図２Ａは、圧縮デバイスの構成を表すブロック図であり、図２Ｂは、伸長デバイスの構成を表すブロック図である。
【図３】圧縮データの概略構成を表す図である。
【図４】符号展開部から文字解決部へのデータ転送を説明した図である。
【図５】第一実施例における圧縮処理を表すフローチャート（その１）である。
【図６】第一実施例における圧縮処理を表すフローチャート（その２）である。
【図７】前処理時間の算出方法に関する説明図である。
【図８】図８Ａ−８Ｃは、符号化方式の切り替えと待ち動作との関係を説明した図である。
【図９】第二実施例における圧縮処理の後半を表すフローチャートである。
【図１０】ブロック終端位置と待ち動作との関係を説明した図である。
【発明を実施するための形態】
【００３５】
以下に本発明の実施形態を図面と共に説明する。
［第一実施例］
本実施例の電子機器１は、メインデバイス１０と、圧縮伸長デバイス３０と、記憶デバイス９０とを備える。メインデバイス１０は、ＣＰＵ１１と、ＲＯＭ１３と、ＲＡＭ１５とを備える。ＲＯＭ１３は、ＣＰＵ１１が実行する各種プログラムを記憶する。ＲＡＭ１５は、プログラム実行時に作業領域として使用される。ＣＰＵ１１は、電子機器１全体を統括制御する。
【００３６】
電子機器１は、例えばディジタル複合機として構成される。この場合、メインデバイス１０は、電子機器１が備える図示しないスキャナ装置を制御して、原稿の読取画像を表す画像データを生成するための読取処理を実行する。更に、メインデバイス１０は、電子機器１が備える図示しないプリンタ装置を制御して、原稿の読取画像を表す画像データ又は外部装置から提供された印刷対象データに基づく画像を用紙に形成するための印刷処理を実行する。
【００３７】
圧縮伸長デバイス３０は、圧縮デバイス５０と、伸長デバイス７０とを備え、データの圧縮及び伸長を行うように構成される。圧縮デバイス５０は、電子機器１内で生成された圧縮対象データを圧縮するように構成される。圧縮後のデータである圧縮データは、記憶デバイス９０に保存される。あるいは、圧縮データは、外部装置に通信により提供される。記憶デバイス９０は、例えばハードディスク装置又はフラッシュメモリで構成される。
【００３８】
伸長デバイス７０は、外部装置から入力される圧縮データ、又は、記憶デバイス９０が記憶する圧縮データを伸長するように構成される。圧縮データを伸長して生成される伸長データは、メインデバイス１０に提供される。電子機器１がディジタル複合機である場合、伸長データは、例えばメインデバイス１０により実行される印刷処理に供される。
【００３９】
本実施例の圧縮デバイス５０は、圧縮対象データをデフレート圧縮するように構成される。周知のようにデフレート圧縮は、ＬＺ７７又はＬＺ７７系のＬＺＳＳとハフマン符号化とを組み合わせた可逆データ圧縮である。この圧縮方式は、ｚｉｐファイル及びｇｚｉｐファイルに採用されている。
【００４０】
ＬＺ７７又はＬＺＳＳは、同じ文字列が再登場した場合には、同一文字列を、Ｄ文字戻ってＬ文字コピーするというコピー記号［Ｌ，Ｄ］を用いて符号化するスライド辞書型の圧縮方式である。以下では、ＬＺ７７系に基づくデータ圧縮のことを辞書型圧縮と表現し、ハフマン符号化によるデータ圧縮のことをハフマン符号圧縮と表現する。
【００４１】
圧縮デバイス５０は、図２Ａに示すように第一圧縮部５１と、出現頻度テーブル５３と、第二圧縮部５５とを備え、第一圧縮部５１が圧縮対象データの辞書型圧縮を行うように構成される。第一圧縮部５１は、圧縮対象データとして入力される文字列を入力順に符号化する。入力文字列は、バッファとしてのスライド辞書５１Ａに一定量記憶保持される。
【００４２】
第一圧縮部５１は、入力文字列がスライド辞書５１Ａ内の文字列と一致しない場合には、入力文字列をそのままリテラル値として出力し、入力文字列がスライド辞書５１Ａ内の文字列と一致する場合には、その文字列をコピー記号に置換するようにして、入力文字列を符号化して出力する。コピー記号は、スライド辞書５１Ａへの参照記号に対応する。第一圧縮部５１からの出力データは、圧縮対象データに対応する中間データとして、第二圧縮部５５に入力される。中間データは、圧縮対象データに対応するリテラル値及びコピー記号を含む。
【００４３】
第二圧縮部５５は、第一圧縮部５１から入力される中間データをハフマン符号化して、これを圧縮データとして出力する。第二圧縮部５５は、入力される中間データを、ブロック毎に符号化方式を切り替えて圧縮する。符号化方式は、非圧縮方式、固定ハフマン符号化方式、及び、カスタムハフマン符号化方式を含む。
【００４４】
非圧縮方式により圧縮データを生成する場合、第二圧縮部５５は、中間データをハフマン符号化せずに圧縮データ（非圧縮ブロック）として出力する。固定ハフマン符号化方式により圧縮データを生成する場合、第二圧縮部５５は、固定ハフマン符号テーブルに従って中間データをハフマン符号化して、ハフマン符号化後の中間データを圧縮データ（固定ハフマン符号ブロック）として出力する。
【００４５】
カスタムハフマン符号化方式により圧縮データを生成する場合、第二圧縮部５５は、出現頻度テーブル５３に従ってブロック毎に動的なハフマン符号テーブルであるカスタムハフマン符号テーブルを生成する。第二圧縮部５５は、中間データを、このカスタムハフマン符号テーブルに従ってハフマン符号化し、ハフマン符号化後の中間データを圧縮データ（カスタムハフマン符号ブロック）として出力する。
【００４６】
圧縮デバイス５０が備える出現頻度テーブル５３は、圧縮対象データにおける各文字の出現頻度を表す。第一圧縮部５１は、入力文字列を処理する際、出現頻度テーブル５３を更新するように動作する。
【００４７】
このように構成される圧縮デバイス５０からは、図３に例示される構造の圧縮データが出力される。圧縮デバイス５０がブロック毎に符号化方式を切り替えることから、圧縮データは、非圧縮ブロック、固定ハフマン符号ブロック、及び、カスタムハフマン符号ブロックが混在した構成にされる。図３に示される破線は、破線の先端に示される部分が、破線の後端に示される固定ハフマン符号ブロックの続きであることを意味している。
【００４８】
カスタムハフマン符号の復号に際しては、ハフマン符号と符号化前の文字（平文）との対応関係を表すカスタムハフマン符号テーブルが必要である。符号化前文字は、本実施例の場合、中間データに含まれるリテラル値及びコピー記号である。
【００４９】
圧縮データにおいて、カスタムハフマン符号ブロックの前には、カスタムハフマン符号の復号に必要なカスタムハフマン符号テーブルを生成するための前処理データが含まれる。固定ハフマン符号ブロックの前にも前処理データが含まれるが、固定ハフマン符号ブロックの前に含まれる前処理データは、カスタムハフマン符号ブロックの前に含まれる前処理データに対して僅かであるため、ここでは、図示を省略する。
【００５０】
このような構成の圧縮データを伸長する伸長デバイス７０は、分岐部７１と、前処理部７３と、テーブル記憶部７４と、符号展開部７６と、ＦＩＦＯバッファ７７と、文字解決部７９とを備える。ＦＩＦＯバッファ７７は、周知のようにＦｉｒｓｔ−ｉｎ，Ｆｉｒｓｔ−ｏｕｔ型のバッファであり、入力データを、その入力順に出力するバッファである。
【００５１】
分岐部７１には、伸長対象の圧縮データを構成するコード列が順に入力される。分岐部７１は、入力されるコード列が前処理データに対応するか否かを判断し、入力されるコード列が前処理データに対応する場合には、前処理部７３にコード列を入力する。
【００５２】
分岐部７１は、入力されるコード列が前処理データ以外の復号対象データ、即ち、非圧縮ブロック、固定ハフマン符号ブロック、及びカスタムハフマン符号ブロックのいずれかに対応する場合には、符号展開部７６にコード列を入力する。
【００５３】
前処理部７３は、入力されるコード列としての前処理データに基づき、ハフマン符号の復号に先立つ前処理として、カスタムハフマン符号テーブル又は固定ハフマン符号テーブルを生成する処理を実行し、生成したハフマン符号テーブルをテーブル記憶部７４に記憶させる。
【００５４】
前処理部７３は、カスタムハフマン符号ブロックに先立って入力される前処理データに基づき、このカスタムハフマン符号ブロックの復号に必要なカスタムハフマン符号テーブルを作成してテーブル記憶部７４に記憶させる。前処理部７３は、固定ハフマン符号ブロックに先立って入力される前処理データに基づき、固定ハフマン符号ブロックの復号に必要な固定ハフマン符号テーブルを作成してテーブル記憶部７４に記憶させる。
【００５５】
符号展開部７６は、分岐部７１から入力されるコード列をテーブル記憶部７４が記憶するハフマン符号テーブルに基づき順に復号し、復号データを、ＦＩＦＯバッファ７７に入力する。符号展開部７６は、入力されるコード列が非圧縮ブロックに対応する場合には、その入力コード列を復号データとしてＦＩＦＯバッファ７７に入力する。符号展開部７６は、入力されるコード列が固定ハフマン符号ブロック又はカスタムハフマン符号ブロックに対応する場合には、その入力コード列（ハフマン符号）を復号し、その復号データを、ＦＩＦＯバッファ７７に入力する。
【００５６】
復号データは、圧縮デバイス５０において第一圧縮部５１から第二圧縮部５５に入力される中間データに対応する。復号データは、リテラル値及びコピー記号を含む。コピー記号は、文字解決部７９で復号される。
【００５７】
本実施例の符号展開部７６は、コピー記号を、コピー記号のまま文字解決部７９に入力するのが特徴的である。従来装置は、コピー記号を、コピー長Ｌに対応する文字数の未解決文字として文字解決部７９に入力するように構成される。
【００５８】
本実施例では、文字解決部７９での待ち動作を抑えるために、ＦＩＦＯバッファ７７を設けている。このＦＩＦＯバッファ７７に、コピー記号を展開してコピー長Ｌ分の未解決文字を入力することは、ＦＩＦＯバッファ７７による文字解決部７９での待ち動作の抑制効果を低減させる。ＦＩＦＯバッファ７７が未解決文字で大部分を埋め尽くされてしまう可能性があるためである。
【００５９】
本実施例では、図４に示すように、コピー記号を、そのままＦＩＦＯバッファ７７に入力し、このコピー記号を文字解決部７９に復号させることにより、ＦＩＦＯバッファ７７の効率的な利用を実現している。図４に示すように、符号展開部７６からは、非圧縮データ又はハフマン符号テーブルを用いた復号により生成されたリテラル値及びコピー記号が処理順にＦＩＦＯバッファ７７に入力される。ＦＩＦＯバッファ７７は、例えば、２５６から１０２４文字（バイト）分の記憶容量を有した構成にされる。
【００６０】
文字解決部７９は、スライド辞書７９Ａ（図２参照）を有する。文字解決部７９は、復号データに対する伸長処理として、ＦＩＦＯバッファ７７からの復号データがコピー記号を表す場合には、コピー記号が示すコピー長Ｌ及び戻り距離Ｄから特定されるスライド辞書７９Ａ内の文字列を伸長データとして出力し、復号データがリテラル値である場合には、復号データが表すリテラル値（平文）をそのまま伸長データとして出力する処理を実行するように構成される。
【００６１】
このようにして、伸長デバイス７０は、デフレート圧縮された圧縮データに含まれるハフマン符号を復号し、その復号データに含まれるコピー記号をスライド辞書７９Ａに基づき伸長するようにして、圧縮データに対応する伸長データを出力する。文字解決部７９が備えるスライド辞書７９Ａには、伸長データが一定量記憶される。
【００６２】
続いて、圧縮デバイス５０が実行する圧縮処理の詳細を、図５及び図６を用いて説明する。図５に示される圧縮処理の前段は、図２Ａに示す圧縮デバイス５０の第一圧縮部５１によって実現され、図６に示される圧縮処理の後段は、圧縮デバイス５０が有する第二圧縮部５５によって実現される。
【００６３】
圧縮デバイス５０は、圧縮処理を開始すると、圧縮対象データを所定規則により分割して定義される圧縮対象データ内のブロック毎に、Ｓ１１０〜Ｓ１７０の処理を実行する。圧縮デバイス５０は、圧縮処理を開始すると、先頭から順に入力される圧縮対象データを構成する文字列の一文字を受け付ける（Ｓ１１０）。そして、今回受け付けた文字から、それより前において連続する文字の一群によって構成される文字列と一致する文字列をスライド辞書５１Ａ内で検索する（Ｓ１２０）。
【００６４】
そして、スライド辞書５１Ａ内に一致する文字列がある場合には（Ｓ１３０でＹｅｓ）、Ｓ１４０に移行し、スライド辞書５１Ａ内の文字列に一致する文字列がない場合には、Ｓ１６０に移行する。
【００６５】
Ｓ１４０において、圧縮デバイス５０は、今回受け付けた文字が圧縮対象データにおける処理対象ブロックの終端文字又は圧縮対象データの終端文字であるか否かを判断する。処理対象ブロックは、今回受け付けた文字が所属するブロックに対応する。圧縮デバイス５０は、上記終端文字であると判断すると（Ｓ１４０でＹｅｓ）、Ｓ１６０に移行し、終端文字ではないと判断すると（Ｓ１４０でＮｏ）、Ｓ１５０に移行する。
【００６６】
Ｓ１５０において、圧縮デバイス５０は、一致文字列が最大長であるか否かを判断する。即ち、一致文字列の長さが、コピー長Ｌの最大値であるか否かを判断する。一致文字列が最大長であると判断すると（Ｓ１５０でＹｅｓ）、圧縮デバイス５０は、Ｓ１６０に移行する。圧縮デバイス５０は、一致文字列が最大長ではないと判断すると（Ｓ１５０でＮｏ）、Ｓ１１０に移行し、次の文字を受け付けてＳ１２０以降の処理を実行する。
【００６７】
Ｓ１６０に移行すると、圧縮デバイス５０は、前回の受け付け文字までにおいて、スライド辞書５１Ａ内の文字列と一致する文字列であってコピー記号に未変換の文字列をコピー記号に変換するように、処理対象ブロックの入力文字列を符号化する。即ち、該当する入力文字列を辞書型圧縮する。
【００６８】
Ｓ１６０での処理後、圧縮デバイス５０は、出現頻度テーブル５３が、処理対象ブロックにおける先頭から今回受け付けた文字までの各文字の出現頻度を表すように、出現頻度テーブル５３の内容を更新する（Ｓ１７０）。
【００６９】
その後、圧縮デバイス５０は、現在の処理位置がブロックの終端又は圧縮対象データの終端であるか否かを判断する（Ｓ１８０）。即ち、今回受け付けた文字がブロックの終端文字又は圧縮対象データの終端文字であるか否かを判断する。そして、現在の処理位置が終端であると判断すると（Ｓ１８０でＹｅｓ）、処理対象ブロックのＳ１６０における変換後のデータを該当ブロックの中間データに決定し、Ｓ２００に移行する。
【００７０】
Ｓ２００において、圧縮デバイス５０は、処理対象ブロックに対応するカスタムハフマン符号テーブルを、出現頻度テーブル５３における各文字の出現頻度から周知技術に従って作成する。
【００７１】
その後、圧縮デバイス５０は、処理対象ブロックの中間データをハフマン符号圧縮する必要があるか否かを判断する（Ｓ２１０）。具体的には、処理対象ブロックを固定ハフマン符号化方式及びカスタムハフマン符号化方式のいずれの方式によって符号化しても、符号化後のデータ量が符号化前のデータ量以上である場合には、ハフマン符号圧縮が不要であると判断する。それ以外の場合には、ハフマン符号圧縮が必要であると判断する。
【００７２】
ハフマン符号圧縮が不要であると判断すると（Ｓ２１０でＮｏ）、圧縮デバイス５０は、処理対象ブロックの中間データを、ハフマン符号化せずに非圧縮ブロックとして出力する（Ｓ２２０）。その後、Ｓ３２０に移行する。
【００７３】
Ｓ２１０においてハフマン符号圧縮が必要であると判断すると、圧縮デバイス５０は、処理対象ブロックの前処理時間Ｔｐを算出する（Ｓ２３０）。算出する前処理時間Ｔｐは、処理対象ブロックをＳ２００にて作成したカスタムハフマン符号テーブルに従ってカスタムハフマン符号化した場合に、伸長デバイス７０の前処理部７３で要する処理対象ブロックの復号に必要な前処理の実行時間に対応する。即ち、前処理時間Ｔｐは、伸長デバイス７０がハフマン符号化された処理対象ブロックの復号の開始前に実行する処理対象ブロックの前処理であって処理対象ブロックの一つ前のブロックである先行ブロックの復号完了後に実行する前処理の実行時間に対応する。
【００７４】
この前処理時間Ｔｐは、カスタムハフマン符号テーブルでの符号割当数Ｎ１に基づき算出可能である。カスタムハフマン符号テーブルにおいて全ての文字に符号が割り当てられているときの前処理時間Ｔ０を基準にすると、Ｓ２００で作成されたカスタムハフマン符号テーブルに基づくカスタムハフマン符号の復号に際する前処理時間Ｔｐは、式Ｔｐ＝Ｔ０−Ｋ・（Ｎ０−Ｎ１）に従って算出することができる。ここで、値Ｎ０は、カスタムハフマン符号テーブルにおいて全ての文字に符号が割り当てられるときの符号割当数である。係数Ｋは、カスタムハフマン符号テーブルにおいて、符号割当数が１減少したときの前処理時間の減少量である。
【００７５】
カスタムハフマン符号の復号に先立つ前処理時間Ｔｐは、符号割当数Ｎ１が少なくなるほど、減少する。図７には、その矩形枠内にカスタムハフマン符号テーブルにおける符号割当を示す。図７に示される「ｄｅｃｏｄｅ＝」に続く数字は、符号化前の文字（平文）の文字番号を表す。文字番号は、０から０ｘＦＦまでの値を採る。「ｌｅｎｇｔｈ＝」に続く数字は、ハフマン符号長を表し、「ｃｏｄｅ＝」に続くコードは、上記文字番号に対応する文字に割り当てられたハフマン符号に対応する。カスタムハフマン符号テーブルでは、符号化対象データに現れない文字に対しハフマン符号が割り当てられない。このため、符号化対象データに現れない文字種類数（Ｎ０−Ｎ１）に対応する時間だけ、前処理時間Ｔｐは短くなる。
【００７６】
前処理時間Ｔｐを算出すると、圧縮デバイス５０は次に、処理対象ブロックの一つ前のブロックである先行ブロックの文字数Ｅｐを特定する（Ｓ２４０）。先行ブロックの文字数Ｅｐは、先行ブロックのコピー記号をコピー長Ｌに対応する数の文字として取扱ったときの文字数である。即ち、文字数Ｅｐは、文字解決部７９から出力される先行ブロックに対応する伸長データの文字数であり、辞書型圧縮前の先行ブロックの文字数に対応する。文字数Ｅｐの特定は、先行ブロックに対する辞書型圧縮時に文字数をカウントすることで実現することができる。あるいは、文字数Ｅｐは、先行ブロックの出現頻度テーブル５３に登録された文字数から特定することができる。
【００７７】
更に、圧縮デバイス５０は、先行ブロックの復号時間Ｔｄを算出する（Ｓ２５０）。先行ブロックの復号時間Ｔｄは、伸長デバイス７０の符号展開部７６が先行ブロックの先頭から末尾までの復号に要する時間に対応する。先行ブロックの復号時間Ｔｄは、先行ブロックの中間データに含まれるリテラル値の数α及びコピー記号の数βから特定可能である。
【００７８】
コピー記号は、コピー長Ｌ及び戻り距離Ｄを含み、ハフマン符号時に、２文字分のハフマン符号に変換される。このため、コピー記号に対応するハフマン符号の復号は、リテラル値に対応するハフマン符号の復号よりも２倍の時間を要する。リテラル値に対応するハフマン符号の復号が１サイクルで行われ、コピー記号に対応するハフマン符号の復号が２サイクルで行われる場合には、先行ブロックの復号時間Ｔｄは、式Ｔｄ＝（α＋２・β）・Ｃに従って算出することができる。ここで係数Ｃは、符号展開部７６の動作周期である。上述した１サイクルは、符号展開部７６の動作周期に対応する。先行ブロックが非圧縮ブロックであり実質的に復号が必要ではない場合にも、伸長デバイス７０の符号展開部７６では、動作周期毎に一文字ずつ先行ブロック内の文字がＦＩＦＯバッファ７７に入力されるため、同様に復号時間Ｔｄが算出される。
【００７９】
Ｓ２５０で先行ブロックの復号時間Ｔｄを算出し終えると、圧縮デバイス５０は、先行ブロックの復号終了時の未出力文字数Ｅ１を算出する（Ｓ２６０）。ここで言う先行ブロックの復号終了時は、符号展開部７６によって先行ブロック終端までの復号が終了する時点に対応する。未出力文字数Ｅ１は、符号展開部７６での復号が完了したが伸長データとして文字解決部７９から出力されていない文字数に対応する。未出力文字数Ｅ１は、先行ブロックの復号終了時点におけるＦＩＦＯバッファ７７内の蓄積データを文字解決部７９による伸長後の文字数で換算した値に対応する。
【００８０】
先行ブロックの復号開始時の未出力文字数をＥ０で表し、文字解決部７９による文字出力周期をＴｃで表すと、先行ブロックの復号終了時の未出力文字数Ｅ１は、式Ｅ１＝Ｅ０＋Ｅｐ−（Ｔｄ／Ｔｃ）に従って、算出することができる。値（Ｔｄ／Ｔｃ）は、先行ブロックの復号開始から終了までの期間において文字解決部７９で出力される文字数に対応する。
【００８１】
Ｓ２６０での処理を終えると、圧縮デバイス５０は、先行ブロックの復号終了時にＦＩＦＯバッファ７７に蓄積されているデータを、その後文字解決部７９が全て伸長処理して、対応する伸長データを出力するのに要する伸長時間Ｔｅを、未出力文字数Ｅ１及び文字出力周期Ｔｃに基づいて、式Ｔｅ＝Ｅ１・Ｔｃに従い算出する（Ｓ２７０）。
【００８２】
Ｓ２３０からＳ２７０までの処理により先行ブロックの伸長時間Ｔｅ及び処理対象ブロックの前処理時間Ｔｐを算出すると、圧縮デバイス５０は、Ｓ２８０に移行し、Ｓ２７０で算出された伸長時間ＴｅがＳ２３０で算出された前処理時間Ｔｐ以上であるか否かを判断する。ここで、伸長時間Ｔｅと前処理時間Ｔｐとの関係について説明する。
【００８３】
伸長時間Ｔｅが前処理時間Ｔｐ以上である場合には、処理対象ブロックをカスタムハフマン符号化したときの復号に先立つ前処理が、先行ブロックまでの復号によりＦＩＦＯバッファ７７に蓄積されたデータを文字解決部７９が全て出力し終わるタイミングで、又は、そのタイミングよりも前に終了することを意味する。この場合、図８Ａに示すように、文字解決部７９は、処理対象ブロックに対する伸長処理を実行して伸長データを出力する動作を、先行ブロックの伸長処理の終了後、待ち動作なく効率的に実行することができる。
【００８４】
これに対し、伸長時間Ｔｅが前処理時間Ｔｐ未満である場合には、処理対象ブロックをカスタムハフマン符号化したときの復号に先立つ前処理の終了タイミングが、ＦＩＦＯバッファ７７に蓄積されたデータを、文字解決部７９が伸長データとして全て出力し終わるタイミングよりも後に位置することを意味する。
【００８５】
この場合には、図８Ｂに示すように、文字解決部７９による先行ブロックに対する伸長処理の終了後、処理対象ブロックに対する前処理が終了するまでの期間、ＦＩＦＯバッファ７７が空になる。従って、この期間、文字解決部７９は、図８Ｂのニ点鎖線で示すように、符号展開部７６から新たな復号データが提供されるまで待ち状態になる。従って、この場合には、文字解決部７９で効率的な伸長処理を実行することができない。
【００８６】
このため、本実施例の圧縮デバイス５０は、伸長時間Ｔｅが前処理時間Ｔｐ未満であると判断すると（Ｓ２８０でＮｏ）、Ｓ２９０（図６参照）に移行し、処理対象ブロックの中間データをカスタムハフマン符号化方式ではなく、固定ハフマン符号化方式によりハフマン符号圧縮し、圧縮後の中間データを、固定ハフマン符号ブロックとして出力する。その後、圧縮デバイス５０は、Ｓ３２０に移行する。
【００８７】
処理対象ブロックの符号化方式に固定ハフマン符号化方式を選択すると、図８Ｃに示すように、伸長デバイス７０による処理対象ブロックの復号時には、符号化方式としてカスタムハフマン符号化方式を選択した場合のような待ち動作が発生しない。上述したように固定ハフマン符号の復号に先立つ前処理は、カスタムハフマン符号の復号に先立つ前処理と比較して無視できる程度に短く、文字解決部７９は、先行ブロックに対する伸長処理の終了後、処理対象ブロックに対する伸長処理をすぐさま実行可能である。
【００８８】
即ち、伸長時間Ｔｅが前処理時間Ｔｐ未満である場合には、処理対象ブロックの符号化方式に固定ハフマン符号化方式を選択することで、文字解決部７９での伸長処理の実行効率を高めることができる。このため、本実施例では、伸長時間Ｔｅが前処理時間Ｔｐ未満である場合には、処理対象ブロックの符号化方式に固定ハフマン符号化方式を選択する。
【００８９】
圧縮デバイス５０は、Ｓ２８０において伸長時間Ｔｅが前処理時間Ｔｐ以上であると判断すると、Ｓ３００に移行し、処理対象ブロックの復号開始時の未出力文字数Ｅｎを式Ｅｎ＝Ｅ１−（Ｔｐ／Ｔｃ）に従って算出する。
【００９０】
値Ｅ１は、上述したよう先行ブロックの復号終了時の未出力文字数である。値Ｔｐ／Ｔｃは、先行ブロックの復号終了後における処理対象ブロックの前処理実行期間において、文字解決部７９で出力される文字数に対応する。
【００９１】
圧縮デバイス５０は、次ブロックに関するＳ２６０で用いる未出力文字数Ｅ０を、上記算出した未出力文字数Ｅｎに更新した後、Ｓ３１０に移行する。
Ｓ３１０において、圧縮デバイス５０は、処理対象ブロックの中間データをＳ２００で作成したハフマン符号テーブルに基づきカスタムハフマン符号化方式で圧縮し、圧縮後の中間データを、カスタムハフマン符号ブロックとして出力する。その後、圧縮デバイス５０は、出現頻度テーブル５３を次ブロックのカスタムハフマン符号テーブルの作成のために初期化する（Ｓ３２０）。
【００９２】
Ｓ３２０に続くＳ３３０において、圧縮デバイス５０は、圧縮対象データの終端までのデータ圧縮及び圧縮データの出力が完了したか否かを判断し、完了していないと判断すると（Ｓ３３０でＮｏ）、Ｓ１１０に移行する。その後、圧縮デバイス５０は、圧縮対象データの次ブロックを中間データに変換する処理（Ｓ１１０−Ｓ１８０）、及び、この中間データを上述した手法で選択した符号化方式で圧縮した圧縮データに変換して出力する処理（Ｓ２００−Ｓ３２０）を実行する。
【００９３】
圧縮デバイス５０は、こうした動作の繰返しにより圧縮対象データをブロック毎に適切な符号化方式を用いてデフレート圧縮して、その圧縮データを出力する。圧縮デバイス５０は、圧縮対象データの終端までのデータ圧縮及び出力が完了したと判断すると（Ｓ３３０でＹｅｓ）、図５及び図６に示す圧縮処理を終了する。
【００９４】
以上に第一実施例の電子機器１及び圧縮伸長デバイス３０の構成について説明した。本実施例によれば、カスタムハフマン符号の復号に先立って必要な前処理の実行期間に、文字解決部７９が符号展開部７６からのデータ待ち状態とならないように、符号展開部７６と文字解決部７９との間に、ＦＩＦＯバッファ７７を設けた。
【００９５】
本実施例によれば更に、処理対象ブロックの符号化方式を、上述した伸長時間Ｔｅ及び前処理時間Ｔｐに基づき、ＦＩＦＯバッファ７７が前処理実行期間中に空とならないように、カスタムハフマン符号化方式と固定ハフマン符号化方式との間で切り替えるようにした。
【００９６】
しかも本実施例では、ＦＩＦＯバッファ７７が未解決文字で大部分を埋め尽くされないように、符号展開部７６から文字解決部７９に、コピー記号を未解決文字に変換せずに、そのまま転送するようにした。即ち、ＦＩＦＯバッファ７７の上流でコピー記号の未解決文字への変換を行わないことにより、ＦＩＦＯバッファ７７を、文字解決部７９の待ち動作を抑えるために効率的に利用できるようにした。
【００９７】
周知のように、カスタムハフマン符号化方式によるデータ圧縮は、固定ハフマン符号化方式よりも通常高いデータ圧縮率を得ることができる。但し、カスタムハフマン符号の復号に必要な前処理の実行時間は長く、前処理のために、符号展開部７６から文字解決部７９への復号データの入力が滞る。このため、従来では、文字解決部７９での待ち動作が生じて、伸長データの出力に遅延が生じていた。
【００９８】
本実施例によれば、カスタムハフマン符号化方式の利用により、圧縮対象データの圧縮率を高めることができると共に、上述した理由により、文字解決部７９での待ち動作を抑えることができる。即ち、圧縮データの伸長時に、伸長データの出力に遅延が生じるのを抑えることができて、安定した高速なデータ伸長を実現することができる。
【００９９】
安定したデータ伸長は、伸長データに基づく処理の滞りや遅延をも抑制することができるため、伸長データに基づく処理の高品質化に繋がる。例えば、電子機器１がディジタル複合機である場合には、印刷処理に供されるデータの伸長遅れにより、印刷処理に遅延が生じたり、失敗が生じたりする。従って、本実施例のデータ伸長は、この技術をディジタル複合機等に適用した場合、印刷処理の安定化をもたらす。
【０１００】
付言すると、本実施例によれば、前処理時間Ｔｐを、カスタムハフマン符号テーブルにおける符号割当数Ｎ１に基づき、高精度に求めるようにした。従って、好適に符号化方式を選択することができ、文字解決部７９の待ち動作を一層抑えることができる。
【０１０１】
この他、本実施例では、復号時間Ｔｄを、先行ブロックに含まれるリテラルの数α及びコピー記号の数βに基づき高精度に算出するようにした。更に、この復号時間Ｔｄと、先行ブロックの文字数Ｅｐと、先行ブロックの復号開始時の未出力文字数Ｅ０と、文字解決部７９における文字の出力周期Ｔｃとに基づき、先行ブロックの復号完了時点から先行ブロックに対する伸長処理が完了するまでの時間である伸長時間Ｔｅを高精度に算出するようにした。従って、本実施例によれば、前処理時間Ｔｐとの比較に適切な伸長時間Ｔｅを算出することができて、符号化方式の選択を適切に行うことができる。
【０１０２】
上記実施例では、文字解決部７９による文字の出力周期Ｔｃと、符号展開部７６の動作周期（１サイクル）とが相違する場合等を考慮して、前処理時間Ｔｐ及び伸長時間Ｔｃの算出や比較方法について説明したが、文字の出力周期Ｔｃと符号展開部７６の動作周期とが一致する場合には、前処理時間Ｔｐ及び伸長時間Ｔｃを、周期Ｔｃの単位、換言すれば文字数に相当する単位で算出して比較することが可能である。
【０１０３】
［第二実施例］
続いて、第二実施例の電子機器１を説明する。但し、第二実施例の電子機器１は、圧縮デバイス５０における処理動作が第一実施例と異なるだけのものである。従って、以下では、圧縮デバイス５０が実行する第二実施例の圧縮処理の内容を選択的に説明する。
【０１０４】
第二実施例の圧縮処理では、圧縮対象データがブロック毎にカスタムハフマン符号化される。ブロックの終端は、固定ではなく、このブロックの伸長時間と、後続ブロックの前処理時間とに基づいて、伸長時間が前処理時間以上となる位置まで変更される。
【０１０５】
第二実施例の圧縮処理は、図５に示されるフローチャートに従う前段部分と、図９に示されるフローチャートに従う後段部分とを含む。即ち、第二実施例において、圧縮デバイス５０は、圧縮処理を開始すると、まずＳ１１０−Ｓ１８０の処理を実行する。そして、現在の処理位置がブロックの終端又は圧縮対象データの終端であると判断すると（Ｓ１８０でＹｅｓ）、Ｓ４００に移行する。
【０１０６】
Ｓ４００において、圧縮デバイス５０は、Ｓ２００と同様に、処理対象ブロックのカスタムハフマン符号テーブルを、出現頻度テーブル５３における各文字の出現頻度に基づき作成する。
【０１０７】
その後、圧縮デバイス５０は、処理対象ブロックの中間データをハフマン符号圧縮する必要があるか否かを判断する（Ｓ４１０）。ここでは、処理対象ブロックをハフマン符号化しても、符号化後のデータ量が符号化前のデータ量以上である場合には、ハフマン符号圧縮が不要であると判断し、それ以外の場合には、ハフマン符号圧縮が必要であると判断する。
【０１０８】
ハフマン符号圧縮が不要であると判断すると（Ｓ４１０でＮｏ）、圧縮デバイス５０は、処理対象ブロックの中間データを、ハフマン符号化せずに非圧縮ブロックとして出力する（Ｓ４２０）。その後、Ｓ５２０に移行する。
【０１０９】
Ｓ４１０において、ハフマン符号圧縮が必要であると判断すると、圧縮デバイス５０は、処理対象ブロックに続く後続ブロックの前処理時間Ｔｑを推定する（Ｓ４３０）。後続ブロックの前処理時間Ｔｑは、カスタムハフマン符号化された後続ブロックを伸長デバイス７０が復号する際の、後続ブロックの前処理データに基づく前処理の実行時間である。
【０１１０】
Ｓ４３０において、圧縮デバイス５０は、予め設計段階で定められた時間を後続ブロックの前処理時間Ｔｑとして推定することができる。あるいは、後続ブロックの前処理時間Ｔｑを、処理対象ブロックの前処理時間Ｔｐと同一値に推定することができる。
【０１１１】
Ｓ４３０に続くＳ４４０において、圧縮デバイス５０は、処理対象ブロックの文字数Ｅｐを特定する。文字数Ｅｐは、文字解決部７９から出力される処理対象ブロックに対応する伸長データの文字数であり、辞書型圧縮前の処理対象ブロックの文字数に対応する。
【０１１２】
Ｓ４４０の処理実行後、圧縮デバイス５０は、Ｓ２５０と同様の手法で、処理対象ブロックの復号時間Ｔｄを算出する（Ｓ４５０）。処理対象ブロックの復号時間Ｔｄは、伸長デバイス７０の符号展開部７６が処理対象ブロックの先頭から末尾までの復号に要する時間に対応する。
【０１１３】
Ｓ４５０の処理実行後、圧縮デバイス５０は、Ｓ２６０と同様の手法で、処理対象ブロックの復号終了時の未出力文字数Ｅ１を、式Ｅ１＝Ｅ０＋Ｅｐ−（Ｔｄ／Ｔｃ）に従って算出する（Ｓ４６０）。ここで言う復号終了時は、符号展開部７６によって処理対象ブロック終端までの復号が終了する時点に対応する。未出力文字数Ｅ１は、処理対象ブロックの復号終了時点におけるＦＩＦＯバッファ７７内の蓄積データを、文字解決部７９による伸長後の文字数に換算した値に対応する。
【０１１４】
上式に含まれる値Ｅ０は、処理対象ブロックの復号開始時の未出力文字数であり、Ｅｐは、処理対象ブロックの文字数であり、Ｔｄは、処理対象ブロックの復号時間であり、Ｔｃは、文字解決部７９からの文字出力周期である。
【０１１５】
Ｓ４６０の処理実行後、圧縮デバイス５０は、Ｓ２７０と同様の手法で、処理対象ブロックの復号終了時にＦＩＦＯバッファ７７に蓄積されているデータを、その後文字解決部７９が全て伸長処理して、対応する伸長データを出力するのに要する伸長時間Ｔｅを、未出力文字数Ｅ１及び文字出力周期Ｔｃに基づく式Ｔｅ＝Ｅ１・Ｔｃに従い算出する（Ｓ４７０）。
【０１１６】
その後、圧縮デバイス５０は、Ｓ４８０に移行し、Ｓ４７０で算出された伸長時間ＴｅがＳ４３０で推定された前処理時間Ｔｑ以上であるか否かを判断する。そして、伸長時間Ｔｅが前処理時間Ｔｑ未満であると判断すると（Ｓ４８０でＮｏ）、Ｓ４９０に移行し、ブロック終端の延長を決定する。即ち、処理対象ブロックの終端を、圧縮対象データの末尾側に変更することを決定する。但し、処理対象ブロックの終端が、既に圧縮対象データの終端である場合には、もはや終端を変更することはできない。この場合には、先立つＳ４８０で形式的に肯定判断し、Ｓ５００に移行するように圧縮デバイス５０は動作する。
【０１１７】
Ｓ４９０で、ブロック終端の延長を決定すると、圧縮デバイス５０は、Ｓ１１０（図５参照）に移行し、ブロック終端が一文字分延長されたとみなして、Ｓ１１０−Ｓ１８０の処理を実行する。この場合には、Ｓ１１０で受け付けた文字がブロックの終端に該当するため、圧縮デバイス５０は、Ｓ１３０で否定判断するか、Ｓ１４０で肯定判断して、Ｓ１６０に移行する。
【０１１８】
Ｓ１６０では、前回実行したコピー記号への変換をやり直すようにして、今回のブロック終端までの文字列をコピー記号に変換することができる。その後、圧縮デバイス５０は、Ｓ１８０で肯定判断し、Ｓ４００に移行する。Ｓ４００では、処理対象ブロックのカスタムハフマン符号テーブルを作り直してＳ４１０以降の処理を実行する。
【０１１９】
圧縮デバイス５０は、Ｓ４８０において、伸長時間Ｔｅが前処理時間Ｔｑ以上であると判断すると、未出力文字数Ｅ０を更新した後（Ｓ５００）、Ｓ５１０に移行する。Ｓ５１０において、圧縮デバイス５０は、処理対象ブロックの中間データをＳ４００で作成した新たなハフマン符号テーブルに基づきカスタムハフマン符号化方式で圧縮し、圧縮後の中間データを、新たなカスタムハフマン符号ブロックとして出力する。その後、圧縮デバイス５０は、出現頻度テーブル５３を初期化し（Ｓ５２０）、Ｓ５３０に移行する。
【０１２０】
Ｓ５３０において、圧縮デバイス５０は、圧縮対象データの終端までを圧縮データとして出力したか否かを判断し、出力していないと判断すると（Ｓ５３０でＮｏ）、Ｓ１１０に移行する。
【０１２１】
圧縮デバイス５０は、こうした動作の繰返しにより圧縮対象データを、必要に応じてブロック終端を延ばしながら、ブロック毎にカスタムハフマン符号化方式でデフレート圧縮して、その圧縮データを出力する。圧縮デバイス５０は、圧縮対象データの終端までを圧縮データとして出力したと判断すると（Ｓ５３０でＹｅｓ）、図５及び図９に示す圧縮処理を終了する。
【０１２２】
以上、第二実施例の電子機器１について説明した。本実施例によれば、圧縮処理において、処理対象ブロックに続く後続ブロックの前処理時間Ｔｑと、処理対象ブロックの伸長時間Ｔｅとの関係が不等式Ｔｅ＜Ｔｑを満足する期間には、処理対象ブロックの終端を延長する。そして、不等式Ｔｅ≧Ｔｑを満足すると、処理対象ブロックの終端を確定して、当該処理対象ブロックをカスタムハフマン符号化方式によりハフマン符号圧縮し、これを前処理データと共に圧縮データとして出力する。
【０１２３】
Ｔｅ＜Ｔｑである期間に、処理対象ブロックの終端を確定すると、図１０上段に示すように伸長デバイス７０による復号時に、処理対象ブロックの伸長データの出力が全て完了してから、後続ブロックのカスタムハフマン符号の復号に必要な前処理が完了するため、文字解決部７９において、符号展開部７６からの新たな復号データを待つ動作が発生する。
【０１２４】
これに対し、Ｔｅ≧Ｔｑとなるまでブロック終端を延長させると、図１０下段に示すように、処理対象ブロックの伸長データの出力が全て完了するタイミングと、後続ブロックのカスタムハフマン符号の復号に必要な前処理が完了するタイミングとが略一致する。このため、文字解決部７９は、符号展開部７６からの復号データを待つことなく、後続ブロックの復号データに対する伸長処理を実行することができる。
【０１２５】
従って、本実施例においても、第一実施例と同様に、圧縮データの伸長時に、伸長データの出力に遅延が生じるのを抑えることができて、安定した高速なデータ伸長を実現することができる。
【０１２６】
［その他］
以上に、本開示の例示的実施形態について説明したが、本開示は、上記実施形態に限定されるものではなく、種々の態様を採ることができる。例えば、圧縮伸長デバイス３０の機能は、ハードウェアによって実現されてもよいし、ソフトウェアによって実現されてもよい。圧縮デバイス５０の機能がソフトウェアによって実現され、伸長デバイス７０の機能がハードウェアによって実現される形態も考えられる。
【０１２７】
圧縮伸長デバイス３０を備える複数の電子機器１においては、一つの電子機器１で生成された圧縮データを、他の電子機器１の伸長デバイス７０が伸長することも考えられる。従って、一つの電子機器１には、圧縮デバイス５０及び伸長デバイス７０の内、圧縮デバイス５０のみが設けられ、別の電子機器１には、圧縮デバイス５０及び伸長デバイス７０の内、伸長デバイス７０のみが設けられたデータ処理システムも考えられる。
【０１２８】
第一実施例におけるＳ２８０での判断処理、及び第二実施例におけるＳ４８０での判断処理は、不等式Ｔｅ−Ｔｐ≧δ、又は不等式Ｔｅ−Ｔｑ≧δを満足するか否かを判断する処理に置き換えられてもよい。δがゼロであるときの判断処理は、第一実施例及び第二実施例の判断処理に一致する。δをゼロより僅かに大きい正の値に設定した場合には、前処理時間よりも伸長時間が長くなるため、前処理時間及び伸長時間の推定に誤差がある場合においても、文字解決部７９に待ち動作が発生する可能性を極力抑えることができる。
【０１２９】
上記実施例における１つの構成要素が有する機能は、複数の構成要素に分散して設けられ得る。複数の構成要素が有する機能は、１つの構成要素に統合され得る。構成要素の一部は、省略されてもよい。一つの実施例の構成の少なくとも一部は、他の上記実施例の構成に対して付加又は置換されてもよい。特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【０１３０】
最後に用語間の対応関係について説明する。伸長デバイス７０が備える前処理部７３、テーブル記憶部７４及び符号展開部７６は、復号ユニットの一例に対応し、文字解決部７９は、伸長ユニットの一例に対応する。圧縮デバイス５０が実行するＳ１１０−Ｓ１８０，Ｓ２００，Ｓ２２０，Ｓ２９０，Ｓ３１０，Ｓ４００，Ｓ４２０，Ｓ５１０によって実現される機能は、圧縮ユニットによって実現される機能の一例に対応する。圧縮デバイス５０が実行するＳ２１０，Ｓ２８０によって実現される機能は、決定ユニットの一例に対応する。圧縮デバイス５０が実行するＳ２３０，Ｓ４３０によって実現される機能は、前処理時間推定ユニットによって実現される機能の一例に対応する。圧縮デバイス５０が実行するＳ２４０−Ｓ２７０，Ｓ４４０−Ｓ４７０によって実現される機能は、伸長時間推定ユニットによって実現される機能の一例に対応する。
【０１３１】
圧縮デバイス５０がＳ１８０で肯定判断し更にＳ４８０でＴｅ≧Ｔｑであるか否かを判断し、Ｔｅ≧Ｔｑである場合にはブロック終端を確定する機能は、分割ユニットによって実現される機能の一例に対応する。
【符号の説明】
【０１３２】
１…電子機器、１０…メインデバイス、３０…圧縮伸長デバイス、５０…圧縮デバイス、５１…第一圧縮部、５１Ａ，７９Ａ…スライド辞書、５３…出現頻度テーブル、５５…第二圧縮部、７０…伸長デバイス、７１…分岐部、７３…前処理部、７４…テーブル記憶部、７６…符号展開部、７７…ＦＩＦＯバッファ、７９…文字解決部、９０…記憶デバイス。
【図１】
0006613713.tif 000002
【図２】
0006613713.tif 000003
【図３】
0006613713.tif 000004
【図４】
0006613713.tif 000005
【図５】
0006613713.tif 000006
【図６】
0006613713.tif 000007
【図７】
0006613713.tif 000008
【図８】
0006613713.tif 000009
【図９】
0006613713.tif 000010
【図１０】
0006613713.tif 000011