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.]
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 |
|
Bibliothek |
|