Регистрация DMO
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи Аудио- и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и захват аудио и видео в Media Foundation вместо использования DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Чтобы клиенты использовали DMO, идентификатор CLSID должен быть зарегистрирован в системе пользователя. Это делается с помощью функции DLLRegisterServer. Если вы используете библиотеку активных шаблонов (ATL), мастер ATL автоматически создает эту функцию.
Вы также можете зарегистрировать своё DMO в одной или нескольких стандартных категориях DMO. Это позволяет клиентам находить ваш DMO с помощью функции DMOEnum. Категории определяются глобальными уникальными идентификаторами (GUID) и перечислены в разделе DMO GUIDы.
Регистрация DMO в категории является необязательной. Для этого вызовите функцию DMORegister и укажите понятное имя DMO, CLSID и категорию. При желании, можно также зарегистрировать набор типов носителей, которые поддерживаются вашими DMOs. Дополнительные сведения см. в типах носителей DMO .
В следующем примере показано, как зарегистрировать DMO звуковых эффектов, поддерживающий входные и выходные данные PCM. В этом случае входные типы и типы выходных данных одинаковы.
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. При вызове DMORegister при регистрации DMO необходимо DMOUnregister с той же категорией при отмене регистрации DMO.
В следующем примере удаляются записи реестра, созданные в предыдущем примере:
STDAPI DllUnregisterServer(void)
{
DMOUnregister(CLSID_MyDMO, DMOCATEGORY_AUDIO_EFFECT);
return _Module.UnregisterServer(TRUE);
}
Значения приоритета DirectShow
В целях создания графов фильтров DirectShow назначает значение по умолчанию для DMO. Это значение можно переопределить, добавив запись реестра в ключ реестра DMO в HKEY_CLASSES_ROOT\CLSID. Включите DWORD значение с именем Merit
, значение которого указывает преимущественность.
Связанные разделы