Classe CBaseRenderer

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Gerarchia di classi cbaserenderer

La CBaseRenderer classe è una classe base per l'implementazione dei filtri del renderer. Supporta un pin di input, implementato dalla classe CRendererInputPin . Per usare questa classe, dichiarare una classe derivata che eredita CBaseRenderer. Come minimo, la classe derivata deve implementare i metodi seguenti, dichiarati come virtuali pure nella classe base:

  • CBaseRenderer::CheckMediaType: accetta o rifiuta i tipi di supporti proposti. Il filtro chiama questo metodo durante il processo di connessione pin.
  • CBaseRenderer::D oRenderSample: esegue il rendering di un esempio. Il filtro chiama questo metodo per ogni campione ricevuto durante l'esecuzione.

La classe base gestisce le modifiche dello stato e i problemi di sincronizzazione. Pianifica anche i campioni per il rendering, anche se non implementa misure di controllo qualità. La classe base dichiara anche diversi metodi "gestore". Si tratta di metodi che il filtro chiama in punti specifici del processo di streaming. Non eseguono alcuna operazione nella classe base, ma la classe derivata può eseguirne l'override. Nella tabella seguente sono elencati sotto l'intestazione Metodi pubblici: Gestori.

Il gestore CBaseRenderer::OnReceiveFirstSample merita una menzione speciale. Il filtro chiama questo metodo se riceve un esempio mentre il filtro viene sospeso. Ciò può verificarsi se il grafico passa da arrestato a sospeso o se il grafico viene cercato durante la sospensione. I renderer video usano in genere l'esempio per visualizzare un fotogramma ancora. Quando il filtro passa dalla sospensione all'esecuzione, invia lo stesso esempio al metodo CBaseRenderer::D oRenderSample , come primo esempio del flusso.

La CBaseRenderer classe espone le interfacce IMediaSeeking e IMediaPosition tramite l'oggetto CRendererPosPassThru . Passa tutte le richieste di ricerca al successivo filtro upstream.

Pianificazione

Quando il filtro upstream chiama il metodo IMemInputPin::Receive del pin di input per recapitare un esempio, il pin passa questa chiamata al metodo CBaseRenderer::Receive del filtro. Il filtro elimina l'esempio, lo esegue immediatamente o lo pianifica per il rendering.

Se l'esempio non dispone di timestamp o se non è disponibile alcun orologio di riferimento, il filtro esegue immediatamente il rendering dell'esempio. In caso contrario, il filtro chiama il metodo CBaseRenderer::ShouldDrawSampleNow per determinare cosa fare. Per impostazione predefinita, l'esempio viene pianificato in base ai timestamp. La classe derivata può eseguire l'override di ShouldDrawSampleNow per supportare il controllo qualità.

Per pianificare un esempio, il filtro chiama il metodo IReferenceClock::AdviseTime , che crea una richiesta di avviso. Il metodo Receive viene quindi bloccato fino all'ora pianificata o fino a quando il filtro non cambia lo stato. Il blocco impedisce al filtro upstream di distribuire altri esempi fino a quando non viene eseguito il rendering dell'esempio corrente.

Quando il filtro upstream chiama il metodo IPin::EndOfStream per segnalare la fine del flusso, il filtro invia un evento EC_COMPLETE al gestore del grafo del filtro. Il filtro attende l'ora di arresto dell'esempio corrente prima di inviare l'evento.

