説明

画像形成装置

【課題】必要なメモリ容量の増大を抑制するとともに、比較的簡単かつ効率よく印刷データを高速にビットマップ展開する。
【解決手段】ビットマップデータ領域を3バンド分確保し、1つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理を1つのスレッド内でシーケンシャルに行う。並列実行される3スレッドで共通の関数を用い、3バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことにより、印刷データを高速にビットマップ展開する。ディスプレイリスト作成は、これら3スレッドと異なるスレッドで実行する。スレッド間で同期を取るため、サブ領域BMPk、k=0〜2のそれぞれについて、圧縮完了フラグFc(k)及び伸長完了フラグFd(k)を、共有メモリ内に備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、中間コード(ディスプレイリスト)をビットマップ展開し圧縮する画像形成装置に係り、特に、圧縮・伸長プロセッサを用いて、圧縮されたビットマップデータの伸張と、ディスプレイリストのラスタライズ及びそのデータと伸張されたビットマップデータとの合成と、合成されたビットマップデータの圧縮とを3バンド分並列処理する画像形成装置に関する。
【背景技術】
【0002】
ページプリンタでは、解像度向上に伴い、必要なメモリ容量が増加するとともに、処理時間が長くなる。一方、高速なページプリンタを安価に提供するとともに、製品開発期間を短縮することが要求されており、メモリ容量の増大を抑制し、ソフトウェア構成の複雑化を避けるとともに、処理を高速化させる必要がある。
【0003】
下記特許文献1では、所要メモリ容量を低減するために、ページ記述言語で記述された印刷データの1頁分を、例えば512ブロックに分割するとともにブロック毎に中間コードに変換し、ブロック毎にラスタライズしてビットマップデータに変換し、次いで圧縮した後に、メモリに格納している。また、描画対象の重なりを処理するために、圧縮したデータを伸長し、これとラスタライズしたビットマップデータとを合成し、次いで圧縮してメモリに格納している。
【0004】
しかしながら、下記特許文献2にも記載されているように、RIP(Raster Image Processor)部が新たなブロックのデータをビップマップ展開する場合、合成済データを圧縮してメモリに格納し、次いでこのブロックに対応した圧縮データを伸長させてしまうまで待たなければならないので、処理が遅延する。
【0005】
そこで、この特許文献2では、RIP部でブロックを順次連続的にラスタライズし、そのビットマップデータを圧縮して、メモリの代わりにハードディスクに格納し、1頁分についてビットマップ展開処理が終わった後に、各ブロックについて、合成すべき複数の圧縮データをハードディスクから読み出して伸長させ、これらを順次合成させてメモリに格納させている。
【0006】
一方、下記特許文献3では、複数のハードウェアRIPを並列動作させて処理の高速化を図っている。
【特許文献1】特開平4−88749号公報
【特許文献2】特開平9−214709号公報
【特許文献3】特開平10−289066号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
しかし、上記特許文献2では、圧縮データを一時記憶させるために、ハードディスクを用いており、また、圧縮と伸長とを直列処理しているので、処理の高速化が妨げられる。
【0008】
また、上記特許文献3では、所用記憶容量低減のためのバンド単位の処理について開示がなく、ビットマップデータの圧縮や伸長についても開示がない。
【0009】
本発明の目的は、このような問題点に鑑み、必要なメモリ容量の増大を抑制するとともに、比較的簡単に印刷データを高速にビットマップ展開することが可能な画像形成装置を提供することにある。
【0010】
本発明の他の目的は、必要なメモリ容量の増大を抑制するとともに、比較的簡単且つ効率よく、印刷データを高速にビットマップ展開することが可能な画像形成装置を提供することにある。
【課題を解決するための手段】
【0011】
本発明による画像形成装置の第1態様では、CPUと、プログラムが格納されデータ領域が確保され該CPUに結合された記憶装置と、ビットマップデータの圧縮と圧縮されたビットマップデータの伸長とを並列に行うことができる圧縮・伸長プロセッサと、を備え、
ページ記述言語で記述された1頁分の印刷データを複数のバンドに分割し、各バンドの印刷データをブロック毎の中間コードに変換し、中間コードをビットマップ展開する画像形成装置であって、
該データ領域は、それぞれ1バンド分の第1〜3ビットマップデータ領域を有し、
該プログラムは該CPUに対し、第1〜3タスクの各々について3バンド毎のバンド順次ブロック順次に、
(a)各バンドの最初のブロックを除き、該データ領域内の1バンドの圧縮データを、該圧縮・伸長プロセッサを介し伸長させて該第iビットマップデータ領域に格納させ、
(b)該データ領域内の1ブロックの中間コードをラスタライズさせて該第iビットマップデータ領域のデータと合成させ、
(c)該第iビットマップデータ領域のデータを、該圧縮・伸長プロセッサを介し圧縮させて該データ領域に格納させ、
i=1〜3のそれぞれを該第1〜3タスクで並列に実行させるとともに、該第1〜3タスクで処理(a)及び(c)のそれぞれが並列に実行されないようにする。
【0012】
本発明による画像形成装置の第2態様では、第1態様において、該プログラムは該CPUに対しさらに、第4タスクにおいて、
(d)該印刷データをバンド毎にブロック毎の中間コードに変換させて該データ領域に格納させ、
該第4タスクを該第1〜3タスクと並列に実行させる。
【0013】
本発明による画像形成装置の第3態様では、第2態様において、該データ領域にはさらに、該第1〜3ビットマップデータ領域の各々に関し、処理(a)及び(c)のそれぞれを完了したか否かを示す情報が格納され、
該プログラムは該CPUに対しさらに、該第1〜3ビットマップデータ領域の各々に関し処理(a)及び(c)の完了時に該情報を更新させ、該情報に基づいて、該第1〜3タスクで処理(a)及び(c)のそれぞれが並列に実行されないように制御させる。
【発明の効果】
【0014】
上記第1態様の構成によれば、ビットマップデータ領域が3バンド分で足りるので、必要なメモリ容量の増大を抑制することができ、また、1つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理が1つのタスク内でシーケンシャルに行われるので、その同期をタスク間で取る必要がなく、しかも3バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことができるので、比較的簡単に印刷データを高速にビットマップ展開することができるという効果を奏する。その上、第1〜3タスクで共通の関数を用いることができるので、メモリ使用量を削減することができるという効果を奏する。この簡単化は、開発期間短縮及び設計変更容易化に寄与する。
【0015】
上記第2態様の構成によれば、第1〜3タスクのラスタライズに関係したディスプレイリスト作成が第4タスクで第1〜3タスクと並列に行われるので、第1〜3タスクのそれぞれでディスプレイリストを作成する場合よりもオーバヘッドが少なくなり、処理効率がよいという効果を奏する。
【0016】
上記第3態様の構成によれば、比較的簡単に第1〜3タスク間の同期をとることができるという効果を奏する。
【0017】
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
【実施例1】
【0018】
以下、図面を参照して本発明の実施例を説明する。
【0019】
図17は、本発明の実施例1に係る画像形成装置10のハードウェア構成を示す概略ブロック図である。
【0020】
この画像形成装置10では、CPU11、EEPROM12、RAM13、圧縮・伸長プロセッサ14、通信インターフェイス15、パネルインターフェイス16、エンジンコントローラ17及び搬送コントローラ18がバス19で結合され、インターフェイス16、インターフェイスを含むエンジンコントローラ17並びに搬送コントローラ18にそれぞれ操作パネル20、プリントエンジン21及び用紙搬送装置22が結合されている。通信インターフェイス15には、不図示のホストコンピュータが結合される。
【0021】
EEPROM12には、OS(Operating System)、ドライバ及びアプリケーションが格納される。RAM13には、一時的なデータが格納される。
【0022】
圧縮・伸長プロセッサ14は、例えばASIC(Application Specific Integrated Circuit)で構成され、圧縮処理と伸長処理とを同時に行うことができる。圧縮・伸長プロセッサ14は、互いに並列処理可能な圧縮部141、伸長部142及び伸長部143(図図1参照)と、DMAC(Direct Memory Access Controller)とを備え、RAM13内のデータを圧縮部141、伸長部142又は伸長部143にDMAでブロック転送させて圧縮又は伸長を行い、その結果をRAM13又はエンジンコントローラ17へDMAでブロック転送させることが可能である。DMACは、圧縮・伸長プロセッサ14と別体であってもよい。
【0023】
操作パネル20は、キー及び表示パネルを供えている。エンジンコントローラ17は、CPUと、プリントエンジン制御用プログラムが格納されたメモリと、受信したビットマップデータを格納するバッファメモリとを備えている。
【0024】
図1は、ホストコンピュータから受信した印刷データをビットマップ展開する部分の機能ブロック図である。
【0025】
この印刷データは、頁記述言語(PDL)で記述されており、通信インターフェイス15を介してバッファメモリ131に格納される。図1において、バッファメモリ131、ヒープメモリ132及び共有メモリ133はRAM13中の記憶領域である。インタープリタ121、RIP122及び制御部123はいずれも、上記アプリケーションプログラムの一部に対応しており、CPU11により実行される。
【0026】
制御部123は、ホストコンピュータからの印刷要求に対し、ホストコンピュータからの印刷データを、通信インターフェイス15を介してバッファメモリ131に格納させる。制御部123は、インタープリタ121を起動させることにより、この印刷データを、各頁について、バンドごとのディスプレイリスト(中間コード)に変換させ、ヒープメモリ132に格納させる。制御部123は、RIP122及び圧縮・伸長プロセッサ14を起動させることにより、それぞれ後述の処理をさせる。
【0027】
図10(A)〜(C)は、ディスプレイリスト概略説明図である。
【0028】
図10(A)に示す如く、1頁分の印刷データ30には、図形オブジェクト31〜34がこの順にPDLで記述されており、これらを記述順にラスタライズすることにより、ビットマップデータ領域上で、図形オブジェクト31に図形オブジェクト33が上書きされ、図形オブジェクト33に図形オブジェクト34が上書きされて、図10(A)に示すような画像が得られる。必要なメモリ容量を低減するために、図10(B)に示すように、印刷データ30をバンド40〜43に分割するとともに、ラスタライズを高速処理するために、分割されたオブジェクトを中間コードに変換する。一般に、オブジェクトには図形オブジェクト以外に文字オブジェクト及びイメージオブジェクトが含まれる。オブジェクトの中間コード化において、ベクトルデータの文字オブジェクトは、イメージデータに変換される。
【0029】
図10(C)は、印刷データ30に含まれる各図形オブジェクトがバンド毎の中間コードデータに変換されている状態をイメージ的に示す。図中の中間コードブロックLijは、バンドiのディスプレイリストを構成するj番目のブロックであることを示している。図形の合成が適正に行われるようにするために、各バンドでのブロック記述順は、図形オブジェクトの記述順に従っている。例えばバンド41のディスプレイリストでのブロック記述順は、中間コードブロックL10、L11、L12、L21となっている。
【0030】
バンド数が多いほど、所要メモリ容量を低減することができるが、トータル処理時間が増加するので、RAM13の容量に応じてバンド数が決定され、この値は例えば36である。また、メモリ管理を容易にするために、1ブロックの最大記憶容量が決定され、この容量の各ブロックLijに、できるだけ多くの中間コードが詰め込まれる。
【0031】
図2は、ヒープメモリ132に格納されるディスプレイリストのデータ構造を示している。このデータ構造は、リスト構造である。
【0032】
Lバンド配列1320は、その要素数がバンド数に等しく、要素i(iは0〜nのいずれか)はディスプレイリストLiのポインタである。各ディスプレイリストLiのブロック数は一定ではない。図1では簡単化のために、各ディスプレイリストLiのブロック数が3である場合を示している。ブロックLijの中間コードは、イメージデータの場合、イメージデータ格納先を示すポインタとデータのバイト数とを含むコードであり、イメージデータ自体はブロックLij内に含まれない。
【0033】
一方、共有メモリ133には、ビットマップデータ領域133Bと圧縮データ領域133Cとが確保される。また、圧縮・伸長プロセッサ14は互いに並列処理可能な圧縮部141と伸長部142とを備えている。
【0034】
次に、RIP122、圧縮・伸長プロセッサ14及びこれらを制御する制御部123によるバンドiの処理について説明する。ブロック識別変数jの初期値は0である。制御部123は、RIP122を頁毎に開始制御し、制御圧縮・伸長プロセッサ14をバンド毎に開始制御する。
【0035】
(1)j=0の場合は、ステップ(2)へ進む。j>0の場合、伸長部142は、圧縮バンド領域Ciに格納されている圧縮データを呼び出し、元のビットマップデータに伸長させて、サブ領域BMPkに格納する。
【0036】
(2)RIP122は、ヒープメモリ132内の中間コードブロックLijをビップマップデータに変換して、サブ領域BMPkに格納させることにより、(1)で伸長されたビットマップデータに上書きする。
【0037】
(3)圧縮部141は、サブ領域BMPkに格納されたビットマップデータを圧縮して、圧縮データ領域133C内の圧縮バンド領域Ciに格納する。
【0038】
(4)RIP122は、jを1だけインクリメントし、中間コードブロックLijがヒープメモリ132内に存在すれば、上記ステップ(1)へ戻る。
【0039】
圧縮部141と伸長部142とを並列に動作させることができ、かつ、圧縮・伸長プロセッサ14での処理とディスプレイリスト作成及びラスタライズのソフトウェア処理とを並列に行うことが可能である。一方、同一バンドについて圧縮処理と伸長処理とソフトウェア処理とのうちの任意の2つを同時に行うことができない。そこで、図4に示す如く、同時に3バンドの処理を行う。そして、例えば、バンド0の伸長を行っているときにバンド1の圧縮を行うとともに、バンド2のディスプレイリスト作成とラスタライズとを直列処理する。これら圧縮、伸長及びラスタライズはいずれも、ビップマップデータを取り扱うので、図1に示す如く、ビットマップデータ領域133Bは、BMP0〜BMP2に分割された3バンド分の領域を有している。
【0040】
圧縮部141の平均圧縮率を1/c(c=圧縮後のサイズ/圧縮前のサイズ)、1頁のバンド数をn+1とすると、1頁分のビットマップデータに対する圧縮データと3バンド分ビットマップ領域との合計の圧縮率は、3/(n+1)+1/cとなる。例えば、n=35、c=10の場合、圧縮率は3/36+1/10=11/60となる。
【0041】
図3は、共有メモリ133に格納される、ラスタライズ、圧縮及び伸張に関係したデータの構造を示す。
【0042】
Cバンド配列1330は、その要素数がバンド数に等しく、要素i(iは0〜nのいずれか)は圧縮バンド領域Ciのポインタである。ブロック最大番号配列1331は、その要素数がバンド数に等しく、要素iにはバンドiのブロック番号最大値je(i)が格納されている。Bバンド配列1332は、その要素数が3であり、要素k(kは0〜2のいずれか)はサブ領域BMPkのポインタである。
【0043】
バンド・ブロック番号変数群1333には、変数R、C及びDについてそれぞれ、現在の処理対象のバンド番号とブロック番号との組(i,j)、(p,q)及び(r,s)が格納される。変数R、C及びDは、スレッド間でブロックの処理完了を通知して(図5のステップS5、図6(A)のステップS16及び図6(B)のステップS24)、次のブロックの処理開始時点を適正にするために、すなわち、同一バンドに関し、伸張が完了してからラスタライズし、ラスタライズが完了してから圧縮し、圧縮が完了してから伸張を行うために用いられる。以下の例では、バンド・ブロック番号変数群1333には次の又は処理中の処理対象のバンド番号とブロック番号とが格納されるが、このデータは、1つ前の処理対象の処理完了も意味している。
【0044】
図7は、ソフトウェアと圧縮部141と伸長部142との並列処理を示す概略タイミングチャートである。図7は、バンド0〜2のそれぞれが3ブロックのディスプレイリストを有する場合を示す。図8は、バンドBND0〜BND2毎に図7の処理を再配列したものを示している。
【0045】
Lij、Rij、Cij及びDijはそれぞれ、バンドi及びブロックjに関するディスプレイリスト作成、ラスタライズ、圧縮及び伸長の処理を示す。
【0046】
図1及び図7において、制御部123のソフトウェア構成を簡単にするために、圧縮部141及び伸長部142に対する処理開始制御はそれぞれ、制御部123でのスレッドTh1及びTh2で行われる。インタープリタ121及びRIP122の処理は、スレッドTh0での処理である。すなわち、3スレッドによる並列処理が行われる。
【0047】
スレッドTh0は、制御部123により生成されて開始される。スレッドTh0において、中間コードブロックL00の作成処理が行われ、次いでラスタライズR00の処理が行われ、ラスタライズR00が完了すると、スレッドTh0によりスレッドTh1が生成されて開始される。スレッドTh1により、圧縮部141を介して圧縮C00の処理が行われ、圧縮C00の処理が完了すると、スレッドTh1により、Th2が生成されて開始される。スレッドTh1及びTh2によりそれぞれ、圧縮部141及び伸長部142を介して圧縮C10及び伸長D00の処理が行われる。
【0048】
一般に、スレッドTh0では、中間コードブロックLijの作成及びラスタライズRijの処理がバンド順次ブロック順次に行われ、通常、圧縮Cijを開始する時点では、ラスタライズRijの処理が完了している。ここにバンド順次ブロック順次とは、ブロックj及びバンドi0の初期値を共に0とし、バンドi及びブロックjを次のように変化させることを意味する。
【0049】
(a)ブロックjを一定にしてバンドiをi0、i0+1、i0+2と順次変化させ、
(b)jがブロック番号最大値je(i)より小さければブロックjを1だけインクリメントさせて、(a)へ戻り、そうでなければ(d)へ進む。
【0050】
(d)i0+2がバンド番号最大値nより小さければj=0とし且つi0を3だけインクリメントさせて、(a)へ戻る。
【0051】
スレッドTh1では、1ブロックに対する圧縮部141の処理完了通知に応答してバンド順次ブロック順次になるようにバンドp及びブロックqが更新され、対応するラスタライズRpqの処理が完了していることを条件に、圧縮部141に対し圧縮Cpqの処理を開始させる。試験例では、図7に示すように、圧縮Cpqを間断なく連続的に行うことができた。
【0052】
スレッドTh2では、1ブロックに対する伸長部142の完了通知に応答してバンド順次ブロック順次になるようにバンドr及びブロックsが更新され、伸長部142に対し伸長Drsの処理を開始させる。ただし、各バンドrについて、最後のブロックje(r)に関しては、伸長Drsの処理を開始させない。
【0053】
図5は、スレッドTh0の処理を示すフローチャートである。i0の初期値は0である。以下、カッコ内は図中のステップ識別符号を示す。
【0054】
(S0)ブロック最大番号配列1331の要素iに格納されている値je(i)を読み出し、ステップS1〜SAの処理を、ブロックjが0からje(i)までについて順次繰り返す。
【0055】
(S1)i=i0からi0+2までについて順次、ステップS2からS9までの処理を繰り返す。
【0056】
(S2)ヒープメモリ132内に中間コードブロックLijを作成する。
【0057】
(S3、S4)j=0であれば、サブ領域BMPkをゼロクリアする。ここにkはi=i0+kを満たす値である。
【0058】
(S5)バンド・ブロック番号変数群1333の変数Dの内容rsを見て伸張Di(j−1)の処理が完了しているか否か(ただし、j=0の場合には伸張D(i−1)jの処理が完了しているか否か)を判定し、すなわち、r=i且つs=jであるか否かを判定し、肯定判定した場合にはステップS6へ進む。
【0059】
(S6)ヒープメモリ132からこの中間コードブロックLijを読出し、ラスタライズしてビットマップデータ領域133Bのサブ領域BMPkに上書きする。
【0060】
(S7、S8)i0=0かつj=0であれば、スレッドTh1を生成し開始させる。
【0061】
(S9)バンド・ブロック番号変数群1333の変数Rの内容(i,j)を上記のように更新する。すなわち、(i,j)をバンド順次ブロック順次の次の値にする。
【0062】
(SC)i0を3だけインクリメントする。
【0063】
(SD)i0>nであれば処理を終了し、そうでなければステップS0へ戻る。
【0064】
図6(A)は、スレッドTh1での処理を示すフローチャートである。
【0065】
(S10)バンド・ブロック番号変数群1333の変数Cの内容(p,q)を読み出し、圧縮部141に対し圧縮Cpqの処理を開始させる。この際、圧縮部141には、圧縮データ格納先先頭アドレスとしてCバンド配列1330の要素iの内容と、圧縮対象データ先頭アドレスとしてBバンド配列1332の要素kの内容が供給される。ここにkは、pを3で割ったときの剰余である。
【0066】
(S11)圧縮部141の処理完了イベント発生を待つ。このイベント発生により、ウエイト状態が解除されてステップS12へ進む。ウエイト状態解除前は、OSにより直ぐに次のスレッドに切り替えられるので、図5の処理遅延が防止される。
【0067】
(S12、S13)p=0かつq=0であれば、スレッドTh2を生成し開始させる。
【0068】
(S14)p=nであり、かつ、q=je(n)であれば処理を終了し、そうでなければステップS15へ進む。
【0069】
(S15)バンド・ブロック番号変数群1333の変数Cの内容(p,q)を上記のように更新する。
【0070】
(S16)バンド・ブロック番号変数群1333の変数Rの内容ijを見てRpqの処理が完了しているか否かを判定し、すなわち、0≦q≦je(p)−1のときはi=p且つj=q+1であるか否かを判定しq=je(p)のときはi=p+1且つj=0であるか否かを判定し、肯定判定した場合にはステップS10へ戻る。
【0071】
図6(B)は、スレッドTh3での処理を示すフローチャートである。
【0072】
(S20)バンド・ブロック番号変数群1333の変数Dの内容(r,s)を読み出し、伸長部142に対し伸張Dpqの処理を開始させる。この際、伸長部142には、伸張対象先頭アドレスとしてCバンド配列1330の要素iの内容と、伸張データ格納先先頭アドレスとしてBバンド配列1332の要素kの内容が供給される。ここにkは、rを3で割ったときの剰余である。
【0073】
(S21)伸長部142の処理完了イベント発生を待つ。このイベント発生により、ウエイト状態が解除されてステップS22へ進む。ウエイト状態解除前は、OSにより直ぐに次のスレッドに切り替えられる。
【0074】
(S22)r=nであり、かつ、s=je(n)−1であれば処理を終了し、そうでなければステップS23へ進む。
【0075】
(S23)バンド・ブロック番号変数群1333の変数Dの内容(r,s)を上記のように更新する。
【0076】
(S24)バンド・ブロック番号変数群1333の変数Cの内容pqを見てCrsの処理が完了しているか否かを判定し、すなわち、0≦s≦je(r)−1のときはp=r且つq=s+1であるか否かを判定しs=je(r)のときはp=r+1且つq=0であるか否かを判定し、肯定判定した場合にはステップS20へ戻る。
【0077】
以上のような処理により、1頁分の圧縮データ(ページデータ)が圧縮データ領域133C上に生成される。制御部123はこれに応答して、上記3スレッドとは別の、制御部123に含まれるスレッドThPを生成し開始させる。
【0078】
スレッドThPでは、エンジンコントローラ17のデータ入力がレディ状態であることを確認して、このページデータをバンド順次に、伸長部143を介し、伸長させエンジンコントローラ17へ転送させる。この際、バンドiに関しては、伸長部143に、伸長対象データ先頭アドレスとしてCバンド配列1330の要素iの内容と、転送先アドレスとしてエンジンコントローラ17のアドレスとが供給される。
【0079】
エンジンコントローラ17は、転送されたビットマップデータを受け取ってそのバッファメモリに格納した後、直列データに変換しさらにビデオ信号に変換してプリントエンジン21へ供給する。プリントエンジン21は、この信号とエンジンコントローラ17からの制御信号とに基づき、感光ドラムに静電潜像を形成させ、これにトナーを付着させて現像し、そのトナー像を用紙に転写させ、加熱及び加圧によりトナー像を用紙に定着させる。一方、CPU11は、プログラムに従って、搬送コントローラ18を介し用紙搬送装置22に対し用紙をプリントエンジン21へ搬送させ、印刷された用紙を搬送させてトレイ上に排紙させる。
【0080】
図9は、圧縮されたページデータの伸長・転送処理と他の処理とを示す概略タイムチャートである。
【0081】
このような処理により、スレッドTh0〜Th2による2頁目の各バンドの伸長・ラスタライズ・圧縮処理と、スレッドThPによる1頁目のページデータ伸長・転送処理とが並列に実行され、3頁目についても同様である。
【0082】
本実施例1によれば、ビットマップデータ領域133Bが3バンド分で足りるので、必要なメモリ容量の増大を抑制することができ、また、3バンド分が伸長、ラスタライズ及び圧縮に関し互いにずれて並列処理されるので、圧縮及び伸長のそれぞれを殆ど連続的に行うことができ、印刷データを高速にビットマップ展開することができるという効果を奏する。さらに、伸長、ラスタライズ及び圧縮のそれぞれが異なるタスクで並列処理されるので、比較的簡単に圧縮及び伸長のそれぞれを殆ど連続的に行うことができるという効果を奏する。
【0083】
また、圧縮1チャンネル伸長2チャンネルのハードウェア圧縮伸長プロセッサ14を用いるとともに、圧縮・伸長プロセッサ14に対する伸長及び圧縮の開始制御を上記のようなスレッドTh1、Th2及びThPで実行しているので、これらの処理のCPU負荷が比較的小さい。このため、これらスレッドによるスレッドTh0の処理遅延が比較的小さく、また、並列処理により、全体として効率よく高速処理することが可能となる。さらに、多スレッド化によりプログラム構造が簡単化されるので、開発期間を短縮して製造コストを削減することが可能となる。
【0084】
なお、伸長部143をエンジンコントローラ17に備えてエンジンコントローラ17側で伸長させることにより、ページデータ転送効率を高めてもよい。
【実施例2】
【0085】
上記実施例1では、ディスプレイリスト作成とラスタライズの処理を直列に行っていたが、両者を別スレッドにして並列処理することも可能であり、これを本発明の実施例2として以下に説明する。
【0086】
図12に示すように、ディスプレイリストのみの処理を行うスレッドTh3を、スレッドTh0よりも前に生成して開始させ、バンド順次ブロック順次に(i,j)を更新して中間コードブロックLijの作成処理を行う。
【0087】
図11は、この場合のスレッドTh0での処理を示すフローチャートである。図5の処理と異なるのは、ステップS2及びS5の替わりにステップS3aにおいて、伸張Di(j−1)のみならず中間コードブロックLijの作成完了も待つ点である。中間コードブロックLijの作成完了を通知するために、1333に変数Lを追加し、スレッドTh3で1ブロックの中間コード作成処理を完了する毎に、バンド番号及びブロック番号を更新する。
【0088】
図13は、バンドBND0〜BN2毎に図12の処理を再配列したものを示す図である。
【0089】
他の点は、実施例1と同じである。
【0090】
本実施例2によれば、ディスプレイリスト作成とラスタライズとが並列処理させるので、それぞれの処理が簡単になり、また、ラスタライズの休止期間に対するラスタライズ実行時間が比較的小さいので、時分割並列処理におけるディスプレイリスト作成とラスタライズとの間の切り替えのオーバヘッドが比較的小さくなり、全体として効果的である。
【実施例3】
【0091】
上記実施例1及び2では、伸長開始制御とラスタライズと圧縮開始制御とをそれぞれ異なるスレッドで実行するとともに、各スレッドで3バンド分をバンド順次に処理する場合を説明したが、各スレッドで1バンド分の伸長開始制御とラスタライズと圧縮開始制御とを実行することもできる。この場合、3スレッドのそれぞれは、変数領域のみ互いに異なる同一関数を用いることができる。
【0092】
圧縮及び伸長のそれぞれについては同時に1バンド分しか処理できないので、スレッド間で同期を取る必要がある。このため、図15に示す如く、サブ領域BMPk、k=0〜2のそれぞれについて、圧縮完了フラグFc(k)及び伸長完了フラグFd(k)を、共有メモリ133内に備える。共有メモリ133内にはまた、図3のバンド・ブロック番号変数群1333の替わりに、中間コードブロックの作成がどこまで完了しているかを示すバンド・ブロック番号変数1333aが備えられている。図15の他の点は図3と同一である。
【0093】
図16は、スレッドTh0A、Th1A、Th2A及びTh3と、圧縮部141及び伸長部142の処理との概略タイミングチャートである。図16では複雑化を避けるため、圧縮及び伸長とスレッドとの間の関係を示す点線はスレッドTh0Aについてのみ記載している。
【0094】
スレッドTh3は図12のそれと同じであり、スレッドTh0A〜Th2Aと並列に処理される。スレッドTh0A、Th1A及びTh2Aはそれぞれ、スレッドTh3で中間コードブロックL00、L10及びL20の作成が完了したタイミングで生成され開始される。この生成及び開始は、スレッドTh3で行っても、不図示の別スレッドで行ってもよい。
【0095】
図12では、圧縮Cij及び伸長Dijの2番目のインデックスjはブロック番号を表していたが、図16での対応する2番目のインデックスはサブ領域BMPkのkを示している。そこで、図14ではこれらをCik及びDikと表している。すなわち、圧縮Cikは、サブ領域BMPkのビットマップデータを圧縮してバンドiの圧縮データ領域に格納することを意味し、伸長Dikは、バンドiの圧縮データ領域に格納されているデータを伸長してサブ領域BMPkに格納することを意味する。
【0096】
図14は、スレッドTh0A〜Th2Aのうちの任意のスレッドThkで実行される処理を示すフローチャートである。
【0097】
(S30)バンド識別変数iにkを代入し、このバンドのブロック識別変数jに初期値0を代入する。
【0098】
(S31)サブ領域BMPkをゼロクリアする。
【0099】
(S32)中間コードブロックLijの作成が完了していれば、ステップS33へ進む。
【0100】
(S33)ラスタライズRijの処理を行う。
【0101】
(S34)圧縮Ci(k−1)が完了するのを待つ。すなわち、スレッドTh(k−1)Aで開始制御された圧縮部141の処理完了イベントが発生すると、そのイベントハンドラにおいて、図15の圧縮完了フラグFc(k−1)の値が1であれば、この値を0にしてステップS35へ進み、そうでなければこのイベントハンドラを抜け、OSにより次のスレッドに切り替えられる。ただし、Ci(k−1)及びFc(k−1)において、k=0の場合にはk=3とみなす。圧縮部141の処理完了イベントが発生していないウエイト状態解除前は、OSにより直ぐに次のスレッドに切り替えられるので、図14の処理遅延が防止される。この点は、他のウエイト状態についても同様である。
【0102】
(S35)圧縮部141に対し圧縮Cikの処理を開始させる。この際、圧縮部141には、圧縮データ格納先先頭アドレスとしてCバンド配列1330の要素iの内容と、圧縮対象データ先頭アドレスとしてBバンド配列1332の要素kの内容とが供給される。
【0103】
(S36)ステップS35で開始制御された圧縮部141の処理完了イベントが発生すると、そのイベントハンドラにおいて、図15の圧縮完了フラグFc(k)の値を1にして、ステップS37へ進む。
【0104】
(S37)(i,j)を実施例1で述べたようにバンド順次ブロック順次の次の値にする。
【0105】
(S38)j=je(i)であればステップS3Cへ進み、そうでなければステップS39へ進む。
【0106】
(S39)伸長Di(k−1)が完了するのを待つ。すなわち、図15の伸長完了フラグFd(k−1)の値が1であれば、この値を0にしてステップS3Aへ進む。ただし、Di(k−1)及びFd(k−1)において、k=0の場合にはk=3とみなす。
【0107】
(S3A)伸長部142に対し伸張Dikの処理を開始させる。この際、伸長部142には、伸張対象先頭アドレスとしてCバンド配列1330の要素iの内容と、伸張データ格納先先頭アドレスとしてBバンド配列1332の要素kの内容が供給される。
【0108】
(S3B)ステップS3Aで開始制御された伸長部142の処理完了イベントが発生すると、そのイベントハンドラにおいて、図15の伸長完了フラグFd(k)の値を1にしてステップS32へ進む。
【0109】
(S3C)iを3だけインクリメントし、また、jを0に初期化する。
【0110】
(S3D)i>nであれば処理を終了し、そうでなければステップS31へ戻る。
【0111】
他の点は、実施例1と同じである。
【0112】
本実施例3によれば、3バンド分について圧縮及び伸長のそれぞれをほぼ連続的に行うことができるので、印刷データを高速にビットマップ展開することができる。
【0113】
また、1つのバンドについて伸長、ラスタライズ及び圧縮の一連の処理が1つのスレッド内でシーケンシャルに行われるので、その同期をスレッド間で取る必要がない。
【0114】
また、スレッドTh0A〜Th2Aで共通の関数を用いることができるので、実施例1及び2の場合よりもメモリ使用量を削減することができる。
【0115】
さらに、ディスプレイリスト作成がスレッドTh0A〜Th2Aと異なるスレッドで実行されるので、スレッドTh0A〜Th2Aの各々でディスプレイリストを作成する場合よりもオーバヘッドが少なくなり、処理効率がよい。
【0116】
同様に、スレッドTh0A〜Th2Aの各々でページデータ伸長・転送制御する場合よりも別スレッドThPでページデータ伸長・転送制御した方が、オーバヘッドが少なくなり、処理効率がよい。
【0117】
なお、本発明には外にも種々の変形例が含まれる。
【0118】
例えば、バンド・ブロック番号変数群1333のデータ更新は、ラスタライズ等の処理開始前であってもよいことは勿論である。
【0119】
また、上記実施例では、2つのビットマップデータの合成が、一方のビットマップデータに対する他方のビットマップデータの上書きである場合を説明したが、ビットマップデータ間の論理演算を行うことによる合成であってもよい。
【0120】
さらに、マルチタスクとして、マルチスレッドの替わりにマルチプロセスを用いてもよい。
【0121】
さらにまた、CPU11としてダブルコアCPUを用い、一方のコアと圧縮・伸張プログラムとの組を圧縮・伸長プロセッサとして用いる構成であってもよい。この場合、圧縮処理と伸張処理とをマルチタスク処理する。
【図面の簡単な説明】
【0122】
【図1】本発明の実施例に係る、ホストコンピュータから受信した印刷データをビットマップ展開する部分の機能ブロック図である。
【図2】ディスプレイリストのデータ構造説明図である。
【図3】ラスタライズ、圧縮及び伸張に関係したデータ構造説明図である。
【図4】バンド処理順説明図である。
【図5】スレッドTh0で行われるディスプレイリスト作成及びラスタライズの処理を示すフローチャートである。
【図6】(A)はスレッドTh1で行われる圧縮処理のフローチャートであり、(B)はスレッドTh2で行われる伸張処理のフローチャートである。
【図7】図5、図6(A)及び図6(B)での処理結果の一部を示す概略タイミングチャートである。
【図8】バンドBND0〜BN2毎に図7の処理を再配列したものを示す図である。
【図9】圧縮されたページデータの伸長・転送処理と他の処理とを示す概略タイムチャートである。
【図10】(A)〜(C)は、ディスプレイリスト概略説明図である。
【図11】本発明の実施例2に係るディスプレイリスト作成及びラスタライズの処理を示すフローチャートである。
【図12】実施例2での処理結果の一部を示す概略タイミングチャートである。
【図13】バンドBND0〜BN2毎に図12の処理を再配列したものを示す図である。
【図14】本発明の実施例3に係るスレッドTh0A〜Th2Aの任意の1つで実行される処理を示すフローチャートである。
【図15】本発明の実施例3に係るラスタライズ、圧縮及び伸張に関係したデータ構造説明図である。
【図16】実施例3での処理結果の一部を示す概略タイミングチャートである。
【図17】本発明の実施例に係る画像形成装置のハードウェア構成を示す概略ブロック図である。
【符号の説明】
【0123】
10 画像形成装置
11 CPU
12 EEPROM
121 インタープリタ
122 RIP
123 制御部
13 RAM
131 バッファメモリ
132 ヒープメモリ
133 共有メモリ
133C 圧縮データ領域
133B ビットマップデータ領域
1320 Lバンド配列
1330 Cバンド配列
1331 ブロック最大番号配列
1332 Bバンド配列
1333 バンド・ブロック番号変数群
14 圧縮・伸長プロセッサ
141 圧縮部
142、143 伸長部
15 通信インターフェイス
16 パネルインターフェイス
17 エンジンコントローラ
18 搬送コントローラ
19 バス
20 操作パネル
21 プリントエンジン
22 用紙搬送装置
30 印刷データ
31〜34 図形オブジェクト
40〜43 バンド
Th0〜Th3、Th0A、Th1A、Th2A、ThP スレッド
L0〜Ln ディスプレイリスト
Lij 中間コードブロック
Rij ラスタライズ
Cpq 圧縮
Drs 伸長
BND0〜BND2 バンド
BMP0〜BMP2 サブ領域

