(57)【要約】【課題】  マルチメディアデータの処理の制御を改善するためのマルチメディアデータのデマルチプレクサを代表する一連のインターフェイスとデータ構造（即ち、デマルチプレクサＡＰＩ）を提供する。【解決手段】  このデータ構造は、各々がコマンドの要素を含むいくつかのフィールドを利用している。ひとつの実施例においては、デマルチプレクサの適切な動作のために少なくとも七つのコマンドが形成され、これらには、Initialize、SetPresentationDescriptor、GetPresentationDescriptor、GetPendingPresentationDescriptor、ProcessInput、ProcessOutput、Flushコマンドが含まれる。【選択図】  図３
2005056364.tif 000002
【特許請求の範囲】
【請求項１】
デマルチプレクサオブジェクトと通信するためのインターフェイスの公開に関するステップを実行するためのコンピュータ実行可能命令を有するコンピュータ読み取り可能媒体であって、前記インターフェイスは、
前記デマルチプレクサオブジェクトを構成するためのInitializeメソッドと、
前記デマルチプレクサオブジェクトに関してアクティブプレゼンテーション記述子を動的に設定するためのSetPresentationDescriptorメソッドと、
前記デマルチプレクサオブジェクトに対して新たな入力の多重化ストリームを提供するためのProcessInputメソッドと、
アクティブプレゼンテーションから少なくとも一つの要素ストリームを取り出すためのProcessOutputメソッドと、
現時点で待ち行列に入れられている入力および出力のサンプルを一括消去するためのFlushメソッドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項２】
前記インターフェイスは、前記デマルチプレクサオブジェクトに関して現時点でのアクティブプレゼンテーションのコピーを取り出すためのGetPresentationDescriptorメソッドをさらに備えたことを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項３】
前記GetPresentationDescriptorメソッドは、プレゼンテーション記述子を含むことを特徴とする請求項２に記載のコンピュータ読み取り可能媒体。
【請求項４】
前記インターフェイスは、次の保留中のプレゼンテーションを取り出すためのGetPendingPresentationDescriptorメソッドをさらに備えることを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項５】
前記GetPendingPresentationDescriptorメソッドは、保留中のプレゼンテーション記述子を含むことを特徴とする請求項４に記載のコンピュータ読み取り可能媒体。
【請求項６】
前記Initializeメソッドは、多重化ストリーム記述子、該多重化ストリーム記述子のための選択されたメディアタイプ、要素ストリームのメジャータイプの配列、および該メジャータイプの配列における前記メジャータイプの総数のパラメータを含むことを特徴する請求項１に記載のコンピュータ読み取り可能媒体。
【請求項７】
前記SetPresentationDescriptorメソッドは、プレゼンテーション記述子オブジェクトに対するポインタを含むことを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項８】
前記ProcessInputメソッドは、サンプルオブジェクトに対するポインタを含むことを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項９】
前記ProcessInputメソッドは、新たなプレゼンテーションのフラグを有する戻り値をさらに含むことを特徴する請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１０】
新たなプレゼンテーションのフラグは、真の値を有する場合に、
次の保留中のプレゼンテーションを取り出すためのGetPendingPresntationDescriptorメソッドを呼び出すステップと、
所望のストリームを選択するステップと、
デマルチプレクサの入力待ち行列からのサンプルの処理を可能にするためのSetPresentationDescriptorメソッドを呼び出すステップと
を実行するためのコンピュータ実行可能命令をさらに備えたことを特徴とする請求項９に記載のコンピュータ読み取り可能媒体。
【請求項１１】
前記ProcessOutputメソッドは、ストリーム識別子と、サンプルオブジェクトに対するポインタに対するポインタを含むことを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項１２】
前記ProcessOutputメソッドは、出力戻り値をさらに含むことを特徴とする請求項１１に記載のコンピュータ読み取り可能媒体。
【請求項１３】
前記出力戻り値は、ストリームの終わりエラーコードおよびこれ以上のデータ無しのエラーコードのひとつを含むことを特徴とする請求項１２に記載のコンピュータ読み取り可能媒体。
【請求項１４】
前記インターフェイスは、データのインメモリバッファとして多重化されたデータを受け取ることを特徴とする請求項１に記載のコンピュータ読み取り可能媒体。
【請求項１５】
前記多重化されたデータは、デジタルビデオ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ）、ＭＰＥＧ２、ＡＳＦの少なくとも一つを有するフォーマットを有することを特徴とする請求項１４に記載のコンピュータ読み取り可能媒体。
【請求項１６】
デマルチプレクサでの使用のためのInitializeのデータ構造をその上に保存したコンピュータ読み取り可能媒体であって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
多重化ストリーム記述子を含む第２のフィールドと、
多重化ストリーム記述子の選択されたメディアタイプを含む第３のフィールドと、
要素ストリームのメジャータイプの配列を含む第４のフィールドと、
前記メジャータイプの配列における前記メジャータイプの総数を含む第５のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項１７】
デマルチプレクサでの使用のためのSetPresentationDescriptorのデータ構造をその上に保存したコンピュータ読み取り可能媒体であって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
プレゼンテーション記述子を含む第２のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項１８】
デマルチプレクサでの使用のためのGetPresentationDescriptorのデータ構造をその上に保存したコンピュータ読み取り可能媒体あって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
プレゼンテーション記述子を含む第２のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項１９】
デマルチプレクサでの使用のためのGetPendingPresentationDescriptorのデータ構造をその上に保存したコンピュータ読み取り可能媒体であって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
保留中のプレゼンテーション記述子を含む第２のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項２０】
デマルチプレクサでの使用のためのProcessInputのデータ構造をその上に保存したコンピュータ読み取り可能媒体であって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
サンプルオブジェクトに対するポインタを含む第２のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【請求項２１】
デマルチプレクサでの使用のためのProcessOutputのデータ構造をその上に保存したコンピュータ読み取り可能媒体であって、前記データ構造は、
ヘッダーを含む第１のフィールドと、
ストリーム識別子を含む第２のフィールドと、
サンプルオブジェクトに対するポインタに対するポインタを含む第３のフィールドと
を備えたことを特徴とするコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に電子的なデータ処理に関し、より詳細には、コンピューティング環境におけるマルチメディアデータの取り扱いに関する。
【背景技術】
【０００２】
デジタルに基づくマルチメディア、即ち、デジタル装置上で観賞するためのデジタル形式のビデオおよびオーディオの組み合わせは、能力および普及において急速に増大している。今日、製造されるほとんどすべての新しいパーソナルコンピュータは、何らかの形式のマルチメディアを含んでいる。カメラ、ビデオレコーダ、電話、テレビのようなデジタル製品の販売は、着実に増加している。マルチメディアはまた、インターネットの成長が着実かつ急速に持続するにつれて、インターネットの領域においてますます普及して一般的になりつつある。この成長と共に、その種のコンピュータ機器のユーザーによる、更なる性能の期待が生じるに至った。これら更なるユーザーの期待は、ハードウェアの能力に対してだけでなく、データそれ自身の処理能力に対しても拡大している。
【０００３】
これら増大する期待を満たすために、マルチメディアのアプリケーションに対して、ストリーミングとして知られる技術が開発された。ストリーミングによりデータを転送し、その結果、データを安定かつ連続的なストリームとして処理することがきる。これにより、ファイル全体を伝送する前に、データを表示したり、聴いたりしたりすることができるという利点があり、大きなマルチメディアファイルにとっては必須である。
【０００４】
当初は、このストリーミングの枠組みは、チェーンマネージャからの僅かな情報しか持たない一連のデータ処理モジュール（例、キャプチャリングフィルタ、変換フィルタ、そしてレンダリングフィルタ）から構成されていた。フィルタとも呼ばれるこれら複数のデータ処理モジュールは、どのように接続され、どのデータ形式を使用し、そしてどのように相互に制御するかに関して決定を行う。フィルタをチェーン状に接続している期間、プロトコルがデータフローの予め決められた固定のシーケンスを定義し、接続の折衝を制御する。典型的な折衝シーケンスは、インターフェイス、媒体、データ形式、アロケータ、そしてマスタークロックの順番で折衝する。データ処理チェーンは、コンピュータのシステム内で端から端までの解決策（ｅｎｄ−ｔｏ−ｅｎｄ  ｓｏｌｕｔｉｏｎ）を提供する。
【０００５】
ストリーミングの複雑性が増したことで、この業界では、ビデオおよびオーディオの処理チェーンのようにリアルタイム性の制約と共にデータを処理する処理チェーンを最適化することが必要になったという点を認識した。ひとつの解決策は、Ｍｉｃｒｏｓｏｆｔ（登録商標）ＣｏｒｐｏｒａｔｉｏｎによるＤｉｒｅｃｔＳｈｏｗ（登録商標）であり、これはローカルファイルやインターネットサーバーからのマルチメディアストリームの再生、装置からのマルチメディアストリームのキャプチャ、そしてマルチメディアストリームのフォーマット変換を提供する。ＤｉｒｅｃｔＳｈｏｗ（登録商標）は、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ａｕｄｉｏ、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ｖｉｄｅｏ、ＭＰＥＧ、Ａｐｐｌｅ（登録商標）のＱｕｉｃｋＴｉｍｅ（登録商標）、ＡＶＩ（Ａｕｄｉｏ−Ｖｉｄｅｏ  Ｉｎｔｅｒｌｅａｖｅｄ）、そしてＷＡＶ（Ｗｉｎｄｏｗｓ（登録商標）  Ｗａｖｅ）のようなファイルタイプのビデオおよびオーディオのコンテンツの再生を可能にしている。ＤｉｒｅｃｔＳｈｏｗ（登録商標）は、プラグイン可能なフィルタコンポーネントのシステムを含んでいる。フィルタは、ＤｉｒｅｃｔＳｈｏｗ（登録商標）インターフェイスをサポートすると共に、データのストリームに関して、データのファイルに対する読み出し、コピー、変更、および書き込みによるオペレーションを可能とするオブジェクトである。フィルタの基本タイプは、ソースフィルタを含む。このソースフィルタは、何らかのソース、例えば、ディスク上のファイルや、衛星による送出、インターネットサーバー、あるいはＶＣＲ（ＶＴＲ）のような何らかのソースからデータを取り込み、そのデータを、フィルタの接続であるフィルタグラフの中に取り入れると共に複数のフィルタを接続する。フィルタグラフの中のこれらのフィルタは、変換フィルタ、同期ソースフィルタ、およびレンダリングフィルタ、即ち、データのフォーマットを変換する変換フィルタと、データを受信し、そしてそのデータを送信する同期ソースフィルタと、データを表示装置にレンダリングする場合のようにデータをレンダリングするレンダリングフィルタとを含む。データはまた、メディアを受け入れるいずれの場所に対してもレンダリングすることができる。ＤｉｒｅｃｔＳｈｏｗ（登録商標）に含まれるその他のタイプのフィルタには、データタイプを変更することなく効果（ｅｆｆｅｃｔ）を付加するイフェクトフィルタと、ソースデータのフォーマットを理解し、どのようにして正しいバイトを読み出すかを知っており、タイムスタンプを作成し、およびシークを実行するパーサーフィルタが含まれている。
【０００６】
動作中に、すべてのデータが多量の制御情報と共にフィルタからフィルタへと通過する。各フィルタは、他のフィルタに接続するために使われる「ピン」と呼ばれるオブジェクトを含んでいる。フィルタがピンを用いて接続されると、フィルタグラフが作成される。接続されたフィルタの集まりの概念である「フィルタグラフ」と、この接続されたフィルタの集まり、即ち、「フィルタグラフ」を制御するＤｉｒｅｃｔＳｈｏｗ（登録商標）の中で作成されるオブジェクト「Ｆｉｌｔｅｒ  Ｇｒａｐｈ」との間に違いがあることに留意されたい。この「Ｆｉｌｔｅｒ  Ｇｒａｐｈ」は、より正確にはフィルタグラフマネージャと呼ばれる。フィルタグラフにおけるデータの流れと接続を制御するために、ＤｉｒｅｃｔＳｈｏｗ（登録商標）はフィルタグラフマネージャを含んでいる。このフィルタグラフマネージャは、フィルタを適切な順番で接続することの保証を支援する。しかしながら、データと多くの制御情報はフィルタグラフマネージャを経由しない。フィルタは適切にリンクされなければならない。例えば、フィルタグラフマネージャはレンダリングの構成を検索し、利用可能なフィルタのタイプを決定し、与えられたデータタイプに対して適切な順番でフィルタをリンクし、適切なレンダリングフィルタを提供しなければならない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
フィルタは、大量のプログラムの再利用を可能にした一方で、これらフィルタの使用によっていくつかの予期しない問題も生じた。フィルタによって生じた問題のひとつは、誕生したフィルタの数多くのＡＰＩである。各フィルタは本質的に別個のＡＰＩを有している。結果として、ある特定のフィルタは、このフィルタが付随することになるあらゆるフィルタのＡＰＩにインターフェイス接続する能力がなければならない。また、フィルタの使用によって、ある特定のフィルタを、問題のある状態でシャットダウンするという問題が生じる。グラフの中のある特定のフィルタがシャットダウンされると、シャットダウンされたフィルタとインターフェイスしているどのフィルタも別の関連のインターフェイスを必要とする。一般に、インターフェイスの喪失を上品に取り扱うようにフィルタをプログラミングすることは、インターフェイスが喪失した時のフィルタの状態を知り得ないので、困難である。インターフェイスの喪失は、それゆえ、フィルタにおける予測しない振る舞いにつながり、究極的には異常な振る舞いをするプログラムにつながる傾向がある。さらに、ＤｉｒｅｃｔＳｈｏｗ（登録商標）における全体的な制御は、二つのブロック間に分散されている。フィルタマネージャがフィルタの生成と除去（ｉｎｓｔａｎｔｉａｔｉｏｎ  ａｎｄ  ｒｅｍｏｖａｌ）を制御している間、フィルタ間のインターフェイスはデータの流れを制御する。このように制御を分散することは、必然的にブロック間の境界を横断する何らかの制御機能が存在するので、ソフトウェア設計を厄介なものにする。ＤｉｒｅｃｔＳｈｏｗに伴うもうひとつの問題は、フィルタがメディアフォーマットの折衝とバッファ管理機能の責務を担っていることである。フィルタはこのタスクを遂行するために他のフィルタと通信を行う。フィルタに関するこの依存性により、ＤｉｒｅｃｔＳｈｏｗ上で構築しているアプリケーションが、フィルタの中にプログラムされている可能性のあるバグや非効率性に対して影響を受けやすくなる。このようにして、下手に書かれたフィルタは、フィルタグラフとフィルタグラフに関連付けられたアプリケーションを簡単に停止させる可能性がある。
【０００８】
このため、ＤｉｒｅｃｔＳｈｏｗ（登録商標）のアーキテクチャを改善する必要性がある。より詳細には、マルチメディアデータの処理の制御を改善する必要性がある。
【課題を解決するための手段】
【０００９】
本発明は、マルチメディアデータのデマルチプレクサを表すインターフェイス、データ構造、イベントの一式を含む。データ構造はいくつかのフィールドを利用し、各々のフィールドはコマンドの要素を含んでいる。ひとつの実施例においては、デマルチプレクサの適切な動作のために、少なくとも７つのコマンドが形成され、これらにはInitialize、SetPresentationDescriptor、GetPresentationDescriptor、GetPendingPresentationDescriptor、ProcessInput、ProcessOutput、Flushコマンドが含まれている。これらのインターフェイスは、集合的に、デマルチプレクサアプリケーションプログラミングインターフェイス（Ｄｅｍｕｘ  ＡＰＩ）として知られている。このＤｅｍｕｘ  ＡＰＩは、オーディオおよびビデオ（圧縮あるいは非圧縮）のような要素ストリームデータを生成するために、統一的な方法で消費者がＤＶのような多重化ストリームデータを利用できる。
【００１０】
Initializeメソッドは、デマルチプレクサオブジェクトを初期化し、構成するために使われ、このデマルチプレクサを構成するために使われるパラメータを有している。これらのパラメータは、以下のパラメータ、即ち、多重化ストリームを記述する多重化ストリーム記述子オブジェクトと、この多重化ストリーム記述子に関する選択のメディアタイプと、ユーザーがデマルチプレクサからの出力として取り出すことに関心のある要素ストリームのメジャータイプの配列と、このメジャータイプの配列におけるメジャータイプの総数を含む。
【００１１】
SetPresentationDescriptorメソッドは、デマルチプレクサオブジェクトのアクティブプレゼンテーション記述子を動的に設定するために使われる。SetPresentationDescriptorメソッドは、プレゼンテーション記述子オブジェクトに対するポインタを有している。ProcessInputメソッドは、新規入力の多重化ストリームをデマルチプレクサオブジェクトに提供するために使われ、サンプルオブジェクトに対するポインタを含む。ProcessInputメソッドは、新たなプレゼンテーションのフラグを有する戻り値を有している。この新たなプレゼンテーションのフラグが真（TRUE）の値である場合、多重化サンプルのプレゼンテーション記述子に基づいて、このプレゼンテーションは変更される。ユーザーは、次に保留中のプレゼンテーションを取り出すためのGetPendingPresentationDescriptorメソッドを呼び出し、所望のストリームを選択し、デマルチプレクサの入力待ち行列（「キュー」とも呼ばれる）からのサンプルの処理を可能にするSetPresentationDescriptorを呼び出さなければならない。
【００１２】
ProcessOutputメソッドは、アクティブプレゼンテーションから少なくとも一つの要素ストリームを取り出すために使われる。ProcessOutputメソッドは、ストリーム識別子とサンプルオブジェクトに対するポインタへのポインタを含む。ProcessOutputメソッドは、出力戻り値をさらに含む。出力戻り値には、ストリームの終わりというエラーコードと、これ以上データがないというエラーコードを含む。
【００１３】
Flushメソッドは、現在、待ち行列中の入力および出力サンプルを一括消去するために使われる。Flushメソッドにはパラメータは必要ない。
【００１４】
GetPresentationDescriptorメソッドは、デマルチプレクサオブジェクトの現在のアクティブプレゼンテーション記述子のコピーを取り出すために使われる。GetPresentationDescriptorメソッドは、プレゼンテーション記述子を含む。
【００１５】
GetPendingPresentationDescriptorメソッドは、次に保留中のプレゼンテーションを取り出すために使われる。GetPendingPresentationDescriptorメソッドは、保留中のプレゼンテーション記述子を含む。
【００１６】
本発明の更なる特徴および利点は、添付の図面を参照して説明する例示の実施形態の詳細な説明から明らかとなるであろう。
【００１７】
特許請求の範囲は、個々に本発明の特徴を述べているけれども、本発明は、その目的および利点と共に、添付の図面を参照して行われる詳細な説明から最も良く理解されよう。
【発明を実施するための最良の形態】
【００１８】
本発明は、マルチメディアデータのデマルチプレクサを表すインターフェイス、データ構造、イベントの一式、即ち、集合的にデマルチプレクサＡＰＩと呼ばれる一式を提供する。このＡＰＩにより、オーディオおよびビデオ（圧縮あるいは非圧縮）のような要素ストリームデータを生成し、統一的な方法で消費者はＤＶや、ＭＰＥＧ２、ＡＳＦなどのような多重化ストリームデータを利用することができる。このデマルチプレクサＡＰＩは、多重化ストリームの初期化データに基づく新たなストリーム記述子の動的な生成をサポートし、多重化ストリームサンプルに基づく新たなストリーム記述子の動的な生成をサポートする。さらに、このデマルチプレクサＡＰＩは、多重化ストリームについてのメタデータを経由しての帯域外の初期化、あるいは多重化ストリームサンプルを経由しての帯域内の初期化のいずれか一方をサポートし、複数のバッファにまたがることのある、デマルチプレクスされたサンプルの生成をサポートする。Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎによるメディアファンデーション（Ｍｅｄｉａ  Ｆｏｕｎｄａｔｉｏｎ）アーキテクチャと関連（ｃｏｎｔｅｘｔ）して、このデマルチプレクサＡＰＩは、以下に説明するメディアプロセッサによって、主に制御され、メディアプロセッサに出力を受け渡す。デマルチプレクサＡＰＩは、いずれのマルチメディアアーキテクチャがデマルチプレクサを明確な方法で利用することできるように設計されている。
【００１９】
図面を参照すると、これらの図面では同様の番号が同様の要素を示すが、本発明が、適切なコンピューティング環境において実装されているように図示されている。要求されるものではないが、本発明は、パーソナルコンピュータによって実行される、プログラムモジュールのような、コンピュータで実行可能な命令という一般的な状況（ｃｏｎｔｅｘｔ）において説明されるであろう。一般に、プログラムモジュールは、特定のタスクを実行したり、特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造を含む。さらに、当業者は、本発明が、携帯型の端末、マルチプロセッサシステム、マイクロプロセッサベースあるいはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、その他同種類のものを含む、他のコンピュータシステムの構成で実施可能であることを認めるであろう。本発明は、また、通信ネットワークを通してリンクされている遠隔処理装置によってタスクが実行される分散型コンピューティング環境においても実施することができる。分散型コンピューティング環境においては、プログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶装置に配置されていることもある。
【００２０】
図１は、本発明がその上で実施することができる適切なコンピューティングシステム環境１００の例を図示している。このコンピューティングシステム環境１００は、適切なコンピューティング環境１００の単なるひとつの例であり、本発明の使用の範囲または機能について何らの限定を示唆するように意図されたものではない。コンピューティング環境１００は、例示の動作環境１００で図示された構成要素のどのひとつまたは組み合わせに関連してどのような依存性または要求を有するものとして解釈されるべきではない。
【００２１】
本発明は、数多くのその他の汎用あるいは特定目的のコンピューティングシステム環境あるいは構成で動作することができる。よく知られたコンピューティングシステム、環境および／または構成の例、即ち、本発明と共に使用することに適する可能性のある例には、これらに限定されるものではないが、パーソナルコンピュータ、サーバーコンピュータ、携帯型またはラップトップ式の装置、タブレット型装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、任意の上記システムまたは装置およびその他同種類のものを含む分散型コンピュータ環境が含まれる。
【００２２】
本発明は、コンピュータによって実行される、プログラムモジュールのような、コンピュータで実行可能な命令という一般的な状況（ｃｏｎｔｅｘｔ）において説明されることがある。一般に、プログラムモジュールには、特定のタスクを実行したり、特定の抽象データタイプを実装したりする、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明は、また、通信ネットワークを通してリンクされている遠隔処理装置によってタスクが実行される分散型コンピューティング環境において実施することができる。分散型コンピューティング環境においては、プログラムモジュールは、メモリ記憶装置を含むローカルおよび／または遠隔のコンピュータ記憶媒体に配置されていることもある。
【００２３】
図１を参照して、本発明を実施するための例示的なシステムは、コンピュータ１１０の形態で汎用コンピューティング装置を含む。コンピュータ１１０の構成要素は、これらに限定されないが、処理ユニット１２０、システムメモリ１３０、そしてシステムメモリから処理ユニット１２０を含む様々なシステム構成要素を連結するシステムバス１２１を含むことができる。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを用いたローカルバスを含む何種類かのバス構造のいずれかとすることができる。限定ではなく、例示として、この種のアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、そしてメザニンバスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００２４】
コンピュータ１１０は、典型的には種々のコンピュータ読み取り可能媒体を含む。コンピュータ読み取り可能媒体は、コンピュータ１１０でアクセスでき、そして揮発性および不揮発性媒体と、取り外し可能および取り外し不可の媒体の双方とを含む、利用可能ないずれの媒体とすることができる。限定ではなく、例示として、コンピュータ読み取り可能媒体は、コンピュータ記憶媒体および通信媒体を有してもよい。コンピュータ記憶媒体には、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたはその他のデータのような情報の保存のためのいずれかの方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可の媒体が含まれる。コンピュータ記憶媒体には、これらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶装置、あるいは所望の情報を保存するために使用することができ、コンピュータ１１０によってアクセスできるいずれかのその他の媒体が含まれる。通信媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュールあるいはその他のデータを搬送波または他のトランスポート機構のような変調されたデータ信号中に組み込むのが通常であり、およびいずれの情報配信媒体を含む。この「変調されたデータ信号」という用語は、一つ以上の特徴量（ｉｔｓ  ｃｈａｒａｃｔｅｒｉｓｔｉｃｓ  ｓｅｔ）を有する信号、あるいは情報を信号中で符号化するような方法で変更された信号を意味する。限定ではなく、例示として、通信媒体には、有線ネットワークまたは直接の有線接続（ｄｉｒｅｃｔ−ｗｉｒｅｄ  ｃｏｎｎｅｃｔｉｏｎ）のような有線媒体、そして音響、ＲＦ、赤外線およびその他の無線媒体のような無線媒体が含まれる。上記のいずれの組み合わせも、コンピュータ読み取り可能媒体の範囲内に含まれるべきである。
【００２５】
システムメモリ１３０は、読み出し専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２のような揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。スタートアップの期間などに、コンピュータ１１０内で要素間の情報を転送する助けとなる基本ルーチンを格納している基本入出力システム１３３（ＢＩＯＳ）は、通常、ＲＯＭ１３１に保存されている。ＲＡＭ１３２は、通常、即座にアクセスでき、そして／あるいは、処理ユニット１２０によって現時点で処理させられているデータおよび／またはプログラムモジュールを格納している。限定ではなく、例示として、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、そしてプログラムデータ１３７を図示している。
【００２６】
コンピュータ１１０は、また、その他の取り外し可能／取り外し不可の、揮発性／不揮発性のコンピュータ記憶媒体を有することもある。単に例示のために、図１には、取り外し不可の、不揮発性の磁気媒体から読み出したり、書き込みをするハードディスクドライブ１４１や、取り外し可能な、不揮発性の磁気ディスク１５２から読み出したり、書き込みをする磁気ディスクドライブ１５１や、ＣＤ−ＲＯＭやその他の光媒体のような取り外し可能な、不揮発性の光ディスク１５６から読み出したり、書き込みをする光ディスクドライブ１５５を図示している。例示的なオペレーティング環境において使用することができる他の取り外し可能／取り外し不可の、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体（ＩＣ）のＲＡＭ、固体（ＩＣ）のＲＯＭ、その他同種類のものが含まれる。ハードディスクドライブ１４１は、通常、インターフェイス１４０のような取り外し不可のメモリインターフェイスを通してシステムバスに接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェイス１５０のような取り外し可能なメモリインターフェイスによってシステムバス１２１に接続される。
【００２７】
上記で説明され、図１に図示された、これらドライブおよびそれらに付属するコンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、およびコンピュータ１１０のその他のデータの保管をする。図１において、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するように図示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同一であっても、異なっていても良いということに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７には、これらが少なくとも異なるコピーであることをここに図示するために異なる数字が与えられている。ユーザーは、キーボード１６２、一般にマウスと呼ばれるポインティング装置１６１、トラックボールやタッチパッド、マイクロフォン１６３、そしてタブレットや電子デジタイザ１６４のような入力装置を通してコンピュータ１１０に対してコマンドおよび情報を入力することができる。その他の入力装置（図示せず）には、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナ、またはその種の他のものを含んでもよい。これらおよびその他の入力装置は、システムバスに結合されるユーザー入力インターフェイス１６０を通して処理ユニット１２０に接続されることが多いが、パラレルポートや、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）のようなその他のインターフェイスおよびバス構造によって接続されることもある。モニター１９１やその他の種類の表示装置もまた、ビデオインターフェイス１９０のようなインターフェイス経由でシステムバス１２１に接続される。モニター１９１はまた、タッチスクリーンパネルまたはその種の他のものと一体化されていることもある。モニターおよび／またはタッチスクリーンパネルは、タブレット型のパーソナルコンピュータのような、コンピューティング装置１１０がその中に組み込まれている筐体に物理的に結合可能であることに留意されたい。さらに、コンピューティング装置１１０のようなコンピュータは、出力周辺装置インターフェイス１９５またはその種の他のものを通して接続されることのあるスピーカー１９７およびプリンタ１９６のようなその他の周辺出力装置を含んでもよい。
【００２８】
コンピュータ１１０は、遠隔コンピュータ１８０のような、一つ以上の遠隔コンピュータに論理コネクションを用いてネットワーク化された環境において動作することができる。遠隔コンピュータ１８０は、パーソナルコンピュータ、サーバー、ルータ、ネットワークＰＣ、ピア装置あるいはその他の共通ネットワークノードとすることができ、単にメモリ記憶装置１８１だけが図１に図示されているが、コンピュータ１１０に関連して上述した要素の多くあるいはすべてを含むのが通常である。図１に示された論理コネクションには、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３が含まれているが、その他のネットワークを含んでもよい。この種のネットワーキング環境は、オフィスや、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて、一般的である。例えば、コンピュータシステム１１０は、データがそこから移転されるソースマシーンを含むことができ、遠隔コンピュータ１８０は、デスティネーションマシーンを有することができる。ソースおよびデスティネーションマシーンは、しかしながら、ネットワークまたは何らかのその他の手段によって接続されている必要はなく、その代わりに、データをソースのプラットフォームによって書き込むことができて、一つのあるいは複数のデスティネーションのプラットフォームによって読み出すことができる任意の媒体を経由してデータを移転することもできることに留意されたい。
【００２９】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、ネットワークインターフェイスあるいはアダプタ１７０を通してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、インターネットのようなＷＡＮ１７３に渡って通信を確立するためにモデム１７２またはその他の手段を含むのが典型的である。モデム１７２は、内蔵、または、外付けとすることができ、ユーザー入力インターフェイス１６０経由で、あるいはその他の適切な機構で、システムバス１２１に接続することができる。ネットワーク化された環境において、プログラムモジュールは、コンピュータ１１０に関連して示すプログラムモジュール、あるいはそれらの部分は、遠隔メモリ記憶装置に保管することができる。限定ではなく、例示として、図１は、リモートアプリケーションプログラムをメモリ装置１８１上に常駐するものとして図示している。示されたネットワーク接続は例示であり、これらコンピュータ間の通信リンクを確立するその他の手段を使用することができることが理解されるであろう。
【００３０】
以下の説明においては、本発明は、別途明示されない限り、一つ以上のコンピュータによって実行される動作およびオペレーションの記号表示を参照して説明されるであろう。従って、時にコンピュータによって実行されているとみなされるそのような動作およびオペレーションには、構造化された形態でデータを表す電気的信号についてのコンピュータの処理ユニットによる操作が含まれる点は理解されよう。この操作はデータを変換するか、または、データをコンピュータのメモリシステムの場所に保持し、これにより、当業者によってよく理解されている方法でコンピュータの動作を再構成し、そうでなければ変更する。データを保持するデータ構造は、データのフォーマットによって規定された特定の属性を有するメモリの物理的な場所である。しかしながら、本発明は、前述の文脈において説明されている一方で、当業者は以降に説明される各種の動作およびオペレーションがハードウェアにおいても実施されうるということ認めるであろうから、本発明が限定的であるということを意味しない。
【００３１】
図２を参照すると、本発明のデマルチプレクサは、マイクロソフトのマルチメディアアーキテクチャのひとつの実装である、メディアファンデーション（Ｍｅｄｉａ  Ｆｏｕｎｄａｔｉｏｎ）アーキテクチャにおいて動作することができる。図２はメディアファンデーションアーキテクチャにおけるデマルチプレクサを示しているけれども、本発明のデマルチプレクサＡＰＩは、その他のマルチメディアアーキテクチャにおいても使用可能である。デマルチプレクサを説明する前に、メディアファンデーションについて説明する。メディアファンデーションは、コンポーネント化されたアーキテクチャである。図のように、メディアファンデーションは、メディアファンデーションにおける機能の基本ユニットのいくつかを担うコアレイヤ２１１のコンポーネントおよび、下にあるコアコンポーネントを用いて、より汎用的なタスクの実行を担う制御レイヤ２０１を含む。
【００３２】
コアレイヤ２１１のコンポーネントには、メディアソース２１０とストリームソース２１４が含まれ、これらは、汎用的で明確に定義されたインターフェイスを通してマルチメディアデータを提供する。メディアソース２１０は、アクセスされるストリームを含む、プレゼンテーションを記述する。異なるマルチメディアのファイルタイプまたは装置からマルチメディアデータを提供するために、多くのメディアソースが実装される。コアレイヤ２１１はさらに、ブロック２０８に示された変換部を含み、これは、汎用的で明確に定義されたインターフェイスを通してマルチメディアデータに関しある種の変換オペレーションを実行する。変換の例には、コーデック、ビデオサイズ変更、オーディオ再サンプラ、統計処理装置、カラー再サンプラ、その他がある。入力としてインターリーブされたマルチメディアデータを取り込み、そしてこのデータを個々に有用なマルチメディアデータのメディアストリームに分離する、本発明のデマルチプレクサが、図２のアーキテクチャにおける変換部である。ブロック２０８はさらにマルチプレクサを含み、これは、個々のメディアストリームを取り込み、それらをインターリーブされたマルチメディアデータに結合する。マルチプレクサは、共通の明確に定義されたインターフェイスを共有し、異なるタイプのマルチメディアデータに多重化するための多くの実施例がある。コアレイヤ２１１はさらに、ストリームシンク２１２とメディアシンク２３０を含む。メディアシンク２３０は、入力として汎用的で明確に定義されたインターフェイスを通してマルチメディアデータを受け入れる。マルチメディアデータと共に異なる機能を実行するためのメディアシンクには多くの実施例がある。例としては、マルチメディアデータをある特定のファイルタイプに書き込んだり、ビデオカードを用いてモニター上にマルチメディアデータを表示したりすることである。
【００３３】
制御レイヤ２０１のコンポーネントは、より高いレベルのタスクをより簡単な方法で実行するためにコアレイヤ２１１のコンポーネントを用いる。典型的には、制御レイヤのコンポーネントは、ある与えられたタスクに対して多くの異なるコアレイヤのコンポーネントを使うであろう。例としては、マルチメディアファイルを再生するには、メディアソースがディスクからファイルを読み出し、データを解析し、一つ以上の変換処理により圧縮のマルチメディアデータを展開し、そして一つ以上のメディアシンクがマルチメディアデータを表示することを含む。制御レイヤ２０１は、メディアストリームを受け取ったり、送ったりするためにアプリケーション２０２とやり取りを行うメディアエンジン２６０と、メディアセッション２４０と、メディアプロセッサ２２０と、メディアセッション２４０内に示されているトポロジーローダー２５０を含む。トポロジーローダー２５０は、コアレイヤのコンポーネント間でのデータフローの記述を担う、制御レイヤのコンポーネントである。制御レイヤのコンポーネントを、制御レイヤによって使用されるより原始的なコアレベルのコンポーネントへのアクセスを回避するように構成することができる。データは、システムを通して流れ、メディアソース２１０から始まり、メディアセッション２４０を通してメディアプロセッサ２２０へ、そしてメディアシンク２３０の出力に流れる。メディアプロセッサ２２０は、トポロジー中のメディアソースとその他のコンポーネントのパイプラインを駆動する。メディアセッション２４０は、いつトポロジー中のイベントが起こるかをガイドし、そしてトポロジーローダー２５０は、トポロジー中で指定されたイベントが起こることを保証する。メディアセッション２４０はまた、メディアプロセッサ２２０を構成し、メディアプロセッサによって戻されたサンプルを処理（ｃｏｎｓｕｍｅ）する。これは、メディアエンジン２６０の関連で行われ、メディアセッション２４０がメディアエンジン２６０の呼び出し元（例、アプリケーション２０２）と折衝したサンプルをメディアプロセッサ２２０からメディアシンクへ送る。トポロジー中のコンポーネントには、メディアソース２１０のコンポーネントおよびメディアシンク２３０のコンポーネントだけでなくその他のノードも含まれる。メディアファンデーションシステム２００は、ストリーミングメディアオブジェクトを接続するためのインターフェイスとレイアウトを提供する。このシステムにより、ユーザーはトポロジーのコンセプトを使用して記号による抽象化を経由して、汎用または指定のソース、変換、およびシンクオブジェクト間の接続を指定することができる。
【００３４】
図３を参照して、デマルチプレクサ３００の概要をこれから説明する。以下の説明において、コマンドが説明の中で参照される。これらのコマンドは、後述する。デマルチプレクサＡＰＩは、データのソースからデータのフォーマットを分離する。デマルチプレクサＡＰＩは、多重化されたデータをデータのインメモリバッファとして取り込み、およびデマルチプレクスのオペレーションを行う。これには、この動作を行うために多くの異なるデータソースが同一の実装のデマルチプレクサを用いることができるという望ましい効果がある。例えば、ＤＶデータを、ＤＶカメラから直接もたらすこともできるが、ハードディスク上のファイルとして保存させることもできる。この場合、多重化されたＤＶデータを生成するための二つのコードがあるが（例、カメラと通信するものと、ファイルシステムと通信するもの）、同一の実装のデマルチプレクサを使うことができる。デマルチプレクサ３００は、IMFDemultiplexerインターフェイスをサポートし、多重化ストリームをその要素ストリームの部分に分割する責任を担っている。デマルチプレクサ３００は、同期の形態で動作し（ＤＭＯと類似）、および多重化ストリーム中の変化により生じる、利用可能な要素ストリーム中の動的な変化を取り扱うことができる。デマルチプレクサは、IMFSampleインターフェイス経由で送られるサンプルを受け入れ、複数のバッファにまたがって生成サンプルを収容する。
【００３５】
多重化ストリーム３０２は、一つ以上の要素ストリームを含む単一ストリームである。要素ストリーム３０４、３０６は、同種の要素（例、オーディオ、ビデオなど）のストリームである。多重化サンプル３０８と要素サンプル３１０、３１２の間には、必ずしも何らかの種類の一対一の対応があるわけではない。例えば、多重化サンプルごとの要素ストリームごとに完全な要素サンプルがあることもあれば、ないこともある。加えて、要素サンプルが多重化ストリーム中で正しい順番になるという特別な必要性もない。ストリームから出てきた要素サンプルが同一のタイムスタンプを共有しないこともある。ある要素ストリームは、その他の要素ストリームからオフセットがあるかもしれない。いくつかの多重化ストリームは、そのストリームの期間中に単一系列（ｓｉｎｇｌｅ  ｓｅｔ）の要素ストリームのみからなることがある。いくつかの多重化ストリームは、異なった時間に異なった系列の要素ストリームを有することもある。
【００３６】
整合された要素ストリームの各系列は、プレゼンテーション３２０と呼ばれる。各系列は、対応するプレゼンテーション記述子３２２を有している。このプレゼンテーション記述子３２２は、二つの主な目的を有する。第一に、それは各要素ストリームのメディアタイプを記述する。第二に、それはどの利用可能なストリームをデマルチプレクサ３００によって抽出するかを選択するためのメカニズムを提供する。現在のプレゼンテーション３２４（Ｔｈｅ  Ｃｕｒｒｅｎｔ  Ｐｒｅｓｅｎｔａｔｉｏｎ）は、常に、選択されたストリームと現在の出力ストリームのデータタイプを記述する。
【００３７】
デマルチプレクサ３００によってサンプルを処理する前に、多重化されたサンプルを要素サンプルに変換するために使われる分割アルゴリズムは、どのストリームが抽出されることになるかを知る必要がある。この情報は、プレゼンテーション記述子３２２の中に含まれている。ストリームが選択される前には、プレゼンテーション記述子は「保留中」である。一度、ストリームが選択されると、プレゼンテーション記述子は「アクティブ（動作中）」となる。プレゼンテーションをアクティブにさせるためには、GetPendingPresentationDescriptorを呼び出すことによって保留中プレゼンテーション待ち行列３２６（「キュー」とも呼ばれる）からプレゼンテーションを取り出す。適切なストリームを選択し、その後、呼び出し元がSetPresentationDescriptorメソッドを起動する。この時点で（ある条件が合えば）、このプレゼンテーションはアクティブのプレゼンテーション３２４になり、保留中プレゼンテーション待ち行列３２６から取り除かれる。保留中のプレゼンテーションは、前のアクティブのプレゼンテーションからすべて出力された場合にだけアクティブ可能となる。
【００３８】
デマルチプレクサ３００は、少なくとも二組の待ち行列を含んでいる。これらの待ち行列は、入力待ち行列３３０と、出力待ち行列３４０、３４２である。ProcessInput()がデマルチプレクサ３００に関して呼び出されると、この入力はすぐに処理されるか、あるいは入力待ち行列３３０に入れることができる。一旦、このデータが処理されると、それは出力待ち行列３４０、３４２に入れられる。出力待ち行列にある利用可能なデータタイプとストリームは、常に、現在のアクティブなプレゼンテーション３２４に対応している。
【００３９】
デマルチプレクサ３００の全般的な説明について述べられた今、デマルチプレクサ３００の状態と遷移について説明されるべきであろう。次に続く説明において、コマンドが説明の中で参照されるであろう。これらのコマンドを以下に説明する。ここで図４を参照する。デマルチプレクサ３００が作成されたが、Initializeがまだ呼び出されていないときに、デマルチプレクサ３００は非初期化の状態にある。Initializeは、この状態におけるデマルチプレクサオブジェクト３００に関して唯一の有効なオペレーションである。Initialize()を呼び出すことにより、デマルチプレクサ３００が保留中の状態４０２に遷移する。
【００４０】
保留中の状態４０２は、有効なアクティブプレゼンテーションがないことを示している。ProcessOutputに対する呼び出しは、失敗するであろう。アクティブプレゼンテーションを設定するには、メディアプロセッサ２２０がGetPendingPresentationDescriptor()を呼び出し、適切なストリームを選択し、SetPresentationDescriptor()を呼び出す。GetPendingPresentationDescriptor()に対する呼び出しが失敗に終わる場合、次にProcessInput（）が呼び出される。その後、プレゼンテーション記述子３２２を得ることができるまで、GetPendingPresentationDescriptor()が再び呼び出される。一旦、PresentationDescriptor（プレゼンテーション記述子）がデマルチプレクサ３００上で設定されると、デマルチプレクサ３００は中立（Ｎｅｕｔｒａｌ）の状態４０４に遷移する。Flush()を呼び出すことにより、すべての待ち行列中の入力および出力データを破棄し、デマルチプレクサ３００は保留中の状態４０２に遷移する。
【００４１】
中立の状態４０４において、すべての関数の呼び出しが（初期化を除いて）有効である。ProcessInputの呼び出しに関して発見された新たなプレゼンテーションがあり、現在のプレゼンテーションの最後のサンプルが出力待ち行列から出力（Ｓｅｒｖｉｃｅ）されるとき、デマルチプレクサ３００は保留中の状態４０２に遷移する。
【００４２】
いくつかのストリームは、ストリームのコンテンツに基づいて検出することができる、固定の限られた期間を有している。この条件が検出され、すべてが出力されたとき、デマルチプレクサは、end_of_streamの状態４０６に遷移する。その後のすべての呼び出しに対しては、適切なエラーコードが返される。
【００４３】
回復不能なエラーがデマルチプレクサ３００に起こると、エラー状態４０８に遷移する。エラー状態４０８へは、他のどの状態からでも達する。デマルチプレクサ３００が除去されることになると、Release()が呼び出され、デマルチプレクサ３００がシステムから除去されるのに先立って、デマルチプレクサ３００が終わりの状態４１０に遷移する。デマルチプレクサ３００が最後の参照から解放されると、その後デマルチプレクサ３００がどの状態にあるかを顧慮することなく、デマルチプレクサ３００はメモリから除去される。Release()は、非初期化状態を含む、どの状態からでも呼び出すことができる。
【００４４】
デマルチプレクサ３００の状態と遷移が説明された今、上記で参照されたコマンドをこれから説明する。これらのコマンドには、Initialize（）、SetPresentationDescriptor()、GetPresentationDescriptor()、GetPendingPresentationDescriptor()、ProcessInput()、ProcessOutput()、そしてFlush()が含まれる。
【００４５】
図５は例示のデータ構造図である。データ構造図は、本発明のデマルチプレクサＡＰＩの７つのメッセージを構成するために使われる基本メッセージデータ構造４６０を示す。明らかなように、メッセージデータ構造４６０は、いくつかのフィールド４６２１‐Ｎを有している。好ましい実施例では、最初のフィールド４６２１は、ヘッダーのために確保される。残りのフィールドは、パラメータである。
【００４６】
本発明のデータ構造に従って、Initializeコマンドが構築される。図６のデータ構造図から明らかなように、Initializeコマンド４８０は、いくつかのフィールド４８２〜４９０で構築されている。これらのフィールドは、ヘッダーフィールド４８２、ストリーム記述子オブジェクトフィールド４８４、メディアタイプフィールド４８６、メジャータイプカウントフィールド４８８、そしてメジャータイプアレイフィールド４９０である。それぞれの各コマンドは、図５に図示されたものと同様の態様で構築される。各々を以下で説明する。
【００４７】
Initialize（）メソッドは、デマルチプレクサオブジェクト３００を構成し、および初期化する。多重化ストリーム記述子は、（任意のヘッダーデータなどを含む）デマルチプレクサの状態を初期化するのに適切なメタデータを含んでもよい。このコマンドのシンタックスは、
【００４８】
【数１】
2005056364.tif 000003
【００４９】
である。
【００５０】
pMuxedStreamDescriptorパラメータは、入力パラメータであり、多重化ストリームを記述するストリーム記述子オブジェクトに対するポインタである。このパラメータの主目的は、ストリーム記述子上にあるかもしれない任意のメタデータをデマルチプレクサ３００が使用できるようにするためである。pSelectedMediatypeパラメータは、pMuxedStreamDescriptorのために選択されたメディアタイプを指定する入力パラメータである。これは、ProcessInput()に対する呼び出しにおいてデマルチプレクサ３００に渡されるサンプルに対応しているメディアタイプである。cMajorTypesパラメータは、aMajorType配列におけるメジャータイプの総数である入力パラメータである。このパラメータはゼロであってもよい。aMajorTypesパラメータは、入力パラメータであり、呼び出し元がデマルチプレクサ３００からの出力として取り出そうとしている要素ストリームのメジャータイプの配列である。このパラメータは、cMajorTypesがゼロに等しければ、ヌル（ＮＵＬＬ）であっても良い。この配列に見られる各々のメジャータイプのデフォルトストリームは、GetPendingPresentationDescriptor()から返されるプレゼンテーション記述子において選択される。このメソッドが成功すると、メソッドはS_OKの値を返す。このメソッドが失敗すると、エラーコードを返す。プレゼンテーションが利用可能であれば、そのときそのプレゼンテーションは、GetPendingPresentationDescriptor経由で取り出すことができる。プレゼンテーションが初期化の後に利用可能でない場合は、次にデータがProcessInput経由でデマルチプレクサに送り込まれた後に、プレゼンテーションが利用可能になる。
【００５１】
SetPresentationDescriptorメソッドは、新たなストリームの選択、即ち、呼び出し元が関心のある新たなストリームの選択を指示しているデマルチプレクサ３００についてアクティブプレゼンテーション記述子を設定する。このプレゼンテーション記述子は、GetPresentationDescriptorメソッドあるいはGetPendingPresentationDescriptorメソッド経由で生成された記述子でなければならない。このコマンドのシンタックスは、
【００５２】
【数２】
2005056364.tif 000004
【００５３】
である。
【００５４】
pPresentationDescriptorパラメータは、プレゼンテーション記述子オブジェクトに対するポインタである。このメソッドが成功すると、S_OKが返される。プレゼンテーション記述子が無効であると、それはMF_E_INVALID_PRESENTATIONで失敗することがある。プレゼンテーション記述子が保留中のプレゼンテーションであり、および現在のアクティブプレゼンテーションからまだ保留中の出力がある場合、それはMF_E_OUTPUT_PENDINGで失敗することがある。現在のアクティブプレゼンテーションから保留中の出力がある場合、SetPresentationDescriptor()を保留中のプレゼンテーションと共に呼び出さないかもしれない。ストリームを選択したり、非選択したりするために、SetPresentationDescriptor()をアクティブプレゼンテーションと共に呼び出してもよい。あるストリームが選択されない場合は、そのとき出力待ち行列にあるそのストリームのすべてのサンプルが失われる。新たなストリームが選択されると、そのストリームのサンプルは、いずれ利用可能になるであろう。ストリームが異なれば、入力および出力のバッファリング要求も異なるので、新たなストリームのサンプルがどの時点で利用可能になるかは個々のデマルチプレクサによるであろう。
【００５５】
GetPresentationDescriptorメソッドは、デマルチプレクサ３００の現在アクティブなプレゼンテーション記述子のコピーを取り出す。このコマンドのシンタックスは、
【００５６】
【数３】
2005056364.tif 000005
である。
【００５７】
ppPresentationDescriptorは、プレゼンテーション記述子オブジェクトに対するポインタに対するポインタである。このメソッドが成功すると、S_OKが返される。失敗すると、エラーコードが返される。保留中の出力があると、そのときGetPresentationDescriptorは、その出力に対応するプレゼンテーション記述子を返す。
【００５８】
GetPendingPresentationDescriptorメソッドは、次の保留中のプレゼンテーションを取り出す。このコマンドのシンタックスは、
【００５９】
【数４】
2005056364.tif 000006
【００６０】
である。
【００６１】
ppPendingPresentationDescriptorパラメータは、プレゼンテーション記述子オブジェクトに対するポインタに対するポインタである。このメソッドが成功すると、S_OKが返される。保留中のプレゼンテーションがなければ、メソッドは、MF_E_PRESENTATION_NOT_AVAILABLEを返す。ProcessInputが何回か呼び出されると、いくつかの保留中のプレゼンテーションが待ち行列に並んでいることがある。このメソッドは、単に次の保留中のプレゼンテーションを返すだけであろう。現在のアクティブなプレゼンテーションのすべての出力が処理されると、保留中のプレゼンテーションがSetPresentationを呼び出すことによってアクティブにされる。
【００６２】
ProcessInputメソッドは、呼び出し元が新たな入力の多重化ストリームサンプルをデマルチプレクサに提供可能にする。デマルチプレクサが、プレゼンテーション中の新たなストリームの存在を検出すると、*pfNewPresentationAvailableが真に設定される。その呼び出し元は、::GetPendingPresentationDescriptor経由で保留中のプレゼンテーション記述子を取り出すことができる。このコマンドのシンタックスは、
【００６３】
【数５】
2005056364.tif 000007
【００６４】
である。
【００６５】
pSampleパラメータは、サンプルオブジェクトに対するポインタである。このメソッドが成功すると、S_OKを返す。pfNewPresentationAvailableパラメータは、ProcessInputに対する呼び出しによって、新たなプレゼンテーション記述子が保留中のプレゼンテーション待ち行列に加えられることになると、真を返す。このデマルチプレクシングのオペレーションは、デマルチプレクサのProcessInputあるいはProcessOutputに対する呼び出しのどちらかによって、行うことができる。どちらの場合でも、ユーザーがProcessOutputを呼び出すか、Flush()に対する呼び出しでデータを破棄するまで、ProcessInputに対する呼び出しに基づいて、データが待ち行列に入れられる。一つのプレゼンテーションだけが、同時にアクティブ可能となる。新たなプレゼンテーションが利用可能になると、呼び出し元は、ProcessOutputを呼び出して、すべての保留中の出力をクリアし、GetPendingPresentationDescriptorを呼び出してこの新たなプレゼンテーションを取り出し、それからSetPresentationを呼び出してアクティブプレゼンテーションを設定しなければならない。
【００６６】
ProcessInputメソッドは、呼び出し元がアクティブプレゼンテーションの要素ストリームや複数のストリームを取り出し可能にする。このコマンドのシンタックスは、
【００６７】
【数６】
2005056364.tif 000008
【００６８】
である。
【００６９】
dwStreamIdentifierパラメータは、要求されたサンプルのアクティブプレゼンテーションのストリーム識別子を含む３２ビット値である。ppSampleパラメータは、サンプルオブジェクトに対するポインタに対するポインタである。このメソッドが成功すると、S_OKを返す。失敗すると、エラーコードを返す。ストリームの終わりに達すると、MF_E_ENDOFSTREAMエラーコードが返される。E_NO_MORE_DATAが返される場合は、処理するために利用可能なデータがない。ProcessInput()を別の多重化されたデータサンプルと共に呼び出すことにより、このエラーを軽減することができる。利用可能なデータの処理が、アクティブプレゼンテーションがもはや有効ではないという理由でブロックされると、このメソッドはMF_E_NEW_PRESENTATIONを返す。プレゼンテーションが変わるときには、利用可能な新たな系列のストリームが存在する。ユーザーは、どのストリームを抽出するかをデマルチプレクサ３００に指示しなければならない。GetPendingPresentationDescriptorを呼び出し、所望のストリームを選択し、そしてSetPresentationDescriptor()を呼び出すことにより、入力待ち行列の更なるサンプルの処理が可能になる。このデマルチプレクサオブジェクト３００は、必要に応じてこれらサンプルの空間を割り当てる。このデマルチプレクシングのオペレーション、デマルチプレクサのProcessInputあるいはProcessOutputに対する呼び出しのどちらかによって、行うことができる。どちらの場合でも、データは、ユーザーがProcessOutputを呼び出すか、Flush()に対する呼び出しでデータが破棄されるまで、ProcessInputに対する呼び出しに基づいて待ち行列に入れられる。
【００７０】
Flushメソッドにより、呼び出し元がデマルチプレクサ３００のすべての現在の待ち行列中の入力および出力サンプルを一括消去可能となる。Flushは、また、ActivePresentationDescriptorもクリアする。これは、アップストリームのデータが新たな場所でシークされているか、呼び出し元が単純にすべてのバッファされたデータを破棄したいときに行われる。このコマンドのシンタックスは、
【００７１】
【数７】
2005056364.tif 000009
【００７２】
である。
【００７３】
このFlushコマンドには、パラメータはない。このメソッドが成功すると、S_OKを返す。失敗すると、エラーコードを返す。Flushを呼び出すことにより、デマルチプレクサ３００のすべての待ち行列中のデータのクリアはもとより、アクティブプレゼンテーション記述子もクリアする。特定のデマルチプレクサに依存して、保留中のプレゼンテーションは、GetPendingPresentationを呼び出すことによってすぐに利用可能になることもあるし、保留中のプレゼンテーションが利用可能になるまで、呼び出し元が繰り返しProcessInputを呼び出す必要があることもある。
【００７４】
デマルチプレクサ３００のコマンドが説明された今、ソース（例、アプリケーション２０２）が、多重化ストリームを受け入れるシンクについて折衝しない場合の典型的なオペレーションについて説明する。ここで図７を参照して、ソースがアプリケーションによる選択のために多重化ストリームを公開する（例、ビデオキャプチャのソースがＤＶを公開するか、または、ＴＶのソースがＭＰＥＧ２プログラムストリームを公開する）（ステップ５００）。制御レイヤ２０１は、アプリケーションがこの多重化ストリームに対するシンクについて折衝したかどうかを判断する（ステップ５０２）。アプリケーション２０２がその多重化ストリームに対するシンクについて折衝していなければ、メディアセッション２４０は、適切なデマルチプレクサをロードし、それを多重化ストリーム記述子と共に初期化する（ステップ５０４）。
【００７５】
プレゼンテーションがデマルチプレクサから利用可能であれば（ステップ５０６）、メディアセッション２４０は、要素ストリーム記述子を用いて再折衝を試みる（ステップ５０８）。トポロジーの残りの部分が構築される（ステップ５１０）。公開された要素ストリームは、ＤＭＯ（例、デコーダ）を用いてメディアプロセッサ２２０によって処理される。
【００７６】
プレゼンテーションが利用できなければ、そのときメディアセッションは、更なる情報が利用できるようになるまで、多重化ストリームに対するトポロジーを終了するためにヌルのメディアシンクを使用する（ステップ５１２）。セッションが開始され、サンプルが流れているときはいつでも、このデマルチプレクサ３００には、プレゼンテーション記述子が利用可能になるまで、サンプルが与えられる（ステップ５１４）。これは、多重化ストリームを描写するメディアプロセッサノード上で呼び出されるIMFMediaStream::ProcessSampleを呼び出すことによって行われる。メディアプロセッサ２２０は、基礎を成している多重化ストリームに関してIMFMediaStream::ProcessSampleを呼び出す（例、ＡＶＩソースがＤＶストリームを公開）。この多重化ストリームサンプルが取り出されると、メディアプロセッサがデマルチプレクサ３００上でIMFDemultiplexer::ProcessInputを呼び出す。このProcessSampleおよびProcessInputの呼び出しは、新たなプレゼンテーションのフラグがIMFDemultiplexer::ProcessInputからの戻り値に関して真になるまで続く。メディアプロセッサ２２０は、その後、現在のトポロジーをデマルチプレクサの変更に起因して更新する必要があるというイベントを経由してメディアセッション２４０に信号を送る。メディアセッション２４０は、新たに利用可能になった要素ストリーム記述子にアクセスできるようにIMFDemultiplexer::GetCurrentPresentationを呼び出す。このプレゼンテーション記述子が利用可能になると、メディアセッションは、これらの要素ストリーム記述子を用いて再折衝することができる（ステップ５１６）。
【００７７】
マルチメディアデータストリームのデマルチプレクサＡＰＩについて説明した。デマルチプレクサＡＰＩは、マルチメディアデータのデマルチプレクサを代表するための一連のインターフェイス、データ構造およびイベントを具備している。このＡＰＩは、オーディオおよびビデオ（圧縮あるいは非圧縮）のような要素ストリームデータを生成するために、統一的な方法で消費者がＤＶのような多重化ストリームデータを使用できるようにする。このＡＰＩは、デマルチプレクサを独立したコンポーネントとして利用可能にする。このＡＰＩにより、フィルタのための数多くのＡＰＩに対する必要性を低減し、ある特定のフィルタについて、遺物となったフィルタがサポートされていないシステムにおいてそのフィルタが付随する可能性のあるあらゆるフィルタのＡＰＩにインターフェイスできるようにする必要はもはやなくなる。また、メディアプロセッサが、フィルタグラフ中のフィルタではなく、デマルチプレクサを制御しているので、このデマルチプレクサは上品にシャットダウンされうる。
【００７８】
特許、特許出願、および出版物を含む、本文に引用されたすべての参考文献は、参照により、そのすべてが本明細書に包含される。
【００７９】
本発明の原理を適用することができる多くの可能な実施例があることを考慮すると、図面と関連して本明細書で説明された実施例は、例示のためだけに意図されたものであり、発明の範囲を限定するものとして受け取られるべきではないということを認識すべきである。例えば、当業者には、ソフトウェアで示されたこの例示としての実施例の要素をハードウェアで実装し、そしてその逆も同様であり、あるいはこの例示された実施例が本発明の精神から逸脱することなく構成および細部において変更することができることが認識できよう。そのため、本明細書に記載されているような発明は、特許請求の範囲およびその均等物の範囲内に入るようなこの種のあらゆる実施態様を考慮している。
【図面の簡単な説明】
【００８０】
【図１】本発明がその上に備わっている例示のコンピュータシステムを一般的に示すブロック図である。
【図２】本発明がその中で動作する例示のコンピュータ環境を一般的に示すブロック図である。
【図３】本発明の教示に従うデマルチプレクサを示すブロック図である。
【図４】本発明のデマルチプレクサの状態遷移図である。
【図５】本発明の呼び出しの構成を可能にするデータ構造を示すデータ構造図である。
【図６】本発明の例示のメッセージの構成を示す簡易化したデータ構造図である。
【図７】アプリケーションがマルチメディアのシンクと折衝していない場合の本発明の教示に従うデマルチプレクサをロードし、動作するために取られるステップを示すフローチャートである。
【符号の説明】
【００８１】
１００      コンピューティングシステム環境
１１０      コンピュータ
１２０      処理ユニット
１２１      システムバス
１３０      システムメモリ
１３１      ＲＯＭ
１３２      ＲＡＭ
１３３      ＢＩＯＳ
１３４      オペレーティングシステム
１３５      アプリケーションプログラム
１３６      その他のプログラムモジュール
１３７      プログラムデータ
１４０      取り外し不可の不揮発性メモリインターフェイス
１４１      ハードディスクドライブ
１４４      オペレーティングシステム
１４５      アプリケーションプログラム
１４６      その他のプログラムモジュール
１４７      プログラムデータ
１５０      取り外し可能な不揮発性メモリインターフェイス
１５１      磁気ディスクドライブ
１５２      取り外し可能な不揮発性磁気ディスク
１５５      光ディスクドライブ
１５６      取り外し可能な不揮発性光ディスク
１６０      ユーザー入力インターフェイス
１６１      マウス
１６２      キーボード
１６３      マイクロフォン
１６４      タブレット
１７０      ネットワークインターフェイス
１７１      ローカルエリアネットワーク
１７２      モデム
１７３      ワイドエリアネットワーク
１８０      遠隔コンピュータ
１８１      メモリ記憶装置
１８５      リモートアプリケーションプログラム
１９０      ビデオインターフェイス
１９１      モニター
１９５      出力周辺装置インターフェイス
１９６      プリンタ
１９７      スピーカー
３００      デマルチプレクサ
３０２      多重化ストリーム
３０４      要素ストリーム
３０６      要素ストリーム
３０８      多重化サンプル
３１０      要素サンプル
３１２      要素サンプル
３２０      プレゼンテーション
３２２      プレゼンテーション記述子
３２４      現在のプレゼンテーション
３２６      保留中のプレゼンテーション待ち行列
３３０      入力待ち行列
３４０      出力待ち行列
３４２      出力待ち行列
【図１】
2005056364.tif 000010
【図２】
2005056364.tif 000011
【図３】
2005056364.tif 000012
【図４】
2005056364.tif 000013
【図５】
2005056364.tif 000014
【図６】
2005056364.tif 000015
【図７】
2005056364.tif 000016
【外国語明細書】
2005056364.tif 000017
2005056364.tif 000018
2005056364.tif 000019
2005056364.tif 000020
2005056364.tif 000021
2005056364.tif 000022
2005056364.tif 000023
2005056364.tif 000024
2005056364.tif 000025
2005056364.tif 000026
2005056364.tif 000027
2005056364.tif 000028
2005056364.tif 000029
2005056364.tif 000030
2005056364.tif 000031
2005056364.tif 000032
2005056364.tif 000033
2005056364.tif 000034
2005056364.tif 000035
2005056364.tif 000036
2005056364.tif 000037
2005056364.tif 000038
2005056364.tif 000039
2005056364.tif 000040
2005056364.tif 000041
2005056364.tif 000042
2005056364.tif 000043
2005056364.tif 000044
2005056364.tif 000045
2005056364.tif 000046
2005056364.tif 000047
2005056364.tif 000048
2005056364.tif 000049
2005056364.tif 000050
2005056364.tif 000051
2005056364.tif 000052
2005056364.tif 000053
2005056364.tif 000054
2005056364.tif 000055
2005056364.tif 000056
2005056364.tif 000057
2005056364.tif 000058
2005056364.tif 000059