Freigeben über


CBaseRenderer-Klasse

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

cbaserenderer-Klassenhierarchie

Die CBaseRenderer -Klasse ist eine Basisklasse zum Implementieren von Rendererfiltern. Es unterstützt einen Eingabenadel, der von der CRendererInputPin-Klasse implementiert wird. Um diese Klasse zu verwenden, deklarieren Sie eine abgeleitete Klasse, die erbt CBaseRenderer. Mindestens muss die abgeleitete Klasse die folgenden Methoden implementieren, die in der Basisklasse als reine virtuelle Methode deklariert werden:

  • CBaseRenderer::CheckMediaType: Akzeptiert oder lehnt vorgeschlagene Medientypen ab. Der Filter ruft diese Methode während des Anheftverbindungsprozesses auf.
  • CBaseRenderer::D oRenderSample: Rendert ein Beispiel. Der Filter ruft diese Methode für jedes Beispiel auf, das er während der Ausführung empfängt.

Die Basisklasse behandelt Zustandsänderungen und Synchronisierungsprobleme. Außerdem werden Beispiele für das Rendern geplant, obwohl keine Maßnahmen zur Qualitätskontrolle implementiert werden. Die Basisklasse deklariert auch mehrere "Handler"-Methoden. Dies sind Methoden, die der Filter an bestimmten Stellen im Streamingprozess aufruft. Sie tun nichts in der Basisklasse, aber die abgeleitete Klasse kann sie überschreiben. In der folgenden Tabelle sind sie unter der Überschrift Öffentliche Methoden: Handler aufgeführt.

Der CBaseRenderer::OnReceiveFirstSample-Handler verdient besondere Erwähnung. Der Filter ruft diese Methode auf, wenn er ein Beispiel empfängt, während der Filter angehalten wird. Dies kann auftreten, wenn das Diagramm von angehalten zu angehalten wechselt oder wenn das Diagramm während des Anhaltens gesucht wird. Videorenderer verwenden in der Regel das Beispiel, um einen Standbild anzuzeigen. Wenn der Filter von angehalten zur Ausführung wechselt, sendet er dasselbe Beispiel an die CBaseRenderer::D oRenderSample-Methode , wie das erste Beispiel im Stream.

Die CBaseRenderer -Klasse macht die IMediaSeeking- und IMediaPosition-Schnittstellen über das CRendererPosPassThru-Objekt verfügbar. Alle Suchanforderungen werden an den nächsten Filter Upstream übergeben.

Scheduling

Wenn der Upstream-Filter die IMemInputPin::Receive-Methode des Eingabenadels aufruft, um ein Beispiel zu liefern, übergibt der Pin diesen Aufruf an die CBaseRenderer::Receive-Methode des Filters. Der Filter löscht das Beispiel, rendert es sofort oder plant das Rendern.

Wenn das Beispiel über keine Zeitstempel verfügt oder keine Referenzuhr verfügbar ist, rendert der Filter das Beispiel sofort. Andernfalls ruft der Filter die CBaseRenderer::ShouldDrawSampleNow-Methode auf, um zu bestimmen, was zu tun ist. Standardmäßig wird das Beispiel basierend auf den Zeitstempeln geplant. Die abgeleitete Klasse kann ShouldDrawSampleNow überschreiben, um die Qualitätskontrolle zu unterstützen.

Um ein Beispiel zu planen, ruft der Filter die IReferenceClock::AdviseTime-Methode auf, die eine Empfehlungsanforderung erstellt. Die Receive-Methode blockiert dann bis zum geplanten Zeitpunkt oder bis sich der Filterzustand ändert. Das Blockieren verhindert, dass der Upstream-Filter weitere Beispiele liefert, bis das aktuelle Beispiel gerendert wird.

Wenn der Upstream-Filter die IPin::EndOfStream-Methode aufruft, um das Ende des Datenstroms zu signalisieren, sendet der Filter ein EC_COMPLETE-Ereignis an den Filterdiagramm-Manager. Der Filter wartet auf die Stoppzeit des aktuellen Beispiels, bevor das Ereignis gesendet wird.

