以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図1は、画像処理装置の構成及び動作の一例を示す図である。図1には画像処理装置10とSDRAM(Synchronous Dynamic Random Access Memory)11とを含むシステムが示される。なお図1において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。ハードウェアの場合、各機能ブロックは、他のブロックと物理的にある程度分離された1つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の1つの機能を示したものであってもよい。ソフトウェアの場合、各機能ブロックは、他のブロックと論理的にある程度分離された1つのソフトウェアモジュールであってもよいし、或いは他のブロックと論理的に一体となったソフトモジュール中の1つの機能を示したものであってもよい。
画像処理装置10は、画像処理部12、プリフェッチ処理部13、及びメモリコントローラ14を含む。画像処理部12は、SDRAM11からメモリコントローラ14を介して読み出した画像データを処理する。この画像処理において、画像処理部12は、プリフェッチ処理部13に格納されるプリフェッチ画像を参照画像として利用する。画像処理は例えば動画像符号化処理であり、参照画像に対して、カレントブロックの動きベクトル算出が行なわれる。或いは画像処理は例えば動画像復号化処理であり、参照画像とデコードされた差分画像とに基づいて原画像を再構成する。
画像処理部12は、動きベクトル検出部20、インター予測部21、イントラ予測部22、選択部23、予測誤差演算部24、変換及び量子化部(T/Q)25、符号化部26、逆変換及び逆量子化部(IT/IQ)27、加算部28、及びフィルタ部29を含む。画像処理部12は更に、全体制御部30及び画像転送インターフェース31を含む。全体制御部30が画像処理部12の各部を制御して、所望の符号化処理を実行する。
SDRAM11には、ビデオカメラ等の外部動画像源から順次供給される動画像データのうちの最新の数フレーム分の画像が格納されている。これら複数の画像のうちの1つが符号化対象画像であり、他の1つ又は2つの画像が予測符号化用の参照画像用として用いられる。符号化対象画像は複数のマクロブロックに分割されており、そのうちの1つが符号化対象である着目マクロブロックである。符号化対象画像は、画像転送インターフェース31によりメモリコントローラ14を介してSDRAM11から読み出される。
動きベクトル検出部20及びインター予測部21は、参照画像と符号化対象画像の着目マクロブロックとから画面間予測画像を生成する。イントラ予測部22は、着目マクロブロックが属する符号化対象画像内の画像データ、即ち着目マクロブロックが属する画面と同一画面の画像データから画面内予測画像を生成する。選択部23は、各マクロブロックの予測画像の生成方式として、画面内予測方式(イントラ予測方式)と画面間予測方式(インター予測方式)との切り替えを行なう。なお上記参照画像は、SDRAM11から予め読み出されてプリフェッチ処理部13のプリフェッチメモリに格納されている画像であってよい。このプリフェッチ処理部13の処理については後程説明する。
動きベクトル検出部20の処理は、具体的には、複数の動きベクトルに対して着目マクロブロックと参照画像中の対応位置の画像ブロックの間の誤差(例えば画素毎の差分の絶対値和)を求め、この誤差の大きさを参考にして最適な動きベクトルを検出する。予測画像が着目マクロブロックと最も類似した画像となるように動きベクトルを選択すれば、誤差画像の情報量が最も小さくなり、最終的に符号化後のビットストリームの情報量が最も小さくなる。インター予測部21は、検出した最適な動きベクトルに対応する参照画像中の位置の画像ブロックを抽出し、予測画像として出力する。
選択部23が選択した予測画像は、予測誤差演算部24に供給される。予測誤差演算部24は、予測画像と着目ブロックとの差分を計算することにより予測画像と着目ブロックとから誤差画像を求め、求めた誤差画像を変換及び量子化部25に供給する。変換及び量子化部25は、誤差画像に対して直交変換を行ない、更に、直交変換後の誤差画像即ち変換係数に対して量子化処理を実行し、量子化された変換係数を求める。この量子化後変換係数は、符号化部26と逆変換及び逆量子化部27とに供給される。符号化部26は、量子化後変換係数をエントロピー符号化し、情報量圧縮された画像情報であるビットストリームを生成する。なお動きベクトル検出部20が検出した動きベクトルは、量子化後変換係数とともにエントロピー符号化され、ビットストリーム中に動きベクトルに関する情報が含まれることになる。
逆変換及び逆量子化部27は、量子化後変換係数に対して逆量子化を実行して変換係数を復元し、更に、変換係数に対して逆直交変換を実行して誤差画像を復元する。加算部28は、復元された誤差画像と予測誤差演算部24で用いた予測画像とから、再構成画像を生成する。フィルタ部29は、直交変換・量子化処理と逆量子化・逆直交変換処理とにより再構成画像に生じたブロック歪みを減少させるデブロッキングフィルタ処理を行い、処理後の画像であるローカルデコード画像を画像転送インターフェース31に供給する。
プリフェッチ処理部13は、画像データ圧縮部40、ヒット又はミス判定部41、プリフェッチ領域管理・リクエスト発行部42、調停部43、アドレス管理部44、及びアクセス調停部45を含む。プリフェッチ処理部13は更に、プリフェッチメモリ制御部46、圧縮プリフェッチメモリ47、振り分け部48、調停部49、画像データ展開部50、展開バッファメモリ51を含む。
画像データ圧縮部40は、画像処理部12のフィルタ部29から画像転送インターフェース31を介してローカルデコード画像及びその書き込み要求WriteReqを受け取ると、ローカルデコード画像を矩形領域単位で独立に圧縮して圧縮データを生成する。ここで言う矩形領域単位とは、例えばマクロブロック単位であってよい。画像データ圧縮部40は、矩形領域単位の圧縮データを、書き込みデータWriteDataとしてメモリコントローラ14を介してSDRAM11に格納する。また画像データ圧縮部40は、矩形領域単位の圧縮データのサイズと圧縮データのSDRAM11への格納アドレスとを記録した管理データを生成し、アドレス管理テーブル15としてSDRAM11に格納する。なおアクセス調停部45が、画像データ圧縮部40と後述するアドレス管理部44との間で、SDRAM11に対するアクセス要求の調停を行なう。
ヒット又はミス判定部41は、画像処理部12の動きベクトル検出部20又はインター予測部21から画像転送インターフェース31を介して参照画像の読み出し要求ReadReqを受け取る。この参照画像の読み出し要求ReadReqには、要求される参照画像の画面領域を示す画面内座標データが含まれる。ヒット又はミス判定部41は、この参照画像として要求される画面領域が、圧縮プリフェッチメモリ47に格納されている画面領域に含まれるか否かの判定を行なう。参照画像として要求される画面領域が圧縮プリフェッチメモリ47に格納されている画面領域に含まれる場合、即ちヒット判定の場合、ヒット又はミス判定部41は読み出し要求をプリフェッチメモリ制御部46に発行する。参照画像として要求される画面領域が圧縮プリフェッチメモリ47に格納されている画面領域に含まれない場合、即ちミス判定の場合、ヒット又はミス判定部41は読み出し要求を調停部43に発行する。
プリフェッチ領域管理・リクエスト発行部42は、画像処理部12において着目マクロブロックが順次符号化処理されるのに同期して、全体制御部30から各着目マクロブロックの処理開始又は終了を示す同期制御信号を受け取る。同期制御信号を数えることにより、所定数個の着目マクロブロックの符号化処理が終了する毎に、プリフェッチ領域管理・リクエスト発行部42は、プリフェッチ要求を調停部43に発行する。ヒット又はミス判定部41が発行する読み出し要求及びプリフェッチ領域管理・リクエスト発行部42が発行するプリフェッチ要求は、調停部43により調停されて、アドレス管理部44に供給される。
アドレス管理部44は、読み出し要求又はプリフェッチ要求に応答して、メモリコントローラ14を介してSDRAM11に読み出し要求及び読み出しアドレスを供給し、SDRAM11から画像を読み出す。この際、アドレス管理部44は、アドレス管理テーブル15を参照し、矩形領域単位の圧縮データのサイズと圧縮データのSDRAM11における格納アドレスとを記録した管理データに基づいて、SDRAM11からの圧縮データの読み出しを制御する。プリフェッチ領域管理・リクエスト発行部42からのプリフェッチ要求に応じて読み出された画像の圧縮データは、振り分け部48により圧縮プリフェッチメモリ47に振り分けられ、圧縮プリフェッチメモリ47に格納される。ヒット又はミス判定部41からの読み出し要求に応じて読み出された画像の圧縮データは、振り分け部48により振り分けられ、調停部49を介して画像データ展開部50に供給される。
プリフェッチメモリ制御部46は、圧縮プリフェッチメモリ47に対する圧縮データの書き込み及び読み出しを、上記の管理データに基づいて制御する。また更にプリフェッチメモリ制御部46は、圧縮プリフェッチメモリ47内に圧縮データとして格納されている画面領域が書き込みにより変化するのに伴い、格納されている画面領域の境界を示すデータを上記管理データに基づいて更新する。これらのプリフェッチメモリ制御部46によるメモリ制御動作については後程詳細に説明する。
画像データ展開部50は、ヒット又はミス判定部41のヒット判定時に圧縮プリフェッチメモリ47から読み出された圧縮データ、又は、ヒット又はミス判定部41のミス判定時にSDRAM11から読み出された圧縮データを調停部49を介して受け取る。画像データ展開部50は、圧縮プリフェッチメモリ47から読み出された圧縮データ又はSDRAM11から読み出された圧縮データを展開し、展開バッファメモリ51に展開後の画像を格納する。展開バッファメモリ51に格納された展開後の画像のうち、画像処理部12により要求される矩形領域部分を切り出して、切り出した部分の画像が画像処理部12に供給される。
図2は、SDRAM11においてマクロブロック単位の圧縮データが格納されたデータ配置(メモリマップ)の一例を示す図である。この例において、図2(b)に示すように、画面60(動画像の各フレーム)の画面左端から画面右端まで横方向に一列に並ぶ複数のマクロブロック(矩形領域)をマクロブロックライン(矩形領域ライン)とする。各マクロブロックは16画素×16画素の大きさであり、0,1,2で示す順番に並べられている。画面60の上端から下端まで、マクロブロックラインMBLine0からMBLineN−1までのN個のマクロブロックラインが並んでいる。図2(a)に示すように、SDRAM11において、画面60におけるマクロブロックラインの並び順と同じ並び順で、マクロブロックラインのデータが格納されている。
図2(a)に示す例では、図示の都合上、マクロブロックラインMBLine0からMBLine5までの6個のマクロブロックラインのデータのみが示されている。各マクロブロックラインのデータは、マクロブロックMB0からMBM−1までのM個のマクロブロックの圧縮データが、画面60におけるマクロブロックの並び順と同じ並び順で格納されている。図2(a)の例では、そのようなマクロブロックの圧縮データの並びがマクロブロックラインMBLine0に対してのみ示されている。ここで図2(a)にSDRAM11のメモリマップとして示す枠の縦方向はアドレス位置であり、横幅はSDRAM11の1ワードに相当する。SDRAMの1ワードが例えば64ビット幅であるとして、マクロブロックの圧縮データが8ビット単位のデータであるとすると、図2(a)に示すように隙間無くマクロブロックの圧縮データを並べることで効率的なデータ読み書きを実現できる。
図1に示す画像処理装置10の画像データ圧縮部40は、マクロブロック単位でデータを受け取り、マクロブロック単位でデータを圧縮して、複数個のマクロブロックの圧縮データを繋げて連続するようにSDRAM11に書き込む。一度の書き込み動作により書き込むマクロブロックの個数は、1マクロブロックライン分であってよい。但し、圧縮データの量が大きくなる場合には、画像データ圧縮部40に用意したレジスタに1マクロブロックライン分の圧縮データが収まりきらない場合もある。そのような場合には、所定長(上記のレジスタの容量)の圧縮データが蓄積されると、1マクロブロックラインの途中でデータ書き込みを実行してよい。前述のように、画像データ圧縮部40は、各マクロブロックライン先頭の書き込みアドレス(図2(a)に示すAD0乃至ADR5等)と、マクロブロック単位の圧縮データのサイズとをアドレス管理テーブル15として記録する。
図3は、アドレス管理テーブル15の一例を示す図である。図3に示すように、N個のマクロブロックラインのそれぞれの先頭アドレスADR0乃至ADRN−1が格納されている。また各マクロブロックライン内の全てのマクロブロックのサイズが格納されている。図3に示す表記において、Size(x,y)は、y番目のマクロブロックラインのx番目のマクロブロックの圧縮データのサイズを示す。
上記のように圧縮単位をマクロブロック単位としていることにより、マクロブロック単位でのランダムアクセスが可能となる。但し、SDRAMの1ワード単位での読み書きしかできないので、例えば図2(a)の例において、マクロブロックMB2を読み出したい場合は、マクロブロックMB1の途中からマクロブロックMB3の途中までをSDRAM11から読み出すことになる。
また、マクロブロック単位ではなく、複数個のマクロブロックの圧縮データを繋げた所定長の単位毎にSDRAM11にデータを書き込むので、図2(a)に示すように、SDRAM11には隙間無くマクロブロックの圧縮データが並べられる。従って、順次走査順で読み出す通常のプリフェッチ動作時は無駄読みが少ない。またヒット又はミス判定部41のミス判定時等に、SDRAM11へのランダムアクセスが必要な場合には、アドレス管理テーブル15に記録したマクロブロック単位のサイズ及びマクロブロックライン先頭のアドレスから、アクセス先アドレスを計算できる。
図4は、SDRAM11への圧縮データの書き込み処理の流れを示すフローチャ―トである。図1に示す画像データ圧縮部40がこの処理を実行する。
ステップS1で、画像データ圧縮部40が画像処理部12からのマクロブロック書き込み要求を受信する。ステップS2で、画像データ圧縮部40は、書き込み対象のマクロブロックがマクロブロックラインの先頭であるか否かを判定する。先頭である場合には、ステップS3で、マクロブロックラインの先頭アドレスをアドレス管理テーブル15に記録する。
ステップS4で、画像データ圧縮部40は、画像処理部12からマクロブロックデータ(ローカルデコード画像データ)を受信する。ステップS5で、画像データ圧縮部40は、受信したマクロブロックデータを独立に圧縮する。即ち、受信したマクロブロックデータに対して、他のマクロブロックデータの情報を用いることなく、単独に圧縮処理が行なわれる。ステップS6で、画像データ圧縮部40は、圧縮処理により得られた圧縮データのサイズをアドレス管理テーブル15に記録する。
ステップS7で、画像データ圧縮部40は、1ブロックラインに対する全てのマクロブロックの圧縮処理が完了したか否かを判定する。完了していない場合には、ステップS8で、圧縮データの累積サイズが所定の閾値以上であるか否かを判定する。例えば、前述の画像データ圧縮部40内部のレジスタ容量から、マージン分を引いた値以上であるか否かを判定する。閾値以上であれば、ステップS9で、画像データ圧縮部40は、蓄積されている全ての圧縮データをSDRAM11に書き込む。ステップS8での判定によりまだ閾値以上ではないとの判定結果が得られた場合、及び、ステップS9での書き込み処理の終了後、ステップS1に戻り、次のマクロブロックに対する同様の処理を実行する。
1ブロックラインに対する全てのマクロブロックの圧縮処理が完了したとステップS7で判定された場合、ステップS10で、画像データ圧縮部40は1ブロックライン分の圧縮データをSDRAM11に書き込む。ステップS11で、画像データ圧縮部40は、アドレス管理テーブル15をSDRAM11に書き込む。
図5は、圧縮プリフェッチメモリ47に格納される画面領域を模式的に示す図である。図5(a)に示す状態では、マクロブロック座標(2,1)を始点MB_Sとしマクロブロック座標(1,4)を終点MB_Eとして、始点から終点まで画面上の走査順に並ぶ全てのマクロブロックの圧縮データが圧縮プリフェッチメモリ47に格納されている。ここでマクロブロック座標(x,y)は、画面上端からy番目のマクロブロックラインにおける左からx番目のマクロブロックの位置を示す。
図5(a)に示す状態において、図1に示すプリフェッチ領域管理・リクエスト発行部42が画像処理部12の全体制御部30から同期制御信号を受け取ると、新たなマクロブロックがプリフェッチされ、圧縮プリフェッチメモリ47のデータが更新される。図5に示す例では、図5(a)に示す状態から図5(b)に示す状態に、圧縮プリフェッチメモリ47に格納される画面領域が変化する。図5(b)に示す状態では、マクロブロック座標(5,1)を始点MB_Sとしマクロブロック座標(5,4)を終点MB_Eとして、始点から終点まで走査順に並ぶ全てのマクロブロックの圧縮データが圧縮プリフェッチメモリ47に格納されている。終点側(下側)では4つのマクロブロックが追加されているが、始点側(上側)では3つのマクロブロックが削除されただけとなっている。これは、圧縮プリフェッチメモリ47に格納されているのは各マクロブロックの圧縮データであるために、各マクロブロックのデータサイズが一定ではないからである。即ち、既に圧縮プリフェッチメモリ47の全領域に圧縮データが格納されている状態で、更に追加の4つのマクロブロックが書き込まれると、この例では、始点側の3つのマクロブロックが上書きにより削除されることになる。
アドレス管理テーブル15のサイズデータにより、追加された4つのマクロブロックの圧縮データのサイズが分かり、また始点側の各マクロブロックの圧縮データのサイズも分かるので、始点側で幾つのマクロブロックが消滅するかを計算することができる。プリフェッチメモリ制御部46が、この計算を行なうことにより、圧縮プリフェッチメモリ47内に圧縮データとして格納されている画面領域が書き込みにより変化するのに伴い、格納されている画面領域の境界を示すデータを更新する。画面領域の境界を示すデータとしては、画面領域が連続するマクロブロックにより構成される単純な例においては、始点MB_Sのマクロブロック座標と、終点MB_Eのマクロブロック座標とを用いればよい。
図6は、圧縮プリフェッチメモリ47に格納されている画面領域に対応するSDRAM11内のデータ領域を示す図である。図6の右側には、マクロブロックライン単位で示したSDRAM11のメモリマップが示され、図6の左側には、同じSDRAM11のメモリマップをマクロブロック単位で示してある。各メモリマップにおいて、マクロブロック及びマクロブロックラインの図示の長さは、圧縮データの大きさに対応している。バー61は、図5(a)の状態において圧縮プリフェッチメモリ47に格納されている圧縮データと同一の圧縮データが、SDRAM11に格納されている位置を示す。バー62は、図5(b)の状態において圧縮プリフェッチメモリ47に格納されている圧縮データと同一の圧縮データが、SDRAM11に格納されている位置を示す。
マクロブロックMB(2,4)乃至MB(5,4)を追加することにより、マクロブロックMB(2,1)及びMB(3,1)とマクロブロックMB(4,1)の一部とが上書きにより消失する。書き込み前のバー61の長さと、書き込み更新後のバー62の長さとは等しい。マクロブロックMB(4,1)の上書きされていない部分は残されているが、マクロブロックの圧縮データとしては使用不可であるので、図5(b)に示すように、マクロブロックMB(4,1)は全体が消失したものとして扱われる。
図7は、圧縮プリフェッチメモリ47に格納される圧縮データを示す図である。図7(a)には、図5(a)に示す状態において圧縮プリフェッチメモリ47に格納されている、複数のマクロブロックラインMBLine1乃至MBLine4が示されている。この状態においては、図5(a)或いは図6の右側に示すように、圧縮プリフェッチメモリ47には、マクロブロックラインMBLine1の途中からマクロブロックラインMBLine4の途中までが格納されている。各マクロブロックライン内においては、1ライン分の複数のマクロブロックが、画面内の並び順に並べられている。圧縮プリフェッチメモリ47の先頭アドレス位置を開始点として、画面内で先頭のマクロブロックラインMBLine0から順番にマクロブロックラインが配置され、最終アドレスの次は先頭アドレスに戻って、更に順番にマクロブロックラインが配置される。図7(a)においては、マクロブロックラインMBLine3の途中で最終アドレスから先頭アドレスに戻って、マクロブロックラインMBLine4の途中まで書き込まれている。WP(A)は図7(a)の状態での書き込みポインタの位置であり、この位置から追加の圧縮データが書き込まれることになる。
図7(b)には、書き込み後の図5(b)に示す状態において、圧縮プリフェッチメモリ47に格納されている複数のマクロブロックラインMBLine1乃至MBLine4が示されている。図7(a)及び(b)から分かるように、マクロブロックラインMBLine4の圧縮データが追加されることにより、マクロブロックラインMBLine4のデータ量が増え、その分だけマクロブロックラインMBLine1の圧縮データが上書きされ消滅している。WP(B)は、書き込み後の図7(b)の状態での書き込みポインタの位置である。
このように、プリフェッチメモリ制御部46により制御される圧縮プリフェッチメモリ47内において、矩形領域単位として例えばマクロブロック単位の圧縮データが、画面内のマクロブロックの並び順に対応したアドレス位置に配置される。このアドレス位置は、プリフェッチメモリ制御部46の最終アドレスの次は先頭アドレスに戻って、次のマクロブロックの並び順に対応して定まっている。書き込みにより圧縮プリフェッチメモリ47において既存の圧縮データが上書きされる場合、書き込みのアドレスとアドレス管理テーブル15の管理データに含まれるマクロブロック単位の圧縮データのサイズとに基づいて、画面領域の削除部分を算出できる。
SDRAM11への書き込み時にマクロブロック毎のサイズが確定している。従って、圧縮プリフェッチメモリ47の先頭アドレス位置が例えばマクロブロックラインMBLine0の左端のマクロブロックの書き込みアドレスとなるように規定すれば、各マクロブロックの圧縮プリフェッチメモリ47内でのアドレスは一意に確定する。言い換えると、アドレス管理テーブル15のマクロブロック単位のサイズ情報から、圧縮プリフェッチメモリ47内の各マクロブロックのアドレスを決定することができる。
図8は、図1のプリフェッチ処理部13により実行されるプリフェッチ動作を示すフローチャートである。ステップS1において、プリフェッチ処理部13のプリフェッチ領域管理・リクエスト発行部42が、画像処理部12の全体制御部30からピクチャ処理開始信号を受信する。このピクチャ処理開始信号は、新たなピクチャ(フレーム)の符号化処理の開始を示す信号である。ピクチャ処理開始信号の受信に応答して、ステップS2で、プリフェッチ処理部13のアドレス管理部44が、SDRAM11からプリフェッチの対象となるピクチャのアドレス管理テーブル15を読み出す。
ステップS3で、プリフェッチ領域管理・リクエスト発行部42は、全体制御部30から各マクロブロックの処理に同期した同期制御信号を受信する。ステップS4で、プリフェッチ領域管理・リクエスト発行部42は、1つの同期制御信号を受信する度にカウント値MBCNT(初期値は0)を1増加する。ステップS5で、プリフェッチ領域管理・リクエスト発行部42は、カウント値MBCNTが規定回数より大きくなったか否かを判定する。カウント値MBCNTが規定回数より大きくない場合、ステップS3に戻り、以降の処理を繰り返す。カウント値MBCNTが規定回数より大きくなると、ステップS6で、カウントMBCNTを初期値0に設定する。
ステップS7で、プリフェッチ領域管理・リクエスト発行部42は、追加プリフェッチ領域読み出し要求(プリフェッチ要求)を発行する。このプリフェッチ要求に応答して、ステップS8で、アドレス管理部44がアドレス管理テーブル15に基づいて、追加領域に対応するデータサイズを算出する。即ち、これからプリフェッチする画像圧縮データのサイズの総計を算出する。ステップS9で、アドレス管理部44は、アドレス管理テーブル15を用いてSDRAM11から追加領域の圧縮データを読み出す。
ステップS10で、プリフェッチメモリ制御部46は、圧縮プリフェッチメモリ47に十分な未使用領域があるか否かを判定する。十分な未使用領域がない場合、ステップS11で、プリフェッチメモリ制御部46は、追加領域の書き込みに伴い必要となる圧縮プリフェッチメモリ47内の削除すべき領域を、アドレス管理テーブル15に基づいて算出する。
ステップS12で、アドレス管理部44が指定したSDRAM11の読み出しアドレスから圧縮データを読み出し、プリフェッチメモリ制御部46が指定する圧縮プリフェッチメモリ47のアドレスに当該圧縮データを格納する。ステップS13で、プリフェッチメモリ制御部46は、領域追加及びそれに伴う領域削除に応じて、圧縮プリフェッチメモリ47に格納されている画面領域の境界を示すデータ(プリフェッチ領域情報)を更新する。ステップS14で、プリフェッチメモリ制御部46は、プリフェッチ対象ピクチャの最後までプリフェッチが完了したか否かを判定する。最後までプリフェッチが完了していない場合には、ステップS3に戻り、以降の処理を繰り返す。
図9は、画像処理部12により要求される参照画像を提供する処理を示すフローチャートである。ステップS1で、ヒット又はミス判定部41が、画像処理部12から参照画像の読み出し要求を受け取る。この読み出し要求は、読み出し対象となる画面矩形領域を示す座標データを含む。ステップS2で、ヒット又はミス判定部41が、画像処理部12により要求される画面領域が圧縮プリフェッチメモリ47に格納されている画面領域に含まれるか否かの判定をする。
要求画面領域が格納画面領域に含まれるとステップS2で判定された場合には、ステップS3で、プリフェッチメモリ制御部46が、アドレス管理テーブル15の管理データに基づいて、圧縮プリフェッチメモリ47内の要求画面領域の格納アドレスを算出する。次にステップS4で、圧縮プリフェッチメモリ47が、アドレス管理テーブル15の管理データに基づいて、要求画面領域を含む画面領域の圧縮データを圧縮プリフェッチメモリ47から読み出す。このとき、SDRAM11と同様に圧縮プリフェッチメモリ47においても例えば64ビットが1ワードを構成する場合、1ワード単位の読み出しとなるので、読み出し圧縮データの開始点及び終了点は必ずしもマクロブロックの境界に一致しない。
要求画面領域が格納画面領域に含まれないとステップS2で判定された場合には、ステップS5で、アドレス管理部44が、アドレス管理テーブル15の管理データに基づいて、SDRAM11内の要求画面領域の格納アドレスを算出する。ステップS6で、アドレス管理部44が、アドレス管理テーブル15の管理データに基づいて、要求画面領域を含む画面領域の圧縮データをSDRAM11から読み出す。このとき、SDRAM11において例えば64ビットが1ワードを構成する場合、1ワード単位の読み出しとなるので、読み出し圧縮データの開始点及び終了点は必ずしもマクロブロックの境界に一致しない。
ステップS4又はステップS6の次にステップS7で、画像データ展開部50は、圧縮プリフェッチメモリ47又はSDRAM11から読み出された圧縮データを展開する。この際、読み出し圧縮データの開始点及び終了点がマクロブロックの境界に一致しない場合のマクロブロックの断片部分については破棄し、完全にデータが揃っている各マクロブロックの圧縮データの展開処理が実行される。展開された画像データは、展開バッファメモリ51に格納される。ステップS8で、展開バッファメモリ51に格納された画像データから要求画面領域のみが切り出される。ステップS9で、切り出された要求画面領域の画像データが展開バッファメモリ51から画像処理部12に転送される。
MPEGやH.264の符号化器や復号化器のような画像処理LSIにおいては、処理データの画面局所性が高く、ミスヒットする確率が低い。従って、上記説明した制御動作により、外部メモリと画像処理LSIとの間のデータ転送量を最小限に抑えることが可能となる。
図10は、展開バッファメモリ51から切り出される要求画面領域を示す図である。図10において、展開バッファメモリ51には、対象ピクチャの画面全体70のうち、展開画面領域72として示す部分の画像データが展開されて格納されている。このうち、画像処理部12が要求する画面領域は、例えば要求画面領域71として示すように、必ずしもマクロブロックの境界に一致しない境界を有する。この要求画面領域71の画像データが、展開画面領域72から切り出されて、画像処理部12に参照画像として提供される。
図11(a)乃至(c)は、プリフェッチによる格納画面領域の変化の一例を示す図である。図12(a)乃至(c)は、それぞれ図11の(a)乃至(c)に対応した圧縮プリフェッチメモリ47の内部のメモリマップを示す図である。図13(a)乃至(c)は、図11(a)乃至(c)に示す格納画面領域の更新に用いられる管理データの一例を示す図である。
図11(a)には、画面80において、マクロブロックラインMBLine0の左端のマクロブロック81からプリフェッチしていき、マクロブロックラインMBLine5のマクロブロック82までをプリフェッチした状態を示す。この状態において、図12(a)に示すように、圧縮プリフェッチメモリ47は、空き領域がなくなりちょうどFull状態となっている。各マクロブロックラインの圧縮プリフェッチメモリ47内での先頭アドレスは、アドレス管理テーブル15の管理データから、以下に示すように一意に算出することができる。まずアドレス管理テーブル15に記録されているn番目のマクロブロックラインの先頭アドレスをADR[n]とし、圧縮プリフェッチメモリ47の容量をPFM_SIZEとする。このとき、圧縮プリフェッチメモリ47内でのマクロブロックラインの先頭アドレスMBL_SADR[n](図12(a)参照)は、以下の式により求められる。
MBL_SADR[n]=ADR[n]%PFM_SIZE (1)
ここで、%は剰余計算である。
図13(a)には、図11(a)及び図12(a)の状態における管理データの一例を示す。図14は、図13の管理データの各列のデータの意味を示した表である。図13の例では、同時に追加可能なマクロブロックライン数は最大で4個であり、これに対応して管理データにはNo.0〜No.4の4つの欄が設けられている。1マクロブロックラインずつ追加していく場合は、No.0の管理データのみを使用する。使用している管理データのValidFlagは1に設定される。
図13(a)に管理データとして記録されている追加マクロブロックライン先頭アドレスSADR_A[0]と追加マクロブロックライン現在アドレスCADR_A[0]とが、図12(a)に示されている。ここで括弧[]内の数字0は、No.0の管理データであることを示す。追加マクロブロックライン現在アドレスについては、アドレス管理テーブル15に記録されている各マクロブロックのサイズを累積していくことにより算出できる。即ち、
CADR_A[0]=MBL_SADR[5] + MB_size(0,5) + MB_size(1,5) + ・・ + MB_size(11,5)
となる。また図13(a)において、追加するマクロブロックラインの先頭の画面内位置を示す先頭マクロブロック位置pfpos2_begは、座標(0,5)となっている。更に、追加するマクロブロックラインの現在のマクロブロックの画面内位置を示す追加現在マクロブロック位置pfpos2_curは、座標(12,5)となっている。これらの座標は図11(a)に示す状態に一致している。
図11(b)には、図11(a)の状態からマクロブロックラインMBLine5の最後の4個のマクロブロックを追加して、マクロブロックラインMBLine5の書き込みを終了した状態を示す。この例では、1回のプリフェッチ動作でマクロブロック4個ずつ追加するように制御が行なわれる。図12(a)の状態で圧縮プリフェッチメモリ47が既にFullであったので、図12(b)に示すようにマクロブロックラインMBLine5の残りの部分を書き込むと、先頭のマクロブロックラインMBLine0の先頭部分のデータが上書きにより消滅する。図11(b)に示すように、上書きにより消滅したマクロブロックの個数は3個である。このとき、図13(b)に示すように、追加マクロブロックラインにより上書きされる領域の先頭マクロブロックの画面内座標である上書き先頭マクロブロック位置pfpos0_begは、(0,0)である。また追加マクロブロックラインにより上書きされる領域の現在マクロブロックの画面内座標である上書き現在マクロブロック位置pfpos0_curは、(3,0)である。
より詳しく説明すると、上記の4個のマクロブロック追加の分のデータサイズAdded_sizeは、アドレス管理テーブル15に記録される各マクロブロックのサイズより、
Added_size=MB_size(12,5) + MB_size(13,5) + MB_size(14,5) + MB_size(15,5)
と算出される。従って、現在アドレスは、
CADR_B[0]= (CADR_A[0] + Added_size)%PFM_SIZE
となる。上書きが発生する場合は、上書き先頭マクロブロック位置pfpos0_beg[0]及び上書き現在マクロブロック位置pfpos0_cur[0]の算出が必要となる。マクロブロックラインMBLine0が書き込まれている圧縮プリフェッチメモリ47の先頭アドレスMBL_SADR[0]から上書きが開始されるので、pfpos0_beg[0]=(0,0)となる。また、Added_size分のデータにより上書きされるマクロブロック数は、上書き先頭マクロブロック位置のマクロブロックから順に各マクロブロックのサイズMB_sizeを累積していき、Added_size以上となる数を求めればよい。図11(b)や図13(b)に示す例では、
MB_size(0,0) + MB_size(1,0) + MB_size(2,0) >= Added_size
となり、3個のマクロブロックが上書きにより消滅することになる。上書き現在マクロブロック位置pfpos0_cur[0]は座標(3,0)となる。
図11(c)には、図11(b)の状態から、画面内において縦方向に連続する複数のマクロブロックラインMBLine6及びMBLine7について、マクロブロックラインの先頭部分を並行して圧縮プリフェッチメモリ47に書き込んだ状態を示す。この例では、各マクロブロックラインについて4個のマクロブロックが書き込まれている。このとき図12(c)に示す圧縮プリフェッチメモリ47において、これらマクロブロックラインMBLine6及びMBLine7の先頭部分が書き込まれるアドレスは、アドレス管理テーブル15の管理データから一意に計算できる。即ち、マクロブロックラインMBLine6及びMBLine7の先頭部分が書き込まれるアドレスは、前述の計算式(1)により、MBL_SADR[6]及びMBL_SADR[7]として求められる。このようにしてSDRAM11から並行して読み出した複数のマクロブロックラインの先頭部分を、圧縮プリフェッチメモリ47内の所定のデータ配置により規定される各マクロブロックラインの先頭アドレスから並行して圧縮プリフェッチメモリ47へ書き込む。なおここで「並行して」とは、並列同時に2つのデータの書き込みを実行するという意味ではなく、1ラインの先頭部分を書き込んで、その後、当該ラインの残りの部分を書き込むことなく、次の1ラインの先頭部分を書き込む、という意味である。複数マクロブロックラインを並行して追加していくことにより、プリフェッチ領域を画面の下方向へ早く移動させることができるようになる。即ち、複数マクロブロックラインの並行追加の制御により、縦パンのあるシーケンスにも追従することが可能となる。
図11(c)に示されるように、上書きされる領域の先頭マクロブロックの画面内座標である上書き先頭マクロブロック位置pfpos0_beg[0]は、座標(3,0)である。この座標値は、図13(c)において、No.0の管理データの上書き先頭マクロブロック位置pfpos0_beg[0]として示されている。また、当該上書き領域に対応する現在マクロブロックの画面内座標である上書き現在マクロブロック位置pfpos0_cur[0]は、図11(c)及び図13(c)に示されるように座標(6,0)である。この上書き領域は、マクロブロックラインMBLine6の先頭部分の書き込みに伴う上書きにより消去される領域である。
次のマクロブロックラインMBLine7の先頭部分の書き込みに伴う上書きにより消去される領域については、図11(c)に示されるように、上書き先頭マクロブロック位置pfpos0_beg[1]の座標は(11,1)である。この座標値は、図13(c)において、No.1の管理データの上書き先頭マクロブロック位置pfpos0_beg[1]として示されている。また、当該上書き領域に対応する現在マクロブロックの画面内座標である上書き現在マクロブロック位置pfpos0_cur[1]は、図11(c)及び図13(c)に示されるように座標(2,2)である。
上記の上書き先頭マクロブロック位置pfpos0_begは、以下のようにして求められる。まず、追加マクロブロックラインの圧縮プリフェッチメモリ47内の先頭アドレスと、上書きされるマクロブロックラインの圧縮プリフェッチメモリ47内の先頭アドレスとの差分を求める。例えばマクロブロックラインMBLine6の場合、マクロブロックラインMBLine0を上書きすることになるので、その差分は、
Diff_size = MBL_SADR[6] - MBL_SADR[0]
となる。次に、その差分サイズにどれだけのマクロブロック数が含まれているかを算出する。これは、上書きされるマクロブロックラインの先頭マクロブロックから各マクロブロックのサイズを順に累積していき、累積サイズがDiff_sizeをちょうど超えたときのマクロブロック数となる。この例では、MB(0,0)乃至MB(2,0)の3個のマクロブロックによりDiff_sizeを越えるので、pfpos0_beg[0]=(3,0)となる。同様の方法で、マクロブロックラインMBLine7の上書き位置についても計算することができる。マクロブロックラインMBLine7の場合はマクロブロックラインMBLine1を上書きすることになり、Diff_sizeは以下の値となる。
Diff_size=MBL_SADR[7] - MBL_SADR[1]
で、この例では、マクロブロックラインMBLine1の先頭マクロブロックから各マクロブロックのサイズを累積していくと、マクロブロックMB(0,1)乃至MB(10,1)で累積値がDiff_sizeを越える。従って、pfpos0_beg[1]=(11,1)となる。
マクロブロックラインMBLine6及びマクロブロックラインMBLine7による追加のデータサイズは、アドレス管理テーブル15に記録されている各マクロブロックのサイズに基づいて、それぞれ以下の式で求められる。
Added_size[0]=MB_size(0,6) + MB_size(1,6) + MB_size(2,6) + MB_size(3,6)
Added_size[1]=MB_size(0,7) + MB_size(1,7) + MB_size(2,7) + MB_size(3,7)
である。上書きされるマクロブロック数は、前述の場合と同様に求めることができ、この例では、マクロブロックMB(3,0)乃至MB(5,0)のマクロブロックサイズの合計値が、ちょうどAdded_size[0]を超えている。またマクロブロックMB(11,1)乃至MB(1,2)のマクロブロックサイズの合計値が、ちょうどAdded_size[1]を超えている。
上記のようにして、圧縮プリフェッチメモリ47への書き込み及び上書き消去を制御することにより、連続したマクロブロックの書き込みの場合のみでなく、不連続なマクロブロックの書き込みの場合についても適切なデータ管理が可能となる。即ち、圧縮プリフェッチメモリ47内において、マクロブロック単位の圧縮データが、画面内のマクロブロックの並び順に対応したアドレス位置に配置される。またそのアドレス位置は、圧縮プリフェッチメモリ47の最終アドレスの次は先頭アドレスに戻って、次のマクロブロックの並び順に対応して定まる。このようなデータ配置を用いることで、画面上の走査順とは異なる順番で圧縮データを圧縮プリフェッチメモリ47に書き込んでいった場合であっても、圧縮プリフェッチメモリ47内の圧縮データは常に画面上の並び順通りに連続して格納されることになる。
図15は、ヒット又はミス判定における領域判定を説明するための図である。前述のようにマクロブロックを不連続に書き込む場合、圧縮プリフェッチメモリ47に格納される画面領域が例えば図11(c)に示すように、所々でデータが消滅して不連続となる虫食い状態となってしまう。このような場合、ヒット又はミスの判定において、圧縮プリフェッチメモリ47に格納される画面領域の境界を正確に反映させようとすると、判定の計算が複雑になってしまう。そこで格納される画面領域の境界を簡略化して、ヒット又はミスの判定を効率的に行なうことが考えられる。
図15に示す例では、画面90において、圧縮プリフェッチメモリ47に格納されている画面領域のうちで画面左端と画面右端との両方に接する第1の矩形領域91を規定する。更に、第1の矩形領域91の上方に隣接する画面右端に接する第2の矩形領域92と、第1の矩形領域91の下方に隣接する画面左端に接する第3の矩形領域93とを規定する。そして第1の矩形領域91、第2の矩形領域92、及び第3の矩形領域93のみからなる領域に、画像処理部12から要求される画面領域が含まれるか否かを判定する。このように圧縮プリフェッチメモリ47の格納画面領域の境界を単純化してヒット・ミス判定計算に用いることで、判定を効率的に行なうことが可能となる。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。