(57)【特許請求の範囲】
【請求項１】
参照パーティションの動きベクトルに基づいて対象パーティションの動きベクトルを生成する複数の演算部と、
基本マクロブロックを分割した各パーティションについて参照フレームを判定し、一つのフレームを参照するパーティションが連続する場合にその連続する複数のパーティションを複数の前記演算部に前記対象パーティションとして振り分ける振り分け制御部と、
を有すること、を特徴とする動きベクトル生成回路。
【請求項２】
前記演算部の処理開始を判定し、判定結果に応じて前記演算部の演算を開始させる演算開始判定部を有すること、を特徴とする請求項１に記載の動きベクトル生成回路。
【請求項３】
前記演算開始判定部は、連続する２つのパーティションが同じ一つのフレームを参照する場合に、複数の前記演算部における演算開始を、前記対象パーティションの処理順序に応じて制御すること、を特徴とする請求項２記載の動きベクトル生成回路。
【請求項４】
前記演算開始判定部は、連続する２つのパーティションが一つのフレームを参照し、且つ参照するフレームが互いに異なる場合に、２つの演算部における演算をそれぞれ開始させること、を特徴とする請求項２記載の動きベクトル生成回路。
【請求項５】
各パーティションは、分割サイズに応じた少なくとも１つのサブパーティションを含み、
処理中のパーティションについて、次に処理するパーティションが参照するサブパーティションの処理が開始された場合に、該サブパーティションについてのフラグをセットするフラグ制御部を有し、
前記演算開始判定部は、次に処理するパーティションが参照するすべてのサブパーティションについてのフラグがセットされた場合に該パーティションの演算開始を判定すること、を特徴とする請求項２〜４のうちの何れか一項に記載の動きベクトル生成回路。
【請求項６】
基本マクロブロックを分割した各パーティションについて参照フレームを判定し、
一つのフレームを参照するパーティションが連続する場合に、その連続する複数のパーティションを複数の演算部に対象パーティションとして振り分け、
前記複数の演算部が参照パーティションの動きベクトルに基づいて前記対象パーティションの動きベクトルを生成すること、
を特徴とする動きベクトル生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
動きベクトル生成回路及び動きベクトル生成方法に関する。
【背景技術】
【０００２】
従来、動画像信号の圧縮方式としてＨ．２６４規格がある。この規格では、入力画像データをマクロブロック（以下、ＭＢという）と呼ばれる基本処理単位に分割し、これを単位として符号化・復号処理が行われる。符号化処理では、入力画像に対して直交変換、量子化などで画面内の冗長性を取り除くフレーム内予測（又はイントラ予測と呼ばれる）と、過去の複数のフレームから動き補償した予測残差を抽出することでフレーム間の冗長性を取り除くフレーム間予測（又はインター予測と呼ばれる）とが行われる。そして、それぞれ算出された値がエントロピー符号化されて符号化画像が出力される。復号処理では、その逆動作が行われることで、符号化画像から出力信号が生成される。
【０００３】
上記の符号化処理・復号処理にかかる時間を短縮するために、フレーム内予測にかかる時間を短縮する方法が提案されている。フレーム内予測では、１フレームの画像データに対する基本処理単位が、４×４画素、８×８画素、１６×１６画素のうちの何れか１つに設定される。このため、４×４画素のサブマクロに対する演算を行う演算器を複数備え、１つの演算器でサブマクロのスキャン順序に演算処理するとともに、演算が終了したサブマクロを参照するサブマクロを他の演算器の供給することで並列演算し、処理時間を短縮する（例えば、特許文献１，２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１３０５０９号公報
【特許文献２】特開２００８−２７１１２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、フレーム間予測では、１フレームの画像データに対に対して、サイズの異なるマクロブロック、サブマクロが含まれる。マクロブロックのサイズは、１６×１６画素、１６×８画素、８×１６画素、８×８画素の４通りであり、マクロブロックのサイズが８×８画素の場合、８×８画素、８×４画素、４×８画素、４×４画素のサブマクロが設定される。このように、処理単位を構成する画素数が異なるブロックが１フレームの画像データに含まれ、演算の順序が固定されていない。また、フレーム間予測では、処理中のフレームの画像データが、過去フレームの画像データと未来フレームの画像データのうちの少なくとも一方を参照する。そして、参照するフレームは、基本処理単位毎に変更可能である。従って、上記のように、固定された順序で演算器に画像データを投入する方法は、フレーム間予測にむいていない。
【課題を解決するための手段】
【０００６】
本発明の一観点によれば、参照パーティションの動きベクトルに基づいて対象パーティションの動きベクトルを生成する複数の演算部と、基本マクロブロックを分割した各パーティションについて参照フレームを判定し、一つのフレームを参照するパーティションが連続する場合にその連続する複数のパーティションを複数の前記演算部に前記対象パーティションとして振り分ける振り分け制御部と、を有する。
【発明の効果】
【０００７】
本発明の一観点によれば、動きベクトルの生成にかかる処理時間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】符号器の概略構成図である。
【図２】復号器の概略構成図である。
【図３】フレームと動きベクトルの説明図である。
【図４】フレームにおける処理順序の説明図である。
【図５】マクロブロックサイズの説明図である。
【図６】動きベクトル算出処理の説明図である。
【図７】（ａ）〜（ｄ）は、参照ブロックの説明図である。
【図８】周辺予測のために必要なメモリの説明図である。
【図９】動きベクトル（ＭＶ）生成部の概略構成図である。
【図１０】振り分け判定とＭＶ演算部の処理を示すフローチャートである。
【図１１】振り分け判定とＭＶ演算部の処理を示すフローチャートである。
【図１２】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１３】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１４】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１５】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１６】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１７】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１８】（ａ）（ｂ）は参照方向とＭＶ演算処理の順序を示す説明図である。
【図１９】開始制御フラグの説明図である。
【図２０】ＭＰ０に対するフラグ制御と演算開始制御を示すフローチャートである。
【図２１】ＭＰ１に対するフラグ制御と演算開始制御を示すフローチャートである。
【図２２】ＭＰ２に対するフラグ制御と演算開始制御を示すフローチャートである。
【図２３】ＭＰ３に対するフラグ制御と演算開始制御を示すフローチャートである。
【図２４】（ａ）（ｂ）はＭＰ０に対するフラグ制御と演算開始制御を示すタイミング図である。
【図２５】（ａ）（ｂ）はＭＰ０に対するフラグ制御と演算開始制御を示すタイミング図である。
【図２６】（ａ）（ｂ）はＭＰ０に対するフラグ制御と演算開始制御を示すタイミング図である。
【図２７】（ａ）（ｂ）はＭＰ０に対するフラグ制御と演算開始制御を示すタイミング図である。
【図２８】（ａ）（ｂ）はＭＰ１に対するフラグ制御と演算開始制御を示すタイミング図である。
【図２９】（ａ）（ｂ）はＭＰ１に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３０】（ａ）（ｂ）はＭＰ１に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３１】（ａ）（ｂ）はＭＰ１に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３２】（ａ）（ｂ）はＭＰ１に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３３】（ａ）（ｂ）はＭＰ２に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３４】（ａ）（ｂ）はＭＰ２に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３５】（ａ）（ｂ）はＭＰ２に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３６】（ａ）（ｂ）はＭＰ２に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３７】（ａ）（ｂ）はＭＰ３に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３８】（ａ）（ｂ）はＭＰ３に対するフラグ制御と演算開始制御を示すタイミング図である。
【図３９】（ａ）（ｂ）はＭＰ３に対するフラグ制御と演算開始制御を示すタイミング図である。
【図４０】（ａ）（ｂ）はＭＰ３に対するフラグ制御と演算開始制御を示すタイミング図である。
【図４１】（ａ）（ｂ）はＭＶ生成処理の動作説明図である。
【発明を実施するための形態】
【０００９】
以下、一実施形態を図面に従って説明する。
図１に示すように、符号器１０は、入力画像１１を符号化信号１２に変換する。
入力画像１１は、符号器１０のマクロブロック（ＭＢ）分割部１０１に供給される。ＭＢ分割部１０１は、入力画像１１をマクロブロック（ＭＢ）単位の画像（以下、マクロブロックという）に分割し、減算器１０２と動きベクトル検出部１１２に出力する。
【００１０】
減算器１０２は、マクロブック単位の入力画像と、予測モード選択部１１４から出力される予測画像との差分を算出し、その差分値を直交変換量子化部１０３に出力する。直交変換量子化部１０３は、上記減算結果を直交変換（ＤＣＴ:Discrete Cosine Transform）した後に、量子化を行い、量子化したデータをエントロピー符号化部１０４と逆量子化逆直交変換部１０５に出力する。エントロピー符号化部１０４は、直交変換量子化部１０３により量子化されたデータを可変長符号化変換し、符号化したデータを符号化信号１２として出力する。
【００１１】
逆量子化逆直交変換部１０５は、直交変換量子化部１０３により量子化されたデータを逆量子化した後、逆ＤＣＴを行い加算器１０６に出力する。加算器１０６は、逆量子化逆直交変換部１０５の出力データに、予測モード選択部１１４から出力される予測画像を加算する。この加算結果は、参照画像として現フレームバッファ１０７に保持される。
【００１２】
フレーム内予測部１０８は、現フレームバッファ１０７に保持された参照画像を入力し、隣接ブロックからの画素レベルに基づいて、参照画像のフレーム内予測を行う。デブロッキングフィルタ１０９は、現フレームバッファ１０７に保持された参照画像を入力し、マクロブロック境界を平滑化して出力する。これにより、デブロッキングフィルタ１０９は、画像を符号化した際に生じるブロック歪を減少させる。デブロッキングフィルタ１０９の出力データは、フレームバッファ管理部１１０を経由して、過去のフレームバッファ１１１に格納される。
【００１３】
動きベクトル検出部１１２は、ＭＢ分割部１０１から入力されたＭＢ単位の画像信号と、過去のフレームバッファ１１１に格納された参照画像とを用いて、対象マクロブロックの動きベクトル（以下、ＭＶ（Motion Vector）という）を検出する。ＭＶは、通常、周辺領域との相関が高いので、フレーム間予測部１１３は、周辺領域のＭＶを予測値として、周辺のＭＶに基づいて動きベクトル予測値（以下、ＭＶＰ（Motion Vector Predictor）という）を算出し、ＭＶとＭＶＰとの間の予測差分値（以下、ＭＶＤ（Motion Vector Difference）という）を算出する。
【００１４】
予測モード選択部１１４は、フレーム間予測部１１３とフレーム内予測部１０８の予測誤差を比較し、当該マクロブロックを最も効率よく符号化することができる符号化モードを選択し、符号化モード情報を生成する。この符号化モード情報は、符号化対象情報として、エントロピー符号化部１０４へ受け渡される。符号化モード情報には、マクロブロックを分割した分割マクロブロックのサイズと、分割マクロブロックをさらに分割したサブマクロブロックのサイズが含まれる。
【００１５】
次に、復号器について説明する。
図２に示すように、復号器２０は、符号化信号１２を出力画像１３に復号する。
エントロピー復号化部２０１は、符号化信号１２をエントロピー復号（可変長復号）して逆量子化逆直交変換部２０２に出力する。逆量子化逆直交変換部２０２は、可変長復号化されたデータを逆量子化した後、逆直交変換（逆ＤＣＴ変換）して出力する。加算器２０３は、逆量子化逆直交変換部２０２の出力データに、予測モード選択部２０４の出力データを加算する。この加算結果は、参照画像として現フレームバッファ２０５に保持される。
【００１６】
予測モード選択部２０４は、逆量子化逆直交変換部２０２によって復元された符号化モード情報に基づき、フレーム内予測部２０６またはフレーム間予測部２０７を選択する。フレーム内予測部２０６は、現フレームバッファ２０５に保持された参照画像を入力し、隣接ブロックからの画素レベルに基づいて、参照画像のフレーム内予測を行う。フレーム間予測部２０７は、過去のフレームバッファ２１０に格納された画像データからＭＶＰを算出し、このＭＶＰと符号化信号１２に含まれるＭＶＤに基づいて、動きベクトル（ＭＶ）を復元する。そして、フレーム間予測部２０７は、復元したＭＶに基づいて、予測画像を復元する。
【００１７】
予測モード選択部２０４によりフレーム内予測部２０６が選択される場合は、逆量子化逆直交変換部２０２によって復元された画像が現フレームバッファ２０５に書き込まれる。予測モード選択部２０４によりフレーム間予測部２０７が選択される場合は、逆量子化逆直交変換部２０２により復号された予測誤差が、フレーム間予測部２０７により復元された予測画像に加算されることによって画像が復号され、現フレームバッファ２０５に格納される。
【００１８】
デブロッキングフィルタ２０８は、現フレームバッファ２０５に保持された参照画像を入力し、マクロブロック境界を平滑化して出力する。これにより、デブロッキングフィルタ２０８は、画像を符号化した際に生じるブロック歪を減少させる。デブロッキングフィルタ２０８の出力データは、フレームバッファ管理部２０９を経由して、過去のフレームバッファ２１０に格納される。過去のフレームバッファ２１０に格納された画像データは、復号化された出力データ１３として出力される。
【００１９】
次に、復号器２０における動きベクトルの復号について説明する。
動きベクトルは現フレームを再生する際に用いるパラメータであり、過去に復号化（デコード）した画像からの移動距離を示すものである。
【００２０】
例えば、図３に示すように、現フレームＦＣに含まれるマクロブロックＭＢ０は、時間的に過去のフレームＦＰと未来のフレームＦＦとを参照している。これら２つのフレームＦＰ，ＦＦは、現フレームＦＣよりも先にデコードされている必要がある。尚、表示順（又は撮影順）は、過去フレームＦＰ、現フレームＦＣ、未来フレームＦＦの順番である。
【００２１】
現フレームＦＣのマクロブロックＭＢ０と同じ画像データは、過去フレームＦＰにおいてブロックＭＢＰに含まれる。現フレームＦＣのマクロブロックＭＢ０と同じ位置にある過去フレームＦＰのマクロブロックＭＢ１を、ブロックＭＢＰへ移動させるときの動き、すなわち、過去フレームＦＰにおいて示す矢印が、過去フレームＦＰにおける動きベクトルＭＶＰとなる。
【００２２】
同様に、現フレームＦＣのマクロブロックＭＢ０と同じ画像データは、未来フレームＦＦにおいてブロックＭＢＦにある。現フレームＦＣのマクロブロックＭＢ０と同じ位置にある未来フレームＦＦのマクロブロックＭＢ２を、ブロックＭＢＦへ移動させるときの動き、すなわち、未来フレームＦＦにおいて示す矢印が、未来フレームＦＦにおける動きベクトルＭＶＦとなる。
【００２３】
従って、現フレームＦＣのマクロブロックＭＢ０について、このマクロブロックＭＢ０に含まれる画像データに替えて、マクロブロックＭＢ０が参照するフレームＦＰ，ＦＦにおける移動を示す動きベクトルＭＶＰ，ＭＶＦを用いることにより、符号化信号１２のデータ量を削減する。
【００２４】
１つのフレームにおける動きベクトルの生成処理は、図４に示すように、フレームＦＣ内の１６×１６画素のＭＢ単位で、水平方向の並列順に処理される。つまり、図４において、フレームＦＣに含まれる複数のマクロブロックＭＢは、左上のマクロブロックＭＢから右方向に向かって順次処理され、右端のマクロブロックＭＢが処理されると、次段のマクロブロックＭＢが処理される。
【００２５】
復号器２０において処理されるマクロブロックを図５に示す。なお、図中、紙面上側を「上」、下側を「下」、左側を「左」、右側を「右」という。まあ、図中の数字は処理の順番を示している。
【００２６】
マクロブロック３１は、基本の１６×１６画素のマクロブロックである。以下、マクロブロックを、画素サイズを含めて「ＭＢ（画素サイズ）」と表記する。例えば、マクロブロック３１を、ＭＢ（１６×１６）３１と表す。
【００２７】
ＭＢ（１６×８）３２は、ＭＢ（１６×１６）３１を上下２つに分割した形状の１６×８画素サイズのマクロブロックである。ＭＢ（８×１６）３３は、ＭＢ（１６×１６）３１を左右２つに分割した形状の８×１６画素サイズのマクロブロックである。ＭＢ（８×８）３４は、ＭＢ（１６×１６）３１を上下左右に４等分した形状の８×８画素サイズのマクロブロックである。なお、マクロブロック間の処理順は図に示したように、ＭＢ（１６×８）３２は上から下、ＭＢ（８×１６）３３は左から右、ＭＢ（８×８）３４は、左上、右上、左下、右下の順に処理を行う。
【００２８】
さらに、Ｈ．２６４では、ＭＢ（８×８）３４のマクロブロックをさらに分割したサブマクロブロック分割を指定することもできる。マクロブロックと同様に、所定の画素サイズのサブマクロブロックを「サブＭＢ（画素サイズ）」と表記する。サブＭＢ（８×８）３５は８×８画素で構成される。サブＭＢ（８×４）３６は８×４画素で構成される。サブＭＢ（４×８）３７は４×８画素で構成される。サブＭＢ（４×４）３８は４×４画素で構成される。サブマクロブロック内の処理順は、同一形状のマクロブロックと同じである。
【００２９】
マクロブロックＭＢにおけるＭＶは、周辺予測から算出される。つまり、処理の対象となるマクロブロックＭＢにおけるＭＶは、そのマクロブロックと隣接するマクロブロックにおいて予測されたＭＶに基づいて算出される。
【００３０】
例えば、図６に示すように、処理の対象を、１６×１６画素のマクロブロックＣｕとする。マクロブロックＣｕのＭＶを算出するとき、このマクロブロックＣｕより過去に処理され、マクロブロックＣｕと隣接するマクロブロックを参照する。つまり、マクロブロックＣｕに対し、左側に隣接するマクロブロックＡ、真上に隣接するマクロブロックＢ、右上に隣接するマクロブロックＣ、及び左上に隣接するマクロブロックＤを参照する。そして、各マクロブロックＡ，Ｂ，Ｃ，Ｄの動きベクトルＭＶ＿Ａ，ＭＶ＿Ｂ，ＭＶ＿Ｃ，ＭＶ＿Ｄの中間値をＭＶＰ（動きベクトル予測値）とし、ＭＶＰに復号したＭＶＤ（予測差分値）を加算し、加算結果をマクロブロックＣｕのＭＶ（＝ＭＶＰ＋ＭＶＤ）とする。
【００３１】
マクロブロックが分割されている場合、分割されたそれぞれのマクロブロック（マクロブロックパーティション）毎に、上記の方法によりＭＶを算出する。
例えば、マクロブロックのサイズが８×８画素の場合、図６に示すように、各マクロブロックをパーティションＭＰ０〜ＭＰ３とする。そして、各パーティションに、隣接するパーティションのＭＶを参照して、処理の対象とするパーティションのＭＶを算出する。例えば、パーティションＭＰ３を処理の対象とするとき、隣接するパーティションＭＰ２，ＭＰ０，ＭＰ１をそれぞれ隣接ブロックＡ，Ｂ，Ｄとする。パーティションＭＰ３の右上のパーティションは未処理であるため、隣接ブロックＣは存在しないことになる。この場合、隣接ブロックＡ，Ｂ，Ｄ（パーティションＭＰ２，ＭＰ０，ＭＰ１）のＭＶにより、パーティションＭＰ３のＭＶを算出する。
【００３２】
上記したように、マクロブロックの最小サイズは４×４画素である。このため、従って、上記のパーティションＭＰ０〜ＭＰ３は、最小単位のパーティション（サブパーティション）に分割されることがある。このサブパーティションについても、同様に処理されてＭＶが算出される。サブパーティションが含まれるマクロブロックパーティション（ＭＰ０〜ＭＰ３と、サブパーティションに対する参照ブロックとの関係を図７（ａ）〜（ｄ）にしたがって説明する。なお、各マクロブロックパーティションＭＰ０〜ＭＰ３におけるサブパーティションの代表例として、各マクロブロックパーティションＭＰ０〜ＭＰ３の先頭位置のサブパーティションに対する隣接ブロックを説明する。
【００３３】
ここで、説明のため、サブパーティションに対し、便宜的に番号を付す。図４に示すように、マクロブロック（ＭＢ）は４×４個のサブパーティション（マクロブロック）を含み、各サブパーティションは４×４個の画素を含む。そして、サブパーティションについて、マクロブロックパーティション毎に番号を付す。具体的には、左上のパーティションＭＰ０について、左上、右上、左下、右下の順に０，１，２，３と付す。そして、サブパーティションをＳＰとする。従って、「０」を付したサブパーティションを「ＳＰ０」と表す。同様に、右上のパーティションＭＰ１について、同様の順番で４，５，６，７と付す。同様に、左下のパーティションＭＰ２について８，９，１０，１１と付し、右下のパーティションＭＰ３について１２，１３，１４，１５と付す。
【００３４】
図７（ａ）に示すように、パーティションＭＰ０のＳＰ０に対して、隣接ブロックＡは左側に隣接するマクロブロックのパーティションＭＰ１に含まれるＳＰ５となる。同様に、隣接ブロックＢは直上に隣接するマクロブロックのＳＰ１０、隣接ブロックＣは直上に隣接するマクロブロックのＳＰ１１、隣接ブロックＤは左上に隣接するマクロブロックのＳＰ１５となる。
【００３５】
ＳＰ０が参照する隣接ブロックＡ〜Ｄは、ＳＰ０が含まれるＭＢよりも過去に処理されたＭＢに含まれる。従って、ＭＢに対する処理を開始するとき、ＳＰ０の処理が実行可能である。ＳＰ１が参照する隣接ブロックＡは当該ＭＢに含まれるＳＰ０であり、隣接ブロックＢ〜ＤはＳＰ１が含まれるＭＢよりも過去に処理されたＭＢに含まれる。そして、ＳＰ０はＳＰ１より先だって処理される。従って、ＳＰ１の処理は、ＳＰ０の処理に続いて実行可能である。同様に、ＳＰ２，ＳＰ３の処理は、ＳＰ１，ＳＰ２の処理に続いて実行可能である。
【００３６】
図７（ｂ）に示すように、パーティションＭＰ１のＳＰ４に対して、隣接ブロックＡはパーティションＭＰ０のＳＰ１、隣接ブロックＢは直上に隣接するマクロブロックのＳＰ１４、隣接ブロックＣは直上に隣接するマクロブロックのＳＰ１５、隣接ブロックＤは直上に隣接するマクロブロックのＳＰ１１となる。
【００３７】
ＳＰ４が参照する隣接ブロックＡは当該ＭＢのＭＰ０に含まれるＳＰ１であり、隣接ブロックＢ〜ＤはＳＰ４が含まれるＭＢよりも過去に処理されたＭＢに含まれる。そして、ＳＰ１はＳＰ４より先だって処理される。従って、ＳＰ４の処理は、ＭＰ０のＳＰ１の処理に続いて実行可能となる。そして、ＳＰ４は、ＳＰ２，ＳＰ３を参照しない。従って、ＳＰ４の処理を、ＳＰ２の処理と並行して行うことが可能である。ＳＰ５が参照する隣接ブロックＡは当該ＭＢに含まれるＳＰ４であり、隣接ブロックＢ〜ＤはＳＰ１が含まれるＭＢよりも過去に処理されたＭＢに含まれる。そして、ＳＰ４はＳＰ５より先だって処理される。従って、ＳＰ５の処理は、ＳＰ４の処理に続いて実行可能である。ＳＰ６に対する処理は、先行して処理されるＭＰ０のＳＰ１，ＳＰ３と、当該ＭＰ１のＳＰ４，ＳＰ５を参照する。ＳＰ４，ＳＰ５はＳＰ６に先だって処理され、ＳＰ１はＳＰ３に先だって処理される。従って、ＳＰ６の処理は、ＭＰ０のＳＰ３の処理終了により実行可能となる。ＳＰ７の処理は、ＳＰ４〜ＳＰ６を参照するため、ＳＰ６の処理に続いて実行可能である。
【００３８】
図７（ｃ）に示すように、パーティションＭＰ２のＳＰ８に対して、隣接ブロックＡは左側に隣接するマクロブロックのパーティションＭＰ３に含まれるＳＰ１３、隣接ブロックＢはパーティションＭＰ０のＳＰ２、隣接ブロックＣはパーティションＭＰ０のＳＰ３、隣接ブロックＤは左側に隣接するマクロブロックのパーティションＭＰ１に含まれるＳＰ７となる。
【００３９】
ＳＰ８が参照する隣接ブロックＡ，Ｄは過去に処理されたＭＢに含まれ、隣接ブロックＢ，Ｃは当該ＭＢのＭＰ０に含まれるＳＰ２，ＳＰ３である。従って、ＳＰ８の処理は、ＳＰ３の処理終了により実行可能となる。ＳＰ９に対する処理は、先行して処理されるＭＰ０のＳＰ２，ＳＰ３と、先行して処理されるＭＰ１のＳＰ６と、当該ＭＰ１のＳＰ８を参照する。そして、ＳＰ６はＳＰ３を参照する。従って、ＳＰ９の処理は、ＭＰ１のＳＰ６の処理終了により実行可能となる。ＳＰ１０，ＳＰ１１に対する処理は、ＳＰ２，ＳＰ３と同様に、ＳＰ９，ＳＰ１０の処理に続いて実行可能である。
【００４０】
図７（ｄ）に示すように、パーティションＭＰ３のＳＰ１２に対して、隣接ブロックＡはパーティションＭＰ２のＳＰ９、隣接ブロックＢはパーティションＭＰ１のＳＰ６、隣接ブロックＣはパーティションＭＰ１のＳＰ７、隣接ブロックＤはパーティションＭＰ０のＳＰ３となる。
【００４１】
ＳＰ１２に対する処理は、先行して処理されるＭＰ０のＳＰ３と、ＭＰ１のＳＰ６，ＳＰ７と、ＭＰ３のＳＰ９を参照する。そして、ＳＰ９はＭＰ１のＳＰ６を参照する。また、ＳＰ７は、ＳＰ６を参照し、ＳＰ６に続いてＳＰ７の処理が実行される。従って、ＳＰ７の処理は、ＳＰ９の処理終了よりも前か、ＳＰ９の処理と同時に終了する。このため、ＳＰ１２の処理は、ＭＰ２のＳＰ９の処理終了により実行可能となる。ＳＰ１３に対する処理は、ＳＰ１２，ＳＰ７，ＳＰ６を参照する。従って、ＳＰ１３の処理は、ＳＰ１２の処理に続いて実行可能である。ＳＰ１４に対する処理は、ＳＰ６と同様に、ＳＰ１１の処理終了により実行可能となる。ＳＰ１５に対する処理は、ＳＰ７と同様に、ＳＰ１４の処理に続いて実行可能である。
【００４２】
図７（ａ）〜（ｄ）により説明した実行可能なタイミングは、ＭＢ（１６×１６）が、最小サイズ（４×４画素）のサブマクロブロック（ＳＰ０〜ＳＰ１５）に分割されたときである。分割サイズが異なる場合は、上記の説明におけるＳＰ０〜ＳＰ１５が含まれるサブマクロブロック（パーティション）が処理されるタイミングとなる。例えば、図７（ｂ）において、ＳＰ１とＳＰ３の画素を含むように分割されたパーティションの場合、ＳＰ６又はＳＰ６の画素を含むパーティションは、ＳＰ１とＳＰ３を含むパーティションの処理終了、つまりＳＰ１の処理終了のタイミングで実行可能となる。
【００４３】
図８に示すように、フレームＦＣは基本マクロブロックであるＭＢ（１６×１６）３１（図５参照）に分割されて処理される。マクロブロックのブロックサイズは、可変可能であり、必要に応じて設定される。ＭＶを格納するメモリの容量は、フレームＦＣが最小サイズのマクロブロックに分割された時に応じて設定される。つまり、処理対象のマクロブロック（現ＭＢ）３１ｃについて、１６個のマクロブロック（サブパーティション）のデータが必要となる。そして、現ＭＢ３１ｃに対して、左側に隣接するブロックＡ，Ｄのために５個のマクロブロックのデータが必要となる。また、現ＭＢ３１ｃに対して、上側に隣接するブロックＢ，Ｃのために、フレームＦＣを構成する１ラインのマクロブロックの数の４倍の個数のデータが必要となる。
【００４４】
例えば、１つのフレームを構成する水平画素数の最大値を１９２０とすると、１ラインのマクロブロックの数は１２０（＝１９２０／１６）となる。基本サイズのマクロブロックＭＢに必要なデータ数は、１６個である。従って、処理に必要なメモリの容量は、５００個（＝１６＋１２０×４＋５−１）のデータを保持可能な容量となる。なお、「−１」は、隣接するブロックＡのために必要なＳＰ１５（図４参照）のデータは、次ラインのマクロブロックにおいて参照されるブロックＢ，Ｃ，Ｄとなる。従って、隣接ブロックＡのデータを保持するために必要なメモリは、３個（＝４−１）となる。
【００４５】
上記の容量（データ数）は、１つのフレームに対するものである。フレーム間予測では、前方や後方の複数のフレームを参照してＭＶを生成する。従って、周辺のＭＶを記憶するメモリ（周辺メモリ）の容量は、参照するフレームの数に応じて設定される。
【００４６】
次に、動きベクトル（ＭＶ）の生成処理について説明する。
図２に示すフレーム間予測部２０７は、図９に示す動きベクトル生成部（ＭＶ生成部）４０と周辺メモリ４１を含む。
【００４７】
周辺メモリ４１には、対象マクロブロックのＭＶＰ生成時に参照する隣接マクロブロックのＭＶが格納される。ＭＶ生成部４０は、スタート信号（Ｓｔａｒｔ）４２が入力されると、周辺メモリ４１から読み出した隣接マクロブロックのＭＶに基づいてＭＶＰを算出し、そのＭＶＰと対象マクロブロックのＭＶＤ４５に基づいて、対象マクロブロックのＭＶを算出する。そして、ＭＶ生成部４０は、対象マクロブロックのＭＶを周辺メモリ４１に格納する。
【００４８】
ＭＶ生成部４０の解析部（ＭＢＴＹＰＥ／ＳｕｂＭＢＴＹＰＥ解析部と表記）４０１には、マクロブロックタイプ（ＭＢＴＹＰＥ）４３とサブマクロブロックタイプ（ＳｕｂＭＢＴＹＰＥ）４４が入力される。マクロブロックタイプ４３は、基本マクロブロックの分割状況、参照方向、分割サイズに応じたコードである。サブマクロブロックタイプ４４は、ＭＢ（８×８）の分割状況、参照方向、分割サイズに応じたコードである。分割状況は、ブロックが含むパーティションの数である。
【００４９】
解析部４０１は、ブロックタイプ４３，４４を解析し、その解析結果を振り分け制御部４０２と演算開始判定部４０３に出力する。解析結果（タイプ情報）は、分割状況、参照方向、分割サイズを含む。
【００５０】
振り分け制御部４０２は、解析部４０１の解析結果に基づいて生成した振り分け選択情報を演算開始判定部４０３と第１及び第２のアドレス生成部４０５ａ，４０５ｂに出力する。振り分け選択情報は、処理対象のマクロブロックに含まれるパーティション（ＭＢ又はＳＭＢ）を、第１のＭＶ演算部４０６ａと第２のＭＶ演算部４０６ｂに振り分けるための情報である。振り分け選択情報は、それぞれのＭＶ演算部４０６ａ．４０６ｂに処理させるパーティションを指定するために必要な各種の情報、例えば、処理対象のパーティションの位置、サイズ、参照方向を含む。
【００５１】
演算開始判定部４０３は、解析部４０１の解析結果と、振り分け制御部４０２の振り分け選択情報とに基づいて、第１及び第２のパーティション管理部（Ｐａｒｔ管理部と表記）４０４ａ，４０４ｂに対する処理開始を指示するタイミングを判定する。そして、演算開始判定部４０３は、その判定結果に応じたタイミングで第１及び第２のパーティション管理部４０４ａ，４０４ｂに開始信号を出力する。
【００５２】
第１のパーティション管理部４０４ａは、開始信号に応答して、解析部４０１の解析結果に応じてカウントアップし、カウント情報を第１のアドレス生成部４０５ａに出力する。カウント情報は、隣接ブロックのＭＶを読み出す、つまりＭＶが格納された周辺メモリ４１の領域を特定するための情報である。
【００５３】
第１のアドレス生成部４０５ａは、振り分け選択情報と、パーティション管理部４０４ａから供給されるカウント情報とに基づいて、処理対象のパーティションが参照する周辺領域の隣接アドレスを順次生成する。つまり、処理対象のパーティション（ブロック）に対して隣接するパーティション（ブロックＡ〜Ｄ）（図６参照）のＭＶが記憶された領域を示す隣接アドレスを順次出力する。そして、第１のアドレス生成部４０５ａは、生成した隣接アドレスを周辺メモリ４１に出力する。更に、第１のアドレス生成部４０５ａは、周辺メモリ４１に対するアドレスの出力を、第１のＭＶ演算部４０６ａに通知する。
【００５４】
第１のＭＶ演算部４０６ａは、第１のアドレス生成部４０５ａからの通知を受けて、周辺メモリ４１から出力されるデータを受け取る。そして、第１のＭＶ演算部４０６ａは、参照するパーティションのＭＶを受け取ると、それらのＭＶに基づいてＭＶＰを算出し、このＭＶＰと処理対象のマクロブロックのＭＶＤに基づいて、処理対象のマクロブロックに対するＭＶを算出する。
【００５５】
また、第１のアドレス生成部４０５ａは、処理対象のパーティションのＭＶを格納するための対象アドレスを生成し、その対象アドレスを周辺メモリ４１に出力するとともに、その出力を第１のＭＶ演算部４０６ａに通知する。第１のＭＶ演算部４０６ａは、その通知に応答してＭＶを周辺メモリ４１に出力する。これにより、周辺メモリ４１には、第１のＭＶ演算部４０６ａにより算出された処理対象のパーティションに対するＭＶが、対応する領域に記憶される。
【００５６】
第２のパーティション管理部４０４ｂ、第２のアドレス生成部４０５ｂ、第２のＭＶ演算部４０６ｂの動作は、それぞれ、第１のパーティション管理部４０４ａ、第１のアドレス生成部４０５ａ、第１のＭＶ演算部４０６ａの動作と同じである。従って、周辺メモリ４１には、第２のＭＶ演算部４０６ｂにより算出された処理対象のパーティションに対するＭＶが、対応する領域に記憶される。
【００５７】
第１及び第２のパーティション管理部４０４ａ，４０４ｂは、互いに同じ構成を有し、互いに独立して動作可能である。また、第１及び第２のアドレス生成部４０５ａ，４０５ｂは、互いに同じ構成を有し、互いに独立して動作可能である。そして、第１及び第２のＭＶ演算部４０６ａ．４０６ｂは、互いに同じ構成を有し、互いに独立して動作可能である。従って、第１及び第２のＭＶ演算部４０６ａ．４０６ｂに対して、互いに異なるパーティションを処理対象として設定することにより、２つの処理対象のパーティションに対するＭＶが並行して算出されるため、ＭＶを算出する処理時間が短くなる。また、第１及び第２のＭＶ演算部４０６ａ．４０６ｂに対して、１つのパーティションにおいて異なる参照方向をそれぞれ指定することにより、互いに異なる参照方向におけるＭＶが並行して算出されるため、ＭＶを算出する処理時間が短くなる。
【００５８】
また、演算開始判定部４０３は、フラグ制御部（Ｆｌｇ制御と表記）４０７を含む。フラグ制御部４０７は、演算開始判定部４０３により処理が開始されるパーティションの位置（番号）とサイズとに応じてフラグを制御する。
【００５９】
対象ブロックに対する演算処理は、基本的に、その対象ブロックに対する隣接ブロックの演算処理が終了している必要がある。従って、処理対象の基本ＭＢに含まれるパーティション（ＭＢ又はＳＭＢ）を参照するパーティションにおける処理は、参照する隣接ブロックの演算処理が終了した後に実行可能となる。言い換えれば、参照する隣接ブロックの演算処理が終了すれば、処理対象のパーティションに対する処理を何時でも開始することができる。
【００６０】
隣接ブロックの演算が終了するタイミングは、その隣接ブロックの分割状態、つまりブロックサイズにより異なる。例えば、図７（ｂ）に示すように、サブマクロブロックパーティション４（ＳＰ４）は、同じ基本ＭＢに含まれるＳＰ１の位置（画素）におけるＭＶを参照する。ＳＰ１は、マクロブロックパーティション０（ＭＰ０）に含まれる。このＭＰ０が最大サイズ、すなわちＭＢ（８×８）の場合、ＭＰ０の演算により、ＳＰ１の位置におけるＭＶが確定する。従って、ＳＰ４に対する処理は、ＭＰ０の演算の終了後に実行可能となる。
【００６１】
ＭＰ０が２つのパーティションに分割されている場合、その分割状態により演算の終了タイミングが異なる。例えば、８×４画素のパーティションに分割されている場合、第１のパーティションはＳＰ０の画素とＳＰ１の画素を含む。従って、第１のパーティションに対する演算の終了後に、ＳＰ４に対する処理が実行可能となる。しかし、４×８画素のパーティションに分割されている場合、ＳＰ１の画素は、第２のパーティションに含まれる。そして、第２のパーティションに対する処理は、第１のパーティションに対する処理の後に実行される。従って、第１のパーティションと第２のパーティションの処理の終了後に、ＳＰ４に対する処理が実行可能となる。
【００６２】
したがって、フラグ制御部４０７は、第１及び第２のＭＶ演算部４０６ａ．４０６ｂにて処理されるパーティションの位置（番号）とサイズに応じて、処理終了フラグを設定する。演算開始判定部４０３は、その処理終了フラグに従って、処理可能なパーティションを、処理可能な演算部にて処理させるように、パーティション管理部に開始信号を出力する。従って、マクロブロックパーティションに対する演算処理の終了を待つことなく、つまり、マクロブロックパーティションに対する演算処理中に、他のマクロブロックパーティションに対する演算処理を開始することが可能となるため、処理対象のＭＢにかかる処理時間を短縮することが可能となる。
【００６３】
次に、演算部４０６ａ．４０６ｂに対する振り分けを、図１０，図１１に従って説明する。
尚、第１及び第２のアドレス生成部４０５ａ，４０５ｂ、第１及び第２のＭＶ演算部４０６ａ．４０６ｂの組合せを判りやすくするために、図９に示すように、第１のアドレス生成部４０５ａ及び第１のＭＶ演算部４０６ａを「Ａ側」、第２のアドレス生成部４０５ｂ及び第２のＭＶ演算部４０６ｂを「Ｂ側」とする。従って、第１のパーティション管理部４０４ａは「Ａ側用」、第２のパーティション管理部４０４ｂは「Ｂ側用」と示す。これに基づき、図１０，図１１において、第１のＭＶ演算部４０６ａにおける処理を「Ａ側」と示し、第２のＭＶ演算部４０６ｂにおける処理を「Ｂ側」と示す。また、図１０，図１１において、参照方向が前方の場合には「Ｆ」を、参照方向が後方の場合には「Ｂ」を示す。
【００６４】
先ず、ステップ５０１において、ＭＰ０〜ＭＰ３の参照方向が片側かつ同一方向か否かを判定する。ＭＰ０〜ＭＰ３の参照方向が片側かつ同一方向の場合、つまり「ＹＥＳ」と判定した場合、ステップ５１１に移行する。一方、「ＮＯ」と判定した場合、ステップ５０２に移行する。ステップ５０２において、ＭＰ０〜ＭＰ２の参照方向が片側かつ同一方向であり、ＭＰ３が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５１２に移行する。一方、「ＮＯ」と判定した場合、ステップ５０３に移行する。
【００６５】
ステップ５０３において、ＭＰ０の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５０４に移行する。一方、「ＮＯ」と判定した場合、ステップ５１３に移行する。ステップ５０４において、ＭＰ０の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。そして、ステップ５０５に移行する。
【００６６】
次いで、ステップ５０５において、ＭＰ１の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５０６に移行する。一方、「ＮＯ」と判定した場合、ステップ５２０に移行する。ステップ５０６において、ＭＰ１の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。そして、図１１に示すステップ５０７に移行する。
【００６７】
次いで、ステップ５０７において、ＭＰ２の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５０８に移行する。一方、「ＮＯ」と判定した場合、ステップ５２９に移行する。ステップ５０８において、ＭＰ２の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。そして、ステップ５０９に移行する。
【００６８】
次いで、ステップ５０９において、ＭＰ３の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５１０に移行する。一方、「ＮＯ」と判定した場合、ステップ５３６に移行する。ステップ５１０において、ＭＰ３の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。ＭＰ０〜ＭＰ３の全てについて処理したため、処理を終了する。
【００６９】
図１０に示すステップ５１１において、ＭＰ０〜ＭＰ３の処理を２つのＭＶ演算部４０６ａ．４０６ｂに交互に振り分け、連続ＭＰ並列演算処理を行う。例えば、ＭＰ０，ＭＰ３の処理をＡ側に振り分け、ＭＰ１，ＭＰ４の処理をＢ側に振り分ける。ＭＰ０〜ＭＰ３の全てについて処理したため、処理を終了する。
【００７０】
連続ＭＰ並列演算処理は、連続して処理されるように設定された複数のＭＰについて、ＭＰの処理中に次のＭＰの処理を開始することで、２つのＭＰに対する処理を並列して実行する処理である。例えば、図７（ｂ）において説明したように、ＭＰ１のＳＰ４に対する処理は、ＭＰ０に含まれるＳＰ１の処理終了により実行可能となる。従って、ＭＰ１のＳＰ４に対する処理は、ＭＰ０のＳＰ２に対する処理と並行して実行することが可能である。従って、同様に構成された２つのＭＶ演算部４０６ａ．４０６ｂを用い、一方（図１０ではＡ側）のＭＶ演算部４０６ａ（図９参照）にＭＰ０の処理を振り分け、他方（図１０ではＢ側）のＭＶ演算部４０６ｂ（図９参照）にＭＰ１の処理を振り分けことで、ＭＰ０の処理とＭＰ１の処理を並列実行する。次いで、ＭＰ０の処理が終了すると、ＭＰ２の処理をＡ側のＭＶ演算部４０６ａに振り分けることで、ＭＰ１の処理とＭＰ２の処理を並列実行する。次いで、ＭＰ１の処理が終了すると、ＭＰ３の処理をＢ側のＭＶ演算部４０６ｂに振り分けることで、ＭＰ２の処理とＭＰ３の処理を並列実行する。このように、連続ＭＰ並列演算処理を実行することで、１つのＭＢに対する処理時間が、各ＭＰ０〜ＭＰ４を逐次処理する場合の処理時間よりも短縮することができる。
【００７１】
図１０に示すステップ５１２において、ＭＰ０〜ＭＰ２の処理を２つのＭＶ演算部４０６ａ．４０６ｂに交互に振り分け、連続ＭＰ並列演算処理を行う。そして、図１１に示すステップ５０９を経由してステップ５１０に移行する。このステップ５１０において、ＭＰ３の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。
【００７２】
図１０に示すステップ５１３において、ＭＰ１の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５１４に移行する。一方、「ＮＯ」と判定した場合、ステップ５１６に移行する。ステップ５１４において、ＭＰ０を一方（例えばＡ側）のＭＶ演算部４０６ａにて処理する。次いで、ステップ５１５において、ＭＰ１の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。そして、図１１に示すステップ５０７に移行する。
【００７３】
図１０に示すステップ５１６において、ＭＰ０及びＭＰ１の参照方向が片側同一方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５１９に移行する。一方、「ＮＯ」と判定した場合、ステップ５１７に移行する。ステップ５１７において、ＭＰ０とＭＰ１の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、並列して処理を行う。次いで、ステップ５１８において、ステップ５１７における双方の処理が終了するのを待ち、図１１に示すステップ５０７に移行する。これは、並列に処理するＭＰの分割サイズが異なる場合、演算に係る時間が異なる可能性があるからである。
【００７４】
図１０に示すステップ５１９において、ＭＰ０とＭＰ１の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、連続ＭＰ並列演算処理を行う。そして、図１１に示すステップ５０７に移行する。
【００７５】
図１０に示すステップ５２０において、ＭＰ１〜ＭＰ３の参照方向が片側かつ同一方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５２１に移行する。一方、「ＮＯ」と判定した場合、図１１に示すステップ５２２に移行する。図１０に示すステップ５２１において、ＭＰ１〜ＭＰ３の処理を２つのＭＶ演算部４０６ａ．４０６ｂに交互に振り分け、連続ＭＰ並列処理を行う。ＭＰ０〜ＭＰ３の全てについて処理したため、処理を終了する。
【００７６】
図１１に示すステップ５２２において、ＭＰ２の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５２３に移行する。一方、「ＮＯ」と判定した場合、ステップ５２５に移行する。ステップ５２３において、ＭＰ１を一方（例えばＡ側）のＭＶ演算部４０６ａにて処理する。次いで、ステップ５２４において、ＭＰ２の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。そして、ステップ５０９に移行する。
【００７７】
ステップ５２５において、ＭＰ１及びＭＰ２の参照方向が片側かつ同一方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５２８に移行する。一方、「ＮＯ」と判定した場合、ステップ５２６に移行する。ステップ５２６において、ＭＰ１とＭＰ２の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、並列して処理を行う。次いで、ステップ５２７において、図１０のステップ５１８と同様の理由により、ステップ５２６における双方の処理が終了するのを待ち、次のステップ５０９に移行する。
【００７８】
ステップ５２８において、ＭＰ１とＭＰ２の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、連続ＭＰ並列演算処理を行う。そして、ステップ５０９に移行する。
ステップ５２９において、ＭＰ３の参照方向が双方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５３０に移行する。一方、「ＮＯ」と判定した場合、ステップ５３２に移行する。ステップ５３０において、ＭＰ２を一方（例えばＡ側）のＭＶ演算部４０６ａにて処理する。次いで、ステップ５３１において、ＭＰ３の処理を、２つのＭＶ演算部に参照方向に応じて振り分ける。例えば、「Ｆ」をＡ側のＭＶ演算部４０６ａにて処理し、「Ｂ」をＢ側のＭＶ演算部にて処理する。ＭＰ０〜ＭＰ３の全てについて処理したため、処理を終了する。
【００７９】
ステップ５３２において、ＭＰ２及びＭＰ３の参照方向が片側かつ同一方向か否かを判定する。「ＹＥＳ」と判定した場合、ステップ５３５に移行する。一方、「ＮＯ」と判定した場合、ステップ５３３に移行する。ステップ５３３において、ＭＰ２とＭＰ３の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、並列して処理を行う。次いで、ステップ５３４において、図１０のステップ５１８と同様の理由により、ステップ５３３における双方の処理が終了するのを待ち、処理を終了する。
【００８０】
ステップ５３５において、ＭＰ２とＭＰ３の処理を２つのＭＶ演算部４０６ａ．４０６ｂに振り分け、連続ＭＰ並列演算処理を行う。そして、処理を終了する。
ステップ５３６において、ＭＰ３を一方（例えばＡ側）のＭＶ演算部４０６ａにて処理する。そして、処理を終了する。
【００８１】
次に、上記の処理を、図１２〜図１８に従って説明する。
なお、ＭＶ演算において、マクロブロックの分割数が多い、つまり、ＳＭＢ（パーティション）の数が多いほど、演算に要する時間が長い。従って、最小サイズ（４×４画素）のＳＭＢ（パーティション）に分割したＭＢに対する処理手順を説明する。
【００８２】
なお、図１２〜図１８において、ＭＢ（１６×１６）に含まれるパーティションを、それぞれの番号（０〜１５）を用いて示す。また、参照方向について、前方を「Ｆｗｄ」、後方を「Ｂｗｄ」と示す。また、第１のＭＶ演算部４０６ａを「Ａ」、第２のＭＶ演算部４０６ｂを「Ｂ」と示す。
【００８３】
図１２（ａ）に示すように、ＳＰ０〜ＳＰ１５の全てが前方を参照し、後方を参照していないＭＢの場合、図１０のステップ５０１において「ＹＥＳ」と判定され、ステップ５１１において連続ＭＰ並列演算処理される。
【００８４】
図１２（ｂ）に示すように、ＳＰ０〜ＳＰ３（ＭＰ０）とＳＰ８〜ＳＰ１１（ＭＰ２）を（Ａ）演算部４０６ａに振り分け、ＳＰ４〜ＳＰ７（（ＭＰ１）とＳＰ１２〜ＳＰ１５（ＭＰ３）を（Ｂ）演算部４０６ｂに振り分ける。そして、ＳＰ１の処理終了を待ってＳＰ４の処理を開始する。ＳＰ３の処理に続いてＳＰ８の処理を開始する。そして、（Ａ）演算部４０６ａにおいて、ＳＰ８の処理が終了すると、（Ｂ）演算部４０６ｂにおいてＳＰ６が終了するため、続いてＳＰ９の処理を開始する。
【００８５】
（Ｂ）演算部４０６ｂにおいて、ＳＰ７の処理を終了すると、（Ａ）演算部４０６ａにおいてＳＰ９の処理が終了するため、続いてＳＰ１２の処理を開始する。そして、（Ｂ）演算部４０６ｂにおいて、ＳＰ１３の処理を終了すると、（Ａ）演算部４０６ａにおいてＳＰ１１の処理が終了するため、続いてＳＰ１４の処理を開始する。そして、（Ｂ）演算部４０６ｂにおいて、ＳＰ１５の処理が終了すると、１つのＭＢに対する処理が終了する。
【００８６】
図１２（ｂ）において、「Ｆｗｄ」「Ｂｗｄ」は、従来例のように、参照方向に応じて処理を振り分ける場合における処理の順番を示している。図１２（ａ）に示すように、全てのＳＰ０〜ＳＰ１５が同一方向（Ｆｗｄ）を参照するため、ＳＰ０〜ＳＰ１５は、「Ｆｗｄ」のＭＶ演算部にて逐次処理される。
【００８７】
１つのＳＰにおいてＭＶの算出に要するサイクルを「８」とすると、本実施形態のように、Ａ，ＢのＭＶ演算部４０６ａ．４０６ｂに処理を振り分ける場合、８０サイクル（＝１０×８）でＭＢに対するＭＶ演算処理が終了する。これに対し、従来例では、１２８サイクル（＝１６×８）必要とする。従って、図１２（ａ）に示すケースの処理時間は、従来例の６２．５％となり、短縮される。
【００８８】
図１３（ａ）に示すように、ＳＰ１２〜ＳＰ１５（ＭＰ３）が前方を参照し、ＳＰ０〜ＳＰ１５の全てが後方を参照するＭＢの場合、図１０のステップ５０２において「ＹＥＳ」と判定されてステップ５１２において連続ＭＰ並列演算処理された後、図１１のステップ５０９において「ＹＥＳ」と判定されてステップ５１０においてＭＰ３について並列処理される。
【００８９】
図１３（ｂ）に示すように、ＳＰ０〜ＳＰ１１（ＭＰ０〜ＭＰ２）については、図１２（ｂ）と同様である。そして、ＳＰ１２〜ＳＰ１５について、前方参照の演算処理を（Ａ）演算部４０６ａに振り分け、後方参照の演算処理を（Ｂ）演算部４０６ｂに振り分ける。この結果、９６サイクル（＝１２×８）でＭＢに対するＭＶ演算処理が終了する。
【００９０】
従来例の場合、後方参照するＳＰ０〜ＳＰ１５が「Ｂｗｄ」のＭＶ演算部にて逐次処理されるため、１２８サイクル（＝１６×８）必要とする。従って、図１３（ａ）に示すケースの処理時間は、従来例の７５％となり、短縮される。
【００９１】
図１４（ａ）に示すように、ＳＰ１２〜ＳＰ１５（ＭＰ３）が前方を参照し、ＳＰ０〜ＳＰ１５の全てが後方を参照するＭＢの場合、図１０のステップ５０２において「ＹＥＳ」と判定されてステップ５１２において連続ＭＰ並列演算処理された後、図１１のステップ５０９において「ＹＥＳ」と判定されてステップ５１０においてＭＰ３について並列処理される。
【００９２】
図１４（ｂ）に示すように、ＳＰ０〜ＳＰ３について、前方参照の演算処理を（Ａ）演算部４０６ａに振り分け、後方参照の演算処理を（Ｂ）演算部４０６ｂに振り分ける。そして、ＳＰ４〜ＳＰ１５（ＭＰ１〜ＭＰ３）については、図１２（ｂ）と同様である。この結果、９６サイクル（＝１２×８）でＭＢに対するＭＶ演算処理が終了する。
【００９３】
従来例の場合、後方参照するＳＰ０〜ＳＰ１５が「Ｂｗｄ」のＭＶ演算部にて逐次処理されるため、１２８サイクル（＝１６×８）必要とする。従って、図１４（ａ）に示すケースの処理時間は、従来例の７５％となり、短縮される。
【００９４】
なお、前方を参照するパーティションがＳＰ４〜ＳＰ７の場合、同一方向を参照し連続するＭＰ２，ＭＰ３のＳＰ８〜ＳＰ１６が連続ＭＰ並列演算処理される。また、前方を参照するパーティションがＳＰ８〜ＳＰ１１の場合、同一方向を参照し連続するＭＰ０，ＭＰ１のＳＰ０〜ＳＰ７が連続ＭＰ並列演算処理される。従って、ＭＶ演算に要する時間は、１１２サイクル（＝１４×８）となり、短縮される。
【００９５】
図１５（ａ）に示すように、ＳＰ０〜ＳＰ１５の全てが前方及び後方を参照するＭＢの場合、図１０のステップ５０３，５０５、図１１のステップ５０７，５０９において「ＹＥＳ」と判定される。そして、ステップ５０４において、ＭＰ０の前方参照の処理を（Ａ）演算部４０６ａに、後方参照の処理を（Ｂ）演算部４０６ｂに振り分ける。同様に、ステップ５０６，５０８，５１０において、ＭＰ１，ＭＰ２，ＭＰ３の前方参照の処理を（Ａ）演算部４０６ａに、後方参照の処理を（Ｂ）演算部４０６ｂに振り分ける。
【００９６】
従って、図１５（ｂ）に示すように、ＳＰ０〜ＳＰ１５がそれぞれのＭＶ演算部４０６ａ．４０６ｂにおいて逐次処理される。従来例では、参照方向に応じた演算部においてＳＰ０〜ＳＰ１５が逐次処理される。従って、図１５（ａ）に示すケースの処理時間は、従来例と同じとなる。すなわち、図１５（ａ）に示すケースの場合、本実施形態の構成を採用しても、従来例と同じ時間で処理を行うことができる。
【００９７】
図１６（ａ）に示すように、ＳＰ４〜ＳＰ１５（ＭＰ１〜ＭＰ３）が前方を参照し、ＳＰ０〜ＳＰ１５の全てが後方を参照するＭＢの場合、図１０のステップ５１３において「ＹＥＳ」と判定され、ステップ５１４において、ＭＰ０のＳＰ０〜ＳＰ３について、一方のＭＶ演算部（図１６（ｂ）では（Ｂ）演算部４０６ｂ）により処理される。ＳＰ４〜ＳＰ１５については、図１５（ｂ）と同様に、前方参照の処理を（Ａ）演算部４０６ａに、後方参照の処理を（Ｂ）演算部４０６ｂに振り分ける。この結果、図１６（ａ）に示すケースの場合、図１５（ａ）に示すケースと同様に、従来例と同じ時間で処理される。尚、図１６（ａ）（ｂ）では、ＭＰ０が前方を参照しないＭＢについて説明したが、ＭＰ１〜ＭＰ３のうちの何れか１つが前方を参照しないＭＢについても、図１６（ｂ）に示す処理手順と同様になる。
【００９８】
図１７（ａ）に示すように、ＳＰ０〜ＳＰ３（ＭＰ０）とＳＰ１２〜ＳＰ１５（ＭＰ３）が前方を参照し、ＳＰ４〜ＳＰ１１（ＭＰ１，ＭＰ２）の全てが後方を参照するＭＢの場合、図１０のステップ５１６において「ＮＯ」と判定されてステップ５１７においてＭＰ０とＭＰ１の処理がそれぞれ異なる演算部にて処理される。また、図１１のステップ５３２において「ＮＯ」と判定されてステップ５３３においてＭＰ２とＭＰ３の処理がそれぞれ異なる演算部にて処理される。
【００９９】
すなわち、図１７（ｂ）に示すように、ＳＰ０〜ＳＰ３，ＳＰ８〜ＳＰ１１が（Ａ）演算部４０６ａにて処理され、ＳＰ４〜ＳＰ７，ＳＰ１２〜ＳＰ１５が（Ｂ）演算部４０６ｂにて処理される。この結果、６４サイクル（＝８×８）でＭＢに対するＭＶ演算処理が終了する。従来例の場合、ＳＰ０〜ＳＰ１５が参照方向に応じて逐次「Ｆｗｄ」「Ｂｗｄ」に振り分けられて処理されるため、１２８サイクル（＝１６×８）必要とする。従って、図１７（ａ）に示すケースの処理時間は、従来例の５０％となり、短縮される。
【０１００】
なお、連続する２つのＭＰにおいて片方向かつ参照方向が互いに異なればよく、例えば、ＳＰ０〜ＳＰ３（ＭＰ０）が後方参照、ＳＰ４〜ＳＰ７（ＭＰ１）が前方参照であってもよい。ＳＰ８〜ＳＰ１５（ＭＰ２，ＭＰ３）についても同様である。
【０１０１】
図１８（ａ）に示すように、ＳＰ０〜ＳＰ７（ＭＰ０，ＭＰ１）が前方のみを参照し、ＳＰ８〜ＳＰ１５（ＭＰ２，ＭＰ３）が双方向（前方及び後方）を参照するＭＢの場合、図１０のステップ５１６において「ＹＥＳ」と判定されてステップ５１９においてＭＰ０とＭＰ１が連続ＭＰ並列演算処理される。そして、図１１のステップ５０７，５０９において「ＹＥＳ」と判定されてステップ５０８，５１０においてＭＰ２とＭＰ３の処理が参照方向に応じてそれぞれ異なる演算部にて処理される。
【０１０２】
すなわち、図１８（ｂ）に示すように、ＳＰ０〜ＳＰ３，ＳＰ４〜ＳＰ７が（Ａ）演算部４０６ａと（Ｂ）演算部４０６ｂにより連続ＭＰ並列演算処理され、ＳＰ８〜ＳＰ１５について、前方参照の処理が（Ａ）演算部４０６ａにて、後方参照の処理が（Ｂ）演算部４０６ｂにて実行される。この結果、１１２サイクル（＝１４×８）でＭＢに対するＭＶ演算処理が終了する。従来例の場合、ＳＰ０〜ＳＰ１５が参照方向に応じて逐次「Ｆｗｄ」「Ｂｗｄ」に振り分けられて処理されるため、１２８サイクル（＝１６×８）必要とする。従って、図１７（ａ）に示すケースの処理時間は、従来例の８７．５％となり、短縮される。
【０１０３】
次に、フラグ制御について説明する。
図１９は、図９に示す演算開始判定部４０３（フラグ制御部４０７）にて参照されるフラグの説明図である。なお、図１９は、フラグの位置を、マクロブロックに対応して表示している。そして、本実施形態におけるフラグは、ＳＰの処理に関わる。従って、関連性のあるＳＰの番号を用いてフラグ［ｎ］（ｎはＳＰの番号）として説明する。
【０１０４】
なお、ＳＰの番号は、ＳＰのサイズに応じて、そのパーティションに含まれる最小サイズのＳＭＢの番号のうち、最初に処理されるＳＰの番号（数が小さな番号）を用いるものとする。例えば、図４に示すマクロブロックにおいて、ＭＰ０が１つのパーティションとして定義されている場合、このＭＰ０に含まれる最小のＳＰ０〜ＳＰ３のうち、最初に処理されるＳＰ０を代表として用いる。従って、ＭＰ１の場合には、ＳＰ４が代表となる。
【０１０５】
図１９に示すように、演算開始判定部４０３（図９参照）は、５つのフラグを有している。フラグ制御部４０７は、対応するＳＰの処理が開始されると、フラグをセットする。そして、フラグ制御部４０７は、所定のタイミング、例えば、１つのＭＢに対するＭＶ演算処理を終了するタイミングで、全てのフラグをリセットする。尚、フラグをリセットするタイミングを互いに相違するように設定してもよい。
【０１０６】
図７（ａ）〜（ｄ）において説明したように、次のＭＰに対する処理を可能とするのは、ＳＰ１，ＳＰ３，ＳＰ６，ＳＰ９，ＳＰ１１である。このため、これらのＳＰに対応してフラグ［１］，［３］，［６］，［９］，［１１］を備え、これらのフラグを適宜セットすることにより、次のＭＰの処理開始を可能とする。つまり、処理中のＭＰにおいてフラグをセットすることで、演算開始判定部４０３は、次のＭＰに対する処理の開始を指示することで、連続ＭＰ並列演算処理を容易に実行することができる。
【０１０７】
次に、ＭＰに含まれるＳＰの開始とフラグの制御を、説明する。
図２０は、ＭＰ０に対する処理を示すフローチャートである。
ステップ６０１において、ＭＰ０に含まれるＳＭＢ（パーティション）のサイズを判定する。そして、判定したサイズに応じて、ステップ６０２ａ，６０２ｂ，６０２ｃ，６０２ｄの何れかに移行する。
【０１０８】
サイズが「８×８」の場合、ＳＰ０が含まれる。従って、ステップ６０２ａにおいてＳＰ０の処理を開始し、フラグ［１］及びフラグ［３］をセット（図中、「Ｆｌａｇ［１，３］＝１」と表記）する。
【０１０９】
サイズが「８×４」の場合、ＭＰ０はＳＰ０とＳＰ２を含む。従って、ステップ６０２ｂにおいて、ＳＰ０の処理を開始し、フラグ［１］をセットする。次いで、ステップ６０３ｂにおいてＳＰ２の処理を開始し、フラグ［３］をセットする。
【０１１０】
サイズが「４×８」の場合、ＭＰ０はＳＰ０とＳＰ１を含む。従って、ステップ６０２ｃにおいて、ＳＰ０の処理を開始する。次いで、ステップ６０３ｃにおいてＳＰ１の処理を開始し、フラグ［１］，［３］をセットする。
【０１１１】
サイズが「４×４」の場合、ＭＰ０はＳＰ０〜ＳＰ３を含む。従って、ステップ６０２ｄにおいて、ＳＰ０の処理を開始する。次いで、ステップ６０３ｄにおいてＳＰ１の処理を開始し、フラグ［１］をセットする。次いで、ステップ６０４ｄにおいて、ＳＰ２の処理を開始する。次いで、ステップ６０５ｄにおいてＳＰ３の処理を開始し、フラグ［３］をセットする。
【０１１２】
図２１は、ＭＰ１に対する処理を示すフローチャートである。
ステップ６１１において、フラグ［１］がセットされている（＝１）か否かを判定する。そして、フラグ［１］がセットされると、次のステップ６１２に移行する。つまり、フラグ［１］がセットされるまで待機する。
【０１１３】
ステップ６１２において、ＭＰ１に含まれるＳＭＢ（パーティション）のサイズを判定する。そして、判定したサイズに応じて、ステップ６１３ａ，６１３ｂ，６１３ｃ，６１３ｄの何れかに移行する。
【０１１４】
サイズが「８×８」の場合、ＳＰ４が含まれる。従って、ステップ６１３ａにおいてＳＰ４の処理を開始し、フラグ［６］をセットする。
サイズが「８×４」の場合、ＭＰ１はＳＰ４とＳＰ６を含む。従って、ステップ６１３ｂにおいて、ＳＰ４の処理を開始する。次いで、ステップ６１４ｂにおいて、フラグ［３］がセットされている（＝１）か否かを判定し、フラグ［３］がセットされるまで待機する。フラグ［３］がセットされると、ステップ６１５ｂにおいてＳＰ６の処理を開始し、フラグ［６］をセットする。
【０１１５】
サイズが「４×８」の場合、ＭＰ１はＳＰ４とＳＰ５を含む。従って、ステップ６１３ｃにおいて、ＳＰ４の処理を開始し、フラグ［６］をセットする。次いで、ステップ６１４ｃにおいてＳＰ５の処理を開始する。
【０１１６】
サイズが「４×４」の場合、ＭＰ１はＳＰ４〜ＳＰ７を含む。従って、ステップ６１３ｄにおいて、ＳＰ４の処理を開始する。次いで、ステップ６１４ｄにおいて、ＳＰ５の処理を開始する。次いで、ステップ６１５ｄにおいてＳＰ６の処理を開始し、フラグ［６］をセットする。次いで、ステップ６１６ｄにおいてＳＰ７の処理を開始する。
【０１１７】
図２２は、ＭＰ２に対する処理を示すフローチャートである。
ステップ６２１において、フラグ［３］がセットされている（＝１）か否かを判定する。そして、フラグ［３］がセットされると、次のステップ６２２に移行する。つまり、フラグ［３］がセットされるまで待機する。
【０１１８】
ステップ６２２において、ＭＰ２に含まれるＳＭＢ（パーティション）のサイズを判定する。そして、判定したサイズに応じて、ステップ６２３ａ，６２３ｂ，６２３ｃ，６２３ｄの何れかに移行する。
【０１１９】
サイズが「８×８」の場合、ＳＰ８が含まれる。ステップ６２３ａにおいて、フラグ［６］がセットされている（＝１）か否かを判定し、フラグ［６］がセットされるまで待機する。フラグ［６］がセットされると、ステップ６２４ａにおいてＳＰ８の処理を開始し、フラグ［９］，［１１］をセットする。
【０１２０】
サイズが「８×４」の場合、ＭＰ２はＳＰ８とＳＰ１０を含む。ステップ６２３ｂにおいて、フラグ［６］がセットされている（＝１）か否かを判定し、フラグ［６］がセットされるまで待機する。フラグ［６］がセットされると、ステップ６２４ｂにおいて、ＳＰ８の処理を開始し、フラグ［９］をセットする。次いで、ステップ６２５ｂにおいてＳＰ１０の処理を開始し、フラグ［１１］をセットする。
【０１２１】
サイズが「４×８」の場合、ＭＰ２はＳＰ８とＳＰ９を含む。ステップ６２３ｃにおいて、ＳＰ８の処理を開始する。次いで、ステップ６２４ｃにおいて、フラグ［６］がセットされている（＝１）か否かを判定し、フラグ［６］がセットされるまで待機する。フラグ［６］がセットされると、ステップ６２５ｃにおいてＳＰ９の処理を開始し、フラグ［９］，［１１］をセットする。
【０１２２】
サイズが「４×４」の場合、ＭＰ２はＳＰ８〜ＳＰ１１を含む。ステップ６２３ｄにおいて、ＳＰ８の処理を開始する。次いで、ステップ６２４ｄにおいて、ＳＰ９の処理を開始し、フラグ［９］をセットする。次いで、ステップ６２５ｄにおいてＳＰ１０の処理を開始する。次いで、ステップ６２６ｄにおいてＳＰ１１の処理を開始し、フラグ［１１］をセットする。
【０１２３】
図２３は、ＭＰ３に対する処理を示すフローチャートである。
ステップ６３１において、フラグ［９］がセットされている（＝１）か否かを判定する。そして、フラグ［９］がセットされると、次のステップ６３２に移行する。つまり、フラグ［９］がセットされるまで待機する。
【０１２４】
ステップ６３２において、ＭＰ３に含まれるＳＭＢ（パーティション）のサイズを判定する。そして、判定したサイズに応じて、ステップ６３３ａ，６３３ｂ，６３３ｃ，６３３ｄの何れかに移行する。
【０１２５】
サイズが「８×８」の場合、ＳＰ１２が含まれる。従って、ステップ６３３ａにおいてＳＰ１２の処理を開始する。
サイズが「８×４」の場合、ＭＰ３はＳＰ１２とＳＰ１４を含む。従って、ステップ６３３ｂにおいて、ＳＰ１２の処理を開始する。次いで、ステップ６３４ｂにおいて、フラグ［１１］がセットされている（＝１）か否かを判定し、フラグ［１１］がセットされるまで待機する。フラグ［１１］がセットされると、ステップ６３５ｂにおいてＳＰ１４の処理を開始する。
【０１２６】
サイズが「４×８」の場合、ＭＰ３はＳＰ１２とＳＰ１３を含む。従って、ステップ６３３ｃにおいて、ＳＰ１２の処理を開始する。次いで、ステップ６３４ｃにおいてＳＰ１３の処理を開始する。
【０１２７】
サイズが「４×４」の場合、ＭＰ３はＳＰ１２〜ＳＰ１５を含む。従って、ステップ６３３ｄにおいて、ＳＰ１２の処理を開始する。次いで、ステップ６３４ｄにおいて、ＳＰ１３の処理を開始する。次いで、ステップ６３５ｄにおいてＳＰ１４の処理を開始する。次いで、ステップ６３６ｄにおいてＳＰ１５の処理を開始する。
【０１２８】
次に、ＭＰの構成と、ＭＰに含まれるＳＰの処理順序及びフラグの設定のタイミングを説明する。
先ず、ＭＰ０について説明する。
【０１２９】
図２４（ａ）に示すように、ＭＰ０の分割サイズを「８×８」とする。この場合、図２４（ｂ）に示すように、ＳＰ０を処理し、フラグ［１］，［３］をセットする。
図２５（ａ）に示すように、ＭＰ０の分割サイズを「８×４」とする。この場合、図２５（ｂ）に示すように、ＳＰ０を処理し、フラグ［１］をセットする。次いで、ＳＰ２を処理し、フラグ［３］をセットする。
【０１３０】
図２６（ａ）に示すように、ＭＰ０の分割サイズを「４×８」とする。この場合、図２６（ｂ）に示すように、ＳＰ０を処理し、フラグ［１］，［３］をセットする。次いで、ＳＰ１を処理する。
【０１３１】
図２７（ａ）に示すように、ＭＰ０の分割サイズを「４×４」とする。この場合、図２７（ｂ）に示すように、ＳＰ０を処理する。次いで、ＳＰ１を処理し、フラグ［１］をセットする。次いで、ＳＰ２を処理する。次いで、ＳＰ３を処理し、フラグ［３］をセットする。
【０１３２】
次に、ＭＰ１について説明する。
図２８（ａ）に示すように、ＭＰ０の分割サイズを「４×４」、ＭＰ１の分割サイズを「８×８」とする。この場合、図２８（ｂ）に示すように、フラグ［１］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ４を処理し、フラグ［６］をセットする。
【０１３３】
図２９（ａ）に示すように、ＭＰ０の分割サイズを「４×４」、ＭＰ１の分割サイズを「８×４」とする。この場合、図２９（ｂ）に示すように、フラグ［１］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ４を処理する。次いで、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ６を処理し、フラグ［６］をセットする。
【０１３４】
図３０（ａ）に示すように、ＭＰ０の分割サイズを「４×４」、ＭＰ１の分割サイズを「４×８」とする。この場合、図３０（ｂ）に示すように、フラグ［１］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ４を処理し、フラグ［６］をセットする。次いで、ＳＰ５を処理する。
【０１３５】
図３１（ａ）に示すように、ＭＰ０の分割サイズを「４×４」、ＭＰ１の分割サイズを「４×４」とする。この場合、図３１（ｂ）に示すように、フラグ［１］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ４を処理する。次いで、ＳＰ５を処理する。次いで、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ６を処理し、フラグ［６］をセットする。次いで、ＳＰ７を処理する。
【０１３６】
図３２（ａ）に示すように、ＭＰ０の分割サイズを「８×８」、ＭＰ１の分割サイズを「８×４」とする。この場合、図３２（ｂ）に示すように、フラグ［１］がセットされる（図２４（ｂ）参照）まで待機し、ＳＰ４を処理する。フラグ［３］はＳＰ０の処理においてセットされている（図２４（ｂ）参照）ため、ＳＰ４に続いてＳＰ６を処理し、フラグ［６］をセットする。
【０１３７】
次に、ＭＰ２について説明する。
図３３（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ２の分割サイズを「８×８」とする。この場合、図３３（ｂ）に示すように、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機する。次いで、フラグ［６］がセットされる（図３１（ｂ）参照）まで待機し、ＳＰ８を処理し、フラグ［９］、「１１」をセットする。
【０１３８】
図３４（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ２の分割サイズを「８×４」とする。この場合、図３４（ｂ）に示すように、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機する。次いで、フラグ［６］がセットされる（図３１（ｂ）参照）まで待機し、ＳＰ８を処理し、フラグ［９］をセットする。次いで、ＳＰ１０を処理し、フラグ［１１］をセットする。
【０１３９】
図３５（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ２の分割サイズを「４×８」とする。この場合、図３５（ｂ）に示すように、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ８を処理する。つまり、ＳＰ３に続いてＳＰ８を処理する。次いで、フラグ［６］がセットされる（図３１（ｂ）参照）まで待機し、ＳＰ９を処理し、フラグ［９］，［１１］をセットする。
【０１４０】
図３６（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ２の分割サイズを「４×４」とする。この場合、図３６（ｂ）に示すように、フラグ［３］がセットされる（図２７（ｂ）参照）まで待機し、ＳＰ８を処理する。次いで、ＳＰ９を処理し、不ラブ［９］をセットする。次いで、ＳＰ１０を処理する。次いで、ＳＰ１１を処理し、フラグ［１１］をセットする。つまり、ＳＰ３に続いてＳＰ８〜ＳＰ１１を連続的に処理する。
【０１４１】
次に、ＭＰ３について説明する。
図３７（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ３の分割サイズを「８×８」とする。この場合、図３７（ｂ）に示すように、フラグ［９］がセットされる（図３６（ｂ）参照）まで待機し、ＳＰ１２を処理する。
【０１４２】
図３８（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ３の分割サイズを「８×４」とする。この場合、図３８（ｂ）に示すように、フラグ［９］がセットされる（図３６（ｂ）参照）まで待機し、ＳＰ１２を処理する。次いで、フラグ［１１］がセットされる（図３１（ｂ）参照）まで待機し、ＳＰ１４を処理する。
【０１４３】
図３９（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ３の分割サイズを「４×８」とする。この場合、図３９（ｂ）に示すように、フラグ［９］がセットされる（図３６（ｂ）参照）まで待機し、ＳＰ１２を処理する。次いで、ＳＰ１３を処理する。
【０１４４】
図４０（ａ）に示すように、ＭＰ１の分割サイズを「４×４」、ＭＰ３の分割サイズを「４×４」とする。この場合、図４０（ｂ）に示すように、フラグ［９］がセットされる（図３６（ｂ）参照）まで待機し、ＳＰ１２を処理する。次いで、ＳＰ１３を処理する。次いで、ＳＰ１４を処理する。次いで、ＳＰ１５を処理する。
【０１４５】
次に、各ＭＰにおいて、分割サイズが異なる場合について説明する。
図４１（ａ）に示すように、ＭＢは、ＭＰ０の分割サイズが「４×４」、ＭＰ１の分割サイズが「８×４」、ＭＰ２の分割サイズが「４×８」、ＭＰ３の分割サイズが「８×８」、設定されている。従って、このＭＢは、ＳＰ０〜ＳＰ４，ＳＰ６，ＳＰ８，ＳＰ９，ＳＰ１２を含む。そして、全てのＳＰは前方を参照し、後方を参照するＳＰは無い。
【０１４６】
このようなＭＢの場合、図１０のステップ５０１において「ＹＥＳ」と判定され、ステップ５１１において連続ＭＰ並列演算処理される。
図４１（ｂ）に示すように、ＳＰ０〜ＳＰ３（ＭＰ０）とＳＰ８，ＳＰ９（ＭＰ２）を（Ａ）演算部４０６ａに振り分け、ＳＰ４，ＳＰ６（（ＭＰ１）とＳＰ１２（ＭＰ３）を（Ｂ）演算部４０６ｂに振り分ける。
【０１４７】
次に、ＭＰ０において、ＳＰ０〜ＳＰ３の逐次処理し、フラグ［１］，［３］をセットする（図２７（ｂ）参照）。
ＭＰ１において、フラグ［１］がセットされると、ＳＰ４を処理する。次いで、フラグ［３］がセットされると、ＳＰ６を処理し、フラグ［６］をセットする（図２９（ｂ）参照）。
【０１４８】
ＭＰ２において、フラグ［３］がセットされると、ＳＰ８を処理する。次いで、フラグ［６］がセットされると、ＳＰ９を処理し、フラグ［９］，［１１］をセットする（図３５（ｂ）参照）。
【０１４９】
ＭＰ３において、フラグ［９］がセットされると、ＳＰ１２を処理する。
各ＳＰにおける処理時間は変わらないため、図４１（ａ）に示すケースの処理時間は、５６サイクル（＝７×８）となる。これに対し、従来例では、７２サイクル（＝９×８）必要とする。従って、図４１（ａ）に示すケースの処理時間は、従来例の約７７．７％となり、短縮される。
【０１５０】
以上記述したように、本実施形態によれば、以下の効果を奏する。
（１）第１及び第２のＭＶ演算部４０６ａ，４０６ｂは、それぞれ参照ブロックのＭＶに基づいて対象ブロックのＭＶを生成する。解析部４０１は、マクロブロックタイプ及びサブマクロブロックタイプを解析し、その解析結果を出力する。振り分け制御部４０２は、解析部４０１の解析結果に基づいて、基本マクロブロックを分割した各パーティションの参照方向を判定し、一つのフレームを参照するパーティションが連続する場合にその連続する複数のパーティションを第１のＭＶ演算部４０６ａと第２のＭＶ演算部４０６ｂに振り分けるようにした。
【０１５１】
各演算部４０６ａ，４０６ｂに振り分けたＳＰについて、それぞれ独立して演算が可能であるため、２つのＳＰに対する演算を並列して行うことにより、ＭＶ演算に係る時間を短縮することができる。
【０１５２】
（２）演算開始判定部４０３は、解析部４０１の解析結果に基づいて、演算部４０６ａ，４０６ｂの処理開始を判定し、判定結果に応じて演算部４０６ａ，４０６ｂの演算開始を制御する。従って、演算部４０６ａ，４０６ｂの演算開始を例えば同時にすることで、ＭＶ演算に係る時間を短縮することができる。
【０１５３】
（３）演算開始判定部４０３は、連続する２つのＭＰの参照方向が同じ場合に、複数の前記演算部における演算開始を、ＭＰの処理順序に応じて制御する。従って、演算部４０６ａ，４０６ｂの演算が並列に行われる分だけ、ＭＶ演算に係る時間を短縮することができる。
【０１５４】
（４）演算開始判定部４０３は、連続する２つのＭＰが一つのフレームを参照し、且つ参照方向が異なる場合に、２つのＭＶ演算部４０６ａ，４０６ｂにおける演算をそれぞれ開始させる。参照するフレームが異なる場合、各演算部４０６ａ，４０６ｂに振り分けたＭＰについて、それぞれ独立して演算が可能であるため、２つのＭＰに対する演算を同時に行うことにより、ＭＶ演算に係る時間を短縮することができる。
【０１５５】
（５）各パーティションは、分割サイズに応じた少なくとも１つのサブパーティションを含む。フラグ制御部４０７は、処理中のパーティションについて、そのパーティションの分割サイズに応じて、次に処理するパーティションが参照するサブパーティションの処理に応じてフラグをセットする。フラグのセットにより、次のＭＰに対する演算を開始することができる。従って、フラグのセットと監視により、各演算部４０６ａ，４０６ｂおける処理を容易に並列的とすることができる。
【０１５６】
尚、上記実施形態は、以下の態様で実施してもよい。
・上記実施形態では、参照するフレームが前方（Ｆ）か後方（Ｂ）かに応じて処理を第１及び第２のＭＶ演算部４０６ａ，４０６ｂに振り分けるようにしたが、参照するフレームは、前方と後方に限らず、前方の２つのフレーム、後方の２つのフレームを参照場合でもよい。つまり、２つのフレームを参照するか、１つのフレームを参照する場合には同一のフレームを参照するか異なるフレームを参照するかを判定して処理を振り分けるようにしてもよい。
【０１５７】
・上記実施形態は、ＭＶ生成部４０が、各ＭＶ演算部４０６ａ，４０６ｂについて、演算の開始を判定する演算開始判定部４０３を含む構成としたが、演算開始判定部を省略してもよい。例えば、各ＭＶ演算部４０６ａ，４０６ｂが、互いに処理の終了を通知する構成とし、処理対象のＭＰに対して所定のＳＰの処理終了に応じて処理を開始するようにしてもよい。
【符号の説明】
【０１５８】
４０  動きベクトル生成部（動きベクトル生成回路）
４０１  解析部
４０２  振り分け制御部
４０３  演算開始判定部
４０６ａ  動きベクトル演算部（ＭＶ演算部）
４０６ｂ  動きベクトル演算部（ＭＶ演算部）
４０７  フラグ制御部
【図１】
0005482414.tif 000002
【図２】
0005482414.tif 000003
【図３】
0005482414.tif 000004
【図４】
0005482414.tif 000005
【図５】
0005482414.tif 000006
【図６】
0005482414.tif 000007
【図７】
0005482414.tif 000008
【図８】
0005482414.tif 000009
【図９】
0005482414.tif 000010
【図１０】
0005482414.tif 000011
【図１１】
0005482414.tif 000012
【図１２】
0005482414.tif 000013
【図１３】
0005482414.tif 000014
【図１４】
0005482414.tif 000015
【図１５】
0005482414.tif 000016
【図１６】
0005482414.tif 000017
【図１７】
0005482414.tif 000018
【図１８】
0005482414.tif 000019
【図１９】
0005482414.tif 000020
【図２０】
0005482414.tif 000021
【図２１】
0005482414.tif 000022
【図２２】
0005482414.tif 000023
【図２３】
0005482414.tif 000024
【図２４】
0005482414.tif 000025
【図２５】
0005482414.tif 000026
【図２６】
0005482414.tif 000027
【図２７】
0005482414.tif 000028
【図２８】
0005482414.tif 000029
【図２９】
0005482414.tif 000030
【図３０】
0005482414.tif 000031
【図３１】
0005482414.tif 000032
【図３２】
0005482414.tif 000033
【図３３】
0005482414.tif 000034
【図３４】
0005482414.tif 000035
【図３５】
0005482414.tif 000036
【図３６】
0005482414.tif 000037
【図３７】
0005482414.tif 000038
【図３８】
0005482414.tif 000039
【図３９】
0005482414.tif 000040
【図４０】
0005482414.tif 000041
【図４１】
0005482414.tif 000042