Geschützte Membervariablen BESCHREIBUNG
m_bAbort Flag, das angibt, ob das Rendern beendet und weitere Beispiele abgelehnt werden soll.
m_bEOS Flag, das angibt, ob das Ende des Datenstroms erreicht wurde.
m_bEOSDelivered Flag, das angibt, ob der Filter das EC_COMPLETE-Ereignis veröffentlicht hat.
m_bInReceive Flag, das angibt, ob der Filter einen Empfangsaufruf verarbeitet.
m_bRepaintStatus Flag, das erneutes Übermalen von Ereignissen aktiviert oder deaktiviert.
m_bStreaming Flag, das angibt, ob es sich beim Filter um Streamingdaten handelt.
m_dwAdvise Bezeichner des Zeitgeberereignisses, das das Rendering plant.
m_EndOfStreamTimer Timer-Ereignis-ID zum Planen EC_COMPLETE Benachrichtigungen.
m_evComplete Ereignis, das signalisiert wird, wenn ein Zustandsübergang abgeschlossen ist.
m_InterfaceLock Filterzustandssperre.
m_ObjectCreationLock Sperren, um die Erstellung von Objekten im Filter zu schützen.
m_pInputPin Zeiger auf den Eingabenadel des Filters.
m_pMediaSample Zeiger auf das aktuelle Medienbeispiel.
m_pPosition Hilfsobjekt zum Übergeben von Suchbefehlen Upstream.
m_pQSink Zeiger auf das Objekt, das Qualitätskontrollmeldungen empfängt.
m_RendererLock Streamingsperre.
m_RenderEvent Ereignis, das zum Planen des Renderings verwendet wird.
m_SignalTime Stoppzeit für das aktuelle Beispiel.
m_ThreadSignal Ereignis, das zum Freigeben des Streamingthreads verwendet wird.
Öffentliche Methoden BESCHREIBUNG
CancelNotification Bricht das Zeitgeberereignis ab, das das Rendering plant. Virtuellen.
CBaseRenderer Konstruktormethode.
~CBaseRenderer Destruktormethode.
GetMediaPositionInterface Ruft die IMediaPosition - und IMediaSeeking-Schnittstellenzeiger des Filters ab. Virtuellen.
GetPin Ruft einen Pin ab. Virtuellen.
GetPinCount Ruft die Anzahl der Pins ab. Virtuellen.
GetSampleTimes Ruft die Zeitstempel aus einem Beispiel ab. Virtuellen.
OnDisplayChange Sendet ein EC_DISPLAY_CHANGED-Ereignis an den Filterdiagramm-Manager.
PrepareReceive Bereitet das Rendern eines Beispiels vor. Virtuellen.
Empfangen Empfängt das nächste Medienbeispiel im Stream. Virtuellen.
Rendern Rendert ein Beispiel. Virtuellen.
ScheduleSample Plant ein Beispiel für das Rendern. Virtuellen.
SendNotifyWindow Benachrichtigt den Upstream Filter des Videofensterhandles.
SendRepaint Sendet ein repaint-Ereignis an den Filterdiagramm-Manager.
SetMediaType Wird aufgerufen, wenn der Medientyp des Pins festgelegt ist. Virtuellen.
SignalTimerFired Löscht den Timerbezeichner, der zum Planen des Renderings verwendet wird.
SourceThreadCanWait Enthält oder gibt den Streamingthread frei. Virtuellen.
WaitForReceiveToComplete Wartet, bis die CBaseRenderer::Receive-Methode abgeschlossen ist.
WaitForRenderTime Wartet auf die Präsentationszeit des aktuellen Beispiels. Virtuellen.
Öffentliche Methoden: Accessormethoden BESCHREIBUNG
ClearPendingSample Gibt das aktuelle Beispiel frei. Virtuellen.
GetCurrentSample Ruft das aktuelle Beispiel ab. Virtuellen.
GetRealState Ruft den Filterstatus ab.
GetRenderEvent Ruft das Ereignis ab, das das Rendering plant.
HaveCurrentSample Bestimmt, ob der Filter über ein Beispiel verfügt. Virtuellen.
IsEndOfStream Fragt ab, ob die Streamendebenachrichtigung empfangen wurde.
IsEndOfStreamDelivered Fragt ab, ob das EC_COMPLETE-Ereignis an den Filtergraph-Manager übermittelt wurde.
IsStreaming Fragt ab, ob es sich bei dem Filter um Streamingdaten handelt.
SetAbortSignal Legt ein Flag fest, das angibt, ob das Rendern beendet und weitere Beispiele abgelehnt werden sollen.
SetRepaintStatus Aktiviert oder deaktiviert erneutes Übermalen von Ereignissen.
Öffentliche Methoden: State-Change Methoden BESCHREIBUNG
Aktiv Wird aufgerufen, wenn der Zustand auf angehalten oder ausgeführt wird. Virtuellen.
BeginFlush Startet einen Löschvorgang. Virtuellen.
BreakConnect Gibt den Eingabenadel von einer Verbindung frei. Virtuellen.
CheckReady Fragt ab, ob ein Zustandsübergang abgeschlossen ist.
CompleteConnect Schließt die Verbindung des Eingabenadels mit einem anderen Pin ab. Virtuellen.
CompleteStateChange Bestimmt, ob ein Übergang zum angehaltenen Zustand abgeschlossen ist. Virtuellen.
EndFlush Beendet einen Löschvorgang. Virtuellen.
Inaktiv Wird aufgerufen, wenn der Zustand auf beendet umgestellt wird. Virtuellen.
NotReady Signalisiert, dass ein Zustandsübergang noch nicht abgeschlossen ist.
Bereit Signalisiert, dass ein Zustandsübergang abgeschlossen ist.
StartStreaming Initiiert das Streaming, wenn der Filter in den Ausführungszustand wechselt. Virtuellen.
StopStreaming Hält das Streaming an, wenn der Filter aus dem Ausführungszustand wechselt. Virtuellen.
Öffentliche Methoden: End-of-Stream-Methoden BESCHREIBUNG
EndOfStream Benachrichtigt den Filter, dass der Eingabenadel eine Streamendebenachrichtigung erhalten hat. Virtuellen.
NotifyEndOfStream Sendet ein EC_COMPLETE-Ereignis an den Filtergraph-Manager.
ResetEndOfStream Setzt die Flags zum Streamende zurück.
ResetEndOfStreamTimer Bricht den Timer ab, der EC_COMPLETE Benachrichtigungen plant. Virtuellen.
SendEndOfStream Wenn das Datenstromende erreicht wurde, plant ein EC_COMPLETE-Ereignis für den Filtergraph-Manager. Virtuellen.
Timercallback Callback-Methode für das Timerereignis am Ende des Datenstroms.
Öffentliche Methoden: Handler BESCHREIBUNG
OnReceiveFirstSample Wird aufgerufen, wenn der Filter ein Beispiel empfängt, während er angehalten ist. Virtuellen.
OnRenderEnd Wird aufgerufen, nachdem ein Beispiel gerendert wurde. Virtuellen.
OnRenderStart Wird aufgerufen, wenn das Rendering gestartet wird. Virtuellen.
OnStartStreaming Wird aufgerufen, wenn der Filter mit dem Streaming beginnt. Virtuellen.
OnStopStreaming Wird aufgerufen, wenn der Filter das Streaming beendet. Virtuellen.
OnWaitEnd Wird aufgerufen, wenn der Filter fertig ist und auf die Präsentationszeit eines Beispiels wartet. Virtuellen.
OnWaitStart Wird aufgerufen, wenn der Filter beginnt, auf die Präsentationszeit eines Beispiels zu warten. Virtuellen.
PrepareRender Wird aufgerufen, bevor der Filter ein Beispiel rendert. Virtuellen.
ShouldDrawSampleNow Bestimmt, wie ein Beispiel für das Rendern geplant wird. Virtuellen.
Reine virtuelle Methoden BESCHREIBUNG
CheckMediaType Bestimmt, ob der Filter einen bestimmten Medientyp akzeptiert.
DoRenderSample Rendert ein Beispiel.
IMediaFilter-Methoden BESCHREIBUNG
GetState Ruft den Status des Filters ab (wird ausgeführt, beendet oder angehalten).
Anhalten Hält den Filter an.
Ausführung Führt den Filter aus.
Beenden Beendet den Filter.
IBaseFilter-Methoden BESCHREIBUNG
FindPin Ruft die Pin mit dem angegebenen Bezeichner ab.

Anforderungen

Anforderung Wert
Header
Renbase.h (streams.h einschließen)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)