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