次の方法で共有


DMO の基本 (Microsoft Media Foundation)

このトピックでは、Windows メディア コーデックに関連する DNO の概要について簡単に説明します。 DNO の詳細については、「DirectX メディア オブジェクト を参照してください。

DMO は、データを変換する COM オブジェクトです。 データを渡すと、変換されたデータが返されます。 コーデック エンコーダー DMO の場合は、圧縮されていないメディア データを入力し、DMO は圧縮されたメディア データを配信します。 DNO を使用する主な利点は、実行する変換の種類に関係なく、同じオブジェクトを使用できるため、すべてのユーザーが同じ基本インターフェイス (IMediaObject) を実装することで、それらの操作を簡略化できることです。

あらゆる種類のデータ変換に関連する変数があるため、オーディオとビデオの変換では、考えられるさまざまなメディア構成を考慮する必要があります。 Windows Media Audio および Video コーデックでは、DMO を使用して構成できる必要がある多くの特別な機能もサポートされています。

一般に、デジタル メディアを圧縮および展開するためにコーデック DNO で必要な可変情報は、次の 3 つの方法のいずれかで伝達されます。

  • エンコーダー DMO に渡す圧縮されていないメディアの特性と、デコーダー DMO に渡す圧縮メディアの特性を伝えるために、DMO の入力の種類を設定します。
  • エンコーダー DMO によって配信される圧縮メディアの特性と、デコーダー DMO によって配信される圧縮されていないメディアの特性を伝えるために、DMO の出力の種類を設定します。
  • IPropertyBag インターフェイスのメソッドを使用して、コーデック DNO のさまざまな機能をプロパティとしてサポートする他の設定を構成します。 IPropertyBag は、すべてのコーデック DNO でサポートされている標準の COM インターフェイスです。

さらに、一部のコーデック機能は、コーデック DNO に固有の他のインターフェイスを使用して管理されます。 これらのインターフェイスは、コーデック オブジェクト のセクションの各コーデック一覧表示されます。

入力と出力の種類は、入力ストリームと出力ストリームに固有です。 各ストリームは、コンテンツの個別の表現を表します。 たとえば、Windows Media Video エンコーダー DMO には、1 つの入力ストリームと 2 つの出力ストリームがあります。 入力ストリームは、圧縮されていないビデオ サンプルを受け入れます。 2 つの出力ストリームの 1 つ目は、圧縮されたサンプルを提供します。もう 1 つでは、圧縮されていないサンプルが提供されます。 1 つの出力ストリーム内の個々のサンプルは、他のストリーム内の対応するサンプルと同じコンテンツを表しますが、各ストリームはそれらのサンプルを異なる形式で配信します。

各ストリーム (入力または出力) は、1 つ以上の種類のメディアをサポートします。 メディアの種類 (形式) は、DMO_MEDIA_TYPE 構造体によって記述されます。 IMediaObject::GetOutputTypeを呼び出すことで、出力ストリームでサポートされている型について DMO に対してクエリを実行できます。 このメソッドは、そのストリームの有効な (部分的に不完全な場合もあります) 出力型を返します。 GetOutputTypeを繰り返し呼び出し、各呼び出しで型パラメーターをインクリメントすることで、出力ストリームでサポートされているメディアの種類を列挙できます。 渡す型インデックスが範囲外の場合、メソッドは DMO_E_NO_MORE_ITEMSを返します。 IMediaObject::GetInputType メソッドを使用して、入力形式を同じ方法で列挙できます。

DMO によって列挙される型は "優先" 型のみですが、他の型がサポートされる場合があります。 IMediaObject::SetOutputType呼び出すことで、出力の種類を検証できます。 IMediaObject::SetInputType を使用して入力の種類を検証します。 渡した DMO_MEDIA_TYPE 構造体が無効な場合、どちらのメソッドも DMO_E_TYPE_NOT_ACCEPTED を返します。 一部の DNO では、入力型を列挙する前に出力の種類を設定する必要があります。 Windows Media Audio および Video コーデックの DNO はすべて、相互に依存する検証を持つ入力と出力を備えています。 つまり、設定した出力の種類によって、入力の種類の検証条件が設定されます。 設定すると、有効な入力と出力の種類を変更するいくつかのプロパティもあります。 このため、型を列挙する前に、DMO で必要なすべてのプロパティを設定する必要があります。

DMO の出力と入力の種類を設定したら、サンプルの処理を開始できます。 各入力サンプルは、IMediaObject::P rocessInput呼び出しを使用してコーデックに渡され、IMediaObject::P rocessOutput呼び出しを行うと、各出力サンプルがコーデックによって配信されます。

コーデック DNO の操作