(57)【要約】【課題】複数のプロセッサの動作を走査ライン単位又はバンド単位で同期させつつ高速に並列処理を実行できる枠組みを提供する。【解決手段】  画像処理装置は、イメージを構成する走査ラインについて、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域ごとに圧縮されたデータを対象として並列に伸張処理を行う画像処理装置であって、各部分領域それぞれに対応して設けられたＦＩＦＯタイプの複数のメモリと、各部分領域につき同容量の圧縮データを含むデータセットを単位としてバースト転送されたデータを前記各部分領域の圧縮データに振り分けてそれぞれ対応するメモリに格納する格納手段と、各プロセッサが、それぞれに割り当てられた部分領域に対応するメモリから前記各部分領域の圧縮データを読み出して走査ライン単位で同期して並列に伸長処理を実行する並列プロセッサユニットと、を備えることを特徴とする。【選択図】  図９
2005151054.tif 000002
【特許請求の範囲】
【請求項１】
イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域ごとに圧縮されたデータを対象として並列に伸張処理を行う画像処理装置であって、
各部分領域それぞれに対応して設けられたＦＩＦＯタイプの複数のメモリと、
各部分領域につき同容量の圧縮データを含むデータセットを単位としてバースト転送されたデータを前記各部分領域の圧縮データに振り分けてそれぞれ対応するメモリに格納する格納手段と、
各プロセッサが、それぞれに割り当てられた部分領域に対応するメモリから前記各部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に伸長処理を実行する並列プロセッサユニットと、
を備えることを特徴とする画像伸長装置。
【請求項２】
請求項１記載の画像伸長装置を備えたプリンタ装置。
【請求項３】
イメージ圧縮部及びイメージ伸長部を含んで構成され、それぞれが複数のプロセッサを用いて並列に画像処理を行う機能を備える画像処理システムであって、
イメージ圧縮部は、
イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域のそれぞれに複数のプロセッサのうち少なくとも１つを割り当てて並列に画像圧縮処理を行い、各部分領域につき同容量の圧縮データを含むデータセットを単位としてイメージ伸長部へバースト送信し、
イメージ伸長部は、
イメージ圧縮部からバースト転送されたデータを受信し、この受信したデータを部分領域ごとの圧縮データに振り分けて、各部分領域それぞれに対応して設けられたＦＩＦＯタイプのメモリに格納し、各プロセッサは、それぞれに割り当てられた各メモリから部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に画像伸長処理を行うように制御することを特徴とする画像処理システム。
【請求項４】
イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域ごとに圧縮されたデータを対象として、複数のプロセッサを用いて並列に伸長する画像伸長方法であって、
各部分領域につき同容量の圧縮データを含むデータセットを単位としてバースト転送されたデータを受信し、この受信したデータを部分領域ごとの圧縮データに振り分けて、各部分領域それぞれに対応して設けられたＦＩＦＯタイプのモリに格納する工程と、
各プロセッサが、それぞれに割り当てられたメモリから部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に画像伸長処理を行うように制御する工程と、を備えることを特徴とする画像伸長方法。
【請求項５】
請求項４記載の画像伸長方法をコンピュータで実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを用いて並列に画像処理（特に画像伸長処理）を行うための技術に関する。
【背景技術】
【０００２】
一般に、レーザプリンタシステムでは、ＲＩＰ（ラスターイメージプロセッサ）により、ＰＤＬ（ページ記述言語）で記述された印刷対象を印刷イメージに展開し、順次に走査ライン（ラスター）ごとに印刷エンジンに送り出して、印刷を実行する。
【０００３】
このとき、印刷イメージを１ページ分全部展開して記憶しておこうとすると、大変多くのメモリ領域が必要となってしまう。そのため、１ページを複数の走査ラインから構成されるバンドに分割し、その単位で印刷イメージを展開するのが普通である。
【０００４】
このようなバンド単位の展開処理を高速に行うために、複数のプロセッサそれぞれに各バンドを割り当てて並列に展開処理を行う構成が提案されている（特許文献１）。
【特許文献１】特開２００３−５１０１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ＲＩＰをホスト装置が備える場合、展開した印刷イメージをプリンタ側に送信する必要がある。この場合、印刷イメージはデータ量が多いことから、ホスト装置において送信する前に圧縮処理を施し、プリンタ側で伸長するという枠組みを取るのが普通である。
【０００６】
ここで、ホスト装置やプリンタが複数のプロセッサを備えている場合、特許文献１のように、複数のプロセッサそれぞれに各バンドを割り当てて並列に圧縮処理や伸長処理を行うという構成が考えられる。
【０００７】
しかし、このようなバンド単位に並列化する手法では、個々の走査ライン（個々のバンド）のデータに対しては並列化がなされていない。そのため、最初の１走査ライン（１バンド）について処理結果が得られるまでに必要な時間が単一のプロセッサで処理を行う場合と変わらないといった問題が残る。別言すれば、複数のプロセッサで並列化しているにもかかわらず、実際に印刷が実行されるまでの立ち上がりについてはアドバンテージが得られていない。
【０００８】
また、バンド単位に並列化する手法の場合、スループットを向上させるためには、各プロセッサが自己に割り当てられたバンドについて並列に処理を実行できるように、プロセッサ数分の処理結果を格納するメモリ領域が必要となる。そのため、プロセッサ数を増やして並列度を上げていくと、それに応じて処理に必要なメモリ領域も増加してしまうという問題が生じる。
【０００９】
本願の発明者らは、上記問題を検討した結果、個々の走査ライン（個々のバンド）について、走査ラインの方向と垂直に複数の部分領域（以下、「チャンネル」と呼ぶ）に分割した場合の、前記チャンネルのそれぞれに前記複数のプロセッサのうち少なくとも１つを割り当てて並列に画像処理（圧縮処理、伸長処理）を行うことで、上記目的を達成できると考えるに至った。
【００１０】
ここで、ホスト装置からプリンタ側へ各チャンネルの圧縮データを転送する場合、高速にデータ転送すべく、各チャンネルについて同容量（例えばｎバイト）の圧縮データを含むデータセットを単位としてバースト転送を行う構成とすることが望ましい。特に、ホスト装置側で並列圧縮データをＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）に格納しておくことで、より高速にバースト転送を行うことが可能である。
【００１１】
一方、プリンタ側で複数のプロセッサを用いて並列伸長する際、各プロセッサの処理を単純化すべく、ＦＩＦＯ（First In First out）メモリを利用して各プロセッサが常に同じ場所から圧縮データを読み出せる構成とすることが望ましい。
【００１２】
しかし、バースト転送とＦＩＦＯメモリとを単純に組み合せようとすると、すなわちバースト転送された圧縮データを単一のＦＩＦＯメモリに格納して伸長処理を行おうとすると、次のような問題が発生する。
【００１３】
通常、１チャンネル分の圧縮データのサイズは圧縮状況に応じて異なっているため、各チャンネルについて同容量のデータセットを単位としてバースト転送を行うと、１回のバースト転送で転送されるデータセットの中にチャンネルによって異なる走査ライン（異なるバンド）の圧縮データが含まれる状況が生じうる。
【００１４】
かかる状況を、図１６〜図１８を参照して、走査ラインが４つのチャンネルに分割される場合を例に説明する。今、図１６に示すように、ホスト装置において圧縮データが格納されており、図１７に示すように、１チャンネルについて１バイトの圧縮データを含む計４バイトのデータセットを単位としてバースト転送を行うものとする。この場合、１回目〜６回目までのバースト転送されるデータセットの中には、各チャンネルともに第１走査ラインに関する圧縮データが含まれている。しかし、７回目にバースト転送されるデータセットでは、第１、２、４チャンネルは第１走査ラインに関する圧縮データ、第３チャンネルは第２走査ラインに関する圧縮データとなっており、チャンネルによって異なる走査ラインの圧縮データが含まれてしまう状況が生じている。
【００１５】
このようにバースト転送された結果をそのままＦＩＦOメモリに格納すると、図１８に示すように、走査ラインの並びが維持されずに（すなわち、部分的に走査ラインの並びに関して逆転が生じた状態で）格納されることになる。このような状態のＦＩＦＯメモリからデータを読み出しつつ、各プロセッサの動作について走査ライン単位で同期させようとする場合、第３チャンネル担当プロセッサは、第１走査ライン第３チャンネル第６バイト目のデータ（符号１−３−６）を読み出して伸長処理を行った時点で、第１走査ラインに関する伸長処理を終了して停止し、第２走査ラインに関する伸長処理の開始を待つことになる。この場合、ＦＩＦＯメモリには第２走査ライン第３チャンネル第１バイト目のデータ（符号２−３−１）が読み出されずに残るため、第４チャンネル担当プロセッサは、第１走査ライン第４チャンネル第７バイト目のデータ（符号１−４−７）を読み出すことができなくなってしまう。
【００１６】
このように、バースト転送された圧縮データをそのままＦＩＦＯメモリに格納して伸長処理を行う構成では、走査ライン単位（又はバンド単位）で同期させながら並列に伸長処理を行うことができないという問題が発生することがわかった。
【００１７】
そこで、本発明は、複数のプロセッサを用いて圧縮データを並列に伸長する場合に、バースト転送された圧縮データを受け取る構成と、ＦＩＦＯメモリから圧縮データを読み出して並列に伸長する構成とを両立させた上で、各プロセッサの動作を走査ライン単位又はバンド単位で同期させつつ高速に並列処理を実行できる枠組みを提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記課題を解決するために本発明の画像処理装置は、イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域ごとに圧縮されたデータを対象として並列に伸張処理を行う画像処理装置であって、各部分領域それぞれに対応して設けられたＦＩＦＯタイプの複数のメモリと、各部分領域につき同容量の圧縮データを含むデータセットを単位としてバースト転送されたデータを前記各部分領域の圧縮データに振り分けてそれぞれ対応するメモリに格納する格納手段と、各プロセッサが、それぞれに割り当てられた部分領域に対応するメモリから前記各部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に伸長処理を実行する並列プロセッサユニットと、を備えることを特徴とする。
【００１９】
また、本発明のプリンタ装置は、上記画像伸長装置を備えることを特徴とする。
【００２０】
また、本発明の画像処理システムは、イメージ圧縮部及びイメージ伸長部を含んで構成され、それぞれが複数のプロセッサを用いて並列に画像処理を行う機能を備える画像処理システムであって、イメージ圧縮部は、イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域のそれぞれに複数のプロセッサのうち少なくとも１つを割り当てて並列に画像圧縮処理を行い、各部分領域につき同容量の圧縮データを含むデータセットを単位としてイメージ伸長部へバースト送信し、イメージ伸長部は、イメージ圧縮部からバースト転送されたデータを受信し、この受信したデータを部分領域ごとの圧縮データに振り分けて、各部分領域それぞれに対応して設けられたＦＩＦＯタイプのメモリに格納し、各プロセッサは、それぞれに割り当てられた各メモリから部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に画像伸長処理を行うように制御することを特徴とする。
【００２１】
また、本発明の画像処理方法は、イメージを構成する走査ライン（又はバンド）について、走査ラインの方向と垂直に複数の部分領域に分割した場合の、前記部分領域ごとに圧縮されたデータを対象として、複数のプロセッサを用いて並列に伸長する画像伸長方法であって、各部分領域につき同容量の圧縮データを含むデータセットを単位としてバースト転送されたデータを受信し、この受信したデータを部分領域ごとの圧縮データに振り分けて、各部分領域それぞれに対応して設けられたＦＩＦＯタイプのモリに格納する工程と、各プロセッサが、それぞれに割り当てられたメモリから部分領域の圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に画像伸長処理を行うように制御する工程と、を備えることを特徴とする。
【００２２】
また、本発明の画像伸長方法は、コンピュータにより実施することができるが、そのためのコンピュータプログラムは、ＣＤ−ＲＯＭ、磁気ディスク、半導体メモリ及び通信ネットワークなどの各種の媒体を通じてコンピュータにインストールまたはロードすることができる。また、コンピュータプログラムが、プリンタ用カードやプリンタ用オプションボードに記録されて流通する場合も含む。
【発明の効果】
【００２３】
本発明によれば、複数のプロセッサを用いて圧縮データを並列に伸長する場合に、バースト転送された圧縮データを受け取る構成と、ＦＩＦＯメモリから圧縮データを読み出して並列に伸長する構成とを両立させた上で、各プロセッサの動作を走査ライン単位又はバンド単位で同期させつつ高速に並列処理を実行することができる。
【発明を実施するための最良の形態】
【００２４】
（第１の実施形態）
図１は、本発明の実施形態のプリンタシステム１のハードウェア構成を示すブロック図である。図１に示すように、プリンタシステム１は、ホスト装置１０と、通信ネットワーク（ＬＡＮ、インターネット、専用線、パケット通信網、それらの組み合わせ等のいずれであってもよく、有線、無線の両方を含む）を介して該ホスト装置１０と通信可能に構成されるプリンタ装置（画像形成装置）２０とを含んでいる。
【００２５】
ホスト装置１０は、メインＣＰＵ、並列処理プロセッサ１１〜１４を備える並列処理ユニット１５、ＲＯＭ、ＲＡＭ、ユーザインタフェース、通信インタフェース等のハードウェアを備えている。本実施形態では、並列処理ユニット１５が４つのプロセッサ１１〜１４を備える構成としているが、プロセッサ数は設計に応じて２以上の任意の数（例えば８）とすることができる。
【００２６】
ホスト装置１０は、プリンタ装置２０に印刷を実行させるため必要な通常の制御機能として、プリンタドライバ手段１６を備えている。
【００２７】
プリンタドライバ手段１６は、通常のプリンタドライバと同様の機能構成であり、例えば、ホスト装置１０上で動作するアプリケーションプログラムからの印刷要求に応じて、ポストスクリプト等の所定のプリンタ制御言語により記述された印刷対象データに基づいてラスタイメージを生成するＲＩＰ手段、ラスタイメージに対して所定の画像処理（スクリーン処理など）を施して印刷イメージを作成する画像処理手段などを備える。
【００２８】
ただし、本実施形態のプリンタドライバ手段１６は、後述するように、並列処理ユニット１５を用いて個々の走査ライン（又は個々のバンド）に対して並列に画像圧縮処理を実行する圧縮制御手段１７、並列処理ユニット１５によって圧縮されたデータをプリンタ装置２０へバースト転送する転送手段１８などを備えている点で、従来の構成と異なっている（図２参照）。
【００２９】
なお、これらの各手段は、ホスト装置１０内のＲＯＭやＲＡＭ、外部の記憶媒体等に格納されるプログラムをメインＣＰＵが実行することにより機能的に実現される。
【００３０】
プリンタ装置２０は、動力機構部とプリンタコントローラ２６を備えている。
【００３１】
動力機構部は、用紙をプリンタ内に供給する給紙機構、印字を行う印刷エンジン、及び用紙をプリンタ機外に排出する排紙機構等により構成される。印刷エンジンは、例えば、インクジェットプリンタや熱転写プリンタのように１文字単位で印刷するシリアルプリンタ、１行単位で印刷するラインプリンタ、ページ単位で印刷するページプリンタ等に対応する各種印刷エンジンを用いることができる。
【００３２】
プリンタコントローラ２６は、メインＣＰＵ、プロセッサ２１〜２４を備える並列処理ユニット２５、ＲＯＭ、ＲＡＭ、ユーザインタフェース、通信インタフェース等を備えている。なお、本実施形態では、並列処理ユニット２５が４つのプロセッサ２１〜２４を備える構成としているが、プロセッサ数は設計に応じて２以上の任意の数（例えば８）とすることができる。また、動力機構部が独立してＣＰＵを備えていてもよく、その場合は、動力機構部のＣＰＵが、所定の通信路を介して情報処理部のメインＣＰＵと通信を行い、印刷エンジンを制御して印刷動作を行わせることになる。
【００３３】
プリンタコントローラ２６は、通常のプリンタにおけるプリンタコントローラと同様の機能構成であり、例えば、動力機構部を制御して印刷を実行させるエンジン制御手段やホスト装置１０からコマンドやデータを受信して受信バッファに格納する受信手段２７などを備える。
【００３４】
ただし、本実施形態の受信手段２７は、バースト転送されたデータを受信すると、この受信したデータを部分領域ごとの圧縮データに振り分けて、各部分領域にそれぞれ対応して設けられた複数のＦＩＦＯタイプの受信バッファ（入力バッファ）にそれぞれ格納する。
【００３５】
また、本実施形態のプリンタコントローラ２６は、各受信バッファに格納される圧縮データに基づいて、並列処理ユニット２５を用いて個々の走査ライン（又は個々のバンド）に対して並列に伸長処理を実行する伸長制御手段２８、並列処理ユニット２５による伸長処理結果を印刷に用いられる順序で印刷エンジンへ転送する転送手段２９などを備えている点で、従来の構成と異なっている（図２参照）。
【００３６】
なお、これらの各手段は、プリンタ装置２０内のＲＯＭやＲＡＭ、外部の記憶媒体等に格納されるプログラムをメインＣＰＵが実行することにより実現される。
【００３７】
以下、図３〜図１２に示すフローチャート等を参照して、プリンタシステム１における印刷処理について説明する。各工程（符号が付与されていない部分的な工程を含む）は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
【００３８】
（ホスト装置１０における処理）
プリンタドライバ手段１６は、外部又はホスト装置１０上で動作しているアプリケーションプログラムから印刷要求を受け付けると、プリンタ装置２０（プリンタコントローラ２６）に対して印刷指示コマンドを送信するとともに、ＲＩＰ手段などに対して処理の開始を指示する。
【００３９】
ＲＩＰ手段は、処理開始の指示を受け付けると、アプリケーションプログラムから受け取った、ポストスクリプト等の所定のプリンタ制御言語により記述された印刷対象データに基づいて、ラスタイメージを生成する。なお、アプリケーションプログラム等からラスタイメージの形式で印刷対象データを受け取ることができる場合は、ＲＩＰ手段による処理は省略できる。
【００４０】
画像処理手段は、前記生成されたラスタイメージに対して所定の画像処理（スクリーン処理など）を施し、印刷イメージを生成して、ＲＡＭの所定領域に格納する。
【００４１】
圧縮制御手段１７は、前記生成された印刷イメージを構成する主走査方向のライン（以下、単に「走査ライン」と呼ぶ）を副走査方向の順に選択する（図３：ステップＳ１００）。なお、主走査方向、副走査方向は、プリンタ装置２０における走査を基準として定めるものとする。
【００４２】
次に、圧縮制御手段１７は、前記選択した走査ラインを、走査ラインの方向と垂直に複数の部分領域に分割する（図３：ステップＳ１０１）。以下では、かかる部分領域を「チャンネル」と呼び、走査ライン方向における並び順、すなわち左から順にチャンネル番号を付加して各チャンネルを識別するものとする（図４参照）。なお、本実施形態では、走査ラインが左から右へ水平に走査されることを前提として、左右という概念を用いている。
【００４３】
次に、圧縮制御手段１７は、前記選択した走査ラインにおいて各チャンネルに含まれる印刷イメージ（以下、「部分データ」と呼ぶ）の先頭位置を特定する（図３：ステップＳ１０２）。例えば、１走査ラインが２０４８画素である場合、１つの走査ラインをプロセッサ数に応じて均等に４つの部分領域に分割し、第１画素、第５１２画素、第１０２４画素、第１５３６画素をそれぞれ部分データの先頭位置として特定することが考えられる。
【００４４】
なお、全走査ラインに共通してチャンネルを定め、予め各チャンネルの部分データの先頭位置を特定しておけば、ステップＳ１０１〜１０２は省略することができる。
【００４５】
次に、圧縮制御手段１７は、前記複数のチャンネルのそれぞれにプロセッサ１１〜１４のうち少なくとも１つを割り当てる（図３：ステップＳ１０３）。具体的には、チャンネル１にはプロセッサ１１、チャンネル２にはプロセッサ１２というように、チャンネルとプロセッサの組み合わせを固定して割り当てるものとする。
【００４６】
次に、圧縮制御手段１７は、前記割り当てたプロセッサが新たなデータを処理できるかどうかを判断し、処理できる場合には、対応する部分データの先頭位置を前記割り当てたプロセッサに渡し、該部分データの読み出しを指示する(図３：ステップＳ１０４)。
【００４７】
ここで、プロセッサが新たなデータを処理できる場合とは、該プロセッサが次の処理結果を新たに書き込むことができる場合である。例えば、処理結果を書き込む領域として、プロセッサ１１〜１４（チャンネル１〜４）に対して図１６に示すように出力バッファの一部領域をそれぞれ割り当てる場合、該出力バッファの割当領域に空きがあるか、又は割当領域に既に書き込まれた処理結果について転送手段１８による転送が終了し上書きすることができるかどうかに基づいて、新たなデータを処理できるかどうかを判断すればよい。
【００４８】
なお、出力バッファは、高速にバースト転送を行うことができるＳＤＲＡＭにより構成することが望ましい。後述するように、出力バッファに書き込まれた処理結果（圧縮データ）は転送手段１８によってバースト転送されるからである。
【００４９】
次に、圧縮制御手段１７は、前記生成された印刷イメージを構成する走査ラインのうち未選択の走査ラインがある場合は、ステップＳ１００に戻る（図３：ステップＳ１０５）。
【００５０】
並列処理ユニット１５の各プロセッサ１１〜１４は、圧縮制御手段１７から部分データの先頭位置及び読み出し指示を受け付けると（図５：ステップＳ２００：ＹＥＳ）、前記生成した印刷イメージを格納したＲＡＭの所定領域から該先頭位置に基づいて部分データを読み出す（図５：ステップＳ２０１）。
【００５１】
次に、前記読み出した部分データに対して所定の圧縮処理を実行して部分圧縮データを生成する（図５：ステップＳ２０２）。このとき、部分圧縮データの境界が検出できるように、部分圧縮データの終端に（又は最初に）所定の境界情報を追加しておく。なお、所定の圧縮処理としては、設計に応じて従来の種々の圧縮アルゴリズムを採用することができ、例えば印刷イメージが２値データの場合であれば、ＪＢＩＧ（Joint Bi−level Image Experts Group）のアルゴリズムを採用することが考えられる。
【００５２】
そして、前記生成した部分圧縮データを出力バッファの割り当てられた一部領域に書き込む（図５：ステップＳ２０３）。なお、図１６に示すように各プロセッサに出力バッファの一部領域を割り当てる場合、各プロセッサが次に書き込みを行うアドレス（カレントアドレス）を参照できるように、例えばプロセッサごとにカレントアドレスを格納するカウンタを設け、書き込んだ容量（バイト数）に応じてカウンタを加算する構成を採用することが考えられる。
【００５３】
転送手段１８は、前記生成された印刷イメージについて、出力バッファに未転送のデータがあるかどうかを判断する（図６：ステップＳ３００）。そして、未転送のデータがない（転送が終了している）場合は、処理を終了する。
【００５４】
一方、未転送のデータがある場合、転送手段１８は、例えばプリンタ装置２０（プリンタコントローラ２６）との通信結果に基づいて、プリンタ装置２０（プリンタコントローラ２６）が部分圧縮データを受信可能であるかどうかを判断する（図６：ステップＳ３０１）。
【００５５】
そして、受信可能である場合、各チャンネルにつき同容量の部分圧縮データを含むデータセットを単位としてバースト転送を行うように、出力バッファからプリンタ装置２０（プリンタコントローラ２６）へのデータ転送を制御する（図６：ステップＳ３０２）。
【００５６】
なお、バースト転送を行うデータセットのサイズは設計に応じて定めることができるが、本実施形態では、図７に示すように、各チャンネルにつき８バイト分の部分圧縮データを含む計３２バイト（４チャンネル×８バイト）のデータセットを単位として、バースト転送を行うものとする。このようにバースト転送を行う場合、バースト転送されるデータセットには複数の走査ラインに関する部分圧縮データが含まれる可能性がある。図７を参照すると、１回目のバースト転送では、第１走査ラインと第２走査ラインに関する部分圧縮データが含まれていることがわかる。
【００５７】
（プリンタ装置２０における処理）
プリンタコントローラ２６は、ホスト装置１０から印刷指示コマンドが送られると、受信手段２７を介してこれを受信するとともに、エンジン制御手段により動力機構部を制御して印刷の準備を整える。
【００５８】
受信手段２７は、印刷指示コマンドの受信後、バースト転送されたデータセットを受信すると（図８：ステップＳ４００のＹｅｓ）、受信バッファへの格納処理を実行する。
【００５９】
ここで、受信バッファは、上述したようにホスト装置１０から各チャンネルの部分圧縮データを含むデータセットを単位としてバースト転送されてくるデータを、チャンネル毎の部分圧縮データに振り分けて格納するためのバッファとなることから、例えばＲＡＭ上に図９に示すようなＦＩＦＯタイプのバッファをチャンネル毎に構成することが考えられる（又はＦＩＦＯタイプメモリをチャンネル毎に複数設けるように構成することも可能である）。図９（Ａ）に示す例では、バースト転送されたデータをチャンネル毎に振り分けて格納できるように、チャンネルの数に応じた４つの受信バッファが構成されている。
【００６０】
受信手段２７は、バースト転送を行うデータセットの設定に従って（Nチャンネル×Mバイト）、バースト転送されたデータをチャンネル毎の部分圧縮データに振り分ける。具体的には、受信手段２７は、チャンネルの並び順に受信バッファを選択する（図８：ステップＳ４０１）。そして、受信したデータから１チャンネル容量分のデータ（１チャンネル分の部分圧縮データ）を取り出して、選択した受信バッファへ格納する（図８：ステップＳ４０２）例えば、本実施形態では、ホスト装置１０から各チャンネルにつき８バイトの部分圧縮データを含む計３２バイトのデータセットを単位としてバースト転送されてくる構成であるので、受信手段２７は、チャンネル１に対応する受信バッファ１を選択すると、受信したデータから８バイト分のデータを取り出して受信バッファ１に格納する。
【００６１】
受信手段２７は、全てのチャンネルのデータについて受信バッファへの格納処理を終えたか否か判断し（図８：ステップＳ４０３）、格納処理を終えていないと判断した場合は（図８：ステップＳ４０３のＮｏ）、残りのチャンネルのデータを処理するためにＳ４０１に戻る。一方、全てのチャンネルのデータについて格納処理を終えたと判断した場合は（図８：ステップＳ４０３のＹｅｓ）、処理を終了し、伸張制御手段２８へ伸張処理の開始を指示する。これにより、１回目のバースト転送により受信したデータの各受信バッファへの格納処理が終了する。
【００６２】
このように受信バッファをチャンネルの数に応じて複数構成した場合、チャンネル１の部分圧縮データは受信バッファ１に連続して格納され、チャンネル２の部分圧縮データは受信バッファ２に連続して格納され、チャンネルNの部分圧縮データは受信バッファNに連続して格納されることとなる。つまり、各チャンネルの部分圧縮データは、図９（Ｂ）に示すように各チャンネルに対応する受信バッファに格納されるので、並列処理ユニット２５の各プロセッサは、常に同じ場所（受信バッファ）を特定して、各プロセッサに割り当てられたチャンネルの部分圧縮データを読み出すことができる。
【００６３】
伸張制御手段２８は、伸張処理開始の指示を受け付けると、チャンネルごとに用意される伸張フラグに初期値として”未終了”をセットする（図１０：ステップＳ５００）。かかる伸張フラグは、後述するように、各チャンネルにおいて１つの走査ラインに関する部分圧縮データの伸張が終了した場合に”終了”に変更されることになる。
【００６４】
次に、伸張制御手段２８は、並列処理ユニット２５の各プロセッサ２１〜２４に対して、それぞれ割り当てられたチャンネルに対応する受信バッファからの部分圧縮データの読み出しを指示する（図１０：ステップＳ５０１）。そして、全てのチャンネルの伸張フラグが”終了”となっているか否かを判断し（図１０：ステップＳ５０２）、全ての伸張フラグが”終了”となっている場合には、１つの走査ラインに関する部分圧縮データの伸張が終了したとみなし、受信バッファに部分圧縮データが未だ格納されているか否かを判断する（図１０：ステップＳ５０３）。そして、受信バッファに部分圧縮データが格納されている場合には、次の走査ラインに関する部分圧縮データの伸張処理を行うために、Ｓ５００に戻る。
【００６５】
一方、伸張制御手段２８は、Ｓ５０２にて全ての伸張フラグが”終了”となっていないと判断した場合には、１つの走査ラインに関する部分圧縮データの伸張が未だ終了していないとみなして、伸張フラグをチェックする（図１０：ステップＳ５０２）。
【００６６】
次に、並列処理ユニット２５の各プロセッサ２１〜２４の伸張処理について説明する。本実施形態では、各プロセッサ２１〜２４には、あらかじめ処理すべきチャンネルと部分圧縮データを読み出すべき受信バッファが割り当てられているが、伸張制御手段２８が、処理を開始する際に、各プロセッサ２１〜２４に対して処理すべきチャンネルを割り当てる構成としてもよい。
【００６７】
各プロセッサ２１〜２４は、伸張制御手段２８から部分圧縮データの読み出し指示を受け付けると（図１１：Ｓ６００）、それぞれが割り当てられている受信バッファから部分圧縮データを１バイトずつ読み出す（図１１：ステップＳ６０１）。
【００６８】
次に、各プロセッサ２１〜２４は、この読み出した１バイトデータに対して所定の伸長処理を実行して、対応する部分データの一部を生成し（図１１：ステップＳ６０２）、プリンタコントローラ２６の出力バッファに格納する（図１１：ステップＳ６０３）。なお、伸長処理は、ホスト装置１０の並列処理ユニット１５において採用した圧縮アルゴリズムに対応する伸長処理を採用する必要がある。
【００６９】
次に、各プロセッサ２１〜２４は、前記読み出した１バイトデータが部分圧縮データの終端を示す情報を含んでいるか否かを判断する（図１１：ステップＳ６０４）。そして、読み出した１バイトデータが部分圧縮データの終端を示す情報を含んでいない場合は（図１１：ステップＳ６０４のＹｅｓ）、続けて伸張処理を実行すべくＳ６０１に戻る。
【００７０】
一方、終端を示す情報を含んでいる場合は（図１１：ステップＳ６０４のＮｏ）、自己の伸張フラグを”終了”に変更するとともに（図１１：ステップＳ６０５）、走査ラインでの同期を実現すべく、処理を停止する。
【００７１】
このように、本実施形態では、各チャンネルつまりプロセッサごとに受信バッファを設ける構成としたので、各プロセッサが１つの走査ラインに関する部分圧縮データの伸長処理が終わったところで処理を停止する構成（すなわち走査ライン単位で同期して動作する構成）としても、並列に伸長処理を行うことが可能となる。
【００７２】
転送手段２９は、印刷に用いられる順序でデータを送信すべく、副走査方向の順に走査ラインを選択する（図１２：ステップＳ７００）。
【００７３】
次に、転送手段２９は、前記選択した走査ラインについて、１走査ライン分の部分データが全て伸長された状態で出力バッファに格納されているかどうかを判断する（図１２：ステップＳ７０１）。
【００７４】
そして、全て伸長された状態で格納されていると判断した場合に、印刷に用いられる順序でデータを送信すべく、前記選択した走査ラインについて出力バッファから部分データを読み出して印刷エンジンへ転送する（図１２：ステップＳ７０２）。
【００７５】
その後、転送手段２９は、前記生成された印刷イメージについて未選択の走査ラインがある場合は、Ｓ７００に戻る（図１２：ステップＳ７０３）。
【００７６】
本実施形態の構成によれば、１つの走査ラインを構成する各チャンネルに対して（すなわち、各部分データに対して）並列に圧縮処理が実行されるため、個々の走査ラインについての圧縮処理時間を短縮することができる。特に、最初の１走査ラインの圧縮処理時間が短縮されることで、印刷イメージの圧縮処理を開始してから最初の走査ラインの圧縮処理が終了し、その処理結果がプリンタ装置２０（プリンタコントローラ２６）へ転送されるまでの時間を短縮すること可能となり、立ち上がりの早い圧縮処理（ひいては印刷処理）を実現することができる。
【００７７】
同様に、１つの走査ラインを構成する各チャンネルに対して（すなわち、各部分圧縮データに対して）並列に伸長処理が実行されるため、個々の走査ラインについての伸長処理時間を短縮することができる。特に、最初の１走査ラインの伸長処理時間が短縮されることで、圧縮された印刷イメージの伸長処理を開始してから最初の走査ラインについて伸長処理が終了し、その処理結果が印刷エンジンへ転送されるまでの時間を短縮すること可能となり、立ち上がりの早い伸長処理（ひいては印刷処理）を実現することができる。
【００７８】
更に、プリンタコントローラ２６において、バースト転送された部分圧縮データを格納する受信バッファを、各チャンネルにそれぞれ対応する複数のＦＩＦＯタイプの受信バッファとして構成しているため、バースト転送された部分圧縮データを受け取る構成と、ＦＩＦＯタイプの受信バッファから部分圧縮データを読み出して走査ライン（又はバンド）単位で同期して並列に伸長する構成とを両立させた上で、高速に並列処理を実行できる枠組みを提供することができる。その結果、一定速度で走査ライン単位の印刷データをエンジンに供給し続ける必要があるレーザプリンタ等に対してもリアルタイムに対応することができる。
【００７９】
（第２の実施形態）
第１の実施形態は、各プロセッサが１つの走査ラインに関する部分圧縮データの伸長処理が終わったところで処理を停止する構成（すなわち走査ライン単位で同期して動作する構成）について説明したが、第２の実施形態は、各プロセッサは走査ライン単位で同期をとることなく伸張処理を実行することで、各プロセッサの処理の高速化を図ろうとするものである。
【００８０】
ただし、各プロセッサが同期をとることなく伸張処理をする構成とすると、出力バッファには、チャンネルによって異なる走査ラインの部分伸張データが含まれてしまうという状況が生じする
そこで、第２の実施形態は、各プロセッサの部分伸張データをそれぞれ格納するための中間出力バッファをチャンネルごとに設けるとともに、この中間出力バッファに格納された部分伸張データを、走査ライン単位で出力バッファに格納するように制御することとした。以下に、図１３〜図１５を用いて第２の実施形態にかかる伸張処理について詳細に説明する。なお、ホスト装置１０における処理は、第１の実施形態における処理と同様の構成であるので、ここでは説明を省略する。
【００８１】
まず、本実施形態にかかるプリンタコントローラ２６は、第１の実施形態にて説明した各機能に加えて、各プロセッサが伸張した部分伸張データをチャンネルごとに格納する中間出力バッファから、１走査ライン分の部分伸張データを読み出して出力バッファに転送するデータ順序調整手段３０を備える（図１３を参照）。
【００８２】
次に、本実施形態におけるプリンタ装置２０における処理について説明する。第１の実施形態と同様に、受信手段２７は、バースト転送された部分圧縮データをチャンネル毎の部分圧縮データに振り分けて、それぞれの受信バッファへ格納する（図８のフローチャートを参照）。そして、受信手段２７は、全てのチャンネルのデータについて格納処理を終えたと判断した場合は、処理を終了し、並列処理ユニット２５の各プロセッサ２１〜２４に対して、それぞれに割り当てられた受信バッファからの部分圧縮データの読み出しを指示する。
【００８３】
各プロセッサ２１〜２４は、受信手段２７から部分圧縮データの読み出し指示を受け付けると、それぞれが割り当てられている受信バッファから部分圧縮データを１バイトずつ読み出す。そして、各プロセッサ２１〜２４は、この読み出した１バイトデータに対して所定の伸長処理を実行して対応する部分データの一部を生成し、図１４に示すように、それぞれ対応する中間出力バッファ１〜４に格納する。図１４は、チャンネル毎に設けられた中間出力バッファを説明するための図である。
【００８４】
このとき、各プロセッサ２１〜２４は、前記読み出した１バイトデータが部分圧縮データの終端を示す情報を含んでいるか否かを判断する。そして、読み出した１バイトデータが部分圧縮データの終端を示す情報を含んでいる場合は、伸張した部分データの境界が検出できるように、伸張した部分データの終端に（又は最初に）所定の境界情報を追加しておく。
【００８５】
次に、データ順序調整手段３０は、チャンネルごとに用意される転送フラグに初期値として”未終了”をセットする（図１５：ステップＳ８００）。かかる転送フラグは、後述するように、各チャンネルにおいて１つの走査ラインに関する部分圧縮データの転送（中間出力バッファから出力バッファへの転送）が終了した場合に”終了”に変更されることになる。
【００８６】
次に、データ順序調整手段３０は、チャンネルの並び順にチャンネルを選択する（図１５：ステップＳ８０１）。そして、前記選択したチャンネルの転送フラグをチェックし、転送フラグが”終了”となっている場合は、Ｓ８０１に戻る（図１５：ステップＳ８０２）。
【００８７】
一方、転送フラグが”未終了”となっている場合は、データ順序調整手段３０は、中間出力バッファ１〜４のうち前記選択したチャンネルに対応する中間出力バッファを特定し、この特定した中間出力バッファに格納された未転送の部分伸張データから１バイト分のデータを選択する（図１５：ステップＳ８０３）。
【００８８】
次に、データ順序調整手段３０は、前記選択した１バイトデータを出力バッファに転送するとともに（図１５：ステップＳ８０４）、前記選択した１バイトデータが部分伸張データの終端を示す情報を含んでいるか否か判断する（図１５：ステップＳ８０５）。
【００８９】
前記選択した１バイトデータが部分伸張データの終端を示す情報を含んでいない場合には、データ順序調整手段３０は、ステップＳ８０３に戻り、次の１バイト分のデータについて転送処理を実行する。一方、前記選択した１バイトデータが部分伸張データの終端を示す情報を含んでいる場合は、前記選択したチャンネルの転送フラグを”終了”に変更する（図１５：ステップＳ８０６）。
【００９０】
次に、データ順序調整手段３０は、転送フラグが”未終了”となっているチャンネルがある場合（図１５：ステップＳ８０７のＹｅｓ）、すなわち１つの走査ラインについて全チャンネルの部分伸張データの転送が終了していない場合、次のチャンネルを選択すべく、Ｓ８０１に戻る。
【００９１】
一方、全てのチャンネルの転送フラグが”終了”となっている場合（図１５：ステップＳ８０７のＮｏ）、データ順序調整手段３０は、中間出力バッファ１〜４に転送すべきデータ（未転送の走査ライン伸張データ）が残っているかどうかを判断する（図１５：ステップＳ８０８）。そして、残っている場合は、次の走査ラインについて転送処理をすべく、Ｓ８００に戻る。
【００９２】
次に、転送手段２９は、第１の実施形態と同様に、印刷に用いられる順序でデータを送信すべく副走査方向の順に走査ラインを選択し、この選択した走査ラインについて１走査ライン分の部分データが全て伸長された状態で出力バッファに格納されているかどうかを判断する。そして、全て伸長された状態で格納されていると判断した場合に、印刷に用いられる順序でデータを送信すべく、前記選択した走査ラインについて出力バッファから部分データを読み出して印刷エンジンへ転送する（図１２のフローチャートを参照）。
【００９３】
このように処理を構成した場合、各プロセッサは、各チャンネルのデータを個別に伸張処理することができるとともに、全チャンネルの転送フラグが”終了”となるまでに転送される一連のデータは、１つの走査ラインに関する部分データに属することとなるので、出力バッファには、走査ラインの並び順が維持された状態で、１つの走査ラインに属する部分データが連続して、格納されることになる。その結果、走査ライン単位で同期をとりつつ印刷エンジンへ転送するとともに、各プロセッサの伸張処理を高速に実行することができるようになる。
【００９４】
（その他の実施形態）
本発明は上記実施形態に限定されることなく、種々に変形して適用することが可能である。例えば、本発明は、イメージを圧縮／伸長するシステムであれば、プリンタシステム以外に対しても適用することができる。
【００９５】
また例えば、上記実施形態では、プリンタ装置２０が並列処理ユニット２５、プリンタコントローラ２６を備える構成としているが、本発明は必ずしもこのような構成に限られない。例えば並列処理ユニット２５やプリンタコントローラ２６をプリンタ装置２０に接続可能な外部装置として構成することも考えられる。更には、並列処理ユニット２５やプリンタコントローラ２６を例えばＰＣＩバス等の規格によりホスト装置１０に接続可能な装置として構成してもよい。並列処理ユニット２５をホスト装置１０に接続する構成の場合、ホスト装置１０のメインＣＰＵ等によってプリンタコントローラ２６の各機能を実現する構成としてもよい。
【００９６】
また例えば、上記実施形態では、１走査ラインをプロセッサ数に応じて均等に部分領域に分割する構成について説明したが、例えばプロセッサのスペック等に応じて割り当てる部分領域の大小を変えるなど、必ずしも均等に分割しなくてもよい。また、部分領域の分割数（チャンネル数）は、必ずしもプロセッサ数と等しくなくてもよい。
【００９７】
また例えば、上記実施形態では、チャンネルとプロセッサの組み合わせを固定して割り当てる構成について説明したが、例えば、処理が終了したプロセッサを次のチャンネルに割り当てるように構成してもよい。この場合、走査ラインごとにプロセッサとチャンネルの対応関係が異なる可能性がある。なお、並列処理ユニット１５、２５のプロセッサのみならず、メインＣＰＵに対してもチャンネルを割り当てて、並列処理を実行する構成としてもよい。
【００９８】
また例えば、上記実施形態では、プロセッサ１１〜１４がＲＡＭから部分データを読み出す構成について説明としたが、例えばホスト装置１０がＲＡＭからプロセッサ１１〜１４へ部分データを転送する手段（例えば、ＤＭＡ転送手段）を備える場合は、圧縮制御手段は該手段に対して指示を行えばよい。この場合、プロセッサ１１〜１４は該手段からの転送を受けて処理を実行することになる。同様に、例えばプリンタ装置２０がデータ受信バッファからプロセッサ２１〜２４へ部分圧縮データを転送する手段（例えば、ＤＭＡ転送手段）を備える場合は、伸長制御手段は該手段に対して指示を行えばよく、プロセッサ２１〜２４は該手段からの転送を受けて処理を実行することになる。
【００９９】
また例えば、上記実施形態では、印刷イメージの全走査ラインについて並列処理を行う構成について説明したが、印刷イメージを構成する少なくとも１つの走査ラインについて本発明を適用すれば、該走査ラインについて圧縮処理時間／伸長処理時間の短縮という効果を得ることができる。
【０１００】
また例えば、上記実施形態では、転送手段２９が１走査ライン分のデータが揃ったところで印刷エンジンへデータを転送する構成について説明しているが、印刷エンジンのタイプによっては、１走査ライン分のデータが揃うのを待つことなく、又は複数走査ライン分のデータが揃ったところで、印刷エンジンへデータを転送する構成としてもよい。
【０１０１】
また例えば、上記実施形態では、圧縮処理、伸長処理、同期させる単位について、いずれも走査ラインを基準として構成しているが、本発明は必ずしもこのような構成に限られるものではない。例えば、所定数の走査ラインを含んで構成されるバンドを基準として処理を構成してもよい。この場合、原則として上記実施形態において「走査ライン」を「バンド」に置き換えて処理を構成すればよいが、いくつかの工程については当業者に自明な範囲での変更が必要となる。例えば、ステップＳ１０２については、圧縮制御手段１７は、選択したバンドにおける各チャンネルの部分データの先頭位置として、バンドに含まれる走査ラインごとに先頭アドレスを特定する必要がある。なお、バンドを基準にする構成を前提とすると、上記実施形態は１走査ライン＝１バンドとした場合の態様と考えることもできる。
【図面の簡単な説明】
【０１０２】
【図１】プリンタシステムのハードウェア構成を示すブロック図である。
【図２】プリンタシステムの機能構成図を示すブロック図である。
【図３】圧縮制御手段１７の処理内容を示すフローチャートである。
【図４】チャンネルを説明するための図である。
【図５】並列処理ユニット１５における処理内容を示すフローチャートである。
【図６】転送手段１８における処理内容を示すフローチャートである。
【図７】バースト転送されるデータセットを説明するための図である。
【図８】受信手段２６の処理内容を示すフローチャートである。
【図９】各受信バッファを説明するための図である。
【図１０】伸張制御手段２８における処理内容を示すフローチャートである。
【図１１】並列処理ユニット２５における処理内容を示すフローチャートである。
【図１２】転送手段２９の処理内容を示すフローチャートである。
【図１３】プリンタコントローラ２６の機能構成図を示す他のブロック図である。
【図１４】中間出力バッファを説明するための図である。
【図１５】データ順序調整手段３０における処理内容を示すフローチャートである。
【図１６】ホスト装置１０（圧縮側）における出力バッファを説明する図である。
【図１７】バースト転送される状況を説明するための図である。
【図１８】従来技術において、バースト転送されたデータセットがＦＩＦＯメモリに格納される様子を示す図である。
【符号の説明】
【０１０３】
１  プリンタシステム、１０  ホスト装置、  １１〜１４  並列処理用プロセッサ、  １５  並列処理ユニット、  １６  プリンタドライバ手段、  １７  圧縮制御手段、  １８  転送手段、  ２０  プリンタ装置、  ２１〜２４  並列処理用プロセッサ、  ２５  並列処理ユニット、  ２６  プリンタコントローラ、  ２７  受信手段、  ２８  伸長制御手段、  ２９  転送手段
【図１】
2005151054.tif 000003
【図２】
2005151054.tif 000004
【図３】
2005151054.tif 000005
【図４】
2005151054.tif 000006
【図５】
2005151054.tif 000007
【図６】
2005151054.tif 000008
【図７】
2005151054.tif 000009
【図８】
2005151054.tif 000010
【図９】
2005151054.tif 000011
【図１０】
2005151054.tif 000012
【図１１】
2005151054.tif 000013
【図１２】
2005151054.tif 000014
【図１３】
2005151054.tif 000015
【図１４】
2005151054.tif 000016
【図１５】
2005151054.tif 000017
【図１６】
2005151054.tif 000018
【図１７】
2005151054.tif 000019
【図１８】
2005151054.tif 000020