Classe CBaseRenderer

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

hierarquia de classe cbaserenderer

A CBaseRenderer classe é uma classe base para implementar filtros de renderizador. Ele dá suporte a um pin de entrada, implementado pela classe CRendererInputPin . Para usar essa classe, declare uma classe derivada que herda CBaseRenderer. No mínimo, a classe derivada deve implementar os seguintes métodos, que são declarados como virtual puro na classe base:

A classe base lida com alterações de estado e problemas de sincronização. Ele também agenda amostras para renderização, embora não implemente nenhuma medida de controle de qualidade. A classe base também declara vários métodos de "manipulador". Esses são métodos que o filtro chama em pontos específicos no processo de streaming. Eles não fazem nada na classe base, mas a classe derivada pode substituí-los. Na tabela a seguir, eles são listados sob o título Métodos Públicos: Manipuladores.

O manipulador CBaseRenderer::OnReceiveFirstSample merece menção especiais. O filtro chamará esse método se ele receber uma amostra enquanto o filtro estiver em pausa. Isso pode ocorrer se o grafo mudar de parado para pausado ou se o grafo for buscado enquanto estiver em pausa. Normalmente, os renderizadores de vídeo usam o exemplo para exibir um quadro parado. Quando o filtro muda de pausa para execução, ele envia o mesmo exemplo para o método CBaseRenderer::D oRenderSample , como o primeiro exemplo no fluxo.

A CBaseRenderer classe expõe as interfaces IMediaSeeking e IMediaPosition por meio do objeto CRendererPosPassThru . Ele passa todas as solicitações de busca para o próximo filtro upstream.

Agendamento

Quando o filtro upstream chama o método IMemInputPin::Receive do pino de entrada para entregar um exemplo, o pin passa essa chamada para o método CBaseRenderer::Receive do filtro. O filtro descarta o exemplo, renderiza-o imediatamente ou agenda-o para renderização.

Se o exemplo não tiver carimbos de data/hora ou se nenhum relógio de referência estiver disponível, o filtro renderizará o exemplo imediatamente. Caso contrário, o filtro chamará o método CBaseRenderer::ShouldDrawSampleNow para determinar o que fazer. Por padrão, o exemplo é agendado com base em seus carimbos de data/hora. A classe derivada pode substituir ShouldDrawSampleNow para dar suporte ao controle de qualidade.

Para agendar um exemplo, o filtro chama o método IReferenceClock::AdviseTime , que cria uma solicitação de aconselhamento. Em seguida, o método Receive é bloqueado até a hora agendada ou até que o filtro altere o estado. O bloqueio impede que o filtro upstream entregue mais amostras até que o exemplo atual seja renderizado.

Quando o filtro upstream chama o método IPin::EndOfStream para sinalizar o fim do fluxo, o filtro envia um evento EC_COMPLETE para o gerenciador de grafo de filtro. O filtro aguarda o tempo de parada do exemplo atual antes de enviar o evento.

