DMO の登録

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

クライアントが DMO を使用するには、CLSID をユーザーのシステムに登録する必要があります。 これは、DLL の DllRegisterServer 関数を使用して行われます。 Active Template Library (ATL) を使用している場合、ATL ウィザードによってこの関数が自動的に生成されます。

1 つ以上の標準 DMO カテゴリで DMO を登録することもできます。 これにより、クライアントは DMOEnum 関数を使用して DMO を検出できます。 カテゴリは GUID によって定義され、 DMO GUID セクションに一覧表示されます。

カテゴリに DMO を登録することは省略可能です。 これを行うには、 DMORegister 関数を呼び出し、DMO、CLSID、およびカテゴリのフレンドリ名を指定します。 必要に応じて、DMO でサポートされている一連のメディアの種類を登録することもできます。 詳細については、「 DMO メディアの種類」を参照してください。

次の例は、PCM オーディオの入出力をサポートするオーディオ効果 DMO を登録する方法を示しています。 この場合、入力の種類と出力の種類は同じです。

STDAPI DllRegisterServer(void)
{
    // Register the DMO as a PCM audio effect DMO
    DMO_PARTIAL_MEDIATYPE mt;
    mt.type    = MEDIATYPE_Audio;
    mt.subtype = MEDIASUBTYPE_PCM;
    HRESULT hr = DMORegister(
        L"MyDMO",                  // Friendly name
        CLSID_MyDMO,               // CLSID
        DMOCATEGORY_AUDIO_EFFECT,  // Category
        0,                         // Flags 
        1,                         // Number of input types
        &mt,                       // Array of input types
        1,                         // Number of output types
        &mt);                      // Array of output types

    if (FAILED(hr)) return hr;

    // Registers the object, with no typelib.
    return _Module.RegisterServer(FALSE);
}

この例では、ATL を使用してプロジェクトを作成したと想定しています。関数の最後の行は、標準の ATL メソッドを呼び出して COM サーバーを登録します。 ATL を使用していない場合、関数の外観は異なります。

DMO の登録解除

DllUnregisterServer 関数は、DllRegisterServer 関数によって作成されるすべてのレジストリ エントリを削除する必要があります。 DMO を登録するときに DMORegister を呼び出す場合は、DMO の登録を解除するときに、同じカテゴリの DMOUnregister を使用する必要があります。

次の例では、前の例で作成したレジストリ エントリを削除します。

STDAPI DllUnregisterServer(void)
{
    DMOUnregister(CLSID_MyDMO, DMOCATEGORY_AUDIO_EFFECT);
    return _Module.UnregisterServer(TRUE);
}

DirectShow のメリット値

フィルター グラフを作成するために、DirectShow は DMO に既定のメリット値を割り当てます。 この値をオーバーライドするには、HKEY_CLASSES_ROOT\CLSIDで DMO のレジストリ キーにレジストリ エントリを追加します。 値がメリットを指定する という名前MeritDWORD 値を含めます。

DMO の作成