Compartir a través de


Introducción a las clases base de filtro

[La característica asociada a esta página, DirectShow es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine, y Captura de audio y 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 useMediaPlayer, IMFMediaEngine y Captura de audio y vídeo 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.

En este artículo se describe la biblioteca de clases base Microsoft DirectShow. Esta biblioteca está pensada para los desarrolladores de filtros, pero es posible que los escritores de aplicaciones encuentren algunas de las clases auxiliares y utilidades de depuración útiles. Sin embargo, la biblioteca de clases base no es necesaria para la programación directShow.

En las secciones siguientes se resumen las clases base más importantes de la biblioteca.

Clases de objeto COM

Las siguientes clases admiten la creación de objetos COM:

Clase Descripción
CBaseObject Clase de objeto base.
CUnknown Implementa la interfaz IUnknown .

 

La mayoría de las clases DirectShow derivan de CBaseObject. Esta clase proporciona asistencia para depurar manteniendo un recuento de todos los objetos activos en el archivo DLL en tiempo de ejecución. En las compilaciones de depuración, el archivo DLL afirma si se descarga mientras el recuento de objetos es mayor que cero. Esto facilita localizar las fugas causadas por problemas de recuento de referencias.

Todas las clases base que admiten interfaces COM derivan de CUnknown, que hereda CBaseObject. La clase CUnknown admite el recuento de referencias, QueryInterface y la agregación. Para obtener más información, vea Cómo implementar IUnknown.

Clases de Filtro y Anclaje

Las siguientes clases admiten la creación de objetos de filtro y pin de DirectShow.

Clase Descripción
CBaseFilter Clase base para filtros. Implementa la interfaz IBaseFilter .
CBasePin Clase base para patillas. Implementa las interfaces IPin e IQualityControl .
CBaseInputPin Clase base para pines de entrada que usan el transporte de memoria interna. Implementa la interfaz IMemInputPin . Esta clase deriva de CBasePin.
CBaseOutputPin Clase base para pines de salida que usan conexiones IMemInputPin. Esta clase deriva de CBasePin.

 

Las siguientes clases son útiles para crear tipos de filtros más especializados:

Clase Descripción
CSource Clase base para filtros de origen. Esta clase está diseñada para crear fuentes de inserción. No es adecuado para orígenes de extracción, como lectores de archivos. Para crear pines de salida para esta clase, use la clase CSourceStream.
CTransformFilter Clase base para filtros de transformación. Esta clase realiza una copia de los datos. Los pines de esta clase son CTransformInputPin y CTransformOutputPin.
CTransInPlaceFilter Clase base para filtros de transformación que no copian datos. Esta clase realiza el procesamiento de datos directamente en los datos de entrada antes de pasarlos a la siguiente etapa. Los pines de esta clase son CTransInPlaceInputPin y CTransInPlaceOutputPin.
CVideoTransformFilter Clase base para filtros de transformación de vídeo. Esta clase deriva de CTransformFilter y agrega compatibilidad con el control de calidad.
CBaseRenderer Clase base para filtros de representador. El pin de entrada de esta clase es CRendererInputPin.
CBaseVideoRenderer Clase base para representadores de vídeo. Esta clase deriva de CBaseRenderer.

 

Para usar estas clases, debe derivar su propia clase y escribir código para admitir la funcionalidad específica del filtro. Cuanto más especializado sea la clase base, menos código tendrá que escribir en la clase derivada.

Objetos auxiliares

Las siguientes clases implementan objetos auxiliares que son utilizados por filtros y conectores. La mayoría de estas clases se pueden usar sin derivar nuevas clases de ellas:

Clase Descripción
CPullPin Objeto auxiliar para clavijas de entrada en filtros de análisis. Admite conexiones IAsyncReader con orígenes de extracción.
COutputQueue Objeto auxiliar para pines de salida que ponen en cola muestras para la entrega en un subproceso de trabajo.
CSourceSeeking Objeto de ayuda para implementar la búsqueda en un filtro de origen con exactamente un pin de salida. (Esta clase no está diseñada para filtros con varios pines, como analizadores).
CEnumPins Objeto enumerador para enumerar pines en un filtro. Implementa la interfaz IEnumPins .
CEnumMediaTypes Objeto enumerador para enumerar los tipos de medios preferidos en un pin. Implementa la interfaz IEnumMediaTypes .
CMemAllocator Objeto asignador de memoria. Implementa la interfaz IMemAllocator .
de CMediaSample Objeto de ejemplo multimedia. Implementa la interfaz IMediaSample2 .
CBaseReferenceClock Clase base para relojes de referencia. Implementa la interfaz IReferenceClock .
CMediaType Objeto auxiliar para manipular estructuras de AM_MEDIA_TYPE .