(57)【特許請求の範囲】
【請求項１】
ビデオ信号の解読および符号化に用いられる動きベクトルを格納および読出する装置であって：
複数の格納要素を有するメモリであって、前記複数の格納要素の第１要素がビデオ・フレームのマクロブロックに関して第１動きベクトルを格納し、前記マクロブロックはビデオ・フレームを表す複数のマクロブロックの１つであり、さらに前記複数の格納要素の第２要素が前記マクロブロックに関する第２動きベクトルを格納し、前記第１動きベクトルおよび第２動きベクトルが同一のマクロブロックに関して格納されており、前記第１動きベクトルおよび前記第２動きベクトルが、ビデオ・アーチファクト除去のための動きベクトル予測子計算およびオーバラップブロック動き補償の両方の間で共有される、前記メモリ；および
前記メモリに結合され、前記メモリ内で動きベクトルが格納される場所を制御するアドレス発生回路構成；
を具備し、前記メモリおよび前記アドレス発生回路構成が集積回路形式でハードウェア部品として実現され、
前記メモリは第１集合の動きベクトルと第２集合の動きベクトルを格納し、
前記第１集合の動きベクトルは第１の複数のマクロブロックの上部分に対応する複数の第１動きベクトルを含み、前記複数の第１動きベクトルは、現行のマクロブロックの処理に必要な第１動きベクトルのみを含むものであり、
前記第２集合の動きベクトルは、前記第１の複数のマクロブロックの下部分と、第２の複数のマクロブロックの下部分とに対応する複数の第２動きベクトルを含み、
前記第１集合の動きベクトルが前記第２集合の動きベクトルよりも少ない格納要素をメモリ内で占有することを特徴とする装置。
【請求項２】
前記メモリに応答する予測子計算機をさらに具備することを特徴とする請求項１記載の装置。
【請求項３】
ビデオ信号の解読および符号化に用いられる動きベクトルを格納および読出する方法であって：
メモリを設ける段階；
複数のマクロブロックに対応する第１集合の動きベクトルと第２集合の動きベクトルを受信する段階であって、前記第１集合の動きベクトルは、第１の複数のマクロブロックの上部分を表す複数の第１および第２動きベクトルを含み、前記複数の第１動きベクトルは、現行のマクロブロックの処理に必要な第１および第２動きベクトルのみを含むものであり、前記第２集合の動きベクトルは、前記第１の複数のマクロブロックの下部分と、第２の複数のマクロブロックの下部分とを表す複数の第３および第４動きベクトルを含み、各第１動きベクトルは、各マクロブロック内の左上ブロックであるブロック１を表し、各第２動きベクトルは各マクロブロック内の右上ブロックであるブロック２を表し、各第３動きベクトルは各マクロブロック内の左下ブロックであるブロック３を表し、各第４動きベクトルは各マクロブロック内の右下ブロックであるブロック４を表し、前記複数のマクロブロックがビデオ・フレームの一部分を表す、前記複数の動きベクトルを受信する段階；および
前記第１集合の動きベクトルを前記メモリの第１部分に格納し、前記第２集合の動きベクトルを前記メモリの第２部分に格納する段階；
を具備し、前記第１集合の動きベクトルが前記第２集合の動きベクトルよりも少ない格納要素をメモリ内で占有することを特徴とする方法。
【請求項４】
ビデオ信号をデコードするための装置であって：
ビデオ信号を受けるビットストリーム・デコーダ；
前記ビットストリーム・デコーダに応答する動きベクトル格納および読出モジュールであって、該動きベクトル格納および読出モジュールは複数のマクロブロックを表す第１集合の動きベクトル及び第２集合の動きベクトルを格納するメモリを含み、前記複数のマクロブロックは前記ビデオ信号の一部を表し、前記メモリにおける前記第１及び第２の集合の動きベクトルの一部は少なくとも１つの所定のマクロブロック内の複数のブロックを表し、前記少なくとも１つの所定のマクロブロックは前記ビデオ信号の一部を表し、前記第１集合の動きベクトルは、第１の複数のマクロブロックの上部分に対応する複数の動きベクトルを含み、前記上部分に対応する複数の動きベクトルは、現行のマクロブロックの処理に必要な上部分に対応する動きベクトルのみを含むものであり、前記第２集合の動きベクトルは、前記第１の複数のマクロブロックの下部分と、第２の複数のマクロブロックの下部分とに対応する複数の動きベクトルを含み、前記第１集合の動きベクトルが前記第２集合の動きベクトルよりも少ないメモリを必要とする、前記動きベクトル格納および読出モジュール；
前記ビットストリーム・デコーダに応答する変換をベースとした圧縮モジュール；
前記動きベクトル格納および読出モジュールに応答する動き補償ユニット；および
前記動き補償ユニットおよび変換をベースとした圧縮モジュールに応答する合成器；
を具備することを特徴とするビデオ信号をデコードするための装置。
【請求項５】
ビデオ信号をエンコードするための装置であって：
動き推定モジュール；
前記動き推定モジュールに応答する動きベクトル格納および読出モジュールであって、該動きベクトル格納および読出モジュールはマクロブロックに対応する第１集合の動きベクトルと第２集合の動きベクトルとを格納するメモリを含み、前記マクロブロックは前記ビデオ信号の一部を表し、前記メモリにおける前記第１及び第２集合の動きベクトルの一部は少なくとも１つの所定のマクロブロック内の複数のブロックを表し、前記少なくとも１つの所定のマクロブロックは前記ビデオ信号の一部を表し、前記第１集合の動きベクトルは、第１の複数のマクロブロックの上部分に対応する複数の動きベクトルを含み、前記上部分に対応する複数の動きベクトルは、現行のマクロブロックの処理に必要な上部分に対応する動きベクトルのみを含むものであり、前記第２集合の動きベクトルは、前記第１の複数のマクロブロックの下部分と、第２の複数のマクロブロックの下部分とに対応する複数の動きベクトルを含み、前記第１集合の動きベクトルは前記第２集合の動きベクトルよりも少ないメモリを必要とする、前記動きベクトル格納および読出モジュール；
前記動きベクトル格納および読出モジュールに応答する動き補償ユニット；
前記動き補償ユニットに応答する変換をベースとした圧縮モジュール；および
前記変換をベースとした圧縮モジュールに応答するビットストリーム・エンコーダ；
を具備することを特徴とするビデオ信号をエンコードするための装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般にビデオ通信に関し、さらに詳しくは、ビデオ画像の圧縮および圧縮解除に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
事業用および家庭用に用いられる多くのビデオ電話およびビデオ会議装置は、現在の電話網に固有の帯域幅上の制約により高い圧縮比を必要とする。この要望に応えて、低ビット速度ビデオ通信に関するＨ．２６３国際規格（Ｈ．２６３  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｔａｎｄａｒａｄ  ｆｏｒ  Ｌｏｗ  Ｂｉｔ  Ｒａｔｅ  Ｖｉｄｅｏ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）が開発された。この規格は、直ちにビデオ産業に採用された。Ｈ．２６３国際規格には、高度予測モード（ＡＰＭ：  Ａｄｖａｎｃｅｄ  Ｐｒｅｄｉｔｉｏｎ  Ｍｏｄｅ）と呼ばれる任意の技術の実行が含まれる。ＡＰＭは、動きの推定中に導入されるアーチファクトを排除することによりビデオ画像が大幅に改善する。ＡＰＭの欠点は、ハードウェア内に組み込むのが極めて困難で非効率的なことである。その結果、高度予測モードが最初に実現されたのはソフトウェア内のみであった。
【０００３】
ビデオを圧縮するＨ．２６３技術の１つは、動き推定（ｍｏｔｉｏｎ  ｅｓｔｉｍａｔｉｏｎ）を用いることである。動き推定は、実際の画素の代わりに動きベクトルをデコーダに送ることによりビデオを処理する。デコーダは、この動きベクトルを取り込み、それを用いて前に解読されたフレームから動きベクトルが指示するデータのブロックにアクセスすることで現行のフレームを再生する。Ｈ．２６３  ＡＰＭモードにおいては、それぞれ８ｘ８ブロックの画素の代わりに１つの動きベクトルを送ればよい。ＡＰＭオプションは、それぞれ８ｘ８ブロックを表す動きベクトルを周辺ブロックの動きベクトルで平均化することを求める。これにより、動き推定プロセス中に導入されるブロック化アーチファクトが軽減される。残念ながら、周辺のマクロブロックから動きベクトルを平均化することは、いくつかの理由から、メモリにおいてもハードウェアにおいても集約的になることがわかっている。第１に、周辺ブロックから動きベクトルを読出するには、ＲＡＭ内に多数の動きベクトルを格納しなければならないことになる。現行のブロック上に動きベクトルを読出しなければならないということは、動きベクトルの行全体を格納することが必要となり、これは極めてメモリ集約的になる。第２に、Ｈ．２６３規格は、２つの別々の関数に関して動きベクトルを格納および読出することを必要とするものとＡＰＭモードを定義する：すなわち、オーバラップブロック動き補償（ＯＢＭＣ：  Ｏｖｅｒｌａｐｐｅｄ  Ｂｌｏｃｋ  Ｍｏｔｉｏｎ  Ｃｏｍｐｅｎｓａｔｉｏｎ）および予測子計算（ｐｒｅｄｉｃｔｏｒ  ｃａｌｃｕｌａｔｉｏｎ）である。これらの関数は、容易に合成されない。なぜなら、ＯＢＭＣ関数は解読時間の１マクロブロック分だけ予測子関数より遅延するためである。これにより、２つの関数は異なる時間フレーム内で動作することを強いられる。第３に、ＯＢＭＣも予測子計算も、それぞれ４つの異なるアドレス・パターンを必要とする。従って、必要なアドレス化スキームは８個になる。しかし、アドレス化スキームのうち線形順序のものは１つもなく、容易にアドレス化可能な他のパターンのものもない。
【０００４】
上記の問題のために、Ｈ．２６３規格で定義されるＡＰＭモードのハードウェアを効率的に実行することは極めて困難である。ＡＰＭモードをソフトウェアで実行することは、この機能を実現するために必要とされる大量のメモリおよびシステム資源の使用可能性のために有利である。しかし、ソフトウェアの実行には、実行速度がはるかに遅く、ハードウェア実行により得られるフレーム速度と画像の品質が犠牲になるという欠点がある。
【０００５】
【実施例】
図１には、本発明の好適な実施例によるビデオ・コデック（エンコーダ／デコーダ１０）装置のブロック図を示す。本発明は、上記の問題点を克服し、ＡＰＭを効率的にシリコン内に実現することを可能にする。ビデオＡ−Ｄ変換器およびデコーダ１２は、アナログ・ビデオ信号を受信する入力と、４：２：２のビデオ・フォーマットの信号を提供する出力とを有する。４：２：２信号は、ビデオ・プレプロセッサ１４の入力に接続され、プレプロセッサ１４は４：２：０のビデオ・フォーマットの信号を提供する。ビデオ・プレプロセッサ１４の出力はビデオ・エンコーダ１６の入力に接続される。エンコーダ１６については図２で詳細に説明する。ビデオ・エンコーダ１６は、圧縮されたビデオ・ビットストリームを入力／出力（Ｉ／Ｏ）インタフェース回路１８に提供する。Ｉ／Ｏインタフェース１８は、制御，アドレスおよびデータ・バスを介して信号プロセッサ２０に結合される。Ｉ／Ｏインタフェース１８は、被圧縮ビデオ・ビットストリームを信号プロセッサ２０で利用される特定種類の信号プロセッサとインタフェースする。Ｉ／Ｏインタフェース１８は、被圧縮ビデオ・ビットストリームをビデオ・デコーダ２２に与えるビデオ・デコーダ２２の入力にも結合される。ビデオ・デコーダ２２の出力は、ポスト・プロセッサ２４の入力に接続される。ビデオ・デコーダ２２の出力は４：２：０のビデオ・フォーマットである。ポスト・プロセッサ２４の出力は、４：２：２のビデオ・フォーマットで、ビデオＤ−Ａ変換器およびエンコーダ２６の入力に接続される。ビデオＤ−Ａ変換器およびエンコーダ２６の出力は、アナログ・ビデオ出力を提供する。またさらに、直接メモリ・アクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）／ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：  ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）インタフェース回路２８が図示される。ＤＭＡ／ＤＲＡＭインタフェース回路２８は、内部バス３２を介して、ビデオ・プレプロセッサ１４，ビデオ・エンコーダ１６，ビデオ・デコーダ２２およびポスト・プロセッサ２４の各々に結合される。ＤＭＡ／ＤＲＡＭインタフェース回路２８は、制御，アドレスおよびデータ・バスを介してＤＲＡＭ３０に結合される。ビデオ・コデック１０は、アナログ・ビデオ信号を受信し、それをビデオＡ−Ｄ変換器およびデコーダ１２とビデオ・プレプロセッサ１４とを介して２つの異なるビデオ・フォーマットに変換し、４：２：０信号をビデオ・エンコーダに与えるよう機能し、ビデオ・エンコーダが信号を被圧縮ビデオ・ビットストリームに圧縮する働きをする。被圧縮ビデオ・ビットストリームは、信号プロセッサ２０により利用され、信号プロセッサ２０はホストとして機能して被圧縮ビデオ・ビットストリームをチャネルに与えて送信する。どのタイプのチャネルが用いられるかにより、信号プロセッサ２０は被圧縮ビデオ・ビットストリームをアナログ・フォーマットに変換するか、あるいはデジタル・フォーマットのままにする。Ｉ／Ｏインタフェース１８も被圧縮ビデオ・ビットストリームを提供する機能を果たすが、この被圧縮ビデオ・ビットストリームは信号プロセッサ２０を介してチャネル上で、ビデオ・デコーダ２２により受信される。ビデオ・デコーダ２２は、ビデオ・ビットストリームを、ポスト・プロセッサ２４が用いる４：２：０のビデオ・フォーマットに圧縮解除する。ポスト・プロセッサ２４は、４：２：０のフォーマットを、ビデオＤ／Ａ変換器２６により用いられる４：２：２のフォーマットに変換する。ビデオＤ／Ａ変換器２６は、従来のテレビジョンまたはビデオ・モニタが受け入れることのできるアナログ出力を提供する。ビデオ・コデック１０の形式は、図示される如く実質的には従来通りである。言い換えると、既存の集積回路製品を用いて、ビデオＡ−Ｄ変換器およびデコーダ１２，ビデオ・プレプロセッサ１４，ポスト・プロセッサ２４およびビデオＤ−Ａ変換器およびエンコーダ２６を実現することができる。しかし、ビデオ・エンコーダ１６およびビデオ・デコーダ２２の実行例と効率性は、用途により変わる。本発明が扱うのは、ビデオ・エンコーダ１６およびビデオ・デコーダ２２の特定の実行例である。
【０００６】
図２には、図１のビデオ・エンコーダ１６の詳細なブロック図を示す。ビデオ・エンコーダ１６は、一般に、４：２：０のビデオ・フォーマットでビデオ信号を受信する入力を有する動き推定器回路３６によって構成される。動き推定器３６の出力は、ベクトル格納読出モジュール３８に複数の動きベクトルを提供する。モジュール３８は、動き補償および変位フレーム差回路４２の入力に接続される出力を有する。動き補償および変位フレーム差回路４２の出力は、離散コサイン変換および逆離散コサイン変換（ＤＣＴ：  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ／ＩＤＴ：  Ｉｎｖｅｒｓｅ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ）回路４４またはモジュールの入力に接続される。一般に、ＩＤＴ／ＤＣＴ回路４４は、ウェーブレットまたは離散コサイン変換などの圧縮／圧縮解除アルゴリズムに基づき変換を実行する。離散コサイン変換および逆ＤＣＴ回路４４の出力は、被圧縮ビデオ出力ビデオストリームを提供するビットストリーム・エンコーダ４６の入力に接続される。速度制御回路４８は、これも図１に図示される内部バス３２を介して、動き推定器３６，動き補償および変位フレーム差回路４２および離散コサイン変換および逆ＤＣＴ回路４４の各々に接続される。
【０００７】
動作中は、ビデオ・エンコーダ１６は、前回のフレームの画素情報から現行フレームの動き推定を実行することにより機能する。動き推定器３６が、複数の動きベクトルを提供する。この動きベクトルは、前回のフレームと現行のフレームとの間の８ｘ８画素ブロックの変位を表す。動きベクトル格納読出モジュール３８が動きベクトルを受信する。図３に関連してさらに説明されるが、モジュール３８はＨ．２６３国際規格などのビデオ規格において高度予測モードを実現するために必要とされる動きベクトルを読出および格納する働きをする。モジュール３８がこのような動きベクトルを読出し格納すると、モジュール３８はその出力において２種類の動きベクトルを動き補償および変位フレーム差回路４２に提供する。提供される第１種類の動きベクトルがオーバラップブロック動き補償に用いられる。提供される第２種類の動きベクトルは、前回のフレーム再構築および動き補償に用いられる動きベクトルである。動き補償および変位差フレーム回路４２は、これら２種類の動きベクトルを取り入れ、２つの関数を実行する：すなわち、変位フレーム差および動き補償である。動き補償関数は、上記の２種類の動きベクトルを用いて、遠隔のデコーダの解読を複製する。動き補償関数は、バス３２を介して動き推定器３６に関して再構築される基準フレームを提供する。このフレームは、前フレームまたは再構築フレームとも呼ばれ、遠隔デコーダにより解読されるものの正確な複製である。これがビデオ・エンコーダ１６が次のフレームを符号化する際に動き推定の基準フレームとして動き推定器３６により用いられる。変位フレーム差関数は、当初の（基準）フレームから動き推定されるフレームを差し引き、その差を離散コサイン変換および逆ＤＣＴ回路４４に与える。離散コサイン変換および逆ＤＣＴ回路４４は、圧縮関数に基づき損失の多い変換を行う。ＤＣＴ／ＩＤＣＴ４４の出力と動き推定器３６からの動きベクトルとがビットストリーム・エンコーダ４６に与えられる。ビットストリーム・エンコーダ４６は、Ｈ．２６３に準じてデータを配列し、圧縮されたビデオ・ビットストリーム出力をチャネルに提供する。チャネル上に送付されるだけでなく、ＤＣＴ／ＩＤＣＴ回路４４の圧縮出力は、同じＤＣＴ／ＩＤＣＴ回路４４の逆変換関数を用いて圧縮解除される。この圧縮解除された出力は、次にバス３２を介して、同じ動き補償および変位フレーム差回路４２に送られる。この情報は、変位差フレーム関数により用いられ、その前の減算を取り消し、動き推定器３６の基準フレームを再度作成する。これはチャネルの他端で遠隔デコーダにより解読されるものの正確な複製である。
【０００８】
図３には、本発明による図２の動きベクトル格納読出モジュール３８を示す。動きベクトル・レジスタ５０は、現在の動きベクトルを動きベクトルＳＲＡＭアレイ５２に提供する出力を有する。この動きベクトルＳＲＡＭアレイ５２は、より一般的には動きベクトルを格納する複数の格納要素と呼ばれる。ベース・アドレスを生成するベース・アドレス・カウンタ５４がアドレス発生器５６に接続される。アドレス発生器５６は、ルックアップ・テーブル５８からオフセット値を受信する第２入力を有する。ルックアップ・テーブル５８は、ブロック番号を受信する第１入力を有する。ブロック番号は、多くのビデオ規格で定義されるマクロブロック内の４つの可能なブロックのうちの１つを表す。ルックアップ・テーブル５８は、Ｈ．２６３国際規格に必要なＯＢＭＣまたは予測子計算モードのいずれか一方を実現するためのＯＢＭＣ／予測子モード信号を受信する第２入力を有する。ルックアップ・テーブル５８は、所望の動きベクトル（左，上，右上，右，下）を選択する第３入力を有する。これについては図５および図６において詳細に説明する。状態装置は４つの可能な選択肢（左，上，右上，右下）を循環し、新しいマクロブロックが符号化されると最初に戻ってリセットされる。モジューロ加算器５７は、ルックアップ・テーブル５８からオフセット値を受信する第１入力と、ベース・アドレス・カウンタ５４からベース・アドレスを受信する第２入力と、動きベクトルのＳＲＡＭアレイ５２に接続されるアドレスを提供する出力とを有する。ＳＲＡＭアレイ５２は、選択される動きベクトルを乗算器回路６０に与える出力を有する。乗算器６０は、予測子計算機回路６２の入力に接続される第１出力を有する。乗算器６０は、ＯＢＭＣ／予測モード制御信号に応答して機能する。この信号は、ルックアップ・テーブル５８において適切なオフセット値を選択する際にも用いられる。乗算器６０は、動き補償ユニット４２の入力に接続される第２出力を有する。動き補償ユニット４２は、図２に図示されるＤＣＴ／ＩＤＣＴ回路４４に信号を提供する出力を有する。動きベクトル格納読出モジュール３８の動作を説明する前に、図４ないし図６に関して説明する。
【０００９】
図４に、タイプ共通中間フォーマット（ＣＩＦ）のビデオ・フレーム内の１行のマクロブロック・レイアウトを示す。マクロブロック・レイアウトは複数の行のマクロブロックを有する。図面の便宜上、１行のマクロブロックのみを詳細に示す。各行は２２個のマクロブロックを有し、それぞれにＣＯ〜Ｃ−２１とラベルが付けられる。図示される形式では、マクロブロックＣ０は現行のマクロブロックを時間的に示す。マクロブロックＣ０のすぐ上にはマクロブロックＣ−２２があり、これは時間領域において、過去の２２個のマクロブロックからのマクロブロックである。ハードウェアおよびメモリを最大に節約するためには、ＯＢＭＣおよび予測子関数のために用いられるメモリを共有および合成することが必要である。ＯＢＭＣ関数は、予測子関数に関して、時間にして１マクロブロック分だけ遅延しなければならない。この事実により、ＯＢＭＣ関数はマクロブロックＣ−１で動作（動きベクトルの格納および読出）を行うことになり、一方予測子関数はマクロブロックＣ０で動作する。ＯＢＭＣ関数をマクロブロックＣ−１まで遅延させることが、ＯＢＭＣ関数が動作するマクロブロックのすぐ右側（図６に関して詳細に説明する）の動きベクトルを読出する必要があるＯＢＭＣ要件のために必要である。ＯＢＭＣ関数がマクロブロックＣ０で動作すると、「右側」の動きベクトルをマクロブロックＣ＋１から読出しなければならない。これは１ブロックだけ将来のマクロブロックであり、まだ使用可能になっていない。図５および図６に関してさらに説明するように、ＯＢＭＣおよび予測子関数の「上の」マクロブロックから動きベクトルを読出することも必要である。「上」の動きベクトルは、ＯＢＭＣ関数に関しては２３マクロブロック分だけ過去において処理されたものであり、予測子関数に関しては２２マクロブロック分だけ過去に処理されたものであることに注目することが重要である。このため、２４個（Ｃ０〜Ｃ−２３）のマクロブロックの動きベクトルを格納することが必要になる。
【００１０】
図５および図６においては次のような命名法を採用する：１６ｘ１６画素マクロブロックを表す大きな正方形が４個のより小さな８ｘ８画素ブロックに分割される。８ｘ８画素ブロックの各々は、それに関連する自身の動きベクトルを有する。４個の８ｘ８画素ブロックは、当技術では通常「ブロック」と呼ばれるが、ブロック１，２，３，４と番号が振られる。ブロック１はマクロブロックの左上隅であり、ブロック２が右上隅、ブロック３が左下隅、ブロック４が右下隅である。マクロブロックの処理とは、そのマクロブロックの符号化または解読を指す。図５および図６における「Ｃ−１」の名前は、１マクロブロック分だけ過去に処理されたマクロブロックを指す。同様に、マクロブロック「Ｃ−２１」は、２１マクロブロック分だけ過去に処理されたマクロブロックを指す。「Ｃ０」は現在処理中のマクロブロックを指す。図５においては、マクロブロックＣ０内でブロック１について読出すべき動きベクトルは左，上および右上であることに注目することが重要である。左動きベクトルはマクロブロックＣ−１内のブロック２のものである。上動きベクトルはマクロブロックＣ−２２内のブロック３のものである。右上動きベクトルはマクロブロックＣ−２１内のブロック３のものである。現在処理中のマクロブロック内のブロック２に関する読出パターンは次のようになる：左動きベクトルが現在処理中のブロック（Ｃ０）のブロック１である。上動きベクトルはマクロブロックＣ−２２のブロック４である。右上動きベクトルはマクロブロックＣ−２１のブロック３である。現在処理中のマクロブロック内のブロック３に関する読出パターンもブロック１，２，３，４とは異なる。現行ブロック内のブロック３の読出パターンは次のようになる：左動きベクトルがマクロブロックＣ−１のブロック４である。上動きベクトルは現在処理中のマクロブロック（Ｃ０）のブロック１であり、右上動きベクトルは現在処理中のマクロブロック（Ｃ０）のブロック２である。現在処理中のマクロブロック内のブロック４については、左動きベクトルが現行マクロブロックＣ０内のブロック３である。上動きベクトルは現行マクロブロックＣ０のブロック１であり、右上動きベクトルは現行マクロブロックＣ０内のブロック２である。この場合も、ブロック１，２，３，４に関する読出パターンが互いに異なることに注目することが重要である。これらのパターンは、Ｈ．２６３規格において定義される。
【００１１】
本発明は、ＯＢＭＣ関数の動きベクトルの読出にも対応する。この関数も同様にマクロブロック内の各ブロックについて別々の読出パターンを有する。ＯＢＭＣ関数は、マクロブロック内の各ブロックについて左，上，右および下動きベクトルを読出する必要がある。この場合も、右に動きベクトルを読出する要件は現行のマクロブロックの右の動きベクトルがまだ処理されていないために困難であることに注目することが重要である。右動きベクトルを読出するためには、ＯＢＭＣ関数を１マクロブロック分だけ時間的に遅延させることが必要である。従って、ＯＢＭＣ関数は、予測子関数より１マクロブロック分だけ後にくるマクロブロックＣ−１で動作する。ＯＢＭＣ関数の読出パターンは次のようになる：ブロック１については、左動きベクトルがマクロブロックＣ−２のブロック２である。上動きベクトルがマクロブロックＣ−２３のブロック３である。右動きベクトルはマクロブロックＣ−１のブロック２であり、下動きベクトルはマクロブロックＣ−１のブロック３である。処理中の同じＯＢＭＣ動きベクトル内のブロック２については、左動きベクトルがマクロブロックＣ−１内のブロック１である。上動きベクトルはマクロブロックＣ−２３のブロック４である。右動きベクトルはマクロブロックＣ０のブロック１であり、下動きベクトルはマクロブロックＣ−１のブロック４である。ＯＢＭＣ関数のブロック３については、左動きベクトルがマクロブロックＣ−２のブロック４である。上動きベクトルはマクロブロックＣ−１のブロック１である。右動きベクトルはマクロブロックＣ−１のブロック４であり、下動きベクトルはマクロブロックＣ−１のブロック３である。ＯＢＭＣマクロブロックＣ−１のブロック４については、左動きベクトルがマクロブロックＣ−１のブロック３である。上動きベクトルはマクロブロックＣ−１のブロック２である。右動きベクトルはマクロブロックＣ０のブロック３であり、下動きベクトルはマクロブロックＣ−１のブロック４である。
【００１２】
図３に戻り、動きベクトル格納読出モジュール３８は次のように機能する。図５および図６に関して上述されるＯＢＭＣおよび予測子モードの両方の８個のアドレス化スキームのオフセットがルックアップ・テーブル５８を介して提供される。ルックアップ・テーブル５８は、その入力としてマクロブロック内のブロック番号（１，２，３，４）と、必要な動きベクトル（右，左など）と、動きベクトル読出の適切なオフセットを選択するための関数モード（ＯＢＭＣ／予測子）とを取り入れる。
【００１３】
実行される最初のモードは予測モードである。予測モードを実行するには、図５を参照する。図５は、Ｈ．２６３国際規格により定義される４つのマクロブロック構造を示す。各マクロブロックはマクロブロック内に８ｘ８ブロックを表す４つの動きベクトルを有する。予測モードについては、Ｈ．２６３国際規格はマクロブロックに含まれる４つのブロックの各々に関して左，上および右上動きベクトルの読出を必要とする。各ブロックの左，上および右上動きベクトルの読出パターンは、マクロブロック内の個々のブロック１，２，３，４に関して異なる。パターンを実現するために、カウンタ５４がゼロから５３までの間の数値をアドレス発生器５６に提供する。アドレス発生器５６は、カウンタの出力に２を掛けてベース・アドレスを得る。この実行例で２を掛ける乗算が必要とされるのは、２つの動きベクトルが各計数において格納されるためである。ルックアップ・テーブル５８はブロック番号，モードおよび動きベクトル選択に基づきオフセット値を出力する。モジューロ加算器５７は、ルックアップ・テーブル５８が与えるオフセット値をカウンタ５４が与えるベース・アドレスに加算する。その和がＳＲＡＭアレイ５２との通信においてポインタとして用いられるアドレスとなる。このアドレスは、Ｈ．２６３規格の読出パターンにより適切な左，上および右上動きベクトルを読出するために用いられる。ＳＲＡＭアレイ５２内でアドレス指定される左，上および右上動きベクトルが、ＳＲＡＭアレイ５２により乗算器６０（Ｍｕｘ）を介して選択的に出力される。選択される動きベクトルは予測子計算機６２に与えられる。予測子計算機６２は、選択される上，右上および左動きベクトルのメジアン（中央値）を計算するよう機能する。それに由来するメジアンは、通常「予測子」と呼ばれ、ビットストリーム・エンコーダ４６に提供される。ここで予測子を動き推定器３６により提供される動きベクトルから減じる。その結果、当技術では「差」と呼ばれるが、差がチャネル上に送付される。予測子計算機６２の実行例は当技術では周知である。
【００１４】
ＯＢＭＣモードにおいては、ルックアップ・テーブル５８がＨ．２６３規格に準拠するＯＢＭＣ用動きベクトル読出パターン（図６）に従うオフセット値を提供する。アドレス発生器５６は、予測子計算に関する上記の説明と同様に機能して、アドレスがＳＲＡＭアレイ５２にアドレスが送られ、アレイ５２は、選択した動きベクトルを乗算器６０に送る。乗算器６０から、ＯＢＭＣ動きベクトルが動き補償ユニット４２に乗算器６０を介して与えられる。動き補償ユニットはＯＢＭＣ動きベクトルを利用して動き推定器のために再構築フレームを構築する。
【００１５】
マクロブロックの上部の動きベクトル、すなわちブロック１，２はマクロブロックＣ−２を超えてセーブする必要がないことに注目すると、ＲＡＭにおいて大幅な節約を実現することができることを理解頂きたい。これを理解するには、図６のブロック１（ＯＢＭＣ関数）を参照されたい。図６は、上半分または部分（Ｔ−ｘ）の動きベクトルの集合が必要とされる最後のときがマクロブロックＣ−１内のブロック１の左動きベクトルの読出のためであることを示す。従って、下半分または部分動きベクトル（Ｂ−ｘ）の集合のみがマクロブロックＣ−２の後は必要になる。これは、「上」動きベクトルを得るためには、処理中のマクロブロック上のマクロブロックからの下半分または部分動きベクトルのみが必要となるからである。
【００１６】
図７には、ＳＲＡＭアレイ５２の１つの形態に関するメモリ割当の例が示される。図示される形態においては、２７個の半マクロブロックのうち複数のものが提供され、各半マクロブロックまたは部分にはマクロブロックの下または上動きベクトルが含まれる。メモリ・レイアウトにおいては、２４個の下半分のマクロブロックと、３個の上半分のマクロブロックとがある。マクロブロックの上半分はマクロブロックのブロック１，２の動きベクトルを格納する。マクロブロックの下半分は、マクロブロックのブロック３，４の動きベクトルを格納する。さらに詳しくは、４８個のアドレス位置が下動きベクトルに割り付けられ、６個のアドレス位置が上動きベクトルに割り付けられる。この割付は、下動きベクトルは２３マクロブロック分の時間格納する必要があり、上動きベクトルは３マクロブロック分の時間しか格納する必要がないという事実に対応する。図７で用いられる命名法は次の通りである：Ｂ０は現在処理中のマクロブロックを表し、現在解読中の下動きベクトル（ブロック３，４）が格納される場所である。Ｂ−１は、１マクロブロック分だけ過去に処理されたマクロブロックの下動きベクトルが格納される場所である。同様に、Ｔ０は現行のマクロブロックの上動きベクトル（ブロック１，２）が格納される場所であり、Ｔ−１は１マクロブロック分だけ過去に処理されたマクロブロックの上動きベクトルが格納される場所である。これはスライディング／相対アドレス指定スキームであり、絶対的なアドレス指定ではないことに留意することが重要である。Ｂ０，Ｂ−１マクロブロックは絶対アドレス・スキームの場合のように絶対アドレス０および絶対アドレス２にコード化されることはない。ベース・アドレスは常にＢ０の左動きベクトル（現在処理中のマクロブロックの下動きベクトル）を指示することに留意されたい。これは、２に図３のベース・アドレス・カウンタ５４内の値を掛けることにより計算されるのと同じベース・アドレスである。カウンタが進み、新しいマクロブロックの処理を開始すると、上動きベクトルＴ０が古くなり上動きベクトルＴ−１になることに留意することが重要である。新しい上動きベクトルＴ０が下動きベクトルＢ−２３を書き換える。同様に、新しい下動きベクトルＢ０は古い上動きベクトルＴ−２を書き換える。このように、下動きベクトルは常に上動きベクトルを書き換え、上動きベクトルは常に下動きベクトルを書き換える。上および下の動きベクトルに割り付けられる格納場所が２つの異なるタイムラインを形成することにも注目されたい。
【００１７】
上記の概念の例を以下に示す。この例では、カウンタの現在値が５のときＳＲＡＭアレイ５２のベース・アドレス１０は現行マクロブロックの下動きベクトルが格納される場所であることを示す。現行マクロブロックの上動きベクトルは常にカウンタより６アドレス分だけ先に、この例ではアドレス１６に格納されることになる。その理由は、図７のメモリ割付を注意深く見るとわかる。現行の計数は常にＢ０を指示し、Ｔ０のスライディング・アドレス空間は６をモジューロ加算してＴ０に統合すると得られる。次のマクロブロックを処理して、計数が６に進むと、全部が１マクロブロックだけ「古くなる」。ベース・アドレス１０は過去１マクロブロックからの下動きベクトルを含み、ベース・アドレス１２は新しい現行のマクロブロックの下動きベクトルを含む。ベース・アドレス１２がマクロブロックＣ−２（Ｃ−２は上動きベクトルＴ−２および下動きベクトルＢ−２を含むマクロブロックである）の上動きベクトルを以前は含んだことに留意することが重要である。カウンタが６に進んだときに、３マクロブロック時間の間しか格納する必要のないＴ−２動きベクトルが終了し、下動きベクトルＢ０が代わりに書き込まれた。
【表１】
0004545250.tif 000002
要するに、動きベクトル格納読出モジュール３８全体の動作が次の例に基づき説明される：ベース・アドレス・カウンタ５４が６の値を有するとすると、それが指す実際のアドレスは１２になる。これは、各ベース・アドレス位置に２つの動きベクトルが含まれるためである。従って、実際のアドレス１２が、Ｂ０の左動きベクトルが格納される場所となる。ルックアップ・テーブル５８の入力が：ブロック番号＝１，ＯＢＭＣ／予測モード＝ＯＢＭＣであるとする。するとブロックＣ−１の左，上，右および下ＯＢＭＣ動きベクトルは次のように読出される：
【表２】
0004545250.tif 000003
上記の例においては、図６を用いて、ブロック１のＯＢＭＣ左動きベクトルがマクロブロックＣ−２の右上ブロック、メモリ位置Ｔ−２にあることがわかる。図７または上記の例を用いて、オフセットを決定することができる。この場合、Ｔ−２の右動きベクトルは、３をモジューロ加算することにより得られる。同様に、図６では、右動きベクトルがメモリ・セグメントＴ−１の右側にあり、上動きベクトルはメモリ・セグメントＢ−２３の左側にあり、下動きベクトルはメモリ・セグメントＢ−１の左側にあることがわかる。
【００１８】
本発明の装置および方法が符号化動作に関して説明されたので、解読動作における本発明の使用を説明する。図１のデコーダ部分は、ビデオＤ−Ａ変換器およびエンコーダ２６，ポスト・プロセッサ２４およびビデオ・デコーダ２２を含む。
【００１９】
図８には、ビデオ・デコーダ２２の詳細が図示される。ビデオ・ビットストリームがビットストリーム・デコーダ７０に入力として与えられる。ビットストリーム・デコーダ７０は、解読用動きベクトル格納読出モジュール７２の入力に接続される第１出力を有する。ビットストリーム・デコーダ７０の第２出力は、図２に関連して前述された離散コサイン変換および逆ＤＣＴ４４の入力に接続される。解読用動きベクトル格納読出モジュール７２の出力が、図２に関して前述された動き補償回路４２に接続される。動き補償回路４２の出力は加算器７６と呼ばれる合成器回路の第１入力に接続される。離散コサイン変換および逆ＤＣＴ４４の出力は加算器７６の第２入力に接続される。加算器７６の出力は、ビデオ・フォーマット４：２：０で信号を提供する。ポスト・プロセッサ２４の出力は、ビデオＤ／Ａエンコーダ２６の入力に接続される。ポスト・プロセッサ２４はビデオ・フォーマット４：２：２で信号を提供する。ビデオＤ／Ａエンコーダ２６の出力は、図１に図示されるのと同じ信号であるビデオ・アナログ信号を提供する。
【００２０】
動作中、デジタル・ビデオ信号がビットストリーム・デコーダ７０に入力され、デコーダ７０は動きベクトル差と画素データとをビデオ・ビットストリームから分離する。動きベクトル差は解読用動きベクトル格納読出モジュール回路７２に送られる。これについては図９にさらに説明する。解読回路７２の出力動きベクトルが動き補償回路４２に送られる。動き補償が実行されると、次に、それに由来する画素が離散コサイン変換および逆ＤＣＴ回路４４からの出力と加算器７６により加算される。ビットストリーム・デコーダ７０により提供される画素データが離散コサイン変換および逆ＤＣＴ４４により処理され、変換ベース圧縮解除を実行する。離散コサイン変換および逆ＤＣＴ回路４４の出力は、第２入力として加算器７６に与えられる。加算器７６は４：２：０のビデオ・フォーマットで信号をポスト・プロセッサ２４に送り、ポスト・プロセッサ２４がデジタル−アナログ変換に先立って後処理を実行する。Ｄ／Ａ変換が実行され、ビデオ・アナログ出力信号を提供する。
【００２１】
図９には、本発明による図８の解読用動きベクトル格納読出モジュール回路７２が図示される。図３に関連する同じ要素に対する同じ参照番号が図９でも用いられるが、図示されるハードウェア実行例に関して容易に複製される類似の回路構成を示すためにダッシュ（’）が付けられる。言い換えると、動き補償ユニット４２などのように同一番号を持つ要素にダッシュが用いられない場合は、同一の要素を図３と図９の機能の間で容易に時間的に共有することができる。図３と図９との間の類似性の結果として、注目すべき主要な差は加算器回路８０が追加されたことである。回路８０は動きベクトルレジスタ５０’から出力を受け取る第１入力と、予測子計算機６２’から出力を受け取る第２入力とを有する。加算器８０の出力は、完全な動きベクトル（予測子および差の和）を与え、これは動きベクトルのＳＲＡＭアレイ５２’により格納されるために用いられる。解読用動ベクトル格納読出モジュール回路７２の動作は、図２の動きベクトル格納読出モジュール３８の動作と類似であり、前述された。従って、解読用動きベクトル格納読出モジュール回路７２の動作の詳細説明は繰り返さない。類似の動作に対する顕著な違いは、解読モードにある動きベクトル差レジスタ５０’が、図３のレジスタ５０が格納する完全な動きベクトルではなく、実際には動きベクトル差を格納することである。さらに、動きベクトルは図３と同様に動きベクトルのＳＲＡＭアレイ５２’に格納しなければならない。ＳＲＡＭアレイ５２’に格納するために動きベクトルを得るには、予測子計算機６２’からの予測子に、動きベクトルレジスタ５０’からの動きベクトル差を加えて、動きベクトルのＳＲＡＭアレイ５２’内に格納する動きベクトルを得なければならない。これらの動きベクトルの格納が、第２マクロブロックに対応する第２群の動きベクトルを形成する。
【００２２】
以上、動きベクトルを効率的に読出および格納する改善されたビデオ動画システムおよび方法が提供されたことは明らかである。メモリに動きベクトルを格納する方法は、各々がビデオ信号の部分を表す第１マクロブロックに対応する４つの動きベクトルを受信する段階によって構成される。第１および第２動きベクトルは第１マクロブロックの上部分に対応し、第３および第４動きベクトルはマクロブロックの下部分に対応する。第１および第２動きベクトルはメモリの第１部分に格納され、第３および第４動きベクトルがメモリの第２部分に格納される。本発明は、動きベクトルのＳＲＡＭアレイ５２，５２’を実現するために必要なメモリ量を大幅に軽減する。たとえば、１つの動きベクトルにつき２バイトがあるとすると、ビデオ・コデックのデコーダ部分がＯＢＭＣおよび予測子関数を実行するには１９２バイトのＲＡＭ格納部が必要になる。１９２は次のように計算される：
［（２４マクロブロック）（４動きベクトル／マクロブロック）（２バイト／動きベクトル）］＝１９２
１９２バイトのＲＡＭは必要とされる最小ＲＡＭサイズのように見えるが、本発明により大幅な節約がなされる。特に、本発明は図４に示されるマクロブロックＣ−２を超えてセーブする必要のないマクロブロックの上の動きベクトルをセーブまたは格納することを避ける。言い換えると、各マクロブロックＣ−３，Ｃ−４，Ｃ−５〜Ｃ−２３の２つの上ブロックがなくなる（格納されない）。この空間節約方法により、メモリ・サイズ要件は次のようになる：
［（下動きベクトル用の２４マクロブロック）（２動きベクトル／マクロブロック）］＝４８下動きベクトル
（上動きベクトル用の３マクロブロック）（２動きベクトル／マクロブロック）＝６上動きベクトル
総バイト＝［（４８＋６）動きベクトル］［動きベクトル毎２バイト］＝１０８バイト
予測子およびＯＢＭＣ関数はビデオ・コデックのエンコーダおよびデコーダ側で実行しなければならないので、総合的な節約分は２（１０８）対２（１９２）となる。この例では、本発明を用いることにより、上記の以前の計算の３８４バイトに対し２１６バイトのサイズの節約（約４４％の節約）となる。本発明をＨＤＴＶ用ＭＰＥＧ−４と共に用いると、水平解像度がさらに増すために節約分ははるかに大きくなる。本件に開示される本発明のメモリ割付法を用いることにより、マクロブロックＣ−２後のブロック１，２を無くすために複雑なアドレス指定法は必要ない。本発明により、Ｈ．２６３規格のＯＢＭＣおよび予測子関数が追加のアドレス指定用ハードウェアを追加せずに同じＲＡＭを共有することができる。必要なハードウェアが軽減されるので、シリコン領域，コストおよび消費電力がすべて削減され、結果としてソフトウェアによる実行に匹敵し、さらにはそれよりも有利なビデオ・コデックのハードウェアによる実行が可能になる。
【００２３】
当業者には、本発明の範囲から逸脱せずに修正および変形が可能であることを理解頂けよう。たとえば、「メモリ」という用語が説明される部分で種々の電子的メモリを実現することができることが理解頂けよう。本発明の方法を実現するために種々の論理ゲート構造を利用することができる。従って、本発明は添付の請求項の範囲に入るこれらすべての変形および修正を包含するものである。
【図面の簡単な説明】
【図１】本発明で用いられるビデオ通信システムをブロック図に示す。
【図２】本発明によるビデオ・エンコーダをブロック図に示す。
【図３】本発明による図２の動きベクトル格納読出回路構成をブロック図に示す。
【図４】共通中間フォーマット（ＣＩＦ：  Ｃｏｍｍｏｎ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｆｏｒｍａｔ）サイズ・フレーム内の１行のマクロブロック・レイアウトを等角図に示す。
【図５】Ｈ．２６３規格による予測子計算のための動きベクトル読出パターンを示す。
【図６】Ｈ．２６３規格によるＯＢＭＣ関数のための動きベクトル読出パターンを示す。
【図７】図３のＳＲＡＭアレイに関するメモリの割付を示す。
【図８】本発明による図１のシステムで用いるビデオ・デコーダ・ブロック図である。
【図９】図８の解読機能用動きベクトル格納読出回路構成をブロック図に示す。
【符号の説明】
１０  ビデオ・コデック
１２  ビデオＡ／Ｄ変換器およびデコーダ
１４  ビデオ・プレプロセッサ
１６  ビデオ・エンコーダ（図２）
１８  Ｉ／Ｏインタフェース
２０  信号プロセッサ
２２  ビデオ・デコーダ（図８）
２４  ビデオ・ポスト・プロセッサ
２６  ビデオＤ／Ａ変換器およびエンコーダ
２８  ＤＭＡ／ＤＲＡＭインタフェース
３０  ＤＲＡＭ（フレーム格納）
【図１】
0004545250.tif 000004
【図２】
0004545250.tif 000005
【図３】
0004545250.tif 000006
【図４】
0004545250.tif 000007
【図５】
0004545250.tif 000008
【図６】
0004545250.tif 000009
【図７】
0004545250.tif 000010
【図８】
0004545250.tif 000011
【図９】
0004545250.tif 000012