Compartilhar via


Classe CTransformFilter

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]

Hierarquia da classe ctransformfilter

A CTransformFilter classe é uma classe base para implementar filtros de transformação. Essa classe foi projetada para implementar um filtro de transformação com um pino de entrada e um pino de saída. Ele usa alocadores separados para o pino de entrada e o pino de saída. Para criar um filtro que processa dados em vigor, use a classe CTransInPlaceFilter .

Esse filtro usa a classe CTransformInputPin para seu pin de entrada e a classe CTransformOutputPin para seu pin de saída. Normalmente, você não precisa substituir essas classes de pino. A maioria dos métodos pin chama métodos correspondentes na CTransformFilter classe , para que você possa substituir os métodos de filtro, se necessário. O filtro cria ambos os pinos no método CTransformFilter::GetPin . Se você substituir as classes de pino, deverá substituir GetPin para criar seus pinos personalizados.

Para usar essa classe, derive uma nova classe de CTransformFilter e implemente os seguintes métodos:

Talvez seja necessário substituir outros métodos também, dependendo dos requisitos do filtro.

Tipos de mídia

O pin de entrada desse filtro não propõe nenhum tipo de mídia; ele depende do filtro upstream para propor os tipos de mídia para a conexão. O motivo desse design é que, na maioria dos casos, o filtro upstream pode fornecer mais informações sobre o formato. Por exemplo, com formatos de vídeo, o filtro upstream conhece as dimensões de vídeo e a taxa de quadros, enquanto o filtro de transformação não tem como determinar essas informações. Se você quiser alterar esse comportamento, substitua o método GetMediaType do pino de entrada. Quando o filtro upstream propõe um tipo de mídia, o pin de entrada chama o método CheckInputType do filtro (virtual puro).

Até que o pino de entrada seja conectado, o pino de saída recusará todas as conexões e não retornará nenhum tipo de mídia preferencial. Depois que o pino de entrada é conectado, o pino de saída retorna uma lista de tipos preferenciais chamando o método GetMediaType do filtro. Ele verifica os tipos de saída para a conexão por meio do método CheckTransform do filtro. (Ambos os métodos são virtuais puros.) Normalmente, o tipo de entrada determinará parcialmente os tipos de saída aceitáveis.

Dependendo do filtro, talvez você queira registrar alguns dos tipos de mídia com suporte do filtro, para que o objeto Filter Mapper possa localizar o filtro. Para obter mais informações, consulte Como registrar filtros do DirectShow.

Streaming

Essa classe não enfileira os dados de saída. Cada exemplo de saída é entregue dentro do método IMemInputPin::Receive . O método Receive chama o método Transform do filtro (também virtual puro) para processar os dados.

Para obter mais informações sobre como usar essa classe, consulte Escrevendo filtros de transformação.

Variáveis de membro protegidas Descrição
m_bEOSDelivered Sinalizador que indica se o filtro enviou uma notificação de fim de fluxo.
m_bSampleSkipped Sinalizador que indica se a amostra mais recente foi descartada.
m_bQualityChanged Sinalizador que indica se a qualidade foi alterada.
m_csFilter Seção crítica que protege o estado do filtro.
m_csReceive Seção crítica que protege o estado de streaming.
m_pInput Ponteiro para o pino de entrada.
m_pOutput Ponteiro para o pino de saída.
Métodos públicos Descrição
Ctransformfilter Método de construtor.
~Ctransformfilter Método de destruidor.
GetPinCount Recupera o número de pinos no filtro. Virtual.
Getpin Recupera um pino. Virtual.
Transform Transforma um exemplo de entrada para produzir um exemplo de saída. Virtual.
StartStreaming Chamado quando o filtro alterna para o estado em pausa. Virtual.
StopStreaming Chamado quando o filtro alterna para o estado parado. Virtual.
AlterQuality Notifica o filtro de que uma alteração de qualidade é solicitada. Virtual.
Setmediatype Chamado quando o tipo de mídia é definido em um dos pinos do filtro. Virtual.
Checkconnect Determina se uma conexão de pino é adequada. Virtual.
Breakconnect Libera um pino de uma conexão. Virtual.
Completeconnect Conclui uma conexão de pino. Virtual.
Receber Recebe um exemplo de mídia, processa-o e fornece um exemplo de saída para o filtro downstream. Virtual.
InitializeOutputSample Recupera um novo exemplo de saída e o inicializa.
EndOfStream Notifica o filtro de que nenhum dado adicional é esperado do pino de entrada. Virtual.
Beginflush Inicia uma operação de liberação. Virtual.
Endflush Encerra uma operação de liberação. Virtual.
Newsegment Notifica o filtro de que os exemplos de mídia recebidos após essa chamada são agrupados como um segmento. Virtual.
Métodos virtuais puros Descrição
Checkinputtype Verifica se um tipo de mídia especificado é aceitável para entrada.
CheckTransform Verifica se um tipo de mídia de entrada é compatível com um tipo de mídia de saída.
Decidebuffersize Define os requisitos de buffer do pino de saída.
Getmediatype Recupera um tipo de mídia preferencial para o pino de saída.
Métodos IMediaFilter Descrição
Parar Interrompe o filtro.
Pausa Pausa o filtro.
Métodos IBaseFilter Descrição
Findpin Recupera o pino com o identificador especificado.

Requisitos

Requisito Valor
parâmetro
Transfrm.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)