以下、添付図面を参照して、本発明を実施するための形態を説明する。なお、本発明は以下の実施形態に限定されるものではなく、その要旨を逸脱しない範囲において適宜変更可能である。また、以下で説明する図面において、同じ機能を有するものは同一の符号を付し、その説明を省略又は簡潔にすることもある。
[一実施形態]
一実施形態による画像処理装置及び画像処理方法について図面を用いて説明する。図1は、本実施形態による画像処理装置100を示すブロック図である。本実施形態では、画像処理装置100が撮像素子を備える撮像装置である場合、より具体的には、画像処理装置100がデジタルカメラである場合を例に説明するが、これに限定されるものではない。
図1に示すように、撮像素子102の前段には、結像光学系(結像光学部)101が配されている。結像光学系101は、レンズや絞り等を備えている。撮影の際、結像光学系101は、フォーカス調節や露出調節等を行い、撮像素子102に光学像を結像する。撮像素子(撮像部、撮像手段)102は、結像光学系101によって結像された光学像を電気信号(アナログ画像信号)に変換する光電変換機能を有している。即ち、撮像素子102の受光面(図示せず)には、光電変換部(光電変換素子)がマトリクス状に配されている。撮像素子102としては、例えば、CCDイメージセンサやCMOSイメージセンサ等が用いられる。撮像素子102は、例えば、1フレームが水平1920画素×垂直1080画素、60フレーム毎秒(fps)の動画データを出力する。A/D変換部103は、撮像素子102からのアナログ画像信号をデジタル画像信号に変換する。
CPU(Central Processing Unit)108は、画像処理装置100全体の制御を司るものであり、各機能ブロック(各処理部)に対しての動作の指示を行い、各種の制御や処理を実行する。メモリ112には、静止画像、動画像、音声等のデータが格納される。また、CPU(制御部、処理部)108を動作させる際に用いられる定数や、画像処理装置100によって実行されるプログラム等をメモリ112に格納することも可能である。メモリ112は、これらを格納するのに十分な記憶容量を備えている。また、メモリ112は、処理中の画像データ等を一時的に記憶する際にも用いられる。メモリ112としては、例えばDRAM(Dynamic Random Access Memory)が用いられる。
メモリ制御部120は、CPU108からの指示に応じて、メモリ112へのデータの書き込みやメモリ112からのデータの読み出しを行う。不揮発性メモリ制御部106は、CPU108からの指示に応じて、不揮発性メモリ105へのデータの書き込みや不揮発性メモリ105からのデータの読み出しを行う。不揮発性メモリ105は、電気的に消去や記録が可能であり、例えば、EEPROM(Electrically Erasable Programmable Read Only Memory)等が用いられる。不揮発性メモリ105には、CPU108を動作させる際に用いられる定数や、プログラム等が記憶される。CPU108は、補正処理部104、拡大縮小処理部109、メモリ制御部120、不揮発性メモリ制御部106、表示制御部110、操作部107、及び、撮像素子102に対する制御を行う。不揮発性メモリ105等に記録されたプログラムをCPU108が実行することによって、画像処理装置100によって行われる様々な処理が実現される。
補正処理部104は、A/D変換部103から出力される画像データに対して、画素補正、黒レベル補正、シェーディング補正、傷補正、倍率色収差補正等を行う。メモリ制御部120は、補正処理部104によって補正処理が施された画像データを、メモリ112に書き込む。また、メモリ制御部120は、メモリ112に書き込んだ画像データをメモリ112から読み出し、読み出した画像データを例えば拡大縮小処理部109に転送する。拡大縮小処理部109は、画像データに対して、拡大縮小等のリサイズ処理、圧縮伸長処理、フォーマット変換処理、現像処理、歪み補正等を行う。メモリ制御部120は、拡大縮小処理部109によって処理された画像データをメモリ112に書き込む。また、メモリ112に書き込まれた画像データは、メモリ制御部120によって読み出され、各機能ブロックに適宜転送される。
補正処理部104や拡大縮小処理部109は、上記のような処理を行うため、画像データを記憶するためのメモリ(図示せず)を有している。かかるメモリの容量を小さくするため、補正処理部104や拡大縮小処理部109は、1フレームの画像データを水平方向にも垂直方向にも分割することにより画定される分割ブロック300a〜300i(図3参照)を単位として上記のような処理を行う。このため、本実施形態では、分割ブロック300a〜300iを単位としてメモリ112への画像データの書き込みや読み出しが行われる。なお、分割ブロック300a〜300iについては、後に詳述することとする。更に、本実施形態では、処理における遅延を小さくするため、画像データの書き込みが完了した部分の画像データを順次読み出していく追いかけ制御を行う。ところで、分割ブロック300a〜300iを単位として追いかけ制御を行う場合には、読み出し対象となる分割ブロック300a〜300iへの画像データの書き込みが完全に完了しなければ、当該分割ブロック300a〜300iへの読み出し処理は行えない。そこで、本実施形態では、処理における遅延をより小さくすべく、当該分割ブロック300a〜300iにそれぞれ複数含まれているより小さい単位であるライン(ブロック)320(図3参照)を単位として追いかけ制御を行うこととしている。従って、本実施形態では、分割ブロックに含まれるライン(ブロック)320のうちの書き込み処理が完了したライン(ブロック)320から順に画像データが順次読み出される。このような追いかけ制御は、メモリ制御部120等によって実行される。なお、分割ブロック300a〜300iに含まれる各々のライン(ブロック)320は、分割ブロック300a〜300iの水平方向のサイズと同じサイズに分割されているため、分割ラインと称することもできる。
表示部111は、表示制御部110によって制御され、各種画像データ等を表示する。表示部111としては、例えば液晶モニタ等が用いられる。操作部107は、ユーザによって操作されるスイッチやボタン等を含み、電源のON/OFFの操作や、シャッタのON/OFFの操作等に用いられる。
図2は、メモリ制御部120を示すブロック図である。メモリ制御部120は、DMAC(Direct Memory Access Controller)210と、追いかけ制御部200とを有している。DMAC210は、書き込み用のダイレクトメモリアクセスコントローラであるWRDMAC(Write Direct Memory Controller)211を有している。また、DMAC210は、読み出し用のダイレクトメモリアクセスコントローラであるRDDMAC(Read Direct Memory Controller)213を有している。メモリI/F(Memory Interface)205は、WRDMAC211やRDDMAC213からの制御信号に従って、メモリ112を制御する。追いかけ制御部200は、WRDMAC211やRDDMAC213からのオフセット信号に基づいて、後述する書き込み座標や読み出し座標の計算を行う。そして、書き込み座標と読み出し座標との比較結果に基づいて、RDDMAC213からの読み出しリクエスト信号RD_REQを適宜マスクする。WRDMAC211によって画像データの書き込みが完了した部分の画像データをRDDMAC213が順次読み出していく追いかけ制御が行われる。このような追いかけ制御が、追いかけ制御部200によって司られる。
WRDMAC211は、メモリ112にデータを書き込む際のメモリアドレス(アクセスアドレス)、即ち、書き込みアドレス(書き込みアドレス値)WADRSを生成する書き込みアドレス生成部212を備えている。書き込みアドレス生成部212は、データ転送長等の管理や制御を行い得る。RDDMAC213は、メモリ112からデータを読み出す際のメモリアドレス、即ち、読み出しアドレス(読み出しアドレス値)RADRSを生成する読み出しアドレス生成部214を備えている。読み出しアドレス生成部214は、データ転送長等の管理や制御を行い得る。WRDMAC211は、書き込みアドレスをインクリメントする機能を備えている。従って、WRDMAC211は、メモリ112上の所定のアドレス空間(アドレス領域)に画像データを順番に格納していくことが可能である。また、RDDMAC213は、読み出しアドレスをインクリメントする機能を備えている。従って、RDDMAC213は、メモリ112上の所定のアドレス空間に格納された画像データを順番に読み出していくことが可能である。また、WRDMAC211やRDDMAC213は、アクセスアドレスを適宜ジャンプさせることができ(オフセットジャンプ機能)、分割ブロック300a〜300iの画像データのメモリ112への書き込み処理や読み出し処理を順次行うことができる。
このように、WRDMAC211は、画像(画像データ)をメモリ122に書き込む書き込み手段として機能し得る。また、RDDMAC213は、WRDMAC211によってメモリ122に書き込まれた画像(画像データ)をメモリ122から読み出す読み出し手段として機能し得る。
図7は、書き込みアドレス生成部212及び読み出しアドレス生成部214の構成を示すブロック図である。書き込みアドレス生成部212の構成と読み出しアドレス生成部214の構成とは同様であるため、ここでは、同一の図面、即ち、図7を用いて書き込みアドレス生成部212と読み出しアドレス生成部214とについて説明することとする。
WRDMAC211とRDDMAC213は、ある量の画像データが転送される毎にアクセスアドレスをジャンプさせるオフセットジャンプ機能を有している。例えば、1つのライン320(図3参照)の画像データの転送が完了する毎に、アクセスアドレスをジャンプさせる。また、1つの分割ブロック300a〜300i(図3参照)の画像データの転送が完了する毎に、アクセスアドレスをジャンプさせる。また、1つのブロックライン321a〜321c(図3参照)の画像データの転送が完了する毎に、アクセスアドレスをジャンプさせる。このようなオフセットジャンプ機能を実現させるべく、CPU108は、以下のような設定をWRDMAC211やRDDMAC213に対して行う。即ち、CPU108は、WRDMAC211やRDDMAC213に備えられたアドレスカウンタにスタートアドレス値を入力することによって、スタートアドレスの設定を行う。また、CPU108は、WRDMAC211やRDDMAC213に備えられた算出部701に対して、水平・垂直分割数、即ち、水平方向における画像の分割数と、垂直方向における画像の分割数とを入力する。なお、ここでは、水平・垂直分割数を入力する場合を例に説明したが、入力する情報はこれに限定されるものではない。水平方向における分割の態様と、垂直方向における分割の態様とを示す情報を適宜入力すればよい。これにより、分割が均等に行われていない場合や、各々の分割ブロックがオーバーラップしている場合等に対しても対応可能となる。また、CPU108は、算出部701に対して、水平画像サイズ、即ち、水平方向における画像の画素数と、垂直ライン数、即ち、垂直方向における画像の画素数とを入力する。また、CPU108は、算出部701に対して、バースト長、即ち、1回のリクエスト信号におけるアドレス指定によって連続してアクセス可能なデータ長を入力する。また、CPU108は、WRDMAC211やRDDMAC213に備えられたアドレス加算値算出部702に対して、オフセット値(オフセットジャンプ値)を入力する。オフセット値は、オフセットジャンプの際に適用されるオフセット量を示すものである。かかるオフセット値は複数種存在しており、オフセットジャンプが行われる箇所に応じて、適切なオフセット値が選択される。かかるオフセット値は、例えばCPU108によって設定される。
算出部701は、水平画像サイズ、水平分割数、バースト長等に基づいてデータ転送長を算出し、算出したデータ転送長をアドレス加算値算出部702に出力する。データ転送長は、メモリ112に対する1回のアクセスにおいて転送されるデータの長さ、即ち、メモリ112に対する1回のアクセスにおいて転送されるデータ量である。算出部701は、メモリ112に対するアクセスにおいて転送されたデータ量に基づいてオフセット信号を生成し、生成したオフセット信号をアドレス加算値算出部702に出力する。具体的には、ライン320の最後尾(末尾)に位置する画素301〜309に書き込み処理が達した際には、第1の書き込みオフセット信号WR_OFFSET1がそれぞれ生成される。ライン320の最後尾に位置する画素301〜309に読み出し処理が達した際には、第1の読み出しオフセット信号RD_OFFSET1がそれぞれ生成される。分割ブロック300a、300b、300d、300e、300g、300hの最後尾に位置する画素311,312,314,315,317,318に書き込み処理が達した際には、第2の書き込みオフセット信号WR_OFFSET2がそれぞれ生成される。分割ブロック300a、300b、300d、300e、300g、300hの最後尾に位置する画素311,312,314,315,317,318に読み出し処理が達した際には、第2の読み出しオフセット信号RD_OFFSET2がそれぞれ生成される。ブロックライン321a、321bの最後尾に位置する画素313,316に書き込み処理が達した際には、第3の書き込みオフセット信号WR_OFFSET3がそれぞれ生成される。ブロックライン321a、321bの最後尾に位置する画素313,316に読み出し処理が達した際には、第3の読み出しオフセット信号RD_OFFSET3がそれぞれ生成される。
アドレス加算値算出部702は、算出部701から出力されるデータ転送長に基づいてアドレス加算値を算出し、算出したアドレス加算値をアドレス算出部703に出力する。アドレス加算値算出部702は、オフセット信号を算出部701から受信した際には、適切なオフセット値を、算出部701から受信したデータ転送長に加算する。アドレス加算値算出部702は、いずれの分割ブロックに対して書き込み処理や読み出し処理が行われているかをオフセット信号に基づいて把握することができるため、適切なオフセット値を選択することができる。そして、アドレス加算値算出部702は、加算によって得られた値をアドレス加算値としてアドレス算出部703に出力する。
アドレス算出部703は、メモリ112へのアクセスを開始する際においては、CPU108によって設定されたスタートアドレスに基づいたアドレス値を出力する。アドレス算出部703は、メモリ112へのアクセスが開始された以降においては、アドレス加算値算出部702から出力されるアドレス加算値を現在のアドレス値に加算し、算出したアドレス値を出力する。オフセット信号が算出部701から発せられた際には、当該オフセット信号に対応するオフセット値の分だけアドレス加算値算出部702から出力されるアドレス加算値がオフセットされる。従って、オフセット信号が算出部701から発せられた際には、当該オフセット信号に対応するオフセット値に応じたオフセットジャンプが行われることとなる。
図3は、書き込みアクセスや読み出しアクセスの順序を概念的に示す図である。図3は、メモリ112における仮想的なアドレス空間を画像に対応するように概念的に示したものである。図3に示すように、1フレームの画像データを水平方向及び垂直方向にそれぞれ3分割することによって矩形の分割ブロック300a〜300iが画定されている。これらの分割ブロック300a〜300iに対して2次元的に連続してアクセスが行われる。なお、本明細書においては、個々の分割ブロックについて説明する際には、符号300a〜300iを用い、分割ブロック一般について説明する際には、符号300を用いることとする。
各々の分割ブロック300には、複数のライン320が含まれている。また、複数の分割ブロック300a〜300cによってブロックライン321aが構成されており、複数の分割ブロック300d〜300fによってブロックライン321bが構成されている。また、複数の分割ブロック300g〜300iによってブロックライン321cが構成されている。ここでは、個々のブロックラインについて説明する際には、符号321a〜321cを用い、ブロックライン一般について説明する際には、符号321を用いることとする。
分割ブロック300a、300d、300gの水平方向における画素数(サイズ)をXA、分割ブロック300b、300e、300hの水平方向における画素数をXB、分割ブロック300c、300f、300iの水平方向における画素数をXCとする。分割ブロック300a〜300cの垂直方向におけるライン数(画素数)をYA、分割ブロック300d〜300fの垂直方向におけるライン数をYB、分割ブロック300g〜300iの垂直方向におけるライン数をYCとする。なお、ここでは、説明を簡略化するため、YA=4、YB=4、YC=6とするが、実際には垂直方向におけるライン数はこれらの値よりも遙かに大きい。また、1つの画像の水平方向における画素数を、XH(=XA+XB+XC)とする。画素数XA〜XC、ライン数YA〜YC、オフセット値等は、上述したように、DMAC210に備えられた算出部701やアドレス加算値算出部702に対してCPU108から予め入力される。そして、算出部710やアドレス加算値算出部702に備えられているレジスタ(不図示)にこれらの値が予め格納される。図3における矢印は、座標のジャンプ、即ち、アドレスジャンプを概念的に示している。なお、1フレームの画像の左上端の画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の先頭のアドレスとなる。そして、当該画像の第1番目のラインから最終ラインまでが連続したアドレスに順次書き込まれる。当該画像の第n番目のラインの最後尾に位置する画素のデータが書き込まれるアドレスの次のアドレスには、当該画像の第n+1番目のラインの先頭に位置する画素のデータが書き込まれる。当該画像の右下端に位置する画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の最後尾のアドレスとなる。
上述したように、本実施形態では、分割ブロック300を単位として書き込み処理や読み出し処理が行われる。例えば、まず、図3の左上に位置する分割ブロック300aの画像データがメモリ112に書き込まれる。分割ブロック300aの画像データの書き込みが完了した後には、分割ブロック300aの右側に位置する分割ブロック300bの画像データの書き込みが行われる。分割ブロック300bの画像データの書き込みが完了した後には、分割ブロック300bの右側に位置する分割ブロック300cの画像データの書き込みが行われる。このように、第1番目のブロックライン321aに位置する分割ブロック300a〜300cの画像データのメモリ112への書き込みが左側から右側へ順次行われる。第1番目のブロックライン321aに位置する分割ブロック300a〜300cの画像データの書き込みが完了した後には、第2番目のブロックライン321bに位置する分割ブロック300d〜300fの画像データの書き込みが順次行われる。第2番目のブロックライン321bに位置する分割ブロック300d〜300fの画像データの書き込みが完了した後には、第3番目のブロックライン321cに位置する分割ブロック300g〜300iの画像データの書き込みが順次行われる。こうして、全ての分割ブロック300a〜300iの画像データのメモリ112への書き込みが順次行われる。なお、ここでは、書き込みアクセスを例として説明するが、読み込みアクセスも同様にして行われる。
書き込みアクセスにおける順序をより具体的に以下に説明する。まず、分割ブロック300aの画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みアドレス生成部212によって発行されるアドレス値に従って、分割ブロック300aの第1番目のライン320の画像データのメモリ112への書き込みが行われる。分割ブロック300aの第1番目のライン320の先頭の座標は(1,1)であり、分割ブロック300aの第1番目のライン320の最後尾の座標(H1,V1)は(XA,1)である。
分割ブロック300aの第1番目のライン320の画像データの書き込みが完了した後には、分割ブロック300aの第2番目のライン320の画像データの書き込みが行われる。分割ブロック300aの第2番目のライン320の先頭の座標は(1,2)である。座標(1,2)に対応するメモリアドレスは、座標(XA,1)に対応するメモリアドレスの次のメモリアドレスではない。従って、第1番目のライン320の画像データの書き込みから第2番目のライン320の画像データの書き込みに移行する際には、アクセスアドレスのジャンプが行われる。具体的には、分割ブロック300aの第1番目のライン320の最後尾の座標(XA,1)に書き込み処理が達した際には、オフセット値のアドレス値への加算が書き込みアドレス生成部212のアドレス加算値算出部702によって行われる。即ち、データ転送長に応じた値を現在のアドレス値に加算するのみならず、オフセット値をも現在のアドレス値に加算することによって、アクセスアドレスのジャンプが行われる。ここで加算されるオフセット値は、(XH−XA)である。
この後、分割ブロック300a内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300a内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の座標(H1,V1)の画素301に書き込み処理が達する毎に、オフセット値のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300a内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300aの画像データがメモリ112に書き込まれる。
分割ブロック300aの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300aの右側に位置する分割ブロック300bの画像データの書き込みが行われる。分割ブロック300aの最後尾のライン320である第YA番目のライン320の最後尾の画素311の座標(H2,V2)、即ち、分割ブロック300aの最後尾の画素311の座標(H2,V2)は、(XA,YA)である。一方、分割ブロック300bの第1番目のライン320の先頭の座標、即ち、分割ブロック300bの先頭の座標は、(XA+1,1)である。座標(XA+1,1)に対応するメモリアドレスは、座標(XA,YA)に対応するメモリアドレスの次のメモリアドレスではない。従って、第1番目の分割ブロック300aの画像データの書き込みから第2番目の分割ブロック300bの画像データの書き込みに移行する際には、アクセスアドレスのジャンプが行われる。具体的には、第1番目の分割ブロック300aの最後尾の座標(XA,YA)に書き込み処理が達した際には、オフセット値のアドレス値への加算が行われる。即ち、データ転送長に応じた値をアドレス値に加算するのみならず、オフセット値をもアドレス値に加算することによって、アクセスアドレスのジャンプが行われる。ここで加算されるオフセット値は、(−XH×(YA−1))である。オフセット値が負の値であるため、座標(XA,YA)に対応するメモリアドレスから座標(XA+1,1)に対応するメモリアドレスに戻る。こうして、アクセスアドレスがジャンプし、分割ブロック300bの第1番目のライン320の画像データの書き込みが行われる。分割ブロック300bの第1番目のライン320の先頭の座標は(XA+1,1)であり、分割ブロック300bの第1番目のライン320の最後尾の座標は(XA+XB,1)である。分割ブロック300bの第1番目のライン320の画像データの書き込みが完了した後には、分割ブロック300bの第2番目のライン320の画像データの書き込みが行われる。分割ブロック300bの第2番目のライン320の先頭の座標は、(XA+1,2)である。従って、第1番目のライン320の画像データの書き込みから第2番目のライン320の画像データの書き込みに移行する際には、アクセスアドレスのジャンプが行われる。即ち、分割ブロック300bの第1番目のライン320の最後尾の座標(XA+XB,1)に書き込み処理が達した際には、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(XH−XB)である。この後、分割ブロック300b内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300b内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の座標(H1,V1)の画素302に書き込み処理が達する毎に、オフセット値のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300b内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300bの画像データがメモリ112に書き込まれる。
分割ブロック300bの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300bの右側に位置する分割ブロック300cの画像データの書き込みが行われる。分割ブロック300bの最後尾の座標は、(XA+XB,YA)である。一方、分割ブロック300cの第1番目のライン320の先頭の座標は、(XA+XB+1,1)である。座標(XA+XB+1,1)に対応するメモリアドレスは、座標(XA+XB,YA)に対応するメモリアドレスの次のメモリアドレスではない。従って、分割ブロック300bの画像データの書き込みから分割ブロック300cの画像データの書き込みに移行する際には、アクセスアドレスのジャンプが行われる。具体的には、分割ブロック300bの最後尾の座標(XA+XB,YA)に書き込み処理が達した際には、オフセット値のアドレス値への加算が行われる。即ち、データ転送長に応じた値をアドレス値に加算するのみならず、オフセット値をもアドレス値に加算することによって、アクセスアドレスのジャンプが行われる。ここで加算されるオフセット値は、(−XH×(YA−1))である。オフセット値が負の値であるため、座標(XA+XB,YA)に対応するメモリアドレスから座標(XA+XB+1,1)に対応するメモリアドレスに戻る。こうして、アクセスアドレスがジャンプし、分割ブロック300cの第1番目のライン320の画像データの書き込みが行われる。分割ブロック300bの第1番目のライン320の先頭の座標は(XA+XB+1,1)であり、分割ブロック300cの第1番目のライン320の最後尾の座標は(XA+XB+XC,1)である。分割ブロック300cの第1番目のライン320の画像データの書き込みが完了した後には、分割ブロック300cの第2番目のライン320の画像データの書き込みが行われる。分割ブロック300cの第2番目のライン320の先頭の座標は、(XA+XB+1,2)である。従って、第1番目のライン320の画像データの書き込みから第2番目のライン320の画像データの書き込みに移行する際には、アクセスアドレスのジャンプが行われる。即ち、分割ブロック300cの最後尾の座標(XA+XB+XC,1)に書き込み処理が達した際には、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(XH−XC)である。この後、分割ブロック300c内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300c内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の画素303に書き込み処理が達する毎に、オフセット値のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300c内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300cの画像データがメモリ112に書き込まれる。
分割ブロック300cの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300aの下側に位置する分割ブロック300dの画像データの書き込みが行われる。分割ブロック300cの最後尾の座標は、(XA+XB+XC,YA)である。一方、分割ブロック300dの第1番目のライン320の先頭の座標は、(1,YA+1)である。座標(1,YA+1)に対応するメモリアドレスは、座標(XA+XB+XC,YA)に対応するメモリアドレスの次のメモリアドレスである。従って、この場合には、オフセット値のアドレス値への加算を行う必要がない。従って、分割ブロック300cの画像データの書き込みから分割ブロック300dの画像データの書き込みに移行する際には、オフセット値のアドレス値への加算は行われない。換言すれば、オフセット値=0が加算される。この後、分割ブロック300d内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300d内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の座標(H1,V1)の画素304に書き込み処理が達する毎に、オフセット値、即ち、(XH−XA)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300d内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300dの画像データがメモリ112に書き込まれる。
分割ブロック300dの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300dの右側に位置する分割ブロック300eの画像データの書き込みが行われる。分割ブロック300dの画像データの書き込みから分割ブロック300eの画像データの書き込みに移行する際には、上記と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×(YB−1))である。こうして、分割ブロック300dの画像データの書き込みから分割ブロック300eの画像データの書き込みに移行する。そして、分割ブロック300e内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300e内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の座標(H1,V1)の画素305に書き込み処理が達する毎に、オフセット値、即ち、(XH−XB)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300e内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300eの画像データがメモリ112に書き込まれる。
分割ブロック300eの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300eの右側に位置する分割ブロック300fの画像データの書き込みが行われる。分割ブロック300eの画像データの書き込みから分割ブロック300fの画像データの書き込みに移行する際には、上記と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×(YB−1))である。こうして、分割ブロック300eの画像データの書き込みから分割ブロック300fの画像データの書き込みに移行する。この後、分割ブロック300f内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300f内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の画素306に書き込み処理が達する毎に、オフセット値、即ち、(XH−XC)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300f内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300fの画像データがメモリ112に書き込まれる。
分割ブロック300fの画像データのメモリ112への書き込みが完了した後には、分割ブロック300dの下側に位置する分割ブロック300gの画像データの書き込みが行われる。分割ブロック300fの画像データの書き込みから分割ブロック300gの画像データの書き込みに移行する際には、オフセット値のアドレス値への加算は行われない。即ち、データ転送長に応じたアドレス加算値をアドレス値に加算させることによって、分割ブロック300fの画像データの書き込みから分割ブロック300gの画像データの書き込みに移行する。この後、分割ブロック300g内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300g内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の画素307に書き込み処理が達する毎に、オフセット値、即ち、(XH−XA)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300g内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300gの画像データがメモリ112に書き込まれる。
分割ブロック300gの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300gの右側に位置する分割ブロック300hの画像データの書き込みが行われる。分割ブロック300gの画像データの書き込みから分割ブロック300hの画像データの書き込みに移行する際には、上記と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×(YC−1))である。こうして、分割ブロック300gの画像データの書き込みから分割ブロック300hの画像データの書き込みに移行する。この後、分割ブロック300h内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300h内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の画素308に書き込み処理が達する毎に、オフセット値、即ち、(XH−XB)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300h内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300hの画像データがメモリ112に書き込まれる。
分割ブロック300hの画像データのメモリ112への書き込みが完了した後には、当該分割ブロック300hの右側に位置する分割ブロック300iの画像データの書き込みが行われる。分割ブロック300hの画像データの書き込みから分割ブロック300iの画像データの書き込みに移行する際には、上記と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×(YC−1))である。こうして、分割ブロック300hの画像データの書き込みから分割ブロック300iの画像データの書き込みに移行する。この後、分割ブロック300i内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。分割ブロック300i内に位置する複数のライン320のうちの最後尾のライン320を除く各々のライン320の最後尾の画素309に書き込み処理が達する毎に、オフセット値、即ち、(XH−XC)のアドレス値への加算が行われる。これにより、アクセスアドレスを順次ジャンプさせつつ、分割ブロック300i内に位置する複数のライン320の各々の画像データの書き込みが順次行われる。こうして、分割ブロック300iの画像データがメモリ112に書き込まれる。
上記のような処理によって、9つの分割ブロック300に分割された画像がメモリ112に順次書き込まれる。
なお、ここでは、書き込み処理を例に説明したが、読み出し処理も同様にして行い得る。複数の分割ブロック300に分割された画像をメモリ112から読み出す際の読み出しアドレス生成部214の動作は、画像を複数の分割ブロック300に分割してメモリ112に書き込む際の書き込みアドレス生成部212の上述した動作とほぼ同様である。従って、ここでは、読み出し処理についての詳述は省略することとする。
本実施形態による画像処理装置は、上述したように、分割ブロック300に含まれるブロック(ライン)320を単位として追いかけ制御を行うものである。従って、あるライン320の画像データの読み出しが可能になった際には、ある書き込み用の分割ブロック300の書き込みが完全に完了しない段階であっても、当該ライン320の画像データの読み出しが適宜行われる。WRDMAC211は、1フレームの画像に含まれる複数のライン(ブロック)320を、上記のように所定の順序でメモリ122に書き込む。また、RDDMAC213は、1フレームの画像に含まれる複数のライン(ブロック)320を、上記のように所定の順序でメモリ112から読み出す。
次に、DMAC210とメモリI/F205と追いかけ制御部200との間で入出力される信号について図2を用いて説明する。図2に示すように、DMAC210に備えられたWRDMAC211から出力される書き込みリクエスト信号WR_REQが、メモリI/F205に入力されるようになっている。書き込みリクエスト信号WR_REQは、メモリ112への画像データの書き込みをメモリI/F205に対して要求するためのものである。書き込みリクエスト信号WR_REQは、例えば、1つのライン320の画像データをWRDMAC211が例えば補正処理部104から受信し、当該1つのライン320の画像データをメモリI/F205に送信可能になった際に発行される。メモリI/F205からパルス状に出力されるアクノリッジ信号WR_ACKは、WRDMAC211に入力される。アクノリッジ信号WR_ACKは、例えば、WRDMAC211からの書き込みリクエスト信号WR_REQをメモリI/F205が受信し、書き込みデータWR_DATAをメモリI/F205が受信可能になった際に出力される。WRDMAC211は、アクノリッジ信号WR_ACKを受信した後、例えば1つのライン320の画像データである書き込みデータWR_DATAを、メモリI/F205を介してメモリ112に書き込む。書き込みアドレス生成部212は、アクノリッジ信号WR_ACKを受信した後、次のライン320の画像データの書き込みに備えて、アドレス値のインクリメントを行い、必要に応じて各種オフセット値のアドレス値への加算を行う。
DMAC210に備えられたRDDMAC213から出力される読み出しリクエスト信号RD_REQは、追いかけ制御部200に備えられた読み出しリクエストマスク部204に入力されるようになっている。読み出しリクエスト信号RD_REQは、メモリ112からの画像データの読み出しをメモリI/F205に要求するためのものである。読み出しリクエスト信号RD_REQは、読み出しリクエストマスク部204を介して、読み出しリクエスト信号RD_REQ_MASK_OUTとしてメモリI/F205に入力される。読み出しリクエスト信号RD_REQは、例えば1つのライン320の画像データをRDDMAC213が受信可能になった際に発行される。メモリI/F205からパルス状に出力されるアクノリッジ信号RD_ACKは、RDDMAC213に入力される。アクノリッジ信号RD_ACKは、例えば、読み出しリクエスト信号RD_REQ_MASK_OUTをメモリI/F205が受信し、読み出しデータRD_DATAをメモリI/F205が送信可能になった際に出力される。RDDMAC213は、アクノリッジ信号RD_ACKを受信した後、例えば1つのライン320の画像データである読み出しデータRD_DATAを、メモリI/F205を介してメモリ112から読み出す。読み出しアドレス生成部214は、アクノリッジ信号RD_ACKを受信した後、次のライン320の画像データの読み出しに備えて、アドレス値のインクリメントを行い、必要に応じて各種オフセット値のアドレス値への加算を行う。
上述したように、書き込みアドレス生成部212は、アクノリッジ信号WR_ACKを受信した後、次のライン320の画像データの書き込みに備えて、アドレス値のインクリメントを行い、必要に応じて各種オフセット値のアドレス値への加算を行う。オフセット値のアドレス値への加算を行う際には、書き込みオフセット信号WR_OFFSET1〜WR_OFFSET3がWRDMAC211において発行される。WRDMAC211において発行される書き込みオフセット信号WR_OFFSET1〜WR_OFFSET3は、追いかけ制御部200に備えられた書き込み座標計算部201に入力される。書き込み座標計算部201は、書き込みオフセット信号WR_OFFSET1〜WR_OFFSET3に基づいて、書き込み処理がどこまで到達したかを示す第1〜第3の書き込み座標(HW1,VW1)〜(HW3,VW3)をそれぞれ算出する。第1の書き込み座標(HW1,VW1)は、分割ブロック300に含まれる複数のライン320のうちの最後尾のライン320を除くライン320の最後尾の画素301〜309に書き込み処理が到達した際に更新される。第1の書き込み座標(HW1,VW1)は、書き込み処理が完了したライン320のうちの最後尾のライン320を除くライン320の最後尾の画素301〜309の座標を示す。第2の書き込み座標(HW2,VW2)は、ブロックライン321に含まれる複数の分割ブロック300のうちの最後尾を除く分割ブロック300の最後尾の画素311,312,314,315,317,318に書き込み処理が達した際に更新される。第2の書き込み座標(HW2,VW2)は、書き込み処理が完了した分割ブロック300のうちの最後尾の分割ブロック300の最後尾の画素311,312,314,315,317,318の座標を示す。第3の書き込み座標(HW3、VW3)は、複数のブロックライン321のうちの最後尾のブロックライン321を除くブロックライン321の最後尾の画素313,316に書き込み処理が達した際に更新される。第3の書き込み座標(HW3、VW3)は、書き込み処理が完了したブロックライン321の最後尾の画素313,316の座標を示す。なお、WRDMAC211から発せられる各種の書き込みオフセット信号WR_OFFSET1〜WR_OFFSET3は、書き込みリクエスト信号WR_REQに同期してHighレベルに出力される。
このように、書き込み座標計算部201は、画像に含まれる複数のブロック(ライン)320のうちの書き込みが完了したライン320の位置を示す書き込み座標を読み出しオフセット信号に基づいて算出する書き込み座標算出手段として機能し得る。また、読み出し座標計算部202は、画像に含まれる複数のブロック(ライン)320のうちの読み出しの対象となるブロックの位置を示す読み出し座標を、読み出しオフセット信号に基づいて算出する読み出し座標算出手段として機能し得る。また、書き込み座標計算部201は、1フレームの画像に含まれる複数のブロック(ライン)320の書き込みが完了する毎に、書き込み座標を更新する。
上述したように、読み出しアドレス生成部214は、アクノリッジ信号RD_ACKを受信した後、次のライン320の画像データの読み出しに備えて、アドレス値のインクリメントを行い、必要に応じてオフセット値のアドレス値への加算を行う。オフセット値のアドレス値への加算を行う際には、読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3がRDDMAC213において発行される。RDDMAC213において発行される読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3は、追いかけ制御部200に備えられた読み出し座標計算部202にも入力される。読み出し座標計算部202は、次に読み出しリクエスト信号RD_REQ_MASK_OUTがHighレベルになった際に読み出し処理の対象となるライン320の最後尾の画素の座標を示す読み出し座標(HR,VR)を算出する。読み出し座標計算部202は、読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3に基づいて、読み出し座標(HR,VR)を算出する。読み出し座標計算部202は、分割ブロック300に含まれる複数のライン320のうちの最後尾のライン320を除くライン320の読み出し処理の際に発せられる読み出しオフセット信号RD_OFFSET1を受信する毎に、VRの値を1ずつ増やす。一方、かかる読み出しオフセット信号RD_OFFSET1を受信した際には、読み出し座標計算部202は、HRの値を変化させない。また、読み出し座標計算部202は、ブロックライン321の最後尾の分割ブロック300を除く分割ブロック300の最後尾の画素に読み出し処理が達する毎に発せられる読み出しオフセット信号RD_OFFSET2を受信する毎に、以下のように動作する。即ち、読み出し座標計算部202は、当該分割ブロック300に含まれるライン320の数から1を減算した値の分だけVRの値を減少させる。一方、かかる読み出しオフセット信号RD_OFFSET2を受信した際には、読み出し座標計算部202は、当該分割ブロック300の次の分割ブロック300の水平方向のサイズ(画素数)の分だけHRの値を増加させる。また、読み出し座標計算部202は、ブロックライン321の最後尾の画素に読み出し処理が達する毎に発せられる読み出しオフセット信号RD_OFFSET3を受信した際には、VRの値を1だけ増加させる。一方、かかる読み出しオフセット信号RD_OFFSET3を受信した際には、読み出し座標計算部202は、当該ブロックライン321の次のブロックライン321の先頭の分割ブロック300の水平方向のサイズ(画素数)に応じた値をHRの値とする。読み出し座標計算部202は、RDDMAC213から読み出しリクエストマスク部204に読み出しリクエスト信号RD_REQが発せられた際に、読み出し座標(HR、VR)を更新する。
追いかけ制御部200には座標比較部203が備えられている。書き込み座標計算部201によって算出される第1〜第3の書き込み座標(HW1、VW1)〜(HW3、VW3)が、座標比較部203に入力されるようになっている。また、読み出し座標計算部202によって算出される読み出し座標(HR、VR)が、座標比較部203に入力されるようになっている。座標比較部203は、書き込み処理が完了したライン320の位置を把握するための書き込み座標(HW1、VW1)〜(HW3、VW3)と、次に読み出し処理の対象となるライン320の位置を把握するための読み出し座標(HR、VR)とを比較する。書き込み座標(HW1、VW1)〜(HW3、VW3)と読み出し座標(HR、VR)とを比較した結果、以下の条件式(1)〜(3)のうちのいずれかを満たす場合には、読み出し処理が行われることが好ましい。そこで、以下の条件式(1)〜(3)のうちのいずれかを満たす場合には、座標比較部203は、読み出しリクエストマスク部204に対して出力するリクエストマスク信号REQ_MASKをLowレベルにする。後述するように、リクエストマスク信号REQ_MASKをLowレベルにした場合には、RDDMAC213から発せられる読み出しリクエスト信号RD_REQが読み出しリクエストマスク部204においてマスクされず、読み出し処理が行われる。一方、以下の条件式(1)〜(3)のうちのいずれをも満たさない場合には、読み出し処理を行わない。そこで、座標比較部203は、以下の条件式(1)〜(3)のうちのいずれをも満たさない場合には、読み出しリクエストマスク部204に対して出力するリクエストマスク信号REQ_MASKをHighレベルにする。
HW1≧HR かつ VW1>VR ・・・(1)
HW2≧HR かつ VW2>VR ・・・(2)
HW3≧HR かつ VW3>VR ・・・(3)
なお、上記の条件(1)〜(3)のいずれかを満たすか否かの判定は、クロック信号CLKの立ち上がりのタイミングにおいて実施される。こうして、リクエストマスク信号REQ_MASKの制御が、座標比較部203によって行われる。
リクエストマスク信号REQ_MASKがLowレベルである場合には、読み出しリクエストマスク部204は、メモリI/F205に対して出力する読み出しリクエスト信号RD_REQ_MASK_OUTをHighレベルとする。一方、リクエストマスク信号REQ_MASKがHighレベルである場合には、読み出しリクエストマスク部204は、メモリI/F205に対して出力する読み出しリクエスト信号RD_REQ_MASK_OUTをLowレベルとする。このように、座標比較部203と読み出しリクエストマスク部204とが相俟って、RDDMAC213から発せられる読み出し要求を許可するか否かを、書き込み座標と読み出し座標との位置関係に基づいて制御する制御手段として機能し得る。
WRDMAC211は、1フレーム分の画像データの最後尾の画素についての書き込み処理が完了した際には、書き込み完了信号WR_ENDを座標比較部203に出力する。座標比較部203は、書き込み完了信号WR_ENDを受信した際には、読み出しリクエスト信号RD_REQのマスクを解除すべく、リクエストマスク信号REQ_MASKをLowレベルとする。1フレーム分の画像データの書き込みが完了した後には、RDDMAC213から出力される読み出しリクエスト信号RD_REQは、読み出しリクエストマスク部204によってマスクされることはない。かかる読み出しリクエスト信号RD_REQは、読み出しリクエスト信号RD_REQ_MASK_OUT信号としてメモリI/Fに出力される。
追いかけ制御部200によって行われる動作の詳細について図4及び図5を用いて説明する。図4は、書き込み処理と読み出し処理とにおけるブロック分割の態様の例を示す図である。図4は、書き込み処理用のブロック分割の態様と読み出し処理用のブロック分割の態様とが互いに異なっている例を示している。より具体的には、書き込み用のブロック(ライン)320のサイズと読み出し用のブロック(ライン)320のサイズとが互いに異なっている。図4は、図1において、画像の書き込みを行う処理部(機能ブロック)におけるブロック分割の態様と、画像の読み出しを行う処理部(機能ブロック)におけるブロック分割の態様とが異なる場合に相当する。書き込み処理用のブロック分割は実線で示されており、読み出し処理用のブロック分割は破線で示されている。書き込み処理用のブロック分割においては、水平方向においても垂直方向においても分割数は例えば3に設定されている。即ち、9個の書き込み処理用の分割ブロックWR0_0〜WR2_2が設定されている。一方、読み出し処理用のブロック分割においては、水平方向においても垂直方向においても分割数は例えば4に設定されている。即ち、16個の読み出し用の分割ブロックRD0_0〜RD3_3が設定されている。
書き込み用の分割ブロック(書き込み用分割ブロック)WR0_*、WR1_*、WR2_*(*は0〜2の整数)の水平方向の画素数は、それぞれWXA、WXB、WXCとする。また、書き込み用の分割ブロックWR*_0、WR*_1、WR*_2(*は0〜2の整数)のライン数、即ち、垂直方向の画素数は、それぞれWYA=4,WYB=4,WYC=6とする。なお、ここでは、説明を簡略化するため、WYA=4、WYB=4、WYC=6とするが、実際には垂直方向のライン数はこれらの値よりも遙かに大きい。読み出し用の分割ブロック(読み出し分割ブロック)RD0_*、RD1_*、RD2_*、RD3_*(*は0〜3の整数)の水平方向の画素数は、それぞれRXA、RXB、RXC、RXDとする。読み出し用の分割ブロックRD*_0、RD*_1、RD*_2、RD*_3(*は0〜3)のライン数、即ち、垂直方向の画素数は、それぞれRYA=3、RYB=3,RYC=3、RYD=5とする。なお、ここでは、説明を簡略化するため、RYA=3、RYB=3、RYC=3、RYD=5とするが、実際には垂直方向のライン数はこれらの値よりも遙かに大きい。ただし、各々の分割ブロックの水平方向における画素数は、以下の条件(4)〜(6)を満たすものとする。
RXA<WXA ・・・(4)
(RXA+RXB)<(WXA+WXB) ・・・(5)
(RXA+RXB+RXC)<(WXA+WXB+WXC) ・・・(6)
図5は、メモリ制御部120の動作を示すタイミングチャートである。図5には、書き込み用の分割ブロックWR0_0〜WR2_0についての書き込み処理が行われる期間(書き込み期間)と、読み出し用の分割ブロックRD0_0〜RD3_0についての読み出し処理が行われる期間(読み出し期間)とが示されている。
まず、1フレームの画像についての書き込み処理や読み出し処理を開始する前に、書き込み座標計算部201や読み出し座標計算部202において初期化が行われる。即ち、書き込み座標計算部201において、第1の書き込み座標(HW1,VW1)、第2の書き込み座標(HW2,VW2)及び第3の書き込み座標(HW3,VW3)が(0,0)に初期化される。また、読み出し座標計算部202において、読み出し座標(HR、VR)が(0,0)に初期化される。そして、先頭に位置する書き込み用の分割ブロックWR0_0についての書き込み期間と先頭に位置する読み出し用の分割ブロックRD0_0についての読み出し期間とが開始される。
まず、初期の段階においては、書き込み用の分割ブロックWR0_0〜WR2_2のいずれのライン320の画像データもメモリ112に書き込まれていない。従って、この段階では、以下に示すように、読み出し用の分割ブロックWR0_0の第1番目のライン320の画像データの読み出しは行われない。即ち、まず、RDDMAC213から出力される読み出しリクエスト信号RD_REQがHighレベルに設定される。また、RDDMAC213から出力される第1の読み出しオフセット信号RD_OFFSET1が、読み出しリクエスト信号RD_REQに同期してHighレベルとなる。読み出しリクエスト信号RD_REQの立ち上がりに同期してパルス状に出力される読み出し座標更新信号の立ち下がりの時刻tr0において、読み出し座標(HR,VR)が読み出し座標計算部202によって更新される。読み出し用の分割ブロックRD0_0の第1番目のライン320の最後尾の座標は、(RXA,1)であるため、読み出し座標(HR,VR)は(RXA,1)に更新される。この段階では、書き込み座標(HW1,VW1)〜(HW3,VW3)はいずれも(0,0)である。上記の条件式(1)〜(3)のいずれをも満たさないため、座標比較部203から出力されるリクエストマスク信号REQ_MASKはHighレベルである。リクエストマスク信号REQ_MASKがHighレベルであるため、読み出しリクエストマスク部204からメモリI/F205に出力される読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、書き込み用の分割ブロックWR0_0の第1番目のライン320の画像データのメモリ112からの読み出しは行われない。
次に、書き込み用の分割ブロックWR0_0の第1番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、WRDMAC211から出力される書き込みリクエスト信号WR_REQがHighレベルに設定される。WRDMAC211から出力される第1の書き込みオフセット信号WR_OFFSET1が、書き込みリクエスト信号WR_REQに同期してHighレベルとなる。メモリI/F205からWRDMAC211にアクノリッジ信号WR_ACKが返信され、書き込み用の分割ブロックWR0_0の第1番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。また、書き込みリクエスト信号WR_REQの立ち下がりに同期して第1の書き込みオフセット信号WR_OFFSET1がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第1の書き込み座標更新信号の立ち下がりの時刻tw0において、第1の書き込み座標(HW1,VW1)が書き込み座標計算部201によって更新される。書き込み用の分割ブロックWR0_0の第1番目のライン320の最後尾の座標は(WXA,1)であるため、第1の書き込み座標(HW1,VW1)は(WXA,1)に更新される。この段階では、上記の条件式(1)〜(3)のいずれをも満たさないため、座標比較部203から発せられるリクエストマスク信号REQ_MASKはHighレベルである。リクエストマスク信号REQ_MASKがHighレベルであるため、読み出しリクエストマスク部204からメモリI/F205に出力される読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、この段階では、書き込み用の分割ブロックWR0_0の第1番目のライン320に書き込まれた画像データはメモリ112から読み出されない。読み出し用の分割ブロックRD0_0の第1番目のライン320の画像データの画素数RXAは、書き込み用の分割ブロックWR0_0の第1番目のライン320の画素数WXAより小さい。このため、読み出し用の分割ブロックRD0_0の第1番目のライン320には、読み出し可能な画像データの格納が完了している。従って、読み出し用の分割ブロックRD0_0の第1番目のライン320の画像データを、この段階でメモリ112から読み出すことも可能である。しかし、本実施形態では、上記の条件式(1)〜(3)のいずれかを満たした場合に読み出しを行うこととしているため、この段階では、読み出し用の分割ブロックRD0_0の第1番目のライン320の画像データのメモリ112から読み出しは行われない。
次に、書き込み用の分割ブロックWR0_0の第2番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みリクエスト信号WR_REQがHighレベルに設定される。書き込みリクエスト信号WR_REQに同期して、第1の書き込みオフセット信号WR_OFFSET1がHighレベルとなる。メモリI/F205からWRDMAC211にアクノリッジ信号WR_ACKが返信され、書き込み用の分割ブロックWR0_0の第2番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。書き込みリクエスト信号WR_REQの立ち下がりに同期して第1の書き込みオフセット信号WR_OFFSET1がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第1の書き込み座標更新信号の立ち下がりの時刻tw1において、第1の書き込み座標(HW1,VW1)が書き込み座標計算部201によって更新される。書き込み用の分割ブロックWR0_0の第2番目のライン320の最後尾の座標は(WXA,2)であるため、第1の書き込み座標(HW1,VW1)は(WXA,2)に更新される。この段階では、上記の条件式(1)を満たすため、座標比較部203から発せられるリクエストマスク信号REQ_MASKはLowレベルとなる。リクエストマスク信号REQ_MASKがLowレベルとなるため、読み出しリクエストマスク部204からメモリI/F205に出力される読み出しリクエスト信号RD_REQ_MASK_OUTはHighレベルとなる。この後、メモリI/F205からRDDMAC213にアクノリッジ信号RD_ACKがパルス状に返信され、読み出し用の分割ブロックRD0_0の第1番目のライン320の画像データのメモリ112からの読み出しが行われる。アクノリッジ信号RD_ACKの立ち下がりに同期して、読み出しリクエスト信号RD_REQ、RD_REQ_MASK_OUTがLowレベルとなる。また、読み出しリクエスト信号RD_REQの立ち下がりに同期して第1の読み出しオフセット信号RD_OFFSET1がLowレベルとなる。
次に、読み出しリクエスト信号RD_REQがHighレベルに設定される。読み出しリクエスト信号RD_REQに同期して、第1の読み出しオフセット信号RD_OFFSET1がHighレベルとなる。読み出しリクエスト信号RD_REQの立ち上がりに同期してパルス状に発せられる読み出し座標更新信号の立ち下がりの時刻tr1において、読み出し座標(HR,VR)が読み出し座標計算部202によって更新される。読み出し用の分割ブロックRD0_0の第1番目のライン320の画像データのメモリ112からの読み出しは完了しているため、次の読み出し処理において読み出し対象となるのは、読み出し用の分割ブロックRD0_0の第2番目のライン320である。読み出し用の分割ブロックRD0_0の第2番目のライン320の最後尾の座標は(RXA,2)である。このため、読み出し座標(HR,VR)は(RXA,2)に更新される。この段階では、第1の書き込み座標(HW1,VW1)は(WXA,2)であり、第2の書き込み座標(HW2,VW2)と第3の書き込み座標(HW3,VW3)はいずれも(0,0)である。上記の条件式(1)〜(3)のいずれをも満たさないため、座標比較部203から発せられるリクエストマスク信号REQ_MASKはHighレベルである。リクエストマスク信号REQ_MASKがHighレベルであるため、読み出しリクエストマスク部204からメモリI/F205に出力される読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、この段階では、書き込み用の分割ブロックWR0_0の第2番目のライン320の画像データはメモリ112から読み出されない。
次に、書き込み用の分割ブロックWR0_0の第3番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みリクエスト信号WR_REQがHighレベルに設定される。書き込みリクエスト信号WR_REQに同期して、第1の書き込みオフセット信号WR_OFFSET1がHighレベルとなる。この後、アクノリッジ信号WR_ACKが返信され、書き込み用の分割ブロックWR0_0の第3番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。書き込みリクエスト信号WR_REQの立ち下がりに同期して第1の書き込みオフセット信号WR_OFFSET1がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第1の書き込み座標更新信号の立ち下がりの時刻tw2において、第1の書き込み座標(HW1,VW1)が更新される。書き込み用の分割ブロックWR0_0の第3番目のライン320の最後尾の座標は(WXA,3)であるため、第1の書き込み座標(HW1,VW1)は(WXA,3)に更新される。この段階では、上記の条件式(1)を満たすため、座標比較部203から発せられるリクエストマスク信号REQ_MASKがLowレベルとなり、読み出しリクエスト信号RD_REQ_MASK_OUTがHighレベルとなる。この後、アクノリッジ信号RD_ACKがRDDMAC213に返信され、読み出し用の分割ブロックRD0_0の第2番目のライン320の画像データのメモリ112からの読み出しが行われる。アクノリッジ信号RD_ACKの立ち下がりに同期して、読み出しリクエスト信号RD_REQ、RD_REQ_MASK_OUTがLowレベルとなる。また、読み出しリクエスト信号RD_REQの立ち下がりに同期して第1の読み出しオフセット信号RD_OFFSET1がLowレベルとなる。
次に、読み出しリクエスト信号RD_REQがHighレベルに設定される。読み出しリクエスト信号RD_REQに同期して第2の読み出しオフセット信号RD_OFFSET2がHighレベルとなる。読み出しリクエスト信号RD_REQの立ち上がりに同期してパルス状に発せられる読み出し座標更新信号の立ち下がりの時刻tr2において、読み出し座標(HR,VR)が更新される。読み出し用の分割ブロックRD0_0の第2番目のライン320の画像データの読み出しは完了しているため、次の読み出し処理において読み出し対象とされるライン320は、読み出し用の分割ブロックRD0_0の第3番目のライン320である。読み出し用の分割ブロックRD0_0の第3番目のライン320の最後尾の座標は(RXA,3)である。このため、読み出し座標(HR,VR)は(RXA,3)に更新される。この段階では、第1の書き込み座標(HW1,VW1)は(WXA,3)であり、第2の書き込み座標(HW2,VW2)と第3の書き込み座標(HW3,VW3)はいずれも(0,0)である。上記の条件式(1)〜(3)のいずれをも満たさないため、リクエストマスク信号REQ_MASKはHighレベルであり、読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、この段階では、書き込み用の分割ブロックWR0_0の第3番目のライン320の画像データはメモリ112から読み出されない。
次に、書き込み用の分割ブロックWR0_0の第4番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みリクエスト信号WR_REQがHighレベルに設定される。書き込みリクエスト信号WR_REQに同期して、第2の書き込みオフセット信号WR_OFFSET2がHighレベルとなる。この後、アクノリッジ信号WR_ACKが返信され、分割ブロックWR0_0の第4番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。書き込みリクエスト信号WR_REQの立ち下がりに同期して第2の書き込みオフセット信号WR_OFFSET2がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第2の書き込み座標更新信号の立ち下がりの時刻tw3において、第2の書き込み座標(HW2,VW2)が更新される。書き込み用の分割ブロックWR0_0の第4番目のライン320の最後尾の座標は(WXA,4)であるため、第1の書き込み座標(HW1,VW1)は(WXA,4)に更新される。この段階では、上記の条件式(2)を満たすため、座標比較部203から発せられるリクエストマスク信号REQ_MASKがLowレベルとなり、読み出しリクエスト信号RD_REQ_MASK_OUTがHighレベルとなる。この後、アクノリッジ信号RD_ACKがRDDMAC213に返信され、読み出し用の分割ブロックRD0_0の第3番目のライン320の画像データのメモリ112からの読み出しが行われる。アクノリッジ信号RD_ACKの立ち下がりに同期して、読み出しリクエスト信号RD_REQ、RD_REQ_MASK_OUTがLowレベルとなる。読み出しリクエスト信号RD_REQの立ち下がりに同期して第2の読み出しオフセット信号RD_OFFSET2がLowレベルとなる。こうして、先頭の読み出し用の分割ブロックRD0_0に位置する全てのライン320の画像データのメモリ112からの読み出しが完了する。
次に、読み出しリクエスト信号RD_REQがHighレベルに設定される。読み出しリクエスト信号RD_REQに同期して、第1の読み出しオフセット信号RD_OFFSET1がHighレベルとなる。読み出しリクエスト信号RD_REQの立ち上がりに同期してパルス状に発せられる読み出し座標更新信号の立ち下がりの時刻tr3において、読み出し座標(HR,VR)が更新される。読み出し用の分割ブロックRD0_0に位置する全てのライン320の画像データのメモリ112からの読み出しが完了しているため、次の読み出し処理において読み出し対象となるのは、読み出し用の分割ブロックRD1_0の第1番目のライン320である。読み出し用の分割ブロックRD1_0の第1番目のライン320の最後尾の座標は(RXA+RXB,1)である。このため、読み出し座標(HR,VR)は(RXA+RXB,1)に更新される。この段階では、第1の書き込み座標(HW1,VW1)が(WXA,3)であり、(HW2,VW2)が(WXA,4)であり、(HW3,VW3)が(0,0)である。上記の条件式(1)〜(3)のいずれをも満たさないため、リクエストマスク信号REQ_MASKはHighレベルであり、読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、この段階では、書き込み用の分割ブロックWR1_0の第1番目のライン320の画像データのメモリ112からの読み出しは行われない。
次に、書き込み用の分割ブロックWR1_0の第1番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みリクエスト信号WR_REQがHighレベルに設定される。書き込みリクエスト信号WR_REQに同期して第1の書き込みオフセット信号WR_OFFSET1がHighレベルとなる。メモリI/F205からWRDMAC211にアクノリッジ信号WR_ACKが返信され、書き込み用の分割ブロックWR1_0の第1番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。書き込みリクエスト信号WR_REQの立ち下がりに同期して第1の書き込みオフセット信号WR_OFFSET1がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第1の書き込み座標更新信号の立ち下がりの時刻tw4において、第1の書き込み座標(HW1,VW1)が更新される。書き込み用の分割ブロックWR1_0の第1番目のライン320の最後尾の座標は(WXA+WXB,1)であるため、第1の書き込み座標(HW1,VW1)は(WXA+WXB,1)に更新される。この段階では、読み出し座標(HR,VR)は(RXA+RXB,1)であり、上記の条件式(1)〜(3)のいずれをも満たさない。このため、座標比較部203から発せられるリクエストマスク信号REQ_MASKはHighレベルであり、読み出しリクエスト信号RD_REQ_MASK_OUTはLowレベルである。従って、この段階では、書き込み用の分割ブロックWR1_0の第1番目のライン320に書き込まれた画像データはメモリ112から読み出されない。
次に、書き込み用の分割ブロックWR1_0の第2番目のライン320の画像データのメモリ112への書き込みが以下のようにして行われる。即ち、書き込みリクエスト信号WR_REQがHighレベルに設定される。書き込みリクエスト信号WR_REQに同期して第1の書き込みオフセット信号WR_OFFSET1がHighレベルとなる。メモリI/F205からWRDMAC211にアクノリッジ信号WR_ACKが返信され、書き込み用の分割ブロックWR1_0の第2番目のライン320の画像データのメモリ112への書き込みが行われる。アクノリッジ信号WR_ACKの立ち下がりに同期して書き込みリクエスト信号WR_REQがLowレベルとなる。書き込みリクエスト信号WR_REQの立ち下がりに同期して第1の書き込みオフセット信号WR_OFFSET1がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第1の書き込み座標更新信号の立ち下がりの時刻tw5において、第1の書き込み座標(HW1,VW1)が書き込み座標計算部201によって更新される。書き込み用の分割ブロックWR1_0の第2番目のライン320の最後尾の座標は(WXA+WXB,2)であるため、第1の書き込み座標(HW1,VW1)は(WXA+WXB,2)に更新される。この段階では、読み出し座標(HR,VR)は(RXA+RXB,1)であり、上記の条件式(1)を満たすため、リクエストマスク信号REQ_MASKはLowレベル、読み出しリクエスト信号RD_REQ_MASK_OUTはHighレベルとなる。この後、メモリI/F205からRDDMAC213にアクノリッジ信号RD_ACKがパルス状に返信され、読み出し用の分割ブロックRD1_0の第1番目のライン320の画像データのメモリ112からの読み出しが行われる。アクノリッジ信号RD_ACKの立ち下がりに同期して、読み出しリクエスト信号RD_REQ、RD_REQ_MASK_OUTがLowレベルとなる。読み出しリクエスト信号RD_REQの立ち下がりに同期して第1の読み出しオフセット信号RD_OFFSET1がLowレベルとなる。
書き込み用の分割ブロックWR1_0についてのこの後の書き込み処理は、書き込み用の分割ブロックWR0_0についての上述した書き込み処理と同様であるため、説明を省略する。なお、時刻tw6においては、第1の書き込み座標(HW1、VW1)が(WXA+WXB,3)に更新され、時刻tw7においては第2の書き込み座標(HW2、VW2)が(WXA+WXB,4)に更新される。
また、読み出し用の分割ブロックRD1_0、RD2_0についてのこの後の読み出し処理は、読み出し用の分割ブロックRD0_0についての上述した読み出し処理と同様であるため、説明を省略する。なお、時刻tr4、tr5においては、読み出し座標(HR、VR)が、(RXA+RXB,2)、(RXA+RXB,3)にそれぞれ更新される。また、時刻tr6、tr7、tr8においては、読み出し座標(HR、VR)が、(RXA+RXB+RXC,1)、(RXA+RXB+RXC,2)、(RXA+RXB+RXC,3)にそれぞれ更新される。
書き込み用の分割ブロックWR2_0についての書き込み処理も、書き込み用の分割ブロックWR0_0についての上述した書き込み処理と同様であるため、説明を省略する。なお、時刻tw8、tw9、tw10においては、第1の書き込み座標(HW1、VW1)が、(WXA+WXB+WXC,1)、(WXA+WXB+WXC,2)、(WXA+WXB+WXC,3)にそれぞれ更新される。書き込み用の分割ブロックWR2_0の第4番目のライン320の画像データをメモリ112に書き込む際には、書き込みリクエスト信号WR_REQに同期して第3の書き込みオフセット信号WR_OFFSET3がHighレベルとなる。また、書き込みリクエスト信号WR_REQの立ち下がりに同期して第3の書き込みオフセット信号WR_OFFSET3がLowレベルとなる。アクノリッジ信号WR_ACKに同期する第3の書き込み座標更新信号の立ち下がりの時刻tw11において、第3の書き込み座標(HW3,VW3)が(WXA+WXB+WXC,4)に更新される。読み出し用の分割ブロックRD3_0についての読み出し処理においては、時刻tr9において、読み出し座標(HR、VR)が(RXA+RXB+RXC+RXD,1)に更新される。第3の書き込み座標(HW3、VW3)は(WXA+WXB+WXC,4)であり、上記の条件式(3)を満たすため、リクエストマスク信号REQ_MASKはLowレベル、読み出しリクエスト信号RD_REQ_MASK_OUTはHighレベルとなる。従って、読み出し用の分割ブロックRD3_0の第1番目のライン320からの画像データの読み出しが行われる。時刻tr10においては、読み出し座標(HR、VR)が(RXA+RXB+RXC+RXD,2)に更新される。第3の書き込み座標(HW3、VW3)は(WXA+WXB+WXC,4)であり、上記の条件式(3)を満たすため、リクエストマスク信号REQ_MASKはLowレベル、読み出しリクエスト信号RD_REQ_MASK_OUTはHighレベルとなる。従って、読み出し用の分割ブロックRD3_0の第2番目のライン320からの画像データの読み出しが行われる。時刻tr11においては、読み出し座標(HR、VR)が(RXA+RXB+RXC+RXD,3)に更新される。第3の書き込み座標(HW3、VW3)は(WXA+WXB+WXC,4)であり、上記の条件式(3)を満たすため、リクエストマスク信号REQ_MASKはLowレベル、読み出しリクエスト信号RD_REQ_MASK_OUTはHighレベルとなる。従って、読み出し用の分割ブロックRD3_0の第3番目のライン320からの画像データの読み出しが行われる。
書き込み用の分割ブロックWR0_1〜WR2_2や読み出し用の分割ブロックRD0_1〜RD3_3についても、上記と同様にして書き込み処理や読み出し処理が行われる。
なお、図4に付されたドットは、書き込み用の分割ブロックWR1_2の第3番目のライン320まで書き込み処理が完了した状態を示している。この状態においては、第1の書き込み座標(HW1、VW1)は(WXA+WXB、11)であり、第2の書き込み座標(HW2、VW2)は(WXA,14)であり、第3の書き込み座標(HW3、VW3)は(WXA+WXB+WXC,8)である。また、読み出し座標(HR、VR)は(RXA+RXB+RXC、8)である。この状態では、読み出し用の分割ブロックRD2_2の第1番目のライン320の画像データのメモリ112からの読み出しは完了している。この後、書き込み処理が進行し、書き込み用の分割ブロックWR2_2の第1番目のライン320の画像データの書き込みが行われると、第1の書き込み座標(HW1、VW1)が(WXA+WXB+WXC、9)となり、上記の条件式(1)を満たす状態となる。そうすると、読み出し用の分割ブロックRD2_2の第2番目のライン320の画像データのメモリ112からの読み出しが行われ、読み出し座標(HR、VR)が(RXA+RXB+RXC、9)に更新される。
WRDMAC211は、書き込み用の分割ブロックWR2_2についての書き込み処理が完了した際には、書き込み完了信号WR_ENDをHighレベルとする。座標比較部203は、書き込み完了信号WR_ENDがHighレベルとなった際には、上記の条件式(1)〜(3)に基づく座標の比較を停止して、リクエストマスク信号REQ_MASKをLowレベルとする。これにより、書き込み用の分割ブロックWR2_2についての書き込み処理が完了した後においては、RDDMAC213から出力される読み出しリクエスト信号RD_REQが、読み出しリクエストマスク部204によってマスクされなくなる。従って、書き込み用の分割ブロックWR2_2についての書き込み処理が完了した後においては、読み出し用の分割ブロックの画像データのメモリ112からの読み出しが連続的に行われる。
図6は、本実施形態による画像処理装置の動作を示すフローチャートである。図6に示す処理は、主としてCPU108及びメモリ制御部120によって実行される。
まず、CPU108からの指示によって、WRDMAC211とRDDMAC213に処理を開始させる(ステップS600)。
次に、書き込み座標計算部201において、第1の書き込み座標(HW1、VW1)、第2の書き込み座標(HW2、VW2)、及び、第3の書き込み座標(HW3、VW3)を、例えば(0,0)に初期化する。また、読み出し座標計算部202において、読み出し座標(HR、VR)を例えば(0,0)に初期化する。これらの座標値の初期化は、CPU108からの指示によって行われる(ステップS601)。
ステップS602では、座標比較部203が、上記の条件式(1)〜(3)のいずれかを満たすか否かを判定する。上記の条件式(1)〜(3)のいずれかを満たす場合には(ステップS602においてYES)、ステップS603に移行する。ステップS603では、RDDMAC213からの読み出しリクエスト信号RD_REQに対するマスク処理が、読み出しリクエストマスク部204において解除される。上記の条件式(1)〜(3)のいずれをも満たさない場合には(ステップS602においてNO)、ステップS604に移行する。ステップS604では、RDDMAC213からの読み出しリクエスト信号RD_REQに対するマスク処理が、読み出しリクエストマスク部204において行われる。これにより、RDDMAC213によるメモリ112からの画像データの読み出しは停止される。
ステップS605では、WRDMAC211から出力される第1の書き込みオフセット信号WR_OFFSET1がHighレベルであるか否かが判定される。第1の書き込みオフセット信号WR_OFFSET1がHighレベルである場合には(ステップS605においてYES)、第1の書き込み座標(HW1、VW1)を書き込み処理が完了したライン320の最後尾の画素の座標に更新する(ステップS608)。第1の書き込みオフセット信号WR_OFFSET1がLowレベルである場合には(ステップS605においてNO)、ステップS606に移行する。
ステップS606では、WRDMAC211から出力される第2の書き込みオフセット信号WR_OFFSET2がHighレベルであるか否かが判定される。第2の書き込みオフセット信号WR_OFFSET2がHighレベルである場合には(ステップS606においてYES)、第2の書き込み座標(HW2、VW2)を書き込み処理が完了したライン320の最後尾の画素の座標に更新する(ステップS609)。第2の書き込みオフセット信号WR_OFFSET2がLowレベルである場合には、ステップS607に移行する。
ステップS607では、WRDMAC211から出力される第3の書き込みオフセット信号WR_OFFSET3がHighレベルであるか否かが判定される。第3の書き込みオフセット信号WR_OFFSET3がHighレベルである場合には、第3の書き込み座標(HW3、VW3)を書き込み処理が完了したライン320の最後尾の画素の座標に更新する(ステップS610)。第3の書き込みオフセット信号WR_OFFSET3がLowレベルである場合には、ステップS611に移行する。
ステップS611では、RDDMAC213から出力される第1〜第3の読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3のうちのいずれかがHighレベルであるか否かが判定される。第1〜第3の読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3のうちのいずれかがHighレベルである場合には、読み出し座標(HR、VR)を読み出し処理が完了したライン320の最後尾の画素の座標に更新する(ステップS612)。第1〜第3の読み出しオフセット信号RD_OFFSET1〜RD_OFFSET3のすべてがLowレベルである場合には、ステップS613に移行する。
ステップS613では、書き込み処理が完了したか否かが判定される。書き込み処理が完了した場合には(ステップS613においてYES)、ステップS614に移行する。ステップS614では、読み出しリクエスト信号RD_REQに対するマスクが解除される。一方、書き込み処理が完了していない場合には(ステップS613においてNO)、ステップS602に戻り、上記と同様の処理が行われる。
ステップS615では、読み出しが完了していないライン320についての読み出し処理が行われ、読み出し処理が完了したか否かが判定される。読み出し処理が完了していない場合には(ステップS615においてNO)、読み出しが完了していないライン320についての読み出し処理が継続して行われる。一方、読み出し処理が完了した場合には(ステップS615においてYES)、追いかけ制御が終了する。
このように、本実施形態では、書き込み処理が完了したブロック(ライン)320に応じた書き込み座標(HW1、VW1)、(HW2、VW2)、(HW3、VW3)と、読み出し処理が行われるブロック320に応じた読み出し座標(HR、VR)とを比較する。そして、書き込み座標(HW1、VW1)、(HW2、VW2)、(HW3、VW3)と読み出し座標(HR、VR)との比較の結果に基づいて読み出しが行われる。本実施形態によれば、座標を比較することによって読み出しの可否を判断するため、書き込み用のブロック320のサイズと読み出し用のブロック320のサイズとが異なる場合であっても、書き込みが完了していないブロック320を読み出してしまうことはない。このため、本実施形態によれば、追いかけ制御を適確に行い得る画像処理装置及び画像処理方法を提供することができる。
(変形例(その1))
本実施形態の変形例(その1)による画像処理装置及び画像処理方法について図8を用いて説明する。図8は、本変形例におけるブロック分割の態様を示す図である。図8における太い実線は、書き込み用の分割ブロックを概念的に示しており、図8における太い破線は、読み出し用の分割ブロックを概念的に示している。
本変形例は、書き込み処理におけるアクセス開始座標と読み出し処理におけるアクセス開始座標とが異なるものである。即ち、本変形例では、先頭に位置する書き込み用の分割ブロックWR0_0の第1番目のライン320の先頭の座標と、先頭に位置する読み出し用の分割ブロックRD0_0の第1番目のライン320の先頭の座標とが異なっている。ここでは、読み出し処理が行われる領域が、書き込み処理が行われる領域よりも小さい場合を例に説明する。
書き込み処理におけるアクセス開始座標と読み出し処理におけるアクセス開始座標との間の水平方向におけるずれ差異はDIFXである。書き込み処理におけるアクセス開始座標と読み出し処理におけるアクセス開始座標との間の垂直方向における差異はDIFYである。
このような場合には、例えば、上述した第1〜第3の書き込み座標(HW1、VW1)、(HW2、VW2)、(HW3、VW3)をアクセス開始座標の差異量DIFX、DIFYの分だけシフトさせるようにすればよい。アクセス開始座標の差異量DIFX、DIFYの分だけシフトさせた第1〜第3の書き込み座標(HW1、VW1)′、(HW2、VW2)′、(HW3、VW3)′は、以下の式(7)〜(9)によって表される。なお、読み出し処理におけるアクセス開始座標は(0,0)とする。アクセス開始座標の差異量DIFX、DIFYの分だけシフトさせた書き込み座標(HW1、VW1)′、(HW2、VW2)′、(HW3、VW3)′は、書き込み座標計算部201によって算出される。
(HW1,VW1)′=(HW1−DIFX,VW1−DIFY) ・・・(7)
(HW2,VW2)′=(HW2−DIFX,VW2−DIFY) ・・・(8)
(HW3,VW3)′=(HW3−DIFX,VW3−DIFY) ・・・(9)
なお、ここでは、書き込み座標(HW1、VW1)、(HW2、VW2)、(HW3、VW3)をアクセス開始座標の差異量DIFX、DIFYの分だけシフトさせる場合を例に説明したが、これに限定されるものではない。例えば、アクセス開始座標の差異量DIFX、DIFYの分だけ書き込み座標(HR、VR)にシフトさせるようにしてもよい。アクセス開始座標の差異量DIFX、DIFYの分だけシフトさせた書き込み座標(HR、VR)′は、書き込み処理におけるアクセス開始座標を(0,0)とする場合、以下のような式(10)によって表される。アクセス開始座標の差異量DIFX、DIFYの分だけシフトさせた書き込み座標(HR、VR)′は、読み出し座標計算部202によって算出される。
(HR,VR)′=(HR+DIFX,VR+DIFY) ・・・(10)
このように、書き込み処理におけるアクセス開始座標と読み出し処理におけるアクセス開始座標とが異なっていてもよい。
(変形例(その2))
本実施形態の変形例(その2)による画像処理装置及び画像処理方法について図9及び図10を用いて説明する。図9は、本変形例におけるブロック分割の態様を示す図である。図9における太い実線は、書き込み用の分割ブロックを概念的に示しており、図9における太い破線は、読み出し用の分割ブロックを概念的に示している。
本変形例は、互いに隣接する分割ブロックが互いにオーバーラップしている場合を示している。互いに隣接する読み出し用の分割ブロックRD*_*の水平方向におけるオーバーラップ量はOLXである。互いに隣接する読み出し用の分割ブロックRD*_*の垂直方向におけるオーバーラップ量はOLYである。
このような場合には、例えば、読み出し対象の分割ブロックRD*_*が切り替わる際に、上述した読み出し座標(HR、VR)をオーバーラップ量OLX,OLYの分だけシフトさせるようにすればよい。オーバーラップ量OLX,OLYの分だけシフトさせた読み出し座標(HR、VR)′は、以下のような式(11)によって表される。オーバーラップ量OLX,OLYの分だけシフトさせた読み出し座標(HR、VR)′は、読み出し座標計算部202によって算出される。
(HR、VR)′=(HR−OLX、VR−OLY) 式(11)
このように、互いに隣接する分割ブロックが互いにオーバーラップしていてもよい。なお、ここでは、互いに隣接する読み出し用の分割ブロックRD*_*が互いにオーバーラップしている場合を例に説明したが、互いに隣接する書き込み用の分割ブロックWR*_*が互いにオーバーラップしていてもよい。
図10は、分割ブロックの最後尾にアクセスが達した際のアクセス座標のジャンプを概念的に示す図である。図10(a)は、互いに隣接する分割ブロック300a〜300cが水平方向に互いにオーバーラップしている場合を示している。分割ブロック300a、300bの最後尾の座標(H2、V2)の画素311,312にアクセスが達した際には、図3を用いて上述した第1実施形態による画像処理装置と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×(YA−1)−OLX)である。
図10(b)は、互いに隣接する分割ブロック300d〜300iが水平方向においても垂直方向においても互いにオーバーラップしている場合を示している。ブロックライン321bの最後尾の座標(H3、V3)の画素316にアクセスが達した際には、図3を用いて上述した第1実施形態による画像処理装置と同様に、オフセット値のアドレス値への加算が行われる。ここで加算されるオフセット値は、(−XH×OLY)である。
このように、互いに隣接する分割ブロックが互いにオーバーラップしていてもよい。本変形例においても、メモリ112に対する追いかけ制御を適確に行い得る画像処理装置を提供することができる。
[変形実施形態]
以上、本発明の好ましい実施形態について説明したが、本発明はこれらの実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
例えば、上記実施形態では、1回の書き込み処理や1回の読み出し処理によって、分割ブロックの水平方向の画素数に対応する1つのライン320の分の画像データの書き込みや読み出しが行われる場合を例に説明した。即ち、1回の書き込みリクエスト信号WR_REQや1回の読み出しリクエスト信号RD_REQによって、1つのライン320の分の画像データの書き込み処理や読み出し処理が行われる場合を例に説明した。しかし、これに限定されるものではない。1つのライン320の分の画像データの書き込みや読み出しを複数回に分けて行うようにしてもよい。即ち、複数回の書き込みリクエスト信号WR_REQや複数回の読み出しリクエスト信号RD_REQによって、1つのライン320の分の画像データの書き込み処理や読み出し処理が行われるようにしてもよい。このような場合であっても、書き込みオフセット信号WR_OFFSETや読み出しオフセット信号RD_OFFSETがHighレベルとなるのは、各々のライン230の最後尾の画素に書き込み処理や読み出し処理が達した際である。
また、上記実施形態では、上記の条件式(1)〜(3)のいずれかを満たす場合に読み出し処理を行う場合を例に説明したが、用いられる条件式は上記の(1)〜(3)に限定されるものではない。例えば、上記の条件式(1)〜(3)の代わりに、以下のような条件式(12)〜(14)を用いてもよい。この場合には、LGAPの分だけ、読み出し処理が遅れて実行されることとなる。
HW1≧HR かつ VW1>(VR+LGAP) ・・・(12)
HW2≧HR かつ VW2>(VR+LGAP) ・・・(13)
HW3≧HR かつ VW3>(VR+LGAP) ・・・(14)
また、上記の条件式(1)〜(3)の代わりに、以下のような条件式(15)〜(17)を用いてもよい。この場合には、読み出し処理が可能になったライン320に対して直ちに読み出し処理を行うことができる。
HW1≧HR かつ VW1≧VR ・・・(15)
HW2≧HR かつ VW2≧VR ・・・(16)
HW3≧HR かつ VW3≧VR ・・・(17)
また、上記実施形態では、分割ブロック300a〜300cの書き込み等を順次行い、分割ブロック300d〜300fの書き込み等を順次行い、この後、分割ブロック300g〜300iの書き込み等を順次行う場合を例に説明した。しかし、これに限定されるものではない。例えば、分割ブロック300a、300d、300gの順に書き込み等を行い、分割ブロック300b、300e、300hの順に書き込み等を行い、この後、分割ブロック300c、300f、300iの順に書き込み等を行うようにしてもよい。
また、上記実施形態では、ブロック(ライン)320が水平方向である場合を例に説明したが、当該ブロック(ライン)320が垂直方向であってもよい。
また、上記実施形態では、1フレームの画像の左上端の画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の先頭のアドレスとなる場合を例に説明した。また、当該画像の右下端に位置する画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の最後尾のアドレスとなる場合を例に説明した。しかし、これに限定されるものではない。例えば、1フレームの画像の左下端の画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の先頭のアドレスとなってもよい。そして、当該画像の右上端に位置する画素のデータが書き込まれるアドレスが、当該画像データが書き込まれるアドレス領域の最後尾のアドレスとなってもよい。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。