Inscription d’un DMO

Pour que les clients utilisent votre DMO, le CLSID doit être inscrit sur le système de l’utilisateur. Cette opération s’effectue via la fonction DllRegisterServer de la DLL. Si vous utilisez la bibliothèque de modèles active (ATL), l’Assistant ATL génère automatiquement cette fonction.

Vous pouvez également inscrire votre DMO sous une ou plusieurs catégories de DMO standard. Cela permet aux clients de découvrir votre DMO à l’aide de la fonction DMOEnum. Les catégories sont définies par GUID et répertoriées dans la section DMO GUID.

L’inscription d’un DMO sous une catégorie est facultative. Pour ce faire, appelez la fonction DMORegister et spécifiez le nom convivial du DMO, du CLSID et de la catégorie. Si vous le souhaitez, vous pouvez également inscrire un ensemble de types de supports pris en charge par vos DMO. Pour plus d’informations, consultez DMO types de supports.

L’exemple suivant montre comment inscrire un effet audio DMO qui prend en charge l’entrée et la sortie audio PCM. Dans ce cas, les types d’entrée et les types de sortie sont identiques.

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

Cet exemple suppose qu’ATL a été utilisé pour créer le projet ; la dernière ligne de la fonction appelle la méthode ATL standard pour inscrire le serveur COM. Si vous n’utilisez pas ATL, votre fonction sera différente.

Désinscrire une DMO

Votre fonction DllUnregisterServer doit supprimer toutes les entrées de Registre créées par la fonction DllRegisterServer . Si vous appelez DMORegister lorsque vous inscrivez le DMO, vous devez DMOUnregister avec la même catégorie lorsque vous annulez l’inscription du DMO.

L’exemple suivant supprime les entrées de Registre créées dans l’exemple précédent :

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

valeurs de mérite DirectShow

À des fins de création de graphiques de filtre, DirectShow attribue une valeur de mérite par défaut aux objets de gestion dynamique. Vous pouvez remplacer cette valeur en ajoutant une entrée de Registre à la clé de Registre du DMO dans HKEY_CLASSES_ROOT\CLSID. Incluez une valeur DWORD nommée Merit dont la valeur spécifie le mérite.

Écriture d’un DMO