(57)【特許請求の範囲】
【請求項１】
画像データがライン毎に可変長符号を用いて符号化された符号データを該画像データに復号する復号手段と、
前記復号手段で前記符号データが復号された画像データに従い印字処理を行う印字手段と、
前記復号手段で画像データに復号された１ページ分の前記符号データの符号長を求める符号長取得手段と、
前記復号手段で前記符号データが復号された１ライン分の画像データの画素数をカウントするカウント手段と、
前記符号長取得手段で取得された１ページ分の前記符号データの符号長と、該１ページ分の符号データの符号長に予め指定した符号長とが異なっている場合に第１のエラー信号を出力し、前記カウント手段でカウントされた前記画素数と１ライン分の画素数として予め指定した画素数とが異なっている場合に第２のエラー信号を出力し、前記復号手段が前記符号データを復号する際に、該符号データ中に、前記復号手段が前記可変長符号を復号する際に参照する、可変長符号とデータ値を示すインデクス値とを対応付けた符号化テーブルに含まれない可変長符号を検出した場合に第３のエラー信号を出力するエラー検出手段と、
前記エラー検出手段から前記第１のエラー信号と前記第２のエラー信号と前記第３のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、前記印字手段を制御して前記印字処理を停止させる制御手段と
を有する
ことを特徴とする画像処理装置。
【請求項２】
前記制御手段は、
前記エラー検出手段から前記第１のエラー信号と前記第２のエラー信号と前記第３のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、前記復号手段を制御して前記復号処理を停止させる
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記符号データは、動的な辞書を用いて符号化された
ことを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項４】
情報を表示する表示手段をさらに有し、
前記制御手段は、
前記エラー検出手段から前記第１のエラー信号と前記第２のエラー信号と前記第３のエラー信号と前記第４のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、前記表示手段に対してエラーの発生を示す情報を表示させる
ことを特徴とする請求項１乃至請求項３の何れか１項に記載の画像処理装置。
【請求項５】
復号手段が、画像データがライン毎に可変長符号を用いて符号化された符号データを該画像データに復号する復号ステップと、
印字手段が、前記復号ステップで前記符号データが復号された画像データに従い印字処理を行う印字ステップと、
符号長取得手段が、前記復号ステップで画像データに復号された１ページ分の前記符号データの符号長を求める符号長取得ステップと、
カウント手段が、前記復号ステップで前記符号データが復号された１ライン分の画像データの画素数をカウントするカウントステップと、
エラー検出手段が、前記符号長取得ステップで取得された１ページ分の前記符号データの符号長と、該１ページ分の符号データの符号長に予め指定した符号長とが異なっている場合に第１のエラー信号を出力し、前記カウントステップでカウントされた前記画素数と１ライン分の画素数として予め指定した画素数とが異なっている場合に第２のエラー信号を出力し、前記復号ステップが前記符号データを復号する際に、該符号データ中に、前記復号ステップが前記可変長符号を復号する際に参照する、可変長符号とデータ値を示すインデクス値とを対応付けた符号化テーブルに含まれない可変長符号を検出した場合に第３のエラー信号を出力するエラー検出ステップと、
制御手段が、前記エラー検出ステップから前記第１のエラー信号と前記第２のエラー信号と前記第３のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、前記印字ステップを制御して前記印字処理を停止させる制御ステップと
を有する
ことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮符号化された画像データを復号する画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
プリンタ装置などの画像形成装置は画像データを一時的にメモリに記憶する。この場合、画像データをそのままメモリに格納しようとすると、大容量のメモリが必要になり価格が上昇してしまう。これに対処するため、画像データを圧縮してメモリに格納するようにしている。
【０００３】
このようなプリンタ装置における印字処理は、例えば次のように行われる。プリンタ装置は、コンピュータなどで作成されネットワークなどを介して受け取ったＰＤＬ(Page Description Language)を解析して描画部が実行可能な中間言語を生成し、この中間言語を描画部が解析して、バンドメモリに対して階調処理後の画像を描画する。描画された画像データは、２値画像の圧縮符号化アルゴリズムにより圧縮符号化し、生成された符号データをメモリに格納する。その後、印字動作時に、ＣＭＹＫ各版毎に遅延させてメモリから符号データを読み込んで復号し、ＣＭＹＫ各版に対応するデータのプリンタエンジンに転送し、印字する。
【０００４】
２値画像の圧縮符号化を効率よく行う方法として、可変長符号を用いた圧縮符号化方式が知られている。可変長符号は、出現頻度の高い値に短い符号を割り当て、出現頻度が低くなるに連れて割り当てる符号長を長くすることで、データの圧縮を行う。
【０００５】
可変長符号は、例えば伝送路などで符号にエラーが混入した場合、エラー箇所以降の符号に対して正常な復号ができなくなるおそれがある。符号に対するエラー混入への対策として、特許文献１では、可変長符号によるビットストリームが分割されて格納されるパケットに対して同期符号を挿入し、符号のエラーの伝搬を防止している。
【０００６】
ところで、インクジェットプリンタなどでは、所定量を超えたインク量で印字を行った場合に、インクにより用紙が弛み、排紙に問題が発生する場合がある。これは、特に両面に印字した場合に顕著である。そのため、特許文献２では、両面印字の際に、印字の際のインク塗布量の総量規制を行うことで、両面印字の際の排紙の問題を防止している。
【０００７】
このような総量規制は、インクジェットプリンタに限らず、トナーを用いて印字を行うプリンタ装置にも有効なものである。すなわち、印字時のＣ、Ｍ、Ｙ、Ｋ各版の合計のトナー付着量に制約をかけることで、印字機構の負荷を少なくすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、可変長符号を用いて圧縮符号化を行った場合、一般的に、符号のシンタクスエラーは、符号表に無い、すなわち、データ値が割り当てられていない符号を復号した場合に認識される。一方、符号化処理においては、効率よく符号化を行うために、符号表を、符号長の短い方から順次できるだけ隙間無く使用しており、符号表に無い符号は、符号長が非常に長い符号となっている。符号長の長い符号は、出現頻度が極めて低いため、シンタクスエラーが認識された時点では、実際にエラーが発生した時点から多くの出鱈目な符号を復号している可能性がある。プリンタ装置の場合では、印字品質の劣化を引き起こしてしまうおそれがあるという問題点があった。
【０００９】
例えばネットワーク接続されたプリンタ装置では、プリンタサーバから符号を受け取り、受け取った符号を順次復号して印字を行う。この場合の符号の伝送路は、一般的には有線であり、ＣＲＣ(cyclic redundancy check)コードの付加などによりエラー耐性を高めているため、伝送系にて符号エラーの発生する可能性は低い。このようなネットワーク接続されたプリンタ装置では、プリンタサーバにおける符号作成時のミスや、プリンタ装置とプリンタサーバとで符号の仕様が異なる、あるいは、ハードウェア的な不具合などを要因としてエラーが発生することが考えられる。
【００１０】
上述した特許文献１では、エラーを起こしたパケットから同期符号を検出して、次のパケットから符号の復号を再開することで、ビットストリームの再生を継続している。この特許文献１は、パケットを読み飛ばす処理においてエラーが発生した場合に対処するものであり、エラーが発生したパケットを捨てても問題が無いと考えられる。
【００１１】
しかしながら、プリンタ装置の場合、基本的に、不具合のある印字はあってはならない。したがって、特許文献１のように、エラーが発生したパケットを捨てて、次のパケットの復号を行い処理を継続するといった処理ができない。
【００１２】
また、上述したように、シンタクスエラーは、符号長の非常に長い符号により認識されるため、実際にエラーが発生した箇所から多くの出鱈目な符号を復号している可能性がある。このような、出鱈目な符号が復号された画像データは、インク塗布量やトナー付着量の総量規制から外れているため、印字機構に対して余計な負荷をかけてしまうおそれがあるという問題点があった。特にインクジェットプリンタの場合、所定のインク塗布量を超えて印字がなされた場合、上述したように、排紙の際に、用紙の撓みなどで印字機構に対して大きな負荷をかけてしまうおそれがあるという問題点があった。
【００１３】
本発明は、上記に鑑みてなされたものであって、画像データが可変長符号を用いて符号化された符号にエラーが発生した場合の、印字機構に対する負荷を軽減することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するために、本発明は、画像データがライン毎に可変長符号を用いて符号化された符号データを画像データに復号する復号手段と、復号手段で符号データが復号された画像データに従い印字処理を行う印字手段と、復号手段で画像データに復号された１ページ分の符号データの符号長を求める符号長取得手段と、復号手段で符号データが復号された１ライン分の画像データの画素数をカウントするカウント手段と、符号長取得手段で取得された１ページ分の符号データの符号長と、１ページ分の符号データの符号長に予め指定した符号長とが異なっている場合に第１のエラー信号を出力し、カウント手段でカウントされた画素数と１ライン分の画素数として予め指定した画素数とが異なっている場合に第２のエラー信号を出力し、復号手段が符号データを復号する際に、符号データ中に、復号手段が可変長符号を復号する際に参照する、可変長符号とデータ値を示すインデクス値とを対応付けた符号化テーブルに含まれない可変長符号を検出した場合に第３のエラー信号を出力するエラー検出手段と、エラー検出手段から第１のエラー信号と第２のエラー信号と第３のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、印字手段を制御して印字処理を停止させる制御手段とを有することを特徴とする。
【００１５】
また、本発明は、復号手段が、画像データがライン毎に可変長符号を用いて符号化された符号データを画像データに復号する復号ステップと、印字手段が、復号ステップで符号データが復号された画像データに従い印字処理を行う印字ステップと、符号長取得手段が、復号ステップで画像データに復号された１ページ分の符号データの符号長を求める符号長取得ステップと、カウント手段が、復号ステップで符号データが復号された１ライン分の画像データの画素数をカウントするカウントステップと、エラー検出手段が、符号長取得ステップで取得された１ページ分の符号データの符号長と、１ページ分の符号データの符号長に予め指定した符号長とが異なっている場合に第１のエラー信号を出力し、カウントステップでカウントされた画素数と１ライン分の画素数として予め指定した画素数とが異なっている場合に第２のエラー信号を出力し、復号ステップが符号データを復号する際に、符号データ中に、復号ステップが可変長符号を復号する際に参照する、可変長符号とデータ値を示すインデクス値とを対応付けた符号化テーブルに含まれない可変長符号を検出した場合に第３のエラー信号を出力するエラー検出ステップと、制御手段が、エラー検出ステップから第１のエラー信号と第２のエラー信号と第３のエラー信号とのうち少なくとも１つのエラー信号が出力された場合に、印字ステップを制御して印字処理を停止させる制御ステップとを有することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、画像データが可変長符号を用いて符号化された符号にエラーが発生した場合の、印字機構に対する負荷を軽減できるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、本実施形態に適用可能な印刷システムの一例の構成を示すブロック図である。
【図２】図２は、処理の全体的な流れを示す略線図である。
【図３】図３は、データフローを説明するための略線図である。
【図４】図４は、データフローを説明するための略線図である。
【図５】図５は、データフローを説明するための略線図である。
【図６】図６は、符号化処理部の一例の構成を示すブロック図である。
【図７】図７は、画像データおよび符号データを説明するための略線図である。
【図８】図８は、符号バッファを説明するための略線図である。
【図９】図９は、本実施形態に適用可能な符号フォーマットの例を示す略線図である。
【図１０】図１０は、符号化処理の全体的な流れを示す一例のフローチャートである。
【図１１】図１１は、ライン単位の符号化処理の一例のフローチャートである。
【図１２】図１２は、辞書探索処理の一例のフローチャートである。
【図１３】図１３は、辞書探索についてより具体的に説明するための略線図である。
【図１４】図１４は、インデクス符号化処理の一例のフローチャートである。
【図１５】図１５は、辞書更新処理の一例のフローチャートである。
【図１６】図１６は、辞書の更新処理についてより具体的に説明するための略線図である。
【図１７】図１７は、ＥＳＣ符号化処理の一例のフローチャートである。
【図１８】図１８は、ＥＳＣ符号による辞書更新処理の一例のフローチャートである。
【図１９】図１９は、符号出力処理の一例のフローチャートである。
【図２０】図２０は、本実施形態に適用可能な復号部の一例の構成を示すブロック図である。
【図２１】図２１は、復号処理部の一例の構成を示すブロック図である。
【図２２】図２２は、シンタクスエラーの検出について説明するための略線図である。
【図２３】図２３は、符号表に対応する逆符号表の例を示す略線図である。
【図２４】図２４は、ＭＴＦ符号化処理の例をより具体的に示す略線図である。
【図２５】図２５は、ＭＴＦ符号化処理で符号化された符号を具体的な値で示す略線図である。
【図２６】図２６は、ＭＴＦ符号の復号処理を例をより具体的に示すための略線図である。
【図２７】図２７は、復号対象の符号データにエラーが含まれる場合について説明するための略線図である。
【図２８】図２８は、復号対象の符号データにエラーが含まれる場合について説明するための略線図である。
【図２９】図２９は、復号処理の全体的な流れを示す一例のフローチャートである。
【図３０】図３０は、ライン単位の復号処理をより詳細に示す一例のフローチャートである。
【図３１】図３１は、符号入力処理を示す一例のフローチャートである。
【図３２】図３２は、ＥＳＣ符号の復号処理を示す一例のフローチャートである。
【図３３】図３３は、インデクス符号の復号処理を示す一例のフローチャートである。
【図３４】図３４は、値ＤＩＣＴＮＵＭをインデクスとして辞書をアクセスして辞書データを求めることを説明するための略線図である。
【図３５】図３５は、プリンタのオペレーションパネルの一例の外観を示す略線図である。
【図３６】図３６は、表示部に表示される、通常の操作画面の一例を示す略線図である。
【図３７】図３７は、符号エラーが検出された際の表示部に対するエラー表示の一例を示す略線図である。
【発明を実施するための形態】
【００１８】
以下に添付図面を参照して、この発明に係る画像処理装置の実施形態を詳細に説明する。図１は、本実施形態に適用可能な印刷システムの一例の構成を示す。図１に例示される印刷システムは、プリンタサーバ５０とプリンタ６０とがネットで接続され、プリンタサーバ５０からプリンタ６０に対して圧縮符号化された画像データをネットワークを介して送信し、プリンタ６０に画像データに従った印字を実行させる。
【００１９】
より具体的には、プリンタサーバ５０は、例えば図示されないコンピュータからネットワークを介して伝送されたＰＤＬ(Page Description Language)データに基づき画像データを生成し、生成された画像データを圧縮符号化する。そして、この画像データを圧縮符号化した符号データを、例えばＰＤＬデータに含まれる、印字対象の用紙サイズや印字解像度といった印字に関する属性データと共に、ネットワークを介してプリンタ６０に送信する。プリンタ６０では、これら伝送された符号データおよび属性データを受信し、符号データを復号して画像データとし、この画像データおよび属性データに従い印字動作を行う。
【００２０】
先ず、プリンタサーバ５０について説明する。図１において、プリンタサーバ５０は、ＣＰＵ(Central Processing Unit)１００と、メモリコントローラ部５１と、ディスプレイコントローラ用のＡＳＩＣ(Application Specific Integrated Circuit)５２と、パネルコントローラ用のＡＳＩＣ５３と、メインメモリ１３０と、プログラムが格納されるＲＯＭ１４０とを有する。メモリコントローラ部５１、ディスプレイコントロール用のＡＳＩＣ５２およびパネルコントローラ用のＡＳＩＣ５３は、それぞれバス１１３を介して互いに通信可能とされている。
【００２１】
メモリコントローラ部５１は、ＣＰＵ  Ｉ／Ｆ１０１、メモリアービタ（ＡＲＢ）１０２、メモリコントローラ１０３、ＤＭＡ(Direct Memory Access)コントローラ１０４およびバスコントローラ１０５を有する。また、メモリアービタ１０２に対して通信コントローラ１０６が接続される。
【００２２】
ＣＰＵ１００は、ＣＰＵ  Ｉ／Ｆ１０１を介してメモリアービタ１０２に接続され、ＲＯＭ１４０に記憶されるプログラムに従い、プリンタサーバ５０の全体を制御する。また、ＣＰＵ１００は、例えば図示されないコンピュータで作成されネットワークを介して送信されたＰＤＬデータを解析してバンドデータの描画を行う。
【００２３】
メモリアービタ１０２は、メインメモリ１３０とメモリコントローラ内蔵ＣＰＵの各部とのアクセス調停を行う。通信コントローラ１０６は、ネットワークなどによる通信を制御する。バスコントローラ１０５は、バス１１３に接続される各部とのバス調停を行う。メモリコントローラ１０３は、メインメモリ１３０に対するアクセス制御を行う。ＣＰＵ  Ｉ／Ｆ１０１は、メモリアービタ１０２とＣＰＵ１００との間の通信を制御する。
【００２４】
メインメモリ１３０は、ＰＤＬデータが格納されるＰＤＬデータ領域１３０Ａと、バンド画像データが格納される画像データ領域１３０Ｂと、バンド画像データが符号化された符号データが格納されるページ符号データ領域１３０Ｃとを有する。
【００２５】
ディスプレイコントロール用のＡＳＩＣ５２は、バスＩ／Ｆ１０７およびディスプレイコントローラ１０８を有する。バスＩ／Ｆ１０７は、バス１１３とディスプレイコントローラ用のＡＳＩＣ５２との間の通信を制御する。ディスプレイコントローラ１０８は、例えばＬＣＤ(Liquid Crystal Display)からなるディスプレイ１０９の表示を制御する。例えば、ＣＰＵ１００によりプログラムに従い生成された表示制御信号が、バス１１３などを介してディスプレイコントローラ１０８に供給される。ディスプレイコントローラ１０８は、供給された表示制御信号に基づきディスプレイ１０９を駆動する。
【００２６】
パネルコントローラ用のＡＳＩＣ５３は、バスＩ／Ｆ１１１およびパネルコントローラ１１２を有する。バスＩ／Ｆ１１１は、バス１１３とパネルコントローラ用のＡＳＩＣ５３との間の通信を制御する。パネルコントローラ１１２は、入力部１２１を制御する。入力部１２１は、複数の操作子を有すると共に、押圧位置に応じた信号を出力するタッチパネルを有し、このタッチパネルとディスプレイ１０９とを組み合わせることで、表示に応じた操作が可能なオペレーションパネルが構成される。
【００２７】
次に、プリンタ６０について説明する。プリンタ６０は、メモリコントローラを内蔵したＣＰＵ(Central Processing Unit)部６１と、画像処理用のＡＳＩＣ(Application Specific Integrated Circuit)６２と、パネルコントローラ用のＡＳＩＣ６３と、メインメモリ２３０と、プログラムが格納されるＲＯＭ２４０とを有する。メモリコントローラ内蔵のＣＰＵ部６１、画像処理用のＡＳＩＣ６２およびパネルコントローラ用のＡＳＩＣ６３は、それぞれバス２１３を介して互いに通信可能とされている。
【００２８】
メモリコントローラ内蔵のＣＰＵ部６１は、ＣＰＵ２００、ＣＰＵ  Ｉ／Ｆ２０１、メモリアービタ２０２、メモリコントローラ２０３、ＤＭＡコントローラ２０４、バスコントローラ２０５、通信コントローラ２０６および割り込みコントローラ２５０を有する。ＣＰＵ２００は、ＲＯＭ２４０に記憶されるプログラムに従い、プリンタ６０の全体を制御する。
【００２９】
メモリアービタ２０２は、メインメモリ２３０とメモリコントローラ内蔵ＣＰＵ６１の各部とのアクセス調停を行う。通信コントローラ２０６は、ネットワークなどによる通信を制御する。バスコントローラ２０５は、バス２１３に接続される各部とのバス調停を行う。メモリコントローラ２０３は、メインメモリ２３０に対するアクセス制御を行う。ＣＰＵ  Ｉ／Ｆ２０１は、メモリアービタ２０２とＣＰＵ２００との間の通信を制御する。
【００３０】
例えばプリンタサーバ５０からネットワークを介して送信された、画像データが圧縮符号化された符号データは、通信コントローラ２０６により受信され、メモリアービタ２０２を介してメインメモリ２３０に格納される。プリンタ６０側では、メインメモリ２３０の領域全体を、バンド毎の符号データをページ単位で記憶するページ符号データ領域として用いることができる。
【００３１】
画像処理用のＡＳＩＣ６２は、バスＩ／Ｆ２０７、復号部２０９およびエンジンコントローラ２１０を有する。バスＩ／Ｆ２０７は、バス２１３と画像処理用のＡＳＩＣ６２との間の通信を制御する。復号部２０９は、メインメモリ２３０から読み出した符号データを復号し、画像データとしてエンジンコントローラ２１０に供給する。エンジンコントローラ２１０は、プリンタエンジン２６０を制御し、画像データに従った印字を行わせる。
【００３２】
なお、詳細は後述するが、復号部２０９は、符号データの復号時にエラーが発生すると、その旨を示すエラー信号を出力する。このエラー信号は、メモリコントローラ内蔵ＣＰＵ６１内の割り込みコントローラ２５０に供給される。割り込みコントローラ２５０は、このエラー信号を受け取ると、ＣＰＵ２００に対して割り込みをかけるための割り込み信号を生成し、ＣＰＵ２００に供給する。
【００３３】
ディスプレイコントロール用のＡＳＩＣ６４は、バスＩ／Ｆ２２７およびディスプレイコントローラ２２８を有する。バスＩ／Ｆ２２７は、バス２１３とディスプレイコントローラ用のＡＳＩＣ６４との間の通信を制御する。ディスプレイコントローラ２２８は、例えばＬＣＤからなるディスプレイ２２９の表示を制御する。例えば、ＣＰＵ２００によりプログラムに従い生成された表示制御信号が、バス２１３などを介してディスプレイコントローラ２２８に供給される。ディスプレイコントローラ２２８は、供給された表示制御信号に基づきディスプレイ２２９を駆動する。
【００３４】
パネルコントローラ用のＡＳＩＣ６３は、バスＩ／Ｆ２１１およびパネルコントローラ２１２を有する。バスＩ／Ｆ２１１は、バス２１３とパネルコントローラ用のＡＳＩＣ６３との間の通信を制御する。パネルコントローラ２１２は、入力部２２１を制御する。入力部２２１は、複数の操作子を有すると共に、押圧位置に応じた信号を出力するタッチパネルを有し、このタッチパネルとディスプレイ２２９とを組み合わせることで、表示に応じた操作が可能なオペレーションパネルが構成される。
【００３５】
図２は、処理の全体的な流れを示す。例えば図示されないコンピュータにおいて生成された印字データ（ＰＤＬデータ）が、プリンタサーバ５０のメインメモリ１３０におけるＰＤＬデータ領域１３０Ａに記憶されているものとする。プリンタサーバ５０において、ＣＰＵ１００上で動作するプログラムのモジュールの一つである描画コマンド生成部で、ＰＤＬデータ領域１３０Ａに記憶されるＰＤＬデータを解析し、描画コマンドを生成する。描画コマンドは、例えばメインメモリ１３０のＰＤＬデータ領域１３０Ａに記憶される。
【００３６】
ＣＰＵ１００上で動作するプログラムのモジュールの一つである描画処理部は、メインメモリ１３０のＰＤＬデータ領域１３０Ａから描画コマンドを受け取り、メインメモリ１３０の画像データ領域１３０Ｂに対してバンド画像データを描画する。メインメモリ１３０の画像データ領域１３０Ｂに記憶されたバンドデータは、ＣＰＵ１００上で動作するプログラムのモジュールの一つである符号化部で符号化され、バンド毎の符号データとされてメインメモリ１３０のページ符号データ領域１３０Ｃに記憶される。
【００３７】
プリンタサーバ５０のメインメモリ１３０のページ符号データ領域１３０Ｃに記憶された符号データは、通信コントローラ１０６によりプリンタサーバ５０からプリンタ６０に対してネットワークを介して送信される。この符号データは、プリンタ６０において、通信コントローラ２０６により受信され、メインメモリ２３０に記憶される。復号部２０９は、メインメモリ２３０から各バンド毎の符号データからなる１ページ分の符号データを読み出して復号し、符号データが復号された画像データをエンジンコントローラ２１０に供給する。エンジンコントローラ２１０は、供給された画像データに従いプリンタエンジン２６０を制御して、印字を行う。
【００３８】
＜データフローについて＞
次に、図３〜図５を用いて、画像データの符号化および復号時、ならびに、復号時にエラーが発生した場合のデータフローについて説明する。図３は、画像データの符号化処理におけるデータフローの例を示す。以下では、画像データの符号化をプリンタサーバ５０で行うものとする。これに限らず、画像データの符号化をプリンタ６０側で行ってもよいし、プリンタ６０に対して所定のインターフェイスで接続されたコンピュータなどで行ってもよい。但し、プリンタ６０側で符号化を行った場合、生成された符号データにエラーが発生する可能性は極めて小さいと考えられる。画像データを描画するためのＰＤＬデータは、予め作成されメインメモリ１３０のＰＤＬデータ領域１３０Ａに格納されているものとする。
【００３９】
プリンタサーバ５０において、ＣＰＵ１００は、メインメモリ１３０のＰＤＬデータ領域１３０ＡからＰＤＬデータを読み出し（経路Ａ）、読み出したＰＤＬデータを解析してバンド画像データを生成する。このとき、ＣＰＵ１００は、バンド画像データに対して階調処理など所定の画像処理を施すことができる。生成されたバンド画像データは、メインメモリ１３０の画像データ領域１３０Ｂに格納される（経路Ｂ）。その後、ＣＰＵ１００は、画像データ領域１３０Ｂからバンド画像データを読み出して符号化する（経路Ｃ）。画像データに対する符号化処理の詳細については後述する。バンド画像データが符号化された符号データは、メインメモリ１３０のページ符号データ領域１３０Ｃに格納される（経路Ｄ）。
【００４０】
図４は、符号データの復号処理におけるデータフローの例を示す。復号処理は、プリンタサーバ５０で画像データが符号化された符号データをプリンタ６０に転送して、プリンタ６０側で行われる。プリンタサーバ５０において、１ページの符号データがメインメモリ１３０の符号データ領域１３０Ｃから読み出され、通信コントローラ１０６によりネットワークを介してプリンタ６０に送信される。この符号データは、プリンタ６０側の通信コントローラ２０６に受信され、メインメモリ２３０に格納される（経路Ｅ）。
【００４１】
メインメモリ２３０から読み出された符号データが復号部２０９に転送される（経路Ｆ）。復号部２０９は、転送された符号データをプリンタエンジン２６０に同期して復号し、符号データが復号された画像データをプリンタコントローラ２１０に供給する（経路Ｇ）。プリンタコントローラ２１０は、プリンタエンジン２６０を制御して、供給された画像データの印字を行う。
【００４２】
図５は、復号処理時にエラーが発生した場合のデータフローの例を示す。先ず、図４と同様にして、プリンタサーバ５０のメインメモリ１３０における符号データ領域１３０Ｃから読み出された符号データが、ネットワークを介してプリンタ６０に転送され、プリンタ６０のメインメモリ２３０に格納される（経路Ｈ）。復号部２０９は、メインメモリ２３０から読み出された符号データを復号する（経路Ｉ）。復号処理の詳細については、後述する。
【００４３】
復号部２０９は、符号データの復号時に、符号データのエラーを検出する。復号部２０９は、符号データにエラーが検出されたら、その旨を示すエラー信号を割り込みコントローラ２５０に対して出力する（経路Ｋ）。割り込みコントローラ２５０は、復号部２０９からのエラー信号を受け取ると、割り込み信号を生成してＣＰＵ２００に供給し、ＣＰＵ２００の処理に対して割り込みをかける。ＣＰＵ２００は、割り込みコントローラ２５０からの割り込みを受けると、エンジンコントローラ２１０に対して印字動作の停止を要求する（経路Ｌ）。
【００４４】
また、ＣＰＵ２００は、復号部２０９から、検出したエラーの種類などを示すエラーステータス信号を読み込む（経路Ｊ）。ＣＰＵ２００は、読み込んだエラーステータス信号に基づき、ディスプレイ２２９に対してエラーが発生した旨を表示させる（経路Ｍ）。
【００４５】
＜符号化処理について＞
次に、本実施形態に適用可能な画像データの符号化処理について説明する。本実施形態では、画像データの符号化をＭＴＦ符号化方式を用いて行う。ＭＴＦ符号化方式は、特許第４０００２６６号公報に開示されるように、小さい動的な辞書をＭＴＦ(Move To Front)制御することにより、辞書と一致したインデクス値を符号化する符号化方式である。このＭＴＦ符号化方式による符号化は、既出の文字の中で前回出現した文字が、今回出現する確率が最も高いと見做す符号化方法である。
【００４６】
ＭＴＦ符号化方式は、次のように動作する。入力される値が取り得る全ての値を保持するリストを持っており、入力された値とそのリスト中の値を比較し、同じ値を持つリスト中の位置をシンボルとして符号を生成する。次いで、この比較対象となった値をリスト中から削減し、その入力値をリストの先頭へもってくる。
【００４７】
例えば、５つの文字「ａ」、「ｂ」、「ｄ」、「ｏ」および「Ｙ」から作られている文字系列を例にとって説明する。先ず、この５つの文字に対するリストＲ＝｛ａ，ｂ，ｄ，ｏ，Ｙ｝を作成し、各文字に対してシンボル０、１、２、３および４を与える。次に、入力文字系列（例えば｛Ｙｄｂｂａａａａｄｏｏ｝）を１文字ずつ調べ、対応するリストのシンボルを出力し、その文字をリストの先頭へ移動する作業を、入力系列全ての文字を出力するまで繰り返し、最終的に、出力系列｛４，３，３，０，３，０，０，０，２，４，０｝が得られる。  
【００４８】
図６は、符号化を行う符号化処理部１５０の機能を示す。符号化処理部１５０は、画像データ読み込み部１５１、ＭＴＦ符号化処理部１５２、ハフマン符号化処理部１５３、符号書き込み部１５４、ラインカウンタ１５５および符号カウンタ１５６を含む。これら符号化処理部１５０に含まれる各部は、例えばＣＰＵ１００上で動作するプログラムのモジュールからなる。
【００４９】
画像データ読み込み部１５１は、メインメモリ１３０の画像データ領域１３０Ｂから画像データを読み込み、ＭＴＦ符号化処理部１５２に転送する。図７（ａ）は、符号化する画像データの例を示す。符号化処理部１５０では、このように、ライン単位の画像データを符号化する。ＭＴＦ符号化処理部１５２は、この例では３２個のデータを格納する辞書を持ち、画像データ読み込み部１５１が読み込んだデータを、ＭＴＦ処理により辞書のデータと比較し、一致した場合、一致した辞書データに対応付けられたインデクス値をハフマン符号化処理部１５３に転送し、一致しなかった場合は、読み込んだデータをＥＳＣ（エスケープ）データとして、ハフマン符号化処理部に１５３に転送する。
【００５０】
ハフマン符号化処理部１５３は、ＭＴＦ符号化処理部１５２から転送されたインデクス値またはＥＳＣデータに対して図示されない符号バッファを用いてハフマン符号化処理を行い可変長符号による符号データを生成し、符号書き込み部１５４に転送する。符号書き込み部１５４は、ハフマン符号化処理部１５３から転送された符号データを、符号書き込み部１５４が有する図示されない出力符号バッファを介してメインメモリ１３０に転送し、ページ符号データ領域１３０Ｃに記憶させる。
【００５１】
図７（ｂ）は、図７（ａ）に例示した画像データが符号化された符号データの一例を示す。このように、ライン単位に可変長符号を用いて符号化が行われ、１ラインの画像データが符号化されたライン符号データに続けてライン終端符号が配置される。符号書き込み部１５４は、例えば、ライン終端の画像データの符号をメインメモリ１３０に転送した後、ライン終端符号を生成し、このライン終端符号を、メインメモリ１３０における当該ライン終端の画像データの符号の直後に書き込む。
【００５２】
ラインカウンタ１５５は、符号化されたラインをカウントするもので、例えば符号書き込み部１５４においてライン終端符号が書き込まれる度に、カウント値ＩＹを１だけ増加させる。符号カウンタは、例えば符号書き込み部１５４で１ワード分の符号データをメインメモリ１３０に書き込む度に、符号カウント値Ｃを１だけ増加させる。符号カウント値Ｃは、ライン終端でクリアされる。
【００５３】
なお、符号バッファは、図８に例示されるように、例えば２ワード分の容量を持ち、可変長の符号データを先頭から詰め込む。符号バッファに詰め込まれた有効な符号データの終端が符号ポインタで示される。ここで、１ワードは１回のアドレス指定で読み出されるデータの単位であって、ここでは３２ビットであるものとする。したがって、符号バッファは、６４ビット分の符号データを格納することができる。
【００５４】
図９は、本実施形態に適用可能な符号フォーマットの例を示す。なお、以下において、「０ｂ」は、続く数値が２進数で表現されていることを示す。
【００５５】
図９（ａ）は、インデクス値を符号化したインデクス符号の符号表の例を示す。インデクス値を示す３２個の符号名にそれぞれ符号が対応付けられている。符号名の末尾の２文字がインデクス値を示す。インデクス値が小さいほど出現頻度が高いため、短いインデクス符号が割り当てられる。インデクス値は、ＭＴＦ符号化方式で用いる辞書のアドレスを示す。
【００５６】
また、本実施形態においては、符号化を効率良く行うために、ハフマン木に従い、符号長が３ビット（最短符号長）から９ビットまでの全ての符号をインデクス値「００」〜「２８」の２９個のインデクス値に対して使い切っている。残りの３個のインデクス値「２９」〜「３１」に対しては、符号長が１２ビットの符号を、符号の値が小さい方から順に割り当てる。上述した符号長が１２ビットのライン終端符号と併せて考えると、ハフマン木に従い、符号長が１２ビットの符号のうち４個の符号（０ｂ１１１１１１１１１０１１〜０ｂ１１１１１１１１１１１０）が、この符号表に存在しないことになる。
【００５７】
この図９（ａ）に例示する符号表は、例えばＲＯＭ１０４にインデクス符号テーブルとして予め格納される。すなわち、インデクス符号テーブルは、符号名（インデクス値）と、インデクス符号と、符号長とが互いに関連付けられて格納される。ハフマン符号化処理部１５３は、符号化処理の際に、ＲＯＭ１０４からインデクス符号テーブルを読み出して符号化を行う。
【００５８】
図９（ｂ）は、ＥＳＣデータの符号フォーマット例を示す。ＥＳＣデータは、データ値が辞書に無い場合に用いるもので、当該データ値がそのまま適用される。この例では、１６ビットのデータとして符号化するために、符号長が１６ビットとなっている。ＥＳＣデータの先頭には、符号長が３ビットのＥＳＣヘッダが付加される。
【００５９】
図９（ｃ）は、ライン終端符号の例を示す。ライン終端符号は、２進数の値「１」が１２個連なった符号とし、符号データにおけるラインの終端を判定するために用いられる。出現頻度が低いため、長い符号長が割り当てられている。
【００６０】
以下、図１０〜図１９を用いて、本実施形態に適用可能な符号化方法について説明する。図１０は、符号化処理の全体的な流れを示す一例のフローチャートである。ステップＳ１０で、ラインカウンタ１５５のカウント値ＩＹと符号カウンタ１５６の符号カウント値Ｃとをクリアし、それぞれ値「０」とする。ステップＳ１１で、ライン単位に符号化を行う。１ライン分の符号化が終了したら、次のステップＳ１２で処理したラインのカウント値ＩＹをカウントアップする。そして、次のステップＳ１３でカウント値ＩＹが画像の高さで処理したか否かを判定し、処理したと判定された場合、処理を終了する。処理が終了していないと判定された場合は、処理がステップＳ１１に戻される。
【００６１】
図１１は、図１０のステップＳ１１におけるライン単位の符号化処理の一例のフローチャートを示す。ステップＳ２０で、符号バッファを０すなわち空に初期化し、符号バッファのポインタ値を６４ビットに初期化する。
【００６２】
次のステップＳ２１で、画像データ読み込み部１５１は、メインメモリ１３０から画像データを１６ビット単位に読み込み、ＭＴＦ符号化処理部１５２に渡す。ＭＴＦ符号化処理部１５２は、次のステップＳ２２で、読み込んだ画像データと一致する辞書データを探索する。
【００６３】
図１２は、ステップＳ２２による辞書探索処理の一例のフローチャートを示す。ＭＴＦ符号化処理部１５２は、ステップＳ４０でインデクス値Ｉを０とし、次のステップＳ４１でＩ番目の辞書データが、図１１のステップＳ２１で読み込まれた画像データと一致するか否かを判定する。若し、一致しないと判定した場合、次のステップＳ４２でインデクス値Ｉを１だけ増加させ、次のステップＳ４３でインデクス値Ｉが３２未満であるか否かを判定する。若し、インデクス値Ｉが３２未満であると判定したら、処理をステップＳ４１に戻す。
【００６４】
一方、ステップＳ４３で、インデクス値Ｉが３２以上であると判定したら、処理をステップＳ４６に移行させてフラグＨＩＴＦＬＧの値を０とする。そして、図１２のフローチャートによる一連の処理を終了させて処理を図１１のフローチャートのステップＳ２３に移行させる。
【００６５】
上述のステップＳ４１で、ＭＴＦ符号化処理部１５２が、Ｉ番目の辞書データと読み込まれた画像データとが一致すると判定したら、処理をステップＳ４４に移行させ、一致したインデクス値Ｉを値ＤＩＣＴＮＵＭとし、次のステップＳ４５でフラグＨＩＴＦＬＧの値を１とする。
【００６６】
図１３を用いて、辞書探索についてより具体的に説明する。例えば読み込んだ画像データの値を「０ｘ５５５５」として、ＭＴＦ符号化処理部１５２は、辞書から、読み込んだ画像データの値と一致する辞書データの値「０ｘ５５５５」を探索する。この例では、探索の結果、読み込んだ画像データの値が１４番目の辞書データと一致することが確認されたため、インデクス値を「１４」としている。このインデクス値「１４」がＭＴＦ符号化処理部１５２から出力されることになる。ＭＴＦ符号化処理部１５２は、読み込んだ画像データと一致する辞書データが存在する場合、フラグＨＩＴＦＬＧ＝１とする。一致する値が辞書に存在しない場合は、フラグＨＩＴＦＬＧ＝０とする。
【００６７】
図１１のフローチャートの説明に戻り、ステップＳ２２の辞書探索が終了すると、次のステップＳ２３で、フラグＨＩＴＦＬＧに基づき入力画像データと一致する辞書データが存在するか否かが判定される。若し、フラグＨＩＴＦＬＧ＝１であって、入力画像データと一致する辞書データが存在すると判定された場合、処理がステップＳ２４に移行される。
【００６８】
ステップＳ２４では、ＭＴＦ符号化処理部１５２からインデクス値が出力され、ハフマン符号化処理部１５３に渡される。ハフマン符号化処理部１５３は、ＭＴＦ符号化処理部１５２から渡されたインデクス値を、図９を用いて説明した符号フォーマットに従い符号化する。符号化された符号データは、符号バッファに格納される。
【００６９】
図１４は、ステップＳ２４におけるインデクス符号化処理の一例のフローチャートを示す。ハフマン符号化処理部１５３は、ステップＳ７０で、図９（ａ）に示した符号フォーマットに基づき、値「ＤＩＣＴＮＵＭ」でインデクス符号テーブルの符号名を参照して、参照された符号名に対応するインデクス符号を符号データとして求めると共に、当該符号名に対応する符号長を求める。これら符号データおよび符号長を用いて、ステップＳ７１の符号出力処理で符号データの出力を行う。符号出力処理の詳細については、後述する。
【００７０】
図１１のフローチャートの説明に戻り、ステップＳ２４によるインデクス符号化処理が終了すると、処理がステップＳ２５に移行される。ステップＳ２５で、ＭＴＦ符号化処理部１５２は、辞書の更新処理を行う。図１５は、ステップＳ２５における辞書更新処理の一例のフローチャートを示す。ＭＴＦ符号化処理部１５２は、ステップＳ５０でインデクス値Ｉを１とし、次のステップＳ５１で（Ｉ−１）番目の辞書データをＩ番目の辞書データとし、次のステップＳ５２でインデクス値Ｉを１だけ増加させる。そして、次のステップＳ５３で、ＭＴＦ符号化処理部１５２は、インデクス値Ｉが値ＤＩＣＴＮＵＭ未満であるか否かを判定する。若し、インデクス値Ｉが値ＤＩＣＴＮＵＭ未満であると判定したら、処理をステップＳ５１に戻す。一方、インデクス値Ｉが値ＤＩＣＴＮＵＭ以上であると判定したら、処理をステップＳ５４に移行させ、値ＤＩＣＴＮＵＭが示す順番の辞書データを０番目の辞書データとする。ステップＳ５４の処理が終了すると、図１５のフローチャートによる一連の処理が終了され、処理が図１１のステップＳ２９に移行される。
【００７１】
図１６を用いて、辞書の更新処理についてより具体的に説明する。ＭＴＦ符号化処理部１５２は、読み込んだ画像データと値が一致する辞書データを辞書の先頭に移動させ、他の辞書データの辞書内での順番を順次繰り下げて辞書を更新する。この例では、読み込んだ画像データが１４番目の辞書データと一致したので、辞書の１番目〜１４番目の辞書データを１つずつ後方にずらし、一致した画像データを０番目の辞書に格納する。
【００７２】
図１１のフローチャートの説明に戻り、上述したステップＳ２３で入力画像データと一致する辞書データが存在しないと判定されたら、処理はステップＳ２６に移行される。ステップＳ２６で、ＭＴＦ符号化処理部１５２は、入力画像データに対してＥＳＣ符号化処理を行なう。ＥＳＣ符号化処理では、入力画像データがそのまま符号として用いられ、ＥＳＣ符号が生成される。
【００７３】
図１７は、ステップＳ２６におけるＥＳＣ符号化処理の一例のフローチャートを示す。ＭＴＦ符号化処理部１５２は、ステップＳ７５でＥＳＣヘッダの値０を符号長が３ビットの符号データとして、次のステップＳ７６の符号出力処理で、符号データおよび符号長を用いて符号データの出力処理を行う。次のステップＳ７７で、ステップＳ２１で読み込まれた画像データを符号データとし、符号長を１６ビットとして、次のステップＳ７８の符号出力処理で符号データおよび符号サイズを用いて符号データの出力処理を行う。ステップＳ７６およびステップＳ７８の符号出力処理の詳細については後述する。
【００７４】
図１１のフローチャートの説明に戻り、ステップＳ２６でＥＳＣ符号化処理が行われると、処理はステップＳ２７に移行され、ステップＳ２１で読み込んだデータを画像データとし、次のステップＳ２８で、ＥＳＣ符号による辞書更新処理が行われる。
【００７５】
図１８は、ステップＳ２８におけるＥＳＣ符号による辞書更新処理の一例のフローチャートを示す。ＭＴＦ符号化処理部１５２は、ステップＳ６０で、インデクス値Ｉを１として、次のステップＳ６１で（Ｉ−１）番目の辞書データをＩ番目の辞書データとし、次のステップＳ６２でインデクス値Ｉを１だけ増加させる。そして、次のステップＳ６３で、インデクス値Ｉが３２未満であるか否かを判定する。若し、インデクス値Ｉが３２未満であると判定したら、処理をステップＳ６１に戻す。一方、インデクス値Ｉが３２以上であると判定したら、処理をステップＳ６４に移行させ、画像データを０番目の辞書データとする。ステップＳ６４の処理が終了すると、図１８のフローチャートによる一連の処理が終了され、処理が図１１のステップＳ２９に移行される。
【００７６】
図１１のフローチャートの説明に戻り、ステップＳ２５の辞書更新処理またはステップＳ２８のＥＳＣ辞書更新処理が終了すると、処理がステップＳ２９に移行され、１ライン分のワード数を処理したか否かが判定される。若し、未だ１ライン分を処理していないと判定された場合は、処理はステップＳ２１に戻され、次の１ワード分の処理が行われる。
【００７７】
一方、１ライン分のワード数の処理が終了したと判定された場合、処理はステップＳ３０に移行される。ステップＳ３０で、ハフマン符号化処理部１５３は、ライン終端符号の符号化を行う。すなわち、値「０ｘＦＦＦ」（＝値「０ｂ１１１１１１１１１１１１」）をライン終端符号の符号データとし、符号長を１２ビットとする。次のステップＳ３１で、このライン終端符号に対する出力処理が行われる。符号出力処理については後述する。
【００７８】
次のステップＳ３２で、符号バッファが空か否かが判定される。若し、空であると判定されたら、図１１のフローチャートによる一連の符号化処理が終了される。一方、符号バッファが空ではないと判定されたら、処理はステップＳ３３に移行される。ステップＳ３３では、符号バッファ内の符号データが３２ビットだけ右シフトされて出力符号バッファに格納され、次のステップＳ３４で、出力符号バッファに格納された符号データが出力される。そして、次のステップＳ３５で符号カウント値Ｃが１だけ増加され、図１１のフローチャートによる一連の処理が終了される。
【００７９】
図１９は、上述のステップＳ３１、ステップＳ７１、ステップＳ７６およびステップＳ７８における符号出力処理の一例のフローチャートを示す。符号出力処理は、可変長の符号長の符号データをワードサイズ（この例では３２ビット）に纏めて出力する。符号バッファは６４ビットであり、符号サイズの長さの可変長の符号データ順次付加していく。符号ポインタは、符号バッファの中の有効な符号の終端を示す。
【００８０】
ステップＳ８０で、ハフマン符号化処理部１５３は、符号ポインタから符号長を減じた値を新たな符号ポインタとする。すなわち、符号バッファに符号データを付加するために、符号長分、符号ポインタを更新している。次のステップＳ８１で、符号データを符号ポインタで移動させて位置を合わせて、符号バッファに付加する。次のステップＳ８２で、符号ポインタの値が３２以下であるか否かを判定する。若し、符号ポインタの値が３２を超えていると判定されたら、符号出力処理を終了し、図１９のフローチャートによる一連の処理が終了される。
【００８１】
一方、符号ポインタの値が３２以下であれば、ステップＳ８３〜ステップＳ８７で、符号バッファの上位３２ビットが出力される。すなわち、ステップＳ８３で符号バッファが３２ビット右シフトされて出力符号バッファに出力され、次のステップＳ８４で出力符号バッファの内容が出力される。次のステップＳ８５で、符号ポインタに３２が加算され、次のステップＳ８６で符号バッファが３２ビット左シフトされる。そして、次のステップＳ８７で、符号カウント値Ｃが１だけ増加され、図１９のフローチャートによる一連の処理が終了される。
【００８２】
＜復号処理について＞
次に、本実施形態による復号処理について説明する。本実施形態では、プリンタ６０において、復号処理時に符号データのエラーの有無を検出し、エラーが検出されたら、ＣＰＵ２００に対して割り込みをかけて印字動作を停止させる。例えば、復号する符号データが符号表において有り得ない符号である場合に、エラーがあったとして検出する。
【００８３】
また、所定範囲の符号データを復号した際の復号量が予め指定された指定復号量と異なる場合に、エラーがあったとして検出する。例えば所定範囲が１ラインであって復号量が画素数である場合、符号データが復号された画像による１ラインの画素数が、指定された水平画素数と一致しない場合に、エラーがあったとして検出する。また例えば所定範囲が１ページであって、復号量が１ページにおいて復号された符号長である場合、１ページの符号長が指定された符号長と一致しない場合に、エラーがあったとして検出する。
【００８４】
図２０は、本実施形態に適用可能な復号部２０９の一例の構成を示す。復号部２０９は、アービタ３００、符号アドレス生成部３０１、レジスタ３０２および３０３、復号処理部３０４、エラー信号生成部３０５、エラーステータスレジスタ３０６、ならびに、コントローラ３０７を有する。コントローラ３０７は、例えばマイクロプロセッサからなり、図示されないＲＯＭに予め記憶されたプログラムに従い、この復号部２０９の各部の動作を制御する。
【００８５】
アービタ３００は、バスＩ／Ｆ２０７を介してバス２１３に接続され、メインメモリ２３０からの符号データの読み込みの調停を行う。符号アドレス生成部３０１は、メインメモリ２３０に記憶されるページの符号データを読み出すためのアドレスを生成する。
【００８６】
例えば、復号部２０９からメインメモリ２３０に対して符号データの読み出しを要求する際には、コントローラ３０７の制御により、アービタ３００とバスＩ／Ｆ２０７との間でメモリリクエストおよびメモリＡＣＫのやりとりが行われる。その後、符号アドレス生成部３０１で生成されたメモリアドレスと、読み出しを命令するＲ／Ｗ信号とが、アービタ３００からバスＩ／Ｆ２０７、バス２１３などを介してメモリコントローラ２０３に渡される。メモリコントローラ２０３は、渡されたメモリアドレスおよびＲ／Ｗ信号に従いメインメモリ２３０から符号データを読み出す。読み出された符号データは、メモリコントローラ２０３、バス２１３などを介して復号部２０９に転送され、リードデータとしてアービタ３００に渡される。
【００８７】
復号処理部３０４は、符号アドレス生成部３０１で生成されたアドレスに従いメインメモリ２３０から読み出された符号データをアービタ３００から受け取り、受け取った符号データを復号する。符号データが復号された画像データは、エンジンコントローラ２１０に対して出力される。
【００８８】
ここで、コントローラ３０７は、印字対象となる画像データの水平画素数を取得する。水平解像度は、例えば、プリンタサーバ５０からネットワークを介して転送された、印字の属性データに含まれる用紙サイズ、印字方向（用紙の向き）および印字解像度の情報に基づき取得することができる。それと共に、コントローラ３０７は、メインメモリ２３０に記憶される符号データのデータサイズから１ページ分の符号のワード単位の符号長を取得する。符号長は、プリンタサーバ５０からネットワークを介してプリンタ６０に転送するようにしても良い。コントローラ３０７は、これら水平画素数および符号長を、それぞれレジスタ３０２および３０３に格納する。
【００８９】
復号処理部３０４は、符号データの復号処理の際に、レジスタ３０２および３０３に格納される水平画素数および符号長に基づき、復号している符号データのエラーを検出する。ここでは、符号データのフォーマット上のエラーであるシンタクスエラーと、符号データが復号された結果に対して発生したセマンティクスエラーとが検出される。復号処理部３０４は、これらシンタクスエラーやセマンティクスエラーが検出された場合に、これらのエラーが検出されたことを示すシンタクスエラー信号やセマンティクスエラー信号を出力する。
【００９０】
また、復号処理部３０４は、メインメモリ２３０から符号データが読み込まれると、符号カウント値Ｃを１だけ増加させ、符号データにエラーが検出された場合に、この符号カウント値Ｃを出力する。これらシンタクスエラー信号、セマンティクスエラー信号および符号カウント値は、エラー信号生成部３０５に供給される。
【００９１】
エラー信号生成部３０５は、復号処理部３０４からシンタクスエラー信号またはセマンティクスエラー信号が供給されると、符号エラーが発生したことを示すエラー信号を、割り込みコントローラ２５０に対して出力し、ＣＰＵ２００に対して割り込みをかける。また、検出したエラーのステータスを示すエラーステータス値を、エラーステータスレジスタ３０６に格納する。例えばエラー信号に応じてＣＰＵ２００からこの復号部２０９に対してアクセスがなされた場合に、このエラーステータスレジスタ３０６に格納されるエラーステータス値がＣＰＵ２００に対して返される。
【００９２】
図２１は、復号処理部３０４の一例の構成を示す。符号読み込み部３１０は、アービタ３００およびバスＩ／Ｆ２０７などを介してメインメモリ２３０から符号データを読み出す。メインメモリ２３０からの符号データの読み出しは、１ワード単位で行われる。メインメモリ２３０から読み込まれた符号データは、ハフマン復号処理部３１１に転送され、図示されない入力符号バッファに格納される。ハフマン復号処理部３１１は、符号読み込み部から転送された符号データのハフマン符号を、図示されない符号バッファを用いて復号して、ＭＴＦ復号処理部３１２に転送する。符号バッファは、図８を用いて説明した構成と同一であるので、ここでの説明を省略する。
【００９３】
ＭＴＦ復号処理部３１２は、この例では３２個のデータを格納する辞書を持ち、ハフマン復号処理部３１１から転送された復号データがインデクス値である場合は、復号されたインデクス値により辞書を読み込み、ＭＴＦ処理により画像データを求め、画像データ書き込み部３１３に転送する。また、ハフマン復号処理部３１１から転送された復号データがＥＳＣデータの場合は、復号データを直接的に画像データ書き込み部３１３に転送する。画像データ書き込み部３１３は、ＭＴＦ復号処理部３１２から転送された画像データを図示されないラインメモリに一時的に格納し、画像データをライン単位でエンジンコントローラ２１０に対して出力する。
【００９４】
符号カウンタ３２０は、メインメモリ２３０から読み込まれた１ワードの符号データが入力符号バッファに格納されると、符号カウント値Ｃを１だけ増加させる。換言すれば、符号カウント値Ｃは、メインメモリ２３０における符号データのアドレスを示す。また、符号カウント値Ｃを１ページ内で累積的に増加させていくことで、復号した符号データの１ページ分の符号長を取得することができる。
【００９５】
ラインメモリカウンタ３２１は、画像データ書き込み部３１３が有するラインメモリに書き込まれた画像データを画素単位でカウントし、カウント値ＬＭを出力する。
【００９６】
ここで、ハフマン復号処理部３１１は、符号データの復号の際に、レジスタ３０２および３０３に格納される水平画素数および符号長に基づき、符号データのセマンティクスエラーおよびシンタクスエラーを検出する。ハフマン復号処理部３１１は、符号データにセマンティクスエラーを検出した場合、その旨示すセマンティクスエラー信号を出力する。同様に、符号データにシンタクスエラーを検出した場合、その旨示すシンタクスエラー信号を出力する。また、セマンティクスエラーまたはシンタクスエラーが検出された場合、符号カウント値Ｃを出力する。
【００９７】
＜エラー検出処理について＞
次に、本実施形態による符号データのエラー検出処理について説明する。上述したように、符号のシンタクスエラーと、復号結果のセマンティクスエラーとを検出する。
【００９８】
先ず、シンタクスエラーの検出について、図２２を用いて説明する。図２２は、上述した図９（ａ）の符号表に対して、ハフマン木に従った符号長が３ビットから１２ビットまでの全ての符号を、符号長および符号名に対応付けて示す。図２２に示される符号の中には、ＥＳＣ符号における符号長３ビットのＥＳＣヘッダと、インデクス値「０」〜「３１」にそれぞれ対応付けられた符号と、ライン終端符号とが含まれる。また、図２２に示される符号のうち、符号「０ｂ１１１１１１１１１０１１」〜符号「０ｂ１１１１１１１１１１１０」の４個の符号は、有効な値が割り当てられていない符号である。
【００９９】
復号の際には、未復号の符号の先頭から１２ビットを切り取り、この１２ビットの符号の先頭から順次ビットの値を判定し符号表の逆変換である逆符号表を参照することで、対応する符号名を取得する。図２３は、図９（ａ）の符号表に対応する逆符号表の例を示す。符号長が３ビット〜１２ビットのハフマン符号に基づく符号に対して、符号名と符号長とが対応付けられている。この逆符号表は、インデクス逆符号テーブルとして、例えばＭＴＦ復号処理部３１２が有する図示されないＲＯＭに予め格納される。なお、ＥＳＣヘッダとライン終端符号とをインデクス逆符号テーブルに含めてもよい。
【０１００】
図２３において、符号における「ｘ」は、そのビットが特に規定されないことを示す。すなわち、１２ビットに切り取られた符号のうち最初の３ビットを見ることで、その符号が符号名「ＩＮＤＥＸ００」に対応することが確定する。一方、１２ビットに切り取られた符号のうち１２ビット全てを見なければ、その符号が符号名「ＩＮＤＥＸ２９」に対応するか否かは確定しない。
【０１０１】
ここで、上述したように、符号長が３ビット〜１２ビットの符号のうち、符号長が１２ビットの４個の符号（「０ｂ１１１１１１１１１０１１」〜「０ｂ１１１１１１１１１１１０」）は、ハフマン木としては存在するが、有効な値が割り当てられていない符号である。すなわち、この４個の符号は、上述の逆符号表には含まれておらず、符号データが正常であれば、復号時に出現するはずのない有り得ない符号である。したがって、未復号の符号データの先頭から１２ビットを切り取った符号がこの４個の符号の何れかであれば、シンタクスエラーが発生していると判断できる。
【０１０２】
次に、セマンティクスエラーの検出について、図２４〜図２８を用いて説明する。図２４は、ＭＴＦ符号化処理の例をより具体的に示す。なお、図２４において、「０ｘ」は、後続する数値が１６進表記されていることを示す。画像データは、例えば画素データのデータ長が１６ビットであって、１６ビット単位で符号化される。先頭すなわち０番目のデータ「０ｘＦＦＦＦ」が入力された際には、辞書には何も登録されていないので、この０番目のデータをＥＳＣ符号化すると共に、このデータ「０ｘＦＦＦＦ」を最初のインデクス値「００」に対応付けて辞書データとして辞書に登録する。
【０１０３】
次の１番目のデータ「０ｘＦＦＦＦ」は、インデクス値「００」の辞書データと一致するため、インデクス値「００」に対応する符号に符号化する。２番目のデータ「０ｘＦ３３３」は、辞書に登録されていないので、ＥＳＣ符号化すると共に、辞書を更新して辞書の先頭に登録する。３番目のデータ「０ｘ３３３３」は、辞書に登録されていないので、ＥＳＣ符号化すると共に、辞書を更新して辞書の先頭に登録する。４番目のデータ「０ｘ３３３３」は、インデクス値「００」の辞書データと一致するため、インデクス値「００」に対応する符号に符号化する。５番目のデータ「０ｘ３３３３」は、インデクス値「００」の辞書データと一致するため、インデクス値「００」に対応する符号に符号化する。６番目のデータ「０ｘ３３３Ｆ」は、辞書に登録されていないので、ＥＳＣ符号化すると共に、辞書を更新して辞書の先頭に登録する。７番目のデータ「０ｘＦＦＦＦ」は、辞書のインデクス値「０３」の辞書データと一致するため、インデクス値「０３」に対応する符号に符号化する。また、この７番目のデータは、ラインの終端のデータであるので、ライン終端符号が付加される。
【０１０４】
図２５は、図２４で説明したように符号化された符号を、具体的な値で示す。図２５（ａ）は、分かりやすいように、元の画像データの区切りを符号に対応させて示すと共に、符号を４ビット毎に纏めて示している。図２５（ａ）を、実際の符号により近い表現を用いて示した例が図２５（ｂ）である。このように、画像データの１６ビット毎にインデクス符号化またはＥＳＣ符号化された符号が隙間無く連続的に並べられて、１ライン分の符号データが構成される。各符号は、ハフマン符号の規則に従った可変長符号であるので、符号データの先頭から順に復号する必要がある。
【０１０５】
図２６は、図２５に示した符号データを例に挙げて、ＭＴＦ符号の復号処理の例をより具体的に示す。本実施形態では、符号データを、未復号部分の先頭から１２ビットを切り取って復号処理を行う。符号データから切り取った１２ビットの符号の先頭の２ビットおよび１２ビット全体から、その１２ビットがインデクス符号、ＥＳＣ符号およびライン終端符号の何れであるかを判定する。
【０１０６】
すなわち、先頭の２ビットが値「００」であれば、当該１２ビットはＥＳＣ符号の一部であり、値「００」以外であれば、当該１２ビットはインデクス符号またはライン終端符号である。ＥＳＣ符号であれば、符号データにおける当該１２ビットの４ビット目から１６ビット分の符号が取り出されてそのまま１６ビットの画像データとして用いられ、この１６ビットの次のビットが、未復号部分の先頭とされる。
【０１０７】
また、当該１２ビットが値「１」の連続であれば、当該１２ビットは、ライン終端符号である。これら以外の場合、当該１２ビットは、インデクス符号である。この場合、当該１２ビットに基づき逆符号表を参照して、対応するインデクス符号を探索する。そして、逆符号表において、探索されたインデクス符号に対応付けられた符号名を求め、辞書から、この符号名に対応する辞書データを求め、画像データとする。また、符号データにおいて、探索されたインデクス符号の符号長分を消費した次のビットが、未復号部分の先頭とされる。
【０１０８】
図２６において、０番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ０００１１１１１１１１１」であり、先頭の３ビットが値「０ｂ０００」であることから当該符号がＥＳＣ符号であることが分かる。これにより、ＥＳＣヘッダの３ビットに付加された１６ビットの符号（この例では値「０ｂ１１１１１１１１１１１１１１１１」＝値「０ｘＦＦＦＦ」）を画像データとして出力し、消費した１９ビット分、未復号の符号データの先頭をシフトさせる。また、この値「０ｘＦＦＦＦ」の画像データを、符号名「ＩＮＤＥＸ００」の辞書データとして辞書に登録して辞書を更新する。
【０１０９】
１番目の処理は、未復号部分の先頭からの１２ビットの符号が０ｂ００１０００１１１１００」であり、先頭の３ビットが値「００１」であることから当該符号が符号名「ＩＮＤＥＸ００」のインデクス符号を含むことが分かる。これにより、符号名「ＩＮＤＥＸ００」に対応する辞書データ「０ｘＦＦＦＦ」を画像データとして出力し、消費した３ビット分、未復号の符号データの先頭をシフトさせる。
【０１１０】
２番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ０００１１１１００１１０」であり、先頭の３ビットが体「０ｂ０００」であることから当該符号がＥＳＣ符号であることが分かる。これにより、ＥＳＣヘッダの３ビットに付加された１６ビットの符号（この例では値「０ｂ１１１１００１１００１１００１１」＝値「０ｘＦ３３３」）を画像データとして出力し、消費した１９ビット分、未復号の符号データの先頭をシフトさせる。また、この値「０ｘＦ３３３」の画像データを、符号名「ＩＮＤＥＸ００」の辞書データとして辞書に登録して辞書を更新する。
【０１１１】
３番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ０００００１１００１１０」であり、先頭の３ビットが体「０ｂ０００」であることから当該符号がＥＳＣ符号であることが分かる。これにより、ＥＳＣヘッダの３ビットに付加された１６ビットの符号（この例では値「０ｂ００１１００１１００１１００１１」＝値「０ｘ３３３３」）を画像データとして出力し、消費した１９ビット分、未復号の符号データの先頭をシフトさせる。また、この値「０ｘ３３３３」の画像データを、符号名「ＩＮＤＥＸ００」の辞書データとして辞書に登録して辞書を更新する。
【０１１２】
４番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ００１００１０００００１」であり、先頭の３ビットが値「００１」であることから当該符号が符号名「ＩＮＤＥＸ００」のインデクス符号を含むことが分かる。これにより、符号名「ＩＮＤＥＸ００」に対応する辞書データ「０ｘ３３３３」を画像データとして出力し、消費した３ビット分、未復号の符号データの先頭をシフトさせる。
【０１１３】
５番目の処理は、未復号部分の先頭からの１２ビットの符号が「０ｂ００１０００００１１００」であり、先頭の３ビットが値「００１」であることから当該符号が符号名「ＩＮＤＥＸ００」のインデクス符号を含むことが分かる。これにより、符号名「ＩＮＤＥＸ００」に対応する辞書データ「０ｘ３３３３」を画像データとして出力し、消費した３ビット分、未復号の符号データの先頭をシフトさせる。
【０１１４】
６番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ０００００１１００１１０」であり、先頭の３ビットが体「０ｂ０００」であることから当該符号がＥＳＣ符号であることが分かる。これにより、ＥＳＣヘッダの３ビットに付加された１６ビットの符号（この例では値「０ｂ００１１００１１００１１１１１１」＝値「０ｘ３３３Ｆ」）を画像データとして出力し、消費した１９ビット分、未復号の符号データの先頭をシフトさせる。また、この値「０ｘ３３３Ｆ」の画像データを、符号名「ＩＮＤＥＸ００」の辞書データとして辞書に登録して辞書を更新する。
【０１１５】
７番目の処理は、未復号部分の先頭からの１２ビットの符号が値「０ｂ１０００１１１１１１１１」であり、先頭の４ビットが値「１０００」であることから当該符号が符号名「ＩＮＤＥＸ０３」のインデクス符号を含むことが分かる。これにより、符号名「ＩＮＤＥＸ０３」に対応する辞書データ「０ｘＦＦＦＦ」を画像データとして出力し、消費した４ビット分、未復号の符号データの先頭をシフトさせる。
【０１１６】
８番目の処理は、未復号部文の先頭からの１２ビットの符号が値「０ｂ１１１１１１１１１１１１」であり、当該符号がライン終端符号であることが分かる。そのため、ここでこのラインに対する復号処理を終了する。
【０１１７】
次に、復号対象の符号データにエラーが含まれる場合について、図２７および図２８を用いて説明する。例えば図２７（ａ）に例示されるような符号データを考える。なお、この図２７（ａ）に示される符号データは、図２５（ａ）に示した符号データと同一のデータである。図２７（ａ）の符号データにおいて、位置５００Ａ〜５００Ｅは、画像データの境界を示す。
【０１１８】
この図２７（ａ）に示される符号データについて、２番目の画像データの符号「０ｂ０００１１１１００１１００１１００１１」における３ビット目の値が値「０」から値「１」に変化した場合について考える。
【０１１９】
この場合、図２７（ｂ）に示されるように、符号エラーにより、元の符号「０ｂ０００１１１１００１１００１１００１１」が符号「０ｂ００１１１１１００１１００１１００１１」に変化したために、逆符号表に基づき、先頭の３ビット（「００１」）で当該符号が符号名「ＩＮＤＥＸ００」のインデクス符号を含むものと判断される。したがって、図２８の２番目における「復号された１６ビット単位の画像データ」の項に示すように、符号名「ＩＮＤＥＸ００」に対応する辞書データを画像データとして出力し、消費した３ビット分、未復号の符号データの先頭をシフトさせることになる。すなわち、符号データにおける２番目の画像データの後端が位置５０１Ａとなり、図２７（ａ）に示した符号エラーの無い場合の２番目の画像データの後端の位置５００Ａに対してずれてしまう。
【０１２０】
新たな未復号の符号データの先頭から１２ビットを取り出した符号「０ｂ１１１１００１１００１１」は、先頭の６ビット（「１１１１００」で、当該符号が符号名「ＩＮＤＥＸ１９」のインデクス符号を含むものと判断される。したがって、図２８の３番目における「復号された１６ビット単位の画像データ」の項に示すように、符号名「ＩＮＤＥＸ１９」に対応する辞書データを画像データとして出力し、消費した６ビット分、未復号の符号データの先頭をシフトさせることになる。ここで、符号名「ＩＮＤＥＸ１９」に対応する辞書データは、未だ辞書に登録されていないため、出力される画像データの値は不定となる。
【０１２１】
以下同様にして、符号エラーが存在していても、図２７（ｂ）および図２８の２番目以降の画像データに例示されるように、逆符号表に従い復号が行われていく。上述したように、符号表は、ハフマン木に従い、符号長が３ビットの符号から１２ビットの符号までを、符号長が１２ビットの符号の一部を除いてほぼ使い切っている。そのため、エラーにより符号の一部が変化しても、変化後の符号が符号表（逆符号表）上に存在し、復号できてしまう可能性が高い。すなわち、このエラーは、符号フォーマット上のエラーではなく、復号後に発覚するセマンティクスエラーである。
【０１２２】
このようなセマンティクスエラーの場合、エラーが無い正しい符号データに対して、復号後の画像データの数が異なっていることが考えられる。図２７の例では、図２７（ａ）に例示される符号エラーの無い状態における２番目の画像データ以降のデータ境界の位置５００Ａ〜５００Ｅに対して、１ビットの符号エラーが発生した状態では、図２７（ｂ）に例示されるように、データ境界の位置が位置５０１Ａ〜５０１Ｈとずれてしまっている。その結果、符号エラーの無い状態で１ラインの画像データ数が８個であったのに対し、符号エラー発生後は１ラインの画像データ数が１１個となり、１ビットの符号エラー発生により画像データ数が増加してしまっている。
【０１２３】
そこで、復号後のラインの画素数を、１ラインの画素数として予め指定された水平画素数と比較することで、このようなセマンティクスエラーを検出することができる。また、符号エラーが発生していても、画素数には変化が無い場合も考えられる。この場合は、１ページ分の符号長をカウントし、予め指定された１ページ分の符号長と比較することで、セマンティクスエラーを検出することができる。
【０１２４】
＜復号処理の詳細＞
図２９は、復号処理の全体的な流れを示す一例のフローチャートである。ステップＳ１００で、復号処理部３０４は、ラインカウンタのカウント値ＩＹと符号カウンタのカウント値Ｃとをクリアし、それぞれ値「０」とする。ステップＳ１０１で、ラインメモリカウンタ３２１のカウント値ＬＭをクリアし、値「０」とする。
【０１２５】
復号処理部３０４は、次のステップＳ１０２で、ライン単位に復号処理を行う。１ライン分の復号処理が終了したら、次のステップＳ１０３でカウント値ＩＹを１だけ増加させ、ステップＳ１０４でカウント値ＩＹが画像の高さまで処理したか否かを判定する。画像の高さを示す情報は、印字の属性データに含まれる用紙サイズ、印字方向（用紙の向き）および印字解像度の情報に基づき取得することができる。若し、カウント値ＩＹが画像の高さに達していないと判定されたら、処理がステップＳ１０１に戻され、次のラインについて処理が開始される。
【０１２６】
一方、ステップＳ１０４で、画像の高さまで処理したと判定された場合、処理がステップＳ１０５に移行される。ステップＳ１０５では、復号処理部３０４は、符号カウント値Ｃが指定された符号長より小さいか否かを判定する。若し、小さくないと判定したら、１ページ分の復号処理が終了したとされ、図２９のフローチャートによる一連の処理が終了される。
【０１２７】
一方、ステップＳ１０５で、符号カウント値Ｃが指定された符号長よりも小さいと判定したら、復号処理部３０４は、処理をステップＳ１０６に移行させる。ステップＳ１０６で、ハフマン復号処理部３１１は、符号エラーが発生したとして、発生したエラーの種類を示すエラーステータスと、符号カウント値Ｃとを含む割り込み信号をＣＰＵ２００に入力して、ＣＰＵ２００に対して割り込みをかける。
【０１２８】
より具体的には、復号処理部３０４において、ハフマン復号処理部３１１は、エラーステータス値をセマンティクスエラーを示す値として、セマンティクスエラーを示す情報であるセマンティクスエラー信号を生成する。そして、生成したセマンティクスエラー信号と符号カウント値Ｃとをエラー信号生成部３０５に対して出力する。エラー信号生成部３０５は、これらセマンティクスエラーを示す情報と符号カウント値Ｃとを含んだエラー信号を生成し、割り込みコントローラ２５０に送信する。割り込みコントローラ２５０は、受信したエラー信号に基づきセマンティクスエラーを示す情報と符号カウント値Ｃとを含んだ割り込み信号を生成し、この割り込み信号をＣＰＵ２００に入力してＣＰＵ２００に割り込みをかける。
【０１２９】
なお、ＣＰＵ２００は、上述のステップＳ１０６でエラーの検出に伴い割り込みがかけられると、図５に経路Ｌとして示したように、エンジンコントローラ２１０を制御して、プリンタエンジン２６０による印字処理を停止させる。プリンタエンジン２６０がインクジェット方式の場合には、印字ヘッドを浮かせると共にジェットの噴出を止めることで行うことが考えられる。また、レーザプリンタでは、レーザ照射を停止させることで印字処理を停止させることが考えられる。
【０１３０】
これに限らず、印字処理の停止は、例えば復号部２０９における復号処理を停止させることで行うことができる。プリンタエンジン２６０に対する印字データの送信を停止させてもよい。
【０１３１】
図３０は、図２９におけるステップＳ１０２のライン単位の復号処理をより詳細に示す一例のフローチャートである。ステップＳ１１０で、ハフマン復号処理部３１１は、ハフマン復号処理部３１１が有する図示されない符号バッファを空（０ビット）に初期化し、符号ポインタを６４ビットに初期化する。
【０１３２】
次のステップＳ１１１で、符号入力処理により符号データが読み込まれ、符号バッファの先頭から詰め込まれる。次のステップＳ１１２で、ハフマン復号処理部３１１は、符号バッファを５２ビット右シフトさせる。これにより、符号バッファに格納された符号データから１２ビット分の符号データが切り取られる。次のステップＳ１１３で、ハフマン復号処理部３１１は、ステップＳ１１２で切り取った１２ビット分の符号データの値が値「０ｘＦＦＦ」（＝「０ｂ１１１１１１１１１１１１」）であるか否か、すなわち、当該１２ビット分の符号データがライン終端符号であるか否かを判定する。若し、ライン終端符号ではないと判定したら、処理をステップＳ１１４に移行させる。
【０１３３】
ステップＳ１１４で、ハフマン復号処理部３１１は、ステップＳ１１２で切り取った１２ビット分の符号データの値が、値「０ｘＦＦＢ」（＝「０ｂ１１１１１１１１１０１１」）未満であるか否かを判定する。すなわち、このステップＳ１１４で、当該１２ビット分の符号データが、図２２を用いて説明した「有り得ない符号」であるか否かを判定する。当該１２ビット分の符号データの値が値「０ｘＦＦＢ」以上であって、且つ、値「０ｘＦＦＦ」未満である場合に、当該１２ビット分の符号データが「有り得ない符号」であると判定でき、シンタクスエラーが検出される。なお、当該１２ビット分の符号データの値が値「０ｘＦＦＦ」未満であるか否かは、上述のステップＳ１１３の判定により知ることができる。
【０１３４】
ハフマン復号処理部３１１は、若し、ステップＳ１１４で、当該１２ビット分の符号データの値が値「０ｘＦＦＢ」未満であると判定したら、処理をステップＳ１１５に移行させ、符号バッファを６１ビット右シフトさせて符号データの先頭の３ビットを切り出す。次のステップＳ１１６で、ハフマン復号処理部３１１は、切り出した３ビットの符号データの値が値「０」すなわち値「０ｂ０００」であるか否かを判定する。当該３ビットの符号データの値が値「０」であれば、この３ビットに続く符号データがＥＳＣ符号であることを示し、値が値「０」以外であれば、この３ビットに続く符号データがインデクス符号であることを示す。
【０１３５】
ハフマン復号処理部３１１は、若し、ステップＳ１１６で当該３ビットの符号データの値が値「０」であると判定したら、処理をステップＳ１１８に移行させる。ステップＳ１１８では、ＭＴＦ復号処理部３１２により、ＥＳＣ符号の復号処理が行われる。一方、値「０」以外であると判定したら、処理をステップＳ１１７に移行させる。ステップＳ１１７では、ＭＴＦ復号処理部３１２により、インデクス符号の復号処理を行う。ステップＳ１１７またはステップＳ１１８による復号処理が終了したら、処理がステップＳ１１１に戻され、次の符号が入力される。
【０１３６】
ハフマン復号処理部３１１は、上述のステップＳ１１３で、符号データの値が値「０ｘＦＦＦ」であると判定したら、処理をステップＳ１２０に移行させる。ステップＳ１２０で、ハフマン復号処理部３１１は、ラインメモリカウンタ３２１からカウント値ＬＭを取得し、このカウント値ＬＭが指定された水平画素数未満であるか否かを判定する。指定された水平画素数は、レジスタ３０４から読み込んで取得する。若し、カウント値ＬＭが指定された水平画素数未満であると判定されたら、処理をステップＳ１２１に移行させる。
【０１３７】
また、ハフマン復号処理部３１１は、ステップＳ１２０で、ラインメモリカウンタ３２１のカウント値ＬＭが指定された水平画素数以上であると判定したら、処理をステップＳ１２２に移行させる。ステップＳ１２２では、符号カウンタ３２０から符号カウント値Ｃを取得し、この符号カウント値Ｃが指定された符号長を超えるか否かが判定される。指定された符号長は、レジスタ３０３から読み込んで取得する。若し、ステップＳ１２２で、符号カウント値Ｃが指定された符号長を超えると判定したら、処理をステップＳ１２１に移行させる。
【０１３８】
ステップＳ１２１で、ハフマン復号処理部３１１は、セマンティクスエラーによる符号エラーが発生したとして、発生したエラーの種類を示すエラーステータスと、符号カウント値Ｃとを含む割り込み信号をＣＰＵ２００に入力して、ＣＰＵ２００に対して割り込みをかける。ＣＰＵ２００は、この割り込みに応じて、上述したようにして例えばエンジンコントローラ２１０を制御して印字処理を停止させる。ＣＰＵ２００に対して割り込みをかける処理は、図２９のステップＳ１０６で説明した処理と同様なので、詳細な説明を省略する。
【０１３９】
一方、上述のステップＳ１２２で、符号カウント値Ｃが指定された符号長を超えないと判定したら、この図３０のフローチャートによる一連の処理を終了させ、処理を図２９のステップＳ１０３に移行させる。
【０１４０】
また、上述したステップＳ１１４で、符号データの値が値「０ｘＦＦＢ」以上であると判定したら、処理をステップＳ１１９に移行させる。この場合は、ステップＳ１１２で切り出した符号データが逆符号表に無い符号すなわち「有り得ない符号」であることを意味する。そのため、ステップＳ１１９で、ハフマン復号処理部３１１は、シンタクスエラーによる符号エラーが発生したとして、発生したエラーの種類を示すエラーステータスと、符号カウント値Ｃとを含む割り込み信号をＣＰＵ２００に入力して、ＣＰＵ２００に対して割り込みをかける。ＣＰＵ２００は、この割り込みに応じて、上述したようにして例えばエンジンコントローラ２１０を制御して印字処理を停止させる。ＣＰＵ２００に対して割り込みをかける処理は、図２９のステップＳ１０６で説明したセマンティクスエラーの場合と同様なので、詳細な説明を省略する。
【０１４１】
図３１は、上述したステップＳ１１１の符号入力処理を示す一例のフローチャートである。最初のステップＳ１６０で、ハフマン復号処理部３１１は、符号ポインタの値が３２以上か否かを判定する。若し、符号ポインタの値が１ワード分すなわち３２未満であると判定したら、処理をステップＳ１６５に移行させる。一方、符号ポインタの値が３２以上であると判定したら、処理をステップＳ１６１に移行させる。
【０１４２】
ステップＳ１６１で、符号読み込み部３１０は、メインメモリ２３０の符号カウント値Ｃが示すアドレスから符号データを読み込み、ハフマン復号処理部３１１の入力符号バッファに対して格納する。そして、次のステップＳ１６２で、符号カウント値Ｃを１だけ増加させ、ステップＳ１６３で符号ポインタの値から３２を減じて新たな符号ポインタの値とする。そして、次のステップＳ１６４で、入力符号バッファの符号データを、符号ポインタが示す位置に合わせて符号バッファに追加して、処理をステップＳ１６５に移行させる。
【０１４３】
ステップＳ１６５で、ハフマン復号処理部３１１は、符号カウント値Ｃが指定された符号長を超えたか否かを判定する。指定された符号長の情報は、レジスタ３０３から取得する。若し、超えていないと判定されたら、この図３１のフローチャートによる一連の処理を終了して、元のフローチャートの処理に戻る。
【０１４４】
一方、ステップＳ１６５で、ハフマン復号処理部３１１は、符号カウント値Ｃが指定された符号長を超えたと判定したら、処理をステップＳ１６６に移行させる。この場合、符号データにセマンティクスエラーが発生していると考えられる。そのため、ステップＳ１６６では、上述のステップＳ１０６などと同様にして、エラーステータスをセマンティクスエラーとして、シンタクスエラーを示す情報であるシンタクスエラー信号と符号カウント値Ｃとからエラー信号生成部３０５でエラー信号を生成し、ＣＰＵ２００に対して割り込みをかける。ＣＰＵ２００は、割り込みがかけられると、上述したようにして印字処理を停止させる。
【０１４５】
図３２は、上述したステップＳ１１８におけるＥＳＣ符号の復号処理を示す一例のフローチャートである。ステップＳ１３０で、符号バッファが３ビット左シフトされると共に、符号ポインタの値が３だけ減ぜられてＥＳＣヘッダが取り除かれる。そして、次のステップＳ１３１で図３１を用いて説明したようにして符号入力処理が行われ、ハフマン復号処理部３１１の符号バッファから符号データがＭＴＦ復号処理部３１２に入力される。次のステップＳ１３２で、ハフマン復号処理部３１１は、符号バッファを４８ビット右シフトさせて１６ビット分の符号データを切り出す。次のステップＳ１３３で、符号バッファが１６ビット左シフトされると共に、符号ポインタの値から１６ビットが減ぜられて符号ポインタが更新される。
【０１４６】
次のステップＳ１３４で、ステップＳ１３２で切り出された１６ビット分の符号データが画像データとして出力される。この画像データは、画像データ書き込み部３１３に供給され、図示されない画像ラインメモリに格納される。画像データが画像ラインメモリに格納されると、ラインメモリカウンタのカウント値ＬＭが１だけ増加される。
【０１４７】
次のステップＳ１３６で、ラインメモリカウンタ３２１のカウント値ＬＭが指定された水平画素数を超えたか否かが判定される。若し、超えていないと判定されたら、この図３１のフローチャートによる一連の処理が終了され、処理が図２９のフローチャートのステップＳ１１１に戻される。
【０１４８】
一方、ステップＳ１３６で、ハフマン復号処理部３１１は、カウント値ＬＭが指定された水平画素数を超えたと判定したら、処理をステップＳ１３７に移行させる。この場合、符号データにセマンティクスエラーが発生していると考えられる。そのため、ステップＳ１３７では、上述のステップＳ１０６などと同様にして、エラーステータスをセマンティクスエラーとして、シンタクスエラーを示す情報であるシンタクスエラー信号と符号カウント値Ｃとからエラー信号生成部３０５でエラー信号を生成し、ＣＰＵ２００に対して割り込みをかける。ＣＰＵ２００は、割り込みがかけられると、上述したようにして印字処理を停止させる。
【０１４９】
図３３は、上述したステップＳ１１７におけるインデクス符号の復号処理を示す一例のフローチャートである。ステップＳ１４０で、ハフマン復号処理部３１１は、符号バッファを５２ビット右シフトさせる。これにより、符号データから１２ビットが切り出されてアドレス値とされる。次のステップＳ１４１で、上述した図２３に例示されるインデクス逆符号テーブルにおける符号をアドレス値で参照する。これにより、アドレス値に対応する符号名が求められ、この符号名が示す値を値ＤＩＣＴＮＵＭとする。それと共に、アドレス値に対応する符号長を求める。
【０１５０】
次のステップＳ１４２で、符号バッファを、求められた符号長だけ左シフトさせると共に、符号ポインタの値から符号長を減じて新たな符号ポインタとし、符号ポインタを更新する。そして、次のステップＳ１４３で、図３４に例示されるようにして値ＤＩＣＴＮＵＭをインデクスとして辞書をアクセスして辞書データを求め、ステップＳ１４４で辞書を更新する。ステップＳ１４５で、ＭＴＦ復号処理部３１２は、ステップＳ１４３で求められた辞書データを画像データとして出力する。図３４の例では、値ＤＩＣＴＮＵＭ＝１４に対応する辞書データ「０ｘ５５５５」を画像データとして出力する。
【０１５１】
画像データが出力されると、ステップＳ１４６で、ラインメモリカウンタ３２１のカウント値ＬＭが１だけ増加される。そして、次のステップＳ１４７で、ＭＴＦ復号処理部３１２は、カウント値ＬＭが指定された水平画素数を超えたか否かを判定する。若し、超えていないと判定したら、この図３３のフローチャートによる一連の処理が終了され、処理が図３０のフローチャートのステップＳ１１１に戻される。
【０１５２】
一方、ステップＳ１４７で、ハフマン復号処理部３１１は、カウント値ＬＭが指定された水平画素数を超えたと判定したら、処理をステップＳ１４８に移行させる。この場合、符号データにセマンティクスエラーが発生していると考えられる。そのため、ステップＳ１４８では、上述のステップＳ１０６などと同様にして、エラーステータスをセマンティクスエラーとして、シンタクスエラーを示す情報であるシンタクスエラー信号と符号カウント値Ｃとからエラー信号生成部３０５でエラー信号を生成し、ＣＰＵ２００に対して割り込みをかける。ＣＰＵ２００は、割り込みがかけられると、上述したようにして印字処理を停止させる。
【０１５３】
＜エラー表示について＞
上述のようにして符号エラーが検出された際に、印字動作を停止させると共に、符号エラーが発生した旨をユーザに通知できるようにすると、好ましい。以下では、プリンタ６０における表示によってエラー発生を通知する例について説明する。図３５は、プリンタ６０において、入力部２２１およびディスプレイ２２９を組み合わせて構成されるオペレーションパネル４００の一例の外観を示す。オペレーションパネル４００に対し、表示部４０１が設けられると共に、ボタン群４１０および４１３、ならびに、スタートボタン４１２などの操作子が設けられる。
【０１５４】
表示部４０１は、ディスプレイ２２９と、入力部２２１の押圧された位置に対応する信号を出力する操作子とが一体的に構成された所謂タッチパネルからなる。ボタン群４１０および４１３、ならびに、スタートボタン４１２は、入力部２２１に対応し、ユーザ入力を受け付ける。ボタン群４１０は、例えば初期設定やプリンタ６０の機能を選択する複数の操作子を含む。ボタン群４１３は、テンキー４１１を含み、数値の入力、入力された数値などのリセット、予熱の切り替え、停止操作を行う複数の操作子を含む。
【０１５５】
スタートボタン４１２は、印字動作の開始を指示する。例えば、スタートボタン４１２が操作されることで、メインメモリ２３０から符号データが読み出されて復号部２０９で復号され、符号データが復号された画像データがエンジンコントローラ２１０に供給されてプリンタエンジン２６０が駆動され、印字が開始される。これに限らず、印字動作は、プリンタサーバ５０から転送される印字開始コマンドにより開始させることもできる。
【０１５６】
図３６は、表示部４０１に表示される、通常の操作画面の一例を示す。通常の操作画面においては、出力形式選択領域４２０と、入力形式選択領域４２１とが設けられる。入力形式選択領域４２１は、印字データの入力先を指定できる。出力形式選択領域４２０は、印字用紙（サイズ、向きなど）の指定、印字の際の倍率指定などを行うことができる。
【０１５７】
図３７は、符号エラーが検出された際の表示部４０１に対するエラー表示の一例を示す。図３７の例では、エラーが検出された旨を通知するエラー通知表示４３０と、エラーの原因を通知するエラー原因通知表示４３１が表示部４０１に表示される。これらエラー通知表示４３０およびエラー原因通知表示４３１は、図３７に例示するように表示部４０１の全面に表示させてもよいし、表示部４０１の一部に表示させてもよい。
【０１５８】
すなわち、復号部２０９において、符号データのエラーが検出されると、上述したように、復号部２０９からエラーステータス値を含むエラー信号が出力され、このエラー信号に基づき図５の経路Ｋに従ってＣＰＵ２００に対して割り込みがかけられる。ＣＰＵ２００は、この割り込みに応じてエンジンコントローラ２１０を制御して印字動作を停止させる。それと共に、ＣＰＵ２００は、エラー通知表示４３０およびエラー原因通知表示４３１を表示させるための表示制御信号を生成し、この表示制御信号を経路Ｍに従いディスプレイコントローラ２２８に転送する。ディスプレイコントローラ２２８は、受信した表示制御信号に従いディスプレイ２２９を駆動して、表示部４０１に対してエラー通知表示４３０およびエラー原因通知表示４３１を表示させる。
【０１５９】
なお、エラーの通知は、表示部４０１に対する表示で行うのに限られない。例えば、ＬＥＤ(Light Emitting Diode)などを用いて、エラーの通知を行うための専用の表示部を設けてもよいし、音声出力部を設けて音声でエラー通知を行ってもよい。さらに、エラー通知は、プリンタサーバ５０で行うようにしてもよい。例えば、ＣＰＵ２００は、エラー信号に基づく割り込みによりエラー通知信号を生成し、このエラー通知信号をネットワークを介してプリンタサーバ５０に転送し、ＣＰＵ１００に渡す。ＣＰＵ１００は、このエラー通知信号に応じて例えばディスプレイ１０９に対してエラー表示を行う。
【０１６０】
以上説明したように、本実施形態によれば、符号データのシンタクスエラーまたはセマンティクスエラーを検出し、これらのエラーが検出された際に、印字処理を停止するようにしている。そのため、符号データにエラーが存在しても、プリンタの印字機構に負荷をかけることが防がれる。また、エラーが存在する符号データにより印字品質が劣化することを防止することができる。
【０１６１】
なお、本実施形態は、階調処理後の少値画像データの符号化および復号処理、階調処理前の多値画像データの符号化および復号処理の何れにも適用可能である。また、上述では、画像データの符号化方式としてＭＴＦ符号化方式を用いているが、これはこの例に限定されない。例えば、同値のデータが連続する数（ランレングス）を求めるランレングス符号化方式を本実施形態による画像データの符号化方式に適用することも可能である。
【０１６２】
さらに、上述では、画像データの印字のみを行うプリンタ６０を例として説明したが、これはこの例に限定されない。例えば、プリンタ機能、スキャナ機能、コピー機能、ＦＡＸ機能を１の筐体で実行可能な複合機に、本実施形態を適用することもできる。
【符号の説明】
【０１６３】
５０  プリンタサーバ
６０  プリンタ
１００  ＣＰＵ
１０６  通信コントローラ
１３０  メインメモリ
１５１  画像データ読み込み部
１５２  ＭＴＦ符号化処理部
１５３  ハフマン符号化処理部
１５４  符号書き込み部
１５５  ラインカウンタ
１５６  符号カウンタ
２００  ＣＰＵ
２０６  通信コントローラ
２０９  復号部
２１０  エンジンコントローラ
２２１  入力部
２２９  ディスプレイ
２３０  メインメモリ
２５０  割り込みコントローラ
３０２，３０３  レジスタ
３０４  復号処理部
３０５  エラー信号生成部
３０６  エラーステータスレジスタ
３０７  コントローラ
３１０  符号読み込み部
３１１  ハフマン復号処理部
３１２  ＭＴＦ復号処理部
３１３  画像データ書き込み部
３２０  符号カウンタ
３２１  ラインカウンタ
４００  オペレーションパネル
４０１  表示部
４３０  エラー通知表示
４３１  エラー原因通知表示
【先行技術文献】
【特許文献】
【０１６４】
【特許文献１】特開２００３−２３３３９６号公報
【特許文献２】特開２００７−９１３９８号公報
【図１】
0005545012.tif 000002
【図２】
0005545012.tif 000003
【図３】
0005545012.tif 000004
【図４】
0005545012.tif 000005
【図５】
0005545012.tif 000006
【図６】
0005545012.tif 000007
【図７】
0005545012.tif 000008
【図８】
0005545012.tif 000009
【図９】
0005545012.tif 000010
【図１０】
0005545012.tif 000011
【図１１】
0005545012.tif 000012
【図１２】
0005545012.tif 000013
【図１３】
0005545012.tif 000014
【図１４】
0005545012.tif 000015
【図１５】
0005545012.tif 000016
【図１６】
0005545012.tif 000017
【図１７】
0005545012.tif 000018
【図１８】
0005545012.tif 000019
【図１９】
0005545012.tif 000020
【図２０】
0005545012.tif 000021
【図２１】
0005545012.tif 000022
【図２２】
0005545012.tif 000023
【図２３】
0005545012.tif 000024
【図２４】
0005545012.tif 000025
【図２５】
0005545012.tif 000026
【図２６】
0005545012.tif 000027
【図２７】
0005545012.tif 000028
【図２８】
0005545012.tif 000029
【図２９】
0005545012.tif 000030
【図３０】
0005545012.tif 000031
【図３１】
0005545012.tif 000032
【図３２】
0005545012.tif 000033
【図３３】
0005545012.tif 000034
【図３４】
0005545012.tif 000035
【図３５】
0005545012.tif 000036
【図３６】
0005545012.tif 000037
【図３７】
0005545012.tif 000038