Declarando informações de filtro
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 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.]
A primeira etapa é declarar as informações do filtro, se necessário. O DirectShow define as seguintes estruturas para descrever filtros, pinos e tipos de mídia:
Estrutura | Descrição |
---|---|
AMOVIESETUP_FILTER | Descreve um filtro. |
AMOVIESETUP_PIN | Descreve um pino. |
AMOVIESETUP_MEDIATYPE | Descreve um tipo de mídia. |
Essas estruturas estão aninhadas. A estrutura AMOVEIESETUP_FILTER tem um ponteiro para uma matriz de estruturas AMOVIESETUP_PIN e cada uma delas tem um ponteiro para uma matriz de estruturas AMOVEIESETUP_MEDIATYPE . Juntas, essas estruturas fornecem informações suficientes para a interface IFilterMapper2 localizar um filtro. Eles não são uma descrição completa de um filtro. Por exemplo, se o filtro criar várias instâncias do mesmo pino, você deverá declarar apenas uma estrutura AMOVIESETUP_PIN para esse pino. Além disso, um filtro não é necessário para dar suporte a cada combinação de tipos de mídia que ele registra; nem é necessário registrar todos os tipos de mídia compatíveis.
Declare as estruturas de configuração como variáveis globais em sua DLL. O exemplo a seguir mostra um filtro com um pino de saída:
static const WCHAR g_wszName[] = L"Some Filter";
AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};
AMOVIESETUP_PIN sudOutputPin = {
L"", // Obsolete, not used.
FALSE, // Is this pin rendered?
TRUE, // Is it an output pin?
FALSE, // Can the filter create zero instances?
FALSE, // Does the filter create multiple instances?
&GUID_NULL, // Obsolete.
NULL, // Obsolete.
2, // Number of media types.
sudMediaTypes // Pointer to media types.
};
AMOVIESETUP_FILTER sudFilterReg = {
&CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
MERIT_NORMAL, // Merit.
1, // Number of pin types.
&sudOutputPin // Pointer to pin information.
};
O nome do filtro é declarado como uma variável global estática, pois ele será usado novamente em outro lugar.
Tópicos relacionados