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