Classe CBaseRenderer
La classe è una classe di base per l'implementazione CBaseRenderer
dei filtri del renderer. Supporta un pin di input implementato dalla classe CRendererInputPin . Per usare questa classe, dichiarare una classe derivata che eredita CBaseRenderer
. Almeno, 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 esempio che riceve durante l'esecuzione.
La classe di base gestisce le modifiche dello stato e i problemi di sincronizzazione. Pianifica anche esempi per il rendering, anche se non implementa misure di controllo qualitativo. La classe base dichiara anche diversi metodi "gestore". Questi sono metodi che i filtri chiamano in punti specifici nel processo di streaming. Non fanno nulla nella classe di base, ma la classe derivata può eseguirne l'override. Nella tabella seguente sono elencate 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 da sospeso a in esecuzione, invia lo stesso esempio al metodo CBaseRenderer::D oRenderSample , come primo esempio nel 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 relativi 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 consulenza. Il metodo Receive blocca quindi fino all'ora pianificata o fino a quando il filtro cambia stato. Il blocco impedisce al filtro upstream di distribuire più campioni 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 alla gestione del grafico del filtro. Il filtro attende il tempo di arresto dell'esempio corrente prima di inviare l'evento.
Variabili membro protette | Descrizione |
---|---|
m_bAbort | Flag che indica se arrestare 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 pubblicato 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 ripaint. |
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 quando viene completata una transizione dello stato. |
m_InterfaceLock | Blocco dello stato 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 upstream. |
m_pQSink | Puntatore all'oggetto che riceve messaggi di controllo qualità. |
m_RendererLock | Blocco di streaming. |
m_RenderEvent | Evento usato per pianificare rendering. |
m_SignalTime | Arrestare l'ora 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 costruttore. |
~CBaseRenderer | Metodo distruttore. |
GetMediaPositionInterface | Recupera i puntatori dell'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. |
Rendere | 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. |
Inattivo | 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 è stata raggiunta la fine del flusso, pianifica un evento EC_COMPLETE per la gestione del grafo dei filtri. Virtuale. |
Timercallback | Metodo di callback per l'evento timer di fine flusso. |
Metodi pubblici: gestori | Descrizione |
OnReceiveFirstSample | Chiamato quando il filtro riceve un campione durante la sospensione. 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 interrompe lo streaming. Virtuale. |
OnWaitEnd | Viene chiamato quando il filtro viene completato in attesa dell'ora di presentazione di un campione. Virtuale. |
OnWaitStart | Chiamato quando il filtro inizia ad attendere l'ora di presentazione di un campione. Virtuale. |
PrepareRender | Chiamato prima che il filtro esegua il rendering di un esempio. Virtuale. |
ShouldDrawSampleNow | Determina come viene pianificato il rendering di un esempio. 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 |
|