(57)【要約】  加速されたビデオ復号化システムが、中央処理装置を利用して他の復号化プロセスを実行しつつ、グラフィックス処理ユニットを利用して、動き補償プロセス、イメージ再構成プロセス、および色空間変換プロセスを実行する。
2007525049.tif 000002
【特許請求の範囲】
【請求項１】
イントラ符号化されたフレームデータとインタ符号化されたフレームデータを含む符号化されたビデオビットストリームを受け取ること、
中央処理装置を使用して前記イントラ符号化されたフレームデータを復号化すること、
前記イントラ符号化されたフレームデータをグラフィックス処理ユニットに転送すること、
該ユニットを使用して、前記インタ符号化されたフレームデータに対する基準フレームデータとして使用される前記イントラ符号化されたフレームデータのコピーをバッファリングし、該フレームデータを表示されるようにディスプレイデバイスに伝送すること、
前記インタ符号化されたフレームデータを前記中央処理装置を使用して復号化すること、
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに転送すること、および、
該ユニットを使用して、前記インタ符号化されたフレームデータに関連する動きベクトルを前記基準フレームデータに適用して動き補償された基準フレームデータを生成し、前記インタ符号化されたフレームデータを前記動き補償された基準フレームデータに加えることで前記インタ符号化されたフレームデータに関連するイメージデータを再構成すること
を含むことを特徴とする方法。
【請求項２】
前記イントラ符号化されたフレームデータを前記復号化することは可変長復号化プロセスを実行することを含むことを特徴とする請求項１の方法。
【請求項３】
前記イントラ符号化されたフレームデータを前記復号化することは逆量子化プロセスを実行することを含むことを特徴とする請求項１の方法。
【請求項４】
前記イントラ符号化されたフレームデータを前記復号化することは逆離散コサイン変換を適用することを含むことを特徴とする請求項１の方法。
【請求項５】
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに前記転送することは、
前記インタ符号化されたフレームデータの２つ以上のマクロブロックを識別すること、
該マクロブロックを一緒にパックしてデータパケットにすること、および、
前記データパケットを前記グラフィックス処理ユニットに転送すること
を含むことを特徴とする請求項１の方法。
【請求項６】
前記インタ符号化されたフレームデータは、対応する基準マクロブロックからのデータに依存しない複数のイントラ符号化されたマクロブロックと、対応する基準マクロブロックからのデータに依存する複数のインタ符号化されたマクロブロックを含み、並びに、
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに前記転送することは、
前記インタ符号化されたフレームデータの２つ以上のインタ符号化されたマクロブロックを識別すること、
前記２つ以上のインタ符号化されたマクロブロックを一緒にパックしてインタ符号化されたマクロブロックだけを含むデータパケットにすること、および、
前記データパケットを前記グラフィックス処理ユニットに転送すること
を含むことを特徴とする請求項１の方法。
【請求項７】
前記インタ符号化されたフレームデータは、対応する基準マクロブロックからのデータに依存しない複数のイントラ符号化されたマクロブロックと、対応する基準マクロブロックからのデータに依存する複数のインタ符号化されたマクロブロックを含み、並びに、
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに前記転送することは、
前記インタ符号化されたフレームデータの２つ以上のイントラ符号化されたマクロブロックを識別すること、
該マクロブロックを一緒にパックしてイントラ符号化されたマクロブロックだけを含むデータパケットにすること、および、
前記データパケットを前記グラフィックス処理ユニットに転送すること
を含むことを特徴とする請求項１の方法。
【請求項８】
前記インタ符号化されたフレームデータは関連する動きベクトルをそれぞれが有する複数のマクロブロックを含み、並びに、
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに前記転送することは、
ゼロに等しい関連する動きベクトルをそれぞれが有する２つ以上のマクロブロックを識別すること、
該マクロブロックを一緒にパックしてゼロの動きベクトルを有するマクロブロックだけを含むデータパケットにすること、および、
前記データパケットを前記グラフィックス処理ユニットに転送すること
を含むことを特徴とする請求項１の方法。
【請求項９】
前記インタ符号化されたフレームデータは関連する動き補償精度をそれぞれが有する複数のマクロブロックを含み、並びに、
前記インタ符号化されたフレームデータを前記グラフィックス処理ユニットに前記転送することは、
同一の動き補償精度をそれぞれが有する２つ以上のマクロブロックを識別すること、
該マクロブロックを一緒にパックして同一の動き補償精度を有するマクロブロックだけを含むデータパケットにすること、および、
前記データパケットを前記グラフィックス処理ユニットに転送すること
を含むことを特徴とする請求項１の方法。
【請求項１０】
前記動き補償精度は最も近いピクセルまでであることを特徴とする請求項９の方法。
【請求項１１】
前記動き補償精度は最も近い１／２ピクセルまでであることを特徴とする請求項９の方法。
【請求項１２】
前記動き補償精度は最も近い１／４ピクセルまでであることを特徴とする請求項９の方法。
【請求項１３】
前記グラフィックス処理ユニットを使用して、後続のインタ符号化されたフレームデータに対する基準データとして使用される再構成された前記イメージデータのコピーをバッファリングすることをさらに含むことを特徴とする請求項１の方法。
【請求項１４】
前記グラフィックス処理ユニットを使用して、第１の色空間から前記ディスプレイデバイスによってサポートされる色空間である第２の色空間に、前記イントラ符号化されたフレームデータを変換することをさらに含むことを特徴とする請求項１の方法。
【請求項１５】
前記グラフィックス処理ユニットを使用して、第１の色空間から前記ディスプレイデバイスによってサポートされる色空間である第２の色空間に、再構成された前記イメージデータを変換することをさらに含むことを特徴とする請求項１の方法。
【請求項１６】
符号化されたビデオデータを受け取ること、
第１の処理装置を使用して、前記符号化されたビデオデータを伸張すること、および、
第２の処理装置を使用して、前記ビデオデータに関連して動き補償処理を実行することを含むことを特徴とする方法。
【請求項１７】
前記第１の処理装置は中央処理装置として実装されることを特徴とする請求項１６の方法。
【請求項１８】
前記第１の処理装置はグラフィックス処理ユニットとして実装されることを特徴とする請求項１６の方法。
【請求項１９】
前記第２の処理装置は、ベクトルベースのグラフィックス処理演算を実行するように構成されたグラフィックス処理ユニットとして実装されることを特徴とする請求項１６の方法。
【請求項２０】
前記第２の処理装置は、ピクセルベースのグラフィックス処理演算を実行するように構成されたグラフィックス処理ユニットとして実装されることを特徴とする請求項１６の方法。
【請求項２１】
前記第２の処理装置を使用して、前記ビデオデータに関連して予測イメージ再構成を実行することをさらに含むことを特徴とする請求項１６の方法。
【請求項２２】
前記第２の処理装置を使用して、前記ビデオデータに関連して色空間変換を実行することをさらに含むことを特徴とする請求項１６の方法。
【請求項２３】
ビデオビットストリームを復号化することに関連して第１の演算を実行するように構成された中央処理装置と、
前記ビデオビットストリームを復号化することに関連して第２の演算を実行するように構成されたグラフィックス処理ユニットと
を備えることを特徴とするシステム。
【請求項２４】
前記グラフィックス処理ユニットは、
ピクセルベースのグラフィックス処理演算を実行するように構成されたプログラマブルピクセルシェーダコンポーネントと、
頂点ベースのグラフィックス処理演算を実行するように構成されたプログラマブル頂点シェーダコンポーネントと
を備えることを特徴とする請求項２３のシステム。
【請求項２５】
前記第１の演算はビデオ伸張演算を含むことを特徴とする請求項２３のシステム。
【請求項２６】
前記第１の演算は、逆離散コサイン変換、逆量子化、および可変長復号化の少なくとも１つを含むことを特徴とする請求項２３のシステム。
【請求項２７】
前記第２の演算は色空間変換演算を含むことを特徴とする請求項２３のシステム。
【請求項２８】
前記第２の演算はイメージ再構成演算を含むことを特徴とする請求項２３のシステム。
【請求項２９】
前記第２の演算は動き補償演算を含むことを特徴とする請求項２３のシステム。
【請求項３０】
復号化されたビデオビットストリームデータを格納するためのバッファをさらに備えることを特徴とする請求項２３のシステム。
【請求項３１】
前記ビデオビットストリームを表示するように構成されたディスプレイデバイスをさらに備えることを特徴とする請求項２３のシステム。
【請求項３２】
符号化されたビデオビットストリームを復号化するための中央処理装置と、
前記ビデオビットストリームに関連して動き補償処理を実行するためのプログラマブル頂点シェーダと、
前記ビデオビットストリームに関連してイメージ再構成を実行するためのプログラマブルピクセルシェーダと
を備えることを特徴とするシステム。
【請求項３３】
中央処理装置と、
グラフィックス処理ユニットと、
符号化されたビデオビットストリームを復号化することに関連して第１の演算を実行するよう前記中央処理装置を誘導し、前記符号化されたビデオビットストリームを復号化することに関連して第２の演算を実行するよう前記グラフィックス処理ユニットを導くように構成されたビデオ復号化アプリケーションと
を備えることを特徴とするシステム。
【請求項３４】
前記第１の演算は、前記符号化されたビデオビットストリームのフレームを伸張することを含むことを特徴とする請求項３３のシステム。
【請求項３５】
前記第２の演算は、前記符号化されたビデオビットストリームのフレームに関連する動きベクトルを基準フレームデータに適用することを含むことを特徴とする請求項３３のシステム。
【請求項３６】
中央処理装置を利用してビデオ復号化プロセスの第１の部分を実行するための手段と、
グラフィックス処理ユニットを利用して前記ビデオ復号化プロセスの第２の部分を実行するための手段と
を備えることを特徴とするシステム。
【請求項３７】
実行されると、中央処理装置を使用して、受け取られたビデオビットストリームを伸張し、グラフィックス処理ユニットを使用して、前記ビデオビットストリームに対して動き補償処理を実行するよう、コンピューティングシステムを導くコンピュータ実行可能命令を含むことを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項３８】
実行されると、前記ビデオビットストリームの特定のフレームが、前記グラフィックス処理ユニットによって処理されることが可能な最大データサイズより大きい場合、前記フレームに関連するデータをパーティション分割して、前記最大データサイズよりそれぞれが小さい、重なり合うサブピクチャにするように前記中央処理装置を導くよう、コンピューティングシステムを導くコンピュータ実行可能命令をさらに含むことを特徴とする請求項３７のコンピュータ可読媒体。
【請求項３９】
実行されると、前記グラフィックス処理ユニットを使用してバイリニアフィルタを適用して、前記動き補償処理に関連して１／２ピクセル精度を実現するよう、コンピューティングシステムを導くコンピュータ実行可能命令をさらに含むことを特徴とする請求項３７のコンピュータ可読媒体。
【請求項４０】
実行されると、前記グラフィックス処理ユニットを使用してバイキュービックフィルタを適用して、前記動き補償処理に関連して１／４ピクセル精度を実現するよう、コンピューティングシステムを導くコンピュータ実行可能命令をさらに含むことを特徴とする請求項３７のコンピュータ可読媒体。
【請求項４１】
実行されると、前記グラフィックス処理ユニットを使用して、イメージ再構成を実行するよう、コンピューティングシステムを導くコンピュータ実行可能命令をさらに含むことを特徴とする請求項３７のコンピュータ可読媒体。
【請求項４２】
実行されると、Ｙ成分、Ｕ成分、およびＶ成分を含むイメージを再構成して、前記Ｙ成分、前記Ｕ成分、および前記Ｖ成分が、コンピュータシステムによってサポートされており、前記イメージの前記Ｙ成分、前記Ｕ成分、および前記Ｖ成分を保持するだけ十分に大きい、最小の目標テクスチャ上に配置されるようにするよう、該コンピューティングシステムを導くコンピュータ実行可能命令をさらに含むことを特徴とする請求項４１のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はビデオ復号化に関し、詳細には、グラフィックス処理ユニットを使用してビデオ復号化を加速することに関する。
【背景技術】
【０００２】
マルチメディアは、デジタルエンターテイメントの中核であり、通常、特にリアルタイムアプリケーションに関して、非常に高い処理能力を要求する。リアルタイムマルチメディアアプリケーションが、汎用コンピュータを使用して実施される場合、コンピュータの中央処理装置（ＣＰＵ）には、通常、重い負荷がかかり、多くの場合、ＣＰＵは、リアルタイムマルチメディアアプリケーションをサポートすることができない。例えば、ほとんどの標準の家庭用パーソナルコンピュータに見られるＣＰＵは、高精細度ビデオをリアルタイムで復号化するだけ十分に高性能ではない。
【０００３】
シリコン技術およびコンピュータグラフィックス技術の進歩とともに、ますます高価ではあるが、高性能のグラフィックス処理ユニット（ＧＰＵ）が、主流のパーソナルコンピュータおよびゲームコンソールに見られる。ＧＰＵは、２次元グラフィックス演算（operation）および３次元グラフィックス演算を実行するように設計された専用プロセッサである。コンピュータが、非グラフィックス指向の演算（operation）（例えば、符号化されたビデオビットストリームを復号化すること）を実行している場合、ＣＰＵに重い負荷がかかっている可能性がある一方で、ＧＰＵは、アイドルである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、非グラフィックスアプリケーションで使用するためにＧＰＵの能力を活用する必要性が存在する。
【課題を解決するための手段】
【０００５】
グラフィックス処理ユニットを利用してビデオビットストリームの復号化を加速することを説明する。加速されたビデオ復号化システムが、符号化されたビデオストリームを受け取り、中央処理装置を使用して復号化処理の諸部分を実行し、グラフィックス処理ユニットを使用して復号化処理の別の諸部分を実行する。具体的には、グラフィックス処理ユニットを使用して、動き補償処理、イメージ再構成、および色空間変換が実行される。
【発明を実施するための最良の形態】
【０００６】
すべての図面で、同一の符号は、同様の特徴、および同様のコンポーネントを指すのに使用される。
【０００７】
以下の説明は、非グラフィックス演算を支援するグラフィックス処理ユニット（ＧＰＵ）の使用を対象とする。具体的には、ＧＰＵを使用して、ビデオビットストリームの復号化が加速される典型的な実施形態を説明する。ＧＰＵは、頂点ごと（per-vertex basis）（例えば、ポリゴン（polygon）ベースのレンダリング）、および／またはピクセルごとのグラフィックス演算を実行するように特化された処理装置である。説明するインプリメンテーションでは、計算リソースを多く使い（computationally intensive）、通常、中央処理装置（ＣＰＵ）によって実行されるビデオ復号化演算、すなわち、動き補償、イメージ再構成、および色空間変換がＧＰＵによって実行されてＣＰＵにかかる負荷が軽減され、ビデオビットストリーム復号化プロセスが加速される。
【０００８】
加速されたビデオ復号化は、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏフォーマットに準拠して符号化されたビデオビットストリームに適用されるものとして本明細書で説明するが、説明するプロセスは、ＭＰＥＧおよびＨ．２６ｘを含む、他のフォーマットに準拠して符号化されたビデオビットストリームに適用することも可能である。
【０００９】
ストリーミングビデオは、イントラ符号化（intra-coded）フレーム（Ｉフレーム）、予測（predicted）フレーム（Ｐフレーム）、および双方向予測（bi-directional predicted）フレーム（Ｂフレーム）の任意の組み合わせを含むことが可能な、フレームシーケンスとして符号化される。それぞれの符号化されたＩフレームは、完全なイメージを生成し、レンダリングするのに必要なデータのすべてを含む。符号化されたＰフレーム内のデータからイメージを生成することは、そのＰフレームからのデータ、および基準フレームと呼ばれる、先行するＩフレームまたはＰフレームからのデータを要する。符号化されたＢフレーム内のデータからイメージを生成することは、そのＢフレームからのデータだけでなく、先行する基準Ｉフレームまたは基準Ｐフレームと、将来の基準Ｉフレームまたは基準Ｐフレームの両方からのデータも要する。
【００１０】
それぞれの符号化されたフレーム（Ｉフレーム、Ｐフレーム、またはＢフレーム）は、マクロブロックに分割される。通常のマクロブロックは、１６×１６ピクセルのサイズの領域である。イメージのサイズに依存して、各フレームは、多くのマクロブロックを含む可能性がある。Ｉフレームは、完全なイメージを表示するのに必要なデータのすべてを含むため、Ｉフレームの各マクロブロックは、そのマクロブロック（すなわち、イメージの１６×１６ピクセル部分）によって表されるイメージの部分を表示するのに必要なデータのすべてを含むことになる。前述した通り、Ｐフレームは、先行するＩフレームまたはＰフレームから予測される。これは、Ｐフレームのマクロブロックの少なくとも１つが、先行するＩフレームまたはＰフレームの対応するマクロブロック内のデータに依拠することを意味する。ＰフレームまたはＢフレームの個々のマクロブロックは、インタ符号化（inter-coded）されていること、またはイントラ符号化されていることが可能である。インタ符号化されたマクロブロックは、基準マクロブロックに依拠し、他方、イントラ符号化されたマクロブロックは、基準マクロブロックに依拠しない。イントラ符号化されたマクロブロックは、予測フレームに関連するイメージのマクロブロックサイズの部分を生成するのに必要なデータのすべてを含む。したがって、Ｉフレームに関連するマクロブロックのすべては、イントラ符号化されたマクロブロックである。インタ符号化されたマクロブロックは、予測フレームに関連するイメージの一部分と、基準フレームに関連するイメージの対応する一部分の間の差分を記述するデータを含む。
【００１１】
インタ符号化されたマクロブロックに関連するデータは、通常、動きベクトルと差分データを含む。動きベクトルは、基準マクロブロックを予測マクロブロックと整列させるように基準マクロブロックに適用されるべき２次元変換を記述し、他方、差分データは、基準マクロブロックと予測マクロブロックの間で異なる特定のピクセルを明らかにする。
【００１２】
（典型的なビデオ復号化プロセス）
図１−先行技術は、典型的なビデオ復号化プロセス１００を示す。通常のビデオ復号器は、符号化されたビットストリームを受け取り、可変長復号化１０２、逆量子化（dequantization）１０４、逆離散コサイン変換１０６、動き補償１０８、イメージ再構成１１０、および色空間変換１１２を実行することにより、受け取られたビットストリームを処理する。
【００１３】
可変長符号化、離散コサイン変換、および量子化は、ビデオビットストリームが伝送される前に、ビデオビットストリームを圧縮するのに使用される、周知のビデオ符号化技術である。可変長復号化１０２、逆量子化１０４、および逆離散コサイン変換１０６は、受け取られた、符号化されたビデオビットストリームに適用されて、ビデオデータを伸張する、周知の復号化技術である。ビデオは、可変長符号化、離散コサイン変換、量子化、および／またはその他の符号化技術の任意の組み合わせに従って符号化すること（および、後に復号化すること）ができる。
【００１４】
説明するインプリメンテーションでは、システムパフォーマンスを向上させるため、ビデオビットストリームは復号化された後、バッファ１１４で示す通りバッファリングされる。
【００１５】
動き補償１０８は、２次元平行移動を記述する動きベクトルが、基準フレームのマクロブロックに適用されるプロセスである。動きベクトルは、符号化されたビデオビットストリームの一部であり、基準フレームのマクロブロック内のデータと、予測フレームの対応するマクロブロック内のデータの間の２次元位置差（locaton difference）を記述する。説明するインプリメンテーションでは、予測フレームの各マクロブロックは、関連する動きベクトルを有する。
【００１６】
説明するインプリメンテーションでは、マクロブロックは、１６×１６ピクセルブロックのサイズである。別の実施形態では、各マクロブロックは、４つの８×８ブロックとして記述することができ、したがって、各８×８ブロックに動きベクトルが割り当てられる。そのようなインプリメンテーションでは、マクロブロックの各８×８ブロックは、別々に、ただし、本明細書で説明するマクロブロック処理と同一の形で処理されることが可能である。したがって、以下の説明は、マクロブロックレベルで実行される処理を説明する。ただし、他のサイズのデータブロックに対しても同一の処理を実行することができることが認識されよう。
【００１７】
図１に示す通り、動き補償１０８が、バッファ１１６で示す通り、前にバッファリングされた基準データに対して実行され、バッファ１１６は、後に受け取られる予測フレームデータに対する基準として使用されるべき、前に復号化され、再構成されたフレームデータを格納するのに使用される。基準フレームが、誤った形で復号化された、または受け取られなかった場合、ドリフトする（drifting）エラーが、誤った（または欠落した）基準フレームから予測される、後続のＰフレームおよびＢフレームに伝播する。したがって、動き補償処理１０８が正確に実行されることが重要である。
【００１８】
再構成１１０は、動き補償された基準フレームデータが、受け取られた差分データ（ＰフレームまたはＢフレームに関連する）に加えられて、予測フレームに関連する再構築されたイメージが形成されるプロセスである。図１に示す通り、再構成されたデータは、基準データとして後に使用するために、バッファリングされる（バッファ１１６で示す通り）ことが可能である。
【００１９】
表示１１８に先立って、再構成されたデータに対して、色空間変換１１２が実行される。色空間変換処理１１２は、ビデオデータが作成された色空間から、そのビデオデータが表示されるディスプレイデバイスに関連する色空間に、ビデオデータを変換するように実行される。例えば、通常の色空間変換は、ＹＵＶフォーマットからＲＧＢフォーマットであることが可能である。
【００２０】
（典型的なシステムアーキテクチャおよび方法）
図２は、加速されたビデオ復号化システム２０２の典型的なアーキテクチャを示す。加速されたビデオ復号化システム２０２は、符号化されたビデオビットストリームを受け取り、受け取られたデータを復号化し、符号化されたデータをディスプレイデバイス２０４に伝送する。ディスプレイデバイス２０４は、テレビ、コンピュータモニタ、または他のそのようなディスプレイデバイスを表す。物理的に別個のデバイスとして示しているが、ディスプレイデバイス２０４は、加速されたビデオ復号化システム２０２の組み込まれたコンポーネントとして実装してもよい。
【００２１】
加速されたビデオ復号化システム２０２は、パーソナルコンピュータ、ビデオゲームコンソール、またはビデオデータを受け取り、復号化し、レンダリングするように構成された他のそのようなデバイスを表す。典型的な加速されたビデオ復号化システム２０２は、中央処理装置（ＣＰＵ）２０６、グラフィックス処理ユニット（ＧＰＵ）２０８、およびメモリ２１０を含む。典型的なＧＰＵ２０８は、頂点ごとのグラフィックス演算を実行するためのプログラマブル頂点シェーダ（vertex shader）２１２、およびピクセルごとのグラフィックス演算を実行するためのプログラマブルピクセルシェーダ２１４を含む。
【００２２】
メモリ２１０が、ビデオ復号化アプリケーション２１６を格納するのに使用され、他のアプリケーション群２１８も格納することができる。また、メモリ２１０は、ＣＰＵ２０６によるアクセスが可能なＣＰＵバッファ２２０、ＧＰＵ２０８によるアクセスが可能なＧＰＵバッファ２２２、およびディスプレイデバイス２０４によるアクセスが可能なディスプレイバッファ２２４などの、１つまたは複数のバッファも含むことが可能である。他のアプリケーション群２１８は、ＣＰＵ２０６上、またはＧＰＵ２０８上で実行されるように実施されることが可能である。ビデオ復号化アプリケーション２１６が、可変長復号化１０２、逆量子化１０４、および逆離散コサイン変換１０６を実行するよう、ＣＰＵ２０６を導くように実施される。ビデオ復号化アプリケーション２１６は、動き補償１０８、イメージ再構成１１０、および色空間変換１１２を実行するよう、ＧＰＵ２０８を導くようにさらに実施される。ＧＰＵ２０８を利用して、符号化されたビデオビットストリームの復号化を加速するための方法を、図３を参照して、以下により詳細に説明する。
【００２３】
（ビデオ復号化を加速するための典型的な方法）
加速されたビデオ復号化は、コンピュータによって実行される、アプリケーションモジュール群などの、コンピュータ実行可能命令の一般的な文脈で説明することができる。一般に、アプリケーションモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。ビデオ復号化アプリケーション２１６は、任意の数のプログラミング技術を使用して実施することができ、ローカルコンピューティング環境で実施しても、任意の数の通信プロトコルに基づく様々な通信ネットワークを介してリンクされたリモート処理デバイス群によってタスクが実行される、分散コンピューティング環境で実施してもよい。そのような分散コンピューティング環境では、アプリケーションモジュール群は、メモリ記憶装置を含む、ローカルコンピュータ記憶媒体とリモートコンピュータ記憶媒体の両方の中に配置することができる。
【００２４】
図３は、グラフィックス処理ユニットを使用してビデオ復号化を加速するための典型的な方法３００を示す。ブロック３０２〜３１０はＣＰＵ２０６によって実行される処理を表し、他方、ブロック３１２〜３２８はＧＰＵ２０８によって実行される処理を表す。
【００２５】
ブロック３０２で、ビデオ復号化システム２０２は、符号化されたビデオビットストリームを受け取る。前述した通り、説明するインプリメンテーションは、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏフォーマットに準拠して符号化されたビデオビットストリームに適用される。別の実施形態は、ＭＰＥＧやＨ．２６ｘなどの他のフォーマットに準拠して符号化されたビデオビットストリームを復号化するように構成されてもよい。
【００２６】
ブロック３０４で、ビデオ復号化アプリケーション２１６が、受け取られた、符号化されたビデオビットストリーム内の符号化されたフレームを識別するよう、ＣＰＵ２０６を導く。識別されたフレームはＩフレーム、ＰフレームまたはＢフレームとすることができる
ブロック３０６で、ビデオ復号化アプリケーション２１６は、識別されたフレームの各マクロブロックに対して可変長復号化、逆量子化、および／または逆離散変換を実行することにより、識別されたフレームを復号化するよう、ＣＰＵ２０６を導く。Ｉフレームに関して、復号化されたデータは、実際のイメージデータから成り、他方、ＰフレームまたはＢフレームに関して、復号化されたデータは、１つまたは複数の基準フレームイメージと、現行のＰフレームまたはＢフレームによって表されるイメージの間の差分を表す。各マクロブロックに関連する、復号化されたデータは、通常、動きベクトル、並びに動き補償された基準イメージと予測イメージの間で異なるピクセルを記述するデータを含む。
【００２７】
ブロック３０８で、ビデオ復号化アプリケーション２１６は、復号化されたデータをバッファリングするよう、ＣＰＵ２０６を導く。説明するインプリメンテーションでは、復号化されたフレームデータは、ＣＰＵバッファ２２０の中に格納される。復号化されたデータをバッファリングした後、ＣＰＵ２０６は、ブロック３０４〜３０８に関連して前述した通り、さらなるフレームを復号化することを続ける。復号化されたデータをバッファリングすることにより、ＣＰＵ２０６は、ＧＰＵ２０８が、前に復号化されたデータを処理している間に、さらなるデータを復号化することを続けることができ、ＣＰＵとＧＰＵの両方を同時に利用することにより、システムパフォーマンスが向上させられる。
【００２８】
ブロック３１０で、ビデオ復号化アプリケーション２１６は、ＣＰＵバッファ２２０からＧＰＵ２０８にデータを転送する。１つのインプリメンテーションでは、利用可能な帯域幅を活用するため、差分データの２つ以上のマクロブロックが、ＣＰＵ２０６からＧＰＵ２０８に伝送するために、一緒にパックされる。１つのインプリメンテーションでは、動きベクトルデータは、差分データとは別個に、ＣＰＵ２０６からＧＰＵ２０８に転送される。
【００２９】
ブロック３１２で、ＧＰＵ２０８が、ＣＰＵバッファ２２０から受け取られたデータが、Ｉフレームに関連しているかどうかを判定する。データが、Ｉフレームに関連している場合、動き補償またはイメージ再構成の処理は全く必要とされず、処理は、ブロック３２０に進み（ブロック３１２から「はい」の分岐）、復号化されたデータが、後続の予測フレームに対する基準データとして使用されるように、ＧＰＵバッファ２２２の中に格納される。
【００３０】
受け取られたデータが、ＰフレームまたはＢフレームに関連している場合（ブロック３１２から「いいえ」の分岐）、ブロック３１４で、ビデオ復号化アプリケーション２１６は、動き補償処理を実行するよう、ＧＰＵ２０８を導く。ＧＰＵ２０８は、受け取られたフレームデータのマクロブロックに関連する動きベクトルを、前にバッファリングされた基準データの対応するマクロブロックに適用する。説明するインプリメンテーションでは、受け取られたマクロブロックがインタ符号化されているか、またはイントラ符号化されているかに依存して異なり、関連する動きベクトルの値に基づいて異なる、相異なる動き補償モードがサポートされる。また、整数ペル（pel）精度、１／２ペル精度、および１／４ペル精度を含む、様々な動き補償精度もサポートされる。典型的な動き補償処理を、図４を参照して、以下により詳細に説明する。
【００３１】
ブロック３１６で、ビデオ復号化アプリケーション２１６は、現行のフレームに関連するマクロブロックのすべてが、ＧＰＵ２０８に伝送済みであるか否かを判定する。現在、処理されている予測フレームに関連する、さらなる差分データが存在する（すなわち、フレームに関するマクロブロックのすべてが、ＧＰＵ２０８に転送済みであるのではない）場合、処理は、前述した通り、ブロック３１０に進む。反対に、現在、処理されている予測フレームに関する差分データのすべてが、ＧＰＵ２０８に転送済みである場合、以下に説明する通り、ブロック３２０で、イメージ再構成処理が実行される。前述した通り、ＣＰＵ２０６とＧＰＵ２０８の間の利用可能な帯域幅に依存して、ＣＰＵ２０８に送る際、複数のマクロブロックを一緒にパックしてもよい。ＣＰＵ２０６が、ビデオデータを十分に高速で復号化し、ＣＰＵ２０６とＧＰＵ２０８の間のメモリ帯域幅が、十分に大きいインプリメンテーションでは、フレームに関連するマクロブロック群は、単一のバッチで伝送して、ブロック３１６からブロック３１２までのループで図３に示す、反復する処理の必要性を無くしてもよい。
【００３２】
ブロック３１８で、ビデオ復号化アプリケーション２１６は、受け取られた予測フレームデータに関連するイメージを再構成するよう、ＧＰＵ２０８を導く。イメージ再構成は、動き補償された基準データを、フレームの各マクロブロックに関する、受け取られた差分データに加えることによって実行される。典型的なイメージ再構成方法を、図５を参照して、以下にさらに詳細に説明する。
【００３３】
ブロック３２０で、ビデオ復号化アプリケーション２１６は、再構成されたイメージデータ（またはＩフレームの場合、受け取られたイメージデータ）をＧＰＵバッファ２２２にコピーするよう、ＧＰＵ２０８を導く。バッファリングされたイメージデータは、次に、後続で受け取られた予測フレームデータに対する基準データとして使用することができる。説明するインプリメンテーションでは、Ｂフレームデータは、後続のフレームに対する基準データとして使用されず、したがって、ブロック３２０でバッファリングされない。
【００３４】
ブロック３２２で、ビデオ復号化アプリケーション２１６が、再構成されたイメージに対して色空間変換処理を実行するよう、ＧＰＵ２０８のピクセルシェーダコンポーネント２１４を導く。色空間変換処理は、ピクセルごとに実行されて、イメージが作成された色空間（例えば、ＹＵＶ）から、ディスプレイデバイス２０４によってサポートされる色空間（例えば、ＲＧＢ）に、イメージが変換される。色空間変換は、イメージ内の各ピクセルに適用されるため、色空間処理が、ＧＰＵ２０８のプログラマブルピクセルシェーダコンポーネント２１４を使用して実行されるのは適切である。
【００３５】
ブロック３２４で、イメージデータが、ディスプレイバッファ２２４にコピーされる。ブロック３２４で、フレームデータの表示順序も調整されることが可能である。例えば、Ｂフレームは、先行するフレームと将来のフレームの両方からのデータに依存するため、フレームは、フレームが表示される順序とは異なる順序で受け取られ、処理される可能性がある。ブロック３２４で、表示順序は、正しい時間的順序を復元するように調整される。このブロックは、ＩフレームおよびＰフレームだけに適用され、シーケンスがＢフレームを含む場合だけに必要である。このステップが必要なのは、Ｂフレームが、時間的に、Ｂフレームに先行する基準、およびＢフレームの後に続く基準という、２つの基準に依存するためである。復号化されたフレームデータは、そのフレームに関連するスケジュールされた表示時刻に達するまで、ディスプレイバッファ２２４の中に留まる。バッファリングされるデータの量は、処理速度が、表示速度と同等であった（compared）かどうかに依存する。また、復号化されたデータをバッファリングすることにより、表示ジッタも減少し、ＣＰＵおよびＧＰＵが、前に処理されたフレームがディスプレイバッファ２２４の中に格納される間に、さらなるフレームを処理することを続けることが可能になる。
【００３６】
ブロック３２６で、ビデオ復号化アプリケーション２１６は、オプションとして、再構成されたイメージに対して特殊効果処理を実行するよう、ＧＰＵ２０８を導くように構成されてもよい。例えば、ＧＰＵ２０８は、逆インターレース（de-interlacing）、逆テレシネ（inverse telecine）、スケーリング（scaling）、フェードインまたはフェードアウト、イメージシャープニング（sharpening）またはイメージぼかし（blurring）などの、頂点ベース、またはピクセルベースの特殊効果を実行するように誘導されることが可能である。
【００３７】
ブロック３２８で、復号化されたフレームイメージが、ディスプレイデバイス２０４に伝送される。
【００３８】
（典型的な動き補償処理方法）
図４は、ＧＰＵ２０８によって実行される典型的な動き補償処理方法を示す。図示した方法は、図３のブロック３１４に関連して説明した通り、ＧＰＵによって実行されることが可能である。
【００３９】
前述した通り、典型的な実施形態では、１６×１６のマクロブロックが、１つの動きベクトルを有することが可能であり（すなわち、１ＭＶマクロブロック）、あるいはマクロブロックは、動きベクトルをそれぞれが有する、４つの８×８ブロックに分割されてもよい（すなわち、４ＭＶマクロブロック）。説明するインプリメンテーションでは、４ＭＶマクロブロックの各８×８ブロックが、別々に、１ＭＶマクロブロックが処理されるのと同一の形で処理される。方法３１４は、１ＭＶマクロブロックに関連して説明するが、４ＭＶマクロブロックのそれぞれのより小さいブロックに関して実行してもよい。
【００４０】
ブロック４０２で、ＧＰＵ２０８が、ＰフレームまたはＢフレームなどの予測フレームのマクロブロックに関連する動きベクトルデータを初期設定する。ビデオ復号化アプリケーション２１６は、受け取られた動きベクトルデータに対して初期処理を実行して、頂点データを生成するよう、ＧＰＵ２０８のプログラマブル頂点シェーダコンポーネント２１２を導く。目標マクロブロック（すなわち、再構成されるべきマクロブロック）に関して、各頂点（すなわち、４つのコーナ（corner）ピクセルのそれぞれ）に関する目標位置およびテクスチャアドレスが算出される。目標位置は、目標位置は、再構成されるべきマクロブロックの目標テクスチャの中の位置を指定し、トライアングルセットアップ（triangle setup）のために使用される。テクスチャアドレスは、基準フレーム内の対応するマクロブロックの頂点の位置を指定する。１つのインプリメンテーションでは、ＣＰＵ２０６は、目標ブロック位置に動きベクトルを適用することによって、テクスチャアドレスを計算し、テクスチャアドレスをＧＰＵ２０８に送る。別の実施形態では、ＣＰＵ２０６は、動きベクトルをＧＰＵ２０８に送り、頂点シェーダ２１２が、テクスチャアドレスを計算するように構成される。
【００４１】
ブロック４０４で、ＧＰＵ２０８は、処理されるべきマクロブロックが、イントラ符号化されたマクロブロックであるか否かを判定する。処理されるべきマクロブロックが、イントラ符号化されたマクロブロックである場合（ブロック４０４から「はい」の分岐）、受け取られたマクロブロックデータは、ゼロ値（zero-valued）テクスチャとアルファブレンド（alpha blend）される（ブロック４０６）。イントラ符号化されたマクロブロックは、イメージの完全な１６×１６ピクセル領域を生成するのに必要なデータをすべて含むため、受け取られたデータをゼロ値テクスチャとブレンドすることにより、受け取られたマクロブロックに対応するイメージの完全な１６×１６ピクセル領域を含む、目標テクスチャがもたらされる。
【００４２】
別の実施形態では、イントラ符号化されたマクロブロックは、ゼロの動きベクトルを有するインタ符号化されたマクロブロックが処理されるのと同一の形（ブロック４１０に関連して以下に説明する）で処理される。そのようなインプリメンテーションでは、前に生成された基準イメージの諸部分をゼロ設定（sero out）する計算コストが高い（computationally expensive）ため、ピクチャの外の前に消去された（すなわち、基準ピクセル値がゼロに設定されている）領域を、イントラ符号化されたマクロブロックに対する、対応する基準マクロブロックとして使用する。
【００４３】
別のインプリメンテーションでは、イントラ符号化されたマクロブロックに関する動き補償処理は、他のいずれのマクロブロックを処理するよりも前に、目標テクスチャをまず消去すること（すなわち、各ピクセル値をゼロに設定すること）によって実行される。
【００４４】
処理されるべきマクロブロックがインタ符号化されたマクロブロックである場合（ブロック４０４から「いいえ」の分岐）、次にブロック４０８で、ＧＰＵ２０８は、マクロブロックに関連する動きベクトルがゼロに等しいか否かを判定する。動きベクトルがゼロの値を有する場合（ブロック４０８から「はい」の分岐）、次にブロック４１０で、バッファリングされた基準データの中の対応するマクロブロックが目標テクスチャにコピーされる。
【００４５】
別の実施形態では、ゼロ値の動きベクトルを有するマクロブロックに関する動き補償処理は、非ゼロの動きベクトルを有するマクロブロックに関して動き補償処理が実行されるのと、同一の形で実行されることが可能である。しかし、説明するインプリメンテーションでは、処理を単純化するため、ゼロの動きベクトルを有するマクロブロックは、非ゼロの動きベクトルを有するマクロブロックと異なる形で処理される。
【００４６】
処理されるべきマクロブロックが、非ゼロの動きベクトルを有するインタ符号化されたマクロブロックである場合（ブロック４０８から「いいえ」の分岐）、次にブロック４１２で、ＧＰＵ２０８は、動きベクトルが、ピクチャ領域の外をポイントするか否かを判定する。動きベクトルが、ピクチャ領域の外をポイントする場合（ブロック４１２から「はい」の分岐）、次にブロック４１４で、ＧＰＵ２０８が、黙示の埋め込み（implicit padding）を実行する。
【００４７】
ブロック４１４で、ＧＰＵ２０８が、ピクチャ領域の外をポイントする動きベクトルを扱う埋め込みプロセスを実行する。例えば、目標位置（０，０）におけるマクロブロックに関連する動きベクトルが、（−３，−４）であった場合、基準マクロブロックは、ピクチャ領域の外である位置（−３，−４）にある。対応する基準データが、ピクチャ領域内に存在することを確実にするため、通常、幅１６ピクセルの埋め込みバンドが、基準イメージの各側に加えられる。説明するインプリメンテーションでは、埋め込みは、ＧＰＵにおいてテクスチャのレンダ（render）状態およびテクスチャアドレスモードを構成して、ＤｉｒｅｃｔＸが、埋め込みを自動的に実行するようにすることにより、黙示的に実行される（ブロック４１４で）。
【００４８】
別の実施形態では、埋め込みは、レンダリングパス（rendering pass）をベクトルデータ初期設定（ブロック４０２）の一環として使用して、明示的に実行される。つまり、基準フレームの４つの境界が、動き補償処理が実行される前に、レンダリングパスを使用して、明示的に埋め込まれる。頂点シェーダ２１２が、追加された境界ピクセルに同一のテクスチャアドレスを割り当てるようにプログラミングされる。頂点のテクスチャアドレスは、ピクセルシェーダによって、ピクセル値をサンプリングするのに使用されるため、同一のテクスチャアドレスにより、対応する基準ピクセル値が、所望の境界ピクセル値に正しく設定される。
【００４９】
動き補償が実行されるべき精度に依存して、基準データを、ブロック４２０で、バイリニア（bi-linear）フィルタを使用して内挿（interpolate）して１／２ペルの精度を提供すること、またはブロック４２２で、バイキュービック（bi-cubic）フィルタを使用して内挿して１／４ペルの精度を提供することができる。１ペルより下の（sub-pel）動き補償精度を実現することについて、以下にさらに詳細に説明する。整数ペル精度は、図４に、ブロック４１４からブロック４２０までの矢印で表す、追加のフィルタリングを要さない。
【００５０】
ブロック４２０で、処理されるべきマクロブロックに関連する動きベクトルが、バッファリングされた基準データの中の対応するマクロブロックに適用され、動き補償された基準データが、目標テクスチャに書き込まれる。
【００５１】
典型的な実施形態では、条件付き演算は、ＧＰＵ２０８において計算コストが高いため、マクロブロックは、動き補償モードおよび動き補償精度に基づき、パックされ、バッチでＧＰＵ２０８に送られる。例えば、イントラ符号化されたマクロブロック群が一緒にパックされる場合、それらのマクロブロックに関してＧＰＵ２０８によって実行される動き補償処理は、図４のブロック４０２およびブロック４０６に関連して、以上の通り説明することができる。ゼロの動きベクトルを有するインタ符号化されたマクロブロック群が一緒にパックされる場合、それらのマクロブロックに関してＧＰＵ２０８によって実行される動き補償処理は、図４のブロック４０２およびブロック４１０に関連して、以上の通り説明することができる。非ゼロの動きベクトルおよび整数ペル精度を有するインタ符号化されたマクロブロック群が一緒にパックされる場合、それらのマクロブロックに関してＧＰＵ２０８によって実行される動き補償処理は、ブロック４０２、４１２、４１４、および４２０に関連して、以上の通り説明することができる。ブロック４１６は、１／２ペル精度の動き補償のために実行される、さらなる処理を表し、ブロック４１８は、１／４ペル精度の動き補償のために実行される、さらなる処理を表す。
【００５２】
（１ペルより下の動き補償精度を実現すること）
前述した通り、動き補償処理は、整数ペル、１／２ペル、および１／４ペルなどの、様々な精度に関して異なる。動き補償精度は、動きベクトルの精度を基準とする。例えば、動きベクトルは、マクロブロックの動きを最も近いピクセルまで（すなわち、整数ペル精度）最も近い１／２ピクセルまで（すなわち、１／２ペル精度）、または最も近い１／４ピクセルまで（すなわち、１／４ペル精度）記述することができる。動き補償処理計算の複雑度は、精度に応じて変わり、整数ペルが、複雑度の最も低い計算を要し、１／４ペル精度が、複雑度の最も高い計算を要する。典型的な実施形態では、グラフィックス処理ユニットのピクセルシェーダコンポーネント（通常、レンダリングパス当り８つのコードラインに制限される）の処理限度に起因して、動き補償処理は、動き補償精度に応じてバッチ処理される（batched）。
【００５３】
１つのインプリメンテーションでは、１ペルより下の精度は、近隣のピクセル値を合計し、次に、その結果を適切な数で割ることによって達せられる。例えば、４つのピクセル値を合計し、次に、４で割って（例えば、バイリニア内挿フィルタを使用して）、１／２ペル精度をもたらすことができる。説明するインプリメンテーションでは、ピクセルシェーダ２１４は、赤、緑、青、およびアルファに対応する４つの独立した８ビットチャネルを提供する。各チャネルは、８ビットに制限されるため、０から２５５までの範囲を表すことが可能である。説明する実施例では、４つのピクセル値の合計は、２５５より大きい可能性が高く、オーバーフローがもたらされる。そのようなことが生じるのを防止するため、近隣のピクセル値をまず、例えば、各値を４で割ることにより、商と残余（residual）に分解する。次に、商および残余をそれぞれ合計し、割る。次に、結果の商に、その商を割った数（この場合、４）を掛けて、結果の残余の値に加算する。動き補償精度および内挿フィルタに依存して、オーバーフローが無いことを補償するため、１６、３２、または６４で割ることが適切である可能性がある。例えば、バイキュービック内挿フィルタを使用する１／４ペルの動き補償の場合、基準ピクセル値は、１６で分解される。
【００５４】
別の実施形態では、１ペルより下の精度は、近隣のピクセルにそれぞれの重みを掛けて、次に、結果の値を合計することによって獲得される。例えば、４つのピクセル値にそれぞれ、．２５を掛けて、次に、結果の値を合計し、１／２ペル精度がもたらされる。前述した通り、ピクセルシェーダの内部精度は、最大で８ビットに制限され、中間結果が丸められ、丸めの誤差が導入される。しかし、誤差は、将来のフレームに伝播されるため、そのような誤差は、許容できない。正確な結果を確実にするため、説明するインプリメンテーションでは、丸めの誤差は、マージされる。具体的には、商の計算中に導入された丸めの誤差が計算され、残余の計算に伝播される。例えば、基準ピクセル値が、１６に関して分解されるものと想定されたい。最終の値を計算するため、商および残余が計算され、合計される。商に関する丸めの誤差に１６を掛け、残余に関する丸めの誤差に加算する。商に関する丸めの誤差を残余に関する計算にマージすることにより、中間計算からの丸めの誤差が導入されないことが確実になる。
【００５５】
さらに別の実施形態では、予め計算された中間結果を格納するルックアップテーブルが生成される。内挿係数（interpolation coefficients）は、バイキュービックフィルタの内挿係数のように、非常に不規則である可能性がある。そのような不規則な内挿係数により、ＧＰＵ２０８によって複雑な演算が実行されることになる。ルックアップテーブルの使用は、特に内挿係数が不規則である場合、事前計算、並びに少なくとも一部の中間結果の格納を可能にすることにより、システム効率を高めることができる。ルックアップテーブルにＧＰＵ２０８がアクセスできることを確実にするため、ルックアップテーブルは、２の累乗に等しいサイズ（size equal to a power of two）の攪拌された（swizzled）テクスチャとして実装することができる。
【００５６】
（典型的なイメージ再構成）
図５は、ＧＰＵ２０８によって実行されることが可能な典型的なイメージ再構成方法３１８を示す。
【００５７】
ブロック５０２で、ＧＰＵ２０８が、ＰフレームまたはＢフレームなどの予測フレームに関連する差分データを受け取る。前述した通り、典型的な実施形態では、利用可能な帯域幅を活用するため、差分データの２つ以上のマクロブロックが、ＣＰＵ２０６からＧＰＵ２０８に伝送するために一緒にパックされる。
【００５８】
ブロック５０４で、ＧＰＵ２０８は、差分データの受け取られたマクロブロック群をアンパックする。マクロブロック群は、パックされたマクロブロック群の元の順序を保つような形でアンパックされる。
【００５９】
ブロック５０６で、復号化されたフレームデータが、対応する動き補償された基準データに加えられて、フレームに関連する再構成されたイメージが生成される。
【００６０】
説明するインプリメンテーションでは、イメージの各ピクセルは、８ビットの符号なしの数で表されることが可能であり、したがって、０から２５５までの値を有する。差分データは、−２５５から２５５までの範囲を有する。したがって、差分データを表すのに９ビットが必要とされる。受け取られた差分データを対応する基準データに加えるイメージ再構成処理が実行されて、０から２５５までの値を有するピクセル群を有する予測イメージがもたらされる。
【００６１】
説明するインプリメンテーションでは、ピクセルシェーダ２１４が、赤、緑、青、およびアルファに対応する、４つの独立した８ビットチャネルを提供する。各チャネルは、８ビットに制限されるため、各チャネルは、０から２５５までの範囲を表すことが可能である。ピクセルシェーダは、いずれのレンダリングパスにおいても、４つまでのテクスチャしかサポートすることができず、算術命令数は、８つを超えることができない。前述したピクセルシェーダの限界からして、予測イメージ再構成は、簡単ではない。
【００６２】
説明するインプリメンテーションでは、９ビットの符号付き差分データは、２つの８ビットチャネルを使用して格納することができる。１つのチャネル（例えば、アルファチャネル）は、差分データに関連する符号を保持するのに使用され、別のチャネルは、差分データ値を保持するのに使用される。各ピクセルに関して、値は、基準データに足されることと、基準データから引かれることの両方が行われ、次に、条件付き演算が実行されて、アルファチャネルの中に格納された符号を調べることにより、適切な結果が選択される。
【００６３】
（典型的なＧＰＵ最適化）
ビデオビットストリームの復号化を加速するようにＧＰＵ２０８によって実行される処理は、多くの形で最適化することができる。データマージ、意図的な（deliberate）ＵＶデータ配置、およびデータパーティション分割が、実施することができる処理最適化の３つの例である。
【００６４】
データマージを使用して、頂点シェーダ２１２にかかる負荷を軽減することができる。ピクセルシェーダ２１４は、データをピクセルごとに処理するため、特定のフレームに関してピクセルシェーダ２１４にかかる負荷は、レンダリングされるべきイメージのサイズによって算出することができる。これに対して、頂点シェーダ２１２は、データを頂点ごとに処理する。したがって、特定のフレームに関して頂点シェーダ２１２にかかる負荷は、その所与のフレームに関して処理されるべきデータブロックの数に正比例する。例えば、２０のマクロブロックを有するフレームに関して頂点シェーダ２１２にかかる負荷は、１０のマクロブロックを有するフレームに関する場合の負荷の２倍である。
【００６５】
１つのインプリメンテーションでは、頂点シェーダ処理負荷を軽減するため、等しい動きベクトルを有する近隣のマクロブロック群を一緒にマージして、処理されるべき、より大きいデータブロックが形成される。同様に、近隣のイントラ符号化されたマクロブロック（動きベクトルを全く有さない）も一緒にマージして、１つのデータブロックとして処理することができる。
【００６６】
意図的なＵＶ配置は、イメージに関連するデータを格納するのに要求されるメモリを最小限に抑えるように実施することができる。多くのパーソナルコンピュータディスプレイカードは、テクスチャサイズが、２の累乗に等しいことを要求する。例えば、３２０×２４０のイメージは、５１２×５１２のテクスチャを要求する。テクスチャ上にＹイメージ成分、Ｕイメージ成分、およびＶイメージ成分を配置する際に、テクスチャサイズ制約を考慮することにより、必要とされる最小のテクスチャを使用することができ、イメージに関するメモリフットプリント（footprint）が縮小される可能性がある。
【００６７】
図６は、要求されるメモリを最小限に抑えるように、目標テクスチャ上にＹイメージ成分、Ｕイメージ成分、およびＶイメージ成分を配置することを示す。典型的な３２０×２４０のイメージは、３２０×２４０のＹ成分６０２、１６０×１２０のＵ成分６０４、および１６０×１２０のＶ成分６０６から成る。各イメージ成分に埋め込みが行われた場合（図４のブロック４１４に関連して前述した）、埋め込み済みのＹ成分６０８は、３８４×３０４であり、埋め込み済みのＵ成分６１０は、１９２×１５２であり、埋め込み済みのＶ成分６１２は、１９２×１５２である。
【００６８】
Ｕ成分およびＶ成分が、目標テクスチャ６１４上でＹ成分６０８の横に配置される場合、目標テクスチャ６１４は、少なくとも１０２４×５１２であることが要求される。しかし、Ｕ成分およびＶ成分が、目標テクスチャ６１４上でＹ成分６０８の下に配置される場合、目標テクスチャ６１４は、少なくとも５１２×５１２であることしか要求されず、イメージを格納するのに要求されるメモリの大幅な縮小がもたらされる。したがって、好ましいインプリメンテーションでは、Ｕイメージ成分およびＶイメージ成分が、目標テクスチャ上に配置される際、イメージを格納するのに要求されるメモリの量を最小限に抑えるように、目標サイズ制約が考慮される。
【００６９】
データパーティション分割は、ＧＰＵ２０８のパフォーマンスを向上させるのに使用することができる別の最適化である。グラフィックスプロセッサを含む多くのシステムでは、ＧＰＵが直接にアクセスすることができるビデオメモリは、通常、限られる。したがって、大きいイメージに関連するデータのサイズが、利用可能なビデオメモリストレージを超える可能性があることは予見できる。また、アクセラレーテッドグラフィックスポート（accelerated graphics port）（ＡＧＰ）メモリ帯域幅と通常、呼ばれるＧＰＵ２０８に関連するメモリ帯域幅も、ＧＰＵが処理することができるデータの量を制限する可能性がある。ＧＰＵ２０８が、ＡＧＰメモリ帯域幅を超えるデータの読み取り、または書き込みを行おうと試みた場合、読み込まれる、または書き込まれるデータが大き過ぎるために、ＧＰＵ処理は、ストールする。典型的な実施形態では、大きいイメージに関連するデータは、ＧＰＵ２０８によってそれぞれが別々に処理されることが可能な、より小さいデータセットにパーティション分割されることが可能である。
【００７０】
図７は、４つのより小さい、重なり合うデータセット７０２（１）、７０２（２）、７０２（３）、および７０２（４）にパーティション分割された、典型的な大きいイメージ７０２を示す。図示した実施例では、大きいイメージ７０２は、元のイメージのサイズの１／４に、各サブピクチャに関連する動きベクトルが、ピクチャ領域の外をポイントしないことを確実にするガードバンド（guard band）を加えたサイズにそれぞれが等しいサイズの、４つのサブピクチャに分割される。例えば、サブピクチャ７０２（１）は、サブピクチャ７０２（２）およびサブピクチャ７０２（３）と重なり合う。イメージデータをより小さいサブセットにパーティション分割することにより、ＧＰＵ２０８を使用して、ＧＰＵがアクセスできるビデオメモリが限られている場合でも、ビデオ復号化プロセスを加速することができる。
【００７１】
（結論）
本システムおよび本方法を、構造上の特徴および／または方法上のステップに特有の言い回しで説明してきたが、添付の特許請求の範囲で定義する本発明は、説明した特定の特徴またはステップに必ずしも限定されないことを理解されたい。むしろ、特定の特徴およびステップは、請求する発明を実施する好ましい形態として開示している。
【図面の簡単な説明】
【００７２】
【図１】−先行技術  典型的なビデオ復号化プロセスを示す流れ図である。
【図２】加速されたビデオ復号化システムの典型的なアーキテクチャを示す図である。
【図３】グラフィックス処理ユニットを利用して、ビデオ復号化を加速するための典型的な方法を示す図である。
【図４】グラフィックス処理ユニットによって実行される典型的な動き補償処理を示す図である。
【図５】グラフィックス処理ユニットによって実行される典型的なイメージ再構成方法を示す図である。
【図６】イメージメモリフットプリントを最小限に抑える典型的なＵＶコンポーネント配置を示す図である。
【図７】限られたメモリリソース、および限られたメモリ帯域幅を有するＧＰＵを使用して、ビデオ復号化加速を可能にする典型的なデータパーティション分割を示す図である。
【図１】
2007525049.tif 000003
【図２】
2007525049.tif 000004
【図３】
2007525049.tif 000005
【図４】
2007525049.tif 000006
【図５】
2007525049.tif 000007
【図６】
2007525049.tif 000008
【図７】
2007525049.tif 000009
【国際調査報告】
2007525049.tif 000010