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.
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 |
|
Libreria |
|