Introdução às classes base de filtro

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído pelo MediaPlayer, IMFMediaEngine e Captura de áudio/vídeo no Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer, o IMFMediaEngine e a Captura de áudio/vídeo no Media Foundation em vez do 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.]

Este artigo descreve a biblioteca de classes base do Microsoft DirectShow. Essa biblioteca destina-se a desenvolvedores de filtro, mas desenvolvedores de aplicativos podem achar algumas das classes auxiliares e utilitários de depuração interessantes. No entanto, a biblioteca de classes base não é necessária para a programação do DirectShow.

As seções a seguir resumem as classes base mais importantes da biblioteca.

Classes de objeto COM

As seguintes classes dão suporte à criação de objetos COM:

Classe Descrição
CBaseObject Classe de objeto base.
CUnknown Implementa a interface IUnknown.

 

A maioria das classes do DirectShow derivam de CBaseObject. Essa classe fornece assistência de depuração mantendo uma contagem de todos os objetos ativos na DLL em tempo de execução. Em builds de depuração, a DLL declara se ela é descarregada enquanto a contagem de objetos é maior que zero. Isso facilita o rastreamento de vazamentos causados por problemas de contagem de referência.

Todas as classes base que dão suporte a interfaces COM derivam do CUnknown, que herda o CBaseObject. A classe CUnknown dá suporte à contagem de referência, QueryInterface e agregação. Para obter mais informações, consulte Como implementar o IUnknown.

Filtrar e marcar classes

As seguintes classes dão suporte à criação de objetos de filtro e pino do DirectShow.

Classe Descrição
CBaseFilter Classe base para filtros. Implementa a interface IBaseFilter.
CBasePin Classe base para pinos. Implementa as interfaces IPin e IQualityControl.
CBaseInputPin Classe base para pinos de entrada que usam o transporte de memória local. Implementa a interface IMemInputPin . Essa classe deriva de CBasePin.
CBaseOutputPin Classe base para pinos de saída que usam conexões IMemInputPin . Essa classe deriva de CBasePin.

 

As seguintes classes são úteis para criar tipos mais especializados de filtros:

Classe Descrição
do CSource Classe base para filtros de origem. Essa classe foi projetada para criar fontes de push. Não é adequado para fontes de pull, como leitores de arquivo. Para criar pinos de saída para essa classe, use a classe CSourceStream .
CTransformFilter Classe base para filtros de transformação. Essa classe faz uma cópia dos dados. Os pinos dessa classe são CTransformInputPin e CTransformOutputPin.
CTransInPlaceFilter Classe base para filtros de transformação que não copiam dados. Essa classe executa o processamento de dados diretamente nos dados de entrada antes de passá-los para baixo. Os pinos dessa classe são CTransInPlaceInputPin e CTransInPlaceOutputPin.
CVideoTransformFilter Classe base para filtros de transformação de vídeo. Essa classe deriva de CTransformFilter e adiciona suporte para controle de qualidade.
do CBaseRenderer Classe base para filtros de renderizador. O pino de entrada dessa classe é CRendererInputPin.
CBaseVideoRenderer Classe base para renderizadores de vídeo. Essa classe deriva do CBaseRenderer.

 

Para usar essas classes, você deve derivar sua própria classe e escrever código para dar suporte à funcionalidade específica do filtro. Quanto mais especializada a classe base, menos código você precisará escrever em sua classe derivada.

Objetos auxiliares

As classes a seguir implementam objetos auxiliares que são usados por filtros e pinos. A maioria dessas classes pode ser usada sem derivar novas classes delas:

Classe Descrição
CPullPin Objeto auxiliar para pinos de entrada em filtros de análise. Dá suporte a conexões IAsyncReader com fontes de pull.
COutputQueue Objeto auxiliar para pinos de saída que enfileiram exemplos para entrega em um thread de trabalho.
CSourceSeeking Objeto auxiliar para implementar a busca em um filtro de origem com exatamente um pino de saída. (Essa classe não foi projetada para filtros com vários pinos, como analisadores.)
CEnumPins Objeto enumerador para enumerar pinos em um filtro. Implementa a interface IEnumPins .
CEnumMediaTypes Objeto enumerador para enumerar tipos de mídia preferenciais em um pino. Implementa a interface IEnumMediaTypes .
CMemAllocator Objeto alocador de memória. Implementa a interface IMemAllocator.
CMediaSample Objeto de exemplo de mídia. Implementa a interface IMediaSample2.
CBaseReferenceClock Classe base para relógios de referência. Implementa a interface IReferenceClock .
CMediaType Objeto auxiliar para manipular estruturas de AM_MEDIA_TYPE .