Variabili membro protette Descrizione
m_bAbort Flag che indica se interrompere il rendering e rifiutare altri esempi.
m_bEOS Flag che indica se è stata raggiunta la fine del flusso.
m_bEOSDelivered Flag che indica se il filtro ha inviato l'evento EC_COMPLETE.
m_bInReceive Flag che indica se il filtro sta elaborando una chiamata di ricezione .
m_bRepaintStatus Flag che abilita o disabilita gli eventi di aggiornamento.
m_bStreaming Flag che indica se il filtro è in streaming dei dati.
m_dwAdvise Identificatore dell'evento timer che pianifica il rendering.
m_EndOfStreamTimer Identificatore di evento timer per la pianificazione delle notifiche di EC_COMPLETE.
m_evComplete Evento segnalato al completamento di una transizione di stato.
m_InterfaceLock Blocco dello stato del filtro.
m_ObjectCreationLock Blocca per proteggere la creazione di oggetti all'interno del filtro.
m_pInputPin Puntatore al pin di input del filtro.
m_pMediaSample Puntatore all'esempio di supporto corrente.
m_pPosition Oggetto helper per passare i comandi di ricerca upstream.
m_pQSink Puntatore all'oggetto che riceve messaggi di controllo qualità.
m_RendererLock Blocco di streaming.
m_RenderEvent Evento usato per pianificare il rendering.
m_SignalTime Ora di arresto nell'esempio corrente.
m_ThreadSignal Evento usato per rilasciare il thread di streaming.
Metodi pubblici Descrizione
CancelNotification Annulla l'evento timer che pianifica il rendering. Virtuale.
CBaseRenderer Metodo del costruttore.
~CBaseRenderer Metodo distruttore.
GetMediaPositionInterface Recupera i puntatori all'interfaccia IMediaPosition e IMediaSeeking del filtro. Virtuale.
GetPin Recupera un pin. Virtuale.
GetPinCount Recupera il numero di pin. Virtuale.
GetSampleTimes Recupera i timestamp da un esempio. Virtuale.
OnDisplayChange Esegue il post di un evento EC_DISPLAY_CHANGED al gestore del grafico di filtro.
PrepareReceive Prepara il rendering di un esempio. Virtuale.
Ricevere Riceve l'esempio multimediale successivo nel flusso. Virtuale.
Rendering Esegue il rendering di un esempio. Virtuale.
ScheduleSample Pianifica un esempio per il rendering. Virtuale.
SendNotifyWindow Notifica al filtro upstream dell'handle della finestra video.
SendRepaint Invia un evento di ripaint alla gestione dei grafici di filtro.
SetMediaType Chiamato quando il tipo di supporto del pin è impostato. Virtuale.
SignalTimerFired Cancella l'identificatore timer usato per pianificare il rendering.
SourceThreadCanWait Contiene o rilascia il thread di streaming. Virtuale.
WaitForReceiveToComplete Attende il completamento del metodo CBaseRenderer::Receive .
WaitForRenderTime Attende l'ora di presentazione dell'esempio corrente. Virtuale.
Metodi pubblici: metodi di accesso Descrizione
ClearPendingSample Rilascia l'esempio corrente. Virtuale.
GetCurrentSample Recupera l'esempio corrente. Virtuale.
GetRealState Recupera lo stato del filtro.
GetRenderEvent Recupera l'evento che pianifica il rendering.
HaveCurrentSample Determina se il filtro ha un esempio. Virtuale.
IsEndOfStream Esegue query sul fatto che la notifica end-of-stream sia stata ricevuta.
IsEndOfStreamDelivered Esegue una query sul fatto che l'evento EC_COMPLETE sia stato recapitato alla gestione dei grafici di filtro.
IsStreaming Esegue query sul fatto che il filtro sia in streaming dei dati.
SetAbortSignal Imposta un flag che indica se arrestare il rendering e rifiutare altri esempi.
SetRepaintStatus Abilita o disabilita gli eventi di repaint.
Metodi pubblici: metodi State-Change Descrizione
Attivo Chiamato quando lo stato viene spostato in pausa o in esecuzione. Virtuale.
BeginFlush Avvia un'operazione di scaricamento. Virtuale.
BreakConnect Rilascia il pin di input da una connessione. Virtuale.
CheckReady Esegue query sul completamento di una transizione dello stato.
CompleteConnect Completa la connessione del pin di input a un altro pin. Virtuale.
CompleteStateChange Determina se è stata completata una transizione allo stato sospeso. Virtuale.
EndFlush Termina un'operazione di scaricamento. Virtuale.
Inactive Chiamato quando lo stato viene arrestato. Virtuale.
NotReady Segnala che una transizione dello stato non è ancora stata completata.
Ready Segnala che è stata completata una transizione dello stato.
StartStreaming Avvia lo streaming quando il filtro passa a uno stato in esecuzione. Virtuale.
StopStreaming Arresta lo streaming quando il filtro esce dallo stato in esecuzione. Virtuale.
Metodi pubblici: metodi end-of-stream Descrizione
EndOfStream Notifica al filtro che il pin di input ha ricevuto una notifica end-of-stream. Virtuale.
NotifyEndOfStream Invia un evento EC_COMPLETE al gestore dei grafici di filtro.
ResetEndOfStream Reimposta i flag end-of-stream.
ResetEndOfStreamTimer Annulla il timer che pianifica le notifiche EC_COMPLETE. Virtuale.
SendEndOfStream Se è stato raggiunto il flusso finale, pianifica un evento EC_COMPLETE per la gestione dei grafici di filtro. Virtuale.
Timercallback Metodo di callback per l'evento timer end-of-stream.
Metodi pubblici: gestori Descrizione
OnReceiveFirstSample Chiamato quando il filtro riceve un esempio durante la pausa. Virtuale.
OnRenderEnd Chiamato dopo il rendering di un esempio. Virtuale.
OnRenderStart Chiamato quando il rendering sta per iniziare. Virtuale.
OnStartStreaming Chiamato quando il filtro inizia lo streaming. Virtuale.
OnStopStreaming Chiamato quando il filtro arresta lo streaming. Virtuale.
OnWaitEnd Chiamato quando il filtro viene eseguito in attesa dell'ora di presentazione di un esempio. Virtuale.
OnWaitStart Chiamato quando il filtro inizia in attesa dell'ora di presentazione di un esempio. Virtuale.
PrepareRender Chiamato prima del rendering di un esempio del filtro. Virtuale.
ShouldDrawSampleNow Determina la modalità di pianificazione di un esempio per il rendering. Virtuale.
Metodi virtuali pure Descrizione
CheckMediaType Determina se il filtro accetta un tipo di supporto specifico.
DoRenderSample Esegue il rendering di un esempio.
Metodi IMediaFilter Descrizione
GetState Recupera lo stato del filtro (in esecuzione, arrestato o sospeso).
Sospendi Sospende il filtro.
Esegui Esegue il filtro.
Stop Arresta il filtro.
Metodi IBaseFilter Descrizione
FindPin Recupera il pin con l'identificatore specificato.

Requisiti

Requisito Valore
Intestazione
Renbase.h (includere Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)