Introdução às classes base de filtro

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 Captura de Áudio/Vídeo no 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.]

Este artigo descreve a biblioteca de classes base do Microsoft DirectShow. Essa biblioteca destina-se a desenvolvedores de filtros, mas os gravadores de aplicativos podem achar algumas das classes auxiliares e utilitários de depuração úteis. 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 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 de CUnknown, que herda CBaseObject. A classe CUnknown dá suporte à contagem de referência, QueryInterface e aggregration. Para obter mais informações, confira Como implementar o IUnknown.

Filtrar e fixar classes

As seguintes classes dão suporte à criação de objetos de filtro e fixação 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
Csource Classe base para filtros de origem. Essa classe foi projetada para criar fontes de push. Ele não é adequado para fontes de pull, como leitores de arquivos. Para criar pinos de saída para essa classe, use a classe CSourceStream .
Ctransformfilter Classe base para filtros de transformação. Essa classe executa uma cópia nos 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 downstream. 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.
Cbaserenderer Classe base para filtros de renderizador. O pino de entrada para essa classe é CRendererInputPin.
Cbasevideorenderer Classe base para renderizadores de vídeo. Essa classe deriva de 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 for a classe base, menos código você precisará escrever em sua classe derivada.

Objetos auxiliares

As classes a seguir implementam objetos auxiliares 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 analisador. Dá suporte a conexões IAsyncReader com fontes de pull.
Coutputqueue Objeto auxiliar para pinos de saída que enfileiram amostras para entrega em um thread de trabalho.
Csourceseeking Objeto de ajuda 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 pin. 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 .