DMO アーキテクチャ
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
このセクションでは、DMO の全体的なアーキテクチャについて説明します。
ストリーム
DMO は 、m 入力を受け取り、 n 個の出力を生成するオブジェクトです。 入力と出力はストリームと呼 ばれます。 すべての DMO には、少なくとも 1 つのストリームがあります。 ストリームはオブジェクトではありません。これらは、単にインデックス番号によって DMO で参照されます。 ストリームの数は、デザイン時に固定されます。
メディアの種類
すべてのデータは、データの内容を解釈する方法を定義する メディアの種類を使用して型指定されます。 たとえば、320 x 240 24 ビット RGB ビデオは 1 種類です。44.1 キロヘルツ (kHz) 16 ビット ステレオ PCM オーディオは別の種類です。 メディアの種類は、 DMO_MEDIA_TYPE 構造体を使用して説明します。 クライアントは、データを処理する前に、DMO 上のストリームごとにメディアの種類を設定する必要があります。
通常、ストリームはさまざまなメディアの種類を受け入れます。 一部の DMU では、他の種類よりも幅広い種類がサポートされています。 DMO インターフェイスは、クライアントがサポートされている型を検出するためのメソッドを定義します。 たとえば、ある DMO は任意のビット深度で RGB ビデオをサポートし、もう 1 つは 24 ビット RGB のみをサポートする場合があります。 また、DMO は入力と出力の特定の組み合わせに制限される場合があります。 たとえば、入力の種類が 16 ビット ビデオの場合、出力ストリームには同じビット深度が必要になる場合があります。 クライアントは、各ストリームの優先型を列挙し、特定の組み合わせをテストできます。
Buffers
既定の DMO モデルでは、クライアントは個別の入力バッファーと出力バッファーを割り当てます。 入力バッファーにデータが入力され、DMO に配信され、DMO によって新しいデータが出力バッファーに書き込まれます。
必要に応じて、DMO は "インプレース" 処理をサポートできます。 インプレース処理では、DMO は出力を元のデータに対して入力バッファーに直接書き込みます。 インプレース処理により、個別のバッファーが不要になります。 一方、元のデータが変更されるため、一部のアプリケーションでは受け入れられない場合があります。
既定の (インプレースではない) バッファリング モデルは、 IMediaObject インターフェイスを介してサポートされます。 すべての DMU でこのインターフェイスを実装する必要があります。 DMO でインプレース処理がサポートされている場合は、 IMediaObjectInPlace インターフェイスも公開されます。 クライアントは、入力と出力の両方のすべてのバッファーを割り当てる役割を担います。
関連トピック