以下に添付図面を参照して、この発明にかかる画像処理装置および画像処理方法の実施の形態を詳細に説明する。なお、同一の構成要素には同一の符号を付してその説明を省略している。
(本発明の実施の形態)
図1は、本発明の実施の形態にかかるMFP(複合機)の構成を示すブロック図である。本実施の形態は、本発明をMFPに適用したものである。図1に示すように、このMFPは、コントローラ10とエンジン部(Engine)60とをPCI(Peripheral Component Interface)バスで接続した構成となる。コントローラ10は、MFP全体の制御と描画、通信、図示しない操作部からの入力を制御するコントローラである。エンジン部60は、PCIバスに接続可能なプリンタエンジンなどであり、たとえば白黒プロッタ、1ドラムカラープロッタ、4ドラムカラープロッタ、スキャナまたはファックスユニットなどである。なお、このエンジン部60には、プロッタなどのいわゆるエンジン部分に加えて、誤差拡散やガンマ変換などの画像処理部分が含まれる。
コントローラ10は、CPU11(本発明の情報処理手段に対応)と、ノースブリッジ(NB)13と、システムメモリ(MEM−P)12と、サウスブリッジ(SB)14と、ローカルメモリ(MEM−C)17と、ASIC(Application Specific Integrated Circuit)16(本発明の画像処理手段に対応)と、ハードディスクドライブ(HDD)18とを有し、ノースブリッジ(NB)13とASIC16との間をAGP(Accelerated Graphics Port)バス15で接続した構成となる。また、MEM−P12は、ROM(Read Only Memory)12a(本発明のプログラム記録手段に対応)と、RAM(Random Access Memory)12b(本発明のデータ記録手段に対応)と、をさらに有する。
CPU11は、MFPの全体制御をおこなうものであり、NB13、MEM−P12およびSB14からなるチップセットを有し、このチップセットを介して他の機器と接続される。
NB13は、CPU11とMEM−P12、SB14、AGP15とを接続するためのブリッジであり、MEM−P12に対する読み書きなどを制御するメモリコントローラと、PCIマスタおよびAGPターゲットとを有する。
MEM−P12は、プログラムやデータの格納用メモリ、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いるシステムメモリであり、ROM12aとRAM12bとからなる。ROM12aは、プログラムやデータの格納用メモリとして用いる読み出し専用のメモリであり、RAM12bは、プログラムやデータの展開用メモリ、プリンタの描画用メモリなどとして用いる書き込みおよび読み出し可能なメモリである。
本実施の形態においては、ROM12aには、アプリケーションプログラム(FAXアプリケーションプログラム、コピーアプリケーションプログラム、スキャナアプリケーションプログラム等)、デバイスドライバプログラム(ASIC16等のハードウェアを制御するプログラム)等の各種のプログラムが記録されている。これらのプログラムは、CPU11によって実行される。図2は、アプリケーションプログラム(以下、単に「アプリケーション」ともいう。)、デバイスドライバプログラム(以下、単に「デバイスドライバ」ともいう。)、およびASIC16の連携関係を示す図である。アプリケーションは、ASIC16を動作させる(起動する)ことをデバイスドライバに要求し、デバイスドライバは、アプリケーションからの要求に応じてASIC16を動作させる(起動する)。ASIC16は、所定のタイミング(後述)でデバイスドライバに割り込み信号を出力し、デバイスドライバは、割り込み信号を受け取ると、必要に応じてアプリケーションに結果通知を行う。
本実施の形態において、アプリケーションは、ASIC16に処理させるための画像データを複数のブロックに分割してRAM12b(図1参照)に用意する(記録する)。また、アプリケーションは、複数のブロックを参照する複数の入力側および出力側ディスクリプタ情報をRAM12bに用意する。
図3は、ディスクリプタ情報の例を示す図である。ディスクリプタ情報は、次のディスクリプタ情報の格納アドレスを示すチェーン先アドレス(本実施の形態では32ビット)、転送するデータ(ブロック)の先頭アドレスを示すデータ転送先アドレス(本実施の形態では32ビット)、転送するデータ(ブロック)のデータ量をライン数で示すデータ転送ライン数(本実施の形態では32ビット)、およびフォーマット情報(本実施の形態では32ビット)を含む。本実施の形態では、フォーマット情報のうち、使われずに空いている最下位ビット(ビット0)を、ASIC16からCPU11への割り込み信号のマスクに利用する。本実施の形態では、フォーマット情報の最下位ビット(ビット0)が「1」である場合にCPU割り込みを発生させ、「0」である場合にCPU割り込みをマスクする。また、フォーマット情報のうち、同じく使われずに空いている上位16ビット(ビット31〜16)をテンポラリ領域(後述)として利用する。
再び図1を参照すると、SB14は、NB13とPCIデバイス、周辺デバイスとを接続するためのブリッジである。このSB14は、PCIバスを介してNB13と接続されており、このPCIバスには、ネットワークインターフェース(I/F)部なども接続される。
ASIC16は、画像処理用のハードウェア要素を有する画像処理用途向けのIC(Integrated Circuit)であり、AGP15、PCIバス、HDD18およびMEM−C17をそれぞれ接続するブリッジの役割を有する。このASIC16は、PCIターゲットおよびAGPマスタと、ASIC16の中核をなすアービタ(ARB)と、MEM−C17を制御するメモリコントローラと、CPU11によってRAM12b内に用意(記録)された画像処理対象画像データ(以下、「入力画像データ」と言う場合がある。)をDMA(Direct Memory Access)読み出しする入力側DMAC(DMA Controller)と、ハードウェアロジックなどにより画像データの回転、圧縮などの各種の画像処理をおこなう画像処理機能ブロックと、画像処理機能ブロックにより画像処理が実施された後の画像処理結果画像データ(以下、「出力画像データ」と言う場合がある。)をRAM12bにDMA書き込みする出力側DMACと、エンジン部60との間でPCIバスを介したデータ転送をおこなうPCIユニットとからなる。このASIC16には、PCIバスを介してFCU(Facsimile Control Unit)30、USB(Universal Serial Bus)40、IEEE1394(the Institute of Electrical and Electronics Engineers 1394)インタフェース50が接続される。操作表示部20はASIC16に直接接続されている。
図4は、RAM12b〜ASIC16〜RAM12bという経路における画像データの流れを示す図である。ASIC16は、入力側DMAC161、画像処理機能ブロック162、および出力側DMAC163を含んでおり、入力側DMAC161は、CPU11によってRAM12b(図1参照)内に用意された複数の入力側ディスクリプタ情報を参照することで、CPU11によってRAM12b(図1参照)内に用意され、複数のブロックに分割された画像処理対象画像データ(入力画像データ)をDMA読み出しして、画像処理機能ブロック162に出力する。画像処理機能ブロック162は、入力側DMAC161によってDMA読み出しされた画像処理対象画像データに画像処理を実施する。出力側DMAC163は、CPU11によってRAM12b内に用意された複数の出力側ディスクリプタ情報を参照して、画像処理結果画像データ(出力画像データ)をRAM12aにDMA書き込みする。
再び図1を参照すると、MEM−C17は、コピー用画像バッファ、符号バッファとして用いるローカルメモリであり、HDD(Hard Disk Drive)18は、画像データの蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積を行うためのストレージである。
AGP15は、グラフィック処理を高速化するために提案されたグラフィックスアクセラレーターカード用のバスインターフェースであり、MEM−P12に高スループットで直接アクセスすることにより、グラフィックスアクセラレーターカードを高速にするものである。
次に、本発明の実施の形態の第1の動作について説明する。図5は、入力画像データを時計回りに90度回転させる回転処理をASIC16に行わせる場合における、複数の入力側ディスクリプタ情報、入力画像データ、および複数の出力側ディスクリプタ情報(処理データ)の例を示す図である。入力画像データは複数(ここでは、3つ)のブロックに分割されており、各ブロックが格納されている領域の先頭アドレスは、複数(ここでは、3つ)の入力側ディスクリプタ情報ID1〜ID3内に、データ転送先アドレスとして格納されている。同様に、出力画像データも複数(ここでは、3つ)のブロックに分割される。出力画像データの複数(ここでは、3つ)のブロックが書き込まれる領域の先頭アドレスは、複数(ここでは、3つ)の出力側ディスクリプタ情報OD1〜OD3内に、データ転送先アドレスとして格納されている。なお、図5においては、便宜のため、テンポラリ領域(フォーマット情報の上位16ビット(ビット31〜ビット16)、図3参照)を、ディスクリプタ情報の最下段に独立させて示している。
先に触れたように、本実施の形態においては、各入力側および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている最下位ビット(ビット0)を、ASIC16からCPU11への割り込み信号のマスクとして利用する。図5に示す例では、入力側ディスクリプタ情報ID1、ID2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)に設定されており、入力側ディスクリプタ情報ID3のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)に設定されている。
また、本実施の形態においては、各入力側、および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている上位16ビット(ビット31〜16)をテンポラリ領域として利用する。図5に示す例では、入力側ディスクリプタ情報ID1のテンポラリ領域(ビット31〜16)は、「結果通知あり」(ここでは、「1」とする。)に設定されており、入力側ディスクリプタ情報ID2、ID3のテンポラリ領域(ビット31〜16)は、「結果通知なし」(ここでは、「0」とする。)に設定されている。
また、出力側ディスクリプタ情報OD1、OD2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)に設定されており、出力側ディスクリプタ情報OD3のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)に設定されている。
また、出力側ディスクリプタ情報OD1、OD3のテンポラリ領域(ビット31〜16)は、「結果通知なし」(ここでは、「0」とする。)に設定されており、出力側ディスクリプタ情報OD2のテンポラリ領域(ビット31〜16)は、「結果通知あり」(ここでは、「1」とする。)に設定されている。
このように、テンポラリ領域を「結果通知あり」、「結果通知なし」に利用する場合、各入力側および出力側ディスクリプタ情報のフォーマット情報の上位16ビット(ビット31〜16)の全てのビットを利用する必要はなく、1ビット利用すれば足りる。
図6は、アプリケーションが図5に示す入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報をRAM12a内に用意して画像処理(ここでは、90度回転処理)の実施を要求する場合における、アプリケーション、デバイスドライバ、入力側DMAC161、ASIC16の画像処理機能ブロック162内の画像処理部(ここでは、回転処理部162a(図5参照))、および出力側DMAC163のシーケンス図である。
アプリケーションは、入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報(図5参照)をRAM12a内に用意した後、デバイスドライバに画像処理要求を行う(ステップS1)。デバイスドライバは、画像処理要求をアプリケーションから受けると、アプリケーションから要求された画像処理(ここでは、90度回転処理)を行うように、ASIC16の画像処理機能ブロック162内の画像処理部(ここでは、回転処理部162a)を起動する(ステップS2)。ASIC16の画像処理機能ブロック162内の回転処理部162aは、デバイスドライバから起動されると、入力側DMAC161を起動する(ステップS3)。また、ASIC16の画像処理機能ブロック162内の回転処理部162aは、出力側DMAC163を起動する(ステップS4)。
入力側DMAC161は、入力側ディスクリプタ情報ID1(図5参照)を参照して、入力画像データの第1のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第1のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理(ここでは、90度回転処理)が実施される。ここで、入力側ディスクリプタ情報ID1のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第1のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS5)。
図7は、ASIC16から割り込み信号が入力された場合におけるデバイスドライバの処理(割り込みハンドラ)を示すフローチャートである。ASIC16から割り込み信号が入力されると、デバイスドライバは、入力側ディスクリプタ情報ID1のテンポラリ領域が「1」(「結果通知あり」)であるか否かを判定する(ステップS21)。
デバイスドライバは、入力側ディスクリプタ情報ID1のテンポラリ領域が「1」(「結果通知あり」)であると判定した場合(ステップS21:Yes)、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知する(ステップS22)。
また、デバイスドライバは、入力側ディスクリプタ情報ID1のテンポラリ領域が「1」(「結果通知あり」)ではないと判定した場合(ステップS21:No)、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知することなく処理を終了する。
ここでは、入力側ディスクリプタ情報ID1のテンポラリ領域が「1」(「結果通知あり」)であるので(ステップS21:Yes)、デバイスドライバは、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知する(ステップS22(図6のステップS6に対応))。デバイスドライバから通知を受けたアプリケーションは、種々の処理(例えば、今実施されている90度回転処理の次に実施する画像処理の準備のための処理等)を行うことができる。
再び図6を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD1(図5参照)を参照して、画像処理機能ブロック162内部の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第1のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD1のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第1のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS7)。
再び図7を参照すると、デバイスドライバは、出力側ディスクリプタ情報OD1のテンポラリ領域が「1」(「結果通知あり」)であるか否かを判定する(ステップS21)。
デバイスドライバは、出力側ディスクリプタ情報OD1のテンポラリ領域が「1」(「結果通知あり」)であると判定した場合(ステップS21:Yes)、アプリケーションに結果(ここでは、第1のブロックのDMA書き込みが完了したこと)を通知する(ステップS22)。
また、デバイスドライバは、出力側ディスクリプタ情報OD1のテンポラリ領域が「1」(「結果通知あり」)ではないと判定した場合(ステップS21:No)、アプリケーションに結果(ここでは、第1のブロックのDMA書き込みが完了したこと)を通知することなく処理を終了する。
ここでは、出力側ディスクリプタ情報OD1のテンポラリ領域が「1」ではなく「0」(「結果通知なし」)であるので(ステップS21:No)、デバイスドライバは、アプリケーションに結果(ここでは、第1のブロックのDMA書き込みが完了したこと)を通知することなく、処理を終了する。
再び図6を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID2(図5参照)を参照して、入力画像データの第2のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第2のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第2のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS8)。
再び図7を参照すると、デバイスドライバは、入力側ディスクリプタ情報ID2のテンポラリ領域が「1」(「結果通知あり」)であるか否かを判定する(ステップS21)。
デバイスドライバは、入力側ディスクリプタ情報ID2のテンポラリ領域が「1」(「結果通知あり」)であると判定した場合(ステップS21:Yes)、アプリケーションに結果(ここでは、第2のブロックのDMA読み出しが完了したこと)を通知する(ステップS22)。
また、デバイスドライバは、入力側ディスクリプタ情報ID2のテンポラリ領域が「1」(「結果通知あり」)ではないと判定した場合(ステップS21:No)、アプリケーションに結果(ここでは、第2のブロックのDMA読み出しが完了したこと)を通知することなく処理を終了する。
ここでは、入力側ディスクリプタ情報ID2のテンポラリ領域が「1」ではなく「0」(「結果通知なし」)であるので(ステップS21:No)、デバイスドライバは、アプリケーションに結果(ここでは、第2のブロックのDMA読み出しが完了したこと)を通知することなく、処理を終了する。
再び図6を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD2(図5参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第2のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第2のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS9)。
再び図7を参照すると、デバイスドライバは、出力側ディスクリプタ情報OD2のテンポラリ領域が「1」(「結果通知あり」)であるか否かを判定する(ステップS21)。
デバイスドライバは、出力側ディスクリプタ情報OD2のテンポラリ領域が「1」(「結果通知あり」)であると判定した場合(ステップS21:Yes)、アプリケーションに結果(ここでは、第2のブロックのDMA書き込みが完了したこと)を通知する(ステップS22)。
また、デバイスドライバは、出力側ディスクリプタ情報OD2のテンポラリ領域が「1」(「結果通知あり」)ではないと判定した場合(ステップS21:No)、アプリケーションに結果(ここでは、第2のブロックのDMA書き込みが完了したこと)を通知することなく処理を終了する。
ここでは、出力側ディスクリプタ情報OD2のテンポラリ領域が「1」(「結果通知あり」)であるので(ステップS21:Yes)、デバイスドライバは、アプリケーションに結果(ここでは、第2のブロックのDMA書き込みが完了したこと)を通知する(ステップS22(図6のステップS10に対応))。デバイスドライバから通知を受けたアプリケーションは、種々の処理(例えば、次に実施する画像処理の準備のための処理等)を行うことができる。
再び図6を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID3(図5参照)を参照して、入力画像データの第3のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第3のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID3のフォーマット情報の最下位ビット(ビット0)が「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第3のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しないが、入力画像データのDMA読み出しが完了したことをASIC16の画像処理機能ブロック162内の回転処理部162aには通知する(ステップS11)。
また、出力側DMAC163は、出力側ディスクリプタ情報OD3(図5参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第3のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD3のフォーマット情報の最下位ビット(ビット0)が「0」(CPU割り込みなし)であるので、出力側DMAC163は、出力画像データの第3のブロックのDMA書き込みが完了しても、割り込み信号をデバイスドライバに出力しないが、出力画像データのDMA書き込みが完了したことをASIC16の画像処理機能ブロック162内の回転処理部162aには通知する(ステップS12)。
そして、ASIC16の画像処理機能ブロック162内の回転処理部162aは、画像処理が完了したことを表す割り込み信号をデバイスドライバに出力し(ステップS13)、デバイスドライバは、画像処理(ここでは、90度回転処理)が完了したことをアプリケーションに通知する(ステップS14)。
以上説明したように、アプリケーションは、入力側ディスクリプタ情報ID1〜ID3、および出力側ディスクリプタ情報OD1〜OD3のテンポラリ領域に結果通知の要否を設定してデバイスドライバを呼び出すことで、所望のタイミング(本例では、第1のブロックのDMA読み出しが完了したとき、および第2のブロックのDMA書き込みが完了したとき)で種々の処理(例えば、次に実施する画像処理の準備のための処理等)を行うことを実現することができる。
ここで、比較例として、アプリケーションがテンポラリ領域を結果通知の要否に利用せずに所望のタイミングで種々の処理を行うことを実現する場合の動作について説明する。
図8は、アプリケーションがテンポラリ領域を結果通知の要否に利用せずに所望のタイミングで種々の処理を行うことを実現する場合における、アプリケーション、デバイスドライバ、入力側DMAC161、ASIC16の画像処理機能ブロック162内の回転処理部162a、および出力側DMAC163のシーケンス図である。
まず、アプリケーションは、結果通知を所望するディスクリプタ情報が何番目であるかを表す1つまたは複数の値(1つまたは複数のカウント値)をデバイスドライバに渡して、結果通知要求を行う(ステップS30)。ここでは、アプリケーションは、入力側の1番目のディスクリプタ情報ID1と出力側の2番目のディスクリプタ情報OD2を表すカウント値をデバイスドライバに渡すものとする。
図9は、アプリケーションから結果通知要求を受けた場合におけるデバイスドライバの処理を示すフローチャートである。デバイスドライバは、アプリケーションから結果通知要求を受けると、結果通知をするディスクリプタ情報が何番目であるかを表す値(カウント値)を保持し(ステップS51)、処理されたディスクリプタ情報が何番目であるかを計数するためのディスクリプタカウンタを初期化する(ステップS52)。
再び図8を参照すると、アプリケーションは、デバイスドライバに画像処理(ここでは、90度回転処理)要求を行う(ステップS31)。デバイスドライバは、画像処理(ここでは、90度回転処理)要求をアプリケーションから受けると、アプリケーションから要求された画像処理(ここでは、90度回転処理)を行うように、ASIC16の画像処理機能ブロック162内の画像処理部(ここでは、回転処理部162a)を起動する(ステップS32)。画像処理機能ブロック162内の回転処理部162aは、デバイスドライバから起動されると、入力側DMAC161を起動する(ステップS33)。また、画像処理機能ブロック162内の回転処理部162aは、出力側DMAC163を起動する(ステップS34)。
入力側DMAC161は、入力側ディスクリプタ情報ID1(図5参照)を参照して、入力画像データの第1のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第1のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID1のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第1のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS35)。
図10は、ASIC16から割り込み信号が入力された場合におけるデバイスドライバの処理(割り込みハンドラ)を示すフローチャートである。デバイスドライバは、ASIC16から割り込み信号が入力されると、ステップS51(図9参照)において保持した値とディスクリプタカウンタの値が同じであるか否かを判定する(ステップS61)。
デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じであると判定した場合(ステップS61:Yes)、アプリケーションに結果を通知し(ステップS62)、ディスクリプタカウンタに1を加算する(ステップS63)。
また、デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じではないと判定した場合(ステップS61:No)、アプリケーションに結果を通知せずに、ディスクリプタカウンタに1を加算する(ステップS63)。
ここでは、アプリケーションが入力側の1番目のディスクリプタ情報ID1の結果通知を要求しており、ステップS51において保持したカウント値とディスクリプタカウンタの値が同じになるので(ステップS61:Yes)、デバイスドライバは、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知し(ステップS62(図8のステップS36に対応))、ディスクリプタカウンタに1を加算する(ステップS63)。デバイスドライバから通知を受けたアプリケーションは、種々の処理(例えば、次に実施する画像処理の準備のための処理等)を行うことができる。
再び図8を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD1(図5参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第1のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD1のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第1のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS37)。
再び図10を参照すると、デバイスドライバは、ステップS51(図9参照)において保持した値とディスクリプタカウンタの値が同じであるか否かを判定する(ステップS61)。
デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じであると判定した場合(ステップS61:Yes)、アプリケーションに結果を通知し(ステップS62)、ディスクリプタカウンタに1を加算する(ステップS63)。
また、デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じではないと判定した場合(ステップS61:No)、アプリケーションに結果を通知せずに、ディスクリプタカウンタに1を加算する(ステップS63)。
ここでは、アプリケーションが出力側1番目のディスクリプタ情報の結果通知を要求しておらず、ステップS51において保持した値とディスクリプタカウンタの値が同じにはならないので(ステップS61:No)、デバイスドライバは、アプリケーションに結果(ここでは、第1のブロックのDMA書き込みが完了したこと)を通知せず、ディスクリプタカウンタに1を加算する(ステップS63)。
再び図8を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID2(図5参照)を参照して、入力画像データの第2のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第2のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第2のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS38)。
再び図10を参照すると、デバイスドライバは、ステップS51(図9参照)において保持した値とディスクリプタカウンタの値が同じであるか否かを判定する(ステップS61)。
デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じであると判定した場合(ステップS61:Yes)、アプリケーションに結果を通知し(ステップS62)、ディスクリプタカウンタに1を加算する(ステップS63)。
また、デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じではないと判定した場合(ステップS61:No)、アプリケーションに結果を通知せずに、ディスクリプタカウンタに1を加算する(ステップS63)。
ここでは、アプリケーションが入力側2番目のディスクリプタ情報の結果通知を要求しておらず、ステップS51において保持した値とディスクリプタカウンタの値が同じにはならないので(ステップS61:No)、デバイスドライバは、アプリケーションに結果(ここでは、第2のブロックのDMA書き込みが完了したこと)を通知せず(ステップS61:No)、ディスクリプタカウンタに1を加算する(ステップS63)。
再び図8を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD2(図5参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第2のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD2のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第2のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS39)。
再び図10を参照すると、デバイスドライバは、ステップS51(図9参照)において保持した値とディスクリプタカウンタの値が同じであるか否かを判定する(ステップS61)。
デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じであると判定した場合(ステップS61:Yes)、アプリケーションに結果を通知し(ステップS62)、ディスクリプタカウンタに1を加算する(ステップS63)。
また、デバイスドライバは、ステップS51において保持した値とディスクリプタカウンタの値が同じではないと判定した場合(ステップS61:No)、アプリケーションに結果を通知せずに、ディスクリプタカウンタに1を加算する(ステップS63)。
ここでは、アプリケーションが出力側2番目のディスクリプタ情報の結果通知を要求しており、ステップS51において保持した値とディスクリプタカウンタの値が同じになるので(ステップS61:Yes)、デバイスドライバは、アプリケーションに結果(ここでは、第2のブロックのDMA書き込みが完了したこと)を通知し(ステップS62(図8のステップS40に対応))、ディスクリプタカウンタに1を加算する(ステップS63)。デバイスドライバから通知を受けたアプリケーションは、種々の処理(例えば、次に実施する画像処理の準備のための処理等)を行うことができる。
再び図8を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID3(図5参照)を参照して、入力画像データの第3のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第3のブロックには、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID3のフォーマット情報の最下位ビット(ビット0)は「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第3のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しないが、入力画像データのDMA読み出しが完了したことを画像処理機能ブロック162内の回転処理部162aには通知する(ステップS41)。
また、出力側DMAC163は、出力側ディスクリプタ情報OD3(図5参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第3のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD3のフォーマット情報の最下位ビット(ビット0)は「0」(CPU割り込みなし)であるので、出力側DMAC163は、出力画像データの第3のブロックのDMA書き込みが完了しても、割り込み信号をデバイスドライバに出力しないが、出力画像データのDMA書き込みが完了したことを画像処理機能ブロック162内の回転処理部162aには通知する(ステップS42)。
そして、ASIC16は、画像処理(ここでは、90度回転処理)が完了したことを表す割り込み信号をデバイスドライバに出力し(ステップS43)、デバイスドライバは、画像処理(ここでは、90度回転処理)が完了したことをアプリケーションに通知する(ステップS44)。
以上説明したように、アプリケーションは、画像処理(ここでは、90度回転処理)要求を行う前に結果通知要求を行っておくことで、所望のタイミング(本例では、第1のブロックのDMA読み出しが完了したとき、および第2のブロックのDMA書き込みが完了したとき)で種々の処理(例えば、次に実施する画像処理の準備のための処理等)を行うことを実現することができる。
ここで、テンポラリ領域を結果通知の要否に利用した場合のデバイスドライバの割り込み処理(図7参照)とテンポラリ領域を結果通知の要否に利用しない場合のデバイスドライバの割り込み処理(図10参照)とを比較すると、テンポラリ領域を結果通知の要否に利用した場合のデバイスドライバの割り込み処理の方がテンポラリ領域を結果通知の要否に利用しない場合のデバイスドライバの割り込み処理よりも計算量(処理量)が少ない。すなわち、テンポラリ領域を結果通知の要否に利用することで、デバイスドライバの割り込み処理を高速化することが可能である。
次に、本発明の実施の形態の第2の動作について説明する。図11は、入力画像データを時計回りに90度回転させる回転処理をASIC16に行わせる場合における、複数の入力側ディスクリプタ情報、入力画像データ、および複数の出力側ディスクリプタ情報の例を示す図である。入力画像データは複数(ここでは、3つ)のブロックに分割されており、各ブロックが格納されている領域の先頭アドレスは、複数(ここでは、3つ)の入力側ディスクリプタ情報ID11〜ID13内に、データ転送先アドレスとして格納されている。同様に、出力画像データも複数(ここでは、3つ)のブロックに分割される。出力画像データの複数(ここでは、3つ)のブロックが格納される領域の先頭アドレスは、複数(ここでは、3つ)の出力側ディスクリプタ情報OD11〜OD13内に、データ転送先アドレスとして格納されている。なお、図11においては、便宜のため、テンポラリ領域(フォーマット情報の上位16ビット(ビット31〜ビット16)、図3参照)を、ディスクリプタ情報の最下段に独立させて示している。
本実施の形態においては、各入力側および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている最下位ビット(ビット0)を、ASIC16からCPU11への割り込み信号のマスクとして利用する。図11に示す例では、入力側ディスクリプタ情報ID11、ID12のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)に設定されており、入力側ディスクリプタ情報ID13のフォーマット情報の最下位ビットは、「0」(CPU割り込みなし)に設定されている。
また、本実施の形態においては、各入力側、および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている上位16ビット(ビット31〜16)をテンポラリ領域として利用する。図11に示す例では、入力側ディスクリプタ情報ID11のテンポラリ領域は、「入力側1番目」に設定されており、入力側ディスクリプタ情報ID12のテンポラリ領域は、「入力側2番目」に設定されており、入力側ディスクリプタ情報ID13のテンポラリ領域は、「入力側3番目」に設定されている。
また、出力側ディスクリプタ情報OD11、OD12のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)に設定されており、出力側ディスクリプタ情報OD13のフォーマット情報の最下位ビットは、「0」(CPU割り込みなし)に設定されている。
また、出力側ディスクリプタ情報OD11のテンポラリ領域は、「出力側1番目」に設定されており、出力側ディスクリプタ情報OD12のテンポラリ領域は、「出力側2番目」に設定されており、出力側ディスクリプタ情報OD13のテンポラリ領域は、「出力側3番目」に設定されている。
図12は、入力画像データを圧縮する圧縮処理をASIC16に行わせる場合における、複数の入力側ディスクリプタ情報、入力画像データ、および複数の出力側ディスクリプタ情報の例を示す図である。入力画像データは複数(ここでは、3つ)のブロックに分割されており、各ブロックが格納されている領域の先頭アドレスは、複数(ここでは、3つ)の入力側ディスクリプタ情報ID21〜ID23内に、データ転送先アドレスとして格納されている。同様に、出力画像データも複数(ここでは、2つ)のブロックに分割される。出力画像データの複数(ここでは、2つ)のブロックが書き込まれる領域の先頭アドレスは、複数(ここでは、2つ)の出力側ディスクリプタ情報OD21〜OD22内に、データ転送先アドレスとして格納されている。なお、図12においては、便宜のため、テンポラリ領域(フォーマット情報の上位16ビット(ビット31〜ビット16)、図3参照)を、ディスクリプタ情報の最下段に独立させて示している。
本実施の形態においては、各入力側、および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている最下位ビット(ビット0)を、ASIC16からCPU11への割り込み信号のマスクとして利用する。図12に示す例では、入力側ディスクリプタ情報ID21〜ID23のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)に設定されている。
また、本実施の形態においては、各入力側、および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている上位16ビット(ビット31〜16)をテンポラリ領域として利用する。図12に示す例では、入力側ディスクリプタ情報ID21のテンポラリ領域は、「入力側1番目」に設定されており、入力側ディスクリプタ情報ID22のテンポラリ領域は、「入力側2番目」に設定されており、入力側ディスクリプタ情報ID23のテンポラリ領域は、「入力側3番目」に設定されている。
また、出力側ディスクリプタ情報OD21、OD22のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)に設定されている。
また、出力側ディスクリプタ情報OD21のテンポラリ領域は、「出力側1番目」に設定されており、出力側ディスクリプタ情報OD22のテンポラリ領域は、「出力側2番目」に設定されている。
ここで、図11に示す出力側ディスクリプタ情報OD11〜OD13のデータ転送先アドレス、およびデータ転送ライン数と、図12に示す入力側ディスクリプタ情報ID21〜ID23のデータ転送先アドレス、およびデータ転送ライン数と、を同じ値にそれぞれ設定しておけば、画像処理機能ブロック162内の回転処理部162aによって回転処理が実施された後の出力画像データをそのまま画像処理機能ブロック162内の圧縮処理部162bの入力画像データとすることができる。
図13は、アプリケーションが図11、および図12に示す入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報をRAM12a内に用意して2つの画像処理(ここでは、1つ目の画像処理が90度回転処理であり、2つ目の画像処理が圧縮処理である。)を継続、連続して実施することを要求する場合における、アプリケーション、デバイスドライバ、入力側DMAC161、ASIC16の画像処理機能ブロック162内の回転処理部162a(図11参照)、ASIC16の画像処理機能ブロック162内の圧縮処理部162b(図12参照)、および出力側DMAC163のシーケンス図である。
アプリケーションは、2つの画像処理(ここでは、1つ目の画像処理が90度回転処理であり、2つ目の画像処理が圧縮処理である。)のための入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報(図11、および図12参照)をRAM12a内に用意した後、2つ目の画像処理部を起動するタイミング対象のディスクリプタ情報をデバイスドライバに指定して、2つ目の画像処理部の起動タイミング要求を行う(ステップS70)。図14は、2つ目の画像処理部の起動タイミング要求をする場合におけるアプリケーションの処理を示すフローチャートである。図14に示すように、アプリケーションは、2つ目の画像処理部を起動するタイミング対象のディスクリプタ情報をデバイスドライバに指定する(ステップS91)。ここでは、アプリケーションは、「出力側2番目」を指定するものとする。デバイスドライバは、アプリケーションから指定された値(「出力側2番目」)を保持する。
再び図13を参照すると、アプリケーションは、デバイスドライバに1つ目の画像処理要求を行う(ステップS71)。デバイスドライバは、1つ目の画像処理要求をアプリケーションから受けると、アプリケーションから要求された画像処理(ここでは、90度回転処理)を行うように、ASIC16の画像処理機能ブロック162内の回転処理部162aを起動する(ステップS72)。画像処理機能ブロック162内の回転処理部162aは、デバイスドライバから起動されると、入力側DMAC161を起動する(ステップS73)。また、回転処理部162aは、出力側DMAC163を起動する(ステップS74)。
入力側DMAC161は、入力側ディスクリプタ情報ID11(図11参照)を参照して、入力画像データの第1のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第1のブロックには、画像処理機能ブロック162内の回転処理部162a(図11参照)によって画像処理(ここでは、90度回転処理)が実施される。ここで、入力側ディスクリプタ情報ID11のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第1のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS75)。
図15は、ASIC16から割り込み信号が入力された場合におけるデバイスドライバの処理(割り込みハンドラ)を示すフローチャートである。ASIC16から割り込み信号が入力されると、デバイスドライバは、入力側ディスクリプタ情報ID11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであるか否かを判定する(ステップS101)。
デバイスドライバは、入力側ディスクリプタ情報ID11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであると判定した場合(ステップS101:Yes)、2つ目の画像処理を実施する画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動する(ステップS102)。
また、デバイスドライバは、入力側ディスクリプタ情報ID11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じではないと判定した場合(ステップS101:No)、処理を終了する。
ここでは、入力側ディスクリプタ情報ID11のテンポラリ領域の値が「入力側1番目」であり、アプリケーションが指定した値(ここでは、「出力側2番目」)と同じではないので(ステップS101:No)、デバイスドライバは、2つ目の画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動せずに、処理を終了する。
再び図13を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD11(図11参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図11参照)によって画像処理が実施された後の出力画像データの第1のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD11のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第1のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS76)。
再び図15を参照すると、デバイスドライバは、出力側ディスクリプタ情報OD11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであるか否かを判定する(ステップS101)。
デバイスドライバは、出力側ディスクリプタ情報OD11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであると判定した場合(ステップS101:Yes)、2つ目の画像処理を実施する画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動する(ステップS102)。
また、デバイスドライバは、出力側ディスクリプタ情報OD11のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じではないと判定した場合(ステップS101:No)、処理を終了する。
ここでは、出力側ディスクリプタ情報OD11のテンポラリ領域の値が「出力側1番目」であり、アプリケーションが指定した値(ここでは、「出力側2番目」)と同じではないので(ステップS101:No)、デバイスドライバは、2つ目の画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動せずに、処理を終了する。
再び図13を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID12(図11参照)を参照して、入力画像データの第2のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第2のブロックには、画像処理機能ブロック162内の回転処理部162a(図11参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID12のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第2のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS77)。
再び図15を参照すると、デバイスドライバは、入力側ディスクリプタ情報OD12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであるか否かを判定する(ステップS101)。
デバイスドライバは、入力側ディスクリプタ情報ID12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであると判定した場合(ステップS101:Yes)、2つ目の画像処理を実施する画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動する(ステップS102)。
また、デバイスドライバは、入力側ディスクリプタ情報ID12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じではないと判定した場合(ステップS101:No)、処理を終了する。
ここでは、入力側ディスクリプタ情報ID12のテンポラリ領域の値が「入力側2番目」であり、アプリケーションが指定した値(ここでは、「出力側2番目」)と同じではないので(ステップS101:No)、デバイスドライバは、2つ目の画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動せずに、処理を終了する。
再び図13を参照すると、出力側DMAC163は、出力側ディスクリプタ情報OD12(図11参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図5参照)によって画像処理が実施された後の出力画像データの第2のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD12のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、出力側DMAC163は、出力画像データの第2のブロックのDMA書き込みが完了すると、割り込み信号をデバイスドライバに出力する(ステップS78)。
再び図15を参照すると、デバイスドライバは、出力側ディスクリプタ情報OD12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであるか否かを判定する(ステップS101)。
デバイスドライバは、出力側ディスクリプタ情報OD12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じであると判定した場合(ステップS101:Yes)、2つ目の画像処理を実施する画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動する(ステップS102)。
また、デバイスドライバは、出力側ディスクリプタ情報OD12のテンポラリ領域の値とアプリケーションが指定した値(ここでは、「出力側2番目」)とが同じではないと判定した場合(ステップS101:No)、処理を終了する。
ここでは、出力側ディスクリプタ情報OD12のテンポラリ領域の値が「出力側2番目」であり、アプリケーションが指定した値(ここでは、「出力側2番目」)と同じであるので(ステップS101:Yes)、デバイスドライバは、2つ目の画像処理部(ここでは、画像処理機能ブロック162内の圧縮処理部162b(図12参照))を起動する(ステップS102(図13のステップS81に対応))。
再び図13を参照すると、入力側DMAC161は、入力側ディスクリプタ情報ID13(図11参照)を参照して、入力画像データの第3のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第3のブロックには、画像処理機能ブロック162内の回転処理部162a(図11参照)によって画像処理が実施される。ここで、入力側ディスクリプタ情報ID13のフォーマット情報の最下位ビット(ビット0)は「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第3のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しないが、入力画像データのDMA読み出しが完了したことを画像処理機能ブロック162内の回転処理部162aには通知する(ステップS79)。
また、出力側DMAC163は、出力側ディスクリプタ情報OD13(図11参照)を参照して、画像処理機能ブロック162内の回転処理部162a(図11参照)によって画像処理が実施された後の出力画像データの第3のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD13のフォーマット情報の最下位ビット(ビット0)は「0」(CPU割り込みなし)であるので、出力側DMAC163は、出力画像データの第3のブロックのDMA書き込みが完了しても、割り込み信号をデバイスドライバに出力しないが、出力画像データのDMA書き込みが完了したことを画像処理機能ブロック162内の回転処理部162aには通知する(ステップS80)。
そして、ASIC16の画像処理機能ブロック162内の回転処理部162aは、画像処理が完了したことを表す割り込み信号をデバイスドライバに出力し(ステップS82)、デバイスドライバは、画像処理が完了したことをアプリケーションに通知する(ステップS85)。
一方、デバイスドライバによって起動された2つ目の画像処理部であるASIC16の画像処理機能ブロック162内の圧縮処理部162b(図12参照)は、入力側DMAC161を起動する(ステップS83)。また、ASIC16の画像処理機能ブロック162内の圧縮処理部162b(図12参照)は、出力側DMAC163を起動する(ステップS84)。
入力側DMAC161は、入力側ディスクリプタ情報ID21(図12参照)を参照して、入力画像データ(ここでは、ASIC16の画像処理機能ブロック162内の回転処理部162aによって回転処理が実施された後の画像データ)の第1のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第1のブロックには、画像処理機能ブロック162内の圧縮処理部162b(図12参照)によって画像処理(ここでは、圧縮処理)が実施される。ここで、入力側ディスクリプタ情報ID21のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第1のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しない。
入力側DMAC161は、入力側ディスクリプタ情報ID22(図12参照)を参照して、入力画像データ(ASIC16の画像処理機能ブロック162内の回転処理部162aによって回転処理が実施された後の画像データ)の第2のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第2のブロックには、画像処理機能ブロック162内の圧縮処理部162b(図12参照)によって画像処理(ここでは、圧縮処理)が実施される。ここで、入力側ディスクリプタ情報ID22のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第2のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しない。
入力側DMAC161は、入力側ディスクリプタ情報ID23(図12参照)を参照して、入力画像データ(ASIC16の画像処理機能ブロック162内の回転処理部162aによって回転処理が実施された後の画像データ)の第3のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第3のブロックには、画像処理機能ブロック162内の圧縮処理部162b(図12参照)によって画像処理(ここでは、圧縮処理)が実施される。ここで、入力側ディスクリプタ情報ID23のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)であるので、入力側DMAC161は、入力画像データの第3のブロックのDMA読み出しが完了しても、割り込み信号をデバイスドライバに出力しないが、入力画像データ(画像処理対象画像データ)の転送が完了したことを画像処理機能ブロック162内の圧縮処理部162bには通知する(ステップS85)。
出力側DMAC163は、出力側ディスクリプタ情報OD21(図12参照)を参照して、出力画像データ(ASIC16の画像処理機能ブロック162内の圧縮処理部162bによって圧縮処理が実施された後の画像データ)の第1のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD21のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)であるので、出力側DMAC163は、出力画像データの第1のブロックのDMA書き込みが完了しても、割り込み信号をデバイスドライバに出力しない。
出力側DMAC163は、出力側ディスクリプタ情報OD22(図12参照)を参照して、出力画像データ(ASIC16の画像処理機能ブロック162内の圧縮処理部162bによって圧縮処理が実施された後の画像データ)の第2のブロックのDMA書き込みを行う。ここで、出力側ディスクリプタ情報OD22のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)であるので、出力側DMAC163は、出力画像データの第2のブロックのDMA書き込みが完了しても、割り込み信号をデバイスドライバに出力しないが、出力画像データ(画像処理結果画像データ)の転送が完了したことを画像処理機能ブロック162内の圧縮処理部162bには通知する(ステップS86)。
そして、ASIC16の画像処理機能ブロック162内の圧縮処理部162bは、画像処理が完了したことを表す割り込み信号をデバイスドライバに出力し(ステップS87)、デバイスドライバは、画像処理が完了したことをアプリケーションに通知する(ステップS88)。
以上説明したように、アプリケーションが、2つの画像処理を継続、連続して実施するための入力側ディスクリプタ情報ID11〜ID13、ID21〜ID23、および出力側ディスクリプタ情報OD11〜OD13、OD21〜OD22のテンポラリ領域にそれぞれ値を設定し、2つ目の画像処理部の起動タイミング要求(図13のステップS70、および図14参照)をデバイスドライバに行うことで、2つの画像処理(ここでは、回転処理と圧縮処理)を継続、連続して行うことを実現することができる。また、2つ目の画像処理部の起動の際に、デバイスドライバとアプリケーションとの間のやり取りが不要であるので、デバイスドライバとアプリケーションとの間のやり取り(オーバーヘッド)を削減することができる。なお、ここでは、2つの画像処理(ここでは、回転処理と圧縮処理)を継続、連続して行う場合について説明したが、3つ以上の画像処理を継続、連続して行うようにしても良い。
次に、本発明の実施の形態の第3の動作について説明する。先に説明したように、複合機では、FAXアプリケーションプログラム、コピーアプリケーションプログラム、スキャナアプリケーションプログラム等の複数のアプリケーションがCPU11(図1参照)によって実行されており、ASIC16(図1参照)は、これら複数のアプリケーションから利用される。そのため、何らかの要因でASIC16の動作がストール(停止)した場合に、ASIC16がどのアプリケーションから利用されているときにストールしたのかを知ることが容易ではないことがある。本実施の形態では、テンポラリ領域を利用することで、ASIC16の動作がストール(停止)した場合に、ASIC16がどのアプリケーションから利用されているときにストールしたのかを容易に知ることが可能となる。
図16は、複合機のコピー(COPY)アプリケーションが、入力画像データを時計回りに90度回転させる回転処理をASIC16に行わせる場合における、複数の入力側ディスクリプタ情報、入力画像データ、および複数の出力側ディスクリプタ情報の例を示す図である。入力画像データは複数(ここでは、3つ)のブロックに分割されており、各ブロックが格納されている領域の先頭アドレスは、複数(ここでは、3つ)の入力側ディスクリプタ情報ID31〜ID33内に、データ転送先アドレスとして格納されている。同様に、出力画像データも複数(ここでは、3つ)のブロックに分割される。出力画像データの複数(ここでは、3つ)のブロックが格納される領域の先頭アドレスは、複数(ここでは、3つ)の出力側ディスクリプタ情報OD31〜OD33内に、データ転送先アドレスとして格納されている。なお、図16においては、便宜のため、テンポラリ領域(フォーマット情報の上位16ビット(ビット31〜ビット16)、図3参照)を、ディスクリプタ情報の下2段に独立させて示している。
本実施の形態においては、各入力側および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている最下位ビット(ビット0)を、ASIC16からCPU11への割り込み信号のマスクとして利用する。図16に示す例では、入力側ディスクリプタ情報ID31のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)に設定されており、入力側ディスクリプタ情報ID32、ID33のフォーマット情報の最下位ビットは、「0」(CPU割り込みなし)に設定されている。
また、本実施の形態においては、各入力側、および出力側ディスクリプタ情報のフォーマット情報のうち、使われずに空いている上位16ビット(ビット31〜16)をテンポラリ領域として利用する。図16に示す例では、入力側ディスクリプタ情報ID31のテンポラリ領域(ビット31〜16)のうちの1ビットは、「結果通知あり」(ここでは、「1」)に設定されており、他のビットは、「COPY」というASCIIコード列(またはコピーという機能を表す情報)に設定されている。なお、「COPY」というASCIIコード列は4バイト(32ビット)であるので、この場合には、テンポラリ領域を16ビットから32ビットに拡張すれば良い。また、入力側ディスクリプタ情報ID32のテンポラリ領域(ビット31〜16)のうちの1ビット(以下、「第1の領域」ともいう。)は、「結果通知なし」(ここでは、「0」)に設定されており、他のビット(以下、「第2の領域」ともいう。)は、「COPY」というASCIIコード列に設定されている。また、入力側ディスクリプタ情報ID33のテンポラリ領域(ビット31〜16)のうちの1ビット(第1の領域)は、「結果通知なし」(ここでは、「0」)に設定されており、他のビット(第2の領域)は、「COPY」というASCIIコード列に設定されている。
また、出力側ディスクリプタ情報OD31、OD33のフォーマット情報の最下位ビット(ビット0)は、「0」(CPU割り込みなし)に設定されており、出力側ディスクリプタ情報OD32のフォーマット情報の最下位ビットは、「1」(CPU割り込みあり)に設定されている。
また、出力側ディスクリプタ情報OD31のテンポラリ領域(ビット31〜16)のうちの1ビット(第1の領域)は、「結果通知なし」(ここでは、「0」)に設定されており、他のビット(第2の領域)は、「COPY」というASCIIコード列に設定されている。また、出力側ディスクリプタ情報OD32のテンポラリ領域(ビット31〜16)のうちの1ビット(第1の領域)は、「結果通知あり」(ここでは、「1」)に設定されており、他のビット(第2の領域)は、「COPY」というASCIIコード列に設定されている。また、出力側ディスクリプタ情報OD33のテンポラリ領域(ビット31〜16)のうちの1ビット(第1の領域)は、「結果通知なし」(ここでは、「0」)に設定されており、他のビット(第2の領域)は、「COPY」というASCIIコード列に設定されている。
図17は、コピー(COPY)アプリケーションが図16に示す入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報をRAM12a内に用意して画像処理(ここでは、90度回転処理)の実施を要求する場合における、コピー(COPY)アプリケーション、デバイスドライバ、入力側DMAC161、ASIC16の画像処理機能ブロック162内の画像処理部(ここでは、回転処理部162a(図5参照))、および出力側DMAC163のシーケンス図である。
コピー(COPY)アプリケーションは、入力側ディスクリプタ情報、入力画像データ、および出力側ディスクリプタ情報(図16参照)をRAM12a内に用意した後、結果通知を所望するディスクリプタ情報が何番目であるかを表す1つまたは複数の値(1つまたは複数のカウント値)をデバイスドライバに渡して、結果通知要求を行う(ステップS110)。なお、このときのデバイスドライバの処理は、先に説明した図9の処理と同様であるので、説明を省略する。
次に、コピー(COPY)アプリケーションは、アプリケーション機能の設定を行う(ステップS111)。図18は、アプリケーション機能の設定を行う場合におけるコピー(COPY)アプリケーションの処理を示すフローチャートである。コピー(COPY)アプリケーションは、全ディスクリプタ情報のテンポラリ領域(ビット31〜16)の第2の領域にアプリケーションの機能を表すASCIIコード列(ここでは、「COPY」というASCIIコード列)を設定したか否かを判定する(ステップS121)。
コピー(COPY)アプリケーションは、全ディスクリプタ情報のテンポラリ領域の第2の領域にアプリケーションの機能を表すASCIIコード列(ここでは、「COPY」というASCIIコード列)を設定していないと判定した場合(ステップS121:No)、全ディスクリプタ情報のテンポラリ領域の第2の領域にアプリケーションの機能を表すASCIIコード列(ここでは、「COPY」というASCIIコード列)を設定する(ステップS122)。
また、コピー(COPY)アプリケーションは、全ディスクリプタ情報のテンポラリ領域の第2の領域にアプリケーションの機能を表すASCIIコード列(ここでは、「COPY」というASCIIコード列)を設定していると判定した場合(ステップS121:Yes)、処理を終了する。
再び図17を参照すると、コピー(COPY)アプリケーションは、デバイスドライバに画像処理要求を行う(ステップS112)。デバイスドライバは、画像処理要求をアプリケーションから受けると、アプリケーションから要求された画像処理(ここでは、90度回転処理)を行うように、ASIC16の画像処理機能ブロック162内の画像処理部(ここでは、回転処理部162a)を起動する(ステップS113)。ASIC16の画像処理機能ブロック162内の回転処理部162aは、デバイスドライバから起動されると、入力側DMAC161を起動する(ステップS114)。また、ASIC16の画像処理機能ブロック162内の回転処理部162aは、出力側DMAC163を起動する(ステップS115)。
入力側DMAC161は、入力側ディスクリプタ情報ID31(図16参照)を参照して、入力画像データの第1のブロックのDMA読み出しを行う。このようにして入力側DMAC161によってDMA読み出しされた入力画像データの第1のブロックには、画像処理機能ブロック162内の回転処理部162a(図16参照)によって画像処理(ここでは、90度回転処理)が実施される。ここで、入力側ディスクリプタ情報ID31のフォーマット情報の最下位ビット(ビット0)は、「1」(CPU割り込みあり)であるので、入力側DMAC161は、入力画像データの第1のブロックのDMA読み出しが完了すると、割り込み信号をデバイスドライバに出力する(ステップS116)。
ASIC16から割り込み信号が入力された場合におけるデバイスドライバの処理(割り込みハンドラ)は、先に説明した図7と同様である。図7を参照すると、デバイスドライバは、ASIC16から割り込み信号が入力されると、入力側ディスクリプタ情報ID31のテンポラリ領域の第1の領域が「1」(「結果通知あり」)であるか否かを判定する(ステップS21)。
デバイスドライバは、入力側ディスクリプタ情報ID1のテンポラリ領域の第1の領域が「1」(「結果通知あり」)であると判定した場合(ステップS21:Yes)、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知する(ステップS22)。
また、デバイスドライバは、入力側ディスクリプタ情報ID1のテンポラリ領域の第1の領域が「1」(「結果通知あり」)ではないと判定した場合(ステップS21:No)、アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知することなく処理を終了する。
ここでは、入力側ディスクリプタ情報ID1のテンポラリ領域の第1の領域が「1」(「結果通知あり」)であるので(ステップS21:Yes)、デバイスドライバは、コピー(COPY)アプリケーションに結果(ここでは、第1のブロックのDMA読み出しが完了したこと)を通知する(ステップS22(図17のステップS117に対応))。デバイスドライバから通知を受けたアプリケーションは、種々の処理(例えば、今実施されている90度回転処理の次に実施する画像処理の準備のための処理等)を行うことができる。
その後、ASIC16に何らかの問題が発生し、ASIC16がストールした場合、コピー(COPY)アプリケーションや、複合機の診断プログラム等は、入力側ディスクリプタ情報ID31に基づくDMA読み出しが完了した後にASIC16がストールしたと判定することが可能である。また、複合機の診断プログラム等は、ASIC16がコピー(COPY)アプリケーションから利用されているときにストールしたと判定することが可能である。
本実施の形態の複合機で実行されるアプリケーションプログラム、デバイスドライバ、診断プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
さらに、本実施の形態の複合機で実行されるアプリケーションプログラム、デバイスドライバ、診断プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施の形態の複合機で実行されるアプリケーションプログラム、デバイスドライバ、診断プログラムを、インターネット等のネットワーク経由で提供または配布するように構成しても良い。
なお、本実施の形態では、本発明を複合機に適用した例を挙げて説明したが、他の種々の装置に適用することができる。