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/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.

En este artículo se describe la biblioteca de clases base Microsoft DirectShow. Esta biblioteca está pensada para desarrolladores de filtros, pero los escritores de aplicaciones pueden encontrar 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 clases siguientes 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 el seguimiento de pérdidas 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 recuento de referencias, QueryInterface y aggregración. Para obtener más información, vea Cómo implementar IUnknown.

Filtrar y anclar clases

Las siguientes clases admiten la creación de objetos de filtro y anclaje 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 patillas de entrada que usan el transporte de memoria local. Implementa la interfaz IMemInputPin . Esta clase deriva de CBasePin.
CBaseOutputPin Clase base para patillas 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 orígenes de inserción. No es adecuado para orígenes de extracción, como lectores de archivos. Para crear patillas de salida para esta clase, use la clase CSourceStream .
CTransformFilter Clase base para filtros de transformación. Esta clase realiza una copia en los datos. Los patillas 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 de bajada. Los patillas de esta clase son CTransInPlaceInputPin y CTransInPlaceOutputPin.
CVideoTransformFilter Clase base para filtros de transformación de vídeo. Esta clase se 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 clases siguientes implementan objetos auxiliares que se usan en filtros y patillas. La mayoría de estas clases se pueden usar sin derivar nuevas clases de ellas:

Clase Descripción
CPullPin Objeto auxiliar para patillas de entrada en filtros del analizador. Admite conexiones IAsyncReader con orígenes de extracción.
COutputQueue Objeto auxiliar para patillas de salida que ponen en cola ejemplos 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 patillas 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 de asignador de memoria. Implementa la interfaz IMemAllocator .
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 .