Classe CTransInPlaceFilter
[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.]
A CTransInPlaceFilter
classe foi projetada para filtros de transformação in-loco, que são filtros que modificam os dados de entrada em vez de copiar os dados entre buffers. Para usar essa classe, derive uma nova classe de CTransInPlaceFilter
e implemente os seguintes métodos:
Essa classe usa a classe CTransInPlaceInputPin para seu pin de entrada e a classe CTransInPlaceOutputPin para seu pin de saída. Normalmente, você não precisa substituir essas classes de pino. O filtro cria ambos os pinos no método CTransInPlaceFilter::GetPin . Se você substituir as classes de pino, deverá substituir GetPin para criar seus pinos personalizados.
Essa classe foi projetada para que o tipo de entrada sempre corresponda ao tipo de saída. Sempre que possível, o filtro usa um único alocador para ambas as conexões de pino.
Tipos de mídia preferenciais
Se o pino de saída já estiver conectado, o pino de entrada oferecerá os tipos preferenciais do filtro downstream. (Na verdade, ele simplesmente retorna o objeto enumerador do filtro downstream.) Caso contrário, ele não tem tipos preferenciais. O pino de saída tem o mesmo comportamento, mas ao contrário: se o pin de entrada já estiver conectado, o pino de saída oferecerá os tipos preferenciais do filtro upstream. Caso contrário, ele não tem tipos preferenciais
Fixar Conexões
Quando um pino se conecta, o filtro geralmente reconecta o outro pino, para garantir que ambos os pinos usem o mesmo tipo de mídia e o mesmo alocador. (O mecanismo para reconectar pinos é descrito em Reconectando pinos.) Dois cenários são possíveis: o pino de entrada se conecta primeiro ou o pino de saída se conecta primeiro.
Suponha que o pino de entrada se conecte primeiro. As seguintes etapas ocorrem:
- O pin de entrada chama o método CheckInputType do filtro para marcar o tipo de mídia.
- O filtro upstream seleciona um alocador. Neste ponto, o pin de entrada não tem requisitos de alocador e aceita qualquer alocador para a conexão. Se o filtro upstream solicitar um alocador, o pino criará um novo. Por motivos descritos em breve, esse alocador não será usado na conexão final. Ele é fornecido apenas para ajudar a concluir esta fase do processo de conexão.
Posteriormente, quando o pino de saída se conecta:
- O pino de saída chama o método CheckInputType do filtro para marcar o tipo de mídia. Ele também chama IPin::QueryAccept no filtro upstream. Isso garante que o pino de entrada possa alterar seu tipo de mídia para corresponder.
- O pino de saída chama o método CheckInputType do filtro para marcar o tipo de mídia. Ele também chama IPin::QueryAccept no filtro upstream. Isso garante que o pino de entrada possa alterar seu tipo de mídia para corresponder.
- O pino de saída chama o método CheckInputType do filtro para marcar o tipo de mídia. Ele também chama IPin::QueryAccept no filtro upstream. Isso garante que o pino de entrada possa alterar seu tipo de mídia para corresponder.
- Desta vez, o método GetAllocator do pino de entrada retorna o alocador downstream e GetAllocatorRequirements retorna os requisitos do alocador do filtro downstream. O pin de entrada aceita qualquer alocador escolhido pelo filtro upstream.
- Desta vez, o método GetAllocator do pino de entrada retorna o alocador downstream e GetAllocatorRequirements retorna os requisitos do alocador do filtro downstream. O pin de entrada aceita qualquer alocador escolhido pelo filtro upstream.
Agora considere o cenário oposto, em que o pino de saída é o primeiro pino a se conectar.
- O pino de saída chama o método CheckInputType do filtro para marcar o tipo de mídia.
- Ele seleciona um alocador, preferindo usar o alocador do filtro downstream.
Em seguida, quando o pino de entrada se conecta:
- O pin de entrada verifica o tipo de mídia chamando CheckInputType no filtro e chamando QueryAccept no pino de saída do filtro downstream.
- Se o tipo de entrada não corresponder ao tipo de saída, o filtro reconectará o pino de saída.
- O filtro upstream seleciona um alocador. O método GetAllocator do pino de entrada retorna o alocador downstream e o pin de entrada aceita qualquer alocador selecionado pelo filtro upstream.
- O filtro usa o mesmo alocador para a conexão downstream, possivelmente substituindo o alocador downstream original.
Essa sequência de eventos mudará ligeiramente se qualquer um dos alocadores envolvidos for somente leitura, pois o alocador downstream deve ser gravável. Nesse caso, o filtro pode usar dois alocadores separados.
Para obter mais informações sobre como usar essa classe, consulte Escrevendo filtros de transformação.
Variáveis de membro protegidas | Descrição |
---|---|
m_bModifiesData | Indica se o filtro modifica os dados de exemplo. |
Métodos Protegidos | Descrição |
Copy | Copia um exemplo de mídia. |
InputPin | Recupera um ponteiro para o pino de entrada do filtro. |
OutputPin | Recupera um ponteiro para o pino de saída do filtro. |
TypesMatch | Determina se o tipo de mídia de entrada corresponde ao tipo de mídia de saída. |
UsingDifferentAllocators | Determina se os pinos de entrada e saída estão usando alocadores diferentes. |
Métodos públicos | Descrição |
Ctransinplacefilter | Método de construtor. |
Getpin | Recupera um pino. |
Getmediatype | Recupera um tipo de mídia preferencial para o pino de saída. |
Decidebuffersize | Define os requisitos de buffer do pino de saída. |
CheckTransform | Verifica se um tipo de mídia de entrada é compatível com um tipo de mídia de saída. |
Completeconnect | Conclui uma conexão de pino. |
Receber | Recebe um exemplo de mídia, processa-o e entrega-o ao filtro downstream. |
Métodos virtuais puros | Descrição |
Transform | Transforma um exemplo no local. |
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|