(57)【要約】【課題】動きベクタ演算装置及びその方法を提供する。【解決手段】本発明の動きベクタ演算装置は、マクロブロック内の下側ブロックグループの動きベクタを貯蔵するための第１のバンク及び第２のバンクから構成される上側メモリと、マクロブロック内の右側ブロックグループの動きベクタを貯蔵するための左側メモリと、動作モードそして現在ブロックのスーパーマクロブロック内の位置によって上側メモリの第１／２のバンク及び左側メモリに貯蔵された動きベクタを参照して現在ブロックの動きベクタを予測する予測器と、を含む。これにより、ノーマルモードだけではなく、ＭＢＡＦＦモードでも動き補償過程で遂行される動きベクタ予測を効率的に遂行できる。特に、周辺マクロブロックの動きベクタを貯蔵する上側メモリを効果的に構造化してメモリのサイズを最小化することができる。【選択図】図１３
2006166459.tif 000002
【特許請求の範囲】
【請求項１】
マクロブロック内の下側ブロックグループの動きベクタを貯蔵するための第１のバンク及び第２のバンクから構成される上側メモリと；
マクロブロック内の右側ブロックグループの動きベクタを貯蔵するための左側メモリ；そして
動作モードそして現在ブロックのスーパーマクロブロック内の位置によって前記上側メモリの第１／２のバンク及び前記左側メモリに貯蔵された動きベクタを参照して前記現在ブロックの動きベクタを予測する予測器と；
を含むことを特徴とする動きベクタ演算装置。
【請求項２】
前記現在ブロックの前記予測された動きベクタと動きベクタ差を足して動きベクタを出力する加算器をさらに含むことを特徴とする請求項１に記載の動きベクタ演算装置。
【請求項３】
前記予測器は、
前記現在スーパーマクロブロック内のブロックについての前記加算器から出力される動きベクタを貯蔵するためのレジスターを含むことを特徴とする請求項２に記載の動きベクタ演算装置。
【請求項４】
前記動きベクタ演算装置は、ＭＢＡＦＦモードで動作することを特徴とする請求項３に記載の動きベクタ演算装置。
【請求項５】
前記スーパーマクロブロックは、第１及び第２のマクロブロックを含むことを特徴とする請求項４に記載の動きベクタ演算装置。
【請求項６】
前記第１及び第２のマクロブロックは、縦方向に隣接したマクロブロックの対であることを特徴とする請求項５に記載の動きベクタ演算装置。
【請求項７】
前記予測器は、
前記現在ブロックが前記第１のマクロブロックに属するとき、前記加算器から出力される動きベクタが前記上側メモリの前記第１のバンクに貯蔵されるように制御することを特徴とする請求項６に記載の動きベクタ演算装置。
【請求項８】
前記現在ブロックが前記第２のマクロブロックに属するとき、前記加算器から出力される動きベクタが前記上側メモリの前記第２のバンクに貯蔵されるように制御すること
を特徴とする請求項７に記載の動きベクタ演算装置。
【請求項９】
前記上側メモリの前記第１及び第２のバンクそれぞれのサイズは、
（（ｗ×ａ＋１）×ｓ）であり、
ｗは、一つのフレームの横方向のマクロブロックの数、
ａは、一つのマクロブロック内の横方向のブロックの数、そして
ｓは、動きベクタサイズであることを特徴とする請求項８に記載の動きベクタ演算装置。
【請求項１０】
前記上側メモリの前記第１のバンクは、
前記スーパーマクロブロックの左上側スーパーマクロブロックの第１のマクロブロックの下側ブロックグループの最後ブロックから左側スーパーマクロブロックの第１のマクロブロックの下側ブロックグループまでの動きベクタを貯蔵することを特徴とする請求項９に記載の動きベクタ演算装置。
【請求項１１】
前記上側メモリの前記第２のバンクは、
前記スーパーマクロブロックの左上側スーパーマクロブロックの第２のマクロブロックの下側ブロックグループの最後ブロックから左側スーパーマクロブロックの第２のマクロブロックの下側ブロックグループまでの動きベクタを貯蔵することを特徴とする請求項１０に記載の動きベクタ演算装置。
【請求項１２】
前記左上側スーパーマクロブロックは、前記スーパーマクロブロックと左側対角線方向に隣接したスーパーマクロブロックであることを特徴とする請求項１１に記載の動きベクタ演算装置。
【請求項１３】
前記左側スーパーマクロブロックは、前記スーパーマクロブロックと左側方向に隣接したスーパーマクロブロックであることを特徴とする請求項１２に記載の動きベクタ演算装置。
【請求項１４】
前記予測器は、
開始アドレス、バンクアドレス及びオフセットアドレスを含むアドレスを発生して前記上側メモリをアクセスすることを特徴とする請求項１３に記載の動きベクタ演算装置。
【請求項１５】
前記開始アドレスは、スーパーマクロブロック毎に増加されることを特徴とする請求項１４に記載の動きベクタ演算装置。
【請求項１６】
前記開始アドレスは、前記マクロブロックの前記下側ブロックグループに含まれたブロックの数ほどずつ増加されることを特徴とする請求項１５に記載の動きベクタ演算装置。
【請求項１７】
前記開始アドレスが前記バンクサイズより大きいとき前記開始アドレスは、（開始アドレス−バンクサイズ）に再設定されることを特徴とする請求項１６に記載の動きベクタ演算装置。
【請求項１８】
前記バンクアドレスは、前記上側メモリの前記第１及び第２のバンクを選択するためのアドレスであることを特徴とする請求項１７に記載の動きベクタ演算装置。
【請求項１９】
前記オフセットアドレスは、前記マクロブロック内のブロックのサイズによって設定されることを特徴とする請求項１８に記載の動きベクタ演算装置。
【請求項２０】
前記オフセットアドレスは、周辺ブロックの位置によって設定されること
を特徴とする請求項１９に記載の動きベクタ演算装置。
【請求項２１】
前記アドレスは、
前記開始アドレス、前記バンクのアドレス及び前記オフセットアドレスの和であることを特徴とする請求項２０に記載の動きベクタ演算装置。
【請求項２２】
前記予測器は、
前記加算器から出力される動きベクタが前記上側メモリの前記アドレスが指定する位置に貯蔵されるように制御することを特徴とする請求項２１に記載の動きベクタ演算装置。
【請求項２３】
前記左側メモリは、
前記スーパーマクロブロックの前記左側スーパーマクロブロックの右側ブロックグループの動きベクタを貯蔵することを特徴とする請求項２２に記載の動きベクタ演算装置。
【請求項２４】
前記動きベクタ演算装置は、ノーマルモードで動作することを特徴とする請求項２３に記載の動きベクタ演算装置。
【請求項２５】
前記スーパーマクロブロックは、第１のマクロブロックを含むことを特徴とする請求項２４に記載の動きベクタ演算装置。
【請求項２６】
前記予測器は、
前記上側メモリの前記第１のバンク及び前記左側メモリに貯蔵された動きベクタそして前記スーパーマクロブロックの既に求められた動きベクタを参照して前記スーパーマクロブロック内の現在ブロックの動きベクタを予測することを特徴とする請求項２５に記載の動きベクタ演算装置。
【請求項２７】
前記予測器は、
前記加算器から出力される動きベクタが前記上側メモリの前記第１のバンクに貯蔵されるように制御することを特徴とする請求項２６に記載の動きベクタ演算装置。
【請求項２８】
第１及び第２のバンクを含む上側メモリ、左側メモリそして現在スーパーマクロブロックの動きベクタを貯蔵するためのレジスターを含む動きベクタ演算装置の動きベクタ演算方法であって、
動作モードそして現在ブロックの現在スーパーマクロブロック内の位置によって前記上側メモリの第１／２のバンク、前記左側メモリそして前記レジスターに貯蔵された動きベクタを参照して前記現在ブロックの動きベクタを計算する段階；および
前記動作モードそして前記現在ブロックの前記現在スーパーマクロブロック内の位置によって前記動きベクタを上側メモリの前記第１／２のバンク又は前記左側メモリに貯蔵する段階；
を含むことを特徴とする動きベクタ演算方法。
【請求項２９】
前記動きベクタを計算する段階は、
前記上側メモリ及び前記左側メモリに貯蔵された動きベクタ及び前記現在スーパーマクロブロック内既に求められた動きベクタを参照して前記現在ブロックの動きベクタを予測する段階；および
前記予測された動きベクタと動きベクタ差を足して前記現在ブロックの動きベクタを出力する段階；
を含むことを特徴とする請求項２８に記載の動きベクタ演算方法。
【請求項３０】
前記動きベクタ演算方法は、ＭＢＡＦＦモードで動作することを特徴とする請求項２９に記載の動きベクタ演算方法。
【請求項３１】
前記スーパーマクロブロックは、第１のマクロブロック及び第２のマクロブロックを含むことを特徴とする請求項３０に記載の動きベクタ演算方法。
【請求項３２】
前記第１及び第２のマクロブロックは、縦方向に隣接したマクロブロックの対であることを特徴とする請求項３１に記載の動きベクタ演算方法。
【請求項３３】
前記貯蔵段階は、
前記現在ブロックが前記スーパーマクロブロックの前記第１のマクロブロックの下側ブロックグループに属するとき前記現在ブロックの前記計算された動きベクタを前記上側メモリの前記第１のバンクに貯蔵する段階；および
前記現在ブロックが前記スーパーマクロブロックの前記第２のマクロブロックの下側ブロックグループに属するとき前記現在ブロックの前記計算された動きベクタを前記上側メモリの前記第２のバンクに貯蔵する段階；
を含むことを特徴とする請求項３２に記載の動きベクタ演算方法。
【請求項３４】
前記貯蔵段階は、
前記現在ブロックが前記マクロブロックの右側ブロックグループに属するとき前記現在ブロックの動きベクタを前記左側メモリに貯蔵する段階を含むことを特徴とする請求項３３に記載の動きベクタ演算方法。
【請求項３５】
前記上側メモリの前記第１及び第２のバンクそれぞれのサイズは、
（（ｗ×ａ＋１）×ｓ）であり、
ｗは、一つのフレームの横方向のマクロブロックの数、
ａは、一つのマクロブロック内の横方向のブロックの数、そして
ｓは、動きベクタサイズであることを特徴とする請求項３４に記載の動きベクタ演算方法。
【請求項３６】
前記上側メモリをアクセスするためのアドレスを発生する段階をさらに含むことを特徴とする請求項３５に記載の動きベクタ演算方法。
【請求項３７】
前記アドレスは、
開始アドレス、バンクアドレス及びオフセットアドレスを含むことを特徴とする請求項３６に記載の動きベクタ演算方法。
【請求項３８】
前記バンクアドレスは、前記上側メモリの前記第１及び第２のバンクを選択するためのアドレスであることを特徴とする請求項３７に記載の動きベクタ演算方法。
【請求項３９】
前記開始アドレスは、マクロブロック毎に増加されることを特徴とする請求項３８に記載の動きベクタ演算方法。
【請求項４０】
前記開始アドレスは、前記マクロブロックの前記下側ブロックグループに含まれたブロックの数ほどずつ増加されることを特徴とする請求項３９に記載の動きベクタ演算方法。
【請求項４１】
前記開始アドレスが前記バンクサイズより大きいとき前記開始アドレスは、（開始アドレス−バンクサイズ）に再設定されることを特徴とする請求項４０に記載の動きベクタ演算方法。
【請求項４２】
前記オフセットアドレスは、前記マクロブロック内のブロックのサイズによって設定されることを特徴とする請求項４１に記載の動きベクタ演算方法。
【請求項４３】
前記アドレスは、
前記開始アドレス、前記バンクのアドレス及び前記オフセットアドレスの和であることを特徴とする請求項４２に記載の動きベクタ演算方法。
【請求項４４】
前記動きベクタを予測する段階は、
前記現在ブロックの右上側ブロックが有効であり、前記現在ブロックが前記第１のマクロブロックの上側ブロックグループに属するとき、前記上側メモリに貯蔵された上側ブロック及び前記右上側ブロックの動きベクタを読み出して上側動きベクタと右上側動きベクタにそれぞれ取る段階を含むことを特徴とする請求項４３に記載の動きベクタ演算方法。
【請求項４５】
前記動きベクタを予測する段階は、
前記現在ブロックの右上側ブロックが有効であり、前記現在ブロックが前記第１のマクロブロックの前記上側ブロックグループに属するとき、前記レジスターに貯蔵された前記上側ブロックの動きベクタ及び前記右上側ブロックの動きベクタを前記上側動きベクタと前記右上側動きベクタにそれぞれ取る段階をさらに含むことを特徴とする請求項４４に記載の動きベクタ演算方法。
【請求項４６】
前記動きベクタを予測する段階は、
前記現在ブロックの右上側ブロックが有効ではなく、前記現在ブロックが前記第１のマクロブロックの前記上側ブロックグループに属するとき、前記上側メモリに貯蔵された上側ブロック及び左上側ブロックの動きベクタを読み出して上側動きベクタと左上側動きベクタにそれぞれ取る段階をさらに含むことを特徴とする請求項４５に記載の動きベクタ演算方法。
【請求項４７】
前記動きベクタを予測する段階は、
前記現在ブロックの右上側ブロックが有効ではなく、前記現在ブロックが前記第１のマクロブロックの上側ブロックグループに属するとき、前記レジスターに貯蔵された前記上側ブロックの上側動きベクタと前記左上側ブロックの動きベクタを前記上側動きベクタと前記左上側動きベクタにそれぞれ取る段階をさらに含むことを特徴とする請求項４６に記載の動きベクタ演算方法。
【請求項４８】
前記動きベクタを予測する段階は、
前記現在ブロックがマクロブロックの左側境界面に位置するとき、前記左側メモリに貯蔵された左側ブロックの動きベクタを左側動きベクタに取る段階をさらに含むことを特徴とする請求項４７に記載の動きベクタ演算方法。
【請求項４９】
前記動きベクタを予測する段階は、
前記現在ブロックがマクロブロックの左側境界面に位置しないとき、前記現在スーパーマクロブロック内の左側ブロックの動きベクタを左側動きベクタに取る段階をさらに含むことを特徴とする請求項４８に記載の動きベクタ演算方法。
【請求項５０】
前記動きベクタを予測する段階は、
前記上側動きベクタ、左／右上側動きベクタそして左側動きベクタに基づいて現在ブロックの動きベクタを予測する段階をさらに含むことを特徴とする請求項４９に記載の動きベクタ演算方法。
【請求項５１】
前記動きベクタ演算方法は、ノーマルモードで動作することを特徴とする請求項２９に記載の動きベクタ演算方法。
【請求項５２】
ノーマルモード間前記貯蔵段階は、
前記現在ブロックが前記マクロブロックの下側ブロックグループに属するとき、前記現在ブロックの前記計算された動きベクタを前記上側メモリの前記第１のバンクに貯蔵する段階を含むことを特徴とする請求項５１に記載の動きベクタ演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、映像処理装置に関するものであり、より詳しくは、ＭＢＡＦＦ（Ｍａｃｒｏ  Ｂｌｏｃｋ  Ａｄａｐｔｉｖｅ  Ｆｉｅｌｄ／Ｆｒａｍｅ）モードを支援する映像処理装置の動きベクタ演算装置及びその方法に関するものである。
【背景技術】
【０００２】
動画像信号の圧縮符号化及び復号化は、低速チャネル（ｌｏｗ  ｒａｔｅ  ｃｈａｎｎｅｌ）を通じた動画像情報の伝送を可能とするだけではなく、動画像を貯蔵することに要求されるメモリの容量を減少させることができるので、こうした圧縮符号化及び復号化技術は動画像の貯蔵（ｓｔｏｒａｇｅ）、伝送（ｔｒａｎｓｍｉｓｓｉｏｎ）などの応用を要求するマルチメディア産業における非常に重要な技術である。一方、マルチメディア産業の拡大と情報の互換性のためにこうした情報圧縮方法の標準化作業の必要性が台頭しながら現在まで多様な応用を中心に動画像標準化方案が設けられた。
【０００３】
国際電気通信連合（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｕｎｉｏｎ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓｔａｎｄａｒｄ  Ｓｅｃｔｏｒ；ＩＴＵ−Ｔ）は、有無線通信網環境で動画像サービスのための標準規格であるＨ．２６１とＨ．２６３とを制定し、世界標準化機構（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｔａｎｄａｒｄｉｚａｔｉｏｎ  Ｏｒｇａｎｉｚａｔｉｏｎ；ＩＳＯ）も動画像標準規格のＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔ  Ｇｒｏｕｐ）−１、ＭＰＥＧ−２、ＭＰＥＧ−４を設けるなど世界的な標準化論議が活発であった。Ｈ．２６３＋とＭＰＥＧ−４標準が開発された後、無線通信が急激に拡大されつつ従前圧縮方法に比べてさらに向上された圧縮効率を提供し、多様な通信環境を受容できる動画像圧縮技術規格の必要性が発生した。故にＩＴＵは、Ｈ．２６Ｌと命名された次世代符号化方式の‘技術提案要請書’を発表し、各企業体、研究所及び学界によって活発な研究が進行された。２００１年のＨ．２６Ｌプロジェクト以降、２００３年５月にＩＴＵ−Ｔは、Ｈ．２６４の標準を承認し、引き続き２００３年８月のＩＳＯ／ＩＥＣでＭＰＥＧ−４  Ｐａｒｔ  １０をついに承認した。
【０００４】
ＩＴＵ−ＴとＩＳＯが共同制定した次世代動画像圧縮標準Ｈ．２６４は多様なネットワーク環境に容易に応ずることができる柔軟性と動画像の符号化効率性側面でＭＰＥＧ−２、ＭＰＥＧ−４（Ｐａｒｔ２）など既存技術標準に比べて多くの進歩があった。標準化及び具現過程に参与したエンジニアの評価によれば、Ｈ．２６４のデータ圧縮率は、現在ＤＶＤシステムに使用されたＭＰＥＧ−２の２〜３倍であり、ＭＰＥＧ−４よりは１．５〜２倍以上高いという。新しい技術を用いれば、ＤＶＤと同一な画質を約２Ｍｂｐｓのコーディング率で得ることができ、１Ｍｂｐｓでは家庭用ＶＣＲのような画質を得ることができる。
【０００５】
実際製品とサービスにこの技術を適用すれば、映像データ容量を大幅に縮めながらデータ伝送率を低めることができる。ＭＰＥＧ−２は、ディジタル放送に多く使用され、ＭＰＥＧ−４は携帯電話用映像伝送に使用されるが、Ｈ．２６４はさらに高い圧縮率を必要とするアプリケーションに先ず使用されることと見える。
【０００６】
一般に動画像コーディング方法では、全体映像単位に動き予測及び補償を行う代わりに、一定したサイズの画素、すなわち横方向にＭ画素、縦方向にＮ画素の集合単位（ＭｘＮ表記）に動き予測及び補償を遂行するが、こうした画素の集合をマクロブロック（Ｍａｃｒｏｂｌｏｃｋ）という。一般に動画像コーディング方法では、マクロブロックのサイズを横に１６画素、縦に１６画素（１６×１６表記）に規定する。
【０００７】
一方、Ｈ．２６４／ＡＶＣ又はＭＰＥＧ−４  Ｐａｒｔ  １０のような次世代動画像圧縮技術での動き予測及び補償はより小さい画素集合単位に遂行する。１６×１６マクロブロックサイズから１６×８、８×１６、８×８ブロックサイズまでマクロブロックモードタイプが決定され、８×８モードは再び８×４、４×８、４×４単位までサブモードタイプが決定される。従って、一つのマクロブロック内のブロックサイズが全て４×４単位である場合最大１６個の動きベクタを有し、各ブロック別に動き推定及び予測を遂行しなければならない。
【０００８】
図１は、現在ブロックＥについての動きベクタとこの動きベクタの予測に使用される周辺ブロックＡ，Ｂ，Ｃ及びＤの位置とそれぞれの動きベクタを示す。現在ブロックＥの動きベクタは、周辺ブロックＡ，Ｂ，Ｃ（或いはＤ）の各動きベクタを用いて求める。
【０００９】
以下、本明細書で周辺ブロックＡ，Ｂ，Ｃ及びＤの位置は現在ブロックＥを中心に図１に示されたようであり、現在ブロックの動きベクタはＭＶ＿Ｅ、周辺ブロックＡの動きベクタはＭＶ＿Ａ、周辺ブロックＢの動きベクタはＭＶ＿Ｂ、周辺ブロックＣの動きベクタはＭＶ＿Ｃそして周辺ブロックＤの動きベクタはＭＶ＿Ｄに表記する。
【００１０】
現在ブロックの動きベクタを予測するため使用される周辺ブロックの動きベクタは、周辺マクロブロック内のブロックの動きベクタであるか、或いは現在ブロックの位置によっては現在マクロブロック内のブロックの動きベクタであっても良い。
【００１１】
図２Ａ〜図２Ｃは、現在ブロックのモードタイプと位置によって周辺ブロックの位置を示している。図２Ａは、現在マクロブロックＥが１６×１６モードである場合動きベクタを予測するため必要な周辺ブロックを示す。周辺ブロックＡ，Ｂ，Ｃ及びＤの動きベクタは、周辺マクロブロック内のブロックの動きベクタが使用される。図２Ｂ及び図２Ｃは、現在マクロブロックがそれぞれ１６×８モードである場合であって、マクロブロックはマクロブロックより小さい画素集合Ｅ０，Ｅ１に分けられる。ブロックＥ０の周辺ブロックＡ，Ｂ，Ｃ及びＤの動きベクタは、１６×１６モードと同様に周辺マクロブロック内のブロックの動きベクタが使用され、ブロックＥ１の周辺ブロックＡ，Ｄの動きベクタも周辺マクロブロック内のブロックの動きベクタを使用しているが、ブロックＥ１の周辺ブロックＢの動きベクタは上の場合とは違って、現在マクロブロック内のブロックＥ０で計算された動きベクタが使用される。
【００１２】
また、ブロックＣがコーディングしているスライス（Ｓｌｉｃｅ）の外部に存在するか、或いは図２Ｃで示したように、ブロックＥ１の周辺ブロックＣが現在コーディングするマクロブロック以後にコーディングされるマクロブロック内のブロックであれば、ＭＶ＿Ｃの代わりにＭＶ＿Ｄを使用してＭＶ＿ＡとＭＶ＿Ｂと共にブロックＥ１の動きベクタＭＶ＿Ｅを予測する。
【００１３】
このように、現在ブロックＥの動きベクタを予測するためには、周辺ブロックＡ，Ｂ，Ｃ及びＤの動きベクタが必要なので現在マクロブロックの以前にコーディングされたマクロブロック内のブロックの動きベクタを貯蔵していなければならない。
【００１４】
他方、Ｈ．２６４／ＡＶＣコーデック（Ｃｏｄｅｃ）は、コーディング効率を高めるためＭＢＡＦＦ(macroblock adaptive frame/field)モードを標準に採択した。図３Ａは、縦方向の二つのマクロブロックの対を一つのスーパーマクロブロックとしてコーディングしたＭＢＡＦＦモードの一例を示している。本明細書では、このように縦方向のマクロブロックの対をスーパーマクロブロックと称する。ＭＢＡＦＦモードではない場合、マクロブロックはフレーム（Ｆｒａｍｅ）モード又はフィールド（Ｆｉｅｌｄ）モードでのみコーディングされる反面に、ＭＢＡＦＦモードである場合には、スーパーマクロブロック単位にフレームモードとフィールドモードが混ぜられたコーディングが可能である。一般に、ノーマルモードはフレームモード又はノーマルモードのうちいずれか一つにコーディングすることをいう。
【００１５】
図３Ｂは、ノーマルモードでのスーパーマクロブロックを示している。図３Ａに示されたＭＢＡＦＦモードで、縦方向の二つのマクロブロックの対をスーパーマクロブロックと称したが、ノーマルモードでは一つのマクロブロックがスーパーマクロブロックに該当する。
【００１６】
図４は、スーパーマクロブロックがフィールドモードにコーディングされた場合とフレームモードにコーディングされた場合とを示している。スーパーマクロブロック内のマクロブロックがフィールドモードにコーディングされた場合、スーパーマクロブロックの上部（Ｔｏｐ）マクロブロックは、奇数画素ラインでのみ構成され、スーパーマクロブロックの下部（Ｂｏｔｔｏｍ）のマクロブロックは偶数画素ラインでのみ構成される。反面、スーパーマクロブロックがフレームモードにコーディングされれば、スーパーマクロブロックの上部及び下部マクロブロックは、奇数画素ラインと偶数画素ラインの分離なしで構成される。
【００１７】
一つの画面にフィールドモードにコーディングされたスーパーマクロブロックとフレームモードにコーディングされたスーパーマクロブロックが取り混ぜられている場合には、現在マクロブロックと周辺マクロブロックのフィールド／フレームコーディングの可否によって周辺ブロックの位置が変更され、これを求めるため複雑なインデキシング（Ｉｎｄｅｘｉｎｇ）過程が必要になる。言い換えれば、現在マクロブロックと周辺マクロブロックがフレームモードにコーディングされたか、そうでなければフィールドモードにコーディングされたか、そして現在マクロブロックが上部であるか、そうでなければ下部であるかによって現在ブロックＥの動きベクタを予測するため必要な周辺ブロックＡ，Ｂ，Ｃ及びＤの位置が変更されるためである。
【００１８】
図５Ａ〜図５Ｃは、現在マクロブロックと周辺マクロブロックのコーディングモードに応じる左側ブロックの動きベクタＭＶ＿Ａを示している。現在マクロブロックと左側マクロブロックが全てフレームモードにコーディングされたか、全てフィールドモードにコーディングされた場合、現在ブロックＥについての左側ブロックの動きベクタＭＶ＿Ａは、図５Ａのような方法に決定される。すなわち、矢印が示されるところに位置したブロックの動きベクタが現在ブロックＥについての左側ブロックの動きベクタＭＶ＿Ａである。
【００１９】
もし現在マクロブロックと左側マクロブロックのコーディングモードが相異なる方式である場合、すなわち現在マクロブロックがフレームモードにコーディングされ、左側マクロブロックがフィールドモードにコーディングされた場合、そして現在マクロブロックがフィールドモードにコーディングされ、左側マクロブロックがフレームモードにコーディングされたら、図５Ｂ及び図５Ｃのように現在ブロックＥの位置によって複雑なインデキシング過程を経た後左側ブロックの動きベクタＭＶ＿Ａが決定される。
【００２０】
図６Ａ〜図６Ｃは、現在マクロブロックと周辺マクロブロックのコーディング方式による上側ブロックの動きベクタ位置を示す。図６Ａ〜図６Ｃで、現在スーパーマクロブロック内の上部マクロブロックと下部マクロブロックとをそれぞれＥ＿ｔｏｐ、Ｅ＿ｂｏｔｔｏｍに表記し、上側スーパーマクロブロック内の上部マクロブロックと下部マクロブロックとをそれぞれＢ＿ｔｏｐ、Ｂ＿ｂｏｔｔｏｍに表記する。
【００２１】
図６Ａのように、現在スーパーマクロブロックがフレームモードにコーディングされたら、上側スーパーマクロブロックのコーディング方式に互いに関係なく現在スーパーマクロブロックの上部マクロブロックＥ＿ｔｏｐの上側動きベクタＭＶ＿Ｂは、上側スーパーマクロブロックの下部マクロブロックＢ＿ｂｏｔｔｏｍ内のブロックの動きベクタに決定され、現在スーパーマクロブロックの下部マクロブロックＥ＿ｂｏｔｔｏｍの上側動きベクタＭＶ＿Ｂは現在スーパーマクロブロックの上部マクロブロックＴ＿ｔｏｐ内のブロックの動きベクタに決定される。
【００２２】
図６Ｂのように、現在スーパーマクロブロックと上側スーパーマクロブロックがそれぞれフィールドモードにコーディングされたら、現在スーパーマクロブロックの上部マクロブロックＥ＿ｔｏｐの上側動きベクタＭＶ＿Ｂは、上側スーパーマクロブロックの上部マクロブロックＢ＿ｔｏｐ内のブロックの動きベクタに決定され、現在スーパーマクロブロックの下部マクロブロックＥ＿ｂｏｔｔｏｍの上側動きベクタＭＶ＿Ｂは上側スーパーマクロブロックの下部マクロブロックＢ＿ｂｏｔｔｏｍ内のブロックの動きベクタに決定される。
【００２３】
図６Ｃのように、現在スーパーマクロブロックがフィールドモードにコーディングされ、上側スーパーマクロブロックがフレームモードにコーディングされたら、現在スーパーマクロブロックの上部マクロブロックＥ＿ｔｏｐと現在スーパーマクロブロックの下部マクロブロックＥ＿ｂｏｔｔｏｍの上側動きベクタＭＶ＿Ｂは上側スーパーマクロブロックの下部マクロブロックＢ＿ｂｏｔｔｏｍ内のブロックの動きベクタに決定される。
【００２４】
上側動きベクタＭＶ＿Ｂだけではなく、右上側動きベクタＭＶ＿Ｃ及び左上側動きベクタＭＶ＿Ｄも図６Ａ〜図６Ｃに示されたことと類似した方法に選択でき、動きベクタＭＶ＿Ａ、ＭＶ＿Ｂ、ＭＶ＿Ｃ（或いはＭＶ＿Ｄ）を用いて現在マクロブロック内のブロックの動きベクタを求めることができる。
【００２５】
動きベクタの予測は、隣接したブロックの動きベクタの間に動きベクタが類似した特性を用いて動きベクタを効率的にコーディングするところに目的がある。しかしながら、動きベクタの予測のためには周辺マクロブロック内のブロックの動きベクタを参照するので追加的なメモリが要求され、特にＭＢＡＦＦモードを支援する場合には、参考するべき周辺ブロックの動きベクタの範囲が多様なのでそうではない場合よりメモリのサイズが増加する。また、マクロブロックのコーディング方法がフィールド／フレームモードである場合とマクロブロックの位置が上部／下部によって現在マクロブロックの動きベクタを予測する周辺ブロックの動きベクタを探すため複雑なインデキシング過程が必要である。従って、一つの映像の全てのマクロブロックの動きベクタを全て個別的に貯蔵するか、或いは一つのスライスに該当する全てのベクタを貯蔵する場合、メモリのサイズが大きくなり、インデキシング過程も複雑になる問題点がある。
【発明の開示】
【発明が解決しようとする課題】
【００２６】
本発明の技術的課題は、周辺マクロブロックの動きベクタを貯蔵するメモリを効果的に構造化してメモリのサイズを最小化することができる動きベクタ演算システム及びその方法を提供するところにある。
【００２７】
本発明の他の技術的課題は、周辺ブロックの動きベクタを探すため必要なインデキシング過程が単純化された動きベクタ演算システム及びその方法を提供するところにある。
【００２８】
本発明のさらに他の技術的課題は、ＭＢＡＦＦモードでだけではなく、ノーマルモードでも動き補償過程で遂行される動きベクタ演算を効率的に遂行する方法及び装置を提供するところにある。
【課題を解決するための手段】
【００２９】
前述した技術的課題を達成するための本発明の一特徴によれば、動きベクタ演算装置は、マクロブロック内の下側ブロックグループの動きベクタを貯蔵するための第１のバンク及び第２のバンクから構成される上側メモリと、マクロブロック内の右側ブロックグループの動きベクタを貯蔵するための左側メモリ、動作モードそして現在ブロックのスーパーマクロブロック内の位置によって上側メモリの第１／２のバンク及び左側メモリに貯蔵された動きベクタを参照して現在ブロックの動きベクタを予測する予測器と、を含む。
【００３０】
好適な実施形態において、演算装置は、現在ブロックの予測された動きベクタと動きベクタ差を足して動きベクタを出力する加算器をさらに含む。
【００３１】
この実施形態において、予測器は、現在スーパーマクロブロック内のブロックについての加算器から出力される動きベクタを貯蔵するためのレジスターを含む。
【００３２】
この実施形態において、動きベクタ演算装置は、ＭＢＡＦＦモードで動作する。
【００３３】
ＭＢＡＦＦモードで動きベクタ演算装置の特徴は次の通りである。
【００３４】
スーパーマクロブロックは、第１及び第２のマクロブロックを含む。第１及び第２のマクロブロックは、縦方向に隣接したマクロブロックの対である。
【００３５】
予測器は、現在ブロックが第１のマクロブロックに属するとき、加算器から出力される動きベクタが上側メモリの第１のバンクに貯蔵されるように制御する。
【００３６】
現在ブロックが第２のマクロブロックに属するとき、加算器から出力される動きベクタが上側メモリの第２のバンクに貯蔵されるように制御する。
【００３７】
上側メモリの第１及び第２のバンクそれぞれのサイズは、（（ｗ×ａ＋１）×ｓ）であり、ｗは、一つのフレームの横方向のマクロブロックの数、ａは、一つのマクロブロック内の横方向のブロックの数、そしてｓは動きベクタサイズである。
【００３８】
上側メモリの第１のバンクは、スーパーマクロブロックの左上側スーパーマクロブロックの第１のマクロブロックの下側ブロックグループの最後ブロックから左側スーパーマクロブロックの第１のマクロブロックの下側ブロックグループまでの動きベクタを貯蔵する。
【００３９】
上側メモリの第２のバンクは、スーパーマクロブロックの左上側スーパーマクロブロックの第２のマクロブロックの下側ブロックグループの最後ブロックから左側スーパーマクロブロックの第２のマクロブロックの下側ブロックグループまでの動きベクタを貯蔵する。
【００４０】
左上側スーパーマクロブロックは、スーパーマクロブロックと左側対角線方向に隣接したスーパーマクロブロックであり、左側スーパーマクロブロックは、スーパーマクロブロックと左側方向に隣接したスーパーマクロブロックである。
【００４１】
予測器は、開始アドレス、バンクアドレス及びオフセットアドレスを含むアドレスを発生して上側メモリをアクセスする。
【００４２】
開始アドレスは、スーパーマクロブロック毎に増加され、マクロブロックの下側ブロックグループに含まれたブロックの数ほどずつ増加される。開始アドレスがバンクサイズより大きいとき開始アドレスは、（開始アドレス−バンクサイズ）に再設定される。
【００４３】
バンクアドレスは、上側メモリの第１及び第２のバンクを選択するためのアドレスである。
【００４４】
オフセットアドレスは、マクロブロック内のブロックのサイズ、そして周辺ブロックの位置によって設定される。
【００４５】
アドレスは、開始アドレス、バンクのアドレス及びオフセットアドレスの和である。
【００４６】
予測器は、加算器から出力される動きベクタが上側メモリのアドレスが指定する位置に貯蔵されるように制御する。
【００４７】
左側メモリは、スーパーマクロブロックの左側スーパーマクロブロックの右側ブロックグループの動きベクタを貯蔵する。
【００４８】
好適な実施形態において、動きベクタ演算装置は、ノーマルモードで動作する。ノーマルモード間、演算装置の特徴は次の通りである。
【００４９】
スーパーマクロブロックは、第１のマクロブロックを含む。
【００５０】
予測器は、上側メモリの第１のバンク及び左側メモリに貯蔵された動きベクタそしてスーパーマクロブロックの既に求められた動きベクタを参照してスーパーマクロブロック内の現在ブロックの動きベクタを予測する。
【００５１】
予測器は、加算器から出力される動きベクタが上側メモリの第１のバンクに貯蔵されるように制御する。
【００５２】
前述した技術的課題を達成するための本発明の他の特徴によれば、第１及び第２のバンクを含む上側メモリ、左側メモリそして現在スーパーマクロブロックの動きベクタを貯蔵するためのレジスターを含む動きベクタ演算装置の動きベクタ演算方法は、動作モードそして現在ブロックの現在スーパーマクロブロック内の位置によって上側メモリの第１／２のバンク、左側メモリそしてレジスターに貯蔵された動きベクタを参照して現在ブロックの動きベクタを計算する段階と、動作モードそして現在ブロックの現在スーパーマクロブロック内の位置によって動きベクタを上側メモリの第１／２のバンク又は左側メモリに貯蔵する段階と、を含む。
【００５３】
好適な実施形態において、動きベクタを計算する段階は、上側メモリ及び左側メモリに貯蔵された動きベクタ及び現在スーパーマクロブロック内既に求められた動きベクタを参照して現在ブロックの動きベクタを予測する段階と、予測された動きベクタと動きベクタ差を足して現在ブロックの動きベクタを出力する段階と、を含む。
【００５４】
この実施形態において、動きベクタ演算方法は、ＭＢＡＦＦモードで動作する。
【００５５】
ＭＢＡＦＦモードで動きベクタ演算方法の特徴は次の通りである。
【００５６】
スーパーマクロブロックは、第１のマクロブロック及び第２のマクロブロックを含み、第１及び第２のマクロブロックは、縦方向に隣接したマクロブロックの対である。
【００５７】
貯蔵段階は、現在ブロックがスーパーマクロブロックの第１のマクロブロックの下側ブロックグループに属するとき現在ブロックの計算された動きベクタを上側メモリの第１のバンクに貯蔵する段階と、現在ブロックがスーパーマクロブロックの第２のマクロブロックの下側ブロックグループに属するとき現在ブロックの計算された動きベクタを上側メモリの第２のバンクに貯蔵する段階と、を含む。
【００５８】
貯蔵段階は、現在ブロックがマクロブロックの右側ブロックグループに属するとき現在ブロックの動きベクタを左側メモリに貯蔵する段階を含む。
【００５９】
上側メモリの第１及び第２のバンクそれぞれのサイズは、（（ｗ×ａ＋１）×ｓ）であり、ｗは一つのフレームの横方向のマクロブロックの数、ａは一つのマクロブロック内の横方向のブロックの数、そしてｓは動きベクタサイズである。
【００６０】
動きベクタ演算方法は、上側メモリをアクセスするためのアドレスを発生する段階をさらに含む。
【００６１】
アドレスは、開始アドレス、バンクアドレス及びオフセットアドレスを含む。バンクアドレスは、上側メモリの第１及び第２のバンクを選択するためのアドレスであり、開始アドレスは、スーパーマクロブロック毎に増加されるアドレスである。開始アドレスは、マクロブロックの下側ブロックグループに含まれたブロックの数ほどずつ増加される。開始アドレスがバンクサイズより大きいとき開始アドレスは、（開始アドレス−バンクサイズ）に再設定される。オフセットアドレスは、マクロブロック内のブロックのサイズによって設定される。アドレスは、開始アドレス、バンクアドレス及びオフセットアドレスの和である。
【００６２】
動きベクタを予測する段階は、現在ブロックの右上側ブロックが有効であり、現在ブロックが第１のマクロブロックの上側ブロックグループに属するとき、上側メモリに貯蔵された上側ブロック及び右上側ブロックの動きベクタを読み出して上側動きベクタと右上側動きベクタにそれぞれ取る段階を含む。
【００６３】
動きベクタを予測する段階は、現在ブロックの右上側ブロックが有効であり、現在ブロックが第１のマクロブロックの上側ブロックグループに属するとき、レジスターに貯蔵された上側ブロックの動きベクタ及び右上側ブロックの動きベクタを上側動きベクタと右上側動きベクタにそれぞれ取る段階をさらに含む。
【００６４】
動きベクタを予測する段階は、現在ブロックの右上側ブロックが有効ではなく、現在ブロックが第１のマクロブロックの上側ブロックグループに属するとき、上側メモリに貯蔵された上側ブロック及び左上側ブロックの動きベクタを読み出して上側動きベクタと左上側動きベクタにそれぞれ取る段階をさらに含む。
【００６５】
動きベクタを予測する段階は、現在ブロックの右上側ブロックが有効ではなく、現在ブロックが第１のマクロブロックの上側ブロックグループに属するとき、レジスターに貯蔵された上側ブロックの上側動きベクタと左上側ブロックの動きベクタとを上側動きベクタと左上側動きベクタにそれぞれ取る段階をさらに含む。
【００６６】
動きベクタを予測する段階は、現在ブロックがマクロブロックの左側境界面に位置するとき、左側メモリに貯蔵された左側ブロックの動きベクタを左側動きベクタに取る段階をさらに含む。
【００６７】
動きベクタを予測する段階は、現在ブロックがマクロブロックの左側境界面に位置しないとき、現在スーパーマクロブロック内の左側ブロックの動きベクタを左側動きベクタに取る段階をさらに含む。
【００６８】
動きベクタを予測する段階は、上側動きベクタ、左／右上側動きベクタそして左側動きベクタに基づいて現在ブロックの動きベクタを予測する段階をさらに含む。
【発明の効果】
【００６９】
このような本発明によれば、ノーマルモードだけではなく、ＭＢＡＦＦモードでも動き補償過程で遂行される動きベクタ予測を効率的に遂行できる。特に、周辺マクロブロックの動きベクタを貯蔵するメモリを効果的に構造化してメモリのサイズを最小化し、ひいてはＭＢＡＦＦモード時必要なマクロブロックインデキシングのためのメモリアドレス発生過程を単純化することによって電力消耗を減らすことができる。
【発明を実施するための最良の形態】
【００７０】
以下、添付した図面を参照して本発明の好適な実施形態を詳細に説明する。
【００７１】
本発明の動きベクタ予測システムは、動きベクタ予測時必要な周辺マクロブロックの動きベクタを効率的に貯蔵することによってＭＢＡＦＦモードだけではなく、ノーマルモードでも使用可能でありながらサイズが最小化されたメモリを備える。また、本発明は、現在及び周辺マクロブロックのコーディング方式によってメモリに貯蔵された周辺ブロックの動きベクタＭＶ＿Ａ、ＭＶ＿Ｂ、ＭＶ＿Ｃ及びＭＶ＿Ｄを決定する方法と周辺マクロブロックの動きベクタをメモリに更新する方法とを提供する。
【００７２】
現在ブロックの動きベクタを推定するためには、周辺マクロブロック内のブロックの動きベクタを参照しなければならなく、こうした周辺ブロックは現在マクロブロック前に処理されたマクロブロックであるためマクロブロックの動きベクタをメモリに貯蔵していなければならない。
【００７３】
図７は、現在マクロブロックＥと周辺マクロブロックＡ、Ｂ、Ｃ及びＤとを４×４ブロックの１６個に分けたことを示している。もし現在マクロブロック内のブロックが最小サイズである４×４モードである場合には、総１６個動きベクタを予測しなければならないため周辺マクロブロックも横方向に４等分、縦方向に４等分分けられてそれぞれのブロックについての動きベクタがメモリに貯蔵されなければならない。
【００７４】
周辺マクロブロックの動きベクタを貯蔵するメモリは、左側マクロブロック内のブロックの動きベクタＭＶ＿Ａを貯蔵する左側（ｌｅｆｔ）メモリと上側、左上側そして右上側マクロブロック内のブロックの動きベクタＭＶ＿Ｂ、ＭＶ＿Ｄ、ＭＶ＿Ｃを貯蔵する上側（ｕｐｐｅｒ）メモリに分けられる。
【００７５】
現在マクロブロックＥの左側動きベクタＭＶ＿Ａを予測するためには左側マクロブロックＡの右側ブロックグループＡ５，Ａ７，Ａ１３，Ａ１５の動きベクタが必要であり、これは左側メモリに貯蔵される。現在マクロブロックＥの上側動きベクタＭＶ＿Ｂを予測するために必要な上側マクロブロックＢの下側ブロックグループＢ１０，Ｂ１１，Ｂ１４，Ｂ１５の動きベクタと、現在マクロブロックＥの左上側動きベクタＭＶ＿Ｄを予測するために必要な左上側マクロブロックＤの下側ブロックグループに属するブロックＤ１５そして現在マクロブロックＥの右上側動きベクタＭＶ＿Ｃを予測するために必要な右上側マクロブロックＣの下側ブロックグループに属するブロックＣ１０は上側メモリに貯蔵される。
【００７６】
例えば、図７で現在ブロックＥ０の動きベクタを予測するためには左側メモリに貯蔵された周辺ブロックＡ５の動きベクタと上側メモリに貯蔵された周辺ブロックＢ１０，Ｂ１１（又はＤ１５）の動きベクタが使用される。ブロックＥ５の動きベクタを予測するためには、上側メモリに貯蔵された周辺ブロックＢ１５，Ｃ１０（又はＢ１４）の動きベクタと現在マクロブロック内のブロックＥ４の動きベクタが使用される。反面にブロックＥ３の動きベクタを求めるためには、現在マクロブロック内のブロックＥ２，Ｅ１，Ｅ４（又はＥ０）の動きベクタのみ使用され、左側メモリと上側メモリは参考しない。右上側ブロックが存在しないブロックＥ７のような場合には、右上側ブロックの代わりに左上側ブロックＥ４の動きベクタを使用するためこのような条件も考慮してやらなければならない。
【００７７】
先ず、上側メモリに貯蔵される動きベクタについて以下説明する。上側メモリに貯蔵されるブロックの動きベクタは、現在マクロブロックの上側、左上側、右上側マクロブロックの動きベクタであり、メモリのサイズは画面の横側マクロブロック数に比例する。
【００７８】
ＭＢＡＦＦモードである場合、前述したように周辺ブロックの動きベクタを探すため複雑なインデキシング過程が必要である。こうしたインデキシング過程を単純化させるために本発明ではスーパーマクロブロックの上部マクロブロックと下部マクロブロックの動きベクタをそれぞれ他のバンクに貯蔵させるため上部メモリを二つのバンクに分ける。
【００７９】
図８Ａは、ＭＢＡＦＦモードで上側メモリに貯蔵される周辺ブロックを示しており、図８Ｂは、ノーマルモードで上側メモリに貯蔵される周辺ブロックを示している。また、図９は、上部メモリ構造を示している。ＭＢＡＦＦモードで、スーパーマクロブロックの上部マクロブロック内のブロックの動きベクタは、第２のバンク（ＢＡＮＫ２）に貯蔵され、下部マクロブロックのブロックの動きベクタは第１のバンク（ＢＡＮＫ１）に貯蔵される。一方、ノーマルモードでスーパーマクロブロックは一つのマクロブロックのみを含むため、スーパーマクロブロック内の動きベクタは第２のバンク（ＢＡＮＫ２）に貯蔵される。
【００８０】
上側メモリ１１０には、一つのマクロブロックの下側ブロックグループに属する４個のブロックの動きベクタが貯蔵されるため、メモリのサイズは一つの画面の横方向のマクロブロックの数に比例する。式（１）は、各バンクの最小サイズを示しており、式（２）は全体メモリの最小サイズを示している。
【００８１】
バンクサイズ＝（ｗ×ａ＋１）×（動きベクタサイズ）      ・・・（１）
【００８２】
メモリサイズ＝バンクサイズ×２                          ・・・（２）
【００８３】
式（１）で、動きベクタのサイズは、動きベクタを表現するビット数をいい、ｗは一つのフレームの横方向のマクロブロックの数、そしてａは一つのマクロブロック内の横方向のブロックの数である。この実施形態で、一つのマクロブロックは横方向に４個のブロックを含むため、ａは４である。左上側ブロックについての動きベクタを貯蔵するためにメモリのサイズは、（ｗ×４）より１ほど大きい数の倍数でなければならない。
【００８４】
例えば、図８Ａで、現在（２ｗ＋４）及び（２ｗ＋５）番目マクロブロックについての動きベクタを予測するために上側メモリ１１０に貯蔵された動きベクタは斜線であるブロックの動きベクタである。また、図８Ｂで、現在（２ｗ＋２）番目マクロブロックについての動きベクタを予測するために上側メモリ１１０に貯蔵された動きベクタは斜線であるブロックの動きベクタである。
【００８５】
本発明では、メモリのサイズを最小化するため、上側メモリに動きベクタを貯蔵するとき、既に使用されたメモリ領域にデータを重ね書きする（ｏｖｅｒｗｒｉｔｅ）。詳細に説明すれば、現在マクロブロックの動きベクタが予測された後には現在マクロブロックの下側ブロックグループに属する４個のブロックの動きベクタがメモリに貯蔵されなければならない。この際、メモリのサイズを最小化するため、現在マクロブロックの下側ブロックグループに属する４個のブロックは、もはや参照される可能性がない動きベクタが貯蔵されたメモリ領域に重ね書きされる。
【００８６】
図１０は、ＭＢＡＦＦモードで上側メモリの二つのバンクのうち上部マクロブロック内のブロックの動きベクタを貯蔵する第２のバンク（ＢＡＮＫ２）の動きベクタ貯蔵方法を概念的に示している。
【００８７】
先ず、図１０の＜Ｓ１＞は図８に示された０番目マクロブロックから（２ｗ−２）番目マクロブロックの動きベクタが第２のバンク（ＢＡＮＫ２）に貯蔵された状態を示している。０番目マクロブロックから（２ｗ−２）番目マクロブロックの動きベクタはアドレスＡＤＤＲの０から（Ｗ−１）＊４＋３まで順次に貯蔵される。この状態では、（２ｗ）及び（２ｗ＋１）番目マクロブロックについての動きベクタ予測が遂行される。前述したように、上側メモリに貯蔵される各マクロブロックのブロックは下側ブロックグループに属する４個のブロックである。
【００８８】
図１０の＜Ｓ２＞は、（２ｗ）及び（２ｗ＋１）番目マクロブロックについての動きベクタが遂行された後、（２ｗ）番目マクロブロックの下側ブロックグループに属する４個のブロックの動きベクタが第２のバンク（ＢＡＮＫ２）に貯蔵される場合を示している。（２ｗ）番目マクロブロックの下側ブロックグループに属する４個のブロックの動きベクタの一部は、第２のバンク（ＢＡＮＫ２）の、それ以上使用されることのない０番目マクロブロックの下側ブロックグループに属する４個のブロックの動きベクタの一部が貯蔵された位置に重ね書きされる。すなわち、（２ｗ）番目マクロブロックの下側ブロックグループに属する４個のブロックのうち一番目ブロックは、第２のバンク（ＢＡＮＫ２）のアドレス（ｗ＋４）に重ね書きされる。そして、（２ｗ）番目マクロブロックの下側ブロックグループに属する４個のブロックのうち残り３個のブロックは第２のバンク（ＢＡＮＫ２）のアドレス０から２まで順次に重ね書きされる。
【００８９】
図１０の＜Ｓ３＞は、（２ｗ＋２）番目マクロブロックの動きベクタの第２のバンク（ＢＡＮＫ２）に貯蔵された状態を示している。図１０Ｂと類似に、（２ｗ＋２）番目マクロブロックの４個の動きベクタは、（２ｗ＋２）番目マクロブロックの動きベクタが予測された後不要になったメモリ領域（０番目及び２番目マクロブロックが貯蔵された領域）であるアドレス３から６まで重ね書きされる。このように、一つの画面の最後マクロブロックの動きベクタが予測されるときまで現在マクロブロックの動きベクタがメモリに重ね書きされるため動きベクタ予測のために上側メモリのサイズは（４ｗ＋１）であれば十分である。
【００９０】
図１１は、ノーマルモードで上側メモリの二つのバンクのうち第２のバンク（ＢＡＮＫ２）にマクロブロックの動きベクタを貯蔵する方法を概念的に示している。図１１に示されたノーマルモードでの動きベクタ貯蔵方法は、図１０に示されたＭＢＡＦＦモードでの動きベクタ貯蔵方法と類似する。但し、ノーマルモードでは、スーパーマクロブロックが一つのマクロブロックのみを含むため、０番目マクロブロックから順次に第２のバンク（ＢＡＮＫ２）に貯蔵される。
【００９１】
左側メモリの構造は上側メモリに比べて簡単である。図１２は、左側メモリを示している。左側メモリに貯蔵される動きベクタは、現在マクロブロックの左側に位置したマクロブロックの右側ブロックグループの動きベクタである。ノーマルモードである場合には、４個の動きベクタのみ貯蔵すれば良いが、ＭＢＡＦＦモードである場合には、上部マクロブロックで４個の動きベクタ、下部マクロブロックで４個の動きベクタが貯蔵されなければならないため総８個の動きベクタが左側メモリに貯蔵される。
【００９２】
前述したように、現在マクロブロックの動きベクタを求めるためには周辺マクロブロック内のブロックの動きベクタを参照するため、動きベクタを貯蔵するメモリが必要である。特に、ＭＢＡＦＦモードである場合には、参照される周辺ブロックの場合の数が増加するため貯蔵されるべき動きベクタの数も増加し、動きベクタ選択条件も複雑になる。従って、本発明ではかかる問題を解決するためメモリのサイズを最小に減少させながら周辺ブロックの動きベクタを簡単な方法で選択できる動きベクタ予測装置を提供する。
【００９３】
図１３は、本発明の好適な実施形態による動きベクタ予測装置を示している。動きベクタ演算装置１００は、上側メモリ１１０と、左側メモリ１２０と、動きベクタ予測器１３０そして加算器１５０と、を含む。好適な実施形態による本発明の上側メモリ１１０と左側メモリ１２０は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）から構成される。
【００９４】
動きベクタ予測器１３０は、加算器１５０から出力される現在スーパーマクロブロックの動きベクタを貯蔵するためのレジスター１４０を含む。動きベクタ予測器１３０は、外部から入力されるマクロブロックの情報に基づいて上側メモリ１１０及び左側メモリ１２０をアクセスするためのアドレス信号を生成する。マクロブロック情報は、ノーマル／ＭＢＡＦＦモード情報、現在マクロブロックと周辺マクロブロックのコーディングモードがフレーム／フィールドモードであるかの情報、現在マクロブロックの画素集合のサイズ情報などを含む。上側メモリ１１０及び左側メモリ１２０に貯蔵される動きベクタは前述したようである。動きベクタ予測器１３０は、上側メモリ１１０と左側メモリ１２０そしてレジスター１４０に貯蔵された現在スーパーマクロブロック内のブロックの動きベクタを参照して現在ブロックの動きベクタを予測する。加算器１８０は、動きベクタ予測器１４０から出力される予測動きベクタと外部から提供される動きベクタ差を足して現在ブロックの動きベクタを出力する。
【００９５】
動きベクタ予測器１４０から発生される上側メモリ１１０のアドレスは、バンクアドレスと、開始アドレスそしてオフセットアドレスと、を含む。バンクアドレスは図６のように、現在マクロブロックと周辺マクロブロックのフレーム／フィールドモードに応じて決定されるアドレスであって、周辺スーパーマクロブロックの中で参照されるブロックの位置が上部マクロブロックに属すれば、第２のバンク（ＢＡＮＫ２）が選択され、参照されるブロックの位置が下部マクロブロックに属すれば、第１のバンク（ＢＡＮＫ１）が選択されるように発生される。
【００９６】
開始アドレスは、マクロブロック単位に変化するアドレスであって、図１４のように、マクロブロック当たり貯蔵される動きベクタの個数である４ずつ増加し、バンクサイズより広ければ、（開始アドレス−バンクサイズ）に更新される。
【００９７】
オフセットアドレスは、ブロックモードによって周辺ブロックの位置が違われることを補償するアドレスでブロックのサイズによって決定される。図１５Ａ〜図１５Ｃは、オフセットアドレスを決定する方法を概念的に示している。例えば、図１５Ａに示されたように、マクロブロック内のブロックが１６×１６モードであるとき、周辺ブロックＤのオフセットアドレスは、開始アドレスと同一に０であり、周辺ブロックＢのオフセットアドレスは１、周辺ブロックＣのアドレスは５である。
【００９８】
図１５Ｂのように、マクロブロック内のブロックが８×８モードである場合には、横方向にブロックが２個存在するため、オフセットアドレスを２番計算しなければならない。ブロックＢ１の周辺ブロックＤのオフセットアドレスは開始アドレスと同一に０であり、周辺ブロックＢのオフセットアドレスは１、周辺ブロックＣのアドレスは３である。ブロックＢ２の周辺ブロックＤのオフセットアドレスは、開始アドレスと同一な値ではない２であり、周辺ブロックＢのオフセットアドレスは３、周辺ブロックＣのアドレスは５である。
【００９９】
図１５Ｃでは、マクロブロック内のブロックが４×４モードである場合オフセットアドレスを計算する方法を示している。マクロブロック内のブロックが４×４モードであるとき横方向にブロックが４個存在すればブロックＢ３，Ｂ４，Ｂ５，Ｂ６のそれぞれの周辺ブロックＢ，Ｃ，Ｄのオフセットアドレスは、前述した方法と同一な方法に求められる。
【０１００】
マクロブロック毎に変えるバンクアドレスと開始アドレスそしてブロック毎に変えるオフセットアドレスを全て足した値が上側メモリ１２０の最終アドレスになる。
【０１０１】
左側メモリ１２０は、現在マクロブロックの左側マクロブロックの動きベクタのみを貯蔵するため、図５に示されたように現在マクロブロックと周辺マクロブロックのフレーム／フィールドモードのみ知っていれば複雑なインデキシング過程なしで左側メモリ１２０を参照できる。
【０１０２】
図１６Ａ〜図１６Ｂは、本発明の好適な実施形態による動きベクタ予測方法を示すフローチャートである。
【０１０３】
段階Ｓ３００で、上側メモリ１１０の開始アドレスが計算される。段階Ｓ３０１で、ブロックＣの有効性が判別される。図２Ａ及び図２Ｂに示された例で周辺ブロックＣは、現在マクロブロックの動きベクタ予測のため必要であるが、図２Ｃに示されたように、ブロックＥ１の周辺ブロックＣが現在マクロブロック以後にコーディングされるマクロブロック内のブロックである場合ブロックＣの代わりにブロックＤが周辺ブロックとして使用される。判別結果、ブロックＣが有効であれば段階Ｓ３１０に進行する。
【０１０４】
段階Ｓ３１０で、現在ブロックＥが上側マクロブロックの上側ブロックグループに属するかの可否が判別される。図７を参照すれば、現在ブロックＥが上側マクロブロックの上側ブロックグループに位置するブロックＥ０，Ｅ１，Ｅ４のうちいずれか一つであれば、上側メモリ１１０から周辺ブロックＢ，Ｃの動きベクタを読み出してそれぞれ上側動きベクタ及び右上側動きベクタに取る（段階Ｓ３１１）。現在ブロックＥが上側マクロブロックの上側ブロックグループではない位置に存在するブロックＥ２，Ｅ３，Ｅ６，Ｅ８，Ｅ９，Ｅ１２，Ｅ１０，Ｅ１１，Ｅ１４のうちいずれか一つであれば、レジスター１４０に貯蔵された現在マクロブロックで周辺ブロックＢ，Ｃの動きベクタをそれぞれ上側動きベクタ及び右上側動きベクタに取る（段階Ｓ３１２）。
【０１０５】
先に、段階Ｓ３０１の判別結果、ブロックＣが有効でなければ、段階Ｓ３２０に進行する。段階Ｓ３２０で、現在ブロックＥが上側マクロブロックの境界面に位置するかの可否が判別される。図７を参照すれば、現在ブロックＥが上側マクロブロックの上側ブロックグループに属するブロックＥ５であれば、上側メモリ１１０から周辺ブロックＢ，Ｄの動きベクタを読み出してそれぞれ上側動きベクタと左上側動きベクタに取る（段階Ｓ３２１）。もし現在ブロックＥが上側マクロブロックの上側ブロックグループではない位置に存在するブロックＥ７，Ｅ１３，Ｅ１５であれば、レジスター１４０に貯蔵された現在マクロブロックＥ内の周辺ブロックＢ，Ｄの動きベクタをそれぞれ上側動きベクタと左上側動きベクタに取る（段階Ｓ３２２）。
【０１０６】
段階Ｓ３１１，Ｓ３１２，Ｓ３２１及びＳ３２２のうちいずれか一つが遂行された後であれば、現在ブロックＥについての上側動きベクタそして右上側動きベクタ又は左上側動きベクタが得られる。
【０１０７】
段階Ｓ３３０で、現在ブロックＥが左側ブロックグループに属するかの可否が判別される。現在ブロックＥが左側マクロブロックの境界面に位置するブロックＥ０，Ｅ２，Ｅ８，Ｅ１０のうちいずれか一つであれば、左側メモリ１２０から周辺ブロックＡの動きベクタが読み出される（段階Ｓ３３１）。現在ブロックＥが左側マクロブロックの境界面に位置しないブロックＥ１，Ｅ３〜Ｅ１５のうちいずれか一つであれば、現在マクロブロックで周辺ブロックＡの動きベクタが求められる（段階Ｓ３３２）。
【０１０８】
段階Ｓ３３１又は段階Ｓ３３２が遂行された後であれば、周辺ブロックＡの動きベクタが得られる。
【０１０９】
従って、段階Ｓ３４０では、求められた周辺ブロックＡ，ＢそしてＣ又はＤの動きベクタを用いてブロックＥの予測動きベクタが計算される。
【０１１０】
先の段階Ｓ３０１〜段階Ｓ３４０は、図１３に示された予測動きベクタ検出部１４０によって遂行される。予測動きベクタ検出部１４０から出力される予測動きベクタは加算器１５０によって足された後上側メモリ１１０及び左側メモリ１２０に提供される。
【０１１１】
段階Ｓ３４１で、現在ブロックＥが右側ブロックグループに属するかの可否が判別される。図７を参照すれば、現在ブロックＥが右側ブロックグループに属するブロックＥ５，Ｅ７，Ｅ１３，Ｅ１５のうち一つであれば、次マクロブロックの動きベクタ予測時周辺ブロックＢとして使用されるため左側メモリ１２０に貯蔵されなければならない（段階Ｓ３４２）。
【０１１２】
段階Ｓ３４３で、現在ブロックＥが下側ブロックグループに属するかの可否が判別される。再び図７を参照すれば、現在ブロックＥが下側ブロックグループに属するブロックＥ１０，Ｅ１１，Ｅ１４，Ｅ１５のうち一つであれば、次マクロブロックの動きベクタ予測時周辺ブロックＢ，Ｃ又はＤとして使用されるため、上側メモリ１１０に貯蔵されなければならない（段階Ｓ３４４）。
【０１１３】
段階Ｓ３４５で、現在マクロブロックのブロック全てについての動きベクタ予測が遂行されたかの可否が判別される。前述したような段階によって一つのマクロブロックに属するブロックそれぞれについての動きベクタが計算される。
【図面の簡単な説明】
【０１１４】
【図１】現在ブロックＥについての動きベクタとこの動きベクタの予測に使用される周辺ブロックＡ，Ｂ，Ｃ及びＤの位置とそれぞれの動きベクタを示す図面である。
【図２Ａ】現在ブロックのモードタイプと位置によって周辺ブロックの位置を示す図面である。
【図２Ｂ】現在ブロックのモードタイプと位置によって周辺ブロックの位置を示す図面である。
【図２Ｃ】現在ブロックのモードタイプと位置によって周辺ブロックの位置を示す図面である。
【図３Ａ】縦方向の二つのマクロブロックの対を一つのスーパーマクロブロックとしてコーディングしたＭＢＡＦＦモードの一例を示す図面である。
【図３Ｂ】ノーマルモードでのスーパーマクロブロックを示す図面である。
【図４】スーパーマクロブロックがフィールドモードにコーディングされた場合とフレームモードにコーディングされた場合とを示す図面である。
【図５Ａ】現在マクロブロックと周辺マクロブロックのコーディングモードによる左側ブロックの動きベクタＭＶ＿Ａを示す図面である。
【図５Ｂ】現在マクロブロックと周辺マクロブロックのコーディングモードによる左側ブロックの動きベクタＭＶ＿Ａを示す図面である。
【図５Ｃ】現在マクロブロックと周辺マクロブロックのコーディングモードによる左側ブロックの動きベクタＭＶ＿Ａを示す図面である。
【図６Ａ】現在マクロブロックと周辺マクロブロックのコーディング方式による上側ブロックの動きベクタ位置を示す図面である。
【図６Ｂ】現在マクロブロックと周辺マクロブロックのコーディング方式による上側ブロックの動きベクタ位置を示す図面である。
【図６Ｃ】現在マクロブロックと周辺マクロブロックのコーディング方式による上側ブロックの動きベクタ位置を示す図面である。
【図７】現在マクロブロックＥと周辺マクロブロックＡ，Ｂ，Ｃ及びＤを４×４ブロックの１６個に分けたことを示す図面である。
【図８Ａ】ＭＢＡＦＦモードで上側メモリに貯蔵される周辺ブロックを示す図面である。
【図８Ｂ】ノーマルモードで上側メモリに貯蔵される周辺ブロックを示す図面である。
【図９】上部メモリ構造を示す図面である。
【図１０】上側メモリの二つのバンクのうち下部マクロブロック内のブロックの動きベクタを貯蔵する第２のバンクの動きベクタ貯蔵方法を概念的に示す図面である。
【図１１】ノーマルモードで上側メモリの二つのバンクのうち第２のバンクにマクロブロックの動きベクタを貯蔵する方法を概念的に示す図面である。
【図１２】左側メモリを示す図面である。
【図１３】本発明の好適な実施形態による動きベクタ予測装置を示す図面である。
【図１４】スーパーマクロブロック単位に変化する開始アドレス発生方法を示すフローチャートである。
【図１５Ａ】オフセットアドレスを決定する方法を概念的に示す図面である。
【図１５Ｂ】オフセットアドレスを決定する方法を概念的に示す図面である。
【図１５Ｃ】オフセットアドレスを決定する方法を概念的に示す図面である。
【図１６Ａ】本発明の好適な実施形態による動きベクタ予測方法を示すフローチャートである。
【図１６Ｂ】本発明の好適な実施形態による動きベクタ予測方法を示すフローチャートである。
【符号の説明】
【０１１５】
１００：動きベクタ演算装置
１１０：上側メモリ
１２０：左側メモリ
１３０：動きベクタ予測器
１４０：レジスター
１５０：加算器
【図１】
2006166459.tif 000003
【図２Ａ】
2006166459.tif 000004
【図２Ｂ】
2006166459.tif 000005
【図２Ｃ】
2006166459.tif 000006
【図３Ａ】
2006166459.tif 000007
【図３Ｂ】
2006166459.tif 000008
【図４】
2006166459.tif 000009
【図５Ａ】
2006166459.tif 000010
【図５Ｂ】
2006166459.tif 000011
【図５Ｃ】
2006166459.tif 000012
【図６Ａ】
2006166459.tif 000013
【図６Ｂ】
2006166459.tif 000014
【図６Ｃ】
2006166459.tif 000015
【図７】
2006166459.tif 000016
【図８Ａ】
2006166459.tif 000017
【図８Ｂ】
2006166459.tif 000018
【図９】
2006166459.tif 000019
【図１０】
2006166459.tif 000020
【図１１】
2006166459.tif 000021
【図１２】
2006166459.tif 000022
【図１３】
2006166459.tif 000023
【図１４】
2006166459.tif 000024
【図１５Ａ】
2006166459.tif 000025
【図１５Ｂ】
2006166459.tif 000026
【図１５Ｃ】
2006166459.tif 000027
【図１６Ａ】
2006166459.tif 000028
【図１６Ｂ】
2006166459.tif 000029