Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no 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 possam usar seu DMO, o CLSID deve ser registrado no sistema do usuário. Isso é feito através da função DllRegisterServer da DLL. Se você estiver usando a ATL (Ative Template Library), o assistente da ATL gerará automaticamente essa função.
Você também pode registrar seu DMO em uma ou mais categorias padrão de DMO. Isso permite que os clientes descubram seu DMO usando a função DMOEnum. As categorias são definidas por GUID e estão listadas na seção GUIDs DMO.
Registrar um DMO em uma categoria é opcional. Para fazer isso, chame a função DMORegister e especifique o nome amigável do DMO, o CLSID e a categoria. Opcionalmente, você também pode registrar um conjunto de tipos de mídia suportados por seus DMOs. Para obter mais informações, consulte Tipos de mídia DMO.
O exemplo a seguir mostra como registar um efeito de áudio DMO que suporta entrada e saída de áudio PCM. Neste caso, os tipos de entrada e 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 não estiver a utilizar ATL, a sua função terá um aspeto diferente.
Anular o registo de um DMO
Sua função DllUnregisterServer deve remover todas as entradas do Registro que a função DllRegisterServer cria. Se chamar DMORegister ao registar o DMO, deve DMOUnregister com a mesma categoria ao desregistar o 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 efeitos de criação de gráficos de filtros, 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 no HKEY_CLASSES_ROOT\CLSID. Inclua um valor DWORD chamado Merit cujo valor especifica o mérito.
Tópicos relacionados
-
Escrevendo um DMO