Variáveis de membro protegidas Descrição
m_bAbort Sinalizador que indica se é necessário parar de renderizar e rejeitar outros exemplos.
m_bEOS Sinalizador que indica se o fim do fluxo foi atingido.
m_bEOSDelivered Sinalizador que indica se o filtro postou o evento EC_COMPLETE.
m_bInReceive Sinalizador que indica se o filtro está processando uma chamada de Recebimento .
m_bRepaintStatus Sinalizador que habilita ou desabilita eventos de repintar.
m_bStreaming Sinalizador que indica se o filtro é dados de streaming.
m_dwAdvise Identificador do evento de temporizador que agenda a renderização.
m_EndOfStreamTimer Identificador de evento de temporizador para agendar EC_COMPLETE notificações.
M_evcomplete Evento que é sinalizado quando uma transição de estado é concluída.
m_InterfaceLock Bloqueio de estado de filtro.
m_ObjectCreationLock Bloqueie para proteger a criação de objetos dentro do filtro.
m_pInputPin Ponteiro para o pino de entrada do filtro.
m_pMediaSample Ponteiro para o exemplo de mídia atual.
m_pPosition Objeto auxiliar para passar comandos de busca upstream.
m_pQSink Ponteiro para o objeto que recebe mensagens de controle de qualidade.
m_RendererLock Bloqueio de streaming.
m_RenderEvent Evento usado para agendar a renderização.
m_SignalTime Tempo de parada no exemplo atual.
m_ThreadSignal Evento usado para liberar o thread de streaming.
Métodos públicos Descrição
CancelNotification Cancela o evento de temporizador que agenda a renderização. Virtual.
Cbaserenderer Método de construtor.
~Cbaserenderer Método destruidor.
GetMediaPositionInterface Recupera os ponteiros da interface IMediaPosition e IMediaSeeking do filtro. Virtual.
Getpin Recupera um pino. Virtual.
GetPinCount Recupera o número de pinos. Virtual.
GetSampleTimes Recupera os carimbos de data/hora de um exemplo. Virtual.
OnDisplayChange Posta um evento EC_DISPLAY_CHANGED no gerenciador de grafo de filtro.
PrepareReceive Prepara-se para renderizar um exemplo. Virtual.
Receber Recebe o próximo exemplo de mídia no fluxo. Virtual.
Renderizar Renderiza um exemplo. Virtual.
ScheduleSample Agenda um exemplo para renderização. Virtual.
SendNotifyWindow Notifica o filtro upstream do identificador da janela de vídeo.
SendRepaint Envia um evento repintar para o gerenciador de grafo de filtro.
Setmediatype Chamado quando o tipo de mídia do pino é definido. Virtual.
SignalTimerFired Limpa o identificador de temporizador usado para agendar a renderização.
SourceThreadCanWait Mantém ou libera o thread de streaming. Virtual.
WaitForReceiveToComplete Aguarda a conclusão do método CBaseRenderer::Receive .
WaitForRenderTime Aguarda o tempo de apresentação do exemplo atual. Virtual.
Métodos públicos: métodos do acessador Descrição
ClearPendingSample Libera o exemplo atual. Virtual.
GetCurrentSample Recupera o exemplo atual. Virtual.
GetRealState Recupera o estado do filtro.
GetRenderEvent Recupera o evento que agenda a renderização.
HaveCurrentSample Determina se o filtro tem um exemplo. Virtual.
IsEndOfStream Consulta se a notificação de fim do fluxo foi recebida.
IsEndOfStreamDelivered Consulta se o evento EC_COMPLETE foi entregue ao gerenciador de grafo de filtro.
IsStreaming Consulta se o filtro é dados de streaming.
SetAbortSignal Define um sinalizador que indica se deve parar de renderizar e rejeitar exemplos adicionais.
SetRepaintStatus Habilita ou desabilita eventos de repintar.
Métodos públicos: métodos State-Change Descrição
Ativo Chamado quando o estado é alternado para pausado ou em execução. Virtual.
Beginflush Inicia uma operação de liberação. Virtual.
Breakconnect Libera o pino de entrada de uma conexão. Virtual.
CheckReady Consulta se uma transição de estado está concluída.
Completeconnect Conclui a conexão do pino de entrada com outro pino. Virtual.
CompleteStateChange Determina se uma transição para o estado em pausa está concluída. Virtual.
Endflush Encerra uma operação de liberação. Virtual.
Inativo Chamado quando o estado é alternado para parado. Virtual.
NotReady Sinaliza que uma transição de estado ainda não foi concluída.
Pronto Sinaliza que uma transição de estado está concluída.
StartStreaming Inicia o streaming quando o filtro muda para um estado em execução. Virtual.
StopStreaming Interrompe o streaming quando o filtro sai do estado em execução. Virtual.
Métodos públicos: métodos de fim de fluxo Descrição
EndOfStream Notifica o filtro de que o pino de entrada recebeu uma notificação de fim do fluxo. Virtual.
NotifyEndOfStream Posta um evento EC_COMPLETE no gerenciador de grafo de filtro.
ResetEndOfStream Redefine os sinalizadores de fim de fluxo.
ResetEndOfStreamTimer Cancela o temporizador que agenda EC_COMPLETE notificações. Virtual.
SendEndOfStream Se o fim do fluxo foi atingido, agenda um evento de EC_COMPLETE para o gerenciador de grafo de filtro. Virtual.
Timercallback Método de retorno de chamada para o evento de temporizador de fim de fluxo.
Métodos públicos: manipuladores Descrição
OnReceiveFirstSample Chamado quando o filtro recebe uma amostra enquanto está em pausa. Virtual.
OnRenderEnd Chamado depois que um exemplo é renderizado. Virtual.
OnRenderStart Chamado quando a renderização está prestes a ser iniciada. Virtual.
OnStartStreaming Chamado quando o filtro começa a ser transmitido. Virtual.
OnStopStreaming Chamado quando o filtro interrompe o streaming. Virtual.
OnWaitEnd Chamado quando o filtro é concluído aguardando o tempo de apresentação de um exemplo. Virtual.
OnWaitStart Chamado quando o filtro começa a aguardar o tempo de apresentação de um exemplo. Virtual.
PrepareRender Chamado antes que o filtro renderize um exemplo. Virtual.
ShouldDrawSampleNow Determina como um exemplo é agendado para renderização. Virtual.
Métodos virtuais puros Descrição
Checkmediatype Determina se o filtro aceita um tipo de mídia específico.
DoRenderSample Renderiza um exemplo.
Métodos IMediaFilter Descrição
GetState Recupera o estado do filtro (em execução, parado ou pausado).
Pausa Pausa o filtro.
Executar Executa o filtro.
Parar Interrompe o filtro.
Métodos IBaseFilter Descrição
Findpin Recupera o pino com o identificador especificado.

Requisitos

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