Criando filtros do DirectShow

[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.]

As classes base do DirectShow são recomendadas para implementar filtros directShow. Para compilar com as classes base, execute as seguintes etapas, além das etapas listadas em Configurando o ambiente de build:

  • Crie a biblioteca de classes base, localizada no diretório Samples\Multimedia\DirectShow\BaseClasses, no diretório raiz do SDK. Há duas versões da biblioteca: uma versão de varejo (Strmbase.lib) e uma versão de depuração (Strmbasd.lib).
  • Inclua o arquivo de cabeçalho Streams.h.
  • Use a convenção de chamada __stdcall.
  • Use a biblioteca de tempo de execução C multithreaded (depuração ou varejo, conforme apropriado).
  • Inclua um arquivo de definição (.def) que exporta as funções DLL. Veja a seguir um exemplo de um arquivo de definição. Ele pressupõe que o arquivo de saída seja nomeado MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • Link para os arquivos lib a seguir.
Rótulo Valor
Compilação de depuração Strmbasd.lib, Msvcrtd.lib, Winmm.lib
Build de Varejo Strmbase.lib, Msvcrt.lib, Winmm.lib
  • Escolha a opção "ignorar bibliotecas padrão" nas configurações do vinculador.
  • Declare o ponto de entrada de DLL em seu código-fonte, da seguinte maneira:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

Versões anteriores

Para versões da biblioteca de classes base antes do DirectShow 9.0, você também deve fazer o seguinte:

  • Para builds de depuração, defina o sinalizador de pré-processador DEBUG.

Esta etapa não é necessária para a versão da biblioteca de classes base que está disponível no DirectShow 9.0 e posterior.

DirectShow Base Classes

Escrevendo filtros do DirectShow