DMO の基本 (Microsoft Media Foundation)
このトピックでは、Windows メディア コーデックに関連する DMU の概要について簡単に説明します。 DMU の詳細については、「 DirectX メディア オブジェクト」を参照してください。
DMO は、データを変換する COM オブジェクトです。 データを渡すと、変換されたデータが返されます。 コーデック エンコーダー DMO の場合は、圧縮されていないメディア データを入力し、DMO は圧縮メディア データを配信します。 DMU を使用する主な利点は、実行される変換の種類に関係なく、同じオブジェクトを使用できるため、すべて同じ基本インターフェイス IMediaObject を実装することで、それらの操作を簡略化できることです。
データ変換にはあらゆる種類の変数が含まれているため、オーディオ変換とビデオ変換では、考えられる幅広いメディア構成を考慮する必要があります。 Windows Media Audio および Video コーデックでは、DMO を使用して構成できる必要がある多くの特別な機能もサポートされています。
一般に、デジタル メディアを圧縮および圧縮解除するためにコーデック DNO によって必要な変数情報は、次の 3 つの方法のいずれかで伝達されます。
- エンコーダー DMO に渡す圧縮されていないメディアの特性と、デコーダー DMO に渡す圧縮メディアの特性を伝えるために、DMO の入力の種類を設定します。
- DMO の出力の種類を設定して、エンコーダー DMO によって配信される圧縮メディアの特性と、デコーダー DMO によって配信される圧縮されていないメディアの特性を伝える。
- IPropertyBag インターフェイスのメソッドを使用して、コーデック DLO のさまざまな機能をプロパティとしてサポートする他の設定を構成します。 IPropertyBag は、すべてのコーデック DNO でサポートされている標準 COM インターフェイスです。
さらに、一部のコーデック機能は、コーデック DLO に固有の他のインターフェイスを使用して管理されます。 これらのインターフェイスは、コーデック オブジェクトに関するセクションでコーデックごとに一覧表示されます。
入力と出力の種類は、入力ストリームと出力ストリームに固有です。 各ストリームは、コンテンツの個別の表現を表します。 たとえば、Windows Media Video エンコーダー DMO には、1 つの入力ストリームと 2 つの出力ストリームがあります。 入力ストリームは、圧縮されていないビデオ サンプルを受け入れます。 2 つの出力ストリームの 1 つ目は、圧縮されたサンプルを提供します。もう 1 つでは、圧縮されていないサンプルが提供されます。 1 つの出力ストリーム内の個々のサンプルは、他のストリーム内の対応するサンプルと同じ内容を表しますが、各ストリームは異なる形式でこれらのサンプルを配信します。
各ストリーム (入力または出力) では、1 つ以上の種類のメディアがサポートされます。 メディアの種類 (形式) は、 DMO_MEDIA_TYPE 構造体によって記述されます。 IMediaObject::GetOutputType を呼び出すことで、出力ストリームでサポートされている型の DMO に対してクエリを実行できます。 このメソッドは、そのストリームの有効な (部分的に不完全な場合もあります) 出力型を返します。 GetOutputType を繰り返し呼び出し、各呼び出しで type パラメーターをインクリメントすることで、出力ストリームでサポートされているメディアの種類を列挙できます。 渡す型インデックスが範囲外の場合、メソッドは DMO_E_NO_MORE_ITEMSを返します。 入力形式は、 IMediaObject::GetInputType メソッドを使用して同じ方法で列挙できます。
DMO によって列挙される型は"優先" 型のみですが、他の型がサポートされる場合があります。 出力の種類を検証するには、 IMediaObject::SetOutputType を呼び出します。 入力の種類を検証するには 、IMediaObject::SetInputType を使用します。 渡した DMO_MEDIA_TYPE 構造体が無効な場合、どちらのメソッドも DMO_E_TYPE_NOT_ACCEPTED を返します。 一部の DMU では、入力型を列挙する前に出力の種類を設定する必要があります。 Windows Media Audio および Video コーデックの DNO はすべて、相互に依存する検証を持つ入力と出力を持ちます。 つまり、設定した出力の種類によって、入力の種類の検証条件が設定されます。 設定すると、有効な入力と出力の種類を変更するプロパティもあります。 このため、型を列挙する前に、DMO で必要なすべてのプロパティを設定する必要があります。
DMO の出力と入力の種類を設定したら、サンプルの処理を開始できます。 各入力サンプルは IMediaObject::P rocessInput の呼び出しを使用してコーデックに渡され、 IMediaObject::P rocessOutput を呼び出すと、各出力サンプルがコーデックによって配信されます。
関連トピック