【特許請求の範囲】
【請求項1】
CPUと、プログラムが格納されデータ領域が確保され該CPUに結合された記憶装置と、ビットマップデータの圧縮と圧縮されたビットマップデータの伸長とを並列に行うことができる圧縮・伸長プロセッサと、を備え、
ページ記述言語で記述された1頁分の印刷データを複数のバンドに分割し、各バンドの印刷データをブロック毎の中間コードに変換し、中間コードをビットマップ展開する画像形成装置であって、
該データ領域は、それぞれ1バンド分の第1〜3ビットマップデータ領域を有し、
該プログラムは該CPUに対し、第1〜3タスクの各々について3バンド毎のバンド順次ブロック順次に、
(a)各バンドの最初のブロックを除き、該データ領域内の1バンドの圧縮データを、該圧縮・伸長プロセッサを介し伸長させて該第iビットマップデータ領域に格納させ、
(b)該データ領域内の1ブロックの中間コードをラスタライズさせて該第iビットマップデータ領域のデータと合成させ、
(c)該第iビットマップデータ領域のデータを、該圧縮・伸長プロセッサを介し圧縮させて該データ領域に格納させ、
i=1〜3のそれぞれを該第1〜3タスクで並列に実行させるとともに、該第1〜3タスクで処理(a)及び(c)のそれぞれが並列に実行されないようにすることを特徴とする画像形成装置。
【請求項2】
該プログラムは該CPUに対しさらに、第4タスクにおいて、
(d)該印刷データをバンド毎にブロック毎の中間コードに変換させて該データ領域に格納させ、
該第4タスクを該第1〜3タスクと並列に実行させることを特徴とする請求項1に記載の画像形成装置。
【請求項3】
該データ領域にはさらに、該第1〜3ビットマップデータ領域の各々に関し、処理(a)及び(c)のそれぞれを完了したか否かを示す情報が格納され、
該プログラムは該CPUに対しさらに、該第1〜3ビットマップデータ領域の各々に関し処理(a)及び(c)の完了時に該情報を更新させ、該情報に基づいて、該第1〜3タスクで処理(a)及び(c)のそれぞれが並列に実行されないように制御させる、
ことを特徴とする請求項2に記載の画像形成装置。
【請求項4】
該データ領域は、該バンド毎かつブロック毎の中間コードが格納される領域と、該バンド毎の圧縮データが格納される領域とを有することを特徴とする請求項1乃至3のいずれか1つに記載の画像形成装置。
【請求項5】
該圧縮・伸長プロセッサは、該CPUに結合されたASICであることを特徴とする請求項1乃至4のいずれか1つに記載の画像形成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2008−290376(P2008−290376A)
【公開日】平成20年12月4日(2008.12.4)
【国際特許分類】
【出願番号】特願2007−139096(P2007−139096)
【出願日】平成19年5月25日(2007.5.25)
【出願人】(000006150)京セラミタ株式会社 (13,173)
【Fターム(参考)】