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.]
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:
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
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 |
|
Biblioteca |
|