(57)【特許請求の範囲】
【請求項１】
マルチメディアデータを処理する方法であって、
トポロジ生成要素中の１つまたは複数のマルチメディアコンポーネント間の接続のトポロジを生成するステップであって、前記トポロジは、１組の入力マルチメディアストリーム、前記入力マルチメディアストリームについての１つまたは複数のソース、前記マルチメディアデータに実施される一連のオペレーション、および１組の出力マルチメディアストリームを含む１つまたは複数のマルチメディアコンポーネントと、前記マルチメディアコンポーネント間の接続とを記述する、ステップと、
メディアプロセッサに前記トポロジをメディアセッションが伝送するステップであって、前記メディアセッションは、前記メディアプロセッサおよび前記トポロジ生成要素を制御し、アプリケーションへのインターフェースに制御を提供するメディアエンジンにより制御される、ステップと、
前記トポロジにより記述された通りに前記マルチメディアコンポーネントをインスタンス化して設定することによって前記トポロジを前記メディアプロセッサが実施するステップと、
前記実施されたトポロジに従って前記マルチメディアデータを通過させるステップであって、前記通過させるステップは前記メディアプロセッサによって統御され、前記マルチメディアデータは、前記１つまたは複数のソースから前記メディアセッションへ流れ込み、前記メディアセッションから出て前記メディアプロセッサへ流れ込み、前記メディアプロセッサと前記１つまたは複数のマルチメディアコンポーネントとの間を通過して、前記メディアプロセッサから出てメディアシンクへ流れ込む、ステップと
を含むことを特徴とする方法。
【請求項２】
前記マルチメディアデータに前記一連のマルチメディアオペレーションを実施して前記１組の出力マルチメディアストリームを作成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記マルチメディアコンポーネントは、ソフトウェアオブジェクトであることを特徴とする請求項１に記載の方法。
【請求項４】
前記トポロジ生成要素は、トポロジローダであることを特徴とする請求項１に記載の方法。
【請求項５】
前記トポロジ生成要素は、アプリケーションプログラムであることを特徴とする請求項１に記載の方法。
【請求項６】
前記メディアプロセッサは、前記マルチメディアデータをアプリケーションに露出することを特徴とする請求項１に記載の方法。
【請求項７】
前記メディアプロセッサは、メディアシンクとして構成されることによって前記マルチメディアデータを受け入れることを特徴とする請求項１に記載の方法。
【請求項８】
マルチメディアデータを処理するシステムであって、
アプリケーションから命令を受け取るように構成された制御レイヤを備えており、前記制御レイヤは、
１組の入力マルチメディアストリーム、前記入力マルチメディアストリームについての１つまたは複数のソース、前記マルチメディアデータに実施される一連のオペレーション、および１組の出力マルチメディアストリームを含んでいるオブジェクトを記述するトポロジを生成するように構成されたトポロジ生成要素であって、前記トポロジにより記述された通りに前記オブジェクトをインスタンス化して設定することによって前記トポロジを実施する、トポロジ生成要素と、
前記トポロジに記述されるように前記マルチメディアデータの通過を統御し、前記マルチメディアデータ上の前記一連のマルチメディアオペレーションの実施を統御して前記１組の出力マルチメディアストリームを生成するように構成されたメディアプロセッサと、
前記トポロジを前記メディアプロセッサへ送信して前記メディアプロセッサと前記トポロジ生成要素とを制御するように構成されたメディアセッションであって、前記マルチメディアデータは、前記１つまたは複数のソースから前記メディアセッションへ流れ込み、前記メディアセッションから出て前記メディアプロセッサへ流れ込み、前記メディアプロセッサと前記１つまたは複数のマルチメディアコンポーネントとの間を通過して、前記メディアプロセッサから出てメディアシンクへ流れ込む、メディアセッションと
を含んでおり、前記システムはさらに
前記制御レイヤに結合されたコアレイヤを備えており、前記コアレイヤは、
前記入力メディアストリームと、
前記入力マルチメディアストリームについての前記ソースと、
前記マルチメディアデータに作用するように構成された１つまたは複数のトランスフォームと、
前記制御レイヤに結合された１つまたは複数のストリームシンクと、
前記１組の出力マルチメディアストリームを供給するように構成された１つまたは複数のメディアシンクと
を含むように構成されている
ことを特徴とするシステム。
【請求項９】
前記マルチメディアコンポーネントは、ソフトウェアオブジェクトであることを特徴とする請求項８に記載のシステム。
【請求項１０】
前記トポロジ生成要素は、トポロジローダであることを特徴とする請求項８に記載のシステム。
【請求項１１】
前記トポロジ生成要素は、アプリケーションプログラムであることを特徴とする請求項８に記載のシステム。
【請求項１２】
前記メディアプロセッサは、前記マルチメディアデータをアプリケーションに露出することを特徴とする請求項８に記載のシステム。
【請求項１３】
前記メディアプロセッサは、メディアシンクとして構成されることによって前記マルチメディアデータを受け入れることを特徴とする請求項８に記載のシステム。
【請求項１４】
マルチメディアデータを処理する動作を実施するための内部に記憶された命令を有するコンピュータ読取り可能媒体であって、前記動作が
トポロジ生成要素中の１つまたは複数のマルチメディアコンポーネント間の接続のトポロジを生成するステップであって、前記トポロジは、１組の入力マルチメディアストリーム、前記入力マルチメディアストリームについての１つまたは複数のソース、前記マルチメディアデータに実施される一連のオペレーション、および１組の出力マルチメディアストリームを含む１つまたは複数のマルチメディアコンポーネントと、前記マルチメディアコンポーネント間の接続とを記述する、ステップと、
メディアプロセッサに前記トポロジをメディアセッションが伝送するステップであって、前記メディアセッションは、前記メディアプロセッサおよび前記トポロジ生成要素を制御し、アプリケーションへのインターフェースに制御を提供するメディアエンジンにより制御される、ステップと、
前記トポロジにより記述された通りに前記マルチメディアコンポーネントをインスタンス化して設定することによって前記トポロジを前記メディアプロセッサが実施するステップと、
前記実施されたトポロジに従って前記マルチメディアデータを通過させるステップであって、前記通過させるステップは前記メディアプロセッサによって統御され、前記マルチメディアデータは、前記１つまたは複数のソースから前記メディアセッションへ流れ込み、前記メディアセッションから出て前記メディアプロセッサへ流れ込み、前記メディアプロセッサと前記１つまたは複数のマルチメディアコンポーネントとの間を通過して、前記メディアプロセッサから出てメディアシンクへ流れ込む、ステップと
を含むことを特徴とするコンピュータ読取り可能媒体。
【請求項１５】
前記マルチメディアデータに前記一連のマルチメディアオペレーションを実施して前記１組の出力マルチメディアストリームを作成するステップをさらに含むことを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【請求項１６】
前記マルチメディアコンポーネントは、ソフトウェアオブジェクトであることを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【請求項１７】
前記トポロジ生成要素は、トポロジローダであることを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【請求項１８】
前記トポロジ生成要素は、アプリケーションプログラムであることを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【請求項１９】
前記メディアプロセッサは、前記マルチメディアデータをアプリケーションに露出することを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【請求項２０】
前記メディアプロセッサは、メディアシンクとして構成されることによって前記マルチメディアデータを受け入れることを特徴とする請求項１４に記載のコンピュータ読取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピューティングに関し、より詳細には計算機環境中のマルチメディアデータの処理に関する。
【背景技術】
【０００２】
コンピュータの機能が、以前には別個の電子コンポーネントを必要としたエンターテインメント分野へと広がるにつれ、効率および使いやすさの向上が望ましくなっている。一解決方法は、Ｍｉｃｒｏｓｏｆｔ（登録商標）のＤｉｒｅｃｔＳｈｏｗ（登録商標）であり、これは、ローカルファイルもしくはインターネットサーバからのマルチメディアストリームの再生、装置からのマルチメディアストリームのキャプチャ（ｃａｐｔｕｒｅ）、およびマルチメディアストリームのフォーマット変換を提供する。ＤｉｒｅｃｔＳｈｏｗ（登録商標）では、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ａｕｄｉｏ、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏ、ＭＰＥＧ、Ａｐｐｌｅ（登録商標）ＱｕｉｃｋＴｉｍｅ（登録商標）、ＡＶＩ（Ａｕｄｉｏ−Ｖｉｄｅｏ  Ｉｎｔｅｒｌｅａｖｅｄ音声映像交互配置形式）、ＷＡＶなどのファイルタイプのビデオコンテンツおよびオーディオコンテンツの再生が可能になる。ＤｉｒｅｃｔＳｈｏｗ（登録商標）は、プラグ可能なフィルタコンポーネントのシステムを含んでいる。フィルタは、ＤｉｒｅｃｔＳｈｏｗ（登録商標）インターフェースをサポートし、またファイルへのデータを読み取り、コピーし、修正し、書き込むことによって、データのストリームに作用することができるオブジェクトである。基本的なタイプのフィルタは、ディスク上のファイル、サテライトフィード（ｓａｔｅｌｌｉｔｅ  ｆｅｅｄ）、インターネットサーバ、ＶＣＲなどの何らかのソースからデータを取り込み、フィルタの接続であるフィルタグラフにデータを導入するソースフィルタを含んでいる。このフィルタグラフは、データのフォーマットを変換する変換フィルタ、データを受信しデータを送信する同期およびソースフィルタ（ｓｙｎｃ  ａｎｄ  ｓｏｕｒｃｅ  ｆｉｌｔｅｒ）、およびディスプレイ装置へのデータのレンダリングなど、データを再現するレンダリングフィルタを提供する。このデータはまた、メディアを受け入れるどのロケーションに対しても再現することができる。ＤｉｒｅｃｔＳｈｏｗ（登録商標）中に含まれる他のタイプのフィルタは、データタイプを変更することなく効果を追加する効果フィルタ（ｅｆｆｅｃｔ  ｆｉｌｔｅｒ）と、ソースデータのフォーマットを理解し、どのようにして正しいバイトを読み取り、タイムスタンプを作成し、シークを実施するかを知っているパーサフィルタ（ｐａｒｓｅｒ  ｆｉｌｔｅｒ）とを含んでいる。
【０００３】
したがって、すべてのデータが、かなりたくさんの制御情報と一緒にフィルタからフィルタへと通過する。フィルタがピンを使用して接続される場合、フィルタグラフが作成される。フィルタグラフ中のデータフローおよび接続を制御するために、ＤｉｒｅｃｔＳｈｏｗ（登録商標）は、フィルタグラフマネージャを含んでいる。このフィルタグラフマネージャは、確実にフィルタが適切な順序で接続されるようにする助けをするが、データと制御の多くはフィルタグラフマネージャを通過しない。フィルタは適切にリンクされる必要がある。例えば、フィルタグラフマネージャには、レンダリング構成を求めて探索し、使用可能なフィルタのタイプを判定し、所与のデータタイプに対する適切な順序でフィルタをリンクし、適切なレンダリングフィルタを提供する必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
フィルタは多数のプログラムの再使用を可能としたが、フィルタの使用はまた、いくつかの予期せぬ問題を引き起こした。フィルタによって引き起こされた問題の１つは、存在するようになった、これらのフィルタに対する多数のＡＰＩである。各フィルタは実際上、別個のＡＰＩを有する。したがって、所与のフィルタには、それが接続する可能性のあるあらゆるフィルタについてのＡＰＩにインターフェースできる必要がある。また、フィルタの使用が、問題のある所与のフィルタをシャットダウンするという問題を引き起こす。グラフ中の所与のフィルタがシャットダウンされる場合、そのシャットダウンフィルタとインターフェースするフィルタはどれも、異なる関連するフィルタを必要とする。一般に、インターフェースが失われた場合に、フィルタの状態が知られていない可能性があるので、フィルタをプログラムしてインターフェースの損失を適切に処理することは難しい。したがって、インターフェースの損失は、予測できない振る舞いをフィルタに引き起こす傾向があり、また最終的にはプログラムの悪い振る舞いを引き起こす傾向がある。さらに、ＤｉｒｅｃｔＳｈｏｗ（登録商標）における全体制御が、２つのブロック間に分配される。フィルタ間のインターフェースは、データフローを制御するが、このフィルタマネージャは、インスタンシエイション（ｉｎｓｔａｎｔｉａｔｉｏｎ）、およびフィルタの除去を制御する。ブロック間の境界を横切る何らかの制御ファンクションが存在するのは不可避なので、このようにして制御を分配することにより、ソフトウェア設計が煩わしいものとなる。ＤｉｒｅｃｔＳｈｏｗ（登録商標）に伴う別の問題は、これらのフィルタには、メディアフォーマットネゴシエーション（ｍｅｄｉａ  ｆｏｒｍａｔ  ｎｅｇｏｔｉａｔｉｏｎ）およびバッファマネージメント機能の責任があることである。フィルタは、他のフィルタと情報をやりとりしてこのタスクをやり遂げる。フィルタに対する依存性によって、ＤｉｒｅｃｔＳｈｏｗ（登録商標）上に構築されるアプリケーションは、フィルタ中にプログラムされ得るバグや非効率の影響を受けやすくなる。したがって、書き方の悪いフィルタは、フィルタグラフおよびフィルタグラフに関連するアプリケーションを簡単にだめにしてしまう可能性がある。
【０００５】
ＤｉｒｅｃｔＳｈｏｗ（登録商標）アーキテクチャに伴う問題に対処する必要がある。より詳細には、マルチメディアデータ処理の制御を改善し、マルチメディアコンポーネント間の通信についてのフィルタへの依存性に対処する必要がある。
【課題を解決するための手段】
【０００６】
したがって、マルチメディアデータを処理するシステムおよび方法は、制御ファンクションをデータハンドリングファンクションから分離し、それによってマルチメディアストリームの効率的な処理を提供する。一方法は、トポロジ生成要素中で１つまたは複数のマルチメディアコンポーネント間で、あるトポロジの接続を作成するステップを提供し、このトポロジは、１組の入力マルチメディアストリーム、その入力マルチメディアストリームの１つまたは複数のソース、マルチメディアデータ上で実施される一連のオペレーション、および１組の出力マルチメディアストリームを記述する。この方法はさらに、このトポロジをメディアプロセッサに伝送するステップと、このトポロジに従ってデータを通過させるステップとを提供し、この通過させるステップは、メディアプロセッサによって統御される。このトポロジ生成要素は、トポロジローダまたはアプリケーションとすることができるが、メディアプロセッサが統御する範囲外で実行される。メディアプロセッサは、マルチメディアデータにその一連のマルチメディアオペレーションを実施して１組の出力マルチメディアストリームを作成するよう統御する。一実施形態では、マルチメディアコンポーネントは、ソフトウェアオブジェクトである。
【０００７】
他の実施形態は、メディアプロセッサがアクティブな間にメディアプロセッサが使用中の第１のトポロジを変更する方法を提供する。この方法に従って、メディアプロセッサは、メディアプロセッサの最新状態を保持し、第１のトポロジを第２のトポロジへと変換する命令を受け取り、その命令に従って、第１のトポロジを第２のトポロジへと更新する。その命令には、第１のトポロジと第２のトポロジの差を含むことができる。第１のトポロジを第２のトポロジへと更新した後、メディアプロセッサは、第１のトポロジを第２のトポロジに更新した後にインターフェースアクティビティを再開し、メッセージをアプリケーションに送信する。トポロジの変更の前に、このメディアプロセッサをメッセージコールが可能なように構成することができる。第１のトポロジを変換する命令をメッセージを介して外部ソースから受信して第１のトポロジを変更するプロセスを開始することができる。
【０００８】
他の実施形態は、どのようにして１組のマルチメディアコンポーネントを使用して１つまたは複数のマルチメディアデータストリームに一連のマルチメディアオペレーションを実施するかを判定する方法を対象としている。この方法は、マルチメディアコンポーネントの使用を、使用可能なサンプルデータについて前のコンポーネントに照会することによって判定することができる点で再帰的（ｒｅｃｕｒｓｉｖｅ）である。この方法は、出力がシンク装置の入力に接続された１つまたは複数のマルチメディアコンポーネントの位置決めを行うステップと、このマルチメディアコンポーネントに照会してサンプルが使用可能かどうかを判定するステップとを含み、この照会をするステップは、サンプルが使用可能でない場合、マルチメディアコンポーネントへの入力を検査するステップを含むことができる。この入力が使用可能なサンプルをもたない場合、このマルチメディアコンポーネントを送るメディアソースにサンプルがあるかどうかを検査する。メディアソースが使用可能なサンプルをもたない場合には、この方法は、ファイルファンクションの終了を実施するステップ、またはエラー状態を宣言するステップを提供する。サンプルが使用可能な場合には、この方法は、このマルチメディアコンポーネントの次のマルチメディアコンポーネントへとサンプルを移動するステップを提供する。
【０００９】
他の実施形態は、「スクラビング（ｓｃｒｕｂｂｉｎｇ）」と呼ぶことができる、メディアストリームのセクションを検索する方法を対象としている。この方法は、メディアストリームのセクションをキャッシュするステップを含む。メディアストリームのキャッシュされたセクションは、メディアストリームのプレゼンテーションポイント（ｐｒｅｓｅｎｔａｔｉｏｎ  ｐｏｉｎｔ）を含むことができる。次いで、この方法は、外部ソースからメディアプロセッサへの要求を受信してメディアストリームのキャッシュされたセクションを検索するステップと、メディアストリームのそのセクションがキャッシュされたかどうかを識別するために探索するステップとを提供する。メディアストリームのそのセクションがキャッシュされた場合、この方法は、この要求されたキャッシュされたセクションを転送するステップを提供する。このキャッシングは、アプリケーションにおけるユーザ設定に従うことができ、それは、キャッシュすべきか否かにかかわらず、キャッシュされたセクションに含むべきいくつかのフレームおよびいくつかのサンプルを含むことができる。一実施形態では、キャッシュされたセクションは、連続したビデオデータである。
【００１０】
添付特許請求の範囲は、本発明の特徴を詳細にわたって記述しているが、本発明は、その目的および利点と共に、添付図面と併せ以下の詳細な説明から最も良く理解することができよう。
【発明を実施するための最良の形態】
【００１１】
図１を参照すると、本発明を実施することができる例示の計算機装置１００が示されている。この計算機装置１００は、適切な計算機装置の一例にすぎず、本発明の使用または機能の範囲に関してどのような限定を示唆することも意図してはいない。例えば、例示の計算機装置１００は、図１に示す計算機装置１０〜１７のどれとも等価ではない。例示の計算機装置１００では、メモリ区分、仮想マシン、同様なプログラミング技法を介してなど、１つまたは複数の計算機装置１０〜１７を実施することができ、１つの物理計算機構造が複数の構造に帰されるような以下に説明する動作を実施することを可能にする。
【００１２】
本発明は、コンピュータで実行されるプログラムモジュールなどのコンピュータ実行可能な命令の一般的なコンテキストで説明することができる。全般的に、プログラムモジュールは、特定のタスクを実施し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。分散計算機環境では、タスクは、通信ネットワークを介してリンクされるリモート処理装置によって実施することができる。分散計算機環境では、プログラムモジュールは、メモリ記憶装置を含めて、ローカルコンピュータ記憶媒体にもリモートコンピュータ記憶媒体にも配置することができる。
【００１３】
計算機装置１００のコンポーネントは、それだけには限定されないが、処理装置１２０、システムメモリ１３０、およびシステムメモリを含めて様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１を含むことができる。システムバス１２１は、メモリバスもしくはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのうちのどれかを使用したローカルバスを含めて様々なタイプのバス構造のうちのどれでもよい。例として、限定するものではないが、かかるアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ産業標準アーキテクチャ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅマイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ拡張ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ    Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄ  Ａｓｓｏｃｉａｔｅビデオ電子装置規格化協会）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００１４】
計算機装置１００は、一般に様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、計算機装置１００でアクセスすることができ、揮発性媒体も不揮発性媒体も、着脱可能媒体も着脱不能媒体も含む使用可能な任意の媒体とすることができる。例として、限定するものではないが、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、他のデータなど情報記憶の任意の方法および技術で実施される揮発性と不揮発性の両者、着脱可能と着脱不能の両者の媒体を含む。コンピュータ記憶媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋデジタル多用途ディスク）もしくは他の光ディスク記憶装置、磁気カセット、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望の情報を記憶するために使用することができ、計算機装置１００でアクセスすることができる他の任意の媒体が含まれる。通信媒体は一般に、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または搬送波や他のトランスポートメカニズムなどの変調データ信号の形の他のデータを実施し、任意の情報配信媒体を含む。用語「変調データ信号（ｍｏｄｕｌａｔｅｄ  ｄａｔａ  ｓｉｇｎａｌ）」は、信号中の情報を符号化するようにして１つまたは複数の信号特性を設定または変更した信号を意味する。例として、限定するものではないが、通信媒体には、有線ネットワークや直接配線接続などの有線媒体、音響、ＲＦ、赤外線または他の無線媒体などの無線媒体が含まれる。前述のどの組合せもまた、コンピュータ読取り可能媒体の範囲内に含まれるものとする。
【００１５】
システムメモリ１３０は、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ読取り専用メモリ）１３１やＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙランダムアクセスメモリ）１３２など揮発性メモリおよび／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動中などコンピュータ１１０内の要素間での情報転送を助ける基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ基本入出力システム）１３３は、一般にＲＯＭ１３１に記憶される。ＲＡＭ１３２は一般に、処理装置１２０上で即時アクセス可能および／または現在動作中のデータおよび／またはプログラムモジュールを含んでいる。例として、限定するものではないが、図１に、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００１６】
計算機装置１００はまた、着脱可能／着脱不能で、揮発性／不揮発性のコンピュータ記憶媒体を含むことができる。例にすぎないが、図１に、着脱不能な不揮発性磁気媒体から情報を読み取りそれに書き込むハードディスクドライブ１４１、着脱可能な不揮発性磁気ディスク１５２から情報を読み取りそれに書き込む磁気ディスクドライブ１５１、ＣＤ  ＲＯＭや他の光媒体など着脱可能な不揮発性光ディスク１５６から情報を読み取りそれに書き込む光ディスクドライブ１５５を示す。例示の動作環境中で使用できる他の着脱可能／着脱不能な揮発性／不揮発性のコンピュータ記憶媒体には、それだけには限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は、一般に、インターフェース１４０などの着脱不能メモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、一般にインターフェース１５０などの着脱可能なメモリインターフェースによってシステムバス１２１に接続される。
【００１７】
前述の、図１に示したドライブおよびそれに関連するコンピュータ記憶媒体は、計算機装置１００にとってのコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの記憶域を提供する。図１では、例えばハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するように示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じにすることもまたは異なるものにすることもできることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７が、ここで異なる番号が付与されていることは、少なくともこれらが異なるコピーであることを示している。ユーザは、キーボード１６２や、通常マウス、トラックボール、またはタッチパッドと呼ばれるポインティング装置１６１などの入力装置を介して計算機装置１００にコマンドおよび情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれ得る。これらおよび他の入力装置はしばしば、システムバスに結合されたユーザ入力インターフェース１６０を介して処理装置１２０に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓユニバーサルシリアルバス）など他のインターフェースおよびバス構造で接続することもできる。モニタ１９１または他のタイプのディスプレイ装置はまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続することができる。このモニタに加えてコンピュータはまた、出力周辺インターフェース１９５を介して接続することができるスピーカ１９７やプリンタ１９６など他の周辺出力装置を含むことができる。
【００１８】
計算機装置１００は、図１に示すようなネットワーク化環境で１つまたは複数のリモートコンピュータへの論理接続を使用して動作する。図１にリモート計算機装置１８０への一般的なネットワーク接続１７１を示す。この一般的なネットワーク接続１７１は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋローカルエリアネットワーク）、ＷＡＮ（Ｗｉｄｅ−Ａｒｅａ  Ｎｅｔｗｏｒｋワイドエリアネットワーク）、イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））プロトコル、トークンリング（Ｔｏｋｅｎ−Ｒｉｎｇ）プロトコルに準拠したネットワーク、またはインターネット（Ｉｎｔｅｒｎｅｔ）やワールドワイドウェブ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）など他の論理ネットワークまたは物理ネットワークを含めて様々な異なるタイプのネットワーク接続のうちのどれにもすることができる。
【００１９】
ネットワーク環境中で使用する場合、計算機装置１００は、ネットワークインターフェースカード、モデム、または同様なネットワーク装置とすることもできるネットワークインターフェースまたはアダプタ１７０を介して、一般的なネットワーク接続１７１に接続される。ネットワーク化環境中では、計算機装置１００に関連して示されるプログラムモジュール、またはその一部分は、リモートメモリ記憶装置に記憶することができる。ここに示したネットワーク接続は例であり、コンピュータ間に通信リンクを確立する他の手段を使用することもできることが、当業者には理解されよう。
【００２０】
以下の説明では、本発明は、別の方法で示していないかぎり、１つまたは複数の計算機装置で実施される動作およびオペレーションのシンボリック表現に関して説明することにする。したがって、時にはコンピュータ実行と呼ぶこともある、かかる動作およびオペレーションは、構造化された形式でデータを表現する電気信号の、計算機装置の処理装置による操作（ｍａｎｉｐｕｌａｔｉｏｎ）を含む。この操作は、データを変換し、あるいはデータを計算機装置のメモリシステム中のロケーションに保持し、これは、当業者がよく理解するような方法で、計算機装置のオペレーションを、再構成または別の方法で変更する。データが維持されるデータ構造は、データのフォーマットによって定義される特定のプロパティを有する、メモリの物理ロケーションである。しかし、本発明は前述のコンテキストで説明されるが、以下に説明するいくつかの動作およびオペレーションをハードウェアでも実施できることが当業者には理解されるように、これは限定を意味するものではない。
【００２１】
図２を参照すると、ブロック図は、メディアファウンデーションシステム（ｍｅｄｉａ  ｆｏｕｎｄａｔｉｏｎ  ｓｙｓｔｅｍ）２００を示している。コアレイヤ２１１は、メディアソース２１０、トランスフォーム（ｔｒａｎｓｆｏｒｍ）２０８、およびメディアシンク２３０を含む。メディアファウンデーションシステム２００は、メディアストリームを受信し送信するアプリケーション２０２に結合されて示されている。制御レイヤ２０１は、メディアエンジン２６０、メディアセッション２４０、メディアプロセッサ２２０およびトポロジローダ２５０を含む。データは、メディアファウンデーション２００を経由してメディアソース２１０から開始されてメディアセッション２４０へと流れ込み、次いでメディアプロセッサ２２０へと流れ込む。メディアプロセッサ２２０から、データはトランスフォーム２０８へと流れ込み、１度または複数回、メディアプロセッサ２２０へと戻る。次いで、データは、メディアプロセッサ２２０からメディアセッション２４０へと流れ込み、次いでストリームシンク２１２へと流れ込む。メディアエンジン２６０は、アプリケーション２０２へのインターフェースに制御を提供し、制御レイヤ２０１の全体の制御をもたらし、トポロジローダ２５０は、トポロジに規定されたイベントが確実に起こるようにする。メディアファウンデーションシステム２００は、ストリーミングメディアオブジェクトを接続するためのインターフェースとレイアウトを提供する。
【００２２】
コアレイヤはメディアソースコンポーネント２１０とメディアシンクコンポーネント２３０を含む。また、メディアソース２１０の制御下で動作するストリームソース２１４と、メディアシンク２３０の制御下で動作するストリームシンク２１２も含まれる。ストリームソース２１４は、マルチメディアデータを記憶装置またはキャプチャ装置から制御レイヤ２０１へと転送し、ストリームシンク２１２は、マルチメディアデータをメディアエンジン２６０からレンダリング装置または記憶装置（図示せず）へと転送する。メディアソースコンポーネント２１０は、ストリームソース２１４の制御を提供するための状態マシン（ｓｔａｔｅ  ｍａｃｈｉｎｅ、状態機械）を実装する。メディアシンクコンポーネント２３０は、ストリームシンク２１２の制御を提供する状態マシンを実装する。それぞれの場合に、状態処理とデータ移動は分離される。
【００２３】
メディアソース２１０、メディアシンク２３０、およびトランスフォーム２０８は、ストリームソース２１４およびストリームシンク２１２と共に、コアレイヤ２１１の一部を構成するオブジェクトを含む。これらのコンポーネントは、定義済みのファンクションを実装するプログラマチックオブジェクト（ｐｒｏｇｒａｍｍａｔｉｃ  ｏｂｊｅｃｔ）である。メディアソース２１０およびストリームソース２１４は、マルチメディアデータのキャプチャまたは検索を実現し、このデータをメディアセッション２４０に提供する。データのソースには、それだけには限定されないが、ハードドライブなどのディスク、ＣＤもしくはＤＶＤ、インターネット、ランダムアクセスメモリ（ＲＡＭ）、ビデオＲＡＭ、ビデオカメラ、スキャナ、スチルイメージカメラ、およびマイクロフォンが含まれる。メディアシンク２３０は、ストリームシンク２１２中のデータの転送を制御するオブジェクトを含む。ストリームシンク２１２は、記憶またはレンダリングのためにデータを制御レイヤ２０１から受け入れるオブジェクトからなる。データのシンクには、それだけには限定されないが、ハードドライブなどのディスク、書込み可能ＣＤもしくは書込み可能ＤＶＤ、インターネットなどコンピュータネットワーク上のブロードキャスト、プリンタ、モニタなどのディスプレイ装置、およびスピーカが含まれる。メディアソース２１０用のデータもメディアシンク２３０用のデータも、それだけには限定されないが、イーサネット（登録商標）、無線ネットワーク、デジタル化前のアナログケーブル、ＵＳＢ、ＩＥＥＥ１３８４、パラレルポート、シリアルポート、およびディスクインターフェースを含めて多くの媒体上を移送することができる。
【００２４】
トランスポート２０８は、データを操作するオブジェクトを含む。これらのトランスフォームは、符号器、復号器、スプリッタ、マルチプレクサ、リバーブ（ｒｅｖｅｒｂ）などの効果を加えるためのバス制御や高音域制御などのオーディオ処理、カラーマスクの調整などのビデオ処理、イメージシャープニング（ｉｍａｇｅ  ｓｈａｒｐｅｎｉｎｇ）、およびコントラスト制御または輝度制御を含むことができる。この符号器および復号器は、オーディオも、ビデオも、またイメージデータも処理する。ビデオデータタイプには、ＭＰＥＧ、Ａｐｐｌｅ  Ｑｕｉｃｋｔｉｍｅ（登録商標）、ＡＶＩ、ならびにＨ．２６３およびＷｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏ（ＷＭＶ）を含むことができる。ビデオ規格の多くは、これらの規格がオーディオもビデオも転送する手段を有する点で真のマルチメディア規格である。イメージデータフォーマットは、ＪＰＥＧ、ＧＩＦ、Ｆａｘ、およびＴｉｆｆを含んでいる。オーディオ規格は、ＭＰ３、ＰＣＭ、ＡＤＰＣＭ、ならびにＣＤ再生およびＷｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ａｕｄｉｏ（ＷＭＡ）に対する規格を含むことができる。トランスフォーム２０８は、１つのフォーマットから別のフォーマットへとデータを変換するために使用することができる。例えば、トランスフォーム２０８は、ＪＰＥＧイメージをモニタ上で表示するために適したフォーマットに変換することができる。
【００２５】
図３を参照すると、典型的なマルチメディアプロセスのフローチャートが示されている。ユーザがＤＶＤを見たいと思っていると想定する。アプリケーションを起動して、ユーザがＤＶＤを見ることができるようにする。このアプリケーションは、ユーザが再生、停止、一時停止、早送り、巻戻しなどの機能を実施できるようにするＧＵＩ（ｇｒａｐｈｉｃａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅグラフィックユーザインターフェース）を有する。ブロック３０２で、ユーザは再生ボタンを選択し、このアプリケーションは、メッセージをメディアファウンデーションのメディアエンジンコンポーネントに送る。このメッセージは、このアプリケーションがＤＶＤを見るのを望んでいるという情報を含んでいる。ブロック３０４で、メディアエンジンは、メッセージをメディアセッションに送り、トポロジローダがこれらのブロックにＤＶＤの再生を開始するように伝える。ブロック３０６で、トポロジローダは、このトポロジを設定する。このトポロジは、データストリームが、メディアソースおよびストリームソース、トランスフォーム、およびメディアシンクおよびストリームシンクを通過するパスを提供する。ブロック３０８で、トポロジローダは、このトポロジをメディアプロセッサに渡す。メディアプロセッサは、このトポロジを設定し実施する。ブロック３１０で、メディアプロセッサは、メッセージをコアレイヤコンポーネントに送ってトポロジローダが呼び出すオブジェクトをインスタンス化する。適切な順序でコアレイヤのオブジェクトを呼び出しオブジェクト間でデータを通過させるのに加えて、オーディオとビデオが同期させられ所望のレートで再現されるようにデータレートを制御する。データレートはメディアセッションで決定される。ブロック３１２で、メディアセッションは、各オブジェクトに照会して所望のレートをサポートできることを判定し、このレート情報を伴うメッセージをメディアプロセッサに渡す。ブロック３１４で、メディアプロセッサは、コアレベル、通常メディアシンク中のレート決定オブジェクトからクロックレートを決定し、このクロックレートを設定する。ブロック３１６で、次いでメディアプロセッサは、コアレベルを呼び出し、トポロジが必要とするオブジェクト間でデータを通過させる。データは、最終的にメディアシンクによってスピーカおよびモニタに再現される。
【００２６】
メディアプロセッサは、トポロジによって記述されたデータフローを実施するオブジェクトである。メディアプロセッサは、データフローを記述するトポロジを用いて初期化され、メディアソースインターフェースを介してユーザにそれ自体が見えるようにする。したがって、構成された後に、メディアプロセッサは、実際にはユーザからメディアソースのように見える。メディアプロセッサは、このトポロジに基づいたいくつかのメディアストリームを見えるようにする。このトポロジでは、出力ノードごとに１つのメディアストリームがあることになる。
【００２７】
図４にトポロジを示す。データフローは、ユーザコールによって駆動され、メディアプロセッサのメディアストリームのうちの１つからサンプルをフェッチする。図４の上側のパスについて考察する。このデータフローは、このトポロジ中の出力オブジェクト（シンクオブジェクト４１２）から出発してデータを生成するオブジェクトのリストを介して再帰的に移動することにより動作する。図４の上側のパス中のプロセスは、シンクオブジェクト４１２から開始される。入力４１６に接続されるただ一つの出力ノードは、トランスフォームオブジェクト４０８に接続された出力４１８である。トランスフォームオブジェクト４０８に使用可能なサンプルがある場合、メディアプロセッサ２２０は、サンプルを読み取り、このサンプルをシンクオブジェクト４１２に書き込む。トランスフォームオブジェクト４０８に使用可能なサンプルがない場合、メディアプロセッサ２２０は、トランスフォームオブジェクト４０８の４２０で示される入力を調べ、この入力は、トランスフォームオブジェクト４０４の出力４２２に接続されている。次いで、トランスフォームオブジェクト４０４にサンプルがあるかどうかを照会する。サンプルが使用可能な場合には、そのサンプルをメディアプロセッサ２２０が読み取り、トランスフォームオブジェクト４０８に書き込む。サンプルが使用可能でない場合には、メディアプロセッサ２２０は、この場合にも１ノード分左へと移動し、メディアストリームオブジェクト４０３に使用可能なサンプルがあるかどうかを照会する。メディアストリームオブジェクト４０３は、ソースオブジェクト４０２を介してロードされる。サンプルがメディアストリームオブジェクト４０３から使用可能な場合、サンプルは、メディアストリームオブジェクト４０３からトランスフォームオブジェクト４０４へと取り込まれる。サンプルが見つからない場合、メディアプロセッサは、メディアストリームオブジェクト４０３にソースを読み取るように要求することになる。有効なサンプルが見出され次のブロックに渡されるときはいつでも、このプロセスは、最初からやり直される。このプロセスは、データが見つかった後、オブジェクトで動作させることにより完了する。トランスフォームオブジェクト４０４は、データに作用し、次いでこの変換済みのデータをトランスフォームオブジェクト４０８に渡して、データに作用させ、次いでこの変換済みのデータをシンクオブジェクト４１２に渡して、その出力にサンプルを生成するプロセスを完了する。一実施形態では、メディアプロセッサは、他のオブジェクトへの入力を有するリストオブジェクトを保持する。このリストを用いて、メディアプロセッサは、出力オブジェクトを調べ、メディアプロセッサがどのオブジェクトからメディアデータを取り込む必要があるかを判定する。
【００２８】
一実施形態では、このリストは、そのオブジェクトを保持するノードのタイプと、そのオブジェクトについての他の情報を追跡する。各タイプのオブジェクトは、メディアプロセッサの要求に異なった方法でデータを生成する。トランスフォームノードは、トランスフォームオブジェクトを含み、これらには、入力メディアサンプルを提供し出力メディアサンプルを生成するために使用される１組のコールがある。ティーノード（ｔｅｅ  ｎｏｄｅ）は、メディアプロセッサに対する、必要に応じてサンプルをコピーする指示を提供する。ティーノードは、それらの参照を開始する前に記述する必要がある。ソースノードには、メディアストリームがあり、これは、メディアプロセッサがデータのストリームを要求するために用いる非同期コールを提供し、その後、データが使用可能な場合にストリームがこのデータを提供する。
【００２９】
実施形態は、メディアプロセッサ２２０を使用するデータフローを対象にしている。一実施形態では、データフローは非同期である。すなわち、ユーザがコールを行って所与のメディアストリーム用のデータを生成し、次いでメディアプロセッサ２２０は、データを生成し、ユーザにいつデータが使用可能かを通知する。一実施形態では、トポロジが参照するコンポーネントは、互いにコールを行わない。そうではなくて、メディアプロセッサ２２０には、すべての通信に対して責任がある。中心に位置づけられた通信方法を有することにより、データフローは一貫しており、コンポーネント間にはより大きなインターオペラビリティが存在する。
【００３０】
一実施形態では、メディアプロセッサ２２０は、データフローの各側面に対処がなされているわけではない。例えば、一実施形態では、メディアプロセッサ２２０は、メディアサンプルを制御できない。
【００３１】
全体的なメディアファウンデーションアーキテクチャの観点から、メディアプロセッサは、一般にメディアエンジンのコンテキストで使用される。メディアエンジン２６０は、図２に示すメディアファウンデーションアーキテクチャを使用する際に、アプリケーション２０２が直接に使用するコンポーネントである。メディアエンジン２６０は、データのソース（一般に、ファイルネーム、ＵＲＬ、または装置、あるいは複数の簡単なソースを指定する複雑な構成）、および（出力マルチメディアファイルや、ビデオカードのようなレンダリング装置など）データの宛先を指定するアプリケーション２０２によって構成することができる。次いで開始（Ｓｔａｒｔ）、停止（Ｓｔｏｐ）などのようなコマンドを介して実行時にメディアエンジン２６０を制御する。したがって、メディアエンジン２６０は、他のメディアファウンデーションコンポーネントを使用してこの機能を達成し、アプリケーション２０２がマルチメディアオペレーションを実施するために使用する主要なオブジェクトとなる。メディアプロセッサ２２０をメディア処理セッションによって直接に制御し、トポロジローダ２５０と共に使用することができる。メディア処理セッションは、メディアエンジン２６０が、メディアソース２１０、メディアプロセッサ２２０、メディアシンク２３０、およびトポロジローダ２５０を動作させるために使用するオブジェクトである。
【００３２】
一実施形態では、メディアプロセッサ２２０は、複数の入力または出力をもつティーオブジェクトおよびトランスフォームオブジェクトをサポートする。例えば、遷移（ｔｒａｎｓｉｔｉｏｎ）は一般に、トランスフォームオブジェクトとして実装され、このトランスフォームオブジェクトは、２入力と１出力を有することになる。
【００３３】
ノードが、複数の入力を有する場合に、メディアプロセッサ２２０は、以下の方法を実施する。すなわち、トランスフォーム用の入力データを生成しようと試みる際に、メディアプロセッサ２２０は、以前のメディアサンプルのタイムスタンプに基づいて入力のうちのただ１つを選択し、この入力へのデータを生成する。メディアプロセッサ２２０がトランスフォームオブジェクトに対して入力サンプルを提供するときはいつでも、メディアプロセッサ２２０は、そのトランスフォーム用の出力データを生成しようと試みる。もしそのトランスフォームがデータを全く生成しない場合には、メディアプロセッサ２２０は、そのトランスフォームオブジェクトに入力サンプル、多分すでに使用済みの同じ入力を提供する。
【００３４】
ノードが複数の出力を有する場合には、メディアプロセッサ２２０は、これら出力についてさらに多くの情報を必要とする。トポロジローダは、この出力のプロパティを示すことになり、これらは、プライマリ（ｐｒｉｍａｒｙ）または廃棄可能（ｄｉｓｃａｒｄａｂｌｅ）のいずれかになりうる。
【００３５】
プライマリ出力は、入力ノードに渡されるサンプルのためのプライマリメモリアロケータ（ｐｒｉｍａｒｙ  ｍｅｍｏｒｙ  ａｌｌｏｃａｔｏｒ）として使用される。廃棄可能出力では、ノードに入るすべてのサンプルを得ることが保証されない。すなわち、入力サンプルが生成された場合、ユーザが、サンプルの出力を要求していない場合には、廃棄可能出力は、単にサンプルを受け取らないことになる。この廃棄可能の概念は、符号器アプリケーションにおけるプレビュー表示など処理速度を低下させる代わりにデータを失う方が好ましいようなシナリオでは有用である。
【００３６】
マルチメディアシステムの重要な機能は、実行中にマルチメディアセッションのプロパティを変更する機能である。例えば、再生アプリケーションでは、ウィンドウモードでの再生からフルスクリーンモードでの再生に切り換えることもある。あるいは、符号化アプリケーションでは、あるカメラの符号化から別のカメラの符号化へと切り換えることもある。この開示のメディアファウンデーションシステムは、トポロジ中の変更を介してこれらの機能を処理する。
【００３７】
しかし、一実施形態では、メディアプロセッサ２２０は、トポロジ自体を決して変更しない。すなわち、トポロジの変更は常に別のコンポーネントによってなされ、次いでそれがメディアプロセッサに伝えられる。メディアプロセッサ２２０が、メディアセッション２４０によって制御される場合、メディアセッション２４０には、トポロジローダを使用してメディアプロセッサ２２０のための全体のトポロジを作成し、これら全体のトポロジをそのメディアプロセッサに伝える責任がある。しかし、一実施形態では、メディアプロセッサの直接のユーザならだれでも、メディアプロセッサに対するトポロジ変更を実施することができる。
【００３８】
一実施形態では、トポロジ変更は、静的または動的とすることができる。メディアプロセッサ２２０がデータを処理していない場合、静的なトポロジ変更が行われ、これは古いトポロジを新しいトポロジで完全に置き換えることを意味する。メディアプロセッサが実行中の場合には、動的なトポロジ変更が行われ、トポロジの他の部分をそのまま保持しながらトポロジの一部分だけを変更することもできる。
【００３９】
動的なトポロジ変更を生成するいくつかのメカニズムがある。第１のメカニズムは、メディアソース生成（ｍｅｄｉａ  ｓｏｕｒｃｅ  ｇｅｎｅｒａｔｅｄ）である。この場合、メディアプロセッサ２２０内部のメディアソースのうちの１つが、そのフォーマットが以下のような何らかの方法で変化したことを検出する。すなわち、メディアストリームが変化した、メディアストリームが終了した、または新しいメディアストリームが作成されたというようにである。メディアソースは、メディアプロセッサ２２０に、変化が起こったことを通知し、メディアプロセッサ２２０は、処理するユーザにこの通知を転送し、データの処理を停止する。ユーザには、新しいトポロジを作成し、それをメディアプロセッサに送る責任がある。第２のメカニズムは、トポロジ生成（ｔｏｐｏｌｏｇｙ  ｇｅｎｅｒａｔｅｄ）である。この場合、トポロジ自体は、あるポイントでそれが変化するという情報を含んでいる。すなわち、１つまたは複数のトポロジオブジェクトは、プロパティとして設定される満了時間を有する。メディアプロセッサ２２０が満了時間に到達したことを検出する場合、メディアプロセッサは、ユーザに通知し、データの処理を停止する。最後のタイプのメカニズムは、ユーザ生成（ｕｓｅｒ  ｇｅｎｅｒａｔｅｄ）である。この場合、メディアプロセッサ２２０が実行中に、ユーザは、メディアプロセッサ２２０上に新しいトポロジを単に設定することになる。すべての場合に、メディアプロセッサ２２０は、同様の方法で、トポロジ変更に対応する。
【００４０】
図５を参照すると、動的トポロジ変更のステップがフローチャートの形で示されている。ブロック５０２で、トポロジ変更は、メディアプロセッサに対して要求される。ブロック５０４で、メディアプロセッサ２２０はまず、必要なユーザに、例えばメディアソースがフォーマットを変更したという何らかの通知を行う。ブロック５０６で、メディアプロセッサ２２０は、処理を停止し、新しいトポロジ中に残っている任意のノードで処理を再開できるようにメディアプロセッサの状態を維持する。メディアプロセッサ２２０はまた、実行を継続しようとするユーザによるどのような試みも、トポロジ変更が完了するまではただ待つような状態へとメディアプロセッサ自体を置く。次いで、ブロック５０８で、メディアプロセッサ２２０は、新しいトポロジを受け取る。この新しいトポロジは、トポロジローダまたはアプリケーションからもたらされ得る。ブロック５１０で、メディアプロセッサ２２０は、その内部トポロジを新しいトポロジに合うように更新する。ブロック５１２で、メディアプロセッサ２２０は、アプリケーションに新しいトポロジが整っていることを通知し、処理を再開する。
【００４１】
メディアプロセッサ２２０は、任意レートで実行をサポートするように設計されている。メディアソースインターフェースは、プル型インターフェースである。すなわち、ユーザは、サンプルをできるだけ速やかにプルすることができる。したがってこの意味から、メディアプロセッサ２２０は、自動的に任意レートをサポートすることになる。しかし、多くの場合に、メディアソースまたはトランスフォームはまた、それらにレートが分かっている場合には、最適化または動作の改善ができる。したがって、ユーザが、メディアプロセッサ２２０に明示的に所与のレートで実行するように伝える場合、メディアプロセッサ２２０は、そのトポロジ中の任意のメディアソースおよびトランスフォームに照会して、それらのレート能力を判定する。所与のレートが、すべてのメディアソースおよびトランスフォームによってサポートされる場合、次いで、メディアプロセッサ２２０は、メディアソースオブジェクトおよびトランスフォームオブジェクトがそれらの動作に適切な変更を行うことができるように、すべてのメディアソースオブジェクトおよびトランスフォームオブジェクトのレートを設定することになる。マルチメディアストリームを逆向きに実行することは、レート変更の特殊ケースである。
【００４２】
スクラビングは、マルチメディアプレゼンテーション内で、速やかにシークし、その位置における少数のメディアサンプルを検索できることとして定義される。マルチメディアデータを復号化する複雑さに起因して、スクラビングはマルチメディアプレゼンテーション内へのシークに比べてより複雑であり、ただ非常に長い時間がかかる。独立に復号化可能なキーフレーム間でしばしば長い時間遅延がある圧縮ビデオデータの場合には、これは特にそうである。
【００４３】
スクラビングを最適化するために、メディアプロセッサ２２０は、復号化済みのサンプルのうちの１つへのシークによってメディアプロセッサ２２０が所望のサンプルをタイムリに生成できるように、一般にそのプレゼンテーションの現在位置近くの、ある量の復号化済みのサンプルをキャッシング可能にするロジックを有する。このキャッシング動作は、メモリ使用量と良好なスクラビング性能のトレードオフを可能にするようにアプリケーションによって構成することが可能である。
【００４４】
図６は、スクラビングを最適化するために使用されるプロセスのフローチャートである。ブロック６０２では、メディアプロセッサ２２０が、サンプルデータのキャッシングに関して、ノードで生成される各サンプルにロジックを適用することになる。判断ブロック６０４では、サンプルデータをキャッシュすべきかどうかを決定する場合、メディアプロセッサはまず、サンプルデータがキャッシュされたかどうかを判断することになる。もしそうなら、ブロック６０６では何も行わない。もし違うなら、ブロック６０８では、メディアプロセッサ２２０が、ユーザが設定したように、キャッシング設定を決定することになる。このキャッシング設定は、キャッシングが望ましいノードの識別、キャッシングの頻度、キャッシングに使用するメモリ最大容量などを含むことができる。ブロック６１０では、設定を適用してサンプルをキャッシュすべきか否かを決定し、必要に応じてキャッシングすることを実現する。
【００４５】
ブロック６１２では、メディアプロセッサ２２０は、アプリケーション２０２が発行するデータ「シーク」を受け取ることになる。データシークは、例えば、ビデオストリームの先行フレームによるフレームを可能にする次のデータフレームを求める要求とすることができる。シークを受け取ると、メディアプロセッサ２２０は、ノードごとに、検査して判断ブロック６１４で、要求されたデータがキャッシュに存在するかどうかを調べる。存在する場合には、ブロック６１６では、サンプルデータを再生成する代わりにそのデータをアプリケーション２０２に送り返すことになる。存在しない場合には、ブロック６１８では、適切なトランスフォーム、ソース、または他の適切なコンポーネントを使用してサンプルデータを生成することになる。
【００４６】
ビデオ復号器の中には、復号化済みのサンプルを使用して復号器の状態を初期化することができるモードをサポートするものがある。この場合、復号化済みのサンプルの一部だけをキャッシュし、依然として良好なスクラビング性能を維持することが可能である。例えば、復号化済みのサンプルを４番目ごとにすべてキャッシュし、ユーザがこのキャッシュ中にないサンプルのうちの１つへとシークする場合、よく見ても３つのサンプルを復号化して所望の出力サンプルを生成する必要がある。
【００４７】
本発明の原理を適用できる多数の可能な実施形態を考慮すると、図面を参照して本明細書中に説明した実施形態は、例示的なことを意味するにすぎず、本発明の範囲を限定するものと取るべきではないことを理解されたい。例えば、ソフトウェアで示される例示の実施形態の要素がハードウェアで実施することもでき、また逆もまた同様であること、あるいは、例示の実施形態を、本発明の趣旨を逸脱することなく構成および詳細を変更することができることが当業者には理解されよう。したがって、本明細書中に説明した本発明では、添付の特許請求の範囲およびその等価物の範囲内に含まれ得るかかるすべての実施形態を考慮している。
【図面の簡単な説明】
【００４８】
【図１】本発明を実施することができる分散計算機システムの一例を全般的に示すブロック図である。
【図２】本発明の実施形態によるメディアファウンデーションシステムのブロックを示す図である。
【図３】本発明の実施形態による、ＤＶＤを再生するために必要なメディアエンジン中のデータフローの一例を示すフローチャートである。
【図４】本発明の実施形態によるメディアプロセッサにおいて、どのようにしてデータフローが実施されるかを示すブロック図である。
【図５】本発明の実施形態によるメディアプロセッサにおける動的なトポロジ変更を示すフローチャートである。
【図６】本発明の実施形態によるスクラビングのプロセスを例示するフローチャートである。
【符号の説明】
【００４９】
１０〜１７  計算機装置
１００  計算機装置
１２０  処理装置
１２１  システムバス
１３０  システムメモリ
１３１  読取り専用メモリ（ＲＯＭ）
１３２  ランダムアクセスメモリ（ＲＡＭ）
１３３  基本入出力システム（ＢＩＯＳ）
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  インターフェース
１４１  ハードディスクドライブ
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  インターフェース
１５１  磁気ディスクドライブ
１５２  着脱可能不揮発性磁気ディスク
１５５  光ディスクドライブ
１５６  着脱可能不揮発性光ディスク
１６０  ユーザ入力インターフェース
１６１  ポインティング装置
１６２  キーボード
１７０  ネットワークインターフェースまたはアダプタ
１７１  一般のネットワ−ク接続
１８０  リモート計算機装置
１９０  ビデオインターフェース
１９１  モニタ
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカ
２００  メディアファウンデーションシステム
２０１  制御レイヤ
２０２  アプリケーション
２０８  トランスフォーム
２１０  メディアソース、メディアソースコンポーネント
２１１  コアレイヤ
２１２  ストリームシンク
２１４  ストリームソース
２２０  メディアプロセッサ
２３０  メディアシンク、メディアシンクコンポーネント
２４０  メディアセッション
２５０  トポロジローダ
２６０  メディアエンジン
４０２  ソースオブジェクト
４０３  メディアストリームオブジェクト
４０４  トランスフォームオブジェクト
４０８  トランスフォームオブジェクト
４１２  シンクオブジェクト
４１６  入力
４１８  出力
４２０  トランスフォームオブジェクト４０８の入力
４２２  トランスフォームオブジェクト４０４の出力
【図１】
0004772297.tif 000002
【図２】
0004772297.tif 000003
【図３】
0004772297.tif 000004
【図４】
0004772297.tif 000005
【図５】
0004772297.tif 000006
【図６】
0004772297.tif 000007