Creación de filtros directShow
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
Se recomiendan las clases base de DirectShow para implementar filtros DirectShow. Para compilar con las clases base, realice los pasos siguientes, además de los pasos enumerados en Configuración del entorno de compilación:
- Compile la biblioteca de clases base, ubicada en el directorio Samples\Multimedia\DirectShow\BaseClasses, en el directorio raíz del SDK. Hay dos versiones de la biblioteca: una versión comercial (Strmbase.lib) y una versión de depuración (Strmbasd.lib).
- Incluya el archivo de encabezado Streams.h.
- Use la convención de llamada __stdcall.
- Use la biblioteca en tiempo de ejecución de C multiproceso (depuración o venta directa, según corresponda).
- Incluya un archivo de definición (.def) que exporte las funciones DLL. A continuación se muestra un ejemplo de un archivo de definición. Se supone que el archivo de salida se denomina MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
- Vincule a los siguientes archivos lib.
Etiqueta | Value |
---|---|
Compilación de depuración | Strmbasd.lib, Msvcrtd.lib, Winmm.lib |
Compilación comercial | Strmbase.lib, Msvcrt.lib, Winmm.lib |
- Elija la opción "Omitir bibliotecas predeterminadas" en la configuración del enlazador.
- Declare el punto de entrada dll en el código fuente, como se indica a continuación:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
Versiones anteriores
Para las versiones de la biblioteca de clases base anteriores a DirectShow 9.0, también debe hacer lo siguiente:
- Para las compilaciones de depuración, defina la marca de preprocesador DEBUG.
Este paso no es necesario para la versión de la biblioteca de clases base que está disponible en DirectShow 9.0 y versiones posteriores.