(57)【特許請求の範囲】
【請求項１】
ホストプロセッサと、
前記ホストプロセッサに結合されると共に、ビデオデータを処理する複数のコマンドを含むプッシュバッファを生成するドライバを含むシステムメモリと、
ビデオデータを格納するように構成された第１のフレームバッファに結合されている第１のメディア処理装置であり、前記ホストプロセッサを介して前記複数のコマンドを受け取り、前記複数のコマンドに基づいて前記ビデオデータの第１の部分を処理するように構成されている前記第１のメディア処理装置と、
前記ビデオデータのコピーを格納するように構成された第２のフレームバッファに結合されている第２のメディア処理装置であり、前記ホストプロセッサを介して前記複数のコマンドを受け取り、前記複数のコマンドに基づいて、前記ビデオデータの第２の部分を処理するように構成されている前記第２のメディア処理装置と、
を備え、
前記第１のメディア処理装置が、スケーラブルバスを介して、前記第２のメディア処理装置に結合されており、
前記第２のメディア処理装置によって処理された前記ビデオデータの前記第２の部分は、前記スケーラブルバスを介して前記第１のメディア処理装置に送られ、前記第１のメディア処理装置によって処理された前記ビデオデータの前記第１の部分と組み合わされて、処理済みビデオフレームを生成する、  
ビデオデータを処理するシステム。
【請求項２】
前記第１のメディア処理装置はマスタメディア処理装置であり、前記第２のメディア処理装置はスレーブメディア処理装置である請求項１に記載のシステム。
【請求項３】
前記複数のコマンドは、前記第１のフレームバッファに格納されている前記ビデオデータを前記第２のフレームバッファにコピーするコマンドを含む請求項１に記載のシステム。
【請求項４】
前記複数のコマンドは、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第１のサブデバイスマスク設定（ＳＳＤＭ）コマンドと、前記第１のメディア処理装置に、前記第１のフレームバッファに格納されている前記ビデオデータを前記第２のフレームバッファにコピーさせるコピーコマンドと、前記第１のメディア処理装置にセマフォを解除させるセマフォ解除コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第２のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドと、前記第２のメディア処理装置に、前記第１のメディア処理装置によって解除された前記セマフォを獲得させるセマフォ獲得コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置と前記第２のメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドとを含む請求項３に記載のシステム。
【請求項５】
前記第１のメディア処理装置と前記第２のメディア処理装置は、前記第２のメディア処理装置が、前記第１のメディア処理装置によって解除された前記セマフォを獲得した後で同期される請求項４に記載のシステム。
【請求項６】
前記複数のコマンドは、前記ビデオデータの前記第１の部分と前記ビデオデータの前記第２の部分を定義するコマンドを含む請求項１に記載のシステム。
【請求項７】
前記複数のコマンドは、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第１のＳＳＤＭコマンドと、前記ビデオデータの前記第１の部分を定義する第１のクリップ長方形設定コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第２のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドと、前記ビデオデータの前記第２の部分を定義する第２のクリップ長方形設定コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置と前記第２のメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドとを含む請求項６に記載のシステム。
【請求項８】
前記複数のコマンドは、前記第１のメディア処理装置が前記ビデオデータの前記第１の部分に対して実行し、前記第２のメディア処理装置が前記ビデオデータの前記第２の部分に対して実行する少なくとも１つのビデオ処理コマンドを含む請求項７に記載のシステム。
【請求項９】
前記複数のコマンドは、前記ビデオデータが処理された後で、前記第１のメディア処理装置と前記第２のメディア処理装置の同期をとるコマンドを含む請求項１に記載のシステム。
【請求項１０】
前記複数のコマンドは、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第１のＳＳＤＭコマンドと、前記第１のメディア処理装置に、前記第２のメディア処理装置によって解除されたセマフォを獲得させるセマフォ獲得コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第２のメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドと、前記第２のメディア処理装置に前記セマフォを解除させるセマフォ解除コマンドと、前記第１のメディア処理装置と前記第２のメディア処理装置を、前記第１のメディア処理装置と前記第２のメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドとを含む請求項９に記載のシステム。
【請求項１１】
前記第１のメディア処理装置と前記第２のメディア処理装置は、前記第１のメディア処理装置が、前記第２のメディア処理装置によって解除された前記セマフォを獲得した後で同期される請求項１０に記載のシステム。
【請求項１２】
前記第１のフレームバッファと前記第２のフレームバッファのそれぞれは、前記ビデオデータの前記第２の部分が前記スケーラブルバスを介して前記第１のメディア処理装置に送られる前に、別のフレームバッファと交換される請求項１に記載のシステム。
【請求項１３】
前記第１のメディア処理装置と前記第２のメディア処理装置のそれぞれはグラフィックス処理装置である請求項１に記載のシステム。
【請求項１４】
複数のメディア処理装置を使ってビデオデータを処理する方法であって、
マスタメディア処理装置に結合されている第１のフレームバッファに格納されているビデオデータを、スレーブメディア処理装置に結合されている第２のフレームバッファにコピーするステップと、
前記ビデオデータの第１の部分と第２の部分を定義するステップと、
前記第１のフレームバッファに格納されている前記ビデオデータの前記第１の部分に対して少なくとも１つのビデオ処理コマンドを実行するステップと、
前記第２のフレームバッファに格納されている前記ビデオデータの前記第２の部分に対して少なくとも１つのビデオ処理コマンドを実行するステップと、
前記第２のフレームバッファで処理された前記ビデオデータの前記第２の部分を、スケーラブルバスを介して、前記マスタメディア処理装置に送るステップとを含む方法。
【請求項１５】
前記ビデオデータの前記第２の部分を送る前に前記マスタメディア処理装置と前記スレーブメディア処理装置の同期をとるステップをさらに含む請求項１４に記載の方法。
【請求項１６】
同期をとる前記ステップは、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置だけがプッシュバッファ内の後続のコマンドを実行するように構成する第１のＳＳＤＭコマンドを実行するステップと、前記マスタメディア処理装置に、前記スレーブメディア処理装置によって解除されたセマフォを獲得させるセマフォ獲得コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記スレーブメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドを実行するステップと、前記スレーブメディア処理装置に前記セマフォを解除させるセマフォ解除コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置と前記スレーブメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドを実行するステップとを含む請求項１５に記載の方法。
【請求項１７】
前記ビデオデータの前記第２の部分を送る前に前記第１のフレームバッファと前記第２のフレームバッファのそれぞれを別のフレームバッファと交換するステップをさらに含む請求項１４に記載の方法。
【請求項１８】
コピーする前記ステップは、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置だけがプッシュバッファ内の後続のコマンドを実行するように構成する第１のサブデバイスマスク設定（ＳＳＤＭ）コマンドを実行するステップと、前記マスタメディア処理装置に、前記第１のフレームバッファに格納されている前記ビデオデータを前記第２のフレームバッファにコピーさせるコピーコマンドを実行するステップと、前記マスタメディア処理装置にセマフォを解除させるセマフォ解除コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記スレーブメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドを実行するステップと、前記スレーブメディア処理装置に、前記マスタメディア処理装置によって解除された前記セマフォを獲得させるセマフォ獲得コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置と前記スレーブメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドを実行するステップとを含む請求項１４に記載の方法。
【請求項１９】
第１の部分と第２の部分を定義する前記ステップは、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置だけがプッシュバッファ内の後続のコマンドを実行するように構成する第１のＳＳＤＭコマンドを実行するステップと、前記ビデオデータの前記第１の部分を定義する第１のクリップ長方形設定コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記スレーブメディア処理装置だけが前記プッシュバッファ内の後続のコマンドを実行するように構成する第２のＳＳＤＭコマンドを実行するステップと、前記ビデオデータの前記第２の部分を定義する第２のクリップ長方形設定コマンドを実行するステップと、前記マスタメディア処理装置と前記スレーブメディア処理装置を、前記マスタメディア処理装置と前記スレーブメディア処理装置の両方が前記プッシュバッファ内の後続のコマンドを実行するように構成する第３のＳＳＤＭコマンドを実行するステップとを含む請求項１４に記載の方法。
【請求項２０】
前記第１のメディア処理装置と前記第２のメディア処理装置のそれぞれはグラフィックス処理装置である請求項１４に記載の方法。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明の実施形態は一般にビデオ処理に関し、より詳細には、複数のグラフィックス処理装置を用いたビデオ処理に関する。
【関連技術の説明】
【０００２】
[0002]ビデオデータは、多くの場合、表示される前に処理されなければならない。ビデオデータに適用され得るビデオ処理手順には様々なものがある。例えば、プログレッシブディスプレイ上にディジタルビデオディスク（ＤＶＤ）からデータを表示することを考える。ＤＶＤ上の内容がインターレース方式で符号化されている場合、ビデオデータは、プログレッシブディスプレイ上に表示する前に、インターレース解除される必要がある。また、ＤＶＤは、一般に、サブタイトル情報を含む。ユーザがサブタイトル情報を表示させようとする場合、そのサブタイトルテキストがビデオデータから抽出され、次いで、ビデオ映像に合成される必要がある。インターレース解除およびサブタイトル生成は、ビデオ処理手順の２つの例にすぎない。ビデオデータに適用され得るビデオ処理手順には、エッジ強調、映像スケーリング、色空間変換など、他にも多くものがある。さらに、ビデオ処理手順は、一般に、相互排他的ではない。例えば、ユーザがＤＶＤからプログレッシブディスプレイ上にビデオデータを表示し、同時にサブタイトルも表示しようとする場合、そのビデオデータにインターレース解除とサブタイトル生成両方の手順が適用されてもよい。しかしながら、各手順は、同じ基本のビデオデータセットに対して実行されるため、異なるビデオ処理手順は、通常、並列的にではなく、連続してビデオデータに適用される。
【０００３】
[0003]ビデオ画像は、各フレームが２つのビデオフィールドからなるビデオフレームのシーケンスで構成されている。フレームビデオフレームを表示するのに使用される典型的なフレーム率は、毎秒３０フレーム（３０Ｈｚ）である。したがって、１フレームのビデオデータのビデオ処理手順は、１フレームのビデオデータを表示するのに必要とされる時間（約３３ミリ秒）より短時間で実行されなければならない。１フレームのビデオデータを処理するのに必要とされる時間がフレームのビデオデータを表示するのに必要とされる時間より長い場合、処理済みのビデオデータを表示することができない。そうではなく、現在のビデオデータの代わりに前のビデオデータが示されることがよくある。この現象を、一般に、ビデオフレームを「ドロップする」といい、非常に望ましくないものである。というのは、この結果として、肉眼でそれと分かるほど動きに滑らかさがなくなり、ビデオ品質の劣化がもたらされるからである。
【０００４】
[0004]グラフィックス処理装置（ＧＰＵ）が、ビデオ処理システム内でビデオ処理機能を提供するように構成されてもよい。例えば、ＧＰＵは、３次元（３Ｄ）画素シェーダを使ってビデオデータのエッジ強調を提供するように構成されてもよい。同様に、ＧＰＵは、他のビデオ処理手順を実施するように構成されることも可能である。各処理タスクは、完了するのに有限な時間量を必要とする。前述のように、フレーム率は各フレームを処理するのに利用可能な時間量を制限し、ビデオ処理手順は、一般に、連続して実施されるため、単一のＧＰＵ上で実行され得るビデオ処理手順の数および複雑度が制限される。この問題を悪化させるのは、高精細度ビデオ画像が、標準精細度の画像の最大で６倍多い画素を処理する必要があることである。画素数が増大すると、各処理手順を実行するのに必要とされる時間量が増大し、それによって、単一のＧＰＵが、ビデオフレーム時間予算を超過せずに１フレームのビデオデータに適用することのできるビデオ処理手順数がさらに制限され、よって、ビデオフレームをドロップする可能性が増大する。
【０００５】
[0005]前述のように、当分野で求められているのは、高精細度ビデオデータを含むビデオデータに対して、ドロップフレームの発生率を上げずにより多くの処理手順が実施され得るように、ビデオ処理システムのビデオ処理スループットを増大させる方法である。
【発明の概要】
【０００６】
[0006]本発明の一実施形態では、ビデオデータを処理するシステムを示す。このシステムは、ホストプロセッサと、第１のフレームバッファに結合されている第１のメディア処理装置と、第２のフレームバッファに結合されている第２のメディア処理装置とを含む。第１のフレームバッファは、ビデオデータを格納するように構成されており、第１のメディア処理装置は、そのビデオデータの第１の部分を処理するように構成されている。第２のフレームバッファは、そのビデオデータのコピーを格納するように構成されており、第２のメディア処理装置は、そのビデオデータの第２の部分を処理するように構成されている。２つのメディア処理装置は、スケーラブルバスを介して相互に結合されている。スケーラブルバスは、第２のメディア処理装置によって処理されたビデオデータの第２の部分を第１のメディア処理装置に搬送し、そこで、そのデータが、第１のメディア処理装置によって処理されたビデオデータの第１の部分と組み合わされて、処理済みビデオフレームが生成される。
【０００７】
[0007]開示のシステムの１つの利点は、それが、従来技術のシングルＧＰＵビデオ処理システムより効率よくビデオデータを処理することのできるマルチメディア処理環境を提供することである。その結果、ビデオフレームを、従来技術のシステムと比べて実質的により短時間で処理することが可能になり、開示のシステムを使って実行されるビデオ処理コマンドの数および複雑度を、従来技術のシステムと比べて実質的に増大させることが可能になる。
【０００８】
[0008]本発明の前述の特徴が詳細に理解されるように、上記で簡単に要約した本発明のより具体的な説明を、実施形態を参照して行い、そのいくつかを添付の図面に示す。しかしながら、添付の図面は、本発明の典型的な実施形態を示すものにすぎず、したがって、本発明の範囲を限定するものとみなすべきではないことに留意すべきであり、本発明は、他の等しく有効な実施形態も認め得るものである。
【詳細な説明】
【０００９】
[0016]特に、本明細書で説明する本発明は、ビデオデータのフレームを処理するためにビデオ処理システムにおいて２つ以上のメディア処理装置が実施されることを可能にするものである。複数のメディア処理装置を使ってビデオフレームを処理することにより、ビデオ処理スループットを増大させることができ、それによって、より多くのビデオ処理手順、および／またはより複雑な手順を、ドロップフレームの発生率を増大させずにビデオデータに適用することができるようになる。逆に、同数のビデオ処理手順が複数のメディア処理装置を使ってビデオデータに適用される場合には、ドロップフレームの発生率が減少する。
【００１０】
[0017]図１は、本発明の一実施形態による、複数のメディア処理装置を使ってビデオデータのフレームを処理するときにビデオ処理システムが実施する機能ステップを示す概念図である。これらの機能ステップを任意の順序で実行するように構成されている任意のシステムが本発明の範囲内に含まれることを、当分野の技術者は理解するであろう。特に、本明細書で開示するビデオ処理システムの実施形態では、グラフィックス処理装置をシステム内におけるメディア処理装置として示す。しかしながら、代替の実施形態では、任意の種類のビデオまたはメディアアクセラレータが実施されてもよい。例えば、本明細書で説明するビデオ処理システムは、どんな特定のグラフィックス処理機能も持たない１つまたは複数のビデオ処理エンジンを備える装置を用いて実施することもできる。
【００１１】
[0018]第１の機能ステップはステップ１０２であり、ここでマスタＧＰＵが、復号化されたビデオデータを受け取る。２つのＧＰＵを備えるマルチＧＰＵシステムにおいて、第１のＧＰＵがマスタＧＰＵに指定され、第２のＧＰＵがスレーブＧＰＵに指定される。ビデオデータは、チューナ、復号器、記憶装置などのソースから受け取られてもよい。ビデオデータは、通常、一度に１フレームずつ受け取られ、マスタＧＰＵと関連付けられたフレームバッファに格納される。よく知られているように、フレームバッファは、ＧＰＵメモリの１区画である。ビデオデータがマスタＧＰＵのフレームバッファに受け取られ得る方法には、直接メモリアクセス（ＤＭＡ）によるもの、またはＣＰＵがビデオデータをフレームバッファに直接書き込むことによるものなど、多くの方法がある。
【００１２】
[0019]ステップ１０６で、スレーブＧＰＵのフレームバッファが、マスタＧＰＵのフレームバッファと同期され、マスタＧＰＵとスレーブＧＰＵが、それぞれのフレームバッファ内のビデオデータを同時に処理することができるようになる。ステップ１０７で、マスタＧＰＵとスレーブＧＰＵのフレームバッファが第１と第２の部分に分割される。次いで、ＧＰＵのそれぞれが、動作効率を上げるために、それぞれのフレームバッファの特定の部分だけにあるビデオデータを処理するように構成される。例えば、第１の部分が各フレームバッファの上側部分であり、第２の部分が各フレームバッファの下側部分である場合、マスタＧＰＵは、マスタフレームバッファの第１の部分内にあるビデオデータだけを処理するように構成されてもよく、スレーブＧＰＵは、スレーブフレームバッファの第２の部分内にあるビデオデータだけを処理するように構成されてもよい。ステップ１０８で、ＧＰＵは、逆テレシネ処理を提供する。多くの場合、ビデオデータは、毎秒２４フレームのフレーム率を有するフィルムから発せられる。ビデオデータが毎秒３０フレームのフレーム率で表示されるべきである場合には、より低速のフレーム率のフィルム画像がより高速のフレーム率のビデオ画像として表示され得るように、一般に「３：２プルダウン」と呼ばれる処理がフィルムデータに適用される。この処理は、特に、表示装置が３：２プルダウンプロセスを必要としない場合には、プログレッシブディスプレイの場合と同様に、望ましくない目に見えるアーチファクトを生じることがある。そのような場合、逆テレシネ処理ステップは、ビデオデータを元のフィルムフレーム率に戻す。本明細書でさらに詳細に説明するように、ＧＰＵが（このステップおよび他のステップにおいて）ビデオデータを処理するときに、各ＧＰＵは、そのフレームバッファ内のデータの一部分だけを処理し、それによって、実質的にビデオ処理システムの処理効率を増大させる。
【００１３】
[0020]ステップ１１０で、ＧＰＵは、インターレース解除処理を提供する。インターレース解除は、インターレースビデオデータを、プログレッシブ表示装置上での表示により適したビデオデータに変換するよく知られたプロセスである。インターレース解除機能を実施するのに使用され得る方法には、（一般に「ＢＯＢ」と呼ばれる）垂直補間および（一般に「ＷＥＡＶＥ」と呼ばれる）両フィールドを同時に表示するものなど、多くのよく知られた方法がある。他の、より高度なインターレース解除方式がＧＰＵ上で実施されてもよいことを当分野の技術者は理解するであろう。ステップ１１２で、ＧＰＵは、サブピクチャ処理を提供する。サブピクチャ処理は、通常、ビデオデータにサブタイトルおよびＤＶＤメニューを挿入するのに使用される。サブタイトルおよびＤＶＤ情報は、ビデオデータから抽出され、次いで、ビデオデータの可視部分に合成される。ステップ１１４で、ＧＰＵは、エッジ強調処理を提供する。時として、ビデオデータは、ビデオフレーム内のオブジェクトのエッジを軟調に見せるように処理されていることがある。エッジ強調処理は、一般に、エッジの外観を強めるのに使用される。ステップ１１６で、ＧＰＵは、映像スケーリング処理を提供する。このステップで、ビデオデータは、より大きい、または小さい解像度にスケーリングされてもよい。この手順は、通常、ビデオ表示の解像度が、ビデオデータのソースの解像度と異なるときに実行される。ステップ１１８で、ＧＰＵは、色空間変換処理を提供する。表示装置の色空間要件は、ビデオデータの色空間表現と異なることもある。例えば、ビデオデータは、しばしば、ＹＵＶ色空間で表現される。しかしながら、典型的な表示装置は、ＲＧＢ色空間で動作する。ステップ１２０で、ＧＰＵは、望ましくないＬＣＤ表示特性を補償するためにＬＣＤオーバードライブ処理を提供する。
【００１４】
[0021]ビデオデータが処理された後で、各ＧＰＵフレームバッファ内にある処理済みデータが表示のために組み合わされる。ステップ１２２で、各ＧＰＵが同期される。というのは、各ＧＰＵは、異なる時刻にビデオ処理を完了することがあるからである。本明細書でさらに詳細に説明するように、マスタＧＰＵとスレーブＧＰＵは、セマフォ読取りおよび書込みのプロセスを介して同期される。ステップ１２４で、ソフトウェアドライバが、フレームバッファを交換する。ビデオ処理は、しばしば、ダブルバッファリングと呼ばれるよく知られた技法を用いて実行される。ダブルバッファリングは、２つのフレームバッファを使ってビデオデータを格納し、処理する。ＧＰＵが、第１のフレームバッファを使ってビデオデータの現在のフレームを処理し、その間に前に処理されたビデオデータが第２のフレームバッファから読み取られ、ディスプレイに送られる。第２のフレームバッファの最後の画素がディスプレイに送られた後で、第１のフレームバッファからの処理済みデータが読み取られて表示装置に送られ、その間に、ＧＰＵが、第２のフレームバッファ内のビデオデータの新しいフレームを処理するように、２つのフレームバッファが「交換」される。最後に、ステップ１２６で、ビデオデータがディスプレイ上に表示される。
【００１５】
[0022]これらの機能ステップの態様を、以下で、図４と併せてさらに詳細に説明する。代替の実施形態は、雑音フィルタリング、色強調など、他のビデオ処理ステップを含んでいてもよい。別の実施形態は、いくつかのビデオ処理ステップを省略してもよい。例えば、ビデオデータがＬＣＤディスプレイ上に表示されない場合、ＬＣＤオーバードライブ処理ステップ１２０は、スキップされてもよい。やはり、当分野の技術者は理解するように、ステップ１２４で説明したダブルバッファリングの概念は、２つのバッファではなく３つのバッファが使用されるトリプルバッファリングに拡張されてもよい。トリプルバッファリングは、特に、ビデオ復号化が行われるときに有用である。そのような場合、通常、１つのバッファが復号化に使用され、１つのバッファが後処理に使用され、第３のバッファが表示に使用され、３つすべての機能が同時に実行される。
【００１６】
[0023]図２は、本発明の１つまたは複数の態様を実施するように構成されているコンピュータ装置２００の概念図である。コンピュータ装置２００は、無制限に、中央処理装置（ＣＰＵ）２０２と、システムメモリ２０４と、第１のグラフィックスサブシステム２０８と、第２のグラフィックスサブシステム２１０とを含む。ＣＰＵ２０２は、システムメモリ２０４に結合されており、システムメモリ２０４は、グラフィックスサブシステム２０８、２１０を、所望のビデオ処理機能を提供するように構成することのできるドライバ２０６など、データおよびプログラムを格納するのに使用される。
【００１７】
[0024]第１のグラフィックスサブシステム２０８は、第１のＧＰＵメモリ２１４に結合されている第１のＧＰＵ２１２を含み、第１のＧＰＵメモリ２１４は、ビデオデータなど、ＧＰＵ命令およびデータを格納するように構成されている。前述のように、ビデオデータは、第１のフレームバッファ２１５と第２のフレームバッファ２１６とを含むダブルバッファ化フレームバッファに格納される。考察のためにすぎないが、現在のビデオフレームの一部分が第１のフレームバッファ２１５で処理されており、現在、表示装置に送られているビデオフレームの一部分が第２のフレームバッファ２１６から読み取られているものと仮定する。また、第１のＧＰＵ２１２は、処理済みビデオをディスプレイに送るのに使用されるディジタル／アナログ変換器（ＤＡＣ）２１８も含む。図示のように、第１のＧＰＵ２１２は、マスタＧＰＵに指定されている。通常、マスタＧＰＵ２１２は、処理済みビデオデータを表示する。代替の実施形態では、ビデオデータは、遷移時間最短差動信号（ＴＭＤＳ）インターフェースまたはシリアルディジタルインターフェース（ＳＤＩ）など、第１のＧＰＵ２１２に含まれる別の表示インターフェースを介して送られてもよい。
【００１８】
[0025]第２のグラフィックスサブシステム２１０は、第２のＧＰＵ２２２と第２のＧＰＵメモリ２２４とを含む。一実施形態では、第２のグラフィックスサブシステム２１０は、実質的に、第１のグラフィックスサブシステム２０８に類似のものである。第２のＧＰＵ２２２は、ビデオデータなど、ＧＰＵ命令およびデータを格納するように構成されている第２のＧＰＵメモリ２２４に結合されている。やはり、ビデオデータは、第３のフレームバッファ２２５と第４のフレームバッファ２２６とを含むダブルバッファ化フレームバッファに格納される。考察のためにすぎないが、現在のビデオフレームの一部分が第３のフレームバッファ２２５で処理されており、現在、表示装置に送られているビデオフレームの一部分が第４のフレームバッファ２２６から読み取られているものと仮定する。図示のように、第２のＧＰＵ２２２は、スレーブＧＰＵに指定されている。スレーブＧＰＵ２２２は、通常、ディスプレイに処理済みビデオデータを送るのに使用されないため、スレーブＧＰＵ２２２内のＤＡＣ２２０は、接続されないままでもよい。
【００１９】
[0026]第１のＧＰＵ２１２は、ＧＰＵバス２５０によって第２のＧＰＵ２２２に結合されている。ＧＰＵバス２５０は、第２のＧＰＵ２２２によって、第１のＧＰＵ２１２に処理済みビデオデータを送るのに使用されるスケーラブルバスである。例えば、一実施形態では、ＧＰＵバス２５０は、ＮＶＩＤＩＡ  ＳＬＩ（商標）マルチＧＰＵ技術を使って実施されてもよい。さらに、本明細書で前述したように、コンピュータ装置２００は、任意の種類のビデオまたはメディアアクセラレータを使って実施されてもよい。したがって、代替の実施形態では、ＧＰＵバス２５０は、メディア処理装置間で処理済みビデオデータを送る任意の種類の技術的に実行可能なスケーラブルバスとしてもよい。
【００２０】
[0027]動作に際して、ドライバ２０６は、「プッシュバッファ」と呼ばれるコマンドのストリームを生成する。実行されるとき、プッシュバッファ内のコマンドは、第１のＧＰＵ２１２と第２のＧＰＵ２２２のフレームバッファに格納されているビデオデータのマルチＧＰＵ処理を可能にする。第１に、ビデオデータが第１のフレームバッファ２１５から第３のフレームバッファ２２５にコピーされる。第２に、前述のように、フレームバッファが、第１と第２の部分とに分割され（これが、事実上、ビデオデータを第１と第２の部分に分割する）、第１のＧＰＵ２１２が、ビデオデータの第１の部分（すなわち、第１のフレームバッファ２１５の第１の部分にあるビデオデータ）を処理するように構成され、第２のＧＰＵ２２２が、ビデオデータの第２の部分（すなわち、第３のフレームバッファ２２５の第２の部分にあるビデオデータ）だけを処理するように構成される。第３に、第１のフレームバッファ２１５の第１の部分と第３のフレームバッファ２２５の第２の部分にあるビデオデータが処理される。第４に、ビデオデータが処理された後で、第１のＧＰＵ２１２と第２のＧＰＵ２２２が同期され、次いで、第１のフレームバッファ２１５および第３のフレームバッファ２２５が、それぞれ、第２のフレームバッファ２１６および第４のフレームバッファ２２６と交換される。第５に、処理済みビデオデータが、第３のフレームバッファ２２５の第２の部分から第１のＧＰＵ２１２に送られる。このデータが、第１のフレームバッファ２１５の第１の部分からの処理済みビデオデータと組み合わされて、処理済みビデオフレームが生成され、次いで、表示のために送られる。これらの動作を、以下で、図４と併せてより詳細に説明する。
【００２１】
[0028]代替の実施形態では、コンピュータ装置２００において２つを上回るグラフィックスサブシステムが使用されてもよい。そのような構成には、単一のマスタＧＰＵと２つ以上のスレーブＧＰＵがある。スレーブＧＰＵは、ＧＰＵバス２５０を介してマスタＧＰＵに結合されている。スレーブＧＰＵによって処理されたビデオデータは、ＧＰＵバス２５０を介してマスタＧＰＵに送られる。マスタＧＰＵは、組み合わされた処理済みビデオデータを表示装置に送る。
【００２２】
[0029]図３は、本発明の一実施形態による、図２のコンピュータ装置２００のより詳細な図である。特に、マスタＧＰＵ２１２、スレーブＧＰＵ２２２、ＧＰＵメモリ２１４、２２４についてより詳細に説明する。図示のように、マスタＧＰＵ２１２は、無制限に、ビデオプロセッサ３１０と、３次元（３Ｄ）プロセッサ３１４と、２次元（２Ｄ）プロセッサ３１８と、ホストインターフェース３０２と、メモリインターフェース３３０と、ＧＰＵバスインターフェース３４０とを含む。ホストインターフェース３０２は、ビデオプロセッサ３１０と、３Ｄプロセッサ３１４と、２Ｄプロセッサ３１８とに結合されている。ホストインターフェース３０２は、ＣＰＵ２０２（およびドライバ２０６）からプッシュバッファコマンドを受け取り、プッシュバッファコマンドに従ってビデオデータを処理するように、ビデオプロセッサ３１０、３Ｄプロセッサ３１４および２Ｄプロセッサ３１８を構成する。ビデオプロセッサ３１０、３Ｄプロセッサ３１４および２Ｄプロセッサ３１８は、さらに、メモリインターフェース３３０に結合されている。メモリインターフェース３３０は、ビデオプロセッサ３１０、３Ｄプロセッサ３１４および２Ｄプロセッサ３１８が、ＧＰＵメモリ２１４に格納されているビデオデータにアクセスすることを可能にする。
【００２３】
[0030]同様に、スレーブＧＰＵ２２０は、無制限に、ビデオプロセッサ３１２と、３Ｄプロセッサ３１６と、２Ｄプロセッサ３２０と、ホストインターフェース３０４と、メモリインターフェース３３２と、ＧＰＵバスインターフェース３４２とを含む。ホストインターフェース３０４は、やはり、ビデオプロセッサ３１２と、３Ｄプロセッサ３１６と、２Ｄプロセッサ３２０とに結合されている。ホストインターフェース３０４は、ＣＰＵ２０２（およびドライバ２０６）からプッシュバッファコマンドを受け取り、プッシュバッファコマンドに従ってビデオデータを処理するようにビデオプロセッサ３１２、３Ｄプロセッサ３１６および２Ｄプロセッサ３２０を構成する。ビデオプロセッサ３１２、３Ｄプロセッサ３１６および２Ｄプロセッサ３２０は、さらに、メモリインターフェース３３２に結合されている。メモリインターフェース３３２は、ビデオプロセッサ３１２、３Ｄプロセッサ３１６および２Ｄプロセッサ３２０が、ＧＰＵメモリ２２４に格納されているビデオデータにアクセスすることを可能にする。
【００２４】
[0031]マスタＧＰＵ２１２およびスレーブＧＰＵ２２０内で処理装置によってビデオ処理機能が提供され得る、多くのよく知られたやり方がある。例えば、ビデオプロセッサ３１０、３１２は、映像スケーリングなどのビデオ処理機能を提供するように構成されてもよい。３Ｄプロセッサ３１４、３１６は、内蔵される画素シェーダを使って、エッジ強調などのビデオ処理機能を提供するように構成されていてもよい。２Ｄプロセッサ３１８、３２０は、マスタＧＰＵメモリ２１４からスレーブＧＰＵメモリ２２４にビデオデータをコピーするメモリブリットなどのビデオ処理機能を提供するように構成されていてもよい。メモリブリットは、１ブロックのメモリの内容を、ある場所から別の場所にコピーする一般的な２Ｄプロセスである。
【００２５】
[0032]やはり図示するように、ＧＰＵメモリ２１４は、第１のフレームバッファ２１５と第２のフレームバッファ２１６とを含み、ＧＰＵメモリ２２４は、第３のフレームバッファ２２５と第４のフレームバッファ２２６とを含む。やはり、考察のためにすぎないが、マスタＧＰＵ２１２、２２０が、第１、第３のフレームバッファ２１５、２２５にあるビデオデータを処理しており、その間、以前に処理済みのビデオデータが、第２、第４のフレームバッファ２１６、２２６にあるものと仮定する。図１で前述したように、復号化されたビデオが、マスタＧＰＵ２１２の第１のフレームバッファ２１５に書き込まれるため、ドライバ２０６は、マスタＧＰＵ２１２を、第１のフレームバッファ２１５の内容を第３のフレームバッファ２２５にコピーするように構成する。また、ドライバ２０６は、第１のフレームバッファ２１５と第３のフレームバッファ２２５のビデオデータが同時の処理されるように、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとるコマンドも提供する。ビデオデータがコピーされ、ＧＰＵが同期された後で、ドライバ２０６は、フレームバッファ２１５、２２５内のビデオデータを、それぞれ、第１の部分と第２の部分とに分割する。マスタＧＰＵ２１２とスレーブＧＰＵ２２２のそれぞれは、個々のフレームバッファ内のビデオデータの一部分を処理する。例えば、ドライバ２０６は、マスタＧＰＵ２１２を、第１のフレームバッファ２１５の第１の部分３５０にあるビデオデータを処理するように構成してもよい。同様に、ドライバ２０６は、スレーブＧＰＵ２２０を、第３のフレームバッファ２２５の第２の部分３５４にあるビデオデータを処理するように構成してもよい。現在のビデオフレームが処理された後で、第１のフレームバッファ２１５が第２のフレームバッファ２１６と交換され、第３のフレームバッファ２２５が第４のフレームバッファ２２６と交換される。よって、次のビデオフレームを処理するときに、マスタＧＰＵ２１２は、第２のフレームバッファ２１６の第１の部分３５２にあるビデオデータを処理し、スレーブＧＰＵ２２２は、第４のフレームバッファ２２６の第２の部分３５６にあるビデオデータを処理する。各ＧＰＵが、ビデオフレームを構成するビデオデータの一部分だけを処理するため、処理効率が向上する。
【００２６】
[0033]マスタＧＰＵ２１２とスレーブＧＰＵ２２２がビデオデータに対するビデオ処理手順を完了した後、フレームバッファが交換される前に、ドライバ２０６は、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとる。ＧＰＵ２１２とＧＰＵ２２２の同期をとることによって、ドライバ２０６は、フレームバッファを交換する前に、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の両方がそれぞれのビデオデータの処理を完了しているようにする。この同期ステップが重要なのは、中でも特に、システムがフレームバッファを交換し、ビデオデータを組み合わせようとするときに、ＧＰＵの１つがそのビデオデータの一部分の処理をまだ完了していない場合、処理されるビデオフレームがドロップすることもあるからである。
【００２７】
[0034]ＧＰＵバスインターフェース３４０、３４２は、２つ以上のＧＰＵが、ＧＰＵバス２５０を介して相互に結合されることを可能にする。やはり、前述のように、代替の実施形態では、ＧＰＵバス２５０は、どんな種類のメディア処理装置がコンピュータ装置２００で実施されているにせよ、それらのメディア処理装置間で処理済みビデオデータを送るのに使用される任意の種類の技術的に実行可能なスケーラブルバスとすることができる。よって、ＧＰＵバスインターフェース３４０、３４２の代替の実施形態は、メディア処理装置間で処理済みビデオデータを送るのに使用されるスケーラブルバスへの技術的に実行可能な任意のインターフェースとすることができる。スレーブＧＰＵ２２２のＧＰＵバスインターフェース３４２は、メモリインターフェース３３２とＤＡＣ２２０とに結合されている。また、マスタＧＰＵ２１２のＧＰＵバスインターフェース３４０は、メモリインターフェース３３２とＤＡＣ２１８にも結合されている。ドライバ２０６は、スレーブＧＰＵ２２０のＧＰＵバスインターフェース３４２を、第３、第４のフレームバッファ２２５、２２６の関連する部分（例えば、第２の部分３５４と第２の部分３５６）からマスタＧＰＵ２１２に処理済みビデオデータを送るにように構成する。同様に、ドライバ２０６は、マスタＧＰＵ２１２のＧＰＵバスインターフェース３４０を、スレーブＧＰＵ２２０から処理済みビデオデータを受け取り、その処理済みビデオデータをＤＡＣ２１８に送るように構成する。
【００２８】
[0035]マスタＧＰＵ２１２のＤＡＣ２１８は、メモリインターフェース３３０と、表示装置（不図示）、または処理済みビデオフレームが表示されるまで格納されるメモリ要素（不図示）とに結合されている。スレーブＧＰＵのＤＡＣ２２０も、同様に、メモリインターフェース３３２に結合されているが、通常、スレーブＧＰＵ２２２のＤＡＣ２２０は、どんなディスプレイにも、関連するメモリ要素にも結合されない。マスタＧＰＵ２１２のＤＡＣ２１８は、第１、第２のフレームバッファ２１５、２１６の関連する部分（例えば、第１の部分３５０と第１の部分３５２）内の処理済みビデオデータを、それぞれ、スレーブＧＰＵ２２２からＧＰＵバスインターフェース３４０によって受け取られた処理済みビデオデータと組み合わせて処理済みビデオフレームを生成するように構成される。ＤＡＣ２１８は、場合によっては、さらに、処理済みビデオフレームを、表示装置または関連するメモリ要素に送るようにも構成される。
【００２９】
[0036]図４は、本発明の一実施形態による、ビデオデータのフレームを処理するときに図２および３のコンピュータ装置によって実施される方法ステップの流れ図である。これらの方法ステップを任意の順序で実行するように構成されている任意のシステムが本発明の範囲内に含まれることを、当分野の技術者は理解するであろう。さらに、本明細書で説明する方法は、処理されるべきビデオデータの各フレームごとに繰り返されてもよい。
【００３０】
[0037]この方法は、ステップ４０２で開始し、そこで、ドライバ２０６は、マスタＧＰＵ２１２を、マスタＧＰＵ２１２の第１のフレームバッファ２１５からスレーブＧＰＵ２２２の第３のフレームバッファ２２５にビデオデータをコピーするように構成する。考察のためにすぎないが、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、第１、第３のフレームバッファ２１５、２２５内の現在のビデオフレームをそれぞれ処理しており、以前に処理済みのビデオフレームが、表示するために、第２、第４のフレームバッファ２１６、２２６から送られているものと仮定する。マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、次いで、プッシュバッファ内の一連のセマフォコマンドによって同期される。セマフォコマンドは、マスタＧＰＵ２１２が第１のフレームバッファ２１５から第３のフレームバッファ２２５にビデオデータをコピーする間、スレーブＧＰＵ２２２に、後続のプッシュバッファコマンドを実行させないようにする。事実上、スレーブＧＰＵ２２２は、マスタＧＰＵ２１２がビデオデータのコピーを終えるのを「待つ」よう強制される。ビデオデータがコピーされてしまうと、マスタＧＰＵ２１２もスレーブＧＰＵ２２２も、プッシュバッファ内のコマンドの実行を再開することができ、よって、同期がとられている。このコピーおよび同期ステップを、以下で、図５Ａと併せてより詳細に説明する。
【００３１】
[0038]ステップ４０３で、ドライバ２０６は、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を、第１のフレームバッファ２１５と第３のフレームバッファ２２５にあるビデオデータを分割して第１の部分と第２の部分にするように構成する。マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、次いで、ビデオデータの異なる部分を処理するように構成される。例えば、マスタＧＰＵ２１２は、第１のフレームバッファ２１５の第１の部分３５０にあるビデオデータを処理するように構成されてもよく、スレーブＧＰＵ２２２は、第３のフレームバッファ２２５の第２の部分３５４にあるビデオデータを処理するように構成されてもよい。その結果、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、現在のビデオフレームの処理を分担することになり、それによって、コンピュータ装置２００の処理効率が向上する。ビデオデータを異なる部分に分割するステップを、以下で、図５Ｂと併せてより詳細に説明する。
【００３２】
[0039]ステップ４０４で、ドライバ２０６は、ビデオプロセッサ３１０、３１２を構成する。かかる構成では、例えば、ビデオプロセッサ３１０、３１２を、ビデオデータをスケーリングするように構成してもよい。ステップ４０６で、ドライバ２０６は、３Ｄプロセッサ３１４、３１６を構成する。かかる構成では、例えば、３Ｄプロセッサ３１４、３１６を、インターレース解除機能、エッジ強調または他のビデオ処理機能を提供するように構成してもよい。ステップ４０８で、ドライバ２０６は、２Ｄプロセッサ３１８、３２０を構成する。かかる構成では、例えば、２Ｄプロセッサ３１８、３２０を、サブタイトル情報を挿入し、またはＤＶＤアプリケーションでよくあるメニュー画面を提供するように構成してもよい。他の実施形態では、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、ステップ４０４、４０６および４０８で説明するよりも多い、または少ない量のビデオ処理、あるいは異なる種類のビデオ処理を提供するように構成されてもよい。
【００３３】
[0040]ステップ４１０で、ドライバ２０６は、 マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとる。各ＧＰＵは、ビデオデータを異なる速度で処理し得るため、このステップは、両方のＧＰＵがフレームバッファ２１５、２２５内のビデオデータの処理を完了してから、フレームバッファが交換され、処理済みビデオデータが組み合わされて処理済みビデオフレームが生成されるよう保証する。やはり、以下で、図５Ｃと併せてより詳細に説明するように、プッシュバッファ内の一連のセマフォコマンドを使ってマスタＧ２１２とスレーブＧＰＵ２２２が同期される。
【００３４】
[0041]ステップ４１２で、ドライバ２０６は、フレームバッファを交換する。ステップ４０２で示した例を続けると、第２のフレームバッファ２１６の第１の部分３５２と、第４のフレームバッファ２２６の第２の部分３５６のそれぞれからの最後の画素が表示された後で、ドライバ２０６は、第１のフレームバッファ２１５と第２のフレームバッファ２１６、ならびに第３のフレームバッファ２２５と第４のフレームバッファ２２６を交換して、第１のフレームバッファ２１５の第１の部分３５０と、第３のフレームバッファ２２５の第２の部分３５４の処理済みビデオデータが、表示のためにＤＡＣ２１８に送られるようにする。次いで、処理されるべきビデオデータの次のフレームが、第２のフレームバッファ２１６と第４のフレームバッファ２２６に格納される。
【００３５】
[0042]ステップ４１４で、ＤＡＣ２１８によって、処理済みビデオデータが組み合わされて処理済みビデオフレームが生成され、表示装置（または関連するメモリ要素）に送られる。やはり、この例を続けると、第１のフレームバッファ２１５の第１の部分３５０からと、第３のフレームバッファ２２５の第２の部分３５４からの処理済みビデオデータがＤＡＣ２１８によって組み合わされて、処理済みビデオフレームが生成される。
【００３６】
[0043]図５Ａは、本発明の一実施形態による、図４のステップ４０２を実施するのに使用されるコマンドシーケンス５０２を示す概念図である。図示のように、コマンド５０２は、ドライバ２０６によって、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を、ビデオデータを処理するように構成するために組み立てられるプッシュバッファの一部分を形成する。具体的には、コマンド５０２は、マスタＧＰＵ２１２に、第１のフレームバッファ２１５にあるビデオデータを第３のフレームバッファ２２５にコピーさせると共に、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期により、マスタＧＰＵ２１２とスレーブＧＰＵ２２２が、第１のフレームバッファ２１５と第３のフレームバッファ２２５にあるビデオデータの部分を同時の処理することができるようにさせる。
【００３７】
[0044]サブデバイスマスク設定（ＳＳＤＭ）コマンド５０４は、サブデバイスマスクを０１に設定し、マスタＧＰＵ２１２だけがプッシュバッファ内の後続のコマンドを実行することができるようにする。ＳＳＤＭコマンドへの引数は、どちらのＧＰＵがプッシュバッファ内の後続コマンドを実行するように構成されるか決定する。一実施形態では、引数は、２ビットのビットフィールドであり、このビットフィールド内の各ビットは、２つのＧＰＵの一方に対応する。例えば、第１のビットがマスタＧＰＵ２１２に対応し、第２のビットがスレーブＧＰＵ２２２に対応する場合、ＳＳＤＭ０１コマンドは、マスタＧＰＵ２１２を、プッシュバッファコマンド内の後続のコマンドを実行するように構成するはずであり、スレーブＧＰＵ２２２は、後続のコマンドを無視する。ＳＳＤＭ１１コマンドは、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の両方を、プッシュバッファ内の後続のコマンドを実行するように構成するはずである。次のコマンドは、コピーコマンド５０６であり、これは、マスタＧＰＵ２１２に、第１のフレームバッファ２１５の内容を第３のフレームバッファ２２５にコピーするよう指図する。このコマンドの実行は、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を同じビデオデータにアクセスできるようにする。
【００３８】
[0045]セマフォ解除コマンド５０８は、マスタＧＰＵ２１２に、セマフォを解除させる。ドライバは、各ＧＰＵが、第１のフレームバッファ２１５と第３のフレームバッファ２２５のビデオデータの部分を同時に処理することができるように、セマフォを使ってマスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとる。セマフォは、システムメモリ内の特定のアドレスを指し示すポインタである。セマフォは、解除されても、獲得されてもよい。ＧＰＵがセマフォ解除コマンドを実行するとき、そのＧＰＵは、そのセマフォに関連付けられたメモリ位置に特定の値を書き込む。ＧＰＵがセマフォ獲得コマンドを実行するとき、そのＧＰＵは、そのセマフォに関連付けられたメモリ位置を読み取り、そのメモリ位置の値を、セマフォ獲得コマンドに反映されている値と比較する。これら２つの値がマッチしない場合、そのセマフォ獲得コマンドに関連付けられたセマフォがまだ解除されていないことを示す。マッチがない場合、そのセマフォ獲得コマンドを実行中のＧＰＵは、マッチが見つかるまでそのセマフォに関連付けられたメモリ位置を読み取り続ける。したがって、そのセマフォ獲得コマンドを実行中のＧＰＵは、マッチが見つかるまで、どんな追加のプッシュバッファコマンドも実行しない。例えば、第１のＧＰＵが、４２の値を持つセマフォを解除するよう指図され、次いで、第２のＧＰＵが、その４２の値を持つセマフォを獲得するよう指図されるものと仮定する。第２のＧＰＵは、このセマフォに関連付けられたシステムメモリ位置を、そのメモリ位置が４２の値を持つようになるまで読み取り続ける。重要なことには、第２のＧＰＵは、そのメモリ位置が４２の値を持つようになるまで次のプッシュバッファコマンドを実行せず、メモリは、第１のＧＰＵが、４２の値を持つセマフォを解除したときに初めて４２の値を持つようになる。
【００３９】
[0046]ＳＳＤＭコマンド５１０は、サブデバイスマスクを１０に設定し、スレーブＧＰＵ２２２だけがプッシュバッファ内の後続コマンドを実行することができるようにする。セマフォ獲得コマンド５１２は、スレーブＧＰＵ２２２に、セマフォ解除コマンド５０８に応答してマスタＧＰＵ２１２によって解除されたセマフォを獲得するよう指図する。前述のように、スレーブＧＰＵ２２２は、マスタＧＰＵ２１２がセマフォを解除するまでどんな追加のプッシュバッファコマンドも実行せず、マスタＧＰＵ２１２は、コピーコマンド５０６が完全に実行されるまでセマフォを解除しないため、スレーブＧＰＵ２２２は、マスタＧＰＵ２１２が、第１のフレームバッファ２１５から第３のフレームバッファ２２５にビデオデータをコピーするの「待って」から任意の追加のプッシュバッファコマンドを実行するよう強制される。よって、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、セマフォがマスタＧＰＵ２１２によって解除され、スレーブＧＰＵ２２２によって獲得された後で、「同期」される。ＳＳＤＭコマンド５１４は、サブデバイスマスクを１１に設定し、両方のＧＰＵが、プッシュバッファ内の次のコマンドを実行することができるようにする。
【００４０】
[0047]図５Ｂは、本発明の一実施形態による、図４のステップ４０３を実施するのに使用されるコマンドシーケンス５３０を示す概念図である。図示のように、コマンド５３０は、ドライバ２０６によって、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を、ビデオデータを処理するように構成するために組み立てられるプッシュバッファの部分を形成する。具体的には、コマンド５３０は、ビデオデータを第１の部分と第２の部分に分割する。マスタＧＰＵ２１２は、ビデオデータの第１の部分を処理し、スレーブＧＰＵ２２２は、ビデオデータの第２の部分を処理する。よって、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、ビデオデータを同時に処理することができ、従来技術のシステムに比べて、処理効率の向上がもたらされる。
【００４１】
[0048]ＳＳＤＭコマンド５３８は、サブデバイスマスクを０１に設定し、マスタＧＰＵ２１２だけが、プッシュバッファ内の後続のコマンドを実行することができるようにする。クリップ長方形設定コマンド５４０は、マスタＧＰＵ２１２のためのクリップ長方形を設定する。ドライバ２０６はクリップ長方形設定コマンドを使って、各ＧＰＵが処理するビデオデータの部分を定義する。一実施形態では、クリップ長方形設定コマンドは、個々のＧＰＵが処理するビデオデータの部分の境界を、そのＧＰＵに結合されるフレームバッファの４隅を指定することによって定義する。次いで、そのＧＰＵは、フレームバッファのそれらの４隅の内部にあるビデオデータを処理するように構成される。例えば、ドライバ２０６が、フレームバッファをほぼ半分に分割した場合、フレームバッファの上側部分は、ｈをフレームバッファの高さとし、ｗをフレームバッファの幅とすると、コーナ画素座標（０，０）、（ｗ，０）、（ｈ／２，０）および（ｈ／２，ｗ）を用いたクリップ長方形設定コマンドによって指定され得るであろう。フレームバッファの下側部分は、コーナ画素座標（ｈ／２，０）、（ｈ／２，ｗ）、（ｈ，０）および（ｈ，ｗ）を用いたクリップ長方形設定コマンドによって指定され得るはずである。よって、クリップ長方形コマンド５４０は、フレームバッファ２１５の４隅を指定する。これら４隅の内部にあるビデオデータは、マスタＧＰＵ２１２によって処理されるビデオデータの部分を構成する。
【００４２】
[0049]より大きいクリップ長方形は、小さいクリップ長方形よりも比較的多くのビデオデータを含むため、ドライバ２０６は、指定されるクリップ長方形内のビデオデータの量を制御することにより、各ＧＰＵによって実行される処理の量を制御してもよい。代替の実施形態では、所与のＧＰＵが処理するビデオデータの部分は、フレーム内の画素位置によって指定されても、行番号によって指定されても、または他の任意の技術的に実行可能な手段によって指定されてもよい。
【００４３】
[0050]ＳＳＤＭコマンド５４２は、サブデバイスマスクを１０に設定し、スレーブＧＰＵ２２２だけがプッシュバッファ内の後続のコマンドを実行することができるようにする。クリップ長方形設定コマンド５４４が、フレームバッファ２２５の４隅を指定することによって、スレーブＧＰＵ２２２のためのクリップ長方形を設定する。こられ４隅の内部のビデオデータは、スレーブＧＰＵ２２２によって処理されるビデオデータの部分を構成する。ＳＳＤＭコマンド５４６は、サブデバイスマスクを１１に設定し、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の両方が、プッシュバッファ内の後続のコマンドを実行することができるようにする。前述のように、プッシュバッファ内の次のコマンドがビデオ処理コマンドである場合、マスタＧＰＵ２１２は、クリップ長方形設定コマンド５４０において指定されたクリップ長方形内の第１のフレームバッファ２１５のビデオデータの部分に対してそのコマンドを実行する。同様に、スレーブＧＰＵ２２２は、クリップ長方形設定コマンド５４４において指定されたクリップ長方形内の第３のフレームバッファ２２５のビデオデータの部分に対してそのコマンドを実行する。
【００４４】
[0051]図５Ｃは、本発明の一実施形態による、図４のステップ４１０を実施するのに使用されるコマンドシーケンス５６０を示す概念図である。図示のように、コマンド５６０は、ドライバ２０６によって、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を、ビデオデータを処理するように構成するために組み立てられるプッシュバッファの一部分を形成する。具体的には、コマンド５６０は、第１のフレームバッファ２１５と第３のフレームバッファ２２５のビデオデータが処理された後で、マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとる。図５Ｂで説明したように、マルチＧＰＵシステムにおいて、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、ビデオデータの異なる部分を処理する。結果として、マスタＧＰＵ２１２とスレーブＧＰＵ２２２は、ビデオデータのそれぞれの部分の処理を、わずかに異なる時刻に終了することもある。マスタＧＰＵ２１２とスレーブＧＰＵ２２２の同期をとることにより、各ＧＰＵが、それぞれ、第１のフレームバッファ２１５と第３のフレームバッファ２２５のビデオデータの処理を完了してから、スレーブＧＰＵ２２２によって処理されたビデオデータがマスタＧＰＵ２１２に送られ、マスタＧＰＵ２１２によって処理されたビデオデータと組み合わされて処理済みビデオフレームが生成されるよう保証される。この同期ステップが重要なのは、中でも特に、システムがビデオデータを組み合わせようとするときに、ＧＰＵの１つがそのビデオデータの部分の処理をまだ完了していない場合、そのビデオフレームがドロップすることもあるからである。
【００４５】
[0052]ＳＳＤＭコマンド５６４は、サブデバイスマスクを０１に設定し、マスタＧＰＵ２１２だけがプッシュバッファ内の後続のコマンドに応答することができるようにする。セマフォ獲得コマンド５６６は、マスタＧＰＵに、セマフォを獲得するよう指図する。ＳＳＤＭコマンド５６８は、サブデバイスマスクを１０に設定し、スレーブＧＰＵ２２２だけがプッシュバッファ内の後続のコマンドを実行することができるようにする。セマフォ解除コマンド５７０は、スレーブＧＰＵ２２２に、セマフォ獲得コマンド５６６で指定されたセマフォを解除するよう指図する。前述のように、マスタＧＰＵ２１２は、スレーブＧＰＵ２２２がセマフォを解除するまでどんな追加のプッシュバッファコマンドも実行しないため、各ＧＰＵは、スレーブＧＰＵ２２２がセマフォを解除し、マスタＧＰＵ２１２がセマフォを獲得した後で同期される。というのは、この時点で、両方のＧＰＵがプッシュバッファ内の次のコマンドを実行することができるからである。ＳＳＤＭコマンド５７２は、サブデバイスマスクを１１に設定し、両方のＧＰＵがプッシュバッファ内の後続のコマンドを実行することができるようにする。
【００４６】
[0053]上記のコマンドを使って、マスタＧＰＵ２１２とスレーブＧＰＵ２２２を、それらのＧＰＵの１つだけがビデオデータのそれぞれの部分に対していくつかの処理コマンドを実行するように構成してもよいことを、当分野の技術者は理解するであろう。例えば、ビデオフレームの下部にサブタイトルが追加される必要がある場合、ＳＳＤＭコマンドを使って１つのＧＰＵを使用可能にし、他方を使用不可にしてもよい。使用可能にされたＧＰＵは、そのビデオデータの下部分を処理する役割を果たすＧＰＵのはずである。次いで、そのＧＰＵは、所望のサブタイトルを追加するのに必要とされる処理コマンドを実行するはずである。他方のＧＰＵは使用不可にされるため、サブタイトルが追加される間、ビデオデータの上部分には処理が行われないはずである。
【００４７】
[0054]開示のシステムおよび方法の１つの利点は、これらが、従来技術のシングルＧＰＵシステムよりも効率よくビデオデータを処理するマルチＧＰＵビデオ処理システムを提供することである。その結果、従来技術のシステムと比べて、ビデオフレームを実質的により短時間で処理することができ、従来技術のシステムと比べて、開示のシステムを使って実行されるビデオ処理コマンドの数および複雑度を、実質的に増大させることができる。
【００４８】
[0055]以上の説明は、本発明の実施形態を対象としているが、本発明の基本的な範囲を逸脱することなく、本発明のさらに別の実施形態が考案されてもよく、本発明の範囲は、添付の特許請求の範囲によって決定されるものである。
【図面の簡単な説明】
【００４９】
【図１】本発明の一実施形態による、複数のメディア処理装置を使ってビデオデータのフレームを処理するときにビデオ処理システムが実施する機能ステップを示す概念図である。
【図２】本発明の１つまたは複数の態様を実施するように構成されているコンピュータ装置を示す概念図である。
【図３】本発明の一実施形態による、図２のコンピュータ装置をより詳細に示す図である。
【図４】本発明の一実施形態による、ビデオデータのフレームを処理するときに図２および３のコンピュータ装置によって実施される方法ステップを示す流れ図である。
【図５Ａ】本発明の一実施形態による、図４のステップ４０２を実施するのに使用されるコマンドシーケンスを示す概念図である。
【図５Ｂ】本発明の一実施形態による、図４のステップ４０３を実施するのに使用されるコマンドシーケンスを示す概念図である。
【図５Ｃ】本発明の一実施形態による、図４のステップ４１０を実施するのに使用されるコマンドシーケンスを示す概念図である。
【符号の説明】
【００５０】
２００  コンピュータ装置
２０２  中央処理装置（ＣＰＵ）
２０４  システムメモリ
２０６  ドライバ
２０８  第１のグラフィックスサブシステム（マスタ）
２１０  第２のグラフィックスサブシステム（スレーブ）
２１２  第１の（マスタ）グラフィックス処理装置（ＧＰＵ）
２１４  第１のＧＰＵメモリ
２１５  第１のフレームバッファ
２１６  第２のフレームバッファ
２２２  第２の（スレーブ）ＧＰＵ
２２４  第２のＧＰＵメモリ
２２５  第３のフレームバッファ
２２６  第４のフレームバッファ
２５０  ＧＰＵバス
３０２  ホストインターフェース
３０４  ホストインターフェース
３１０  ビデオプロセッサ
３１２  ビデオプロセッサ
３１４  ３Ｄプロセッサ
３１６  ３Ｄプロセッサ
３１８  ２Ｄプロセッサ
３２０  ２Ｄプロセッサ
３３０  メモリインターフェース
３３２  メモリインターフェース
３４０  ＧＰＵバスインターフェース
３４２  ＧＰＵバスインターフェース
３５０  第１のフレームバッファの第１の部分
３５２  第２のフレームバッファの第１の部分
３５４  第３のフレームバッファの第２の部分
３５６  第４のフレームバッファの第２の部分
【図１】
0004568711.tif 000002
【図２】
0004568711.tif 000003
【図３】
0004568711.tif 000004
【図４】
0004568711.tif 000005
【図５Ａ】
0004568711.tif 000006
【図５Ｂ】
0004568711.tif 000007
【図５Ｃ】
0004568711.tif 000008