Bagikan melalui


Mendaftarkan DMO

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Agar klien dapat menggunakan DMO Anda, CLSID harus terdaftar pada sistem pengguna. Ini dilakukan melalui fungsi DllRegisterServer DLL. Jika Anda menggunakan Pustaka Templat Aktif (ATL), wizard ATL secara otomatis menghasilkan fungsi ini.

Anda juga dapat mendaftarkan DMO Anda di bawah satu atau beberapa kategori DMO standar. Ini memungkinkan klien untuk menemukan DMO Anda menggunakan fungsi DMOEnum . Kategori didefinisikan oleh GUID, dan tercantum di bagian GUID DMO.

Mendaftarkan DMO di bawah kategori bersifat opsional. Untuk melakukannya, panggil fungsi DMORegister dan tentukan nama DMO, CLSID, dan kategori yang mudah diingat. Secara opsional, Anda juga dapat mendaftarkan sekumpulan jenis media yang didukung DMO Anda. Untuk informasi selengkapnya, lihat Jenis Media DMO.

Contoh berikut menunjukkan cara mendaftarkan efek audio DMO yang mendukung input dan output audio PCM. Dalam hal ini jenis input dan jenis outputnya sama.

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);
}

Contoh ini mengasumsikan bahwa ATL digunakan untuk membuat proyek; baris terakhir fungsi memanggil metode ATL standar untuk mendaftarkan server COM. Jika Anda tidak menggunakan ATL, fungsi Anda akan terlihat berbeda.

Membatalkan pendaftaran DMO

Fungsi DllUnregisterServer Anda harus menghapus entri registri apa pun yang dibuat fungsi DllRegisterServer . Jika Anda memanggil DMORegister saat mendaftarkan DMO, Anda harus DMOUnregister dengan kategori yang sama ketika Anda membatalkan pendaftaran DMO.

Contoh berikut menghapus entri registri yang dibuat dalam contoh sebelumnya:

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

Nilai Merit DirectShow

Untuk tujuan membangun grafik filter, DirectShow menetapkan nilai manfaat default ke DMO. Anda dapat mengganti nilai ini dengan menambahkan entri registri ke kunci registri DMO di HKEY_CLASSES_ROOT\CLSID. Sertakan nilai DWORD bernama Merit yang nilainya menentukan merit.

Menulis DMO