画像形成装置
【課題】 レンダリング後のラスタ画像を一度DRAMへ格納した後、さらに画像を矩形単位に分割すると、プロセッサとDRAMとのデータ転送量が大きくなりシステム性能を達成できなくなる。
【解決手段】 第1のPEは、ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成し、エッジ情報を1ラインの単位でソートし、オブジェクトのエッジの間の幅情報とエッジ情報及びオブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する。DMAは、ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得し、第1のプロセッサから転送されるレベルデータを受信し、各ラインの先頭にあるレベルデータのメモリへの格納場所を、副走査方向の画素数に応じて管理し、副走査方向の画素数に応じた前記レベルデータをメモリに格納すると、そのメモリよりレベルデータの読み出し順序を制御して読み出し、その読み出されたレベルデータを第2のプロセッサへ転送する。
【解決手段】 第1のPEは、ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成し、エッジ情報を1ラインの単位でソートし、オブジェクトのエッジの間の幅情報とエッジ情報及びオブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する。DMAは、ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得し、第1のプロセッサから転送されるレベルデータを受信し、各ラインの先頭にあるレベルデータのメモリへの格納場所を、副走査方向の画素数に応じて管理し、副走査方向の画素数に応じた前記レベルデータをメモリに格納すると、そのメモリよりレベルデータの読み出し順序を制御して読み出し、その読み出されたレベルデータを第2のプロセッサへ転送する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像圧縮処理装置が形成するラスタ画像を制御するためのハードウェア制御技術に関する。
【背景技術】
【0002】
近年、電子写真方式で画像を形成する複合機(MFP)では、画像データに対して様々なハンドリングを行っている。例えばPDL(Page Description Language)データをラスタライズした後のラスタ画像データに対する処理には、以下に述べるようなものが考えられる。
【0003】
例えば、第1の方法として、ラスタ画像データのまま色処理等の画像処理を行ってプリンタエンジンに出力する。また第2の方法として、メモリから読み出したラスタ画像データを矩形画像に展開し、符号化して他の機器へ転送する。更に第3の方法として、矩形画像に展開した後、矩形画像単位のまま回転処理を行う。このような処理を行うため、MFPには、ラスタ画像データとタイル画像データとを相互に変換できるような専用プロセッサモジュールが存在していた(特許文献1)。これによればMFPのメインCPUは、画像データの処理の流れに合わせて、レジスタ等のモード情報格納部に動作モードを設定して、様々な画像処理と画像データの処理フローを実現している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−157609号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記特許文献1では、レンダリング後のラスタ画像データを一度DRAMへ格納した後、更に、その画像データを矩形単位に分割する必要がある。そのため、高画質化が進むとDRAMと画像処理回路との間でのデータ転送量が大きくなり、MFPの処理性能を達成できなくなる可能性がある。つまり、PDLデータのレンダリング方式として一般に知られるスキャンライン方式やペインタ方式のいずれにおいても、レンダリングされたラスタ画像データを部分的でもメモリに格納しなければ、ラスタ画像データを矩形単位に分割するのは難しい。例えば、レンダリング後の画像データをDRAMを介さずに矩形単位に分割しようとすると、大量のラインバッファが必要となり、プリンタの解像度に依存しないレンダリング処理ができなくなってしまう。
【0006】
本発明の目的は、上記従来技術の問題点を解決することにある。
【0007】
本発明の特徴は、レンダリング後の画像データを用いずに、ブロック単位のラスタライズ画像データを出力する技術を提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明の一態様に係る画像処理装置は以下のような構成を備える。即ち、
複数のプロセッサを有し、ラスタ画像をブロック単位で出力する画像処理装置であって、
ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成する手段と、前記エッジ情報を1ラインの単位でソートし、前記オブジェクトのエッジの間の幅情報と前記エッジ情報及び前記オブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する手段とを有する第1のプロセッサと、
前記ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得する取得手段と、前記第1のプロセッサから転送される前記レベルデータを受信し、各ラインの先頭にある前記レベルデータのメモリへの格納場所を、前記副走査方向の画素数に応じて管理する管理手段と、前記副走査方向の画素数に応じた前記レベルデータを前記メモリに格納すると、前記メモリより前記レベルデータの読み出し順序を制御して読み出す読み出し制御手段と、前記読み出し制御手段により読み出された前記レベルデータを第2のプロセッサへ転送する送信手段とを有するDMA手段と、
前記DMA手段から転送される前記レベルデータから、オブジェクトの重なり情報であるレベル情報を取り出す手段と、前記オブジェクトの重なり順序をソートし、前記オブジェクトの色情報を後続のプロセッサに転送する手段とを有する第2のプロセッサと、
を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、主要なレンダリング処理を変えることなく、スキャンライン処理用に作られたディスプレイリストをブロック順に処理することができる。
【図面の簡単な説明】
【0010】
【図1】本発明の実施形態に係る複合機の構成を示すブロック図。
【図2】複合機の画像制御部の詳細を説明するブロック図。
【図3】複合機レンダリング部の構成を説明するブロック図。
【図4】レンダリング部がレンダリングを行うディスプレイリスト例を説明する図。
【図5】レンダリング部におけるレンダリング処理の流れを説明する図。
【図6】プログラムエレメント間で転送する命令データフォーマットを説明する図。
【図7】PEの処理内容を説明する図。
【図8】PE301とPE303との間にあるFIFOの機能と効果を説明する図。
【図9】ディスプレイリストに対応した2つのラスタ画像の生成方法を説明する図。
【図10】ブロック情報へ変換するプロセッサエレメントを説明する図。
【図11】実施形態に係るレンダリング対象の描画オブジェクト例を示す図。
【図12】走査ラインの位置に応じて図11の領域を切り出した場合のエッジ情報を示す図。
【図13】DMA315のライトシーケンス部が管理するメモリ状態を示す図。
【図14】DMA315のリードシーケンス部が管理するメモリ状態を示す図。
【図15】、DMA315の構成と、図1及び図3で示した周辺ブロックとの接続関係を説明する図。
【図16】図12で示すブロックラインの描画データのエッジ位置の一例を示す図。
【図17】、
【図18】、
【図19】DMAのリードシーケンス部が制御するデータの遷移を示す図。
【図20】実施形態に係るレンダリング部の全体的な処理を説明するフローチャート。
【図21】DMA315の処理の詳細を説明するフローチャート。
【発明を実施するための形態】
【0011】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【0012】
図1は、本発明の実施形態に係る複合機(MFP)100の構成を示すブロック図である。このMFP100は、FAX、プリンタ、複写機の機能を備えており、カラー画像データを処理することができる。
【0013】
CPU101はスキャナ部108やプリンタ部112等の画像入出力装置、画像処理部や通信機能部等といったMFP100の機能全体を制御する。ROM102は、CPU101で実行されるプログラム等を格納している。RAM103は、CPU101により実行されるプログラムを記憶するとともに、その処理の実行時にワークエリアとして利用され、画像データなどが格納される。HDD104は、CPU101によって実行されるソフトウェアプログラム並びに他機器(図示せず)から転送される、或いは他機器へ転送する画像データ、PDLデータや、スキャンデータや、プリント出力前データの一時保存に利用される。操作部105は、ユーザに対してMFP100の状態や設定情報を表示し、ユーザの操作命令をCPU101に転送する。CPU101により実行されるプログラムはHDD104にインストールされており、ROM102に記憶されたブートプログラムによりRAM103にロードされる。
【0014】
画像制御部115は、MFP100内のデータを最適な場所に転送制御する機能を有している。FAX機能部106は、通信回線から受信したファクシミリ画像をHDD104に格納したり、ネットワーク部107から他の機器に転送したり印刷することができる。スキャナ部108は、原稿画像を読み取って画像データを生成する。スキャナ部108は、原稿の反射光を集光するレンズ、光を入力して電気信号に変換するCCDセンサ、アナログ信号処理部、A/D変換部等(図示せず)等を備える。スキャナ部108は、その生成された画像データをスキャナI/F(インターフェイス)部109を介してスキャナ画像処理部110に供給し、空間フィルタ処理や入力色空間変換等様々なスキャナ画像処理が行われる。編集画像処理部111は、色空間変換、解像度変換、2値化、回転等様々な画像処理を行うための複数のIP(Image Process)機能部を備えている。
【0015】
プリンタ部112は、例えば、レーザビームプリンタやLEDプリンタ等のプリンタ装置であり、レーザビームプリンタの場合は、半導体レーザを備えた露光制御部、画像形成部、転写紙の搬送制御部等(図示せず)等を具備している。プリンタ画像処理部114は画像制御部115を介して入力した画像データに対して、像域(オブジェクト)処理、スムージング等のプリンタ画像処理を行う。また画像データをページ画像データに合成し、プリンタI/F部113を介してプリンタ部112に出力する。プリンタI/F部113は、プリンタ部112が要求するタイミングに合わせてプリントデータを出力する。コピー機能の時は、プリンタ部112は、スキャナI/F部108から出力された画像データに基づいて印刷媒体に画像を形成する。
【0016】
図2は、画像制御部115の詳細を説明するブロック図である。ここではPDLプリント画像の圧縮のための符号化回路を例に説明する。尚、この符号化回路は、スキャナ画像処理部110にあってもよい。ここでは図1と共通する部分は同じ記号で示している。
【0017】
画像パス制御部215は、CPU101,RAM103,HDD104だけでなく、画像制御部115内の各ブロックや、スキャナ部108やプリンタ部112から転送されるデータの行き先を決定する。以下にPDLプリントの場合を例に説明する。
【0018】
CPU101は、ネットワーク部107から、ホストコンピュータが展開したPDLデータを受信するとHDD104に格納する。その後、CPU101は、そのPDLデータを展開し、レンダリング部200がラスタライズするための中間言語であるディスプレイリストに展開してRAM103に格納する。こうしてRAM103にディスプレイリストが展開されると、CPU101はレンダリング部200にレンダリング開始指示を行う。これによりレンダリング部200は、ディスプレイリスト解釈してラスタ画像に展開する。レンダリング部200がラスタ画像データへの展開を完了すると、そのラスタ画像データを画像圧縮部201に転送する。画像圧縮部201は、ラスタ画像データを画像符号化してHDD104やRAM103に格納する。また符号化された画像を出力I/F部211を通して画像制御I/F部216に供給する。またこの符号化された画像を編集画像処理部111に転送して、色空間変換、解像度変換、2値化、回転等の画像処理を行う。その後、編集画像処理部110、入力I/F部210を介して画像パス制御部215に戻して、RAM103やHDD104に再度展開することも可能である。
【0019】
図3は、レンダリング部200の構成を説明するブロック図で、CPU101,HDD104,RAM103との接続関係を図示している。
【0020】
レンダリング部200は、プロセッサエレメントPE301,303,305,307,ローカルメモリLRAM310,311,312,DMA308,FIFO302,304,306、REGISTER309を有している。このレンダリング部200は、CPU101,HDD104,RAM103とはシステムバス316を介して接続される。またシステムバス316からレジスタインターフェース317を介して、レンダリング部200のREGISTER309に動作モード等の情報を設定できる。レンダリング部200内部は、2種類のバスが存在する。一つは、BUS_ARB313に接続するレンダリングバス314と、プロセッサエレメント間を接続するPEバス315である。このPEバス315は単方向バスであり、例えば、PE301(第1のプロセッサ)からプロセッサ間FIFO302を介して、PE303(第2のプロセッサ)に向かってデータを転送する。ここでプロセッサ間FIFO302は、FIFO314とDMA315とを有している。このようにプロセッサ間FIFO302をFIFO314とDMA315とで構成することにより、BUS_ARB313を介してローカルメモリLRAM310,311,312やRAM103に対してデータを退避することが可能になる。この効果については後述する。尚、プロセッサ間FIFO304,306も、プロセッサ間FIFO30と同様の構成である。尚、図3では、プロセッサ間FIFOが全てFIFO(314,316,318)とDMA(315,317,319)で構成するように示しているが、これらはFIFOのみで構成されても良い。
【0021】
図4は、実施形態に係るレンダリング部200がレンダリングを行うためのディスプレイリストを説明する図である。
【0022】
メモリマップ400で示すように、ディスプレイリストは、INSTRUCTION・EDGE_INFO401とLEVEL_INFO402,FILL_INFO403,FILL404とWORK_AREA405とを有する。ここでEDGE_INFOは、あるライン上に存在する色の変化点を表す情報である。LEVEL_INFO402は、ある位置に重なる色情報の描画順序を示す情報である。FILL_INFO403は、色情報と重ね合わせを示し、FILLとは写真等の画像情報そのものである。WORK_AREA405は、レンダリング処理において一時的に必要となる情報を格納する領域である。またディスプレイリストの各要素データは、図4に示すように、各情報間がリンク構造になっている。このため、レンダリング部200を複数のプロセッサエレメントに分割して、各情報(EDGE/LEVEL/FILL)の処理に専念させることが可能となる。
【0023】
図5は、実施形態に係るレンダリング部200におけるレンダリング処理の流れを説明する図である。ここで、各プロセッサエレメント(PE)間はパイプラインで動作しており、図中の点線は、データの受け渡し及び、連携関係を示している。
【0024】
S500は、PE301の処理を示すフローチャートである。まずS501で、初期設定を行うと、描画するライン(スキャンライン)がレンダリング領域を超えるまでの間(S502〜S506)の処理を繰り返す。PE301は、S503で、ディスプレイリストのINSTRUCTION・EDGE_INFO401からエッジ情報を取得して、エッジを生成する。次にS504で、エッジ情報ができると、そのエッジ情報に関連するレベル情報を「レベルデータ」としてPE303に転送する。そしてS505で、スキャンラインを更新する。
【0025】
S510は、PE303の処理を示すフローチャートである。S511で、PE303がPE301からレベルデータを受信する。次にS512で、PE303は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS513に進み、描画するオブジェクトの重なり情報を取得して重なり順序を並び替える。そしてS514に進み、PE303は、描画する色情報のリンク情報をPE305(第3のプロセッサ)へ転送する。
【0026】
S520は、PE305の処理を示すフローチャートである。PE305は、S521で、PE303からフィルデータを受信する。そしてS522で、PE305は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS523に進み、描画する色情報をオブジェクトの重なり分だけ取得してオブジェクトを塗りつぶす。そしてS524に進み、PE305は、重ね合わせ処理手順(コンポジット情報)を後続のPE307(第4のプロセッサ)へ転送する。
【0027】
S530は、PE307の処理を示すフローチャートである。S531で、PE305からコンポジットデータを受信する。次にS532で、PE307は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS533に進んで、描画する各オブジェクトの色情報コンポジット情報を基にオブジェクトの重ね合わせ処理を行う。そしてS534で、PE307は、最終的に得られるラスタ画像データをDMA308へ転送する。
【0028】
S540は、DMA308の処理を示すフローチャートである。まずS541で、DMA308は、PE307からラスタ画像データを受信する。次にS542に進み、DMA308は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、ページ終了でなければS543に進み、ラスタデータをバッファに格納する。そしてS544に進み、DMA308は、バッファにデータが格納されると、予め指定されたRAM空間にラスタデータを出力する。
【0029】
図6(A)〜(C)は、プロセッサエレメント間で転送する命令データフォーマットを説明する図である。
【0030】
図6(A)は、PE301からPE303に転送する命令データフォーマットを示す。この命令データフォーマットは、命令種類(INST)、エッジとエッジ間の幅情報(WIDTH)、当該エッジに関連するレベル番号(LEVEL_NUM)、その他の情報(ADDITIONAL_INFO)を含む。
【0031】
図6(B)は、PE303からPE305に転送する命令データフォーマットを示す。この命令データフォーマットは、命令種類、エッジとエッジ間の幅情報、当該エッジに関連するフィル番号、その他の情報を含む。
【0032】
図6(C)は、PE305からPE307に転送する命令データフォーマットを示す。この命令データフォーマットは、コンポジット命令種類(COMPST_INST)、エッジとエッジ間の幅情報、重ね合わせをする色情報(FILL0〜FILL3)を含む。ここで命令種類とは、ページ開始、ライン開始、ページ終了等の処理内容を変化させるための情報である。
【0033】
図7は、PE301の処理内容を説明する図である。
【0034】
描画領域700には、三角形(色は編点、色が指定)と四角形(色は塗りつぶし、色が指定)がある。またPE301が管理するエッジ番号を管理する管理エッジ部705と、そのエッジの位置を座標の走査方向にソートしたエッジ情報を格納するソートエッジ部706が示されている。各エッジは、図7の701〜704で示すような始点と終点情報を結ぶベクトル情報で表される。
【0035】
描画領域700の最上位のラインから走査を開始し、描画するラインがエッジ701,702の位置に来ると、PE301は、ディスプレイリストのEDGE_INFO401からエッジ701,702の位置を読み出して管理エッジ部705に格納する。続いてPE301は、そのエッジ情報を走査方向に並び替えたエッジ情報をソートエッジ部706に格納する。従って、エッジ701,702の順にソートして格納される。
【0036】
次に走査ラインが、エッジ703,704のラインまで到達すると、管理エッジ部705に四角形のエッジ情報を追加格納し、ソートエッジ部706にソート結果を格納する。ここでは1ラインあたり4つのエッジが検出されて、そのソート順は走査方向に、エッジ703、エッジ701、エッジ704のエッジ702の順となる。
【0037】
次に走査ラインが、三角形のエッジ701,702から外れるラインまで到達すると、管理エッジ部705からエッジ701,702のエッジ情報を削除して、残ったエッジ703,704のエッジ情報のみをソートエッジ部706にソートして格納する。そして走査ラインがエッジ703,704から外れると、管理エッジ部705,ソートエッジ部706にはエッジ情報がなくなり、白(或いは背景色)を描画する命令のみを、PE303以降のプロセッサエレメントに指示することになる。
【0038】
図8は、PE301とPE303との間にあるFIFO302の機能と効果を説明する図で、PE301とPE303の処理時間関係を示すタイミングチャートである。図中、斜線部800は各プロセッサエレメントのデータ処理時間帯を示し、網部802はプロセッサ間FIFO302へのデータ送信を、縦線部801は、前段のプロセッサエレメントからのデータ受信処理時間を示している。
【0039】
810は、プロセッサ間FIFO302が、FIFO314のみで構成された場合のタイミングチャートを示す。811は、プロセッサ間FIFO302が、図3のように、FIFO314とDMA315で構成された場合のタイミングチャートを示している。
【0040】
810では、次に述べる状況を想定する。PE301が、1ライン分のエッジ情報をディスプレイリストから取得し、ソートした後にPE303にデータ転送を行った。ここでFIFO302のFIFO314は、4個分のレベルデータが格納できる場合を図示している。このときPE301は、820で、ライン2のデータ処理を完了している。しかしこのとき、PE303は、まだライン1の3個目のレベル情報を処理しているため、FIFO314がフル状態となって、PE301からPE303へデータを転送できない。
【0041】
これに対して811では、プロセッサ間FIFO302にDMA315が設けられているため、PE301から転送されるデータを、容量の大きいローカルメモリ(LRAM)や、RAM103に格納することができる。これにより、811では、810で示すような、プロセッサエレメント間で処理するデータと、転送する1つのデータあたりの時間間隔をなくすことができる。また、ローカルメモリなどに退避できるデータ量は可変であるため、描画するデータによりデータ量が可変するレンダリング部200にとっては最適な構成となる。
【0042】
次に、レンダリング部200から出力された画像を画像圧縮部201で符号化圧縮する場合を考える。レンダリングされた多値のラスタ画像に対する画像符号化としては、JPEGなどに代表されるブロックに対して符号化する方式のものが多い。その場合、レンダリング部200が出力するラスタ順に並んだ画素データをラインバッファに格納することになり、画像符号化ブロックの画素数や解像度が大きくなるほどシステムコストが増大する。そこで、スキャンライン出力のためのディスプレイリストからブロック単位の順番でラスタ画像を生成する方式について説明する。
【0043】
図9(A)(B)は、スキャンライン順に出力するディスプレイリストに対応した2つのラスタ画像の生成方法を説明する図である。
【0044】
図9(A)は、スキャンライン順にラスタ画像を生成する順序を示している。図9(B)は、ブロック順にラスタ画像を生成する順序を示している。前記のブロック順のレンダリング処理を行うには、ディスプレイリストから生成されたライン単位のエッジ情報をブロック情報に変換する必要がある。上述したようなスキャンライン順に出力するためのディスプレイリストから、ブロック順にラスタ画像を生成する場合、どのプロセッサエレメントがブロック情報への変換を行うかが課題となる。
【0045】
図10は、ブロック情報変換を行う最適なプロセッサエレメントを説明する図である。図10は、図9(A)(B)のそれぞれ対応した方式でレンダリングを行った場合のFIFO部302のDMA315とPE303で管理するWORK_AREA405の状態を示す図である。
【0046】
図10(A)に示すように、DMA315は、予め設定されたバッファ量に応じた数のエッジデータをWORK_AREA405に格納する。PE303は、そのDMA315から受信したレベルデータの重なり順序をソートした結果をWORK_AREA405に格納する。このとき、最大でも1ライン分のソート結果を保持しておくことで、エッジ間の幅のみが異なる同一のレベル情報をPE301から受信した場合、ソート処理を省略することができる効果がある。
【0047】
一方、図10(B)では、PE303がブロック情報変換を行う場合のPE303のWORK_AREA405(上部)と、DMA315がブロック情報変換を行う場合(下部)のPE303のWORK_AREA405の使用状況を示している。DMA315は、ブロック情報変換処理を行うブロックに関係せずに、ブロックの副走査方向の画素数(図では32ライン)分のエッジデータをWORK_AREA405に格納することになる。しかし、PE303がブロック情報の変換処理を行う場合、PE303も32ライン分のレベル処理情報結果をWORK_AREA405に格納する。もしくは、レベル情報は全く保持しない構成も有り得る。そこで、DMA315がブロック情報の変換処理を行うことができれば、PE303は各ブロック単位のレベル処理結果のみを保持しておけばよい。以上のことから、DMA315がブロック情報の変換処理を行うことで、システムメモリ削減の効果が大きくなることを示している。更に、DMA315がブロック情報の変換処理を行うと、PE301,PE303の処理内容を変更することなく、DMA315の動作モードのみの切り替えで2つのレンダリング方式に対応できる効果もある。
【0048】
次に、図11乃至図21を参照して、DMA315を備えたFIFO部302を使用したブロック情報の変換処理について説明する。
【0049】
図11は、描画領域を示している。図11には、三角、丸、四角の3つのオブジェクト1102〜1104があり、斜線で示した領域1101の32ライン分(ブロックライン)の処理を図12から図14を用いて説明する。
【0050】
図12(A)〜(F)は、走査ライン1200の位置に応じて、図11の領域1101を切り出した場合のエッジ情報を図示したものである。図12(A)は、走査ライン1200が領域1101の最上位であるときのエッジ情報を示す。図12では、エッジ間の幅をwidth[i]で定義している。また、オブジェクト1103(半円)の上部は最上位のラインと接しているため、オブジェクト1103のエッジは存在していない。
【0051】
図12(B)は、走査ライン1200が最上位のラインよりも少し下のラインである場合のエッジ情報を示す。図12(B)と図12(C)では、エッジ数の変化はなく、エッジ間の幅widthが変化している。図12(D)、図12(E)では、走査ライン1200が四角形のオブジェクト1104から外れているため、width6とwidth7がなくなっている。図12(F)は、走査ライン1200が領域1101の最下位であるときのエッジ情報を示す。PE301は、エッジ情報から各width情報を生成し、その幅と重ね合わせ情報であるレベル情報へのリンク情報を図6(A)のレベルデータとして、DMA315,PE303へ転送する。
【0052】
図13及び図14は、DMA315が管理するメモリの状態と、読み書き順序の概略を説明する図である。また、図中左部分の各ラインの開始アドレスの後にあるアルファベット(a)〜(f)は、図12の(A)〜(F)に対応している。
【0053】
図13は、DMA315がWORK_AREA405に格納するブロックライン分のメモリ情報を示している。DMA315は、1300で、Line1の開始アドレスをアドレス格納部(RAM_start_Address)に書き込んだ後、6個のレベル情報(width)をメモリに書き込む。次に1301でDMA315は、PE301から新しいラインが開始されたことを受信すると、Line2の開始アドレスを、RAM_start_Addressに書き込み、続いて7個のレベル情報をメモリに格納する。以下、領域1101の最下位ラインに達するまで、各ラインの開始アドレスとレベル情報を受信した順番で書き込む。
【0054】
図14は、DMA315がスキャンライン順のレベルデータを読み出す順序を説明する図である。読み出し制御部は、1ライン目の開始アドレスからレベル情報(width)を格納したアドレスを読み出す。ここでは1ライン目の最初のレベル情報(width1)を読み出し、次に2ライン目の開始アドレスからwidth1を取り出す。以下、1〜8の始点から矢印で示した順序で読み出しを行うことになる。
【0055】
図15は、DMA315の内部ブロック構成と、図1及び図3で示した周辺ブロックとの接続関係を説明する図である。
【0056】
ALU1501は、汎用プロセッサよりも簡易な演算(例えば、加算、減算、シフト演算)のみに対応する演算部である。BUS_IF1503は、レンダリングバス313に対してトランザクションを生成する。QIF_IN1504,QIF_OUT1505は、PE301からFIFO314を経由して入力されるデータ及び、PE303に対してFIFO314を経由して出力されるデータのバス制御を行うI/F部である。REG1506は、DMA315のレジスタ部でありALU1501により制御される。そして、MAIN_SEQ1502は、上述したALU1501,BUS_IF1503,QIF_IN1504,QIF_OUT1505,REG1506を制御するシーケンサである。このシーケンサ1502は、今回説明する動作を専用で行うハードウェアロジックであっても、プログラマブルで動作内容を変えるものであっても構わない。またDMA315は、CPU101がREGI309に格納した情報に応じて動作モードなどを切り替えることができる。次にDMA315が管理するデータの格納場所について説明する。
【0057】
RAM103には、領域1101(ブロックライン)の全ラインのwidth[i](レベルデータ)を格納する。性能向上のために、2ブロックライン分のデータを格納する方式でも良い。ローカルメモリLRAM310には、各ブロックラインのRAM103上の開始アドレス(RAM_start Address)と、継続レベル情報(continue info)と、継続レベルデータ(continue data)を格納する。図示していないが、LRAM310の情報も2ブロックライン分の構成としても良い。
【0058】
図16は、図12で示すブロックラインの描画データのエッジ位置の一例を示す図である。図16の矢印に示した2ライン分1601,1602のDMA315の動作について図17を用いて詳細に説明する。そしてDMA315の動作シーケンスを図18及び図19にフローチャートとして示した。
【0059】
図17(A)〜(C)、図18(A)(B),図19(A)(B)は、図16で示したブロック1610〜1616に対する処理を左端のブロック1610から順に対応させて示している。また、左にあるLRAM0(310)/REG/QIF_OUTなどは、それぞれのデータの読み出し先、又は格納先を示している。
【0060】
図17(A)は、図16に示すブロックラインの左端ブロック1610の矢印で示した2ライン1601,1602において、DMA315が処理するデータの遷移を示している。まずDMA315は、エッジ情報の座標位置(レベルデータ)が前処理ブロックから継続しているか否かを判定する。ここでは最初のブロックであるため、前処理ブロックから続いていることはない(*start)。次にDMA315は、ブロック内の開始座標を初期化(st_pos=0)をセットする。DMA315は、レベルデータが格納されているRAM103のアドレス情報を取得して、レベルデータ(ここではwidth1=54)をRAM103から読み出す。次にDMA315は、st_posとwidth1とを足し、シフト演算或いはビット切り出し操作によってその加算結果を32で割り、商部分と剰余部分に分解する。このとき、商部分に「1」以上の数字が得られた場合は、当該ブロックの当該ラインの処理は終了となる。そこで、DMA315は、32(ブロック主走査方向の画素数)からst_posを引き、PE303に転送すべきwidth情報を生成し、レベルデータのwidth部分を置換してからPE303に転送する。DMA315が、PE303に転送したレベルデータの一部は次ブロックの処理の時に利用するため、一時的にLRAM310のcontinue data領域に格納する。DMA315は、width情報を、元のwidth(ここでは54)から転送のため置換したwidth(ここでは32)を引いた「22」に置換してLRAM310へ格納する。また、LRAM310へ継続するレベルデータ(エッジ情報)を格納したことをLRAM310の継続情報領域(continue info領域)に格納する。以上で、左端ブロックの1ラインのレベルデータ読み出し及び転送処理を完了する。
【0061】
続いてDMA315は、数ラインの処理を終えると、図16の下段の矢印に相当するライン1602の処理に到達する。これにより図17(A)の点線部より下に示したデータ処理を行う。DMA315がRAM103から読み出すレベルデータとしては上ラインで読み出したものと同じで、width情報のみが異なるため、上記に述べた処理と同様の処理を行う。異なる点は、width情報の取り扱いである。DMA315は、width=50のうち、width=32をPE303へ転送し、残りのwidth=18をLRAM310へ格納する。DMA315は、1ブロック分(32ライン分)の処理を終えると、REG部にBLOCK_END情報を書き込み、次のブロックの処理へ遷移する。
【0062】
図17(B)は、図17(A)で、1ブロック目の32ライン分の処理が終了した後にDMA315が行う処理に基づいてる。ここでDMA315は、continue infoから継続情報と格納先LRAM310のアドレスを取得し、図17(A)で格納したレベルデータをメモリから読み出す。そのため、LRAM310のwidthは、PE301が生成したwidth=54から32を引いた「22」となっている。このときDMA315は、st_posとwidthの合計値が「32」に達しないため、商部分は0と演算する。そこで、DMA315は、widthの「22」は全てPE303に転送し、当該レベルデータは終了したと判断する。続いて、新しいレベル情報が格納されているRAM103上のアドレス情報をLRAM310から内部のアドレスレジスタにセットし直して、新しいレベルデータをRAM103から読み出す。ここでは、DMA315は、width=36のデータを読み出す。この場合、end_pso 58=22(st_pos)+36(width)となり、商部分が1よりも大きくなる。そのため、DMA315は、width(10)のレベルデータをPE303にデータを転送する。その後、元のwidth(36)から転送幅の「10」(tr_width=32−22(end_pos))を引いた「26」(width(36)−tr_width(10))を次ブロックで利用するデータとしてLRAM310へ格納する。数ライン後の点線部以下についても、処理は同様であり、width情報が異なるのみである。
【0063】
図17(C)及び図18(A)は、上ラインでは、1つ目のレベルデータは前ブロックから継続するレベルデータであり、2つ目のレベルデータで当該ブロックの処理を完了するケースを示す。但し、図17(C)については、図16の3個目のブロックにあるようにオブジェクトの重なりがあるため、レベルデータは継続するレベルデータを含めて3個となり、図17(C)と図18(A)では、下ラインにおいて処理するデータ量が異なる。
【0064】
図18(B)では、前ブロックから継続したレベルデータで開始し、2つ目のレベルデータもwidthが小さく、DMA315がさらにもう一つの新しいレベルデータをメモリから読み出しを行っている。このとき、3つ目のレベルデータについては、st_pos=24とwidth=48を加算して、ブロック画素数(32)で除算(シフト演算(72/32)=2余り8)すると、商が「2」で余りが「8」となる。この場合も、DMA315は、PE303に送信するレベルデータのwidthを「48」から「8」に置換して送信し、その後、widthを「40」(width 48−tr_width 8)にしてからLRAM310へ継続データとして格納している。
【0065】
図19(A)は、前ブロックから当該ブロックを過ぎ、次のブロックまで継続する単一色データのみで構成されている。そこで、DMA315は、次ブロックまでレベルデータを継続使用するために、width40をwidth32にして転送後、残りのwidthを8に置換して、LRAM310へ格納している。
【0066】
図19(B)では、DMA315は、前ブロックで格納したwidth8のデータをPE303へ転送し、新しいレベル情報をRAM103から読み出す。DMA315は、st_pos=8とwidth=24を足した値の剰余部分が「0」となり、ブロックライン端の画素位置と一致することがわかる。このときは元のwidth24(tr_width=32−st_pos8)をPE303へ転送する。図17(A)から図19(A)で示した例では、ブロック端(32の倍数の位置)でエッジが終了することはなかった。もし、ブロックライン内のブロック端でエッジが終了する場合は、continue infoには継続しない旨の情報を書き込むことになる。次ブロック処理時において、継続しない旨の情報(continue info==0)を読み出したDMA315は、RAM_start_Addressからアドレス情報を取得し、RAM103から新規レベル情報を処理する。
【0067】
上記に説明したようなデータの遷移によりDMA315は、ブロック情報変換処理を行う。
【0068】
図20は、実施形態に係るレンダリング部200の全体的な処理を説明するフローチャート、図21は、DMA315の処理の詳細を説明するフローチャートである。図20は、図5で示したフローチャートに、S1800で示すDMA315の動作を追加したブロック処理レンダリングに対応した全体の動作を示すフローチャートである。従って、図5と共通する部分は同じ記号で示し、それらの説明を省略する。
【0069】
DMA315が、DMA315のWORK_AREA405にデータをスキャンライン順に書き込む処理をS1810番台に、WORKA_AREA405からブロック処理順に変換するための読み出し処理をS1820番台に示す。
【0070】
まず最初に、S1810番台のレベルデータの書き込み処理を説明する。S1810で、DMA315の書き込みシーケンサ(以下、DMA1_WR)が初期設定を行う。次にS1811で、PE301からFIFO314に転送するデータのEmpty状態を確認する。S1811でEmptyでなければS1812に進み、DMA1_WRは、DMA315のリードシーケンサ(DMA1_RD)と同期処理を行う。ここでは、ダブルバッファで管理しても良いし、シングルバッファで管理及び同期処理を行っても良い。そしてS511で、DMA1_WRは、PE301からデータを受信すると、S1813で新規ラインであるかを判定する。新規ライン、即ち、ラインの先頭データであればS1814に進んで、そのアドレスをLRAM310へ格納する)。続いてS1815に進み、DMA1_WRは、RAM103へレベルデータを書き込み、S1816で、ブロックラインが終了するか否かを判定する。そしてS1816で、ブロックライン分のレベルデータ書き込みが完了するとS1817に進み、DMA1_RDとの同期処理を行い、次ブロックラインの処理に進むか否かを判定する。
【0071】
一方、DMA1_RDは、S1820で初期設定の後、S1821に進み、DMA1_WRとの同期処理を行う。DMA1_RDの繰り返し処理は、S1822でブロックラインあたりのブロック数に達するまでと、S1823で、カレントライン数がブロックのライン数(本実施形態では32ライン)に達するまでの処理をループする2重ループ構造になる。この2重ループの繰り返し処理の中で、S1824で、DMA1_RDはブロック変換及び転送を行う。
【0072】
こうしてDMA315がブロック化したデータは、PE303,PE305,PE307,PE308で処理されてブロック画像となり、S1897で、PE307からDMA308に出力される。これによりDMA308は、S1898で、そのブロック画像を受信し、S1899で画像圧縮を行う。
【0073】
図21は、図20のDMA1_RDのブロック変換及び転送処理を説明する図である。尚、図20と共通する部分は同じ記号で示し、それらの説明を省略する。
【0074】
まずS1900で、DMA1_RDは、各ブロック単位で、continue infoアドレスとRAM_start_Addressを初期化する。次にS1901に進み、DMA1_RDは、各ブロック内のライン処理の初めにst_pos,end_pos,repaet_numを初期化する。このときDMA1_RDは、S11823で、ブロック内の各ライン処理を行う。次にS1902に進み、DMA1_RDは、continue infoアドレスを内部REGのアドレスレジスタにセットし、4バイト分加算する。次にS1903に進み、DMA1_RDはcontinue infoを読み出すと、次にS1904に進み、読み出すべきRAM_Start_Addressをアドレスレジスタにセットする。続いて、DMA1_RDは、継続情報が継続と取得できれば(continue info==1)にセットする(S1905)。そしてS1906で、ローカルメモリLRAM310上の継続データ格納用アドレスを読み出しアドレスとしてアドレスレジスタにセットする。
【0075】
そしてS1907で、DMA1_RDはレベルデータを、LRAM310かRAM103から読み出して、RAM_Start_Addressを次のレベルデータへ進める(4バイト分加算する)。続いてS1908に進み、st_pos+widthから、終了位置を算出する。そしてS1909で、DMA1_RDは、S1908で読み出したend_pos(終了位置)を、ブロック画素数(本実施例では32)を割った、或いは、ビットシフトした値が「1」より小さいかを判定し、小さいときはS1910に示すループ処理に入る。このS1910のループは、当該レベルデータをPE303に転送した後、新しいレベルデータを取得するためのループである。
【0076】
このループ処理では、S1911で、DMA1_RDは、転送すべきレベルデータのwidth情報を算出する(tr_width=end_pos − st_pos)。続いてS1912に進み、DMA1_RDは続くレベルデータの開始位置をセットする(st_pos=end_pos)。尚、このS1912の処理は、S1912からS1915までの間に行われれば良い。続いてS1913に進み、DMA1_RDは、width情報を置換し、S1914で、PE303にレベルデータを転送する。そしてS1915で、DMA1_RDは続く新規レベルデータのRAM_start_Addressをアドレスレジスタにセットして、S1907の次のレベルデータの読み出し処理に戻る。
【0077】
そしてDMA1_RDは、end_posを算出した結果(repeat_num)が1以上となれば、そのレベルデータの一部をPE303へ転送し、残りは継続データとしてLRAM310へ格納する。継続するレベルデータと判断された場合は、S1917で、転送する幅(width)をend_posの剰余値として算出する。次にS1918に進み、DMA1_RDは、width部分を置換し、S1914で、レベルデータをPE303へ転送する。ここで継続するレベルデータについては、以下の手順でデータ及び継続情報を生成する。
【0078】
まずS1919で、DMA1_RDは継続するレベルデータのwidth(tr_width=width−end_pos)を算出する。そしてS1920で、レベルデータのwidth部分を置換し、LRAM310へ書き込む。これら処理によって、次ブロックでは、S1921で、継続レベル情報あり(continue info==1)のcontinue infoをLRAM310の所定アドレスに書き込む。これら処理を1ブロックライン分繰り返して(S1922,S1923)、DMA1_WRのシーケンスと同期処理を行うこととなる。
【0079】
以上説明したように、汎用的なDMA処理に簡易演算と、LRAM310とDMA間でデータ移動を行うシーケンス制御機能を追加する。これにより、スキャンライン順にレンダリング用のディスプレイリストから生成されるデータを、ブロックの処理順で出力することが可能になる。また、レンダリング処理を行うプロセッサエレメントの処理は、スキャンライン処理とブロック処理で変更しなくて済むため、2つのレンダリングモードを共存させることができる。
【0080】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、画像圧縮処理装置が形成するラスタ画像を制御するためのハードウェア制御技術に関する。
【背景技術】
【0002】
近年、電子写真方式で画像を形成する複合機(MFP)では、画像データに対して様々なハンドリングを行っている。例えばPDL(Page Description Language)データをラスタライズした後のラスタ画像データに対する処理には、以下に述べるようなものが考えられる。
【0003】
例えば、第1の方法として、ラスタ画像データのまま色処理等の画像処理を行ってプリンタエンジンに出力する。また第2の方法として、メモリから読み出したラスタ画像データを矩形画像に展開し、符号化して他の機器へ転送する。更に第3の方法として、矩形画像に展開した後、矩形画像単位のまま回転処理を行う。このような処理を行うため、MFPには、ラスタ画像データとタイル画像データとを相互に変換できるような専用プロセッサモジュールが存在していた(特許文献1)。これによればMFPのメインCPUは、画像データの処理の流れに合わせて、レジスタ等のモード情報格納部に動作モードを設定して、様々な画像処理と画像データの処理フローを実現している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−157609号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記特許文献1では、レンダリング後のラスタ画像データを一度DRAMへ格納した後、更に、その画像データを矩形単位に分割する必要がある。そのため、高画質化が進むとDRAMと画像処理回路との間でのデータ転送量が大きくなり、MFPの処理性能を達成できなくなる可能性がある。つまり、PDLデータのレンダリング方式として一般に知られるスキャンライン方式やペインタ方式のいずれにおいても、レンダリングされたラスタ画像データを部分的でもメモリに格納しなければ、ラスタ画像データを矩形単位に分割するのは難しい。例えば、レンダリング後の画像データをDRAMを介さずに矩形単位に分割しようとすると、大量のラインバッファが必要となり、プリンタの解像度に依存しないレンダリング処理ができなくなってしまう。
【0006】
本発明の目的は、上記従来技術の問題点を解決することにある。
【0007】
本発明の特徴は、レンダリング後の画像データを用いずに、ブロック単位のラスタライズ画像データを出力する技術を提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明の一態様に係る画像処理装置は以下のような構成を備える。即ち、
複数のプロセッサを有し、ラスタ画像をブロック単位で出力する画像処理装置であって、
ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成する手段と、前記エッジ情報を1ラインの単位でソートし、前記オブジェクトのエッジの間の幅情報と前記エッジ情報及び前記オブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する手段とを有する第1のプロセッサと、
前記ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得する取得手段と、前記第1のプロセッサから転送される前記レベルデータを受信し、各ラインの先頭にある前記レベルデータのメモリへの格納場所を、前記副走査方向の画素数に応じて管理する管理手段と、前記副走査方向の画素数に応じた前記レベルデータを前記メモリに格納すると、前記メモリより前記レベルデータの読み出し順序を制御して読み出す読み出し制御手段と、前記読み出し制御手段により読み出された前記レベルデータを第2のプロセッサへ転送する送信手段とを有するDMA手段と、
前記DMA手段から転送される前記レベルデータから、オブジェクトの重なり情報であるレベル情報を取り出す手段と、前記オブジェクトの重なり順序をソートし、前記オブジェクトの色情報を後続のプロセッサに転送する手段とを有する第2のプロセッサと、
を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、主要なレンダリング処理を変えることなく、スキャンライン処理用に作られたディスプレイリストをブロック順に処理することができる。
【図面の簡単な説明】
【0010】
【図1】本発明の実施形態に係る複合機の構成を示すブロック図。
【図2】複合機の画像制御部の詳細を説明するブロック図。
【図3】複合機レンダリング部の構成を説明するブロック図。
【図4】レンダリング部がレンダリングを行うディスプレイリスト例を説明する図。
【図5】レンダリング部におけるレンダリング処理の流れを説明する図。
【図6】プログラムエレメント間で転送する命令データフォーマットを説明する図。
【図7】PEの処理内容を説明する図。
【図8】PE301とPE303との間にあるFIFOの機能と効果を説明する図。
【図9】ディスプレイリストに対応した2つのラスタ画像の生成方法を説明する図。
【図10】ブロック情報へ変換するプロセッサエレメントを説明する図。
【図11】実施形態に係るレンダリング対象の描画オブジェクト例を示す図。
【図12】走査ラインの位置に応じて図11の領域を切り出した場合のエッジ情報を示す図。
【図13】DMA315のライトシーケンス部が管理するメモリ状態を示す図。
【図14】DMA315のリードシーケンス部が管理するメモリ状態を示す図。
【図15】、DMA315の構成と、図1及び図3で示した周辺ブロックとの接続関係を説明する図。
【図16】図12で示すブロックラインの描画データのエッジ位置の一例を示す図。
【図17】、
【図18】、
【図19】DMAのリードシーケンス部が制御するデータの遷移を示す図。
【図20】実施形態に係るレンダリング部の全体的な処理を説明するフローチャート。
【図21】DMA315の処理の詳細を説明するフローチャート。
【発明を実施するための形態】
【0011】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【0012】
図1は、本発明の実施形態に係る複合機(MFP)100の構成を示すブロック図である。このMFP100は、FAX、プリンタ、複写機の機能を備えており、カラー画像データを処理することができる。
【0013】
CPU101はスキャナ部108やプリンタ部112等の画像入出力装置、画像処理部や通信機能部等といったMFP100の機能全体を制御する。ROM102は、CPU101で実行されるプログラム等を格納している。RAM103は、CPU101により実行されるプログラムを記憶するとともに、その処理の実行時にワークエリアとして利用され、画像データなどが格納される。HDD104は、CPU101によって実行されるソフトウェアプログラム並びに他機器(図示せず)から転送される、或いは他機器へ転送する画像データ、PDLデータや、スキャンデータや、プリント出力前データの一時保存に利用される。操作部105は、ユーザに対してMFP100の状態や設定情報を表示し、ユーザの操作命令をCPU101に転送する。CPU101により実行されるプログラムはHDD104にインストールされており、ROM102に記憶されたブートプログラムによりRAM103にロードされる。
【0014】
画像制御部115は、MFP100内のデータを最適な場所に転送制御する機能を有している。FAX機能部106は、通信回線から受信したファクシミリ画像をHDD104に格納したり、ネットワーク部107から他の機器に転送したり印刷することができる。スキャナ部108は、原稿画像を読み取って画像データを生成する。スキャナ部108は、原稿の反射光を集光するレンズ、光を入力して電気信号に変換するCCDセンサ、アナログ信号処理部、A/D変換部等(図示せず)等を備える。スキャナ部108は、その生成された画像データをスキャナI/F(インターフェイス)部109を介してスキャナ画像処理部110に供給し、空間フィルタ処理や入力色空間変換等様々なスキャナ画像処理が行われる。編集画像処理部111は、色空間変換、解像度変換、2値化、回転等様々な画像処理を行うための複数のIP(Image Process)機能部を備えている。
【0015】
プリンタ部112は、例えば、レーザビームプリンタやLEDプリンタ等のプリンタ装置であり、レーザビームプリンタの場合は、半導体レーザを備えた露光制御部、画像形成部、転写紙の搬送制御部等(図示せず)等を具備している。プリンタ画像処理部114は画像制御部115を介して入力した画像データに対して、像域(オブジェクト)処理、スムージング等のプリンタ画像処理を行う。また画像データをページ画像データに合成し、プリンタI/F部113を介してプリンタ部112に出力する。プリンタI/F部113は、プリンタ部112が要求するタイミングに合わせてプリントデータを出力する。コピー機能の時は、プリンタ部112は、スキャナI/F部108から出力された画像データに基づいて印刷媒体に画像を形成する。
【0016】
図2は、画像制御部115の詳細を説明するブロック図である。ここではPDLプリント画像の圧縮のための符号化回路を例に説明する。尚、この符号化回路は、スキャナ画像処理部110にあってもよい。ここでは図1と共通する部分は同じ記号で示している。
【0017】
画像パス制御部215は、CPU101,RAM103,HDD104だけでなく、画像制御部115内の各ブロックや、スキャナ部108やプリンタ部112から転送されるデータの行き先を決定する。以下にPDLプリントの場合を例に説明する。
【0018】
CPU101は、ネットワーク部107から、ホストコンピュータが展開したPDLデータを受信するとHDD104に格納する。その後、CPU101は、そのPDLデータを展開し、レンダリング部200がラスタライズするための中間言語であるディスプレイリストに展開してRAM103に格納する。こうしてRAM103にディスプレイリストが展開されると、CPU101はレンダリング部200にレンダリング開始指示を行う。これによりレンダリング部200は、ディスプレイリスト解釈してラスタ画像に展開する。レンダリング部200がラスタ画像データへの展開を完了すると、そのラスタ画像データを画像圧縮部201に転送する。画像圧縮部201は、ラスタ画像データを画像符号化してHDD104やRAM103に格納する。また符号化された画像を出力I/F部211を通して画像制御I/F部216に供給する。またこの符号化された画像を編集画像処理部111に転送して、色空間変換、解像度変換、2値化、回転等の画像処理を行う。その後、編集画像処理部110、入力I/F部210を介して画像パス制御部215に戻して、RAM103やHDD104に再度展開することも可能である。
【0019】
図3は、レンダリング部200の構成を説明するブロック図で、CPU101,HDD104,RAM103との接続関係を図示している。
【0020】
レンダリング部200は、プロセッサエレメントPE301,303,305,307,ローカルメモリLRAM310,311,312,DMA308,FIFO302,304,306、REGISTER309を有している。このレンダリング部200は、CPU101,HDD104,RAM103とはシステムバス316を介して接続される。またシステムバス316からレジスタインターフェース317を介して、レンダリング部200のREGISTER309に動作モード等の情報を設定できる。レンダリング部200内部は、2種類のバスが存在する。一つは、BUS_ARB313に接続するレンダリングバス314と、プロセッサエレメント間を接続するPEバス315である。このPEバス315は単方向バスであり、例えば、PE301(第1のプロセッサ)からプロセッサ間FIFO302を介して、PE303(第2のプロセッサ)に向かってデータを転送する。ここでプロセッサ間FIFO302は、FIFO314とDMA315とを有している。このようにプロセッサ間FIFO302をFIFO314とDMA315とで構成することにより、BUS_ARB313を介してローカルメモリLRAM310,311,312やRAM103に対してデータを退避することが可能になる。この効果については後述する。尚、プロセッサ間FIFO304,306も、プロセッサ間FIFO30と同様の構成である。尚、図3では、プロセッサ間FIFOが全てFIFO(314,316,318)とDMA(315,317,319)で構成するように示しているが、これらはFIFOのみで構成されても良い。
【0021】
図4は、実施形態に係るレンダリング部200がレンダリングを行うためのディスプレイリストを説明する図である。
【0022】
メモリマップ400で示すように、ディスプレイリストは、INSTRUCTION・EDGE_INFO401とLEVEL_INFO402,FILL_INFO403,FILL404とWORK_AREA405とを有する。ここでEDGE_INFOは、あるライン上に存在する色の変化点を表す情報である。LEVEL_INFO402は、ある位置に重なる色情報の描画順序を示す情報である。FILL_INFO403は、色情報と重ね合わせを示し、FILLとは写真等の画像情報そのものである。WORK_AREA405は、レンダリング処理において一時的に必要となる情報を格納する領域である。またディスプレイリストの各要素データは、図4に示すように、各情報間がリンク構造になっている。このため、レンダリング部200を複数のプロセッサエレメントに分割して、各情報(EDGE/LEVEL/FILL)の処理に専念させることが可能となる。
【0023】
図5は、実施形態に係るレンダリング部200におけるレンダリング処理の流れを説明する図である。ここで、各プロセッサエレメント(PE)間はパイプラインで動作しており、図中の点線は、データの受け渡し及び、連携関係を示している。
【0024】
S500は、PE301の処理を示すフローチャートである。まずS501で、初期設定を行うと、描画するライン(スキャンライン)がレンダリング領域を超えるまでの間(S502〜S506)の処理を繰り返す。PE301は、S503で、ディスプレイリストのINSTRUCTION・EDGE_INFO401からエッジ情報を取得して、エッジを生成する。次にS504で、エッジ情報ができると、そのエッジ情報に関連するレベル情報を「レベルデータ」としてPE303に転送する。そしてS505で、スキャンラインを更新する。
【0025】
S510は、PE303の処理を示すフローチャートである。S511で、PE303がPE301からレベルデータを受信する。次にS512で、PE303は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS513に進み、描画するオブジェクトの重なり情報を取得して重なり順序を並び替える。そしてS514に進み、PE303は、描画する色情報のリンク情報をPE305(第3のプロセッサ)へ転送する。
【0026】
S520は、PE305の処理を示すフローチャートである。PE305は、S521で、PE303からフィルデータを受信する。そしてS522で、PE305は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS523に進み、描画する色情報をオブジェクトの重なり分だけ取得してオブジェクトを塗りつぶす。そしてS524に進み、PE305は、重ね合わせ処理手順(コンポジット情報)を後続のPE307(第4のプロセッサ)へ転送する。
【0027】
S530は、PE307の処理を示すフローチャートである。S531で、PE305からコンポジットデータを受信する。次にS532で、PE307は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、終了でなければS533に進んで、描画する各オブジェクトの色情報コンポジット情報を基にオブジェクトの重ね合わせ処理を行う。そしてS534で、PE307は、最終的に得られるラスタ画像データをDMA308へ転送する。
【0028】
S540は、DMA308の処理を示すフローチャートである。まずS541で、DMA308は、PE307からラスタ画像データを受信する。次にS542に進み、DMA308は、ページ終了か否かを判定し、ページ終了であれば処理を終了する。一方、ページ終了でなければS543に進み、ラスタデータをバッファに格納する。そしてS544に進み、DMA308は、バッファにデータが格納されると、予め指定されたRAM空間にラスタデータを出力する。
【0029】
図6(A)〜(C)は、プロセッサエレメント間で転送する命令データフォーマットを説明する図である。
【0030】
図6(A)は、PE301からPE303に転送する命令データフォーマットを示す。この命令データフォーマットは、命令種類(INST)、エッジとエッジ間の幅情報(WIDTH)、当該エッジに関連するレベル番号(LEVEL_NUM)、その他の情報(ADDITIONAL_INFO)を含む。
【0031】
図6(B)は、PE303からPE305に転送する命令データフォーマットを示す。この命令データフォーマットは、命令種類、エッジとエッジ間の幅情報、当該エッジに関連するフィル番号、その他の情報を含む。
【0032】
図6(C)は、PE305からPE307に転送する命令データフォーマットを示す。この命令データフォーマットは、コンポジット命令種類(COMPST_INST)、エッジとエッジ間の幅情報、重ね合わせをする色情報(FILL0〜FILL3)を含む。ここで命令種類とは、ページ開始、ライン開始、ページ終了等の処理内容を変化させるための情報である。
【0033】
図7は、PE301の処理内容を説明する図である。
【0034】
描画領域700には、三角形(色は編点、色が指定)と四角形(色は塗りつぶし、色が指定)がある。またPE301が管理するエッジ番号を管理する管理エッジ部705と、そのエッジの位置を座標の走査方向にソートしたエッジ情報を格納するソートエッジ部706が示されている。各エッジは、図7の701〜704で示すような始点と終点情報を結ぶベクトル情報で表される。
【0035】
描画領域700の最上位のラインから走査を開始し、描画するラインがエッジ701,702の位置に来ると、PE301は、ディスプレイリストのEDGE_INFO401からエッジ701,702の位置を読み出して管理エッジ部705に格納する。続いてPE301は、そのエッジ情報を走査方向に並び替えたエッジ情報をソートエッジ部706に格納する。従って、エッジ701,702の順にソートして格納される。
【0036】
次に走査ラインが、エッジ703,704のラインまで到達すると、管理エッジ部705に四角形のエッジ情報を追加格納し、ソートエッジ部706にソート結果を格納する。ここでは1ラインあたり4つのエッジが検出されて、そのソート順は走査方向に、エッジ703、エッジ701、エッジ704のエッジ702の順となる。
【0037】
次に走査ラインが、三角形のエッジ701,702から外れるラインまで到達すると、管理エッジ部705からエッジ701,702のエッジ情報を削除して、残ったエッジ703,704のエッジ情報のみをソートエッジ部706にソートして格納する。そして走査ラインがエッジ703,704から外れると、管理エッジ部705,ソートエッジ部706にはエッジ情報がなくなり、白(或いは背景色)を描画する命令のみを、PE303以降のプロセッサエレメントに指示することになる。
【0038】
図8は、PE301とPE303との間にあるFIFO302の機能と効果を説明する図で、PE301とPE303の処理時間関係を示すタイミングチャートである。図中、斜線部800は各プロセッサエレメントのデータ処理時間帯を示し、網部802はプロセッサ間FIFO302へのデータ送信を、縦線部801は、前段のプロセッサエレメントからのデータ受信処理時間を示している。
【0039】
810は、プロセッサ間FIFO302が、FIFO314のみで構成された場合のタイミングチャートを示す。811は、プロセッサ間FIFO302が、図3のように、FIFO314とDMA315で構成された場合のタイミングチャートを示している。
【0040】
810では、次に述べる状況を想定する。PE301が、1ライン分のエッジ情報をディスプレイリストから取得し、ソートした後にPE303にデータ転送を行った。ここでFIFO302のFIFO314は、4個分のレベルデータが格納できる場合を図示している。このときPE301は、820で、ライン2のデータ処理を完了している。しかしこのとき、PE303は、まだライン1の3個目のレベル情報を処理しているため、FIFO314がフル状態となって、PE301からPE303へデータを転送できない。
【0041】
これに対して811では、プロセッサ間FIFO302にDMA315が設けられているため、PE301から転送されるデータを、容量の大きいローカルメモリ(LRAM)や、RAM103に格納することができる。これにより、811では、810で示すような、プロセッサエレメント間で処理するデータと、転送する1つのデータあたりの時間間隔をなくすことができる。また、ローカルメモリなどに退避できるデータ量は可変であるため、描画するデータによりデータ量が可変するレンダリング部200にとっては最適な構成となる。
【0042】
次に、レンダリング部200から出力された画像を画像圧縮部201で符号化圧縮する場合を考える。レンダリングされた多値のラスタ画像に対する画像符号化としては、JPEGなどに代表されるブロックに対して符号化する方式のものが多い。その場合、レンダリング部200が出力するラスタ順に並んだ画素データをラインバッファに格納することになり、画像符号化ブロックの画素数や解像度が大きくなるほどシステムコストが増大する。そこで、スキャンライン出力のためのディスプレイリストからブロック単位の順番でラスタ画像を生成する方式について説明する。
【0043】
図9(A)(B)は、スキャンライン順に出力するディスプレイリストに対応した2つのラスタ画像の生成方法を説明する図である。
【0044】
図9(A)は、スキャンライン順にラスタ画像を生成する順序を示している。図9(B)は、ブロック順にラスタ画像を生成する順序を示している。前記のブロック順のレンダリング処理を行うには、ディスプレイリストから生成されたライン単位のエッジ情報をブロック情報に変換する必要がある。上述したようなスキャンライン順に出力するためのディスプレイリストから、ブロック順にラスタ画像を生成する場合、どのプロセッサエレメントがブロック情報への変換を行うかが課題となる。
【0045】
図10は、ブロック情報変換を行う最適なプロセッサエレメントを説明する図である。図10は、図9(A)(B)のそれぞれ対応した方式でレンダリングを行った場合のFIFO部302のDMA315とPE303で管理するWORK_AREA405の状態を示す図である。
【0046】
図10(A)に示すように、DMA315は、予め設定されたバッファ量に応じた数のエッジデータをWORK_AREA405に格納する。PE303は、そのDMA315から受信したレベルデータの重なり順序をソートした結果をWORK_AREA405に格納する。このとき、最大でも1ライン分のソート結果を保持しておくことで、エッジ間の幅のみが異なる同一のレベル情報をPE301から受信した場合、ソート処理を省略することができる効果がある。
【0047】
一方、図10(B)では、PE303がブロック情報変換を行う場合のPE303のWORK_AREA405(上部)と、DMA315がブロック情報変換を行う場合(下部)のPE303のWORK_AREA405の使用状況を示している。DMA315は、ブロック情報変換処理を行うブロックに関係せずに、ブロックの副走査方向の画素数(図では32ライン)分のエッジデータをWORK_AREA405に格納することになる。しかし、PE303がブロック情報の変換処理を行う場合、PE303も32ライン分のレベル処理情報結果をWORK_AREA405に格納する。もしくは、レベル情報は全く保持しない構成も有り得る。そこで、DMA315がブロック情報の変換処理を行うことができれば、PE303は各ブロック単位のレベル処理結果のみを保持しておけばよい。以上のことから、DMA315がブロック情報の変換処理を行うことで、システムメモリ削減の効果が大きくなることを示している。更に、DMA315がブロック情報の変換処理を行うと、PE301,PE303の処理内容を変更することなく、DMA315の動作モードのみの切り替えで2つのレンダリング方式に対応できる効果もある。
【0048】
次に、図11乃至図21を参照して、DMA315を備えたFIFO部302を使用したブロック情報の変換処理について説明する。
【0049】
図11は、描画領域を示している。図11には、三角、丸、四角の3つのオブジェクト1102〜1104があり、斜線で示した領域1101の32ライン分(ブロックライン)の処理を図12から図14を用いて説明する。
【0050】
図12(A)〜(F)は、走査ライン1200の位置に応じて、図11の領域1101を切り出した場合のエッジ情報を図示したものである。図12(A)は、走査ライン1200が領域1101の最上位であるときのエッジ情報を示す。図12では、エッジ間の幅をwidth[i]で定義している。また、オブジェクト1103(半円)の上部は最上位のラインと接しているため、オブジェクト1103のエッジは存在していない。
【0051】
図12(B)は、走査ライン1200が最上位のラインよりも少し下のラインである場合のエッジ情報を示す。図12(B)と図12(C)では、エッジ数の変化はなく、エッジ間の幅widthが変化している。図12(D)、図12(E)では、走査ライン1200が四角形のオブジェクト1104から外れているため、width6とwidth7がなくなっている。図12(F)は、走査ライン1200が領域1101の最下位であるときのエッジ情報を示す。PE301は、エッジ情報から各width情報を生成し、その幅と重ね合わせ情報であるレベル情報へのリンク情報を図6(A)のレベルデータとして、DMA315,PE303へ転送する。
【0052】
図13及び図14は、DMA315が管理するメモリの状態と、読み書き順序の概略を説明する図である。また、図中左部分の各ラインの開始アドレスの後にあるアルファベット(a)〜(f)は、図12の(A)〜(F)に対応している。
【0053】
図13は、DMA315がWORK_AREA405に格納するブロックライン分のメモリ情報を示している。DMA315は、1300で、Line1の開始アドレスをアドレス格納部(RAM_start_Address)に書き込んだ後、6個のレベル情報(width)をメモリに書き込む。次に1301でDMA315は、PE301から新しいラインが開始されたことを受信すると、Line2の開始アドレスを、RAM_start_Addressに書き込み、続いて7個のレベル情報をメモリに格納する。以下、領域1101の最下位ラインに達するまで、各ラインの開始アドレスとレベル情報を受信した順番で書き込む。
【0054】
図14は、DMA315がスキャンライン順のレベルデータを読み出す順序を説明する図である。読み出し制御部は、1ライン目の開始アドレスからレベル情報(width)を格納したアドレスを読み出す。ここでは1ライン目の最初のレベル情報(width1)を読み出し、次に2ライン目の開始アドレスからwidth1を取り出す。以下、1〜8の始点から矢印で示した順序で読み出しを行うことになる。
【0055】
図15は、DMA315の内部ブロック構成と、図1及び図3で示した周辺ブロックとの接続関係を説明する図である。
【0056】
ALU1501は、汎用プロセッサよりも簡易な演算(例えば、加算、減算、シフト演算)のみに対応する演算部である。BUS_IF1503は、レンダリングバス313に対してトランザクションを生成する。QIF_IN1504,QIF_OUT1505は、PE301からFIFO314を経由して入力されるデータ及び、PE303に対してFIFO314を経由して出力されるデータのバス制御を行うI/F部である。REG1506は、DMA315のレジスタ部でありALU1501により制御される。そして、MAIN_SEQ1502は、上述したALU1501,BUS_IF1503,QIF_IN1504,QIF_OUT1505,REG1506を制御するシーケンサである。このシーケンサ1502は、今回説明する動作を専用で行うハードウェアロジックであっても、プログラマブルで動作内容を変えるものであっても構わない。またDMA315は、CPU101がREGI309に格納した情報に応じて動作モードなどを切り替えることができる。次にDMA315が管理するデータの格納場所について説明する。
【0057】
RAM103には、領域1101(ブロックライン)の全ラインのwidth[i](レベルデータ)を格納する。性能向上のために、2ブロックライン分のデータを格納する方式でも良い。ローカルメモリLRAM310には、各ブロックラインのRAM103上の開始アドレス(RAM_start Address)と、継続レベル情報(continue info)と、継続レベルデータ(continue data)を格納する。図示していないが、LRAM310の情報も2ブロックライン分の構成としても良い。
【0058】
図16は、図12で示すブロックラインの描画データのエッジ位置の一例を示す図である。図16の矢印に示した2ライン分1601,1602のDMA315の動作について図17を用いて詳細に説明する。そしてDMA315の動作シーケンスを図18及び図19にフローチャートとして示した。
【0059】
図17(A)〜(C)、図18(A)(B),図19(A)(B)は、図16で示したブロック1610〜1616に対する処理を左端のブロック1610から順に対応させて示している。また、左にあるLRAM0(310)/REG/QIF_OUTなどは、それぞれのデータの読み出し先、又は格納先を示している。
【0060】
図17(A)は、図16に示すブロックラインの左端ブロック1610の矢印で示した2ライン1601,1602において、DMA315が処理するデータの遷移を示している。まずDMA315は、エッジ情報の座標位置(レベルデータ)が前処理ブロックから継続しているか否かを判定する。ここでは最初のブロックであるため、前処理ブロックから続いていることはない(*start)。次にDMA315は、ブロック内の開始座標を初期化(st_pos=0)をセットする。DMA315は、レベルデータが格納されているRAM103のアドレス情報を取得して、レベルデータ(ここではwidth1=54)をRAM103から読み出す。次にDMA315は、st_posとwidth1とを足し、シフト演算或いはビット切り出し操作によってその加算結果を32で割り、商部分と剰余部分に分解する。このとき、商部分に「1」以上の数字が得られた場合は、当該ブロックの当該ラインの処理は終了となる。そこで、DMA315は、32(ブロック主走査方向の画素数)からst_posを引き、PE303に転送すべきwidth情報を生成し、レベルデータのwidth部分を置換してからPE303に転送する。DMA315が、PE303に転送したレベルデータの一部は次ブロックの処理の時に利用するため、一時的にLRAM310のcontinue data領域に格納する。DMA315は、width情報を、元のwidth(ここでは54)から転送のため置換したwidth(ここでは32)を引いた「22」に置換してLRAM310へ格納する。また、LRAM310へ継続するレベルデータ(エッジ情報)を格納したことをLRAM310の継続情報領域(continue info領域)に格納する。以上で、左端ブロックの1ラインのレベルデータ読み出し及び転送処理を完了する。
【0061】
続いてDMA315は、数ラインの処理を終えると、図16の下段の矢印に相当するライン1602の処理に到達する。これにより図17(A)の点線部より下に示したデータ処理を行う。DMA315がRAM103から読み出すレベルデータとしては上ラインで読み出したものと同じで、width情報のみが異なるため、上記に述べた処理と同様の処理を行う。異なる点は、width情報の取り扱いである。DMA315は、width=50のうち、width=32をPE303へ転送し、残りのwidth=18をLRAM310へ格納する。DMA315は、1ブロック分(32ライン分)の処理を終えると、REG部にBLOCK_END情報を書き込み、次のブロックの処理へ遷移する。
【0062】
図17(B)は、図17(A)で、1ブロック目の32ライン分の処理が終了した後にDMA315が行う処理に基づいてる。ここでDMA315は、continue infoから継続情報と格納先LRAM310のアドレスを取得し、図17(A)で格納したレベルデータをメモリから読み出す。そのため、LRAM310のwidthは、PE301が生成したwidth=54から32を引いた「22」となっている。このときDMA315は、st_posとwidthの合計値が「32」に達しないため、商部分は0と演算する。そこで、DMA315は、widthの「22」は全てPE303に転送し、当該レベルデータは終了したと判断する。続いて、新しいレベル情報が格納されているRAM103上のアドレス情報をLRAM310から内部のアドレスレジスタにセットし直して、新しいレベルデータをRAM103から読み出す。ここでは、DMA315は、width=36のデータを読み出す。この場合、end_pso 58=22(st_pos)+36(width)となり、商部分が1よりも大きくなる。そのため、DMA315は、width(10)のレベルデータをPE303にデータを転送する。その後、元のwidth(36)から転送幅の「10」(tr_width=32−22(end_pos))を引いた「26」(width(36)−tr_width(10))を次ブロックで利用するデータとしてLRAM310へ格納する。数ライン後の点線部以下についても、処理は同様であり、width情報が異なるのみである。
【0063】
図17(C)及び図18(A)は、上ラインでは、1つ目のレベルデータは前ブロックから継続するレベルデータであり、2つ目のレベルデータで当該ブロックの処理を完了するケースを示す。但し、図17(C)については、図16の3個目のブロックにあるようにオブジェクトの重なりがあるため、レベルデータは継続するレベルデータを含めて3個となり、図17(C)と図18(A)では、下ラインにおいて処理するデータ量が異なる。
【0064】
図18(B)では、前ブロックから継続したレベルデータで開始し、2つ目のレベルデータもwidthが小さく、DMA315がさらにもう一つの新しいレベルデータをメモリから読み出しを行っている。このとき、3つ目のレベルデータについては、st_pos=24とwidth=48を加算して、ブロック画素数(32)で除算(シフト演算(72/32)=2余り8)すると、商が「2」で余りが「8」となる。この場合も、DMA315は、PE303に送信するレベルデータのwidthを「48」から「8」に置換して送信し、その後、widthを「40」(width 48−tr_width 8)にしてからLRAM310へ継続データとして格納している。
【0065】
図19(A)は、前ブロックから当該ブロックを過ぎ、次のブロックまで継続する単一色データのみで構成されている。そこで、DMA315は、次ブロックまでレベルデータを継続使用するために、width40をwidth32にして転送後、残りのwidthを8に置換して、LRAM310へ格納している。
【0066】
図19(B)では、DMA315は、前ブロックで格納したwidth8のデータをPE303へ転送し、新しいレベル情報をRAM103から読み出す。DMA315は、st_pos=8とwidth=24を足した値の剰余部分が「0」となり、ブロックライン端の画素位置と一致することがわかる。このときは元のwidth24(tr_width=32−st_pos8)をPE303へ転送する。図17(A)から図19(A)で示した例では、ブロック端(32の倍数の位置)でエッジが終了することはなかった。もし、ブロックライン内のブロック端でエッジが終了する場合は、continue infoには継続しない旨の情報を書き込むことになる。次ブロック処理時において、継続しない旨の情報(continue info==0)を読み出したDMA315は、RAM_start_Addressからアドレス情報を取得し、RAM103から新規レベル情報を処理する。
【0067】
上記に説明したようなデータの遷移によりDMA315は、ブロック情報変換処理を行う。
【0068】
図20は、実施形態に係るレンダリング部200の全体的な処理を説明するフローチャート、図21は、DMA315の処理の詳細を説明するフローチャートである。図20は、図5で示したフローチャートに、S1800で示すDMA315の動作を追加したブロック処理レンダリングに対応した全体の動作を示すフローチャートである。従って、図5と共通する部分は同じ記号で示し、それらの説明を省略する。
【0069】
DMA315が、DMA315のWORK_AREA405にデータをスキャンライン順に書き込む処理をS1810番台に、WORKA_AREA405からブロック処理順に変換するための読み出し処理をS1820番台に示す。
【0070】
まず最初に、S1810番台のレベルデータの書き込み処理を説明する。S1810で、DMA315の書き込みシーケンサ(以下、DMA1_WR)が初期設定を行う。次にS1811で、PE301からFIFO314に転送するデータのEmpty状態を確認する。S1811でEmptyでなければS1812に進み、DMA1_WRは、DMA315のリードシーケンサ(DMA1_RD)と同期処理を行う。ここでは、ダブルバッファで管理しても良いし、シングルバッファで管理及び同期処理を行っても良い。そしてS511で、DMA1_WRは、PE301からデータを受信すると、S1813で新規ラインであるかを判定する。新規ライン、即ち、ラインの先頭データであればS1814に進んで、そのアドレスをLRAM310へ格納する)。続いてS1815に進み、DMA1_WRは、RAM103へレベルデータを書き込み、S1816で、ブロックラインが終了するか否かを判定する。そしてS1816で、ブロックライン分のレベルデータ書き込みが完了するとS1817に進み、DMA1_RDとの同期処理を行い、次ブロックラインの処理に進むか否かを判定する。
【0071】
一方、DMA1_RDは、S1820で初期設定の後、S1821に進み、DMA1_WRとの同期処理を行う。DMA1_RDの繰り返し処理は、S1822でブロックラインあたりのブロック数に達するまでと、S1823で、カレントライン数がブロックのライン数(本実施形態では32ライン)に達するまでの処理をループする2重ループ構造になる。この2重ループの繰り返し処理の中で、S1824で、DMA1_RDはブロック変換及び転送を行う。
【0072】
こうしてDMA315がブロック化したデータは、PE303,PE305,PE307,PE308で処理されてブロック画像となり、S1897で、PE307からDMA308に出力される。これによりDMA308は、S1898で、そのブロック画像を受信し、S1899で画像圧縮を行う。
【0073】
図21は、図20のDMA1_RDのブロック変換及び転送処理を説明する図である。尚、図20と共通する部分は同じ記号で示し、それらの説明を省略する。
【0074】
まずS1900で、DMA1_RDは、各ブロック単位で、continue infoアドレスとRAM_start_Addressを初期化する。次にS1901に進み、DMA1_RDは、各ブロック内のライン処理の初めにst_pos,end_pos,repaet_numを初期化する。このときDMA1_RDは、S11823で、ブロック内の各ライン処理を行う。次にS1902に進み、DMA1_RDは、continue infoアドレスを内部REGのアドレスレジスタにセットし、4バイト分加算する。次にS1903に進み、DMA1_RDはcontinue infoを読み出すと、次にS1904に進み、読み出すべきRAM_Start_Addressをアドレスレジスタにセットする。続いて、DMA1_RDは、継続情報が継続と取得できれば(continue info==1)にセットする(S1905)。そしてS1906で、ローカルメモリLRAM310上の継続データ格納用アドレスを読み出しアドレスとしてアドレスレジスタにセットする。
【0075】
そしてS1907で、DMA1_RDはレベルデータを、LRAM310かRAM103から読み出して、RAM_Start_Addressを次のレベルデータへ進める(4バイト分加算する)。続いてS1908に進み、st_pos+widthから、終了位置を算出する。そしてS1909で、DMA1_RDは、S1908で読み出したend_pos(終了位置)を、ブロック画素数(本実施例では32)を割った、或いは、ビットシフトした値が「1」より小さいかを判定し、小さいときはS1910に示すループ処理に入る。このS1910のループは、当該レベルデータをPE303に転送した後、新しいレベルデータを取得するためのループである。
【0076】
このループ処理では、S1911で、DMA1_RDは、転送すべきレベルデータのwidth情報を算出する(tr_width=end_pos − st_pos)。続いてS1912に進み、DMA1_RDは続くレベルデータの開始位置をセットする(st_pos=end_pos)。尚、このS1912の処理は、S1912からS1915までの間に行われれば良い。続いてS1913に進み、DMA1_RDは、width情報を置換し、S1914で、PE303にレベルデータを転送する。そしてS1915で、DMA1_RDは続く新規レベルデータのRAM_start_Addressをアドレスレジスタにセットして、S1907の次のレベルデータの読み出し処理に戻る。
【0077】
そしてDMA1_RDは、end_posを算出した結果(repeat_num)が1以上となれば、そのレベルデータの一部をPE303へ転送し、残りは継続データとしてLRAM310へ格納する。継続するレベルデータと判断された場合は、S1917で、転送する幅(width)をend_posの剰余値として算出する。次にS1918に進み、DMA1_RDは、width部分を置換し、S1914で、レベルデータをPE303へ転送する。ここで継続するレベルデータについては、以下の手順でデータ及び継続情報を生成する。
【0078】
まずS1919で、DMA1_RDは継続するレベルデータのwidth(tr_width=width−end_pos)を算出する。そしてS1920で、レベルデータのwidth部分を置換し、LRAM310へ書き込む。これら処理によって、次ブロックでは、S1921で、継続レベル情報あり(continue info==1)のcontinue infoをLRAM310の所定アドレスに書き込む。これら処理を1ブロックライン分繰り返して(S1922,S1923)、DMA1_WRのシーケンスと同期処理を行うこととなる。
【0079】
以上説明したように、汎用的なDMA処理に簡易演算と、LRAM310とDMA間でデータ移動を行うシーケンス制御機能を追加する。これにより、スキャンライン順にレンダリング用のディスプレイリストから生成されるデータを、ブロックの処理順で出力することが可能になる。また、レンダリング処理を行うプロセッサエレメントの処理は、スキャンライン処理とブロック処理で変更しなくて済むため、2つのレンダリングモードを共存させることができる。
【0080】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
複数のプロセッサを有し、ラスタ画像をブロック単位で出力する画像処理装置であって、
ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成する手段と、前記エッジ情報を1ラインの単位でソートし、前記オブジェクトのエッジの間の幅情報と前記エッジ情報及び前記オブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する手段とを有する第1のプロセッサと、
前記ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得する取得手段と、前記第1のプロセッサから転送される前記レベルデータを受信し、各ラインの先頭にある前記レベルデータのメモリへの格納場所を、前記副走査方向の画素数に応じて管理する管理手段と、前記副走査方向の画素数に応じた前記レベルデータを前記メモリに格納すると、前記メモリより前記レベルデータの読み出し順序を制御して読み出す読み出し制御手段と、前記読み出し制御手段により読み出された前記レベルデータを第2のプロセッサへ転送する送信手段とを有するDMA手段と、
前記DMA手段から転送される前記レベルデータから、オブジェクトの重なり情報であるレベル情報を取り出す手段と、前記オブジェクトの重なり順序をソートし、前記オブジェクトの色情報を後続のプロセッサに転送する手段とを有する第2のプロセッサと、
を有することを特徴とする画像処理装置。
【請求項2】
前記オブジェクトの色情報をもとに当該オブジェクトの塗りつぶしを行う第3のプロセッサを更に有することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記ソートされた前記オブジェクトの重なり順序をもとに前記オブジェクトの重ねあわせ処理を行う第4のプロセッサを更に有することを特徴とする請求項2に記載の画像処理装置。
【請求項1】
複数のプロセッサを有し、ラスタ画像をブロック単位で出力する画像処理装置であって、
ディスプレイリストを解釈し、1ラインに含まれるオブジェクトのエッジ情報を生成する手段と、前記エッジ情報を1ラインの単位でソートし、前記オブジェクトのエッジの間の幅情報と前記エッジ情報及び前記オブジェクトの重なり情報へのリンク情報を持つレベルデータを転送する手段とを有する第1のプロセッサと、
前記ブロックの主走査方向の画素数と副走査方向の画素数の情報を取得する取得手段と、前記第1のプロセッサから転送される前記レベルデータを受信し、各ラインの先頭にある前記レベルデータのメモリへの格納場所を、前記副走査方向の画素数に応じて管理する管理手段と、前記副走査方向の画素数に応じた前記レベルデータを前記メモリに格納すると、前記メモリより前記レベルデータの読み出し順序を制御して読み出す読み出し制御手段と、前記読み出し制御手段により読み出された前記レベルデータを第2のプロセッサへ転送する送信手段とを有するDMA手段と、
前記DMA手段から転送される前記レベルデータから、オブジェクトの重なり情報であるレベル情報を取り出す手段と、前記オブジェクトの重なり順序をソートし、前記オブジェクトの色情報を後続のプロセッサに転送する手段とを有する第2のプロセッサと、
を有することを特徴とする画像処理装置。
【請求項2】
前記オブジェクトの色情報をもとに当該オブジェクトの塗りつぶしを行う第3のプロセッサを更に有することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記ソートされた前記オブジェクトの重なり順序をもとに前記オブジェクトの重ねあわせ処理を行う第4のプロセッサを更に有することを特徴とする請求項2に記載の画像処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2011−178034(P2011−178034A)
【公開日】平成23年9月15日(2011.9.15)
【国際特許分類】
【出願番号】特願2010−44631(P2010−44631)
【出願日】平成22年3月1日(2010.3.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成23年9月15日(2011.9.15)
【国際特許分類】
【出願日】平成22年3月1日(2010.3.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]