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.]
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:
- CBaseRenderer::CheckMediaType: aceita ou rejeita tipos de mídia propostos. O filtro chama esse método durante o processo de conexão de pin.
- CBaseRenderer::D oRenderSample: renderiza um exemplo. O filtro chama esse método para cada exemplo que recebe durante a execução.
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 |
|
Biblioteca |
|