DMO ラッパー フィルター

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

DMO ラッパー フィルターを使用すると、DirectShow アプリケーションでフィルター グラフ内で DirectX Media Object (DMO) を使用できます。 フィルターは DMO をラップし、DMO との間でデータを渡すなど、DMO の使用に関するすべての詳細を処理します。 また、フィルターは DMO を集計するため、アプリケーションは DMO が公開する COM インターフェイスのフィルターに対してクエリを実行できます。

Label
フィルター インターフェイス IBaseFilterIDMOWrapperFilterIPersistStream
入力ピン メディアの種類 「解説」を参照してください
入力ピン インターフェイス IMemInputPinIPinIQualityControl
出力ピン メディアの種類 「解説」を参照してください
出力ピン インターフェイス IAMStreamConfigIAMVideoCompressionIMediaPositionIMediaSeekingIPinIQualityControl
CLSID のフィルター処理 CLSID_DMOWrapperFilter
プロパティ ページ CLSID プロパティ ページなし
[実行可能ファイル] Qasf.dll
メリット 「解説」を参照してください
フィルター カテゴリ 「解説」を参照してください

 

解説

制限事項

DMO ラッパーには、次の制限があります。

  • 0 個の入力、複数の入力、または 0 個の出力を持つ DNO はサポートされていません。 (1 つの入力と複数の出力を持つ DMU をサポートしています)。
  • カスタム トランスポートはサポートされていません。 すべてのデータ転送は、 IMemInputPin インターフェイスを介して行われます。
  • IMediaObjectInPlace インターフェイスは使用しません。すべての処理は、IMediaObject メソッドを使用して行われます。

ピン

DMO の入力ストリームごとに、フィルターによって対応する入力ピンが作成されます。 出力ストリームごとに、対応する出力ピンが作成されます。 各ピンでサポートされるメディアの種類は、DMO によって異なります

エンコーダー インターフェイス

DMO がビデオ エンコーダーまたはオーディオ エンコーダーの場合、出力ピンは IAMStreamConfig インターフェイスを公開します。 DMO がビデオ エンコーダーの場合、出力ピンは IAMVideoCompression インターフェイスも公開します。 どちらの場合も、DMO で インターフェイスがサポートされている場合、ピンは DMO に委任されます。 それ以外の場合、ピンは独自の実装を提供します。

ストリーム

このフィルターでは、 IMemInputPin インターフェイスを使用してすべてのストリーミングを処理します。 IAsyncReader 接続はサポートされていません。 フィルターは、DMO で IMediaObject::P rocessOutput を呼び出します。これは、アップストリームからデータを受信した場合 (ストリームの終了通知を含む) だけです。 したがって、入力ストリームが 0 の DNO はサポートされていません。

求めて

すべてのシーク要求は、DMO ラッパーの最初の入力ピンを介してアップストリーム フィルターに渡されます。 複数出力の DME の場合、これは、アプリケーションがグラフをシークするときに、アップストリーム フィルターが複数のシーク要求を受け取る可能性があることを意味します。

メリット

DirectShow では、すべての DNO にMERIT_NORMAL + 0x800 の既定のメリット値が割り当てられます。 この値は 、MERIT_NORMAL とMERIT_PREFERREDの間 にあります。 デコーダー フィルターには、通常、 MERIT_NORMALのメリット値があります。 そのため、フィルター グラフ マネージャーは通常、デコーダー フィルターよりも DMO デコーダーを選択します。 既定のメリット値をオーバーライドするには、HKEY_CLASSES_ROOT\CLSIDで DMO のレジストリ キーにレジストリ エントリを追加します。 値にメリットを指定する "Merit" という名前の DWORD 値を含めます。

カテゴリ

DMO ラッパー フィルターは、どのカテゴリにも単独では表示されません。 DMO をラップすると、DMO の名前の下にある DMO のカテゴリに対応する DirectShow カテゴリに表示されます。

バッファー

DMO ラッパー フィルターは、 IMediaBuffer インターフェイスを公開する DMO にメディア バッファーを渡します。

Windows Vista 以降では、メディア バッファーによって IServiceProvider インターフェイスも公開されます。 DMO は、このインターフェイスを使用して、バッファーに関連付けられているメディア サンプルへのポインターを取得できます。 サービス識別子 IID_IMediaSampleを使用します。 ビデオ DMO では、メディア サンプルの IMediaSample2 インターフェイスを使用して、サンプルにインターレース フラグを設定できます。 次のコードは、メディア サンプルへのポインターを取得する方法を示しています。

IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;

hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
    hr = pSp->QueryService(
        IID_IMediaSample,  // Service identifier.
        IID_IMediaSample2, // Interface identifier.
        (void**)&pSample2
        );
    if (SUCCEEDED(hr))
    {
        // Set flags (not shown).
        pSample2->Release();
    }
    pSp->Release();
}

サンプルごとのインターレース フラグの詳細については、「 AM_SAMPLE2_PROPERTIES構造体」を参照してください。

品質管理

DMO が IDMOQualityControl インターフェイスを公開している場合、フィルターは出力ピンの IQualityControl::Notify 呼び出しを DMO の IDMOQualityControl::SetNow 呼び出しに変換します。 SetNowrtNow パラメーターは、Quality 構造体の TimeStamp メンバーと Late メンバーの合計として計算されます。

GraphEdit でフィッターを使用する

GraphEdit では、DMO ラッパー フィルターは独自の名前の下に表示されません。 代わりに、登録されている各 DMO が適切なフィルター カテゴリの下に一覧表示されます。 [ フィルターの挿入 ] ダイアログで DMO を追加すると、GraphEdit によって DMO ラッパー フィルターが作成され、その DMO を使用するように構成されます。

DirectShow フィルター

DirectX メディア オブジェクト