(57)【要約】【課題】ビデオをエンコーディングおよびデコーディングする技法。【解決手段】ビデオシーケンスをエンコーディングするのに必要な処理サイクルとメモリ転送との数を減少させることが可能なビデオエンコーディング技法を開示する。ビデオエンコーディング技法は、動き推定ルーチンのための検索スペースに対応するカラム中にビデオブロックを記憶する候補メモリを利用する。メモリ制御ユニットは、絶対差分和（ＳＡＤ）技法や二乗差分和（ＳＳＤ）技法を用いて、候補メモリをアドレス指定し、複数の画素を並行に検索し、同時に、エンコーディングされるビデオブロック中の画素と比較する。差分プロセッサはこの並行計算を実行する。次いでエンコーディングされるビデオブロックに対して、候補メモリを、検索スペース全体を再ロードすることによってではなくビデオブロックの新しいカラムをロードすることによってインクリメンタルに更新する。
2005530422.tif 000002
【特許請求の範囲】
【請求項１】
第１の検索スペースを定義するために画素値の集合をメモリ中にロードし、ここで前記第１の検索スペースは、動き推定ルーチンの第１の逐次代入中にエンコーディングされる第１のビデオブロックと比較される候補ビデオブロックの第１の複数のカラムを定義し、
前記第１のビデオブロックを前記第１の検索スペース中の前記候補ビデオブロックと比較するために前記第１の逐次代入を実行し、そして
第２の検索スペースを定義するためにカラムの部分集合を再ロードし、ここで前記第２の検索スペースは、前記動き推定ルーチンの第２の逐次代入中にエンコーディングされる第２のビデオブロックと比較される候補ビデオブロックの第２の複数のカラムを定義することを、
を含む方法。
【請求項２】
前記第２のビデオブロックを前記第２の検索スペース中の前記候補ビデオブロックと比較するために前記第２の逐次代入を実行することを更に含む請求項１に記載の方法。
【請求項３】
第３の検索スペースを定義するためにカラムの別の部分集合を再ロードし、ここで前記第３の検索スペースは、動き推定ルーチンの第３の逐次代入中にエンコーディングされる第３のビデオブロックと比較される候補ビデオブロックの第３の複数のカラムを定義し、
前記第３のビデオブロックを前記第３の検索スペース中の前記候補ビデオブロックと比較するために前記第３の逐次代入を実行すること、
を更に含む請求項２に記載の方法。
【請求項４】
第４の検索スペースを定義するためにカラムの別の部分集合を再ロードし、ここで前記第４の検索スペースは、動き推定ルーチンの第４の逐次代入中にエンコーディングされる第４のビデオブロックと比較される候補ビデオブロックの第４の複数のカラムを定義し、
前記第４のビデオブロックを前記第４の検索スペース中の前記候補ビデオブロックと比較するために前記第４の逐次代入を実行すること、
を更に含む請求項３に記載の方法。
【請求項５】
前記第１の逐次代入を実行することは、エンコーディングされる前記第１のビデオブロックの画素値と、前記第１の検索スペース中の前記候補ビデオブロックの内の１つの候補ビデオブロックの画素値との間で、複数の差分計算を並行に実行することを含む、請求項１に記載の方法。
【請求項６】
エンコーディングされるマクロブロックの画素と検索スペース内の候補マクロブロックの画素との間で差分計算を実行し、
前記計算に基づいてマイクロブロックの差分値の集合を発生し、ここで前記マイクロブロック差分値は、それぞれ、エンコーディングされる前記マクロブロックを形成する複数のマイクロブロックの各々と、前記候補マクロブロックを形成するマイクロブロックとの間の差を示し、
前記計算に基づいてマクロブロックの差分値を発生し、ここで前記マクロブロック差分値は、エンコーディングされる前記マクロブロックと前記候補マクロブロックとの間の差を示す
ことを含む方法。
【請求項７】
前記差分計算を実行することは、複数の差分計算を並行に実行することを含む、請求項６に記載の方法。
【請求項８】
前記並行に実行される複数の差分計算は、前記マイクロブロックの内の１つのマイクロブロックのローに対応する、請求項７に記載の方法。
【請求項９】
動き推定ルーチンに従ってビデオフレームをエンコーディングするエンコーダであって、前記エンコーダは、画素値の集合をメモリ中にロードして、第１の検索スペースを定義し、前記第１の検索スペースは、前記動き推定ルーチンの第１の逐次代入中にエンコーディングされる第１のビデオブロックと比較される候補ビデオブロックから成る第１の複数のカラムを定義するものであり、また、前記第１の逐次代入を実行して、前記第１のビデオブロックを前記第１の検索スペース中の前記候補ビデオブロックと比較し、また、カラムの部分集合を再ロードして、第２の検索スペースを定義し、前記第２の検索スペースは、前記動き推定ルーチンの第２の逐次代入中にエンコーディングされる第２のビデオブロックと比較される候補ビデオブロックから成る第２の複数のカラムを定義するように構成されている、前記エンコーダと、
前記エンコーディングされたビデオフレームを送信する送信機と、
を含むデバイス。
【請求項１０】
前記エンコーダは、エンコーディングされる前記第２のビデオブロックを前記第２の検索スペース中の前記候補ビデオブロックと比較するために前記第２の逐次代入を実行するように更に構成されている、請求項９に記載のデバイス。
【請求項１１】
前記エンコーダは、カラムの別の部分集合を再ロードして、第３の検索スペースを定義し、前記第３の検索スペースは、動き推定ルーチンの第３の逐次代入中にエンコーディングされる第３のビデオブロックと比較される候補ビデオブロックの第３の複数のカラムを定義するものであり、また、前記第３の逐次代入を実行して、前記第３のビデオブロックを前記第３の検索スペース中の前記候補ビデオブロックと比較するように更に構成されている、請求項１０に記載のデバイス。
【請求項１２】
前記エンコーダは、カラムの別の部分集合を再ロードして、第４の検索スペースを定義し、前記第４の検索スペースは、動き推定ルーチンの第４の逐次代入中にエンコーディングされる第４のビデオブロックと比較される候補ビデオブロックの第４の複数のカラムを定義するものであり、また、前記第４の逐次代入を実行して、前記第４のビデオブロックを前記第４の検索スペース中の前記候補ビデオブロックと比較するように更に構成されている、請求項１１に記載のデバイス。
【請求項１３】
前記エンコーダは、エンコーディングされる前記第１のビデオブロックの画素値と、前記第１の検索スペース中の前記候補ビデオブロックの内の１つの候補ビデオブロックの画素値との間で複数の差分計算を並行に実行するように構成されている、請求項９に記載のデバイス。
【請求項１４】
前記デバイスは、ディジタルテレビ、無線通信デバイス、携帯情報端末、ラップトップコンピュータ、デスクトップコンピュータ、ディジタルカメラ、ディジタル記録デバイス、ビデオ機能を有するセルラー無線電話及びビデオ機能を有する衛星無線電話からなるグループから選択される、請求項９に記載のデバイス。
【請求項１５】
ビデオフレームをリアルタイムでキャプチャするビデオキャプチャデバイスを更に備え、前記エンコーダはビデオフレームをリアルタイムでエンコーディングし、前記送信機はエンコーディングされたビデオフレームをリアルタイムで送信するように構成されている、請求項９に記載のデバイス。
【請求項１６】
ビデオフレームをエンコーディングするエンコーダであって、前記エンコーダは、エンコーディングされるマクロブロックの画素と検索スペース内の候補マクロブロックの画素との間で差分計算を実行し、また、前記差分計算に基づいてマイクロブロックの差分値の集合を発生し、前記マイクロブロック差分値は、それぞれ、エンコーディングされる前記マクロブロックを形成する複数のマイクロブロックの各々と、前記候補マクロブロックを形成するマイクロブロックとの間の差を示すものであり、また、前記計算に基づいてマクロブロックの差分値を発生し、前記マクロブロック差分値は、エンコーディングされる前記マクロブロックと前記候補マクロブロックとの間の差を示すように構成されている、エンコーダと、
エンコーディングされたビデオフレームを送信する送信機と、
を含むデバイス。
【請求項１７】
前記エンコーダは、複数の差分計算を並行に実行するように構成されている、請求項１６に記載のデバイス。
【請求項１８】
前記並行に実行される複数の差分計算は、前記マイクロブロックの内の１つのマイクロブロックのローに対応する、請求項１６に記載のデバイス。
【請求項１９】
ビデオフレームをリアルタイムでキャプチャするビデオキャプチャデバイスを更に備え、前記エンコーダはビデオフレームをリアルタイムでエンコーディングし、前記送信機はエンコーディングされたビデオフレームをリアルタイムで送信するように構成されており、前記ビデオフレームは、Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ４（ＭＰＥＧ−４）基準に従ってエンコーディングされる、請求項１６に記載のデバイス。
【請求項２０】
前記デバイスはバッテリ式無線デバイスである、請求項１６に記載のデバイス。
【請求項２１】
メモリと、
画素値の集合を前記メモリ中にロードして、第１の検索スペースを定義するメモリ制御ユニットであって、前記第１の検索スペースは、動き推定ルーチンの第１の逐次代入中にエンコーディングされる第１のビデオブロックと比較される候補ビデオブロックの第１の複数のカラムを定義するものであって、また前記メモリ制御ユニットは、カラムの部分集合を再ロードして、第２の検索スペースを定義し、前記第２の検索スペースは、前記動き推定ルーチンの第２の逐次代入中にエンコーディングされる第２のビデオブロックと比較される候補ビデオブロックの第２の複数のカラムを定義するものである、前記メモリ制御ユニットと、
前記第１の逐次代入を実行して、前記第１のビデオブロックを前記第１の検索スペース中の前記候補ビデオブロックと比較し、また、前記第２の逐次代入を実行して、前記第２のビデオブロックを前記第２の検索スペース中の前記候補ビデオブロックと比較するプロセッサと、
を含む装置。
【請求項２２】
前記メモリ制御ユニットは、カラムの別の部分集合を再ロードして、第３の検索スペースを定義し、前記第３の検索スペースは、前記動き推定ルーチンの第３の逐次代入中にエンコーディングされる第３のビデオブロックと比較される候補ビデオブロックの第３の複数のカラムを定義するものであり、
前記プロセッサは、前記第３の逐次代入を実行して、前記第３のビデオブロックを前記第３の検索スペース中の前記候補ビデオブロックと比較する、
請求項２１に記載の装置。
【請求項２３】
前記メモリ制御ユニットは、カラムの別の部分集合を再ロードして、第４の検索スペースを定義し、前記第４の検索スペースは、前記動き推定ルーチンの第４の逐次代入中にエンコーディングされる第４のビデオブロックと比較される候補ビデオブロックの第４の複数のカラムを定義するものであって、
前記プロセッサは、前記第４の逐次代入を実行して、前記第４のビデオブロックを前記第４の検索スペース中の前記候補ビデオブロックと比較する、
請求項２２に記載の装置。
【請求項２４】
前記プロセッサは、エンコーディングされる前記ビデオブロックの内の１つと、前記検索スペースの内の１つの中の前記候補ビデオブロックの内の１つとの間で複数の差分計算を並行に実行するように構成されている、請求項２１に記載の装置。
【請求項２５】
コンピュータ読み取り可能命令を記憶するメモリと、
前記命令を実行して、
エンコーディングされるマクロブロックの画素と検索スペース内の候補マクロブロックの画素との間で差分計算を実行し、
前記計算に基づいてマイクロブロックの差分値の集合を発生し、前記マイクロブロックの差分値は、それぞれ、エンコーディングされる前記マクロブロックを形成する複数のマイクロブロックの各々と、前記候補マクロブロックを形成するマイクロブロックとの間の差を示し、
前記計算に基づいてマクロブロックの差分値を発生し、前記マクロブロックの差分値は、エンコーディングされる前記マクロブロックと前記候補マクロブロックとの間の差を示す、
プロセッサと、
を含む装置。
【請求項２６】
前記プロセッサは、複数の差分計算を並行に実行するように構成されている、請求項２５に記載の装置。
【請求項２７】
前記並行に実行される複数の差分計算は、前記マイクロブロックの内の１つのマイクロブロックのローに対応する、請求項２６に記載の装置。
【請求項２８】
Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ（ＭＰＥＧ）基準に従ってビデオブロックをエンコーディングする装置であって、前記装置は、
画素値の集合をメモリ中にロードして、第１の検索スペースを定義し、前記第１の検索スペースは、動き推定ルーチンの第１の逐次代入中にエンコーディングされる第１のビデオブロックと比較される候補ビデオブロックの第１の複数のカラムを定義し、
前記第１の逐次代入を実行して、前記第１のビデオブロックを前記第１の検索スペース中の前記候補ビデオブロックと比較し、
カラムの部分集合を再ロードして、第２の検索スペースを定義し、前記第２の検索スペースは、前記動き推定ルーチンの第２の逐次代入中にエンコーディングされる第２のビデオブロックと比較される候補ビデオブロックの第２の複数のカラムを定義する、
ように構成されている、前記装置。
【請求項２９】
前記装置は、前記第２の逐次代入を実行して、前記第２のビデオブロックを前記第２の検索スペース中の前記候補ビデオブロックと比較するように構成されている、請求項２８に記載の装置。
【請求項３０】
前記装置は、
カラムの別の部分集合を再ロードして、第３の検索スペースを定義し、前記第３の検索スペースは、動き推定ルーチンの第３の逐次代入中にエンコーディングされる第３のビデオブロックと比較される候補ビデオブロックの第３の複数のカラムを定義し、
前記第３の逐次代入を実行して、前記第３のビデオブロックを前記第３の検索スペース中の前記候補ビデオブロックと比較する、
ように更に構成されている、
請求項２９に記載の装置。
【請求項３１】
前記装置は、
カラムの別の部分集合を再ロードして、第４の検索スペースを定義し、前記第４の検索スペースは、動き推定ルーチンの第４の逐次代入中にエンコーディングされる第４のビデオブロックと比較される候補ビデオブロックの第４の複数のカラムを定義し、
前記第４の逐次代入を実行して、前記第４のビデオブロックを前記第４の検索スペース中の前記候補ビデオブロックと比較する、
ように更に構成されている、
請求項３０に記載の装置。
【請求項３２】
前記装置は、エンコーディングされる前記第１のビデオブロックの画素値と、前記第１の検索スペース中の前記候補ビデオブロックの内の１つの候補ビデオブロックの画素値との間で、複数の差分計算を並行に実行するように構成されている、請求項２８に記載の装置。
【請求項３３】
Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ（ＭＰＥＧ）基準に従ってビデオブロックをエンコーディングする装置であって、前記装置は、
エンコーディングされるマクロブロックの画素と検索スペース内の候補マクロブロックの画素との間で差分計算を実行し、
前記計算に基づいてマイクロブロックの差分値の集合を発生し、前記マイクロブロック差分値は、それぞれ、エンコーディングされる前記マクロブロックを形成する複数のマイクロブロックの各々と、前記候補マクロブロックを形成するマイクロブロックとの間の差を示し、
前記計算に基づいてマクロブロックの差分値の集合を発生し、前記マクロブロック差分値は、エンコーディングされる前記マクロブロックと前記候補マクロブロックとの間の差を示す、
ように構成される、前記装置。
【請求項３４】
前記装置は、複数の差分計算を並行に実行するように構成されている、請求項３３に記載の装置。
【請求項３５】
前記並行に実行される複数の差分計算は、前記マイクロブロックの内の１つのマイクロブロックのローに対応する、請求項３４に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、本出願の譲受人に譲渡され、２００２年６月１８日に提出された「ビデオ動き推定システムにおける消費電力を減少させる方法」という題名の米国仮出願第６０／３９０，１０１号の利益を主張するものであり、本明細書においてこれは参照して全体としてここに組み込まれる。
【０００２】
（関連出願）
本出願は、上記と同じ日付に提出された、「ビデオをエンコーディングする技法とデコーディングする技法」という題名の同時係属出願第１０／３７１，７６８号（事件整理番号第０２０１２７号）に関連する。本出願は、更に、２００２年５月３日に提出された「ビデオをエンコーディングする技法」という題名の同時係属出願第１０／１３９，７７２号（事件整理番号第０２００８６号）に関連する。これらの出願はどちらも本出願と同一の譲受人に譲渡される。
【０００３】
本開示はディジタルビデオ処理に関し、より詳しくは、ビデオシーケンスのエンコーディングに関する。
【背景技術】
【０００４】
ディジタルビデオの機能は、ディジタルテレビ、ディジタル直接衛星放送システム、無線通信デバイス、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、ディジタルカメラ、ディジタル記録デバイス、携帯式もしくは衛星式無線電話等を含む広い範囲のデバイスに組み込むことが可能である。ディジタルビデオデバイスは、フルモーションビデオシーケンスの作成、修正、送信、記憶、記録、再生という点で、従来のアナログビデオシステムよりかなりの改善をもたらすことが可能である。
【０００５】
ディジタルビデオシーケンスをエンコーディングする多くの様々なビデオエンコーディング基準が確立されている。例えば、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）によって、ＭＰＥＧ−１、ＭＰＥＧ−２及びＭＰＥＧ−４を含む多くの基準が開発されてきた。他の基準には、ＩＴＵ  Ｈ．２６３や、カリフォルニア州クパーティノ（Ｃｕｐｅｒｔｉｎｏ  Ｃａｌｉｆｏｒｎｉａ）のアップルコンピュータ社（Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ）によって開発されたＱｕｉｃｋＴｉｍｅ（商標）技術や、ワシントン州レッドモンド（Ｒｅｄｍｏｎｄ，Ｗａｓｈｉｎｇｔｏｎ）のマイクロソフト社（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ）によって開発されたＷｉｎｄｏｗｓ（商標）用のＶｉｄｅｏや、インテル社（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ）によって開発されたＩｎｄｅｏ（商標）や、ワシントン州シアトル（Ｓｅａｔｌｅ，Ｗａｓｈｉｎｇｔｏｎ）のリアルネットワーク社（ＲｅａｌＮｅｔｗｏｒｋｓ，Ｉｎｃ．）からのＲｅａｌＶｉｄｅｏ（商標）や、スーパーマック社（ＳｕｐｅｒＭａｃ，Ｉｎｃ．）によって開発されたＣｉｎｅｐａｋ（商標）がある。
【０００６】
多くのビデオエンコーディング基準で、データを圧縮してエンコーディングすることによって送信レートが増加している。圧縮することによって、送信する必要があるデータの全体量を減少させて、ビデオフレームの送信を効果的にすることが可能である。例えば、ＭＰＥＧ基準は、圧縮なしで達成され得るよりも狭い帯域幅でビデオと画像の送信を容易化するように設計されているグラフィックスとビデオを圧縮する技法を利用している。
【０００７】
例えば、ＭＰＥＧ基準は、一時的相関またはフレーム間相関と呼ばれる連続するビデオフレーム間の類似性を利用して、フレーム間圧縮をするビデオエンコーディング技法をサポートしている。このフレーム間圧縮技法は、ビデオフレームの画素ベース表示を動き表示に変換することによってフレーム全体にわたるデータ冗長度を利用するものである。更に、ビデオエンコーディング技法は、空間相関またはフレーム内相関と呼ばれるフレーム内での類似性を利用して、ビデオフレームを更に圧縮するものである。フレーム内圧縮は、一般的には、離散コサイン変換（ＤＣＴ）式エンコーディングなどの静止画像を圧縮するテクスチャエンコーディングに基づいている。
【０００８】
圧縮をサポートするために、ディジタルビデオデバイスは、一般的に、ディジタルビデオシーケンスを圧縮するエンコーダと、このディジタルビデオシーケンスを解凍するデコーダとを含んでいる。多くの場合、これらエンコーダとデコーダは、ビデオ画像のシーケンスを定義するフレーム内の画素のブロック上で動作する統合エンコーダ／デコーダ（ＣＯＤＥＣ）を形成する。例えば、ＭＰＥＧ−４基準では、エンコーダは、一般的に、送信されるビデオフレームを、１６×１６の画素配列を備えるマクロブロックに分割する。
【０００９】
ビデオフレーム中の各マクロブロックに対して、エンコーダは、直前のビデオフレーム（または後続のフレーム）のマクロブロックを検索して、最も類似したマクロブロックを特定し、また、送信用のマクロブロック間の差を、前のフレームからのどのマクロブロックがエンコーディングに用いられたかを示す動きベクトルと共に、エンコーディングする。デコーダは、この動きベクトルとエンコーディングされた差を受信して、動き補償を実行して、ビデオシーケンスを発生する。
【００１０】
このビデオエンコーディングプロセスは、特に動き推定技法を用いる場合には計算集約的である。例えば、エンコーディングされるビデオブロックを前に送信されたフレームのビデオブロックと比較するプロセスでは、多量の計算が必要となる。改良型のエンコーディング技法は、特に、計算リソースがより限られ、また、消費電力が関心事とされる無線デバイスや他の携帯式ビデオデバイスで使用するのが非常に望ましい。同時に、改良型の圧縮は、ビデオシーケンスを効果的に送信するために必要とされる帯域幅が減少する目的には望ましいものである。これらの要因の１つ以上を改善することによって、特に、無線帯域幅の設定や限られた大域幅の設定の場合には、ビデオシーケンスのリアルタイムエンコーディングが容易化されたり改善されたりする。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本開示は、ビデオシーケンスをエンコーディングするために必要な処理サイクルの数と、メモリ転送の回数とを減少させることが可能なビデオエンコーディング技法を説明する。このように、ここに開示するビデオエンコーディング技法によって、ビデオエンコーディング速度が増し、消費電力が減少する。更に、この技法は、エンコーディングされるマクロブロックと関連する差分値を定義する計算と、エンコーディングされるマクロブロックを形成する様々なマイクロブロックと関連する差分値を定義する計算とで同じ計算の集合を用いる。
【課題を解決するための手段】
【００１２】
本明細書に記載するビデオエンコーディング技法では、カラム方向の動き推定ルーチンのための検索スペースを記憶する候補メモリを用いる。メモリ制御ユニットは、候補メモリをアドレス指定して、複数の画素を並行して検索して、例えば、絶対差分和（ＳＡＤ）技法や二乗差分和（ＳＳＤ）技法を用いて、エンコーディングされるビデオブロックの画素と同時に比較することが可能である。差分プロセッサは、これらの計算を並行して実行する。平行な計算の各集合は、マクロブロックを形成するマイクロブロックの内の１つのローに対応している。更に、エンコーディングされる後続のビデオブロックに対しては、候補メモリは、検索スペース全体を再ロードするのではなく新しいビデオブロックのカラムをロードすることによって、インクリメンタルに更新することが可能である。
【００１３】
本明細書に記載するこれらの技法及び他の技法は、ディジタルビデオデバイス中で、ハードウエアとして、ソフトウエアとして、ファームウエアとしてまたはこれらの組み合わせで実施される。ソフトウエアとして実施する場合、上記の技法は、実行すると、本明細書に記載するエンコーディング技法の内の１つ以上を実行するプログラムコードを備えるコンピュータ読み取り可能媒体を志向する。様々な実施形態の更なる詳細は、添付図面と以下の説明に記載されている。他の特徴、目的及び利点は、この説明及び図面と特許請求の範囲とから明らかであろう。
【発明を実施するための最良の形態】
【００１４】
一般に、本開示は、ディジタルビデオデータのエンコーディングを改善するために用いることが可能なビデオエンコーディング技法を志向する。このビデオエンコーディング技法は、ビデオシーケンスをエンコーディングするために必要な処理サイクルの数とメモリ転送の回数とを減少させ、これで、ビデオエンコーディング速度を増加させ、消費電力を減少させる。例えば、このビデオエンコーディング技法によれば、一般的にビデオエンコーディングプロセスの最も計算集約的な態様である動き推定プロセスでは特に、計算効率が増加する。更に、このビデオエンコーディング技法は、ＭＰＥＧ−４デコーディング基準などのデコーディング基準と互換性がある。
【００１５】
このビデオエンコーディング技法は、ディジタル放送システム、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、ディジタルカメラ、ディジタル記録デバイス、携帯電話等などの様々なディジタルビデオデバイス中で実施される。このビデオエンコーディング技法によって、ＭＰＥＧ−４などの基準に従ってビデオをエンコーディングする効率が改善され、また、計算リソースがより制限され消費電力が関心事とされる携帯電話などの無線通信デバイス内でのビデオのエンコーディングの実施をより容易なものとする。
【００１６】
このビデオエンコーディング技法は、カラム方向に検索スペースのビデオブロックを記憶する候補メモリを用いる。メモリ制御ユニットは、候補メモリをアドレス指定して、複数の画素を並行して検索して、例えば、絶対差分和（ＳＡＤ）技法や二乗差分和（ＳＳＤ）技法を用いて、エンコーディングされるビデオブロックの画素と同時に比較する。差分プロセッサは、これらの並行計算を実行する。差分プロセッサは、並行計算のサイクルを数多く実行して、エンコーディングされるビデオブロックと比較されている検索スペースの候補ビデオブロックと関連する差分値（ときとして、差分測定基準と呼ばれる）という形態で検索結果を発生することが可能である。更に、エンコーディングされる後続のビデオブロックに対しては、候補メモリは、検索スペース全体を再ロードするのではなく新しいビデオブロックのカラムをロードすることによってインクリメンタルに更新されることが可能である。このようなカラムの更新によって、消費電力とシステムバスの使用とが減少し、また、新しい検索スペースをロードするのに要する時間が減少する。
【００１７】
図１は、ソースデバイス１２が、エンコーディングされたビデオデータのシーケンスを受信デバイス１４に通信リンク１５を介して送信する例示のシステム１０を示すブロック図である。ソースデバイス１２と受信デバイス１４は双方共、ディジタルビデオデバイスである。特に、ソースデバイス１２は、様々なビデオ圧縮基準の内のどれか１つ、例えば、Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐによって開発されたＭＰＥＧ−４を用いてビデオデータをエンコーディングして送信する。他の基準には、ＭＰＥＧ−１、ＭＰＥＧ−２またはＭｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐによって開発された他のＭＰＥＧ基準、ＩＴＵ  Ｈ．２６３及び類似の基準、Ｍｏｔｉｏｎ  ＪＰＥＧ２０００、カリフォルニア州クパーティノ（Ｃｕｐｅｒｔｉｎｏ  Ｃａｌｉｆｏｒｎｉａ）のアップルコンピュータ社（Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ）によって開発されたＱｕｉｃｋＴｉｍｅ（商標）技術や、ワシントン州レッドモンド（Ｒｅｄｏｍｏｎｄ，Ｗａｓｈｉｎｇｔｏｎ）のマイクロソフト社（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ）によって開発されたＷｉｎｄｏｗｓ（商標）のＶｉｄｅｏや、インテル社（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ）によって開発されたＩｎｄｅｏ（商標）や、スーパーマック社（ＳｕｐｅｒＭａｃ，ＩＮＣ．）によって開発されたＣｉｎｅｐａｋ（商標）がある。
【００１８】
通信リンク１５は、無線リンク、物理送信ライン、ローカルエリアネットワークや、ワイドエリアネットワークや、インターネットなどのグローバルネットワークなどのパケットベースネットワーク、公衆交換電話網（ＰＳＴＮ）等を備える。従って、通信リンク１５は、ソースデバイス１２から受信デバイス１４にビデオデータを送信するための、任意の適当な通信媒体または、場合によっては様々なネットワークとリンクとの集合物を表している。
【００１９】
ソースデバイス１２は、ビデオデータをエンコーディングして送信することが可能な任意のディジタルビデオデバイスである。例えば、ソースデバイス１２は、ディジタルビデオシーケンスを記憶するビデオメモリ１６と、このシーケンスをエンコーディングするビデオエンコーダ１８と、エンコーディングされたシーケンスを、通信リンク１５を介してソースデバイス１４に送信する送信機２０とを含むことができる。ビデオエンコーダ１８は、例えば、１つ以上のプログラム可能ソフトウエアモジュールを実行してビデオエンコーディング技法を制御するディジタル信号プロセッサ（ＤＳＰ）を含むことができる。関連のメモリと論理回路とが備えられ、これで、ＤＳＰがビデオエンコーディング技法を制御するのをサポートする。以下に説明するように、ビデオエンコーダ１８は、処理サイクル、メモリ転送及び消費電力を減少させるように構成される。更に、ビデオエンコーダ１８は、集合を成す計算を実行して、マクロブロックの差分値と、このマクロブロックを形成するマイクロブロックの様々な差分値とを発生するように構成することが可能である。
【００２０】
更に、ソースデバイス１２は、ビデオシーケンスをキャプチャして、そのキャプチャしたシーケンスをメモリ１６中に記憶するビデオカメラなどのビデオキャプチャデバイス２３を含むことができる。特に、ビデオキャプチャデバイス２３は、電荷結合素子（ＣＣＤ）、電荷注入デバイス、光ダイオードの配列、相補型金属酸化物半導体（ＣＭＯＳ）デバイスまたは、ビデオ画像もしくはディジタルビデオシーケンスをキャプチャすることが可能な他の任意の感光性デバイスを含む。
【００２１】
更に別の例として、ビデオキャプチャデバイス２３は、例えば、テレビ、ビデオカセットレコーダ、カムコーダ等からのアナログビデオデータをディジタルビデオデータに変換するビデオコンバータである。一部の実施形態では、ソースデバイス１２は、リアルタイムビデオシーケンスを、通信リンク１５を介して送信するように構成される。その場合、受信デバイス１４は、リアルタイムビデオシーケンスを受信して、そのビデオシーケンスをユーザに対して表示する。代替例では、ソースデバイス１２は、受信デバイス１４にビデオデータファイルとして、すなわち、リアルタイムではなく送られたビデオシーケンスをキャプチャしてエンコーディングする。このように、ソースデバイス１２と受信デバイス１４は、ビデオクリップの再生や、ビデオメールや、ビデオ会議などのアプリケーションを、例えば、モバイル無線ネットワーク上でサポートする。
【００２２】
受信デバイス１４は、ビデオデータを受信してデコーディングすることが可能であればどのようなディジタルビデオデバイスの形態をとってもよい。例えば、受信デバイス１４は、エンコーディングされたディジタルビデオシーケンスを送信機２０から、例えば、中間リンクや、ルータや、他のネットワーク装置等を介して受信する受信機２２を含むことができる。受信デバイス１４はまた、このシーケンスをデコーディングするビデオデコーダ２４と、このシーケンスをユーザに対して表示する表示デバイス２６とを含むことができる。一部の実施形態では、受信デバイス１４は、組み込み式表示デバイス１４を含まなくてもよい。それどころか、受信デバイス１４は、受信したビデオデータをデコーディングして、個々の表示デバイス、例えば、テレビやモニターを駆動する受信機として働く。
【００２３】
ソースデバイス１２と受信デバイス１４との例示のデバイスは、コンピュータネットワーク上にあるサーバと、ワークステーションもしくは他のデスクトップ型計算デバイスと、ラップトップコンピュータもしくは携帯情報端末（ＰＤＡ）等の携帯型計算デバイスとを含む。他の例には、ディジタルテレビ、ディジタルカメラ、ディジタルビデオカメラもしくは他のディジタル記録デバイスなどのディジタルテレビ放送の衛星デバイス及び受信デバイス、ビデオ機能を有する携帯電話などのディジタルビデオ電話、他の無線ビデオデバイス等がある。
【００２４】
場合によっては、ソースデバイス１２と受信デバイス１４はその各々が、ディジタルビデオデータをエンコーディングしたりデコーディングしたりするエンコーダ／デコーダ（ＣＯＤＥＣ）（図示せず）を含む。その場合、ソースデバイス１２と受信デバイス１４は双方共が、送信機及び受信機並びにメモリ及びディスプレイを含む。以下に概括するエンコーディング技法の内の多くは、ディジタルビデオデバイスがエンコーダを含むような状況下で説明される。しかしながら、エンコーダはＣＯＤＥＣの一部を形成することが理解されよう。その場合、ＣＯＤＥＣはＤＳＰ、マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、個々のハードウエアコンポーネントまたはそれらの様々な組み合わせで実現される。
【００２５】
ソースデバイス１２内のビデオエンコーダ１８は、ビデオデータをエンコーディングするためにビデオフレームのシーケンス内の画素のブロック上で動作する。例えば、ビデオエンコーダ１８は、送信されるビデオフレームが画素のブロック（ビデオブロックと呼ばれる）に分割される動き推定エンコーディング技法を実行することができる。例示の目的として、ビデオブロックはマイクロブロックとマクロブロックを備えることができる。例として、マイクロブロックは８×８個の画素配列であってよい。マクロブロックは、１６×１６の画素配列であってよい。従って、マクロブロックは４つのマイクロブロックを含むことができる。このようなフォーマットは、しばしば、ＭＰＥＧ−４に適合するエンコーディング技法で用いられる。しかしながら、別のマイクロブロックとマクロブロックのサイズを使用することもできる。一般に、本開示では、マクロブロックとマイクロブロックという用語は、複数の画素を備えるビデオブロックのことである。マクロブロックは更に、複数のマイクロブロックと定義される。マクロブロックを定義するマイクロブロックの数、マイクロブロックを定義する画素の数、更に、マクロブロックを定義する画素の数は、広範囲に及ぶ様々な実現例の固有のフォーマットの影響を受ける。
【００２６】
時として、解像度は、マクロブロックではなくてマイクロブロックの動き推定を計算することによって改善することが可能である。その上、以下に更に詳述するように、マクロブロックの画素は、マクロブロックの差分値の計算と並行してより小さいマイクロブロックの、差分測定基準とも呼ばれる、差分値の計算を可能とするように記憶またはアドレス指定される。すなわち、マクロブロックの差分測定基準の計算は、このマクロブロックを形成する４つのマイクロブロックの差分測定基準の４つから成る１連の計算とみなされる。従って、マクロブロックと、このマイクロブロックを形成するマイクロブロックの差分測定基準は、同じ計算から発生することが可能である。特に、このような技法は、更なるＳＡＤ計算やＳＳＤ計算を追加することなく容易化される。それどころか、アドレス指定方式と計算方式とは、同じ計算が、エンコーダによって、マイクロブロックの差分値の計算とマクロブロックの差分値の計算であると解釈することが可能となるように設計することが可能である。
【００２７】
マイクロブロックまたはマクロブロック中の各々の画素は、色や強度などの画素の視覚特徴、例えば、クロミナンスや輝度を定義するｎビットの値、例えば、８ビットで表される。しかしながら、動き推定は、通常は、輝度成分にだけ基づいて実行されるが、それは、人間の視覚は色より輝度の変化に対してより敏感であるからである。従って、動き推定という目的のためには、ｎビット値全体が、所与の画素の定量化輝度であってよい。しかしながら、本開示の原理は、画素のフォーマットに限られることなく、より簡単な少ビット画素フォーマットまたはより複雑な大ビット画素フォーマットでの適用にまで拡大される。
【００２８】
ビデオフレーム中の各ビデオブロックに対して、ソースデバイス１２のビデオエンコーダ１８は、メモリ１６に記憶されているビデオブロックを検索して、すでに送信されている先行するビデオフレーム（または後続のビデオフレーム）を求め、これで、類似のビデオブロックを特定し、また、ビデオブロック間の差を、エンコーディングに用いられた前のフレーム（または後続のフレーム）からビデオブロックを特定する動きベクトルと共にエンコーディングする。このようにして、各フレームを独立した画像としてエンコーディングする代わりに、ビデオエンコーダ１８は、隣り合ったフレーム同士間の差をエンコーディングする。動き推定の実行には、エンコーディングされる現行のフレーム中にマイクロブロックまたはマクロブロックと最も良好に適合する、前のまたは後続のフレーム中のマイクロブロックまたはマクロブロックの識別動作が伴う。
【００２９】
動きベクトルは、ビデオブロックの左上の角と関連する画素位置を定義することができるが、他の動きベクトルのフォーマットを用いることも可能である。いずれの場合も、動きベクトルを用いてビデオブロックをエンコーディングすることによって、ビデオデータストリムの送信に必要とされる帯域幅をかなり減少させることが可能である。場合によっては、ソースデバイス１２は、エンコーディングプロセス中に様々な比較や計算を終了させて、計算回数を減少させて電力を節約することが可能なプログラム可能閾値をサポートする。
【００３０】
受信デバイス１４の受信機２２は、動きベクトルという形態のエンコーディング済みビデオデータと、エンコーディング済みの差とを受信する。デコーダ２４は、動き補償技法を実行して、ビデオシーケンスを発生して、表示デバイス２６でユーザに表示するようにする。受信デバイス１４のデコーダ２４もまた、エンコーダ／デコーダ（ＣＯＤＥＣ）として実現される。その場合、ソースデバイス１２と受信デバイス１４は双方共、ディジタルビデオシーケンスをエンコーディングし、送信し、受信し、デコーディングすることが可能である。
【００３１】
図２は、ここに記載する技法に従ってディジタルビデオシーケンスをエンコーディングするビデオエンコーダ１８を示すブロック図である。図２は例示の実現例を表しており、本開示を制限するものと考えるべきではない。図２に示すように、ビデオエンコーダ１８は、ディジタル信号プロセッサ（ＤＳＰ）２８と動き推定器２９とを含むことができる。ＤＳＰ２８は、動き推定器２９の動作を制御し、また、ビデオエンコーディングコントローラとして働く。代替例では、ビデオエンコーディングコントローラは、プロセッサや、ハードウエアコンポーネントや、ファームウエアや、特定用途向け集積回路（ＡＳＩＣ）や、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）等で実現することが可能である。
【００３２】
図２の例では、ＤＳＰ２８は、１つ以上のプログラム可能ソフトウエアモジュールを実行して、ビデオエンコーディング技法を制御する。動き推定器２９は、ＤＳＰインタフェース３０を含むことができる。ＤＳＰ２８、ＤＳＰインタフェース３０及びビデオメモリ３２は、バス３３を介して通信する。ビデオメモリ３２は、ビデオエンコーダ１８にとっての外部コンポーネントまたはビデオエンコーダ１８の一部として組み込まれているものとみなされる。ＤＳＰインタフェース３０は、動き推定ルーチンと関連する計算を実行する差分プロセッサ３４と相互作用する。差分プロセッサ３４はＳＡＤ計算またはＳＳＤ計算を実行して、例えば、所与のビデオフレームに対してエンコーディングされるブロックまたはマクロブロックの動きベクトルを計算する。エンコーディングアルゴリズムの制御をＤＳＰ２８に分け与え、また、動き推定器２９のハードウエア内での計算の計算集約的な動き推定を分離することによって、リアルタイムエンコーディングをサポートする能力を高めることが可能である。
【００３３】
差分プロセッサメモリ３５は、図２で更に示すように、エンコードメモリ３６と候補メモリ３８とを含んでいる。エンコードメモリ３６は、エンコーディングされる現行のマクロブロックを動き推定ルーチンを用いて記憶する。現行のマクロブロックは、エンコーディングされるビデオフレーム中の複数のマクロブロックの配列の内の１つに対応している。候補メモリ３８は、検索スペースを形成する別のフレームからのマクロブロックの配列を記憶する。差分プロセッサ３４は、候補メモリ３８中のマクロブロックをエンコードメモリ３６中の現行のマクロブロックと比較して、動きベクトルとして使用するのに最もよく適合するものを特定する。例えば、４８×４８画素の検索スペースを用いるとする。その場合、検索スペースは、９個のマクロブロック、すなわち、各々が１６×１６配列の画素を含む３つのマクロブロックのカラム３つを含む。他のマクロブロックも、４８×４８画素配列の検索スペース内で定義して、この検索スペースを定義する９個のマクロブロックの内の２つ以上のマクロブロックからの画素を含むようにすることが可能である。
【００３４】
メモリ制御ユニット３９は、候補メモリ３８とエンコードメモリ３６とのアドレス指定を制御して、動き推定ルーチンの検索プロセスを駆動する。特に、メモリ制御ユニット３９は、バス３３を介してのビデオメモリ３２から候補メモリ３８への画素データのロード動作を制御して、検索スペースを形成する。この目的のため、メモリ制御ユニット３９を備えて、メモリアドレスの変換を実行する。４８×４８画素の検索スペース全体を直接に候補メモリ３８中に、ＤＳＰ２８からの干渉なしでロードすると、ＤＳＰ２８とＤＳＰインタフェースユニット３０との間のバスのアクティビティを減少させ、ビデオデータを移動させるのに必要なＤＳＰ２８中の必要とされる命令の数を減少させることが可能である。差分プロセッサ３４は、各マクロブロックのＳＡＤ結果またはＳＳＤ結果を決定して、最もよく適合する結果をＤＳＰインタフェース３０に送り返す。一方、ＤＳＰインタフェース３０は、エンコーディングされたマクロブロックと動きベクトルをＤＳＰ２８に出力して、バス３３を介してビデオメモリ３２中に記憶させるようにする。
【００３５】
動作中、ＤＳＰ２８はＤＳＰインタフェースユニット３０を制御して、制御チャネル４０を介して検索プロセスを駆動する。一般に、制御チャネル４０は、メモリロードコマンドのために用いられるが、このコマンドは、候補メモリ３８中にロードされる検索スペースの画素指標を含む。各画素指標は、左上角または候補マクロブロックのアドレスを示すが、他の形態を用いても良い。更に、ＤＳＰ２８は、差分プロセッサ３４によって発生された検索結果を、データチャネル４１を介して受信する。データチャネル４１はまた、ハードウエアの構成とモードの切り替えに用いられる。ＤＳＰ２８とビデオメモリ３２間のメモリ転送は、ＤＳＰの直接メモリ交換（ＤＭＥ）ポートとバス３３とを介して遂行される。この場合、ＤＳＰインタフェースユニット３０と、差分プロセッサ３４と、エンコードメモリ３６と、候補メモリ３８と、メモリ制御ユニット３９とは、ＤＳＰ２８によって制御される動き推定器（ＭＥ）全体に常駐する。一般に、ＤＭＥは、データをビデオメモリ３２からフェッチして、それをエンコードメモリ３６と候補メモリ３８との中にロードするために用いられる。
【００３６】
図２の例では、ＤＳＰインタフェースユニット３０は、ビデオメモリ３２からのエンコードメモリ３６と候補メモリ３８とに対する、バス３３とメモリ制御ユニット３９とを介してのメモリ転送のためのスレーブとして働く。最初は、ＤＳＰインタフェースユニット３０は、検索スペース全体を候補メモリ３８中にロードしてよい。その後で、ＤＳＰインタフェースユニット３０は、インクリメンタルに候補メモリ３８を更新して、例えば、新しいカラムを検索スペースに対して、エンコーディングされる所与のフレーム中の次のブロックとして追加する。ＤＳＰインタフェースユニット３０は、ビデオデータの転送とメモリ制御ユニット３９の構成とのためのデータと構成チャネルとを有することができる。更に、ＤＳＰインタフェースユニット３０は、差分プロセッサ３４によって実行される検索プロセスを制御するための構成チャネルと、検索結果を受信するための結果チャネルとを有する。
【００３７】
図２の例では、ビデオエンコーダ１８は、圧縮されたディジタルビデオシーケンスをホストソースデバイス１２に提供して、受信デバイス１４に送信されるようにする。ビデオエンコーダ１８は、このビデオシーケンスをエンコーディングして、それを送信に先立って、エンコーディングされたこのディジタルビデオシーケンスをビデオメモリ３２内でバッファする。ビデオメモリ３２と差分プロセッサメモリ３５とは、同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、ＦＬＡＳＨメモリ、電気的に消去可能なプログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）等の形態をとる。エンコードメモリ３６と候補メモリとは、一般的には、ビデオエンコーダ１８のローカルメモリであり、「仮想の」メモリに分離される共通メモリデバイスを備える。
【００３８】
図２に示すコンポーネントに加えて、一部の実施形態では、ビデオエンコーダ１８は、離散コサイン変換（ＤＣＴ）エンコーディングなどの静止像の圧縮のために一般的に用いられる、フレーム内またはフレーム間圧縮を実行するテクスチャエンコーダなどの他のコンポーネントを含むことができる。例えば、テクスチャエンコーディングは、処理機能が効果的な動き推定をするにはあまりに限られているとみなされるシナリオで、動き推定に加えてまたは、場合によっては動き推定の代わりに実行される。ＤＳＰ２８は、任意の時点で処理機能に基づいて動き推定器（２９）とテクスチャエンコーダ（図示せず）とを選択的に発動することによってエンコーディングルーチンを出力する。
【００３９】
図３に、ビデオフレームでビデオメモリ３２内に記憶することが可能なマクロブロック４２という形態のビデオブロックの例を示す。ＭＰＥＧ基準と他のビデオエンコーディング方式とは、動き推定ビデオエンコーディング中にマクロブロックという形態でビデオブロックを利用する。上述したように、ＭＰＥＧ−４に適合するシステムでは、「マクロブロック」という用語は、ビデオフレームの部分集合を形成する１６×１６の画素値の集合体のことである。各画素値はバイト単位のデータで表されるが、それ以上またはそれ以下の数のビットを用いて各画素を定義して、所望の撮像品質を達成するようにしてもよい。マクロブロックは、より少ない数の８×８の画素マイクロブロック４４Ａから４４Ｄを備えることができる。しかしながら、一般に、本明細書に記載するエンコーディング技法は、１６バイト×１６バイトのマクロブロック、８バイト×８バイトのミクロブロックのブロックまたは、所望しだいでは別のサイズのビデオブロックなどの定義された任意のサイズのブロックを用いて動作する。
【００４０】
図４に、候補メモリ３８内に記憶することが可能な検索スペース４６の一部分の例を示す。検索スペース４６は、前に送信されたビデオフレーム（または後続のフレームシーケンスのビデオフレーム）に対応する画素の集合体である。検索スペースは、前のもしくは後続のビデオフレームの全体または、所望しだいではこれらビデオフレームの部分集合を備えることができる。検索スペースは、図示するように矩形形状であるか、または、広い範囲の様々な形状とサイズの内のいずれかを取る。
【００４１】
ビデオエンコーディング中、エンコーディングされる現行のマクロブロックは、検索スペース４６中のビデオブロックと比較され、適切に適合するものを特定し、これで、検索スペース中での現行のマクロブロックとこの類似のマクロブロック間の差が、この類似のビデオブロックを特定する動きベクトルとともに送信することが可能となるようにする。上述したように、検索スペース４６内で定義されたマクロブロック４８は候補メモリ３８中に記憶することが可能であり、エンコーディングされる現行のマクロブロックはエンコードメモリ３６に記憶することが可能である。
【００４２】
動き推定ビデオエンコーディング中、差分プロセッサ３４は、エンコーディングされる現行のマクロブロックを前のまたは後続のフレームのマクロブロックと、ＳＡＤ技法またはＳＳＤ技法などの比較技法を用いて比較することが可能である。図４に示すように、検索スペース４６内のマクロブロック４８は、それぞれのマクロブロックの左上の画素アドレス４８によって特定することが可能である。他の比較技法を用いてもよい。特に、本開示の原理に従って、ＳＡＤ計算またはＳＳＤ計算を、複数の画素に対して並行に実行することが可能である。その上、画素毎の比較のアドレス指定と計算の順序は、エンコーディングされる各マクロブロックの差分値と、このマクロブロックを形成するマイクロブロックの差分値とを発生するような仕方で実行することが可能である。
【００４３】
本開示では、「タスク」という用語は、検索スペース内の現行のビデオブロックと別のビデオブロックと比較するために用いられる計算の共通集合のことである。すなわち、タスクとは、検索スペース中の現行のビデオブロックと別のビデオブロックとの１つの比較のことである。例えば、タスクには、検索スペース中の現行のビデオブロックの多くの画素を候補ビデオブロックの画素と比較するために多くの計算を実行する動作が伴う。本明細書に記載するように、これらのタスク計算の様々な部分集合を並行に実行して、エンコーディングプロセスをスピードアップする。６４回の計算をマイクロブロックタスクとみなし（マイクロブロックは８×８の画素配列で定義されるものと仮定する）、２５６回の計算をマクロブロックタスクとみなす（マクロブロックは１６×１６の画素配列で定義されるものと仮定する）。各タスク中、これらの計算を累積して、タスクの現行の差分値（時として、差分測定基準と呼ばれる）を定義する。
【００４４】
本開示では、「逐次代入」という用語は、ビデオエンコーディング中に実行されるタスクの共通集合のことである。エンコーディングされる現行のビデオブロックと関連する１連のタスク全体が逐次代入である。すなわち、逐次代入は、検索スペース中で現行のビデオブロックを前のビデオブロック（または後続のビデオブロック）の集合と比較する比較の集合である。個別の比較はその各々が、多くの比較を伴うタスクである。従って、検索スペースは、逐次代入中に現行のビデオブロックと比較されるビデオブロックの集合を定義する。逐次代入の比較は各々がタスクと呼ばれ、従って、各々のタスク、すなわち、各々の比較には多くの計算が伴う。
【００４５】
場合によっては、逐次代入は、検索スペース上に第１の検索を定義することと、前記検索スペース中で第１の適合を特定することと、前記第１の適合に基づいて前記検索スペースの部分集合上に第２の検索を定義することと、前記部分集合中で第２の適合を特定することとを含む。例えば、逐次代入の後半の検索には、検索スペース内で少しシフトして、最良の適合を的確に示す動作が含まれる。最低の差分値を生じるマクロブロックを特定する画素位置がダイアモンド形状の検索パラメータの中心に置かれるまで検索が継続される、ダイアモンド検索技法などの他の検索技法を用いることも可能である。更に、最低の差分値を生じるマクロブロックを特定する画素位置が半径（Ｒ）で定義される検索パラメータの中心に置かれる、円検索技法などの他の技法も用いられる。半径（Ｒ）の円は、ダイアモンド検索パラメータより大きく、より包含的な検索パラメータを定義することが可能である。
【００４６】
ダイアモンド検索技法または円検索技法を逐次代入中に用いると、初期化技法も用いられて、ダイアモンド形状検索パラメータまたは円形に定義された検索パラメータの中心にある最低の差分値を生じるマクロブロックを特定するプロセスをスピードアップさせる。例えば、空間冗長性という現象を利用する初期化技法が用いられることができる。空間冗長性は、一般的に、所与のビデオブロックのビデオの動きは、その所与のビデオブロックに空間的に非常に近接している別のビデオブロックのビデオの動きに類似している可能性が高いことを予測するものである。この初期化技法は、この現象をより容易に利用して、これを用いるとビデオエンコーディングを効果的なものとすることが可能なビデオブロックを含む確率が非常に高い検索スペース内の位置での動き推定を初期化することが可能である。
【００４７】
より具体的には、この初期化技法は、エンコーディングされるビデオブロックに空間的に非常に近接しているビデオブロックについて計算された動きベクトルを利用して、動き推定ルーチンを初期化することが可能な検索スペース内の位置、すなわち、この動き推定ルーチンが始動する検索スペース内の画素位置を特定する。例えば、平均画素位置、中央画素位置または、重み付け関数を用いて計算された画素位置は、エンコーディングされる現行のビデオブロックに空間的に非常に近接しているビデオブロックに対して前に決定された動きベクトルに基づいて計算される。他の線形または非線形の関数を用いることも可能である。いずれの場合も、このように動き推定ルーチンを初期化することによって、エンコーディングされているビデオブロックにとって容認可能な適合である検索スペース内のビデオブロックを突き止めるのに必要とされる逐次代入におけるタスクの数を減少させて、ダイアモンド検索シナリオまたは円検索シナリオでのビデオエンコーディングを加速する。
【００４８】
差分値を発生するために用いられる計算には、ＳＡＤ技法や、ＳＳＤ技法や、必要に応じて他の比較技法が実施される。ＳＡＤ技法には、現行のマクロブロックが比較されている相手の以前のマクロブロックの画素値でエンコーディングされる、現行のマクロブロックの画素値同士間の絶対差分の計算を実行するタスクが伴う。このような絶対差分計算の結果が合計され、すなわち、累積されて、現行のマクロブロックと、この現行のビデオブロックが比較されている相手の以前のマクロブロックとの間の差を示す、差分値を定義する。８×８画素の像ブロックの場合、６４の差が計算されて合計され、１６×１６画素マクロブロックの場合、２５６の差が計算されて合計される。現行のビデオブロックをアドレス指定して、特定の順序で計算を実行することによって、２５６の差が計算されるが、これはまた、４つの互いに分離した集合で合計され、これで、各マイクロブロックの差分値が発生することが可能となるようにする。次に、これら４つの集合の計算値の全ての全体の合計で、マクロブロックの差分値を定義することが可能である。
【００４９】
差分値が低いということは、一般に、現行のマクロブロックと比較されているマクロブロックは、より高い差分値、すなわち、より大きい歪みを生じる候補マクロブロックよりも動き推定エンコーディングで用いられるのにより良好な適合であり、従って、より良好な候補であることを示すものである。場合によっては、累積された差分値が所定の閾値を超えると、計算が終了する。その場合、追加の計算は不要であるが、それは、現行のビデオブロックと比較されているマクロブロックは、動き推定エンコーディングで効果的に用いられるものとは容認されないからである。
【００５０】
ＳＳＤ技法にも、現行のマクロブロックが比較されている相手の以前のマクロブロックの画素値でエンコーディングされる現行のマクロブロックの画素値同士間の差分の計算を実行するタスクが伴う。しかしながら、ＳＳＤ技法においては、絶対差分の計算の結果は二乗され、次に、この二乗された値は合計され、すなわち、累積されて、現行のマクロブロックとこのマクロブロックが比較されている相手の以前のマクロブロックとの間の差を示す差分値を定義する。代替例では、平均二乗誤差（ＭＳＥ）や、正規化相互相関関数（ＮＣＣＦ）や、他の適切な比較アルゴリズムなどの他の比較技法が実行される。
【００５１】
場合によっては、例えば、所与のタスクが以前のタスクより良好な適合を生じないと判定されたら、または、所与のタスクが容認可能な適合を生じると識別されたら早期に様々なタスクや逐次代入を終了させる。例えば、所与のタスクに対する追加の計算が不要となったときを識別する技法を用いることが可能である。より具体的には、第２のタスクの計算の部分集合が合計で、以前に計算された第１のタスクと関連する差分値より大きい差分値を生じる場合、一般的に、第２のタスクに対する追加の計算は不必要であることが分かるが、その理由は、第２のタスクが完了すると、その結果、第１のタスクより低い差分値が得られるからである。その場合、第２のタスクがエンコーディングの性能を犠牲にすることなく終了させることが可能であり、また、第３のタスクの実行をより迅速に開始することが可能である。
【００５２】
終了技法もまた、逐次代入レベルで、またはタスクレベルと逐次代入レベルの双方で実行される。一実施形態では、逐次代入閾値が、容認可能な、すなわち、ビデオエンコーディングを効果的に実行するに適切な値を定義する。その場合、逐次代入閾値によって容認可能であるとみなされるような仕方でエンコーディングされる現行のビデオブロックに適合する検索スペース中の候補ビデオブロックを識別するタスクを実行すると、その逐次代入を終了させることが可能であり、また、エンコーディングする次のビデオブロックを検索スペースと比較することが可能である。その場合、多くの不必要なタスクの実行を回避することが可能である。
【００５３】
本明細書における技法の多くは、エンコーディングされるビデオブロックを以前のビデオフレームの以前のビデオブロックと比較する状況で説明される。しかしながら、エンコーディングされるビデオブロックを後続のビデオフレームの候補ビデオブロックと比較する際にも同じ技法が用いられることが理解されよう。場合によっては、双方向性の動き推定を用いるが、ここで、エンコーディングされるビデオブロックは、１つ以上の以前のビデオフレームの様々な候補ビデオブロックと、後続のビデオフレームの様々なビデオブロックと比較される。端的に言えば、本明細書に記載する多くの技法が、エンコーディングされるビデオブロックが、以前のビデオフレームの候補ビデオブロック、または後続のビデオフレームの候補ビデオブロックなどの別のビデオブロックと比較されているときには、いつでも用いられる。すなわち、検索スペースに、互いに異なった様々な実現例における互いに異なった様々な候補をロードする。
【００５４】
図５は、候補マクロブロックの配列として配置された例示の検索スペース５２内でエンコーディングされる、現行のマクロブロック５０の概念図である。特に、図５に示すように、検索スペース５２は、エンコーディングされるマクロブロック５０と比較するための、候補マクロブロックの３つのロー５４Ａから５４Ｃと、３つのカラム５６Ａから５６Ｃを含んでいる。従って、図５の例では、検索スペース５２は、１６×１６画素マクロブロックを９個備え、４８×４８の画素からなるエリアを形成している。エンコーディングされる現行のマクロブロック５０は、検索スペース５２中のマクロブロックと、差分プロセッサ３４を用いて比較される。
【００５５】
ビデオメモリ３２と候補メモリ３８及び関連する処理オーバヘッド間のメモリ転送を減少させるために、一旦検索スペース５２が初期にロードされたら、検索スペースに対する後続の更新が、必要に応じて、カラム毎に実行される。例えば、所与のフレームの後続のマクロブロックをエンコーディングするのに、メモリ制御ユニット３９は、検索スペース５２全体を再ロードするのではなく、単に、検索スペース５２の左側のカラム５６Ａ内の候補マクロブロックを置き換えるだけである。
【００５６】
カラム毎の更新を実行し、また、動き推定計算を複数の画素に対して並行にそして同時に実行させるため、メモリ制御ユニット３９は、ビデオメモリ３２と、エンコードメモリ３６と、候補メモリ３８とに保持されているメモリアドレスの変換のためのアドレスマッピング方式を実行するように構成されている。エンコードメモリ３６と候補メモリ３８とに対するデータの更新は、ビデオメモリ３２との間で、ビデオメモリに直接にアクセスするバス３３を介して発生する。バス３３を介してこの転送を初期化、制御するために、ＤＳＰ２８はＤＭＥポートを介してバスマスターとして働く。
【００５７】
図６Ａは、マクロブロックの画素指標を示す図である。図６Ａに示すように、マクロブロック画素指標は、４つのマイクロブロック（Ａ、Ｂ、Ｃ、Ｄ）に分割される。このマクロブロック画素指標は１６×１６構成となっているが、マイクロブロックＡ、Ｂ、Ｃ、Ｄは各々が８×８構成となっている。マクロブロック画素指標全体が、左上画素Ｙ０から右下画素Ｙ２５５（図示せず）に延長している。この画素指標は、ＤＳＰ２８によって維持されて、検索スペース内でマクロブロックを追跡する。メモリ制御ユニット３９は、ＤＳＰ２８によって提供された画素指標を、ビデオメモリ３２、エンコードメモリ３６または候補メモリ３８中の物理的メモリのアドレスに適切に変換する働きをする。例えば、メモリ制御ユニット３９は、この変換されたアドレスを候補メモリ３８に供給して、検索スペースを更新したり、エンコードメモリ３６に供給して、ＳＡＤエンジン３４によってＳＡＤを計算させたりする。
【００５８】
図６Ｂは、ビデオメモリ３２内でのビデオデータの配置を示す図である。特に、図６Ｂは、ＤＳＰ２８によって保持されるマクロブロック画素指標とビデオメモリ３２内のマクロブロック画素データの物理的配置との間の差を示す。図６Ｂに示すように、ビデオメモリ３２は、４つの画素から成るローに配置されている６４個のアドレスのところにマクロブロック画素データを記憶して、マクロブロック毎に６４のローを生成する。画素当たり８ビットの割合で、各ローは、３２ビットのデータを含む。従って、ＤＳＰ２８からの画素指標に応答してビデオメモリ３２にアクセスするためには、メモリ制御ユニット３９は、この画素指標をビデオメモリ中の物理アドレスに変換する必要がある。
【００５９】
図６Ｃは、エンコードメモリ３４内でのビデオデータの配置を示す図である。図６Ｃに示すように、エンコードメモリ３６に記憶されているマクロブロック画素データは、ロー毎に８画素の割合で３２個のローに、すなわち、ロー毎に６４ビットで配置される。本開示によれば、エンコードメモリ３６中のメモリ配置によって、複数の画素に対して並行に、差分プロセッサ３４によって絶対差分（ＡＤ）を同時に計算するのが容易になる。特に、図６Ｃの例は、８画素のＡＤ計算を一度にそして並行に実施するのを可能とするエンコードメモリ３６の物理的配置である。その上、マイクロブロックを８画素分の幅を有するものと定義すると、図６Ｃの物理的配置によって、マイクロブロックとマクロブロックの差分値を発生できるが、それは、マイクロブロックは、一般的に、８画素幅を有するからである。エンコードメモリ３６の幅は６４ビットである。図６Ａから６Ｃは、共に、マクロブロック画素指標をどのようにしてビデオメモリ３２にマッピングするか、また、どのようにしてビデオメモリを差分プロセッサメモリ３５中の物理的エンコードメモリ３６にマッピングするかを示す。
【００６０】
図７Ａは、ＤＳＰ２８によって保持される検索スペースの画素指標を示す図である。検索スペース内の画素指標は、ＤＳＰ２８によって、検索タスク、例えば、差分プロセッサ３４によって発生される結果（差分値）を生じさせるために用いられる計算の集合を指定するのに用いられる。図７Ａの検索スペース画素指標は、３マクロブロック×３マクロブロックの検索スペースに対応し、従って、２３０４画素（３×３×１６×１６）を含む。図７Ａに更に示すように、検索スペース画素指標は、各々が４８画素を含む４８のローを含む。
【００６１】
図７Ｂは、ビデオメモリ３２内での検索スペースの配置を示す図である。図７Ｂに示すように、検索スペース画素の物理的配置には、図６Ｂのマクロブロックメモリ配置の場合のようにロー当たり４画素を含んでいる。更に、画素は５７６個のローに配置されている。１画素当たり８ビットで、４画素から成る各ローは３２ビットを含む。
【００６２】
図７Ｃは、候補メモリ３８内での検索スペースの配置を示す図である。とりわけ、エンコードメモリ３６のように、候補メモリ３８は、８画素から成るローに配置されている。探索スペース全体を記憶するために、候補メモリ３８は２８８のローを含む。すなわち、候補メモリ３８は、２８８の８バンク×８ビットのメモリとして配置される。各ローの幅は６４ビットである。エンコードメモリ３６はマクロブロックしか記憶せず、また、候補メモリ３８は３マクロブロック幅の検索スペースを記憶して、合計で９個のマイクロブロックを含むが、メモリ３６と３８はその各々が８画素幅の出力を有する。このようにして、エンコードメモリ３６と候補メモリ３８とは、エンコーディングされる各マクロブロックを容易に比較できるように、すなわち、８画素の絶対差分値を並列にそして一度に計算しやすくするように配置されている。更に、エンコードメモリ３６と候補メモリ３８とは、マクロブロック差分値の計算中にマクロブロックの差分値の計算をするように配置されている。
【００６３】
また、複数の画素に対して並列にＡＤ計算をすることを可能とすることに加えて、候補メモリ３８は、検索スペース内のどの画素からでもマクロブロックのアドレス指定をすることができるように配置されている。その上、以下に説明するように、候補メモリ３８の構造によって、カラムのインクリメンタルな更新、すなわち、エンコーディングされる新しいマクロブロック毎に検索スペース全体を再ロードするのではなく、１カラム分のマクロブロックを一度にロードすることが可能となる。このようなロード技法によって、冗長なメモリ負荷を回避し、バス３３の使用を軽減することによって電力を減少させることが可能である。また、メモリ制御ユニット３９を装備して、検索スペース画素指標をビデオメモリ３２内の物理的メモリアドレスに変換し、次に、ビデオメモリからのメモリアドレスを候補メモリ３８中の対応する物理的メモリアドレスに変換する。
【００６４】
図８Ａは、マクロブロックのカラム画素指標を示す図である。エンコーディングされる、隣り合った２つのマクロブロックの場合、適応可能な検索スペース間の差はこれらマクロブロックの内の１つだけである。その結果、たった１つのマクロブロックのカラムを更新する必要があるだけである。候補メモリ３８は、この態様を利用して、ビデオメモリ３２と候補メモリとの間の転送に必要とされるデータ帯域幅を減少させるように配置されている。図８Ａに示すように、ＤＳＰ２８によって保持されるマクロブロックカラム画素指標は、１６画素から成るローに配置されて、検索スペース中で１つのカラム、すなわち、４８のローの長さにわたって延長する。このように、図８Ａに示すマクロブロック画素指標は、３つのマクロブロックからなるカラム、従って、図７Ａの検索スペース画素指標の１／３に対応する。
【００６５】
マクロブロックカラム画素指標のビデオメモリ３２中の物理的メモリ配置もまた、検索スペース画素指標全体のメモリ配置とは異なる。図８Ｂは、ビデオメモリ３２内でのマクロブロックのカラムの配置を示す図である。マクロブロックカラムの場合、ビデオメモリ３２は、それぞれが４画素から成るローを１９２個提供する。従って、ビデオメモリ３２は、マクロブロックのカラムを３２ビット幅で配置する。一旦検索スペースが、最初のマクロブロックのために候補メモリ３８中にロードされると、エンコーディングされる後続の隣接したマクロブロックに対する検索を、単に新しいカラムをロードするだけで実行することが可能である。
【００６６】
カラムの更新中、メモリ制御ユニット３９は、前の左側のマクロブロックカラムを新しいマクロブロックカラムと交換する。次に、この新たにロードされたマクロブロックカラムは、現行の右側のマクロブロックカラムとして指定される。更に、前の中央のマクロブロックカラムが、新たな左側のマクロブロックカラムとして指定され、前の右側のマクロブロックカラムは新しい中央マクロブロックカラムとして指定される。
【００６７】
従って、検索スペースは、より大きいビデオフレーム内の右にシフトして前にあった左側のマクロブロックカラムが消えて、これで、新しい右側のマクロブロックカラムのための場所を空けたものとみなすことが可能である。このカラム更新動作に続いて、候補メモリ３８中の検索スペースは、エンコードメモリ３６中の次のマクロブロックを考慮するのに適している。
【００６８】
ＤＳＰ２８によって提供される画素指標をメモリ制御ユニット３９内のビデオメモリ３２と候補メモリ３８中の物理アドレスに変換することによって、ＤＳＰは、カラムシフト動作を追跡する必要がないことになる。その結果、ＤＳＰ２８は、単に、新しい右側のマクロブロックカラムの画素指標を提供する必要があるだけである。
【００６９】
図９は、画素指標を候補メモリ３８中のメモリバンクの基準アドレスに変換するのに用いられる、メモリ制御ユニット３９の一部を形成する例示の回路を示すブロック図である。図９に示すように、メモリ制御ユニット３９は、このメモリアドレス変換を達成する適切な論理回路を含む。メモリ制御ユニット３９は、エンコードメモリ３６の更新、候補メモリ３８の更新もしくは完全ロードまたは、差分プロセッサ３４がエンコードメモリと候補メモリとの内容に対する並行ＡＤ計算を実行する検索タスクなどの現行の逐次代入を追跡する。以下に説明するように、メモリ制御ユニット３９はまた、検索中にブロック境界を追跡し、候補メモリ３８中でのマクロブロックカラムシフトを管理し、画素からアドレスへの変換を実行する。
【００７０】
一般に、検索するために、メモリ制御ユニット３９は、対応する画素の開始バンク、すなわち、候補メモリ３８中の８画素から成るロー内の位置を次式に従って決定する。
開始画素のバンク＝ｍｏｄ８（画素指標）    （１）
更に、メモリ制御ユニット３９は、次式に従って開始画素のローを決定する。
【００７１】
開始画素のロー＝ｉｎｔ（画素指標／８）    （２）
このように、ｍｏｄ関数（１）によれば、開始バンクは、画素指標を８で除算した残余である。整数分割関数（２）によれば、開始ローは画素指標で除算し得る最大の整数である。
式（１）と式（２）とを上記のように仮定すると、それぞれのバンクｘの開始アドレス、すなわち、「基準」アドレスは次式で表すことが可能である。
【００７２】
バンクｘの基準アドレス  ＝  ｘ＞＝開始画素のバンクであれば、開始画素のローであり、
ｘ＜開始画素のバンクであれば、開始画素のロー＋１である。                                      （３）
図９に示すように、メモリ制御ユニット３９内の比較器５８は、画素指標（画素指標のｍｏｄ８）によって示されるローをバンク指標と比較して、画素指標がバンク指標未満であれば１という出力を発生し、画素指標がバンク指標以上であれば０という出力を発生する。次に、メモリ制御ユニット３９内の加算器６０は、比較器５８の出力である１か０を、画素指標（ｉｎｔ（画素指標／８））で示されるバンクに加算して、バンクｘの基準アドレスを生成する。
【００７３】
図１０は、図３に示すように、マクロブロックを形成する１連のマイクロブロック（Ａ、Ｂ、Ｃ、Ｄ）に対する検索の追跡動作進行状況のビデオブロックカウンタ回路６２を示すブロック図である。一旦それぞれのバンクの基準アドレスが決定されたら、メモリ制御ユニット３９は、ブロック境界に基づいてアドレス発生カウンタのインクリメンタルな更新と再ロードを追跡する。図１０の例では、ブロックカウンタ回路６２は、最初に３１という値をロードされて３２というカウント値を出力する５ビットカウンタ６４を含む。初期化（ｔａｓｋ＿ｓｔａｒｔ）されると、カウンタ６４はクロックサイクル毎に１つずつカウントアップする。しかしながら、カウントダウンするカウンタを用いてもよい。
【００７４】
カウント値が０ｂ１１０００に達すると、判断論理６６は、差分プロセッサ３４によって実行される検索が、マイクロブロックＡのＡＤ計算を完了したことを示す。同様に、カウント値が０ｂ１００００、０ｂ０１０００、０ｂ０００００となると、それは、マイクロブロックＢ、Ｃ、Ｄがそれぞれ完了したことを示す。カウント値が０ｂ０００００に達すると、所与のマクロブロックの検索が完了（ｔａｓｋ＿ｄｏｎｅ）したことになる。このようにして、ブロックカウンタ回路６２は、差分プロセッサ３４で取り扱われている現行のマクロブロックの差分値の計算の進行状況を探索する。更に、ブロックカウンタ回路６２は、各マイクロブロックと関連する差分値がいつ計算されたかを判定することが可能である。
【００７５】
マイクロブロックの境界を越えるたびに、判断論理６６は、差分プロセッサ３４に個々のマイクロブロックの結果をラッチするように命令するｂｌｏｃｋ＿ｄｏｎｅ信号を発生する。従って、ビデオエンコーダ１８は、各々の個別のマイクロブロックの差分値結果と、マクロブロックの差分値結果とを発生する。その上、これらの差分結果は、それぞれ同じ計算を用いて発生される。すなわち、４つの別個の計算の部分集合で、マイクロブロックの各差分値を発生し、これら計算の全てを合計して、マクロブロックの差分値を発生する。
【００７６】
上述したように、終了技法を追加して、様々なタスクや逐次代入を終了させて、ある種のシナリオにおける計算を回避する。１つの実現例では、タスクを終了させるかどうかは、並行ＡＤ計算の各集合が実行された後で判断することが可能である。すなわち、マイクロブロックのローをラッチする毎に、タスクの閾値を超えたかどうかを判定する良いタイミングが与えられることになる。超えていれば、その特定のタスクに対する追加の計算を終了することが可能であるが、それは、その検索では最低の差分値が得られないことが分かるからである。特に、タスク閾値を超えていれば、候補マクロブロックの部分集合の差分値は、検索スペースのより早い時期の候補マクロブロックに対して計算された差分値をすでに超えている。
【００７７】
図１１は、候補メモリ３８中のメモリバンクの物理アドレスマッピング回路６８を示すブロック図である。候補メモリ３８内の物理アドレスを発生するには、画素指標で発生された基準アドレスを累算器にロードしてから、図９に示すアドレス変換に至るまでの動作が伴う。クロックサイクル毎に、アドレスは４８画素だけインクリメントされて、マクロブロック中の次のラインの画素に至り、これが６個のロー（４８画素／８バンク）に変換される。ブロックＢが完了すると、累算器は、ブロックＣとブロックＤの計算のために基準アドレス＋１を再ロードする。
【００７８】
図１１に示すように、マッピング回路６８は、ブロックＢの計算が実行されたら（ｂｌｏｃｋ＿ｂ＿ｄｏｎｅ）１を基準アドレスに加算して（ｍｂ＿ｂａｓｅ＿ａｄｄｒ）、これで、候補メモリ３８内のカラム基準アドレス（ｃｏｌ＿ｂａｓｅ＿ａｄｄｒ）を生成する、加算器７０を含むことができる。ＯＲゲート７２は、ブロックＢが実行されたかまたは検索タスクが開始されたら（ｔａｓｋ＿ｓｔａｒｔ）、高い論理出力をマルチプレクサ７４に渡す。
【００７９】
ＯＲゲート７２からの高い論理出力に応答して、マルチプレクサ７４は、カラム基準アドレスを累算器７６に出力する。ＯＲゲート７２からの低い論理出力に応答して、マルチプレクサは加算器７８の出力を累算器７６に渡す。加算器７８は、累算器７６からの現在の候補メモリアドレス（ｌｏｇｉｃａｌ＿ｃｒａｍ＿ａｄｄｒ）を６という値に加算する。検索タスクの開始もブロックＢの完了もない場合、マルチプレクサ７４と累算器７８は、現在の候補メモリアドレスを６個のロー分だけ、すなわち、８個のバンクにわたって４８画素分だけ進める。このようにして、ブロックＢが完了したり新しい探索タスクが開始されたりすると、メモリ制御ユニット３９は、候補メモリ３８中の８バンクから成る各ローを循環して、差分プロセッサ３４に対してマイクロブロックローを一度に１つ提示する。従って、計算をロー毎に、マイクロブロックの各差分値が発生されるまで、また、計算をマイクロブロック毎に、マクロブロックの差分値が計算されるまで、実行する。次に、このプロセスは、探索スペースの次のマクロブロックに対してロー毎に、そして、マクロブロック毎に、次から次へと継続される。
【００８０】
図１２は、候補メモリ中のマクロブロックカラム更新の物理アドレスのマッピング回路８０を示すブロック図である。図１１に示すアドレスマッピング回路６８は、マクロブロックカラム更新が発生するとマクロブロックカラムシフトを取り扱わない。それどころか、マッピング回路６８は、完全に再ロードされた検索スペース中のマクロブロックカラムに適応可能である。カラム更新機能を適応すると、図１２のアドレスマッピング回路８０は、別のレベルのアドレスマッピングを提供する。
【００８１】
物理的候補メモリ３８では、マクロブロックカラム中の各ローが２つのローのデータに対してマッピングされる。例えば、リセットされると、アドレス０とアドレス１（ａｄｄｒ０／１）は、左のマクロブロックカラムの第１のローを表す。特に、アドレス０は、左のマクロブロックカラムの画素指標ロー中の１番目の８画素に対応する候補メモリ３８中の８バンクのローを表す。アドレス１は、左のマクロブロックカラムの画素指標ロー中の２番目の８画素に対応する候補メモリ３８中の８バンクのローを表す。
【００８２】
次に、アドレス２とアドレス３（ａｄｄｒ２／３）は中央のマクロブロックカラムの第１のローを表し、アドレス４とアドレス５（ａｄｄｒ４／５）は右のマクロブロックカラムの第１のローを表す。従って、図７Ｃに示すように、候補メモリ３８の８バンクから成るローは、各ロー全体（例えば、第１のローのＹ０からＹ４７）が左のマクロブロックカラム、中央のマクロブロックカラム及び右のマクロブロックカラムに及ぶ画素データを順次記憶する。
【００８３】
１つのマクロブロックカラムの更新の後で、ａｄｄｒ０／１（以前は左側のマクロブロックカラムを表していた）を用いて右側のマクロブロックカラムを表し、ａｄｄｒ２／３（以前は中央のマクロブロックカラムを表していた）は左側のマクロブロックカラムを表し、ａｄｄｒ４／５（以前は右側マクロブロックカラムを表していた）は中央のマクロブロックカラムを表す。
【００８４】
このようにして、左右のマクロブロックカラムが同じデータを以前のそれぞれ中央と右側のマクロブロックカラムとして記憶し、これで、新しいデータを再ロードする必要はない。しかしながら、アドレス（ａｄｄｒ２／３とａｄｄｒ４／５）はこの時点で、左側と中央のマクロブロックカラムにマッピングされる。しかしながら、以前の左側のマクロブロックカラムアドレス（ａｄｄｒ０／１）は、右側のマクロブロックカラムに再マッピングされて、ビデオメモリ３２からの新しいデータが再ロードされる。
【００８５】
カラム更新モードの場合のアドレスマッピングを実行するために、図１２のマッピング回路８０は、２つの条件を判定する。候補メモリカラム基準アドレス（ｃｏｌ＿ｂａｓｅ＿ａｄｄｒ  ｍｏｄ３）のｍｏｄ３出力とマクロブロックカラムシフトステータス、すなわち完全更新が要求されているかカラム更新が要求されているかである。
【００８６】
図１２に示すように、マッピング回路８０は、現在の基準カラムアドレスを２で除算したもの（ｃｒａｍ＿ａｄｄｒ（８：１））のｍｏｄ３出力を生成し、このｍｏｄ３出力を一時記憶デバイス８４に（フリップフロップと呼ばれる場合がある）に印加するｍｏｄ３演算子８２を含んでいる。このｍｏｄ３出力は、カラム基準アドレスに対して常に０、１または２である。例えば、第１のカラムのカラム基準アドレス（Ｙ０）は０を生じ、第２のカラムのカラム基準アドレス（Ｙ１６）は１を生じ、第３のカラムのカラム基準アドレス（Ｙ３２）は２を生じる。
【００８７】
新しい検索タスクを開始（ｔａｓｋ＿ｓｔａｒｔ）するか、またはブロックＢの計算が実行される（ｂｌｏｃｋ＿ｂ＿ｄｏｎｅ）と、ＯＲゲート８６はフリップフロップ８４をイネーブルして、ｍｏｄ３演算子８２からのｍｏｄ３出力を出力してマルチプレクサ８８に印加させるようにする。このｍｏｄ３出力は、カラム基準アドレスが現在常駐しているカラム、すなわち、第１のカラム（０）、第２のカラム（１）または第３のカラム（２）を示す。
【００８８】
それに応答して、マルチプレクサ８８は、マルチプレクサ９０、９２、９４の出力の内の１つを加算器９６に回す。マルチプレクサ９０、９２、９４の出力が、２ビットカウンタ９８の出力によって判定される。カウンタ９８は、ｆｕｌｌ＿ｕｐｄａｔｅ信号が受信されるとこれに応答して０という値でリセットされて、候補メモリ３８中の検索スペース全体が再ロードされることを示す。イネーブル入力にｃｏｌ＿ｕｐｄａｔｅ信号が印加されるとそれに応答して、カウンタ９８は１つカウントアップする（または、他の実現例の場合、カウントダウンする）。
【００８９】
ｃｏｌ＿ｕｐｄａｔｅ信号は、候補メモリ３８中の検索スペースは、１つの新しいカラムをロードすることによってインクリメンタルに更新されることを示す。カウンタ９８は、カラムが更新される毎にまたはカラムが２回更新される毎にインクリメントされ、３回目のカラム更新の後で０という値に戻る。例えば、カウンタ９８は、０→１→２→０→１→２→０→１→２，．．．．という具合にインクリメントする。カウンタ９８はまた、カウント値が０×１１になるとリセットされ、このリセット動作はイネーブル状態とは無関係に発生する。
【００９０】
いずれの場合でも、カウンタ９８のカウント出力は、カラムシフトがインクリメンタルなカラム更新ルーチンの経過中に何回実行されたかを追跡するものである。カウンタ９８のカウント出力は、マルチプレクサ９０、９２、９４に対する論理入力となり、アドレスマッピングの判定が容易となる。マルチプレクサ９０、９２、９４は、検索スペースのそれぞれ左、中央、右のカラムに対応している。カウント出力が０であれば、マルチプレクサ９０、９２、９４の出力値は０、０、０である。カウント出力が１であれば、マルチプレクサ９０、９２、９４の出力値はそれぞれ＋２、＋２、−４である。カウント出力が２であれば、マルチプレクサ９０、９２、９４の出力値はそれぞれ０、−４、＋２である。更に、カウント出力は０ｂ１１比較器９５に提供され、この比較器は信号をＯＲゲート９７に出力する。従って、カウンタ９８のリセットは、どちらもＯＲゲート９７への入力であるｆｕｌｌ＿ｕｐｄａｔｅ信号または比較器９５からの信号のどちらかに応答して発生し得る。
【００９１】
マルチプレクサ９０、９２、９４のこの動作は、前の中央のカラムが左側のカラムにシフトすることと、前の右側のカラムが中央のカラムにシフトすること、すなわち、どちらの場合も左側に２つのロー分だけ（＋２）シフトすることを反映している。マクロブロックカラム中の各ローは、候補メモリ３８中の２つのローで表される（図７Ｃを参照）ことを思い出されたい。この動作はまた、前の左側のカラムが右側のカラムにシフトする、すなわち、左側に４つのロー分だけ（−４）シフトすることを反映している。３回カラムが更新された後では、アドレスが再度物理的メモリに適合し、従って、マルチプレクサ９０、９２、９４の出力値は、それぞれ０、０、０に戻る。
【００９２】
マルチプレクサ９０、９２、９４の出力は、シーケンス中の次のシフトを反映する。二回目のシフトの後では、オリジナルの中央カラムはすでに左側のカラムにシフトしており、現在では、右側のカラムにシフトしており、オリジナルの右側のカラムは現在では、左側のカラムにシフトしており、オリジナルの左側のカラムは現在では、中央のカラムにシフトしている。この場合、現在の左側のカラムは、＋４ローだけ右側カラム中のそのオリジナルの位置から隔たっており、現在の中央のカラムは−２ローだけ、左側のカラム中のそのオリジナルの位置から隔たっており、現在の右側のカラムは、−２ローだけ中央のカラム中のそのオリジナルの位置から隔たっている。
【００９３】
フリップフロップ８４の出力が０であれば、第１のカラムマルチプレクサ９０の出力はマルチプレクサ８８を通過する。フリップフロップ８４の出力が１または２であれば、それぞれ第２または第３のカラムマルチプレクサ９２、９４の出力はマルチプレクサ８８を通過する。いずれの場合も、マルチプレクサ８８の出力は加算器９６に印加され、この加算器は出力を候補メモリの論理アドレスに加算する（ｌｏｇｉｃａｌ＿ｃｒａｍ＿ａｄｄｒ）。
【００９４】
このようにして、加算器９６は、カラム更新シフトのステータスと釣り合った分量だけ候補メモリの論理アドレスをシフトして、適当なマクロブロックの候補メモリの物理アドレスを得る。この論理アドレスはシフト動作の結果として右側のカラムに対応しているが、物理アドレスは実際には中央のカラムに対応して、マッピング回路８０は、必要なアドレス変換を実行する。次に、メモリ制御ユニット３９は、差分プロセッサ３４に対して、候補メモリ３８中の正しくアドレス指定されたデータをエンコードメモリ３６中の対応するデータと比較させる、例えば、８個の出力バンクにわたって並行ＡＤ計算を実行する。
【００９５】
図１３は、差分プロセッサ３４をより詳細に示すブロック図である。特に、図１３は、８個のバンク出力を同時に生成するエンコードメモリ３６と候補メモリ３８との配置によって提供される並行計算機能を示している。図１３に示すように、差分プロセッサは、複数の絶対差分（ＡＤ）計算チャネル１００Ａから１００Ｈ（まとめて１００）を含むことができる。各ＡＤ計算チャネル１００は、エンコーディングされるマクロブロックに対するエンコードメモリ３６からのそれぞれのバンク出力（ａ０からａ７）を受信する。
【００９６】
絶対差分の比較と計算のため、各ＡＤ計算チャネル１００もまた、候補メモリ３８から対応するバンク出力（ｂ０からｂ７）を受信する。このＡＤの結果は、カスケード式に装備されている８ビット加算器１０２Ａから１０２Ｄの集合と、９ビット加算器１０４Ａと１０４Ｂの対と、１０ビット加算器１０６とによって合計される。大きいビット値で画素を表せば、大きい加算器が実現される。いずれの場合も、加算器１０６の出力は加算器１０８に印加される。加算器１０８はそれ自身の出力を、フリップフロップ１１０を介して、加算器１０６の出力を合計して、絶対差分の和（ＳＡＤ）という結果を生成する。８個の入力（ａ０からａ７）の各集合は、８画素から成るローのマイクロブロックに対応する。例えば、マイクロブロックＡのロー毎に（図６Ａ）、次に、マイクロブロックＢのロー毎に、次に、マイクロブロックＣのロー毎に、次に、マイクロブロックＤのロー毎に入力を差分プロセッサに提供する。累積値は、各マイクロブロックに対する差分測定基準を計算した後でラッチし、次に、マクロブロックに対する差分測定基準に対応する累積値の合計を再びラッチすることが可能である。
【００９７】
その上、それぞれラッチする毎に、タスクを終了させるべきであるかどうかの判定を下すことが可能である。すなわち、マイクロブロックのローをラッチする毎に、タスクの閾値を超えたかどうかを判定する良いタイミングが提供される。超えていた場合、その特定のタスクに対する追加の計算を終了させることが可能であるが、それは、その検索では最低差分値が与えられないことが分かるからである。
【００９８】
図１４は、本明細書に記載するようなビデオエンコーディング技法を示すフローチャートである。図１４に示すように、検索が開始されると、すなわち、タスクが開始すると（１１２）、ＤＳＰ２８は、エンコーディングされるマクロブロックの画素指標を発生する（１１４）。メモリ制御ユニット３９は、このマクロブロック画素指標をビデオメモリアドレスとエンコードメモリアドレスとに変換し（１１６）、マクロブロックがビデオメモリ３２からエンコードメモリ３６に対してバス３３とメモリ制御ユニットを介してロードされる（１１８）。ＤＳＰ２８はまた、検索スペースの画素指標を発生する（１２０）。検索スペース画素指標がビデオメモリアドレスと候補メモリアドレスに変換されると（１２２）、メモリ制御ユニット３９は、候補メモリ３８に検索スペースマクロブロックをロードする（１２４）。
【００９９】
差分プロセッサ３４は、候補メモリ３８の複数バンク出力とエンコードメモリ３６との間で並行ＡＤ計算を実行して（１２６）、エンコーディングされるマクロブロックを検索スペース内のマクロブロックと比較する。この並行ＡＤ計算に基づいて、差分プロセッサ３４は、検索スペース全体で最良のＳＡＤ結果を発生する（１２８）（または、場合によっては、完全な検索スペースを考慮することなく容認可能な結果を発生する）。どちらの場合も、結果は、エンコーディングされるマクロブロックの画素指標と関連している。上述したように、差分プロセッサ３４はまた、追加のＳＡＤ計算を必要とすることなくマクロブロックを形成する各マイクロブロックに対するＳＡＤ結果を発生する。マクロブロックに対するＳＡＤ結果を発生した後では、ＤＳＰ２８は容認可能な適合が特定されたかどうかを判定することが可能であり、特定されたら、動きベクトルを記憶して、ＭＰＥＧ−４圧縮基準に従ってエンコーディングされるマクロブロックを特定することが可能である。
【０１００】
図１５は、検索スペースをインクリメンタルにロードするためにカラム更新を用いるビデオエンコーディング技法を示すフローチャートである。別の探索スペースを駆動するために次の画素指標（１３０、１３２）をＤＳＰ２８によって発生したら、メモリ制御ユニット３９は、マクロブロック画素指標をビデオメモリアドレスとエンコードメモリアドレスとに変換する（１３４）。次に、関連するマクロブロックをビデオメモリ３２からエンコードメモリ３６にロードする（１３６）。しかしながら、この場合、検索スペースは、検索スペース全体を再ロードするのではなく新しいカラムを追加することによってインクリメンタルに更新される。
【０１０１】
従って、ＤＳＰ２８は、検索スペースカラムが更新される毎に画素指標を発生し（１３８）、次に、これがメモリ制御ユニット３９によって変換されて、関連するビデオメモリアドレスと候補メモリアドレスとを生成する（１４０）。新しいマクロブロックカラムをビデオメモリ３２から候補メモリ３８にロードすると（１４２）、差分プロセッサ３４は、候補メモリ３８とエンコードメモリ３６との８個の出力バンクにわたる並行ＡＤ計算を実行して（１４４）、多くの並行ＡＤ計算の後で最良のＳＡＤ結果（または容認可能なＳＡＤ結果）を発生する（１４６）。
【０１０２】
図１６は、候補メモリ中のメモリバンクに対する基準アドレスのマッピングを示すフローチャートである。図１６に示すプロセスは、図９の回路の動作に対応しているが、この回路の他の変更例を用いてもよい。画素指標から基準アドレスを得るために、メモリ制御ユニット３９は、画素指標に対するｍｏｄ８演算の結果を計算する（１５０）。この結果が現行のバンク指標以上であれば（１５２）、基準アドレスは、画素指標を８で除算した整数の商に等しい（１５４）。その結果が現行のバンク指標未満であれば（１５２）、基準アドレスは、画素指標を８で除算して１を加算した整数の商に等しい（１５６）。
【０１０３】
図１７は、候補メモリ中のメモリバンクに対する物理アドレスのマッピングを示すフローチャートである。図１７に示すプロセスは図１１の回路６８の動作に対応するが、この回路の他の変更例を用いてもよい。マクロブロック内のブロックＢのＡＤ計算が完了したら（１６０）、候補メモリ３８中のカラム基準アドレスは、マクロブロック基準アドレスに１を加算した値に等しい（１６２）。ブロックＢが実行されていなければ（１６０）、候補メモリ３８中のカラム基準アドレスはマクロブロック基準アドレスに等しい（１６４）。次に、ブロックＢが実行されるかまたは新しい検索タスクが開始されたら（１６６）、候補メモリ３８の論理メモリアドレスはカラム基準アドレスに等しい（１６８）。ブロックＢが実行されず、新しい探索も開始されていない場合（１６６）、候補メモリの論理アドレスは６個のロー分だけシフトされる（１７０）。
【０１０４】
図１８は、候補メモリ中でのマクロブロックカラムの更新のための物理アドレスのマッピングを示すフローチャートである。図１８に示すプロセスは、図１２の回路８０の動作に対応しているが、この回路の別の変更例を用いてもよい。図１８に示すように、カラム基準アドレスが示すカラムを決定するために、メモリ制御ユニット３９はｍｏｄ３演算をカラム基準アドレスに対して適用する（１７４）。カラム更新機能がイネーブルされなければ（１７６）、候補メモリの論理アドレスはシフトされない（１７８）。これは、図１２のマルチプレクサ９０、９２、９４からの出力（０、０、０）に対応するが、これは、カウンタ９８からの０というカウンタ出力に、従って、マルチプレクサ８８からの０の出力に対応している。
【０１０５】
カラム更新がイネーブルされると（１７６）、メモリ制御ユニット３９は、発生したカラム更新シフトの数をカウンタ９８の出力を参照して判定する（１８０）。特定されたカラムとカラム更新シフトの数に基づいて、メモリ制御ユニット３９は、候補メモリの論理アドレスをシフトすべき分量を決定して、正確な候補メモリの物理アドレスを生成する（１８２）。次に、メモリ制御ユニット３９は、アドレスシフトを適用することによって、この候補メモリの論理アドレスを候補メモリの物理アドレスに変換する（１８４）。
【０１０６】
図１９は、マクロブロックと、このマクロブロックを形成する多くのマクロブロックの差分値を、同じ計算量で発生する様子を示すフローチャートである。図示するように、動き推定器２９がマクロブロック検索逐次代入を開始すると（１９１）、差分プロセッサ３４は、マイクロブロックのロー毎に並行絶対差分（ＡＤ）計算を実行する。例えば、値Ｘを初期化することが可能であり（１９２）、また、差分プロセッサ３４は、エンコーディングされているマクロブロック内の第１のマイクロブロックのＸ番目のローに並行ＡＤ計算を実行することが可能である（１９３）。マイクロブロック中にまだローがあるかぎり（１９４ではい）、値Ｘはインクリメントされ（１９５）、並行ＡＤ計算がマイクロブロックの次のローに対して実行される。
【０１０７】
ビデオブロックカウンタ回路６２は、マイクロブロック中にまだローがあるかどうか判定することが可能である（１９４）。例として、ビデオブロックカウンタ回路６２は、差分プロセッサ３４の一部として組み込むことが可能であったり、ＤＳＰインタフェースユニット３０の一部を形成したりする。ＡＤ計算が第１のマイクロブロックの全てのローに対して実行されたと判定されたら、差分プロセッサ３４は、第１のマイクロブロックの差分値を出力する（１９６）。このプロセスは、マイクロブロックがなくなるまでマクロブロックの全てのマイクロブロックに対して継続することが可能である（１９７）。タスク終了技法がまたプロセスのこの段階で用いられて、例えば、累積された全体の差分値が、現行の逐次代入に対してすでに計算された最低の差分値に対応する閾値などのタスク閾値を超えたら、タスクを終了させる。
【０１０８】
差分プロセッサ３４は、マクロブロックの現行の差分値を累積することが可能であり、また、各マイクロブロックの計算が実行されるにつれて各マイクロブロックの差分値を出力することができる。第１のマイクロブロックの差分値は、その時点までの差分値の累積値である。第２のマイクロブロックの差分値は、その時点までの累積合計値から第１のマイクロブロックの差分値を減算した値に対応する。第３のマイクロブロックの差分値は、その時点までの累積合計値から第１と第２のマイクロブロックの差分値を減算した値に対応する、．．．、という具合である。
【０１０９】
ビデオブロックカウンタ回路６２はまた、最後のマイクロブロックの計算が累積されたか（１９７ではい）判定する。その時点で、差分プロセッサ３４は、その時点までのＡＤ計算の累積合計値であるマクロブロックの差分値を出力する（１９８）。ＤＳＰ２８は、又は場合によってはＤＳＰインタフェースユニット３０は、エンコーディングされる現行のマクロブロックに対して実行すべき別のタスクがあるかどうか、マイクロブロック中に更にローがあるかどうか判定することが可能である（１９４）。また、タスクとは、エンコーディングされる現行のビデオブロックを検索スペース中のビデオブロックと比較するために用いられる計算の集合のことであり、逐次代入とは、検索スペースの互いに異なった様々なビデオブロックとエンコーディングされる現行のビデオブロックとの比較に対応するタスクの集合のことである。
【０１１０】
逐次代入は、検索スペースのビデオブロックの所定の集合をエンコーディングされるビデオブロックと比較するのと同じほど簡単であるか、または、それよりはるかに複雑で、検索スペース内の位置を突き止める初期化技法、ネスティングされた検索及び／または、可能な限り迅速な最良の適合を突き止める定義されたり再定義されたりした検索パラメータを含む。いずれの場合も、動き推定器２９が逐次代入の全てのタスクを実行したら（１９９でいいえ）、ビデオエンコーダ１８は、現行のマクロブロックをエンコーディングする（２００）。ビデオエンコーダが、検索スペースの様々な候補マクロブロックの差分値が発生され、また、この候補を形成するマイクロブロックの差分値もまた発生されたときに、エンコーディングプロセスに様々なオプションがあれば有利である。
【０１１１】
最良の候補マイクロブロックに対応する４つの別個の動きベクトルを用いてマクロブロックをエンコーディングすれば、圧縮動作が改善される。しかしながら、マクロブロック動きベクトルを認識するだけのデコーダに対する準拠性が維持されるなどの、他の理由によって、最良の候補マクロブロックに対応する単一の動きベクトルを用いることが望まれる。エンコーディングされる現行のマクロブロックと動きベクトルによって定義されるビデオブロックとの間の差を定義するマトリックスに対して離散コサイン変換（ＤＣＴ）エンコーディングを実行するなどして、テクスチャエンコーディングもまた追加されることができる。
【０１１２】
現行のマクロブロックがエンコーディングされたら、ビデオエンコーダ１８は、現行のビデオフレームに対してエンコーディングされる別のマクロブロックが存在するかどうか、すなわち、実行すべき別の逐次代入が存在するかどうか判定する（２０１）。存在しなければ、所与のビデオフレームに対するエンコーディングプロセスは完了した（２０１でいいえ）ことになり、そのフレームに対するエンコーディング済みビデオブロックは送信機２０によって通信媒体１５を介して送信することが可能である（図１）。しかしながら、現行のビデオフレームに対してエンコーディングされる別のマクロブロックがあれば、検索スペースを再ロードすることが可能であり（２０２）、また、次の逐次代入が開始可能である（１９１）。その上、検索スペースを再ロードするプロセス（２０２）では、メモリ制御ユニットが候補メモリ３８のカラムの部分集合を再ロードして、本明細書に概括したようなアドレス指定方式によって候補メモリを追跡する、上記に概括したようなカラム更新技法が利用される。本明細書に概括するようなこのような技法や他の技法は、様々な従来のエンコーディングプロセスを改善するために単独で用いられようと他と組み合わせて用いられようと、ＭＰＥＧ−４などの基準にしたがったビデオエンコーディング技法の効率を改善し、また、計算リソースがより限られ、また、消費電力が関心事となる携帯電話などの無線通信デバイス内でのビデオエンコーディングの実施をより容易なものとする。
【０１１３】
様々な多くの実施形態を説明した。上記の技法は、メモリ転送、計算サイクル及び消費電力を軽減することによってビデオエンコーディング動作を改善し、これで、エンコーディングプロセスを高速化し、場合によっては、バッテリ式のビデオデバイスの寿命を延長することが可能である。更に、これらの技法は、追加のＡＤ計算を必要とすることなく、マクロブロックとマイクロブロックの差分値を発生することによってエンコーディングプロセスのオプションを提供する。このような方法によって、場合によってはこれ以外の方法によって、これらの技法は、ＭＰＥＧ−４などの基準や他のビデオエンコーディング基準によるビデオエンコーディング動作を改善することが可能である。
【０１１４】
これらの技法は、ハードウエア、ソフトウエア、ファームウエアまたはこれらの任意の組み合わせで実現される。ソフトウエアで実現する場合、上記の技法は、ＭＰＥＧ−４基準に準拠したビデオシーケンスをエンコーディングするデバイス中で実行されると、上記の方法を１つ以上実行するプログラムコードを備えるコンピュータ読み取り可能媒体を志向する。その場合、このコンピュータ読み取り可能媒体は、同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）や、読み出し専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的に消去可能なプログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ等を備える。
【０１１５】
上記のプログラムコードは、コンピュータ読み取り可能な命令という形態でメモリに記憶される。その場合、ＤＳＰなどのプロセッサは、メモリに記憶されている命令を実行して、本明細書に記載する１つ以上の技法を実行する。これらの技法は、動き推定器などの様々なハードウエアコンポーネントを発動して、エンコーディングプロセスをスピードアップするＤＳＰによって実行される場合もある。ビデオエンコーダが、マイクロプロセッサ、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、１つ以上のフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）または他の任意のハードウエア・ソフトウエアの組み合わせとして実現される場合もある。上記の実施形態や他の実施形態は、特許請求の範囲内にある。
【図面の簡単な説明】
【０１１６】
【図１】ディジタルビデオソースデバイスが、エンコーディングされたビデオデータのシーケンスをディジタルビデオ受信デバイスに送信する例示のシステム例を示すブロック図である。
【図２】ディジタルビデオシーケンスをエンコーディングするビデオエンコーダを示すブロック図である。
【図３】ビデオデータの例示のマクロブロックの概念図である。
【図４】例示の検索スペースの概念図である。
【図５】マクロブロックの配列として配置された検索スペース上で概念的にエンコーディングされるマクロブロックの概念図である。
【図６Ａ】マクロブロックの画素指標を示す図である。
【図６Ｂ】ビデオメモリ内でのビデオデータの配置を示す図である。
【図６Ｃ】エンコードメモリ内でのビデオデータの配置を示す図である。
【図７Ａ】検索スペースの画素指標を示す図である。
【図７Ｂ】ビデオメモリ内での検索スペースの配置を示す図である。
【図７Ｃ】候補メモリ内での検索スペースの配置を示す図である。
【図８Ａ】マクロブロックのカラム画素指標を示す図である。
【図８Ｂ】ビデオメモリ内でのマクロブロックのカラムの配置を示す図である。
【図９】画素指標を候補メモリ中のメモリバンクの基準アドレスに変換する様子を示すブロック図である。
【図１０】マクロブロックを形成する１連のブロックに対する検索の追跡動作進行状況のブロックカウンタを示すブロック図である。
【図１１】候補メモリ中のメモリバンクの物理アドレスのマッピングを示すブロック図である。
【図１２】候補メモリ中のマクロブロックカラム更新の物理アドレスのマッピングを示すブロック図である。
【図１３】差分プロセッサを示すブロック図である。
【図１４】ビデオエンコーディング技法を示すフローチャートである。
【図１５】検索スペースにインクリメンタルにロードするためにカラム更新を用いるビデオエンコーディング技法を示すフローチャートである。
【図１６】候補メモリ中のメモリバンクに対する基準アドレスのマッピングを示すフローチャートである。
【図１７】候補メモリ中のメモリバンクに対する物理アドレスのマッピングを示すフローチャートである。
【図１８】候補メモリ中でのマクロブロックの更新のための物理アドレスのマッピングを示すフローチャートである。
【図１９】マクロブロックと、このマクロブロックを形成する多くのマクロブロックの差分値を同じ計算量で発生する様子を示すフローチャートである。
【符号の説明】
【０１１７】
１０…システム、  １２…ソースデバイス、  １４…受信デバイス、  １５…通信リンク、  １６…ビデオメモリ、  １８…ビデオエンコーダ、  ２０…送信機、  ２２…受信機、  ２３…ビデオキャプチャデバイス、  ２４…ビデオデコーダ、  ２６…表示デバイス、  ２８…ディジタル信号プロセッサ、  ２９…動き推定器、  ３０…ＤＳＰインタフェースユニット、  ３２…ビデオメモリ、  ３３…バス、  ３４…差分プロセッサ、  ３５…差分プロセッサメモリ、  ３６…エンコードメモリ、  ３８…候補メモリ、  ３９…メモリ制御ユニット、  ４０…制御チャネル、  ４１…データチャネル、  ４２…マクロブロック、  ４４Ａ…画素マイクロブロック、  ４６…検索スペース、  ４８…マクロブロック、  ５０…マクロブロック、  ５２…検索スペース、  ５４Ａ…ロー、  ５６Ａ…カラム、  ５８…比較器、  ６０…加算器、  ６２…ビデオブロックカウンタ回路、  ６４…ビットカウンタ、  ６６…判断論理、  ６８…アドレスマッピング回路、  ７０…加算器、  ７２…ＯＲゲート、  ７４…マルチプレクサ、  ７６…累算器、  ７８…加算器、  ８０…アドレスマッピング回路、  ８２…演算子、  ８４…一時記憶デバイス（フリップフロップ）、  ８６…ＯＲゲート、  ８８…マルチプレクサ、  ９０．９２…マルチプレクサ、  ９０…第１のカラムマルチプレクサ、  ９２．９４…第３のカラムマルチプレクサ、  ９５…比較器、  ９６…加算器、  ９７…ＯＲゲート、  ９８…ビットカウンタ、  １００Ａ…絶対差分計算チャネル、  １００…ＡＤ計算チャネル、  １０２Ａ…ビット加算器、  １０４Ａ…ビット加算器、  １０６…ビット加算器、  １０８…加算器、  １１０…フリップフロップ、  ２０００…ＪＰＥＧ
【図１】
2005530422.tif 000003
【図２】
2005530422.tif 000004
【図３】
2005530422.tif 000005
【図４】
2005530422.tif 000006
【図５】
2005530422.tif 000007
【図６Ａ】
2005530422.tif 000008
【図６Ｂ】
2005530422.tif 000009
【図６Ｃ】
2005530422.tif 000010
【図７Ａ】
2005530422.tif 000011
【図７Ｂ】
2005530422.tif 000012
【図７Ｃ】
2005530422.tif 000013
【図８Ａ】
2005530422.tif 000014
【図８Ｂ】
2005530422.tif 000015
【図９】
2005530422.tif 000016
【図１０】
2005530422.tif 000017
【図１１】
2005530422.tif 000018
【図１２】
2005530422.tif 000019
【図１３】
2005530422.tif 000020
【図１４】
2005530422.tif 000021
【図１５】
2005530422.tif 000022
【図１６】
2005530422.tif 000023
【図１７】
2005530422.tif 000024
【図１８】
2005530422.tif 000025
【図１９】
2005530422.tif 000026
【国際調査報告】
2005530422.tif 000027
2005530422.tif 000028
2005530422.tif 000029
2005530422.tif 000030
2005530422.tif 000031
2005530422.tif 000032