Registrando um DMO
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Para que os clientes usem seu DMO, o CLSID deve ser registrado no sistema do usuário. Isso é feito por meio da função DllRegisterServer da DLL . Se você estiver usando a ATL (Biblioteca de Modelos Ativos), o assistente da ATL gerará automaticamente essa função.
Você também pode registrar seu DMO em uma ou mais categorias de DMO padrão. Isso permite que os clientes descubram seu DMO usando a função DMOEnum . As categorias são definidas pelo GUID e são listadas na seção GUIDs de DMO.
Registrar um DMO em uma categoria é opcional. Para fazer isso, chame a função DMORegister e especifique o nome amigável do DMO, do CLSID e da categoria. Opcionalmente, você também pode registrar um conjunto de tipos de mídia aos quais seus DMOs dão suporte. Para obter mais informações, consulte Tipos de mídia DMO.
O exemplo a seguir mostra como registrar um efeito de áudio DMO que dá suporte à entrada e saída de áudio PCM. Nesse caso, os tipos de entrada e os tipos de saída são os mesmos.
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);
}
Este exemplo pressupõe que a ATL foi usada para criar o projeto; a última linha da função chama o método ATL padrão para registrar o servidor COM. Se você não estiver usando a ATL, sua função terá uma aparência diferente.
Cancelar o registro de um DMO
Sua função DllUnregisterServer deve remover todas as entradas do Registro criadas pela função DllRegisterServer . Se você chamar DMORegister ao registrar o DMO, deverá DMOUnregister com a mesma categoria ao cancelar o registro do DMO.
O exemplo a seguir remove as entradas do Registro criadas no exemplo anterior:
STDAPI DllUnregisterServer(void)
{
DMOUnregister(CLSID_MyDMO, DMOCATEGORY_AUDIO_EFFECT);
return _Module.UnregisterServer(TRUE);
}
Valores de mérito do DirectShow
Para fins de criação de grafos de filtro, o DirectShow atribui um valor de mérito padrão aos DMOs. Você pode substituir esse valor adicionando uma entrada do Registro à chave do Registro do DMO em HKEY_CLASSES_ROOT\CLSID. Inclua um valor DWORD chamado Merit
cujo valor especifica o mérito.
Tópicos relacionados