説明

リアル・タイム二次元および三次元、単一品位および高品位ビデオ・エフェクト用グラフィック・ハードウェアを使用するためのシステムおよび方法

【課題】特殊ハードウェアがなければリアル・タイム・ビデオを実行することができないという従来技術の欠点を解消するシステムおよび方法を提供する。
【解決手段】単一品位または高品位ビデオ・データを処理し、未来時点において生ずる二次元および三次元エフェクトを生成する命令を含む方法、システム、およびコンピュータ読み取り可能媒体。エフェクトは、多数のスレッドを用いて、ビデオ処理システムにおいて作成される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的には、ビデオおよびグラフィック処理システムに関し、更に特定すれば、リアル・タイム二次元および三次元、単一品位、および高品位ビデオ・エフェクト用のグラフィック・ハードウェアを使用するためのシステムおよび方法に関する。
【背景技術】
【0002】
今日の電子機器の価格低下および種々の技術的進歩により、高い技術の電子機器が大多数の消費者にも入手可能となっている。これは、特に、ビデオ処理、記録、取り込み(capturing)、および編集の分野に該当する。パーソナル・コンピュータが普及しているので、消費者はビデオ・データをパーソナル・コンピュータ上で容易に目視および記録することや、ビデオ・デバイスからビデオ・データを取り込むことができる。更に、パーソナル・コンピュータの処理速度向上により、消費者は、パーソナル・コンピュータ上でエフェクトの追加やグラフィックの追加というようなビデオ・データの編集を行い、エフェクトまたはグラフィクスを有するビデオを視認することができる。
【0003】
殆どのパーソナル・コンピュータは、中央演算装置(「CPU」)およびグラフィック・カードの双方を有する。最近のグラフィック・カードは、グラフィック処理ユニット(「GPU」)およびビデオ・メモリを、CPUおよびシステム・メモリとは別個に含んでいる。従来、ビデオ編集は、多数の入力ストリームをビデオまたは静止画からタイムライン上で受信し、これらのストリームをエフェクト(例えば、推移(transition)効果またはクリップ効果)と組み合わせて単一のビデオ出力ファイルを作成することから成る。このプロセスは、CPUまたはGPUを利用して様々なタスクを実行する。
【0004】
図1は、従来のビデオ編集プロセス(100)の一例を示す。最初に、コンピュータは、入来するビデオ・データを受信し、CPUを利用してデコードする(段階102)。例えば、ビデオは標準的なフォーマット(例えば、MPEG)で格納すること、または取り込むことができ、処理の前にデコードが必要となる。デコード方式は複雑である可能性があるので、デコード・プロセスはCPUサイクルにおいて非常に大きな負担となる。
【0005】
次に、コンピュータは1フレームの結果の中に付帯するエフェクトを順次処理し、最も望ましい設定を決定する(段階104)。このステップの間、GPU/CPUエフェクトの混合を回避するために、コンピュータはGPUエフェクトをCPUエフェクトと置き換える、またはその逆を行い、可能であれば互換性のあるエフェクトに置き換えることができる。次いで、エフェクトの連続処理が、メモリのようなリソースに過剰な負担をかける場合、コンピュータはタスクを分割し、エフェクトを順次処理し複雑度を低下させる(段階106)。
【0006】
次に、コンピュータは、デコードしたビデオ・データをグラフィック・カードに転送し、GPUによって処理を行う(段階108)。次いで、デコードしたビデオおよび順次処理したエフェクトから、グラフィック・カードが、フレームのレンダリングに必要となる中間データ、例えば、ポリゴン・モデルやタイムライン情報を作成する(段階110)。
【0007】
次に、CPUは、伸張したビデオ・データおよびエフェクトの中間結果をレンダリングする(段階112)。次いで、コンピュータはCPU/GPUの混合が必要か否か判定を行う(段階114)。混合が必要な場合、CPUはレンダリングした中間結果をリード・バックして処理する。このようにする場合、プロセスは段階108に戻る。しかしながら、リード・バックが必要な場合、リアル・タイムのビデオ編集は不可能となる。
【0008】
全ての処理を実行した後、エフェクトを含む完結ビデオ・データを表示する(段階116)。例えば、エフェクトを含むビデオをコンピュータのモニタ上に表示することができる。
【0009】
場合によっては、編集してエフェクトを入れたデータをセーブしなければならないこともある(段階118)。例えば、編集したデータが、背景にレンダリングするコンテンツとして必要となる場合がある。編集ビデオ・データをセーブする必要がある場合、データをCPUにリード・バックする(段階120)。リード・バックが必要となる場合、リアル・タイムのビデオ編集は不可能となる。次いで、コンピュータはリード・バックしたビデオ・データを圧縮するが、これはCPUを集中的に用いる(段階122)。圧縮されたデータは、後に使用するために格納することができる。
【0010】
前述のビデオ編集プロセスでは、段階102において受信したビデオ・データは、様々な方法で得ることができる。データを得る方法の1つは、コンピュータによって、ディジタル・ビデオまたは静止画カメラのようなビデオ・デバイスからビデオ・データを取り込むことによる。図2は、ビデオ・デバイスからビデオを取り込むプロセスを示す。最初に、コンピュータはデバイスからビデオ・データを読み取る(段階202)。コンピュータは、IEEE1394(Firewire)またはUSB2のような、従来のデータ・ポートを介してデータを読み取ることができる。ビデオ・データは、ビデオ・カメラからのビデオ映像、カメラからの静止画像、あるいはケーブルまたは衛星TVシステムからのビデオ信号を含むことができる。
【0011】
次いで、コンピュータは、データを、磁気ハード・ドライブのような記憶装置に格納する(段階204)。次に、ビデオ・デバイスから取り込まれる殆どのビデオ・データは、M.P.E.G.のような従来のフォーマットにしたがってエンコードされるので、コンピュータは、ビデオ・データを表示可能となるようにデコードする(段階206)。次に、コンピュータはデコードしたビデオ・データをグラフィック・カードに転送する(段階208)。最後に、グラフィック・カードがデコード・データを処理し、このデータを表示する(段階210)。
【0012】
前述のビデオ編集方法では、データを読み返すことが必要となるために、リアル・タイムでのビデオの編集が妨げられる場合がある。更に、コンピュータのリソースを浪費する様々な欠点がある。更に、グラフィック・アプリケーション・プログラミング・インターフェース(例えば、direct X)内のコールはいずれも、オペレーティング・システム(「OS」)からの最も高い優先度を有することができる。ビデオ・デバイス・ドライバにおけるストール(stall)は「リング0」ストールであるので、インターフェースのコールにより「CPU不感時間」が生ずる。言い換えると、GPUがエフェクトを処理し作成している際、ビデオ・デバイス・ドライバは表示のためにその結果を待つことになる。ビデオ・デバイス・ドライバは優先度が最も高いので、ビデオ・デバイス・ドライバがGPUの処理終了を待っている間、他の全てのコンピュータ・プロセスが遅れることになる。このため、ドライバがGPUからの結果を待っているとき、コンピュータはCPUサイクルを失い、CPUをデコードのために利用できる可能性が低下する。加えて、グラフィック・カードからのリード・バックは、非同期のリード・バックである可能性があり、リード・バックが終了するまで、CPUを停止させることになり得る。
【0013】
従来、殆どのビデオ信号は標準規定(「SD」)ビデオであり、ストリーム当たりのレートは720×480×2×30=41MB/sである。しかし、解像度が1080pである高品位(「HD」)ビデオの出現により、入来ビデオ・レートは、ストリーム当たり1920×1080×2×60=250MB/sとなる場合がある。このために、遥かに多い量のデータがビデオ・キャプチャおよび編集プロセスに流入する。したがって、前述の欠点が悪化することになる。
【0014】
これらの問題に答えて、リアル・タイムでのビデオ編集に対処するために、様々な特化した製品が作成されている。Matrox Flex 3Dシステムは、特殊グラフィックおよびデコーダ・ボードを用いてリアル・タイム・エフェクトを創造する。Silicon Graphics Ocatane システムは、特殊グラフィック・ハードウェアを用いてリアル・タイム・エフェクトを創造する。Softimage DSシステムは3Dでビデオを編集するが、リアル・タイムで再生することはできない。Avid Real Vision HD10は、特殊ハードウェアを利用してリアル・タイム・エフェクトを創造する。しかしながら、これらの製品全てにおいて、特殊ハードウェア・デコーダ、グラフィック・ボード、または特殊コンピュータが、リアル・タイム・ビデオ編集には必要である。このように、従来のパーソナル・コンピュータおよびその他の汎用計算機は、特殊ハードウェアがなければ、リアル・タイム・ビデオを実行することができない。
【発明の開示】
【発明が解決しようとする課題】
【0015】
したがって、本発明は、関連技術の1つ以上の限界や欠点を未然に回避する、リアル・タイム二次元および三次元、単一品位、および高品位ビデオ・エフェクト用のグラフィック・ハードウェアを用いるためのシステムおよび方法を目的とする。
【課題を解決するための手段】
【0016】
本発明に係る態様によれば、未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法を実行するための命令を含む方法、システム、およびコンピュータ読み取り可能媒体は、ビデオ・データに付加するエフェクトを作成し、ビデオ・データから事前伸張ビデオ・データを生成し、エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装し、事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装し、デコード・ビデオ・データを生成するために、事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装し、出力ビデオ・データを生成するために、エフェクトをデコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装し、出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装することから成る。
【0017】
本発明に係る態様によれば、未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法を実行するための命令を含む方法、システム、およびコンピュータ読み取り可能媒体は、ビデオ・データを受信し、エフェクトを作成し、ビデオ・データから事前伸張ビデオ・データを生成し、事前伸張ビデオ・データをビデオ・ハードウェアにアップロードし、デコード・ビデオ・データを生成するために、事前伸張ビデオ・データをデコードし、エフェクトを記述するパラメータを決定し、出力ビデオ・データを生成するために、エフェクトをデコード・ビデオ・データにレンダリングし、出力ビデオ・データを発表することから成る。
【0018】
本発明に関係する更に別の態様は、部分的に、以下に続く説明において明記されており、部分的に、その説明から自明であり、あるいは本発明の実施によって習得することができる。本発明の態様は、添付した特許請求の範囲において特定的に指摘した要素および組み合わせによって実現および達成することができる。
【0019】
尚、以上の記載および以下の記載は、例示であり説明に役立てるために過ぎず、特許請求する発明を限定することは全く意図していないことは言うまでもない。
添付図面は、本願に組み込まれその一部をなしており、本発明のある種の態様を例示し、その説明と共に示し、本発明に関連する原理の一部を説明するために用いられる。
【発明を実施するための最良の形態】
【0020】
これより、本発明の実施形態例について詳細に説明する。その例は添付図面に示されている。可能なときはいつでも、同じまたは同様の要素に言及する際には、同じ参照番号を図面全体にわたって用いることとする。添付図面は、本発明に係る実施形態および実施態様の例を示し、当業者が本発明を実施することを可能にするように十分詳細に説明している。実施形態例の説明は、他の実施形態や実施態様が本発明の範囲に該当しないことを示すのでも暗示するのでもない。他の実施態様も利用可能であり、本発明の範囲から逸脱することなく構造や方法の変更が可能であることは言うまでもない。
全体像
本発明によるプロセスは、ビデオ「エフェクト」の発生、エフェクトのパラメータの供給、サンプルおよびビットマップのアップロード、サンプルのデコード、エフェクトのレンダリング、エフェクトの出力、およびリソースのリリースに関する。計算効率の向上を可能とし、リアル・タイムでエフェクトの導入および編集を可能にするように、CPUおよびGPUを利用するように、プロセスが調整されている。
【0021】
計算効率の向上は、処理の直列化を回避することによって達成する。これは、多数のスレッドを利用して計算効率を最大限高めることによって遂行することができる。アップロード、デコード、レンダリング、およびプレゼンテーションからのプロセスの各々は、独立したスレッドによって行われ、エフェクトの発生において並列処理を可能とする。更に、計算効率を高めるにあたって、編集ビデオが完成したときにのみ編集ビデオにアクセスすることにより、GPU関連ドライバの停止を回避する。これは、ドライバ・ブラインド(driver blind)をコールすること、またはグラフィック・ハードウェアとCPUとの間の衝突を回避するためにコマンドを遅らせる代わりに、クエリ・プロセスまたは非停止ロック(non stalling lock)を用いることによって遂行することができる。加えて、データをグラフィック・ハードウェアにコピーする際にCPUを用いる代わりに、バス・マスタリングを利用すれば、直接アクセスの遅延を回避することができる。
【0022】
様々な用語が本明細書全体を通じて利用されている。以下の用語の概説は、各用語の一般的なあらましを規定する。しかしながら、これらの用語のあらましは、用語を規定する例に限定することを意図しているのではなく、当技術分野において認められる同等の意味を全て包含することを意図している。
【0023】
3D−サーバ: 2D/3D関連動作およびリソース管理を実行するように構成されているアプリケーション拡張部。
スレッド:アプリケーション、プログラム、またはアプリケーション拡張部が実行する1回のプロセス。
【0024】
エフェクト: 「3D−サーバ」が処理することができるあらゆる種類の2D/3D効果。例には、1つのビデオ・ストリームを異なるビデオ・ストリームの中に表示する(ピクチャ・イン・ピクチャ、「PIP」)、グラフィックをタイトルのようなビデオに追加する、静止画像をビデオに追加する、ビデオ・フレームを繋ぐ、およびフレーム間に推移エフェクトを追加するというような、ビデオの併合が含まれる。
【0025】
タイムライン:エフェクトを用いて組み合わせることができる多数のビデオまたは静止画データ。
サンプル:タイムラインの一部。例えば、サンプルはビデオ・データの1フレームとすることができる。
【0026】
サンプル・オブジェクト:エフェクトを作成する際に用いられる情報を収容するメモリ構造。情報は、サンプル、サンプルに対する参照、異なるスレッドが発行するコマンド(スヌーピング)、異なるスレッドが発行するコマンドの結果、および小トンあるスレッドが発行するコマンドのタイミングを含む。
【0027】
バス・マスタリング: CPUとの相互作用が全くなく、システム・メモリから直接データを検索するプロセス。
周辺構成要素相互接続(「PCI」):Intel社がI/O周辺素子をCPUに接続するために最初に設計した高速パラレル・バス。
【0028】
PCIエクスプレス:PCIソフトウェア使用モデルを維持し、物理バスを、多数のレーンを提供する高速(2.5Gb/s)シリアル・バスと置き換えるPCIの発展バージョン。
【0029】
アクセラレィティッド・グラフィック・ポート(「AGP」): グラフィック・カードから主メモリに直接接続を設けるバス。
AGPメモリ:GPUがアクセスすることができる、CPUが使用するためにシステムに内蔵されているメモリ。AGPまたはPCIエクスプレスを使用しない場合、CPUは遅い可能性があるデータをコピーする必要がある場合もある。
【0030】
サーフェイス(surface): システムが画像または抽象データ用コンテナと解釈するメモリ・バッファ。サーフェイスは、AGPメモリまたはローカル・ビデオ・メモリのいずれかに内蔵することができる。
【0031】
空きサーフェイス・リスト:割り当てられたサーフェイス全てが入っているリスト。異なる種類のサーフェイス毎に異なるリストがあってもよい。「空きリスト」を求めるスレッドのようなプロセスは、新たなサンプルが使用可能になると直ちに開始する。
【0032】
コマンド・パケット:スレッド間で受け渡されるコマンドを含むデータ構造。
スヌーピング・コマンド: ダミー・コマンドであり、GPUおよび3Dアプリケーション・プログラム・インターフェース(「API」)が対応する。プロセスがGPUによって実行されたか否か判定するために、問い合わせることができる。あるいは、スヌーピング・コマンドは、APIの「使用中」(in use)クエリを用いるか、または単にある時間(例えば、いつサーフェイスを用いたかに応じて、5msまで)待機することによって、エミュレートすることができる。
【0033】
図3は、本発明に関係する態様にしたがって、リアル・タイムでエフェクトを含ませるためにビデオを編集する処理システム上で実行する多数のスレッドを利用する総合プロセス300を示す。概略的に、プロセス300はビデオ・タイムラインのサンプルを取り込み、このサンプルを多数のスレッド間で受け渡して処理する。
【0034】
プロセス300が開始すると、プロセス300が用いる各スレッド、即ち、アプリケーション・スレッド、アップロード・スレッド、デコーダ・スレッド、レンダリング・スレッド、プレゼンタ(presenter)スレッド、およびリリース・スレッドを実装する(段階301)。次いで、処理システムはサンプルをアプリケーション・スレッドに渡し、ビデオに要求されるエフェクトを作成する(段階302)。次いで、アプリケーション・スレッドは、「事前分解ビデオ」(pre-decomposed video)を生成する。事前分解ビデオとは、MPEGのようなフォーマットによって圧縮され、データ・パケットまたはその他の静的画像を含むことができるビデオ・データである。次に、処理システムは、サンプルをアップロード・スレッドに渡し、事前分解ビデオをグラフィック・カードにアップロードする(段階304)。処理システムにおける処理を減らすために、アップロード・スレッドはバス・マスタリング・プロセスを利用して、ビデオ・データをグラフィック・カードにアップロードしてもよい。
【0035】
次いで、処理システムはサンプルをデコーダ・スレッドに渡し、ビデオ・データの最終デコードを実行する(段階306)。即ち、MPEGのようなフォーマットで圧縮することができるビデオ・データをデコードして、生のビデオ・データを得る。
【0036】
続いて、処理システムはサンプルをレンダリング・スレッドに渡し、エフェクト・データを生成して、エフェクトをレンダリングする(段階308)。一旦エフェクトをレンダリングすると、処理システムは、レンダリングしたサンプルをプレゼンタ・スレッドに渡し、レンダリングしたビデオ・サンプルを出力する(段階310)。次いで、一旦ビデオを出力したなら、処理システムは用いたリソース全てをリリース・スレッドに渡し、ビデオを編集する際に用いたリソースをリリースする(段階312)。
【0037】
プロセス300においては、前述の段階のいずれでも、処理システム内にある多数の処理ユニットを利用して、スレッドを並列に実行することができる。例えば、デコーダ・スレッド(段階306)およびレンダリング・スレッド(段階310)は、処理システム上の異なる処理ユニットによって実行することができる。
【0038】
プロセス300では、アップロード、デコード、レンダリング、およびプレゼンテーションからのプロセスの各々が、独立したスレッドによって実行されるので、処理システムは、エフェクトを生成するために、並列で処理を実行することができる。更に、各スレッドがそのそれぞれの処理を完了した後、スレッドはスヌーピング・コマンドを実行して、プロセスが完了したことを示すことができる。更に、各プロセスの完了がわかるので、編集したビデオにアクセスするのを編集したビデオが完了したときにのみにして、GPU関連ドライバの停止を回避することによって、計算効率を高めることができる。
環境およびプロセスの一例
図4は、本発明に関係する方法およびシステムを、ある実施形態にしたがって実施することができる環境例400を示す。環境400は、ビデオ処理ユニット401、ネットワーク422、入力デバイス424、ビデオ入力デバイス402、および出力デバイス418を含むことができる。
【0039】
ビデオ処理ユニット401は、パーソナル・コンピュータ、移動計算機(例えば、PDA)、移動通信デバイス(例えば、セル・ホーン)、セット・トップ・ボックス(例えば、ケーブルまたは衛星ボックス)、ビデオ・ゲーム・コンソール、スマート・アプライアンス(smart appliance)、またはユーザがビデオ・データを受信し処理することを可能にする構造であればその他のいずれでもよい。一構成例では、ビデオ処理ユニット401は、データ・ポート404、記憶モジュール406、CPU408、メモリ410、グラフィック・モジュール312、およびネットワーク・インターフェース420を含み、少なくとも1つのバス403によって相互接続することができる。
【0040】
環境400において、入力デバイス424はデータ・ポート404に結合されている。入力デバイス424は、少なくとも1つのユーザ作動入力モードを含み、コマンドを入力することにより、複数のプロセッサ処理モードから選択することができる。入力デバイス424は、キーボード、マウス、および/またはタッチ・スクリーンのような構成要素を含むことができる。加えて、前述のように、入力デバイス424は1つ以上のオーディオ・キャプチャ・デバイスを含む。例えば、入力デバイス424は、ユーザが可聴発声を入力することができるマイクロフォンを含むことができる。したがって、入力デバイス424は、入力された発声を認識し解析する音声認識ソフトウェアを含むこと、またはこれに結合することができる。音声認識ソフトウェアは、メモリ410内に位置することができる。入力デバイス424は、加えてまたは代わりに、データ読み取りデバイスおよび/または入力ポートを含むこともできる。
【0041】
ビデオ・入力デバイス402は、データ・ポート404にも結合されている。ビデオ入力デバイス402は、少なくともビデオ・カメラ、静止画カメラ、またはしかるべきビデオ生成デバイスであればその他のいずれでも含むことができる。加えて、ビデオ入力デバイス402は、1つ以上のビデオ・キャプチャ・デバイス(例えば、スキャナ)、ビデオ・レコーダ、またはビデオ・データを供給可能ないずれのデバイスでも含むこともできる。
【0042】
記憶モジュール406は、ビデオ処理ユニット401に大容量ストレージを設けることができる。記憶モジュール406は、種々の構成要素またはサブシステムを用いて実施することができ、例えば、ハード・ドライブ、光ドライブ、CDROMドライブ、DVDドライブ、汎用記憶装置、着脱可能記憶装置、および/または情報を格納可能なその他のデバイスを含む。更に、記憶モジュール406はビデオ処理ユニット401内に示されているが、記憶モジュール406はビデオ処理ユニット401の外部に実装することもできる。
【0043】
記憶モジュール406は、ビデオ処理ユニット401がネットワーク422、入力デバイス424、およびビデオ入力デバイス402と通信するためのプログラム・コードおよび情報を含むことができる。記憶モジュール406は、例えば、種々のクライアント・アプリケーションや、Microsoft Corporationが提供するWindowsオペレーティング・システムのようなオペレーティング・システム(OS)のプログラム・コードを含むことができる。加えて、記憶モジュール406は、他のプログラム・ネットワーク通信、カーネルおよびデバイス・ドライバ、コンフィギュレーション情報、ビデオ表示および編集、ならびにビデオ処理ユニット401上に実装され得るその他のアプリケーションを含むこともできる。
【0044】
ビデオ処理ユニット401におけるCPU408は、命令を実行するように動作的に構成することができる。CPU408は、構成要素およびデバイス間で情報の経路を決定するため、そしてメモリ410からの命令を実行するために構成することができる。図4は単一のCPUを示すが、ビデオ処理ユニット401は複数の汎用プロセッサおよび/または特殊目的プロセッサ(例えば、ASICS)を含むこともできる。また、CPU408は、例えば、1つ以上の以下のものを含むこともできる。コプロセッサ、メモリ、レジスタ、ならびに適宜のその他の処理デバイスおよびシステム。CPU408は、例えば、Intel Corporationから供給されているPentiumTMプロセッサを用いて実施することができる。
【0045】
メモリ410は、情報を格納することができるシステムおよび/または機構であればいずれでも含むことができる。メモリ410は、種々の構成要素および/またはサブシステムによって具体化することができ、ランダム・アクセス・メモリ(「RAM」)、リード・オンリ・メモリ(「ROM」)、磁気および光記憶エレメント、有機記憶エレメント、オーディオ・ディスク、ならびにビデオ・ディスクを含む。メモリ410は、プログラム・コード等のために、CPU408に主メモリを設けることができる。メモリ410は、例えば、Microsoft Corporationが提供するWindowsオペレーティング・システムのようなオペレーティング・システム(OS)、ネットワーク通信、カーネルおよびデバイス・ドライバ、コンフィギュレーション・メモリ、ビデオ表示および編集、ならびにビデオ処理ユニット401上に実装され得るその他のアプリケーションのプログラム・コードを含むことができる。
【0046】
単一のメモリを示すが、ビデオ処理ユニット401にはいずれの数のメモリ・デバイスでも含むことができ、各々は個別の機能を実行するために構成することができる。ビデオ処理ユニット401が、記憶モジュール406内にインストールされているアプリケーションを実行するとき、CPU408は記憶モジュール406からメモリ410にプログラム・コードの少なくとも一部をダウンロードすることができる。CPU408がプログラム・コードを実行する際、CPU408はプログラム・コードの追加部分も記憶モジュール406から検索することもできる。
【0047】
グラフィック・モジュール412は、ビデオおよびグラフィック・データを処理し、ビデオおよびグラフィック・データを出力することができるシステムおよび/または機構であればいずれでも含むことができる。グラフィック・モジュール412は、種々の構成要素および/またはサブシステムによって具体化することができ、GPU414およびビデオ・メモリ416を含む。グラフィック・モジュール412は、例えば、AGP、PCI、またはPCIエクスプレスのような種々の規格に準拠する、しかるべきグラフィック・アクセレレータであればいずれを用いてでも実施することができる。
【0048】
GPU414は、ビデオおよびグラフィックに関連する命令を実行するように動作的に構成することができる。GPU414は、構成要素およびデバイス間で情報の経路を決定するため、そしてCPU408およびメモリ410からの命令を実行するために構成することができる。GPU414は、1つまたは複数の汎用プロセッサおよび/または特殊目的プロセッサ414を含むことができる。また、GPU414は、例えば、コプロセッサ、メモリ、レジスタ、ならびに適宜の処理デバイスおよびシステムの内、1つ以上を含むこともできる。
【0049】
ビデオ・メモリ416は、情報を格納することができるのであればいずれのシステムおよび/または機構でも含むことができる。ビデオ・メモリ416は、種々の構成要素および/またはサブシステムによって具体化することができ、RAMおよび/またはリード・オンリ・メモリROMを含む。ビデオ・メモリ416は、GPU414に主メモリを提供することができる。単一のメモリを示すが、いずれの数のメモリ・デバイスでもビデオ・メモリ416を構成することもでき、各々、別個の機能を実行するように構成することができる。
【0050】
ビデオ処理ユニット401は、ネットワーク・インターフェース420を介してネットワーク422に接続することができ、ネットワーク・インターフェース420は有線および/またはワイヤレス通信リンクを介して動作的に接続することができる。ネットワーク・インターフェース420は、ネットワーク・カードおよびイーサネット・カードのような、ネットワーク422あるいは外付けイーサネットLAN(attached Ethernet LAN)、シリアル・ライン等のような他のいずれのネットワークに情報を送出し、ネットワーク422から情報を受信するのに適した機構であれば、いずれでもよい。一構成では、ネットワーク・インターフェース420は、ビデオ処理ユニット401に処理ユニットおよびインターネットと相互作用させることもできる。
【0051】
ネットワーク422は、インターネット、仮想個人ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、広帯域ディジタル・ネットワーク、あるいは2つ以上のノード即ち場所間における通信を可能にするのであれば他のいずれの構造でもよい。ネットワーク422は、共有、公用、または私用データ・ネットワークを含むことができ、広域または局在域を包含することができる。ネットワーク422は1つ以上の有線および/またはワイヤレス接続を含むことができる。ネットワーク422は、Transmission Control and Internet Protocol(TCP/IP)、Asynchronous Transfer Mode(ATM)、イーサネット、またはネットワーク一間において通信を制御する他のいずれの手順の集合体というような、通信プロトコルを採用することができる。ある実施形態では、ネットワーク422は電話サービスも含むおよび/または提供することもできる。このような実施形態では、ネットワーク422は公衆電話交換網(「STTN」)に含まれる、および/またはこれを利用する (leverage)ことができる。あるいは、ネットワーク422は、ボイス・オーバー・インターネット・プロトコル(「VoIP」)技術を利用することもできる。ある実施態様では、ネットワーク422は、PSTNおよびViOP技術を含む、および/またはこれらを利用することもできる。
【0052】
出力デバイス418は、陰極線管、液晶、発光ダイオード、ガス・プラズマ、またはその他の種類の表示機構によって、グラフィック・モジュール412が出力するテキスト、画像、またはその他の種類の情報を視覚的に表示するように構成することができる。例えば、出力デバイス418はコンピュータ・モニタであってもよい。加えてまたは代わりに、出力デバイス418は、聴取可能に送出するように構成することもできる。例えば、出力デバイス418は、スピーカのように、可聴音響をユーザに出力するオーディオ出力デバイスを含むこともできる。したがって、出力デバイス418は、合成した人の発声または予め記録した人の発声を生成するように構成したオーディオ・ソフトウェアを含むか、またはこれに結合することができる。このようなソフトウェアは、メモリ410内に位置し、相互作用するように構成することができる。出力デバイス418は、ユーザの双方向処理を可能とするために、入力デバイス424と共に用いるとよい。
【0053】
前述のように、ビデオ処理ユニット401は、図4に示すものよりも多いおよび/または少ない構成要素を備えていてもよく、ビデオ処理ユニット401内に内蔵される構成要素の1つ以上は、追加のサービス、データおよび/またはユーザに対処するために、規模が調整可能とするとよい。
【0054】
図4が示す種々の構成要素は全てビデオ処理ユニット401内に位置するが、ビデオ処理ユニット401の構成要素の1つ以上は、ネットワーク422に結合されている1つ以上の他の処理ユニット(図示せず)、または他の場所に存在することができ、またはこれらの間で分散することもできる。例えば、アプリケーションは他の処理ユニット内に位置することができ、記憶モジュール406はビデオ処理ユニット401の外部に位置することができ、ネットワーク422を通じてビデオ処理ユニット401に結合することができる。また、前述のように、いずれの数の処理ユニットでも環境400に含むことができるのは、言うまでもない。
【0055】
本発明の代替実施態様では、複数の他の処理ユニット(図示せず)の各々が、それぞれ、ビデオ処理ユニット401の全てまたは一部の複製または変形(version)を内蔵することもできる。このような実施態様では、各変形は、互いに排他的にまたは共同して動作することができる。
【0056】
図5Aおよび図5Bは、本発明に関係する態様にしたがって、エフェクトを作成しビデオを編集するためのプロセス例500を示す。プロセス500は、図4に示す環境400上で実行することができる。
【0057】
エフェクトおよびビデオ編集は、ビデオ処理ユニット401上で実行するアプリケーションに応答して行われる。アプリケーションは、ビデオ処理ユニット401のユーザによって、入力デバイス424を介して開始することができる。加えて、アプリケーションは、常時ビデオ処理ユニット401上で実行し、受信したいずれのビデオに対してもビデオ編集を行うようにすることができる。また、アプリケーションはビデオ・データの入力または受信によって開始することができる。アプリケーション例には、ビデオまたはグラフィック・データおよび3D−サーバを利用する一人以上のユーザまたはその他のデバイスに特定の機能を実行するように設計された、しかるべき種類のプログラムであればいずれでも含むことができる。アプリケーションは、1つ以上のワード・プロセッサ、データベース・プログラム、インターネット、エクストラネット、および/またはイントラネット・ブラウザあるいはウェブサイト、開発ツール、スケジューリング・ツール、ルーティング・ツール、通信ツール、メニュー・インターフェース、ビデオ表示プログラム、ビデオまたは2D/3D効果を含むゲーム・プログラム、ビデオ記録プログラム、ならびにオーディオおよび/またはビデオ編集プログラムを備えることができる。アプリケーションは、いずれの構造的、手続き的、オブジェクト指向、またはその他の種類のプログラミング言語で書かれたデータでも操作する命令の集合体とすることができる。図示のように、アプリケーションは、当該アプリケーションとの双方向処理の利用を容易にするGUIのような、ユーザ・インターフェースを備えることができる。
【0058】
アプリケーションは、記憶モジュール406および/またはメモリ410に格納することができる。加えて、アプリケーションは、ネットワーク422を通じて、または入力デバイス424から受信することができる。アプリケーションが記憶モジュール406にインストールされている場合、CPU408は記憶モジュール406からメモリ410にプログラム・コードの少なくとも一部をダウンロードすることができる。CPU408がプログラム・コードを実行すると、CPU408は記憶モジュール406からプログラムの追加部分も検索することができる。
【0059】
処理するビデオ・データは、環境400の種々の構成要素によって取得または受信することができる。ビデオ・データは、ビデオ入力デバイス402またはネットワーク422から取得または受信することができる。加えて、ビデオ・データは、記憶モジュール406および/または410に格納し、アプリケーションを起動するときにアクセスするか、あるいはアプリケーションを起動するときにこのアプリケーションによって作成することができる。
【0060】
アプリケーションを起動した後、プロセス500が開始する。プロセス500において、1組の多数のスレッドを利用して、種々の編集処理段を実行する。最初に、アプリケーションは、当技術分野では周知の方法で、再生時点に先だって(即ち、エフェクトを表示または利用する予定を立てる前に)エフェクトを作成する(エフェクトは単一のエフェクトまたは多数のエフェクトでもよい)(段階502)。アプリケーションは、エフェクトの複雑度または数に応じて、単一および/または多数のアプリケーション・スレッドを用いてエフェクトを作成することができる。エフェクトの一例を上げるとすれば、ディジタル・バーサタイル・ディスク(DVD)において別個のビデオ・データまたはメニューを組み合わせるPIPであろう。次いで、アプリケーションはエフェクトのテキスト・ディスクリプションを3D−サーバにアップロードする(段階504)。アプリケーションは、エフェクトをインスタンス化し、解釈し、準備する(段階506)。3D−サーバは、Pinnacle StudioまたはLiquidのようなビデオ編集プログラムの一部である、アプリケーション拡張部としてもよい。
【0061】
次に、アプリケーションは、タイムラインの一部である事前伸張ビデオ・データを生成または特定する。タイムラインは、最大長動画ビデオまたは単一静止映像のような、いずれの長さのビデオ・データでもよい。アプリケーションは、単一および/または多数のアプリケーション・スレッドを用いて、ビデオ・データを生成または特定することができる。事前伸張ビデオ・データは、ビデオ・パケットおよび/またはタイトルのようなその他の静止画像を含むことができる。タイムラインを異なるトラックに分割することもできる。例えば、最大長動画ビデオでは、各トラックはビデオ・データの1フレームとすることができる。タイムラインにおけるトラック毎に、アプリケーションは、エフェクトを準備するために必要なビデオ・データのサンプル全てを読み出すかまたは生成し、サンプルが圧縮されているか否か判定し、恐らくは部分的にサンプルをデコードし、このサンプルを3Dサーバ/アップロード・スレッドに渡す。例えば、アプリケーションは、記憶モジュール406またはビデオ入力デバイス402からビデオ・データのサンプルを読み出すことができる。加えて、テキスト・データのようなビデオ・データは、アプリケーションが生成してもよい。
【0062】
アプリケーションは、読み取ったまたは生成した最初のサンプルのためにサンプル・バッファを割り当てる(段階507)。サンプル・バッファは、メモリ410または記憶モジュール406のメモリに内蔵することができる。次いで、アプリケーションは、サンプルが圧縮されているか否か判定を行う(段階508)。サンプルが圧縮されている場合、アプリケーションは部分的に圧縮サンプルをデコードすることができる。
【0063】
サンプルが圧縮されている場合、アプリケーションはサンプルをデコード・バッファに読み込む(段階509)。デコード・バッファは、メモリ410または記憶モジュール406のメモリに内蔵することができる。次いで、アプリケーションは部分的にデコードしたサンプルをサンプル・バッファに読み込む(段階510)。次に、アプリケーションはサンプル・バッファをアップロード・スレッドに渡す(段階513)。
【0064】
サンプルが圧縮されていない場合、アプリケーションはサンプルをサンプル・バッファに読み込む(段階512)。次に、アプリケーションはサンプル・バッファをアップロード・スレッドに渡す(段階513)。
【0065】
作成したエフェクトは1つよりも多いサンプルを有する場合がある。アプリケーションは、全てのサンプルを読み終えたか否か判定を行う(段階514)。全てのサンプルを読み終えていない場合、アプリケーションは、サンプル・バッファの割り当て、およびサンプルが圧縮されているか否かの判定を繰り返す(段階507〜513)。全てのサンプルを読み終わり、アップロード・スレッドに渡した後、アップロード・スレッドはアップロード処理に移る。
【0066】
次に、サンプル・オブジェクトをグラフィック・ハードウェア412のビデオ・メモリ416にアップロードする。サンプル・オブジェクトは、初期状態では、AGPメモリ・サーフェイスを含む。サーフェイスの可用性およびステータスによっては、サンプル・オブジェクトの割り当てには十分な量の時間が必要となる場合がある。サーフェイスの可用性およびステータスは、サーフェイスの付随するスヌーピング・コマンドを用いてチェックすることができる。スヌーピング・コマンドは、GPUおよび3Dアプリケーション・プログラム・インターフェース(「API」)が対応するダミー・コマンドでもよく、GPUがプロセスを実行したか否か判定するために問い合わせることができる。あるいは、スヌーピング・コマンドは、APIの「使用中」問い合わせ(in use inquire)を用いて、または単にある時間待機する(例えば、サーフェイスをいつ用いたかに応じて5msまで)ことによってエミュレートしてもよい。
【0067】
アップロード・プロセスは、3D−サーバのアップロード・スレッドによって実行することができる。3Dサーバ/アップロード・スレッドは、アプリケーションからのコマンドを待つ(段階515)。アップロード・スレッドがサンプル・オブジェクト、コマンド・パケット、およびサンプル・バッファを得ると直ぐに、アップロード・スレッドの仕様に必要なビデオ・メモリ・サーフェイスが利用可能となるまで、アップロード・スレッドは待機する(段階516)。例えば、サンプル・オブジェクトは、ある量のメモリまたは色空間形式(color space type)を必要とする場合がある。ビデオ・メモリ416において、必要なサイズまたは色空間形式が得られない場合、アップロード・スレッドは、メモリが利用可能となるまで待機する。次に、アップロード・スレッドは、ビデオ・メモリ・サーフェイスをチェックし、保留中の動作があるか調べる(段階518)。サーフェイスをチェックするには、未処理のスヌーピング・コマンドまたは3D APIの「使用中」問い合わせを用いればよい。次いで、サーフェイスの準備ができたなら、アップロード・スレッドはアップロード・コマンドを発行する(段階520)。時間前に予めエフェクトを準備しているので、グラフィック・モジュール412はサンプル・オブジェクトのアップロードを待っていない。例えば、アップロード・スレッドは、バス・マスタリング・プロセスを用いて、データをビデオ・メモリ・サーフェイスにコピーすることができる。更に、アップロード・スレッドは、アップロード・コマンドの実行時点を書き留め、スヌーピング・コマンドを発行し、両メモリ・サーフェイス上に書き留める(段階522)。
【0068】
次いで、アップロード・スレッドは、サンプル・オブジェクトに収容されているサンプルが圧縮されているか否か判定を行う(段階523)。例えば、ビデオ・データは、MPEGのような標準フォーマットを用いて圧縮することができる。サンプル・オブジェクトに収容されているビデオ・データが伸張を必要としない場合、アップロードはサンプル・オブジェクトをアップロードしたとして通知する(段階524)。次いで、事前に伸張したビデオ・データを収容した新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加し、サンプル・オブジェクトおよびコマンド・パケットをレンダリング・スレッドに渡す(段階525)。次いで、アップロード・スレッドは、APGメモリ・サーフェイスが他の目的に用いられていなければ、これを空きサーフェイス・リストの末尾に入れることにより、いずれの待機中のプロセスをもリリースする(段階526)。
【0069】
サンプルがデコードを必要とする場合、デコーダ・スレッドを用いてデータを伸張する。アップロード・スレッドは、サンプル・オブジェクトおよびコマンド・パケットをデコーダ・スレッド・キューに入れる(段階528)。次いで、アップロード・スレッドは、APGメモリ・サーフェイスが他の目的に用いられていなければ、これを空きサーフェイス・リストの末尾に入れることにより、いずれの待機中のプロセスをもリリースする(段階530)。
【0070】
次いで、アップロード・スレッドは段階516に戻り、アップロードを必要とする次のサンプル・オブジェクトに対しての処理を開始する。
図6は、本発明に関係する態様にしたがって、デコーダ・スレッドによってサンプル・データをデコードするプロセスを示す。デコード・プロセスは、3D−サーバのデコーダ・スレッドによって実行することができる。デコーダ・スレッドは連続的に実行し、キュー内に置くサンプル・オブジェクトおよびコマンド・パケットを待つ。最初に、デコーダ・スレッドはキューをチェックして、サンプル・オブジェクトおよびコマンド・パケットがあるか否か調べる(段階602)。サンプル・オブジェクトおよびコマンド・パケットがキューの中にある場合、デコーダ・スレッドはデコード・プロセスに進む。ない場合、デコーダ・スレッドはサンプル・オブジェクトおよびコマンド・パケットを待つ。また、デコード・スレッドは、スヌーピング・コマンドが発行され実行されるまで待機してもよい。あるいは、デコーダ・スレッドはある時間期間待機する。例えば、この時間期間は、現時点およびコマンドが発行された時点の何らかの関数としてもよい(例えば、max(0.5ms−<現時点>−<コマンドが発行された時点>)。次いで、デコーダ・スレッドは、デコードしたデータのために、新たなビデオ・メモリ・サーフェイスを取得する(段階604)。新たなビデオ・メモリ・サーフェイスは、例えば、ビデオ・メモリ416に含まれていてもよい。例えば、サーフェイスは未圧縮カラー・フォーマットと一致していてもよい。
【0071】
次いで、サーフェイスには未処理のアクションがあってはならないので、デコーダ・スレッドは、新たなビデオ・メモリ・サーフェイスが何らかの未処理のアクションを収容しているか否か、スヌーピング・コマンドを発行することによって判定することができる(段階606)。次いで、デコーダ・スレッドはコマンドを発行し、デコード・プロセスを実行する(段階608)。デコード・プロセスは、「iDCT」(逆離散余弦変換)または「iDCT+動き補償」のいずれかを含むことができる。iDCT/動き補償は、殆どのGPU上では別個のハードウェア・ユニットであり、GPU414に含めることができ、これによってデコード・プロセスを3Dコマンドと並行して実行することが可能となる。必要であれば、これらのコマンドを発行した後に、コマンド時間およびスヌーピング・コマンドを発行し、両サーフェイスに書き留める(段階610)。次いで、デコーダ・スレッドはサンプル・オブジェクトをアップロードしたものとして通知する(段階611)。
【0072】
最後に、デコーダ・スレッドは新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加し、デコーダ・スレッドは、事前伸張ビデオを収容したビデオ・メモリ・サーフェイスを、空きバッファ・リストの末尾に入れ(この種のサーフェイスを待っているプロセスをリリースする)、新たなビデオ・メモリ・サーフェイスをサンプル・オブジェクトに付加する(段階612)。加えて、サンプル・オブジェクトおよびコマンド・パケットはレンダリング・スレッドに渡される(段階612)。デコーダ・スレッドは、次いで、キューをチェックし、新たなサンプル・オブジェクトに対してデコード処理を開始する。
【0073】
アップロードおよびデコードを実行している間、アプリケーション・スレッドはある時点に対するエフェクト・パラメータを決定し続けることができる。アプリケーション・スレッドの決定は、必要なエフェクト全てを収集し、時間依存データを計算し、エフェクトのために使用したサンプル・オブジェクトを決定することを含めばよい(図5の段階528)。次いで、アプリケーションはこれらのエフェクト・パラメータをレンダリング・スレッドに渡し、これに応答して、レンダリング・スレッドは出力サンプル・オブジェクトを返す。次いで、出力サンプル・オブジェクトは、エフェクトを有するサンプル・オブジェクトがいつ完了するのかを判定するための参照として用いることができる(段階530)。3D−サーバは出力サンプル・オブジェクトのためにどの物理目標サーフェイスを用いるか規定していないので、出力サンプル・オブジェクトはプロキシのみである。
【0074】
次に、レンダリング・スレッドは、エフェクトをレンダリングする。図7は、本発明の態様にしたがって、エフェクトをレンダリングするプロセスを示す。レンダリング・プロセスは、3D−サーバのレンダリング・スレッドによって実行することができる。サンプル・オブジェクトおよびコマンド・パケットをレンダリング・スレッドに渡し、レンダリング・キューに入れる。レンダリング・キューは、サンプル・オブジェクトおよびコマンド・パケットがあるか否かレンダリング・キューをチェックする(段階701)。サンプル・オブジェクトおよびコマンド・パケットがキューの中にある場合、レンダリング・スレッドはレンダリング・プロセスに進む。ない場合、レンダリング・スレッドはサンプル・オブジェクトおよびコマンド・パケットを待つ。加えて、レンダリング・スレッドは、レンダリングするエフェクトの種類に応じて、レンダリングを実行する前に、数個のサンプル・オブジェクトおよびコマンド・パケットを待つ場合もある。
【0075】
レンダリング・スレッドは、アプリケーションが供給するエフェクト・パラメータに応じて、用いる各エフェクトを準備する(段階702)。次に、レンダリング・スレッドはターゲット・メモリ・サーフェイスを出力サンプル・オブジェクトに割り当てる(段階704)。ターゲット・メモリ・サーフェイスは、例えば、ビデオ・メモリ416に含むことができる。ターゲット・メモリ・サーフェイスは、メモリ410に含むこともできる。次いで、レンダリング・スレッドは、エフェクトに対するサンプル・オブジェクトがレンダリングの準備ができるまで待機する(段階706)。次いで、レンダリング・スレッドは、エフェクト・パラメータに応じて、エフェクトをレンダリングする(段階708)。レンダリング・スレッドは、スヌーピング・コマンドを発行し、これをサンプル・オブジェクトに付加する(段階710)。次いで、レンダリング・スレッドは、サーフェイスおよびリソースをリリースするプロセスを可能にするために、コマンド・パケットをリリース・スレッドに渡す(段階712)。
【0076】
一旦ビデオを表示することが必要となると、スヌーピング・コマンドを実行し、3D−サーバは出力サンプル・オブジェクトおよびコマンドをプレゼンタ・スレッドに渡し、これらはプレゼンテーション用キューに入れられる(段階714)。スヌーピング・コマンドは各スレッドによって実行されているので、ビデオ処理ユニット401は、各プロセス・スレッドがその指定されたタスクを完了していることを知っている。レンダリング・スレッドは、次に、キューをチェックし、新たなサンプル・オブジェクトに対してレンダリング処理を開始する。
【0077】
図8は、本発明の態様にしたがって、エフェクトを含むビデオを発表するプロセスを示す。プレゼンテーション・プロセスはプレゼンタ・スレッドによって実行することができる。プレゼンタ・スレッドは、3Dサーバによって実装されるスレッドとすることができ、あるいはアプリケーションによって実装することもできる。最初に、出力サンプル・オブジェクトおよびコマンド・パケットがあるか否かキューをチェックする(段階802)。ビデオがオーディオ・データも必要とする場合、同期オーディオ/ビデオの発表ができるようにプレゼンタ・キューを設定すればよい。次に、出力サンプルおよびコマンド・パケットが利用可能であれば、出力コマンド・パケットをプレゼンタ・スレッドに渡す(段階804)。次いで、プレゼンタ・スレッドはプレゼンテーション方法を実行し、予定した時点において出力サンプル・オブジェクトを発表する(段階806)。例えば、エフェクトを含むビデオをグラフィック・モジュール412に渡し、出力デバイス418上で発表することができる。次に、プレゼンタ・スレッドは出力サンプル・オブジェクトを再度出力サーフェイスの空きリストに入れる(段階808)。
【0078】
図9は、本発明の態様にしたがって、リソースをリリースするプロセスを示す。リリース・プロセスは、リリース・スレッドによって実行することができる。リリース・スレッドは、3Dサーバによって実装されるスレッドとすることができ、あるいはアプリケーションによって実装することもできる。最後に、3D−サーバは使用したサンプル・オブジェクト全ておよびその他のリソースを空きサーフェイス・リストに入れ、他の待機プロセスをリリースする(段階902)。リリース・プロセスは、3Dサーバのリリース・スレッドによって実行することができる。プロセス500は、タイムラインの各エフェクトが作成され、エフェクトを含むタイムラインの発表が終わるまで継続する。
【0079】
プロセス500について、1つのエフェクトを有するビデオ・フレームに関して説明した。しかしながら、プロセス500は、多数のエフェクトを有する多数のビデオ・フレームに対して実行することもできる。更に、再生時点に先だってエフェクトを作成するので、アプリケーションおよび3D−サーバは 現ビデオ再生時点に合わせてビデオ・データを処理し出力するためにスレッドを同時に実行する。
【0080】
本発明の他の実施形態は、ここに開示した本発明の明細書の検討および実施によって、当業者には明白となろう。本明細書および例は、例示として見なされるに過ぎず、本発明の真の範囲および主旨は特許請求の範囲によって示されるものとする。
【図面の簡単な説明】
【0081】
【図1】図1は、従来のビデオ編集プロセスを示すフローチャートである。
【図2】図2は、従来のビデオ・キャプチャ・プロセスを示すフローチャートである。
【図3】図3は、本発明に関係する態様によるビデオ・エフェクト・プロセスを示すフローチャートである。
【図4】図4は、本発明に関係する態様による処理を実行可能な処理環境を示す図である。
【図5A】図5Aは、本発明に関係する態様によるビデオ・プロセスを示すフローチャートである。
【図5B】図5Bは、本発明に関係する態様によるビデオ・プロセスを示すフローチャートである。
【図6】図6は、図5に示すビデオ・プロセスと共に実行するデコード・プロセスを示すフローチャートである。
【図7】図7は、図5に示すビデオ・プロセスと共に実行するレンダリング・プロセスを示すフローチャートである。
【図8】図8は、図5に示すビデオ・プロセスと共に実行するプレゼンテーション・プロセスを示すフローチャートである。
【図9】図9は、図5に示すビデオ・プロセスと共に実行する解除プロセスを示すフローチャートである。

【特許請求の範囲】
【請求項1】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法であって、
アプリケーション・スレッド、アップロード・スレッド、デコード・スレッド、レンダリング・スレッド、およびプレゼンタ・スレッドを実装するステップと、
前記ビデオ・データに追加する前記エフェクトを作成するために前記ビデオ・データを前記アプリケーション・スレッドに渡し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするために、前記事前伸張ビデオ・データをアップロード・スレッドに渡すステップと、
前記事前伸張ビデオ・データをデコードしてデコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データを前記デコード・スレッドに渡すステップと、
前記デコード・ビデオ・データ内に前記エフェクトをレンダリングして出力ビデオ・データを生成するために、前記デコード・ビデオ・データを前記レンダリング・スレッドに渡すステップと、
前記出力ビデオ・データを発表するために、前記出力ビデオ・データを前記プレゼンタ・スレッドに渡すステップと、
を備えている、方法。
【請求項2】
請求項1記載の方法であって、デコードおよびレンダリングにおいて利用したリソースをリリースするためのリリース・スレッドを実装するステップを備えている、方法。
【請求項3】
請求項1記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、方法。
【請求項4】
請求項1記載の方法であって、更に、各スレッド実施のタイミングを決定するためにスヌーピング・コマンドを発行するステップを備えている、方法。
【請求項5】
請求項1記載の方法において、前記アプリケーション・スレッドは、
前記ビデオ・データのサンプルの読み取りを実行するステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を実行する、方法。
【請求項6】
請求項5記載の方法において、前記アップロード・スレッドは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第1スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を実行する、方法。
【請求項7】
請求項6記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、方法。
【請求項8】
請求項6記載の方法において、前記デコード・スレッドは、
第2スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を実行する、方法。
【請求項9】
請求項8記載の方法において、前記アプリケーション・スレッドは、更に、
前記アプリケーションにおいて、前記エフェクトに対してエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
を実行する、方法。
【請求項10】
請求項9記載の方法において、前記出力サンプル・オブジェクトはプロキシである、方法。
【請求項11】
請求項9記載の方法において、前記レンダリング・スレッドは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を実行する、方法。
【請求項12】
請求項11記載の方法において、前記プレゼンタ・スレッドは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を実行する、方法。
【請求項13】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法であって、
前記ビデオ・データを受信するステップと、
前記エフェクトを作成するステップと、
前記ビデオ・データから事前伸張ビデオ・データを生成するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするステップと、
前記エフェクトを記述するパラメータを決定するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップと、
前記出力ビデオ・データを発表するステップと、
を備えている、方法。
【請求項14】
請求項13記載の方法であって、デコードおよびレンダリングにおいて利用したリソースをリリースするステップを備えている、方法。
【請求項15】
請求項14記載の方法において、前記エフェクトを作成するステップ、事前伸張ビデオを生成するステップ、およびパラメータを決定するステップをアプリケーションによって実行する、方法。
【請求項16】
請求項15記載の方法において、前記アプリケーションは実行するステップ毎にスレッドを起動する、方法。
【請求項17】
請求項15記載の方法において、前記事前伸張ビデオをアップロードするステップと、前記事前伸張ビデオ・データをデコードするステップと、前記エフェクトをレンダリングするステップと、リソースをリリースするステップを3D−サーバによって実行する、方法。
【請求項18】
請求項17記載の方法において、前記3D−サーバは実行するステップ毎にスレッドを起動する、方法。
【請求項19】
請求項17記載の方法において、前記アプリケーションおよび3D−サーバは並列に動作する、方法。
【請求項20】
請求項13記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、方法。
【請求項21】
請求項13記載の方法であって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、方法。
【請求項22】
請求項17記載の方法において、前記ビデオ・データから事前伸張ビデオ・データを生成するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を備えている、方法。
【請求項23】
請求項22記載の方法において、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第1スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記3D−サーバにアップロードするステップと、
を備えている、方法。
【請求項24】
請求項23記載の方法において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、方法。
【請求項25】
請求項23記載の方法において、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードするステップは、
第2スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するために前記デコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、方法。
【請求項26】
請求項25記載の方法であって、更に、
前記アプリケーションにおいて、前記エフェクトに対するパラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信するステップと、
を備えている、方法。
【請求項27】
請求項26記載の方法において、前記出力サンプル・オブジェクトはプロキシである、方法。
【請求項28】
請求項26記載の方法において、出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、方法。
【請求項29】
請求項28記載の方法において、前記出力ビデオ・データを出力するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を実行する、方法。
【請求項30】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理するシステムであって、
前記ビデオ・データに付加する前記エフェクトを作成し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装する手段と、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装する手段と、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装する手段と、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装する手段と、
前記出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装する手段と、
を備えている、システム。
【請求項31】
請求項30記載のシステムであって、デコードおよびレンダリングにおいて利用したリソースをリリースするためにリリース・スレッドを実装する手段を備えている、システム。
【請求項32】
請求項30記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、システム。
【請求項33】
請求項30記載のシステムであって、更に、各スレッド実装のタイミングを決定するために、スヌーピング・コマンドを発行する手段を備えている、システム。
【請求項34】
請求項30記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、
前記ビデオ・データのサンプルを読み取る手段と、
前記サンプルにサンプル・オブジェクトを割り当てる手段と、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードする手段と、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送する手段と、
を備えている、システム。
【請求項35】
請求項34記載のシステムにおいて、前記アップロード・スレッドを実装する前記手段は、
ビデオ・メモリ・サーフェイスを取得する手段と、
第1スヌーピング・コマンドを発行する手段と、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする手段と、
を備えている、システム。
【請求項36】
請求項35記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、システム。
【請求項37】
請求項35記載のシステムにおいて、前記デコード・スレッドを実装する前記手段は、
第2スヌーピング・コマンドを発行する手段と、
新たなビデオ・メモリ・サーフェイスを取得する手段と、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定する手段と、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行する手段と、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加する手段と、
を備えている、システム。
【請求項38】
請求項37記載のシステムにおいて、前記アプリケーション・スレッドを実装する前記手段は、更に、
前記アプリケーションにおいて、前記エフェクトに対するエフェクト・パラメータを決定する手段と、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡す手段と、
を備えている、システム。
【請求項39】
請求項38記載のシステムにおいて、前記出力サンプル・オブジェクトはプロキシである、システム。
【請求項40】
請求項38記載のシステムにおいて、前記レンダリング・スレッドを実装する前記手段は、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てる手段と、
前記エフェクトをレンダリングする手段と、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納する手段と、
を備えている、システム。
【請求項41】
請求項40記載のシステムにおいて、前記プレゼンタ・スレッドを実装する前記手段は、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れる手段と、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行する手段と、
を備えている、システム。
【請求項42】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理するシステムであって、
前記ビデオ・データを受信する手段と、
前記エフェクトを作成する手段と、
前記ビデオ・データから事前伸張ビデオ・データを生成する手段と、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする手段と、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードする手段と、
前記エフェクトを記述するパラメータを決定する手段と、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングする手段と、
前記出力ビデオ・データを発表する手段と、
を備えている、システム。
【請求項43】
請求項42記載のシステムであって、デコードおよびレンダリングにおいて利用したリソースをリリースする手段を備えている、システム。
【請求項44】
請求項43記載のシステムにおいて、前記エフェクトを作成する手段、事前伸張ビデオを生成する手段、およびパラメータを決定する手段はアプリケーションである、システム。
【請求項45】
請求項15記載の方法において、前記アプリケーションは実行する手段毎にスレッドを起動する、方法。
【請求項46】
請求項44記載の方法において、前記事前伸張ビデオをアップロードする手段と、前記事前伸張ビデオ・データをデコードする手段と、前記エフェクトをレンダリングする手段と、リソースをリリースする手段は、3D−サーバである、システム。
【請求項47】
請求項46記載のシステムにおいて、前記3D−サーバは実行するステップ毎にスレッドを起動する、システム。
【請求項48】
請求項46記載のシステムにおいて、前記アプリケーションおよび3D−サーバは並列に動作する、システム。
【請求項49】
請求項42記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするシステム。
【請求項50】
請求項42記載のシステムであって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行する手段を備えている、システム。
【請求項51】
請求項46記載のシステムにおいて、前記ビデオ・データから事前伸張ビデオ・データを生成する手段は、
前記ビデオ・データのサンプルを読み取る手段と、
前記サンプルにサンプル・オブジェクトを割り当てる手段と、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードする手段と、
前記サンプル・オブジェクトを前記3D−サーバに転送する手段と、
を備えている、方法。
【請求項52】
請求項51記載のシステムにおいて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする手段は、
ビデオ・メモリ・サーフェイスを取得する手段と、
第1スヌーピング・コマンドを発行する手段と、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする手段と、
を備えている、システム。
【請求項53】
請求項52記載のシステムにおいて、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、システム。
【請求項54】
請求項52記載のシステムにおいて、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードする手段は、
第2スヌーピング・コマンドを発行する手段と、
新たなビデオ・メモリ・サーフェイスを取得する手段と、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定する手段と、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行する手段と、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加する手段と、
を備えている、システム。
【請求項55】
請求項54記載のシステムであって、更に、
前記アプリケーションにおいて、前記エフェクトに対するパラメータを決定する手段と、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡す手段と、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信する手段と、
を備えている、システム。
【請求項56】
請求項55記載のシステムにおいて、前記出力サンプル・オブジェクトはプロキシである、システム。
【請求項57】
請求項55記載のシステムにおいて、前記出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングする手段は、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てる手段と、
前記エフェクトをレンダリングする手段と、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納する手段と、
を備えている、システム。
【請求項58】
請求項57記載のシステムにおいて、前記出力ビデオ・データを出力する手段は、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れる手段と、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行する手段と、
を備えている、システム。
【請求項59】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法をコンピュータ・システムに実行させる命令を含むコンピュータ読み取り可能媒体であって、前記方法が、
前記ビデオ・データに付加する前記エフェクトを作成し、前記ビデオ・データから事前伸張ビデオ・データを生成し、前記エフェクトを記述するパラメータを決定するためにアプリケーション・スレッドを実装するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするためにアップロード・スレッドを実装するステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするためにデコード・スレッドを実装するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするためにレンダリング・スレッドを実装するステップと、
前記出力ビデオ・データを発表するためにプレゼンタ・スレッドを実装するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項60】
請求項59記載のコンピュータ読み取り可能媒体であって、デコードおよびレンダリングにおいて利用したリソースをリリースするためにリリース・スレッドを実装するステップを備えている、コンピュータ読み取り可能媒体。
【請求項61】
請求項59記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードする、コンピュータ読み取り可能媒体。
【請求項62】
請求項59記載のコンピュータ読み取り可能媒体であって、更に、各スレッド実装のタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、コンピュータ読み取り可能媒体。
【請求項63】
請求項59記載のコンピュータ読み取り可能媒体において、前記アプリケーション・スレッドを実装するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記アップロード・スレッドに転送するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項64】
請求項63記載のコンピュータ読み取り可能媒体において、前記アップロード・スレッドを実装するステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第1スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項65】
請求項64記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、コンピュータ読み取り可能媒体。
【請求項66】
請求項64記載のコンピュータ読み取り可能媒体において、前記デコーダ・スレッドを実装するステップは、
第2スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項67】
請求項66記載のコンピュータ読み取り可能媒体において、前記アプリケーション・スレッドを実装するステップは、更に、
前記アプリケーションにおいて、前記エフェクトに対するエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記レンダリング・スレッドに渡すステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項68】
請求項67記載のコンピュータ読み取り可能媒体において、前記出力サンプル・オブジェクトはプロキシである、コンピュータ読み取り可能媒体。
【請求項69】
請求項67記載のコンピュータ読み取り可能媒体において、前記レンダリング・スレッドを実装する前記ステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項70】
請求項69記載のコンピュータ読み取り可能媒体において、前記プレゼンタ・スレッドを実装するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項71】
未来時点において生ずるようにエフェクトを生成するためにビデオ・データを処理する方法をコンピュータ・システムに実行させる命令を含むコンピュータ読み取り可能媒体であって、前記方法が、
前記ビデオ・データを受信するステップと、
前記エフェクトを作成するステップと、
前記ビデオ・データから事前伸張ビデオ・データを生成するステップと、
前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップと、
デコード・ビデオ・データを生成するために、前記事前伸張ビデオ・データをデコードするステップと、
前記エフェクトを記述するパラメータを決定するステップと、
出力ビデオ・データを生成するために、前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップと、
前記出力ビデオ・データを発表するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項72】
請求項71記載のコンピュータ読み取り可能媒体であって、デコードおよびレンダリングにおいて利用したリソースをリリースするステップを備えている、コンピュータ読み取り可能媒体。
【請求項73】
請求項72記載のコンピュータ読み取り可能媒体において、前記エフェクトを作成するステップと、事前伸張ビデオを生成するステップと、パラメータを決定するステップをアプリケーションによって実行する、コンピュータ読み取り可能媒体。
【請求項74】
請求項73記載のコンピュータ読み取り可能媒体において、前記アプリケーションは実行するステップ毎にスレッドを起動する、コンピュータ読み取り可能媒体。
【請求項75】
請求項73記載のコンピュータ読み取り可能媒体において、前記事前伸張ビデオをアップロードするステップと、前記事前伸張ビデオ・データをデコードするステップと、前記エフェクトをレンダリングするステップと、リソースをリリースするステップを3D−サーバが実行する、コンピュータ読み取り可能媒体。
【請求項76】
請求項75記載のコンピュータ読み取り可能媒体において、前記3D−サーバは実行するステップ毎にスレッドを起動する、コンピュータ読み取り可能媒体。
【請求項77】
請求項75記載のコンピュータ読み取り可能媒体において、前記アプリケーションおよび3D−サーバは並列に動作する、コンピュータ読み取り可能媒体。
【請求項78】
請求項71記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするコンピュータ読み取り可能媒体。
【請求項79】
請求項71記載のコンピュータ読み取り可能媒体であって、更に、各ステップのタイミングを決定するために、スヌーピング・コマンドを発行するステップを備えている、コンピュータ読み取り可能媒体。
【請求項80】
請求項75記載のコンピュータ読み取り可能媒体において、前記ビデオ・データから事前伸張ビデオ・データを生成するステップは、
前記ビデオ・データのサンプルを読み取るステップと、
前記サンプルにサンプル・オブジェクトを割り当てるステップと、
前記事前伸張ビデオ・データを生成するために、前記サンプルを部分的にデコードするステップと、
前記サンプル・オブジェクトを前記3D−サーバに転送するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項81】
請求項80記載のコンピュータ読み取り可能媒体において、前記事前伸張ビデオ・データをビデオ・ハードウェアにアップロードするステップは、
ビデオ・メモリ・サーフェイスを取得するステップと、
第1スヌーピング・コマンドを発行するステップと、
前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードするステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項82】
請求項81記載のコンピュータ読み取り可能媒体において、バス・マスタリング・プロセスを用いて、前記事前伸張ビデオ・データを前記ビデオ・メモリ・サーフェイスにアップロードする、コンピュータ読み取り可能媒体。
【請求項83】
請求項81記載のコンピュータ読み取り可能媒体において、デコード・ビデオ・データを生成するために前記事前圧縮ビデオ・データをデコードするステップは、
第2スヌーピング・コマンドを発行するステップと、
新たなビデオ・メモリ・サーフェイスを取得するステップと、
前記新たなビデオ・メモリ・サーフェイスのステータスを判定するステップと、
前記新たなビデオ・メモリ・サーフェイスにおいて前記デコード・ビデオ・データを生成するためにデコードを実行するステップと、
前記新たなビデオ・メモリ・サーフェイスを前記サンプル・オブジェクトに付加するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項84】
請求項83記載のコンピュータ読み取り可能媒体であって、更に、
前記アプリケーションにおいて、前記エフェクトに対してエフェクト・パラメータを決定するステップと、
前記エフェクト・パラメータを前記アプリケーションから前記3D−サーバに渡すステップと、
前記アプリケーションにおいて、出力サンプル・オブジェクトを受信するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項85】
請求項84記載のコンピュータ読み取り可能媒体において、前記出力サンプル・オブジェクトはプロキシである、コンピュータ読み取り可能媒体。
【請求項86】
請求項84記載のコンピュータ読み取り可能媒体において、前記出力ビデオ・データを生成するために前記エフェクトを前記デコード・ビデオ・データにレンダリングするステップは、
ターゲット・メモリ・サーフェイスを前記出力サンプル・オブジェクトに割り当てるステップと、
前記エフェクトをレンダリングするステップと、
前記レンダリングしたエフェクトを前記ターゲット・メモリ・サーフェイスに格納するステップと、
を備えている、コンピュータ読み取り可能媒体。
【請求項87】
請求項86記載のコンピュータ読み取り可能媒体において、前記出力ビデオ・データを出力するステップは、
前記出力サンプル・オブジェクトをプレゼンタ・キューに入れるステップと、
前記出力サンプル・オブジェクトを前記出力ビデオ・データとして発表するために、プレゼンタ方法を実行するステップと、
を備えている、コンピュータ読み取り可能媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公表番号】特表2007−534279(P2007−534279A)
【公表日】平成19年11月22日(2007.11.22)
【国際特許分類】
【出願番号】特願2007−509615(P2007−509615)
【出願日】平成17年4月21日(2005.4.21)
【国際出願番号】PCT/US2005/013556
【国際公開番号】WO2005/107241
【国際公開日】平成17年11月10日(2005.11.10)
【出願人】(506308862)ピナクル・システムズ・インコーポレーテッド (4)
【Fターム(参考)】