(57)【要約】【課題】特殊ハードウェアがなければリアル・タイム・ビデオを実行することができないという従来技術の欠点を解消するシステムおよび方法を提供する。【解決手段】単一品位または高品位ビデオ・データを処理し、未来時点において生ずる二次元および三次元エフェクトを生成する命令を含む方法、システム、およびコンピュータ読み取り可能媒体。エフェクトは、多数のスレッドを用いて、ビデオ処理システムにおいて作成される。【選択図】図４
2007534279.tif 000002
【特許請求の範囲】
【請求項１】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法であって、
アプリケーション・スレッド、アップロード・スレッド、デコード・スレッド、レンダリング・スレッド、およびプレゼンタ・スレッドを実装するステップと、
前記ビデオ・データに追加する前記エフェクトを作成するために前記ビデオ・データを前記アプリケーション・スレッドに渡し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするために、前記事前伸張ビデオ・データをアップロード・スレッドに渡すステップと、
前記事前伸張ビデオ・データをデコードしてデコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データを前記デコード・スレッドに渡すステップと、
前記デコード・ビデオ・データ内に前記エフェクトをレンダリングして出力ビデオ・データを生成するために、前記デコード・ビデオ・データを前記レンダリング・スレッドに渡すステップと、
前記出力ビデオ・データを発表するために、前記出力ビデオ・データを前記プレゼンタ・スレッドに渡すステップと、
を備えている、方法。
【請求項２】
請求項１記載の方法であって、デコードおよびレンダリングにおいて利用したリソースをリリースするためのリリース・スレッドを実装するステップを備えている、方法。
【請求項３】
請求項１記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、方法。
【請求項４】
請求項１記載の方法であって、更に、各スレッド実施のタイミングを決定するためにスヌーピング・コマンドを発行するステップを備えている、方法。
【請求項５】
請求項１記載の方法において、前記アプリケーション・スレッドは、
前記ビデオ・データのサンプルの読み取りを実行するステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を実行する、方法。
【請求項６】
請求項５記載の方法において、前記アップロード・スレッドは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第１スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を実行する、方法。
【請求項７】
請求項６記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、方法。
【請求項８】
請求項６記載の方法において、前記デコード・スレッドは、
第２スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を実行する、方法。
【請求項９】
請求項８記載の方法において、前記アプリケーション・スレッドは、更に、
前記アプリケーションにおいて、前記エフェクトに対してエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
を実行する、方法。
【請求項１０】
請求項９記載の方法において、前記出力サンプル・オブジェクトはプロキシである、方法。
【請求項１１】
請求項９記載の方法において、前記レンダリング・スレッドは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を実行する、方法。
【請求項１２】
請求項１１記載の方法において、前記プレゼンタ・スレッドは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を実行する、方法。
【請求項１３】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法であって、
前記ビデオ・データを受信するステップと、
前記エフェクトを作成するステップと、
前記ビデオ・データから事前伸張ビデオ・データを生成するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするステップと、
前記エフェクトを記述するパラメータを決定するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップと、
前記出力ビデオ・データを発表するステップと、
を備えている、方法。
【請求項１４】
請求項１３記載の方法であって、デコードおよびレンダリングにおいて利用したリソースをリリースするステップを備えている、方法。
【請求項１５】
請求項１４記載の方法において、前記エフェクトを作成するステップ、事前伸張ビデオを生成するステップ、およびパラメータを決定するステップをアプリケーションによって実行する、方法。
【請求項１６】
請求項１５記載の方法において、前記アプリケーションは実行するステップ毎にスレッドを起動する、方法。
【請求項１７】
請求項１５記載の方法において、前記事前伸張ビデオをアップロードするステップと、前記事前伸張ビデオ・データをデコードするステップと、前記エフェクトをレンダリングするステップと、リソースをリリースするステップを３Ｄ−サーバによって実行する、方法。
【請求項１８】
請求項１７記載の方法において、前記３Ｄ−サーバは実行するステップ毎にスレッドを起動する、方法。
【請求項１９】
請求項１７記載の方法において、前記アプリケーションおよび３Ｄ−サーバは並列に動作する、方法。
【請求項２０】
請求項１３記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、方法。
【請求項２１】
請求項１３記載の方法であって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、方法。
【請求項２２】
請求項１７記載の方法において、前記ビデオ・データから事前伸張ビデオ・データを生成するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を備えている、方法。
【請求項２３】
請求項２２記載の方法において、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第１スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記３Ｄ−サーバにアップロードするステップと、
を備えている、方法。
【請求項２４】
請求項２３記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、方法。
【請求項２５】
請求項２３記載の方法において、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードするステップは、
第２スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、方法。
【請求項２６】
請求項２５記載の方法であって、更に、
前記アプリケーションにおいて、前記エフェクトに対するパラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信するステップと、
を備えている、方法。
【請求項２７】
請求項２６記載の方法において、前記出力サンプル・オブジェクトはプロキシである、方法。
【請求項２８】
請求項２６記載の方法において、出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、方法。
【請求項２９】
請求項２８記載の方法において、前記出力ビデオ・データを出力するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を実行する、方法。
【請求項３０】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理するシステムであって、
前記ビデオ・データに付加する前記エフェクトを作成し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装する手段と、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装する手段と、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装する手段と、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装する手段と、
前記出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装する手段と、
を備えている、システム。
【請求項３１】
請求項３０記載のシステムであって、デコードおよびレンダリングにおいて利用したリソースをリリースするためにリリース・スレッドを実装する手段を備えている、システム。
【請求項３２】
請求項３０記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、システム。
【請求項３３】
請求項３０記載のシステムであって、更に、各スレッド実装のタイミングを決定するために、スヌーピング・コマンドを発行する手段を備えている、システム。
【請求項３４】
請求項３０記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、
前記ビデオ・データのサンプルを読み取る手段と、
前記サンプルにサンプル・オブジェクトを割り当てる手段と、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードする手段と、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送する手段と、
を備えている、システム。
【請求項３５】
請求項３４記載のシステムにおいて、前記アップロード・スレッドを実装する前記手段は、
ビデオ・メモリ・サーフェイスを取得する手段と、
第１スヌーピング・コマンドを発行する手段と、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする手段と、
を備えている、システム。
【請求項３６】
請求項３５記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、システム。
【請求項３７】
請求項３５記載のシステムにおいて、前記デコード・スレッドを実装する前記手段は、
第２スヌーピング・コマンドを発行する手段と、
新たなビデオ・メモリ・サーフェイスを取得する手段と、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定する手段と、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行する手段と、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加する手段と、
を備えている、システム。
【請求項３８】
請求項３７記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、更に、
前記アプリケーションにおいて、前記エフェクトに対するエフェクト・パラメータを決定する手段と、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡す手段と、
を備えている、システム。
【請求項３９】
請求項３８記載のシステムにおいて、前記出力サンプル・オブジェクトはプロキシである、システム。
【請求項４０】
請求項３８記載のシステムにおいて、前記レンダリング・スレッドを実装する前記手段は、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てる手段と、
前記エフェクトをレンダリングする手段と、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納する手段と、
を備えている、システム。
【請求項４１】
請求項４０記載のシステムにおいて、前記プレゼンタ・スレッドを実装する前記手段は、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れる手段と、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行する手段と、
を備えている、システム。
【請求項４２】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理するシステムであって、
前記ビデオ・データを受信する手段と、
前記エフェクトを作成する手段と、
前記ビデオ・データから事前伸張ビデオ・データを生成する手段と、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする手段と、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードする手段と、
前記エフェクトを記述するパラメータを決定する手段と、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングする手段と、
前記出力ビデオ・データを発表する手段と、
を備えている、システム。
【請求項４３】
請求項４２記載のシステムであって、デコードおよびレンダリングにおいて利用したリソースをリリースする手段を備えている、システム。
【請求項４４】
請求項４３記載のシステムにおいて、前記エフェクトを作成する手段、事前伸張ビデオを生成する手段、およびパラメータを決定する手段はアプリケーションである、システム。
【請求項４５】
請求項１５記載の方法において、前記アプリケーションは実行する手段毎にスレッドを起動する、方法。
【請求項４６】
請求項４４記載の方法において、前記事前伸張ビデオをアップロードする手段と、前記事前伸張ビデオ・データをデコードする手段と、前記エフェクトをレンダリングする手段と、リソースをリリースする手段は、３Ｄ−サーバである、システム。
【請求項４７】
請求項４６記載のシステムにおいて、前記３Ｄ−サーバは実行するステップ毎にスレッドを起動する、システム。
【請求項４８】
請求項４６記載のシステムにおいて、前記アプリケーションおよび３Ｄ−サーバは並列に動作する、システム。
【請求項４９】
請求項４２記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするシステム。
【請求項５０】
請求項４２記載のシステムであって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行する手段を備えている、システム。
【請求項５１】
請求項４６記載のシステムにおいて、前記ビデオ・データから事前伸張ビデオ・データを生成する手段は、
前記ビデオ・データのサンプルを読み取る手段と、
前記サンプルにサンプル・オブジェクトを割り当てる手段と、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードする手段と、
前記サンプル・オブジェクトを前記３Ｄ−サーバに転送する手段と、
を備えている、方法。
【請求項５２】
請求項５１記載のシステムにおいて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする手段は、
ビデオ・メモリ・サーフェイスを取得する手段と、
第１スヌーピング・コマンドを発行する手段と、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする手段と、
を備えている、システム。
【請求項５３】
請求項５２記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、システム。
【請求項５４】
請求項５２記載のシステムにおいて、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードする手段は、
第２スヌーピング・コマンドを発行する手段と、
新たなビデオ・メモリ・サーフェイスを取得する手段と、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定する手段と、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行する手段と、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加する手段と、
を備えている、システム。
【請求項５５】
請求項５４記載のシステムであって、更に、
前記アプリケーションにおいて、前記エフェクトに対するパラメータを決定する手段と、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡す手段と、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信する手段と、
を備えている、システム。
【請求項５６】
請求項５５記載のシステムにおいて、前記出力サンプル・オブジェクトはプロキシである、システム。
【請求項５７】
請求項５５記載のシステムにおいて、前記出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングする手段は、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てる手段と、
前記エフェクトをレンダリングする手段と、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納する手段と、
を備えている、システム。
【請求項５８】
請求項５７記載のシステムにおいて、前記出力ビデオ・データを出力する手段は、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れる手段と、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行する手段と、
を備えている、システム。
【請求項５９】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法をコンピュータ・システムに実行させる命令を含むコンピュータ読み取り可能媒体であって、前記方法が、
前記ビデオ・データに付加する前記エフェクトを作成し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装するステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装するステップと、
前記出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項６０】
請求項５９記載のコンピュータ読み取り可能媒体であって、デコードおよびレンダリングにおいて利用したリソースをリリースするためにリリース・スレッドを実装するステップを備えている、コンピュータ読み取り可能媒体。
【請求項６１】
請求項５９記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、コンピュータ読み取り可能媒体。
【請求項６２】
請求項５９記載のコンピュータ読み取り可能媒体であって、更に、各スレッド実装のタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、コンピュータ読み取り可能媒体。
【請求項６３】
請求項５９記載のコンピュータ読み取り可能媒体において、前記アプリケーション・スレッドを実装するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項６４】
請求項６３記載のコンピュータ読み取り可能媒体において、前記アップロード・スレッドを実装するステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第１スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項６５】
請求項６４記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、コンピュータ読み取り可能媒体。
【請求項６６】
請求項６４記載のコンピュータ読み取り可能媒体において、前記デコーダ・スレッドを実装するステップは、
第２スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項６７】
請求項６６記載のコンピュータ読み取り可能媒体において、前記アプリケーション・スレッドを実装するステップは、更に、
前記アプリケーションにおいて、前記エフェクトに対するエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項６８】
請求項６７記載のコンピュータ読み取り可能媒体において、前記出力サンプル・オブジェクトはプロキシである、コンピュータ読み取り可能媒体。
【請求項６９】
請求項６７記載のコンピュータ読み取り可能媒体において、前記レンダリング・スレッドを実装する前記ステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項７０】
請求項６９記載のコンピュータ読み取り可能媒体において、前記プレゼンタ・スレッドを実装するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項７１】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法をコンピュータ・システムに実行させる命令を含むコンピュータ読み取り可能媒体であって、前記方法が、
前記ビデオ・データを受信するステップと、
前記エフェクトを作成するステップと、
前記ビデオ・データから事前伸張ビデオ・データを生成するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするステップと、
前記エフェクトを記述するパラメータを決定するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップと、
前記出力ビデオ・データを発表するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項７２】
請求項７１記載のコンピュータ読み取り可能媒体であって、デコードおよびレンダリングにおいて利用したリソースをリリースするステップを備えている、コンピュータ読み取り可能媒体。
【請求項７３】
請求項７２記載のコンピュータ読み取り可能媒体において、前記エフェクトを作成するステップと、事前伸張ビデオを生成するステップと、パラメータを決定するステップをアプリケーションによって実行する、コンピュータ読み取り可能媒体。
【請求項７４】
請求項７３記載のコンピュータ読み取り可能媒体において、前記アプリケーションは実行するステップ毎にスレッドを起動する、コンピュータ読み取り可能媒体。
【請求項７５】
請求項７３記載のコンピュータ読み取り可能媒体において、前記事前伸張ビデオをアップロードするステップと、前記事前伸張ビデオ・データをデコードするステップと、前記エフェクトをレンダリングするステップと、リソースをリリースするステップを３Ｄ−サーバが実行する、コンピュータ読み取り可能媒体。
【請求項７６】
請求項７５記載のコンピュータ読み取り可能媒体において、前記３Ｄ−サーバは実行するステップ毎にスレッドを起動する、コンピュータ読み取り可能媒体。
【請求項７７】
請求項７５記載のコンピュータ読み取り可能媒体において、前記アプリケーションおよび３Ｄ−サーバは並列に動作する、コンピュータ読み取り可能媒体。
【請求項７８】
請求項７１記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするコンピュータ読み取り可能媒体。
【請求項７９】
請求項７１記載のコンピュータ読み取り可能媒体であって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、コンピュータ読み取り可能媒体。
【請求項８０】
請求項７５記載のコンピュータ読み取り可能媒体において、前記ビデオ・データから事前伸張ビデオ・データを生成するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記３Ｄ−サーバに転送するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項８１】
請求項８０記載のコンピュータ読み取り可能媒体において、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第１スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項８２】
請求項８１記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、コンピュータ読み取り可能媒体。
【請求項８３】
請求項８１記載のコンピュータ読み取り可能媒体において、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードするステップは、
第２スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項８４】
請求項８３記載のコンピュータ読み取り可能媒体であって、更に、
前記アプリケーションにおいて、前記エフェクトに対してエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記３Ｄ−サーバに渡すステップと、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項８５】
請求項８４記載のコンピュータ読み取り可能媒体において、前記出力サンプル・オブジェクトはプロキシである、コンピュータ読み取り可能媒体。
【請求項８６】
請求項８４記載のコンピュータ読み取り可能媒体において、前記出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項８７】
請求項８６記載のコンピュータ読み取り可能媒体において、前記出力ビデオ・データを出力するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を備えている、コンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、ビデオおよびグラフィック処理システムに関し、更に特定すれば、リアル・タイム二次元および三次元、単一品位、および高品位ビデオ・エフェクト用のグラフィック・ハードウェアを使用するためのシステムおよび方法に関する。
【背景技術】
【０００２】
今日の電子機器の価格低下および種々の技術的進歩により、高い技術の電子機器が大多数の消費者にも入手可能となっている。これは、特に、ビデオ処理、記録、取り込み(capturing)、および編集の分野に該当する。パーソナル・コンピュータが普及しているので、消費者はビデオ・データをパーソナル・コンピュータ上で容易に目視および記録することや、ビデオ・デバイスからビデオ・データを取り込むことができる。更に、パーソナル・コンピュータの処理速度向上により、消費者は、パーソナル・コンピュータ上でエフェクトの追加やグラフィックの追加というようなビデオ・データの編集を行い、エフェクトまたはグラフィクスを有するビデオを視認することができる。
【０００３】
殆どのパーソナル・コンピュータは、中央演算装置（「ＣＰＵ」）およびグラフィック・カードの双方を有する。最近のグラフィック・カードは、グラフィック処理ユニット（「ＧＰＵ」）およびビデオ・メモリを、ＣＰＵおよびシステム・メモリとは別個に含んでいる。従来、ビデオ編集は、多数の入力ストリームをビデオまたは静止画からタイムライン上で受信し、これらのストリームをエフェクト（例えば、推移(transition)効果またはクリップ効果）と組み合わせて単一のビデオ出力ファイルを作成することから成る。このプロセスは、ＣＰＵまたはＧＰＵを利用して様々なタスクを実行する。
【０００４】
図１は、従来のビデオ編集プロセス（１００）の一例を示す。最初に、コンピュータは、入来するビデオ・データを受信し、ＣＰＵを利用してデコードする（段階１０２）。例えば、ビデオは標準的なフォーマット（例えば、ＭＰＥＧ）で格納すること、または取り込むことができ、処理の前にデコードが必要となる。デコード方式は複雑である可能性があるので、デコード・プロセスはＣＰＵサイクルにおいて非常に大きな負担となる。
【０００５】
次に、コンピュータは１フレームの結果の中に付帯するエフェクトを順次処理し、最も望ましい設定を決定する（段階１０４）。このステップの間、ＧＰＵ／ＣＰＵエフェクトの混合を回避するために、コンピュータはＧＰＵエフェクトをＣＰＵエフェクトと置き換える、またはその逆を行い、可能であれば互換性のあるエフェクトに置き換えることができる。次いで、エフェクトの連続処理が、メモリのようなリソースに過剰な負担をかける場合、コンピュータはタスクを分割し、エフェクトを順次処理し複雑度を低下させる（段階１０６）。
【０００６】
次に、コンピュータは、デコードしたビデオ・データをグラフィック・カードに転送し、ＧＰＵによって処理を行う（段階１０８）。次いで、デコードしたビデオおよび順次処理したエフェクトから、グラフィック・カードが、フレームのレンダリングに必要となる中間データ、例えば、ポリゴン・モデルやタイムライン情報を作成する（段階１１０）。
【０００７】
次に、ＣＰＵは、伸張したビデオ・データおよびエフェクトの中間結果をレンダリングする（段階１１２）。次いで、コンピュータはＣＰＵ／ＧＰＵの混合が必要か否か判定を行う（段階１１４）。混合が必要な場合、ＣＰＵはレンダリングした中間結果をリード・バックして処理する。このようにする場合、プロセスは段階１０８に戻る。しかしながら、リード・バックが必要な場合、リアル・タイムのビデオ編集は不可能となる。
【０００８】
全ての処理を実行した後、エフェクトを含む完結ビデオ・データを表示する（段階１１６）。例えば、エフェクトを含むビデオをコンピュータのモニタ上に表示することができる。
【０００９】
場合によっては、編集してエフェクトを入れたデータをセーブしなければならないこともある（段階１１８）。例えば、編集したデータが、背景にレンダリングするコンテンツとして必要となる場合がある。編集ビデオ・データをセーブする必要がある場合、データをＣＰＵにリード・バックする（段階１２０）。リード・バックが必要となる場合、リアル・タイムのビデオ編集は不可能となる。次いで、コンピュータはリード・バックしたビデオ・データを圧縮するが、これはＣＰＵを集中的に用いる（段階１２２）。圧縮されたデータは、後に使用するために格納することができる。
【００１０】
前述のビデオ編集プロセスでは、段階１０２において受信したビデオ・データは、様々な方法で得ることができる。データを得る方法の１つは、コンピュータによって、ディジタル・ビデオまたは静止画カメラのようなビデオ・デバイスからビデオ・データを取り込むことによる。図２は、ビデオ・デバイスからビデオを取り込むプロセスを示す。最初に、コンピュータはデバイスからビデオ・データを読み取る（段階２０２）。コンピュータは、ＩＥＥＥ１３９４（Firewire)またはＵＳＢ２のような、従来のデータ・ポートを介してデータを読み取ることができる。ビデオ・データは、ビデオ・カメラからのビデオ映像、カメラからの静止画像、あるいはケーブルまたは衛星ＴＶシステムからのビデオ信号を含むことができる。
【００１１】
次いで、コンピュータは、データを、磁気ハード・ドライブのような記憶装置に格納する（段階２０４）。次に、ビデオ・デバイスから取り込まれる殆どのビデオ・データは、Ｍ．Ｐ．Ｅ．Ｇ．のような従来のフォーマットにしたがってエンコードされるので、コンピュータは、ビデオ・データを表示可能となるようにデコードする（段階２０６）。次に、コンピュータはデコードしたビデオ・データをグラフィック・カードに転送する（段階２０８）。最後に、グラフィック・カードがデコード・データを処理し、このデータを表示する（段階２１０）。
【００１２】
前述のビデオ編集方法では、データを読み返すことが必要となるために、リアル・タイムでのビデオの編集が妨げられる場合がある。更に、コンピュータのリソースを浪費する様々な欠点がある。更に、グラフィック・アプリケーション・プログラミング・インターフェース（例えば、direct X）内のコールはいずれも、オペレーティング・システム（「ＯＳ」）からの最も高い優先度を有することができる。ビデオ・デバイス・ドライバにおけるストール(stall)は「リング０」ストールであるので、インターフェースのコールにより「ＣＰＵ不感時間」が生ずる。言い換えると、ＧＰＵがエフェクトを処理し作成している際、ビデオ・デバイス・ドライバは表示のためにその結果を待つことになる。ビデオ・デバイス・ドライバは優先度が最も高いので、ビデオ・デバイス・ドライバがＧＰＵの処理終了を待っている間、他の全てのコンピュータ・プロセスが遅れることになる。このため、ドライバがＧＰＵからの結果を待っているとき、コンピュータはＣＰＵサイクルを失い、ＣＰＵをデコードのために利用できる可能性が低下する。加えて、グラフィック・カードからのリード・バックは、非同期のリード・バックである可能性があり、リード・バックが終了するまで、ＣＰＵを停止させることになり得る。
【００１３】
従来、殆どのビデオ信号は標準規定（「ＳＤ」）ビデオであり、ストリーム当たりのレートは７２０×４８０×２×３０＝４１ＭＢ／ｓである。しかし、解像度が１０８０ｐである高品位（「ＨＤ」）ビデオの出現により、入来ビデオ・レートは、ストリーム当たり１９２０×１０８０×２×６０＝２５０ＭＢ／ｓとなる場合がある。このために、遥かに多い量のデータがビデオ・キャプチャおよび編集プロセスに流入する。したがって、前述の欠点が悪化することになる。
【００１４】
これらの問題に答えて、リアル・タイムでのビデオ編集に対処するために、様々な特化した製品が作成されている。Matrox Flex 3Dシステムは、特殊グラフィックおよびデコーダ・ボードを用いてリアル・タイム・エフェクトを創造する。Silicon Graphics Ocatane システムは、特殊グラフィック・ハードウェアを用いてリアル・タイム・エフェクトを創造する。Softimage DSシステムは３Ｄでビデオを編集するが、リアル・タイムで再生することはできない。Avid Real Vision HD10は、特殊ハードウェアを利用してリアル・タイム・エフェクトを創造する。しかしながら、これらの製品全てにおいて、特殊ハードウェア・デコーダ、グラフィック・ボード、または特殊コンピュータが、リアル・タイム・ビデオ編集には必要である。このように、従来のパーソナル・コンピュータおよびその他の汎用計算機は、特殊ハードウェアがなければ、リアル・タイム・ビデオを実行することができない。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
したがって、本発明は、関連技術の１つ以上の限界や欠点を未然に回避する、リアル・タイム二次元および三次元、単一品位、および高品位ビデオ・エフェクト用のグラフィック・ハードウェアを用いるためのシステムおよび方法を目的とする。
【課題を解決するための手段】
【００１６】
本発明に係る態様によれば、未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法を実行するための命令を含む方法、システム、およびコンピュータ読み取り可能媒体は、ビデオ・データに付加するエフェクトを作成し、ビデオ・データから事前伸張ビデオ・データを生成し、エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装し、事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装し、デコード・ビデオ・データを生成するために、事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装し、出力ビデオ・データを生成するために、エフェクトをデコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装し、出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装することから成る。
【００１７】
本発明に係る態様によれば、未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法を実行するための命令を含む方法、システム、およびコンピュータ読み取り可能媒体は、ビデオ・データを受信し、エフェクトを作成し、ビデオ・データから事前伸張ビデオ・データを生成し、事前伸張ビデオ・データをビデオ・ハードウェアにアップロードし、デコード・ビデオ・データを生成するために、事前伸張ビデオ・データをデコードし、エフェクトを記述するパラメータを決定し、出力ビデオ・データを生成するために、エフェクトをデコード・ビデオ・データにレンダリングし、出力ビデオ・データを発表することから成る。
【００１８】
本発明に関係する更に別の態様は、部分的に、以下に続く説明において明記されており、部分的に、その説明から自明であり、あるいは本発明の実施によって習得することができる。本発明の態様は、添付した特許請求の範囲において特定的に指摘した要素および組み合わせによって実現および達成することができる。
【００１９】
尚、以上の記載および以下の記載は、例示であり説明に役立てるために過ぎず、特許請求する発明を限定することは全く意図していないことは言うまでもない。
添付図面は、本願に組み込まれその一部をなしており、本発明のある種の態様を例示し、その説明と共に示し、本発明に関連する原理の一部を説明するために用いられる。
【発明を実施するための最良の形態】
【００２０】
これより、本発明の実施形態例について詳細に説明する。その例は添付図面に示されている。可能なときはいつでも、同じまたは同様の要素に言及する際には、同じ参照番号を図面全体にわたって用いることとする。添付図面は、本発明に係る実施形態および実施態様の例を示し、当業者が本発明を実施することを可能にするように十分詳細に説明している。実施形態例の説明は、他の実施形態や実施態様が本発明の範囲に該当しないことを示すのでも暗示するのでもない。他の実施態様も利用可能であり、本発明の範囲から逸脱することなく構造や方法の変更が可能であることは言うまでもない。
全体像
本発明によるプロセスは、ビデオ「エフェクト」の発生、エフェクトのパラメータの供給、サンプルおよびビットマップのアップロード、サンプルのデコード、エフェクトのレンダリング、エフェクトの出力、およびリソースのリリースに関する。計算効率の向上を可能とし、リアル・タイムでエフェクトの導入および編集を可能にするように、ＣＰＵおよびＧＰＵを利用するように、プロセスが調整されている。
【００２１】
計算効率の向上は、処理の直列化を回避することによって達成する。これは、多数のスレッドを利用して計算効率を最大限高めることによって遂行することができる。アップロード、デコード、レンダリング、およびプレゼンテーションからのプロセスの各々は、独立したスレッドによって行われ、エフェクトの発生において並列処理を可能とする。更に、計算効率を高めるにあたって、編集ビデオが完成したときにのみ編集ビデオにアクセスすることにより、ＧＰＵ関連ドライバの停止を回避する。これは、ドライバ・ブラインド(driver blind)をコールすること、またはグラフィック・ハードウェアとＣＰＵとの間の衝突を回避するためにコマンドを遅らせる代わりに、クエリ・プロセスまたは非停止ロック(non stalling lock)を用いることによって遂行することができる。加えて、データをグラフィック・ハードウェアにコピーする際にＣＰＵを用いる代わりに、バス・マスタリングを利用すれば、直接アクセスの遅延を回避することができる。
【００２２】
様々な用語が本明細書全体を通じて利用されている。以下の用語の概説は、各用語の一般的なあらましを規定する。しかしながら、これらの用語のあらましは、用語を規定する例に限定することを意図しているのではなく、当技術分野において認められる同等の意味を全て包含することを意図している。
【００２３】
３Ｄ−サーバ：  ２Ｄ／３Ｄ関連動作およびリソース管理を実行するように構成されているアプリケーション拡張部。
スレッド：アプリケーション、プログラム、またはアプリケーション拡張部が実行する１回のプロセス。
【００２４】
エフェクト：  「３Ｄ−サーバ」が処理することができるあらゆる種類の２Ｄ／３Ｄ効果。例には、１つのビデオ・ストリームを異なるビデオ・ストリームの中に表示する（ピクチャ・イン・ピクチャ、「ＰＩＰ」）、グラフィックをタイトルのようなビデオに追加する、静止画像をビデオに追加する、ビデオ・フレームを繋ぐ、およびフレーム間に推移エフェクトを追加するというような、ビデオの併合が含まれる。
【００２５】
タイムライン：エフェクトを用いて組み合わせることができる多数のビデオまたは静止画データ。
サンプル：タイムラインの一部。例えば、サンプルはビデオ・データの１フレームとすることができる。
【００２６】
サンプル・オブジェクト：エフェクトを作成する際に用いられる情報を収容するメモリ構造。情報は、サンプル、サンプルに対する参照、異なるスレッドが発行するコマンド（スヌーピング）、異なるスレッドが発行するコマンドの結果、および小トンあるスレッドが発行するコマンドのタイミングを含む。
【００２７】
バス・マスタリング：  ＣＰＵとの相互作用が全くなく、システム・メモリから直接データを検索するプロセス。
周辺構成要素相互接続（「ＰＣＩ」）：Intel社がＩ／Ｏ周辺素子をＣＰＵに接続するために最初に設計した高速パラレル・バス。
【００２８】
ＰＣＩエクスプレス：ＰＣＩソフトウェア使用モデルを維持し、物理バスを、多数のレーンを提供する高速（２．５Ｇｂ／ｓ）シリアル・バスと置き換えるＰＣＩの発展バージョン。
【００２９】
アクセラレィティッド・グラフィック・ポート（「ＡＧＰ」）：  グラフィック・カードから主メモリに直接接続を設けるバス。
ＡＧＰメモリ：ＧＰＵがアクセスすることができる、ＣＰＵが使用するためにシステムに内蔵されているメモリ。ＡＧＰまたはＰＣＩエクスプレスを使用しない場合、ＣＰＵは遅い可能性があるデータをコピーする必要がある場合もある。
【００３０】
サーフェイス(surface)：  システムが画像または抽象データ用コンテナと解釈するメモリ・バッファ。サーフェイスは、ＡＧＰメモリまたはローカル・ビデオ・メモリのいずれかに内蔵することができる。
【００３１】
空きサーフェイス・リスト：割り当てられたサーフェイス全てが入っているリスト。異なる種類のサーフェイス毎に異なるリストがあってもよい。「空きリスト」を求めるスレッドのようなプロセスは、新たなサンプルが使用可能になると直ちに開始する。
【００３２】
コマンド・パケット：スレッド間で受け渡されるコマンドを含むデータ構造。
スヌーピング・コマンド：  ダミー・コマンドであり、ＧＰＵおよび３Ｄアプリケーション・プログラム・インターフェース（「ＡＰＩ」）が対応する。プロセスがＧＰＵによって実行されたか否か判定するために、問い合わせることができる。あるいは、スヌーピング・コマンドは、ＡＰＩの「使用中」(in use)クエリを用いるか、または単にある時間（例えば、いつサーフェイスを用いたかに応じて、５ｍｓまで）待機することによって、エミュレートすることができる。
【００３３】
図３は、本発明に関係する態様にしたがって、リアル・タイムでエフェクトを含ませるためにビデオを編集する処理システム上で実行する多数のスレッドを利用する総合プロセス３００を示す。概略的に、プロセス３００はビデオ・タイムラインのサンプルを取り込み、このサンプルを多数のスレッド間で受け渡して処理する。
【００３４】
プロセス３００が開始すると、プロセス３００が用いる各スレッド、即ち、アプリケーション・スレッド、アップロード・スレッド、デコーダ・スレッド、レンダリング・スレッド、プレゼンタ(presenter)スレッド、およびリリース・スレッドを実装する（段階３０１）。次いで、処理システムはサンプルをアプリケーション・スレッドに渡し、ビデオに要求されるエフェクトを作成する（段階３０２）。次いで、アプリケーション・スレッドは、「事前分解ビデオ」(pre-decomposed video)を生成する。事前分解ビデオとは、ＭＰＥＧのようなフォーマットによって圧縮され、データ・パケットまたはその他の静的画像を含むことができるビデオ・データである。次に、処理システムは、サンプルをアップロード・スレッドに渡し、事前分解ビデオをグラフィック・カードにアップロードする（段階３０４）。処理システムにおける処理を減らすために、アップロード・スレッドはバス・マスタリング・プロセスを利用して、ビデオ・データをグラフィック・カードにアップロードしてもよい。
【００３５】
次いで、処理システムはサンプルをデコーダ・スレッドに渡し、ビデオ・データの最終デコードを実行する（段階３０６）。即ち、ＭＰＥＧのようなフォーマットで圧縮することができるビデオ・データをデコードして、生のビデオ・データを得る。
【００３６】
続いて、処理システムはサンプルをレンダリング・スレッドに渡し、エフェクト・データを生成して、エフェクトをレンダリングする（段階３０８）。一旦エフェクトをレンダリングすると、処理システムは、レンダリングしたサンプルをプレゼンタ・スレッドに渡し、レンダリングしたビデオ・サンプルを出力する（段階３１０）。次いで、一旦ビデオを出力したなら、処理システムは用いたリソース全てをリリース・スレッドに渡し、ビデオを編集する際に用いたリソースをリリースする（段階３１２）。
【００３７】
プロセス３００においては、前述の段階のいずれでも、処理システム内にある多数の処理ユニットを利用して、スレッドを並列に実行することができる。例えば、デコーダ・スレッド（段階３０６）およびレンダリング・スレッド（段階３１０）は、処理システム上の異なる処理ユニットによって実行することができる。
【００３８】
プロセス３００では、アップロード、デコード、レンダリング、およびプレゼンテーションからのプロセスの各々が、独立したスレッドによって実行されるので、処理システムは、エフェクトを生成するために、並列で処理を実行することができる。更に、各スレッドがそのそれぞれの処理を完了した後、スレッドはスヌーピング・コマンドを実行して、プロセスが完了したことを示すことができる。更に、各プロセスの完了がわかるので、編集したビデオにアクセスするのを編集したビデオが完了したときにのみにして、ＧＰＵ関連ドライバの停止を回避することによって、計算効率を高めることができる。
環境およびプロセスの一例
図４は、本発明に関係する方法およびシステムを、ある実施形態にしたがって実施することができる環境例４００を示す。環境４００は、ビデオ処理ユニット４０１、ネットワーク４２２、入力デバイス４２４、ビデオ入力デバイス４０２、および出力デバイス４１８を含むことができる。
【００３９】
ビデオ処理ユニット４０１は、パーソナル・コンピュータ、移動計算機（例えば、ＰＤＡ）、移動通信デバイス（例えば、セル・ホーン）、セット・トップ・ボックス（例えば、ケーブルまたは衛星ボックス）、ビデオ・ゲーム・コンソール、スマート・アプライアンス(smart appliance)、またはユーザがビデオ・データを受信し処理することを可能にする構造であればその他のいずれでもよい。一構成例では、ビデオ処理ユニット４０１は、データ・ポート４０４、記憶モジュール４０６、ＣＰＵ４０８、メモリ４１０、グラフィック・モジュール３１２、およびネットワーク・インターフェース４２０を含み、少なくとも１つのバス４０３によって相互接続することができる。
【００４０】
環境４００において、入力デバイス４２４はデータ・ポート４０４に結合されている。入力デバイス４２４は、少なくとも１つのユーザ作動入力モードを含み、コマンドを入力することにより、複数のプロセッサ処理モードから選択することができる。入力デバイス４２４は、キーボード、マウス、および／またはタッチ・スクリーンのような構成要素を含むことができる。加えて、前述のように、入力デバイス４２４は１つ以上のオーディオ・キャプチャ・デバイスを含む。例えば、入力デバイス４２４は、ユーザが可聴発声を入力することができるマイクロフォンを含むことができる。したがって、入力デバイス４２４は、入力された発声を認識し解析する音声認識ソフトウェアを含むこと、またはこれに結合することができる。音声認識ソフトウェアは、メモリ４１０内に位置することができる。入力デバイス４２４は、加えてまたは代わりに、データ読み取りデバイスおよび／または入力ポートを含むこともできる。
【００４１】
ビデオ・入力デバイス４０２は、データ・ポート４０４にも結合されている。ビデオ入力デバイス４０２は、少なくともビデオ・カメラ、静止画カメラ、またはしかるべきビデオ生成デバイスであればその他のいずれでも含むことができる。加えて、ビデオ入力デバイス４０２は、１つ以上のビデオ・キャプチャ・デバイス（例えば、スキャナ）、ビデオ・レコーダ、またはビデオ・データを供給可能ないずれのデバイスでも含むこともできる。
【００４２】
記憶モジュール４０６は、ビデオ処理ユニット４０１に大容量ストレージを設けることができる。記憶モジュール４０６は、種々の構成要素またはサブシステムを用いて実施することができ、例えば、ハード・ドライブ、光ドライブ、ＣＤＲＯＭドライブ、ＤＶＤドライブ、汎用記憶装置、着脱可能記憶装置、および／または情報を格納可能なその他のデバイスを含む。更に、記憶モジュール４０６はビデオ処理ユニット４０１内に示されているが、記憶モジュール４０６はビデオ処理ユニット４０１の外部に実装することもできる。
【００４３】
記憶モジュール４０６は、ビデオ処理ユニット４０１がネットワーク４２２、入力デバイス４２４、およびビデオ入力デバイス４０２と通信するためのプログラム・コードおよび情報を含むことができる。記憶モジュール４０６は、例えば、種々のクライアント・アプリケーションや、Microsoft Corporationが提供するWindowsオペレーティング・システムのようなオペレーティング・システム（ＯＳ）のプログラム・コードを含むことができる。加えて、記憶モジュール４０６は、他のプログラム・ネットワーク通信、カーネルおよびデバイス・ドライバ、コンフィギュレーション情報、ビデオ表示および編集、ならびにビデオ処理ユニット４０１上に実装され得るその他のアプリケーションを含むこともできる。
【００４４】
ビデオ処理ユニット４０１におけるＣＰＵ４０８は、命令を実行するように動作的に構成することができる。ＣＰＵ４０８は、構成要素およびデバイス間で情報の経路を決定するため、そしてメモリ４１０からの命令を実行するために構成することができる。図４は単一のＣＰＵを示すが、ビデオ処理ユニット４０１は複数の汎用プロセッサおよび／または特殊目的プロセッサ（例えば、ＡＳＩＣＳ）を含むこともできる。また、ＣＰＵ４０８は、例えば、１つ以上の以下のものを含むこともできる。コプロセッサ、メモリ、レジスタ、ならびに適宜のその他の処理デバイスおよびシステム。ＣＰＵ４０８は、例えば、Intel Corporationから供給されているPentiumTMプロセッサを用いて実施することができる。
【００４５】
メモリ４１０は、情報を格納することができるシステムおよび／または機構であればいずれでも含むことができる。メモリ４１０は、種々の構成要素および／またはサブシステムによって具体化することができ、ランダム・アクセス・メモリ（「ＲＡＭ」）、リード・オンリ・メモリ（「ＲＯＭ」）、磁気および光記憶エレメント、有機記憶エレメント、オーディオ・ディスク、ならびにビデオ・ディスクを含む。メモリ４１０は、プログラム・コード等のために、ＣＰＵ４０８に主メモリを設けることができる。メモリ４１０は、例えば、Microsoft Corporationが提供するWindowsオペレーティング・システムのようなオペレーティング・システム（ＯＳ）、ネットワーク通信、カーネルおよびデバイス・ドライバ、コンフィギュレーション・メモリ、ビデオ表示および編集、ならびにビデオ処理ユニット４０１上に実装され得るその他のアプリケーションのプログラム・コードを含むことができる。
【００４６】
単一のメモリを示すが、ビデオ処理ユニット４０１にはいずれの数のメモリ・デバイスでも含むことができ、各々は個別の機能を実行するために構成することができる。ビデオ処理ユニット４０１が、記憶モジュール４０６内にインストールされているアプリケーションを実行するとき、ＣＰＵ４０８は記憶モジュール４０６からメモリ４１０にプログラム・コードの少なくとも一部をダウンロードすることができる。ＣＰＵ４０８がプログラム・コードを実行する際、ＣＰＵ４０８はプログラム・コードの追加部分も記憶モジュール４０６から検索することもできる。
【００４７】
グラフィック・モジュール４１２は、ビデオおよびグラフィック・データを処理し、ビデオおよびグラフィック・データを出力することができるシステムおよび／または機構であればいずれでも含むことができる。グラフィック・モジュール４１２は、種々の構成要素および／またはサブシステムによって具体化することができ、ＧＰＵ４１４およびビデオ・メモリ４１６を含む。グラフィック・モジュール４１２は、例えば、ＡＧＰ、ＰＣＩ、またはＰＣＩエクスプレスのような種々の規格に準拠する、しかるべきグラフィック・アクセレレータであればいずれを用いてでも実施することができる。
【００４８】
ＧＰＵ４１４は、ビデオおよびグラフィックに関連する命令を実行するように動作的に構成することができる。ＧＰＵ４１４は、構成要素およびデバイス間で情報の経路を決定するため、そしてＣＰＵ４０８およびメモリ４１０からの命令を実行するために構成することができる。ＧＰＵ４１４は、１つまたは複数の汎用プロセッサおよび／または特殊目的プロセッサ４１４を含むことができる。また、ＧＰＵ４１４は、例えば、コプロセッサ、メモリ、レジスタ、ならびに適宜の処理デバイスおよびシステムの内、１つ以上を含むこともできる。
【００４９】
ビデオ・メモリ４１６は、情報を格納することができるのであればいずれのシステムおよび／または機構でも含むことができる。ビデオ・メモリ４１６は、種々の構成要素および／またはサブシステムによって具体化することができ、ＲＡＭおよび／またはリード・オンリ・メモリＲＯＭを含む。ビデオ・メモリ４１６は、ＧＰＵ４１４に主メモリを提供することができる。単一のメモリを示すが、いずれの数のメモリ・デバイスでもビデオ・メモリ４１６を構成することもでき、各々、別個の機能を実行するように構成することができる。
【００５０】
ビデオ処理ユニット４０１は、ネットワーク・インターフェース４２０を介してネットワーク４２２に接続することができ、ネットワーク・インターフェース４２０は有線および／またはワイヤレス通信リンクを介して動作的に接続することができる。ネットワーク・インターフェース４２０は、ネットワーク・カードおよびイーサネット・カードのような、ネットワーク４２２あるいは外付けイーサネットＬＡＮ(attached Ethernet LAN)、シリアル・ライン等のような他のいずれのネットワークに情報を送出し、ネットワーク４２２から情報を受信するのに適した機構であれば、いずれでもよい。一構成では、ネットワーク・インターフェース４２０は、ビデオ処理ユニット４０１に処理ユニットおよびインターネットと相互作用させることもできる。
【００５１】
ネットワーク４２２は、インターネット、仮想個人ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、広帯域ディジタル・ネットワーク、あるいは２つ以上のノード即ち場所間における通信を可能にするのであれば他のいずれの構造でもよい。ネットワーク４２２は、共有、公用、または私用データ・ネットワークを含むことができ、広域または局在域を包含することができる。ネットワーク４２２は１つ以上の有線および／またはワイヤレス接続を含むことができる。ネットワーク４２２は、Transmission Control and Internet Protocol（ＴＣＰ／ＩＰ）、Asynchronous Transfer Mode（ＡＴＭ）、イーサネット、またはネットワーク一間において通信を制御する他のいずれの手順の集合体というような、通信プロトコルを採用することができる。ある実施形態では、ネットワーク４２２は電話サービスも含むおよび／または提供することもできる。このような実施形態では、ネットワーク４２２は公衆電話交換網（「ＳＴＴＮ」）に含まれる、および／またはこれを利用する (leverage)ことができる。あるいは、ネットワーク４２２は、ボイス・オーバー・インターネット・プロトコル（「ＶｏＩＰ」）技術を利用することもできる。ある実施態様では、ネットワーク４２２は、ＰＳＴＮおよびＶｉＯＰ技術を含む、および／またはこれらを利用することもできる。
【００５２】
出力デバイス４１８は、陰極線管、液晶、発光ダイオード、ガス・プラズマ、またはその他の種類の表示機構によって、グラフィック・モジュール４１２が出力するテキスト、画像、またはその他の種類の情報を視覚的に表示するように構成することができる。例えば、出力デバイス４１８はコンピュータ・モニタであってもよい。加えてまたは代わりに、出力デバイス４１８は、聴取可能に送出するように構成することもできる。例えば、出力デバイス４１８は、スピーカのように、可聴音響をユーザに出力するオーディオ出力デバイスを含むこともできる。したがって、出力デバイス４１８は、合成した人の発声または予め記録した人の発声を生成するように構成したオーディオ・ソフトウェアを含むか、またはこれに結合することができる。このようなソフトウェアは、メモリ４１０内に位置し、相互作用するように構成することができる。出力デバイス４１８は、ユーザの双方向処理を可能とするために、入力デバイス４２４と共に用いるとよい。
【００５３】
前述のように、ビデオ処理ユニット４０１は、図４に示すものよりも多いおよび／または少ない構成要素を備えていてもよく、ビデオ処理ユニット４０１内に内蔵される構成要素の１つ以上は、追加のサービス、データおよび／またはユーザに対処するために、規模が調整可能とするとよい。
【００５４】
図４が示す種々の構成要素は全てビデオ処理ユニット４０１内に位置するが、ビデオ処理ユニット４０１の構成要素の１つ以上は、ネットワーク４２２に結合されている１つ以上の他の処理ユニット（図示せず）、または他の場所に存在することができ、またはこれらの間で分散することもできる。例えば、アプリケーションは他の処理ユニット内に位置することができ、記憶モジュール４０６はビデオ処理ユニット４０１の外部に位置することができ、ネットワーク４２２を通じてビデオ処理ユニット４０１に結合することができる。また、前述のように、いずれの数の処理ユニットでも環境４００に含むことができるのは、言うまでもない。
【００５５】
本発明の代替実施態様では、複数の他の処理ユニット（図示せず）の各々が、それぞれ、ビデオ処理ユニット４０１の全てまたは一部の複製または変形(version)を内蔵することもできる。このような実施態様では、各変形は、互いに排他的にまたは共同して動作することができる。
【００５６】
図５Ａおよび図５Ｂは、本発明に関係する態様にしたがって、エフェクトを作成しビデオを編集するためのプロセス例５００を示す。プロセス５００は、図４に示す環境４００上で実行することができる。
【００５７】
エフェクトおよびビデオ編集は、ビデオ処理ユニット４０１上で実行するアプリケーションに応答して行われる。アプリケーションは、ビデオ処理ユニット４０１のユーザによって、入力デバイス４２４を介して開始することができる。加えて、アプリケーションは、常時ビデオ処理ユニット４０１上で実行し、受信したいずれのビデオに対してもビデオ編集を行うようにすることができる。また、アプリケーションはビデオ・データの入力または受信によって開始することができる。アプリケーション例には、ビデオまたはグラフィック・データおよび３Ｄ−サーバを利用する一人以上のユーザまたはその他のデバイスに特定の機能を実行するように設計された、しかるべき種類のプログラムであればいずれでも含むことができる。アプリケーションは、１つ以上のワード・プロセッサ、データベース・プログラム、インターネット、エクストラネット、および／またはイントラネット・ブラウザあるいはウェブサイト、開発ツール、スケジューリング・ツール、ルーティング・ツール、通信ツール、メニュー・インターフェース、ビデオ表示プログラム、ビデオまたは２Ｄ／３Ｄ効果を含むゲーム・プログラム、ビデオ記録プログラム、ならびにオーディオおよび／またはビデオ編集プログラムを備えることができる。アプリケーションは、いずれの構造的、手続き的、オブジェクト指向、またはその他の種類のプログラミング言語で書かれたデータでも操作する命令の集合体とすることができる。図示のように、アプリケーションは、当該アプリケーションとの双方向処理の利用を容易にするＧＵＩのような、ユーザ・インターフェースを備えることができる。
【００５８】
アプリケーションは、記憶モジュール４０６および／またはメモリ４１０に格納することができる。加えて、アプリケーションは、ネットワーク４２２を通じて、または入力デバイス４２４から受信することができる。アプリケーションが記憶モジュール４０６にインストールされている場合、ＣＰＵ４０８は記憶モジュール４０６からメモリ４１０にプログラム・コードの少なくとも一部をダウンロードすることができる。ＣＰＵ４０８がプログラム・コードを実行すると、ＣＰＵ４０８は記憶モジュール４０６からプログラムの追加部分も検索することができる。
【００５９】
処理するビデオ・データは、環境４００の種々の構成要素によって取得または受信することができる。ビデオ・データは、ビデオ入力デバイス４０２またはネットワーク４２２から取得または受信することができる。加えて、ビデオ・データは、記憶モジュール４０６および／または４１０に格納し、アプリケーションを起動するときにアクセスするか、あるいはアプリケーションを起動するときにこのアプリケーションによって作成することができる。
【００６０】
アプリケーションを起動した後、プロセス５００が開始する。プロセス５００において、１組の多数のスレッドを利用して、種々の編集処理段を実行する。最初に、アプリケーションは、当技術分野では周知の方法で、再生時点に先だって（即ち、エフェクトを表示または利用する予定を立てる前に）エフェクトを作成する（エフェクトは単一のエフェクトまたは多数のエフェクトでもよい）（段階５０２）。アプリケーションは、エフェクトの複雑度または数に応じて、単一および／または多数のアプリケーション・スレッドを用いてエフェクトを作成することができる。エフェクトの一例を上げるとすれば、ディジタル・バーサタイル・ディスク（ＤＶＤ）において別個のビデオ・データまたはメニューを組み合わせるＰＩＰであろう。次いで、アプリケーションはエフェクトのテキスト・ディスクリプションを３Ｄ−サーバにアップロードする（段階５０４）。アプリケーションは、エフェクトをインスタンス化し、解釈し、準備する（段階５０６）。３Ｄ−サーバは、Pinnacle StudioまたはLiquidのようなビデオ編集プログラムの一部である、アプリケーション拡張部としてもよい。
【００６１】
次に、アプリケーションは、タイムラインの一部である事前伸張ビデオ・データを生成または特定する。タイムラインは、最大長動画ビデオまたは単一静止映像のような、いずれの長さのビデオ・データでもよい。アプリケーションは、単一および／または多数のアプリケーション・スレッドを用いて、ビデオ・データを生成または特定することができる。事前伸張ビデオ・データは、ビデオ・パケットおよび／またはタイトルのようなその他の静止画像を含むことができる。タイムラインを異なるトラックに分割することもできる。例えば、最大長動画ビデオでは、各トラックはビデオ・データの１フレームとすることができる。タイムラインにおけるトラック毎に、アプリケーションは、エフェクトを準備するために必要なビデオ・データのサンプル全てを読み出すかまたは生成し、サンプルが圧縮されているか否か判定し、恐らくは部分的にサンプルをデコードし、このサンプルを３Ｄサーバ／アップロード・スレッドに渡す。例えば、アプリケーションは、記憶モジュール４０６またはビデオ入力デバイス４０２からビデオ・データのサンプルを読み出すことができる。加えて、テキスト・データのようなビデオ・データは、アプリケーションが生成してもよい。
【００６２】
アプリケーションは、読み取ったまたは生成した最初のサンプルのためにサンプル・バッファを割り当てる（段階５０７）。サンプル・バッファは、メモリ４１０または記憶モジュール４０６のメモリに内蔵することができる。次いで、アプリケーションは、サンプルが圧縮されているか否か判定を行う（段階５０８）。サンプルが圧縮されている場合、アプリケーションは部分的に圧縮サンプルをデコードすることができる。
【００６３】
サンプルが圧縮されている場合、アプリケーションはサンプルをデコード・バッファに読み込む（段階５０９）。デコード・バッファは、メモリ４１０または記憶モジュール４０６のメモリに内蔵することができる。次いで、アプリケーションは部分的にデコードしたサンプルをサンプル・バッファに読み込む（段階５１０）。次に、アプリケーションはサンプル・バッファをアップロード・スレッドに渡す（段階５１３）。
【００６４】
サンプルが圧縮されていない場合、アプリケーションはサンプルをサンプル・バッファに読み込む（段階５１２）。次に、アプリケーションはサンプル・バッファをアップロード・スレッドに渡す（段階５１３）。
【００６５】
作成したエフェクトは１つよりも多いサンプルを有する場合がある。アプリケーションは、全てのサンプルを読み終えたか否か判定を行う（段階５１４）。全てのサンプルを読み終えていない場合、アプリケーションは、サンプル・バッファの割り当て、およびサンプルが圧縮されているか否かの判定を繰り返す（段階５０７〜５１３）。全てのサンプルを読み終わり、アップロード・スレッドに渡した後、アップロード・スレッドはアップロード処理に移る。
【００６６】
次に、サンプル・オブジェクトをグラフィック・ハードウェア４１２のビデオ・メモリ４１６にアップロードする。サンプル・オブジェクトは、初期状態では、ＡＧＰメモリ・サーフェイスを含む。サーフェイスの可用性およびステータスによっては、サンプル・オブジェクトの割り当てには十分な量の時間が必要となる場合がある。サーフェイスの可用性およびステータスは、サーフェイスの付随するスヌーピング・コマンドを用いてチェックすることができる。スヌーピング・コマンドは、ＧＰＵおよび３Ｄアプリケーション・プログラム・インターフェース（「ＡＰＩ」）が対応するダミー・コマンドでもよく、ＧＰＵがプロセスを実行したか否か判定するために問い合わせることができる。あるいは、スヌーピング・コマンドは、ＡＰＩの「使用中」問い合わせ(in use inquire)を用いて、または単にある時間待機する（例えば、サーフェイスをいつ用いたかに応じて５ｍｓまで）ことによってエミュレートしてもよい。
【００６７】
アップロード・プロセスは、３Ｄ−サーバのアップロード・スレッドによって実行することができる。３Ｄサーバ／アップロード・スレッドは、アプリケーションからのコマンドを待つ（段階５１５）。アップロード・スレッドがサンプル・オブジェクト、コマンド・パケット、およびサンプル・バッファを得ると直ぐに、アップロード・スレッドの仕様に必要なビデオ・メモリ・サーフェイスが利用可能となるまで、アップロード・スレッドは待機する（段階５１６）。例えば、サンプル・オブジェクトは、ある量のメモリまたは色空間形式(color space type)を必要とする場合がある。ビデオ・メモリ４１６において、必要なサイズまたは色空間形式が得られない場合、アップロード・スレッドは、メモリが利用可能となるまで待機する。次に、アップロード・スレッドは、ビデオ・メモリ・サーフェイスをチェックし、保留中の動作があるか調べる（段階５１８）。サーフェイスをチェックするには、未処理のスヌーピング・コマンドまたは３Ｄ  ＡＰＩの「使用中」問い合わせを用いればよい。次いで、サーフェイスの準備ができたなら、アップロード・スレッドはアップロード・コマンドを発行する（段階５２０）。時間前に予めエフェクトを準備しているので、グラフィック・モジュール４１２はサンプル・オブジェクトのアップロードを待っていない。例えば、アップロード・スレッドは、バス・マスタリング・プロセスを用いて、データをビデオ・メモリ・サーフェイスにコピーすることができる。更に、アップロード・スレッドは、アップロード・コマンドの実行時点を書き留め、スヌーピング・コマンドを発行し、両メモリ・サーフェイス上に書き留める（段階５２２）。
【００６８】
次いで、アップロード・スレッドは、サンプル・オブジェクトに収容されているサンプルが圧縮されているか否か判定を行う（段階５２３）。例えば、ビデオ・データは、ＭＰＥＧのような標準フォーマットを用いて圧縮することができる。サンプル・オブジェクトに収容されているビデオ・データが伸張を必要としない場合、アップロードはサンプル・オブジェクトをアップロードしたとして通知する（段階５２４）。次いで、事前に伸張したビデオ・データを収容した新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加し、サンプル・オブジェクトおよびコマンド・パケットをレンダリング・スレッドに渡す（段階５２５）。次いで、アップロード・スレッドは、ＡＰＧメモリ・サーフェイスが他の目的に用いられていなければ、これを空きサーフェイス・リストの末尾に入れることにより、いずれの待機中のプロセスをもリリースする（段階５２６）。
【００６９】
サンプルがデコードを必要とする場合、デコーダ・スレッドを用いてデータを伸張する。アップロード・スレッドは、サンプル・オブジェクトおよびコマンド・パケットをデコーダ・スレッド・キューに入れる（段階５２８）。次いで、アップロード・スレッドは、ＡＰＧメモリ・サーフェイスが他の目的に用いられていなければ、これを空きサーフェイス・リストの末尾に入れることにより、いずれの待機中のプロセスをもリリースする（段階５３０）。
【００７０】
次いで、アップロード・スレッドは段階５１６に戻り、アップロードを必要とする次のサンプル・オブジェクトに対しての処理を開始する。
図６は、本発明に関係する態様にしたがって、デコーダ・スレッドによってサンプル・データをデコードするプロセスを示す。デコード・プロセスは、３Ｄ−サーバのデコーダ・スレッドによって実行することができる。デコーダ・スレッドは連続的に実行し、キュー内に置くサンプル・オブジェクトおよびコマンド・パケットを待つ。最初に、デコーダ・スレッドはキューをチェックして、サンプル・オブジェクトおよびコマンド・パケットがあるか否か調べる（段階６０２）。サンプル・オブジェクトおよびコマンド・パケットがキューの中にある場合、デコーダ・スレッドはデコード・プロセスに進む。ない場合、デコーダ・スレッドはサンプル・オブジェクトおよびコマンド・パケットを待つ。また、デコード・スレッドは、スヌーピング・コマンドが発行され実行されるまで待機してもよい。あるいは、デコーダ・スレッドはある時間期間待機する。例えば、この時間期間は、現時点およびコマンドが発行された時点の何らかの関数としてもよい（例えば、ｍａｘ（０．５ｍｓ−<現時点＞−＜コマンドが発行された時点＞）。次いで、デコーダ・スレッドは、デコードしたデータのために、新たなビデオ・メモリ・サーフェイスを取得する（段階６０４）。新たなビデオ・メモリ・サーフェイスは、例えば、ビデオ・メモリ４１６に含まれていてもよい。例えば、サーフェイスは未圧縮カラー・フォーマットと一致していてもよい。
【００７１】
次いで、サーフェイスには未処理のアクションがあってはならないので、デコーダ・スレッドは、新たなビデオ・メモリ・サーフェイスが何らかの未処理のアクションを収容しているか否か、スヌーピング・コマンドを発行することによって判定することができる（段階６０６）。次いで、デコーダ・スレッドはコマンドを発行し、デコード・プロセスを実行する（段階６０８）。デコード・プロセスは、「ｉＤＣＴ」（逆離散余弦変換）または「ｉＤＣＴ＋動き補償」のいずれかを含むことができる。ｉＤＣＴ／動き補償は、殆どのＧＰＵ上では別個のハードウェア・ユニットであり、ＧＰＵ４１４に含めることができ、これによってデコード・プロセスを３Ｄコマンドと並行して実行することが可能となる。必要であれば、これらのコマンドを発行した後に、コマンド時間およびスヌーピング・コマンドを発行し、両サーフェイスに書き留める（段階６１０）。次いで、デコーダ・スレッドはサンプル・オブジェクトをアップロードしたものとして通知する（段階６１１）。
【００７２】
最後に、デコーダ・スレッドは新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加し、デコーダ・スレッドは、事前伸張ビデオを収容したビデオ・メモリ・サーフェイスを、空きバッファ・リストの末尾に入れ（この種のサーフェイスを待っているプロセスをリリースする）、新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加する（段階６１２）。加えて、サンプル・オブジェクトおよびコマンド・パケットはレンダリング・スレッドに渡される（段階６１２）。デコーダ・スレッドは、次いで、キューをチェックし、新たなサンプル・オブジェクトに対してデコード処理を開始する。
【００７３】
アップロードおよびデコードを実行している間、アプリケーション・スレッドはある時点に対するエフェクト・パラメータを決定し続けることができる。アプリケーション・スレッドの決定は、必要なエフェクト全てを収集し、時間依存データを計算し、エフェクトのために使用したサンプル・オブジェクトを決定することを含めばよい（図５の段階５２８）。次いで、アプリケーションはこれらのエフェクト・パラメータをレンダリング・スレッドに渡し、これに応答して、レンダリング・スレッドは出力サンプル・オブジェクトを返す。次いで、出力サンプル・オブジェクトは、エフェクトを有するサンプル・オブジェクトがいつ完了するのかを判定するための参照として用いることができる（段階５３０）。３Ｄ−サーバは出力サンプル・オブジェクトのためにどの物理目標サーフェイスを用いるか規定していないので、出力サンプル・オブジェクトはプロキシのみである。
【００７４】
次に、レンダリング・スレッドは、エフェクトをレンダリングする。図７は、本発明の態様にしたがって、エフェクトをレンダリングするプロセスを示す。レンダリング・プロセスは、３Ｄ−サーバのレンダリング・スレッドによって実行することができる。サンプル・オブジェクトおよびコマンド・パケットをレンダリング・スレッドに渡し、レンダリング・キューに入れる。レンダリング・キューは、サンプル・オブジェクトおよびコマンド・パケットがあるか否かレンダリング・キューをチェックする（段階７０１）。サンプル・オブジェクトおよびコマンド・パケットがキューの中にある場合、レンダリング・スレッドはレンダリング・プロセスに進む。ない場合、レンダリング・スレッドはサンプル・オブジェクトおよびコマンド・パケットを待つ。加えて、レンダリング・スレッドは、レンダリングするエフェクトの種類に応じて、レンダリングを実行する前に、数個のサンプル・オブジェクトおよびコマンド・パケットを待つ場合もある。
【００７５】
レンダリング・スレッドは、アプリケーションが供給するエフェクト・パラメータに応じて、用いる各エフェクトを準備する（段階７０２）。次に、レンダリング・スレッドはターゲット・メモリ・サーフェイスを出力サンプル・オブジェクトに割り当てる（段階７０４）。ターゲット・メモリ・サーフェイスは、例えば、ビデオ・メモリ４１６に含むことができる。ターゲット・メモリ・サーフェイスは、メモリ４１０に含むこともできる。次いで、レンダリング・スレッドは、エフェクトに対するサンプル・オブジェクトがレンダリングの準備ができるまで待機する（段階７０６）。次いで、レンダリング・スレッドは、エフェクト・パラメータに応じて、エフェクトをレンダリングする（段階７０８）。レンダリング・スレッドは、スヌーピング・コマンドを発行し、これをサンプル・オブジェクトに付加する（段階７１０）。次いで、レンダリング・スレッドは、サーフェイスおよびリソースをリリースするプロセスを可能にするために、コマンド・パケットをリリース・スレッドに渡す（段階７１２）。
【００７６】
一旦ビデオを表示することが必要となると、スヌーピング・コマンドを実行し、３Ｄ−サーバは出力サンプル・オブジェクトおよびコマンドをプレゼンタ・スレッドに渡し、これらはプレゼンテーション用キューに入れられる（段階７１４）。スヌーピング・コマンドは各スレッドによって実行されているので、ビデオ処理ユニット４０１は、各プロセス・スレッドがその指定されたタスクを完了していることを知っている。レンダリング・スレッドは、次に、キューをチェックし、新たなサンプル・オブジェクトに対してレンダリング処理を開始する。
【００７７】
図８は、本発明の態様にしたがって、エフェクトを含むビデオを発表するプロセスを示す。プレゼンテーション・プロセスはプレゼンタ・スレッドによって実行することができる。プレゼンタ・スレッドは、３Ｄサーバによって実装されるスレッドとすることができ、あるいはアプリケーションによって実装することもできる。最初に、出力サンプル・オブジェクトおよびコマンド・パケットがあるか否かキューをチェックする（段階８０２）。ビデオがオーディオ・データも必要とする場合、同期オーディオ／ビデオの発表ができるようにプレゼンタ・キューを設定すればよい。次に、出力サンプルおよびコマンド・パケットが利用可能であれば、出力コマンド・パケットをプレゼンタ・スレッドに渡す（段階８０４）。次いで、プレゼンタ・スレッドはプレゼンテーション方法を実行し、予定した時点において出力サンプル・オブジェクトを発表する（段階８０６）。例えば、エフェクトを含むビデオをグラフィック・モジュール４１２に渡し、出力デバイス４１８上で発表することができる。次に、プレゼンタ・スレッドは出力サンプル・オブジェクトを再度出力サーフェイスの空きリストに入れる（段階８０８）。
【００７８】
図９は、本発明の態様にしたがって、リソースをリリースするプロセスを示す。リリース・プロセスは、リリース・スレッドによって実行することができる。リリース・スレッドは、３Ｄサーバによって実装されるスレッドとすることができ、あるいはアプリケーションによって実装することもできる。最後に、３Ｄ−サーバは使用したサンプル・オブジェクト全ておよびその他のリソースを空きサーフェイス・リストに入れ、他の待機プロセスをリリースする（段階９０２）。リリース・プロセスは、３Ｄサーバのリリース・スレッドによって実行することができる。プロセス５００は、タイムラインの各エフェクトが作成され、エフェクトを含むタイムラインの発表が終わるまで継続する。
【００７９】
プロセス５００について、１つのエフェクトを有するビデオ・フレームに関して説明した。しかしながら、プロセス５００は、多数のエフェクトを有する多数のビデオ・フレームに対して実行することもできる。更に、再生時点に先だってエフェクトを作成するので、アプリケーションおよび３Ｄ−サーバは  現ビデオ再生時点に合わせてビデオ・データを処理し出力するためにスレッドを同時に実行する。
【００８０】
本発明の他の実施形態は、ここに開示した本発明の明細書の検討および実施によって、当業者には明白となろう。本明細書および例は、例示として見なされるに過ぎず、本発明の真の範囲および主旨は特許請求の範囲によって示されるものとする。
【図面の簡単な説明】
【００８１】
【図１】図１は、従来のビデオ編集プロセスを示すフローチャートである。
【図２】図２は、従来のビデオ・キャプチャ・プロセスを示すフローチャートである。
【図３】図３は、本発明に関係する態様によるビデオ・エフェクト・プロセスを示すフローチャートである。
【図４】図４は、本発明に関係する態様による処理を実行可能な処理環境を示す図である。
【図５Ａ】図５Ａは、本発明に関係する態様によるビデオ・プロセスを示すフローチャートである。
【図５Ｂ】図５Ｂは、本発明に関係する態様によるビデオ・プロセスを示すフローチャートである。
【図６】図６は、図５に示すビデオ・プロセスと共に実行するデコード・プロセスを示すフローチャートである。
【図７】図７は、図５に示すビデオ・プロセスと共に実行するレンダリング・プロセスを示すフローチャートである。
【図８】図８は、図５に示すビデオ・プロセスと共に実行するプレゼンテーション・プロセスを示すフローチャートである。
【図９】図９は、図５に示すビデオ・プロセスと共に実行する解除プロセスを示すフローチャートである。
【図１】
2007534279.tif 000003
【図２】
2007534279.tif 000004
【図３】
2007534279.tif 000005
【図４】
2007534279.tif 000006
【図５Ａ】
2007534279.tif 000007
【図５Ｂ】
2007534279.tif 000008
【図６】
2007534279.tif 000009
【図７】
2007534279.tif 000010
【図８】
2007534279.tif 000011
【図９】
2007534279.tif 000012
【手続補正書】
【提出日】平成19年7月26日(2007.7.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法であって、
アプリケーション・スレッド、アップロード・スレッド、デコード・スレッド、レンダリング・スレッド、およびプレゼンタ・スレッドを実装するステップと、
前記ビデオ・データに追加する前記エフェクトを作成するために前記ビデオ・データを前記アプリケーション・スレッドに渡し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするために、前記事前伸張ビデオ・データを前記アップロード・スレッドに渡すステップと、
前記事前伸張ビデオ・データをデコードしてデコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データを前記デコード・スレッドに渡すステップと、
前記デコード・ビデオ・データ内に前記エフェクトをレンダリングして出力ビデオ・データを生成するために、前記デコード・ビデオ・データを前記レンダリング・スレッドに渡すステップと、
前記出力ビデオ・データを発表するために、前記出力ビデオ・データを前記プレゼンタ・スレッドに渡すステップと、
を備えている、方法。
【請求項２】
請求項１記載の方法であって、デコードおよびレンダリングにおいて利用したリソースをリリースするためのリリース・スレッドを実装するステップを備えている、方法。
【請求項３】
請求項１記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、方法。
【請求項４】
請求項１記載の方法であって、更に、各スレッド実施のタイミングを決定するためにスヌーピング・コマンドを発行するステップを備えている、方法。
【請求項５】
請求項１記載の方法において、前記アプリケーション・スレッドは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を実行する、方法。
【請求項６】
請求項５記載の方法において、前記アップロード・スレッドは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第１スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を実行する、方法。
【請求項７】
請求項６記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、方法。
【請求項８】
請求項６記載の方法において、前記デコード・スレッドは、
第２スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を実行する、方法。
【請求項９】
請求項８記載の方法において、前記アプリケーション・スレッドは、更に、
前記アプリケーションにおいて、前記エフェクトに対してエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
を実行する、方法。
【請求項１０】
請求項９記載の方法において、前記出力サンプル・オブジェクトはプロキシである、方法。
【請求項１１】
請求項９記載の方法において、前記レンダリング・スレッドは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を実行する、方法。
【請求項１２】
請求項１１記載の方法において、前記プレゼンタ・スレッドは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を実行する、方法。
【請求項１３】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理するシステムであって、
前記ビデオ・データに付加する前記エフェクトを作成し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装する手段と、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装する手段と、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装する手段と、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装する手段と、
前記出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装する手段と、
を備えている、システム。
【請求項１４】
請求項１３記載のシステムであって、デコードおよびレンダリングにおいて利用したリソースをリリースするためにリリース・スレッドを実装する手段を備えている、システム。
【請求項１５】
請求項１３記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、システム。
【請求項１６】
請求項１３記載のシステムであって、更に、各スレッド実装のタイミングを決定するために、スヌーピング・コマンドを発行する手段を備えている、システム。
【請求項１７】
請求項１３記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、
前記ビデオ・データのサンプルを読み取る手段と、
前記サンプルにサンプル・オブジェクトを割り当てる手段と、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードする手段と、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送する手段と、
を備えている、システム。
【請求項１８】
請求項１７記載のシステムにおいて、前記アップロード・スレッドを実装する前記手段は、
ビデオ・メモリ・サーフェイスを取得する手段と、
第１スヌーピング・コマンドを発行する手段と、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする手段と、
を備えている、システム。
【請求項１９】
請求項１８記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、システム。
【請求項２０】
請求項１８記載のシステムにおいて、前記デコード・スレッドを実装する前記手段は、
第２スヌーピング・コマンドを発行する手段と、
新たなビデオ・メモリ・サーフェイスを取得する手段と、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定する手段と、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行する手段と、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加する手段と、
を備えている、システム。
【請求項２１】
請求項２０記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、更に、
前記アプリケーションにおいて、前記エフェクトに対するエフェクト・パラメータを決定する手段と、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡す手段と、
を備えている、システム。
【請求項２２】
請求項２１記載のシステムにおいて、前記出力サンプル・オブジェクトはプロキシである、システム。
【請求項２３】
請求項２１記載のシステムにおいて、前記レンダリング・スレッドを実装する前記手段は、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てる手段と、
前記エフェクトをレンダリングする手段と、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納する手段と、
を備えている、システム。
【請求項２４】
請求項２３記載のシステムにおいて、前記プレゼンタ・スレッドを実装する前記手段は、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れる手段と、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行する手段と、
を備えている、システム。
【国際調査報告】
2007534279.tif 000013
2007534279.tif 000014