Videorendererfilter
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Der Videorenderer-Filter ist ein robuster, allzweckiger Videorenderer.
Anmerkung
Unter Windows XP und höher ist der Standardmäßige Videorenderer der Video mixing Renderer Filter 7 (VMR-7). Der VMR-7 und der Videorenderer haben beide den Anzeigenamen "Videorenderer". Auf früheren Plattformen ist der Videorenderer der Standardrenderer. Siehe Auswählen des richtigen Renderers.
Der Videorenderer verwendet DirectDraw und Überlagerungsflächen, wenn die Grafikkarte sie unterstützt. Der Filter Graph-Manager macht die IVideoWindow Schnittstelle verfügbar, mit der Anwendungen Eigenschaften für den Videorenderer festlegen und abrufen können. Mit neueren Grafikkarten unterstützt der Videorenderer das Rendering im Vollbildmodus. Andernfalls wechselt der Filter Graph-Manager automatisch zum Vollbildrenderer Filter für den Vollbildmodus. Weitere Informationen finden Sie unter IVideoWindow::p ut_FullScreenMode-.
! [Wichtig]
Normalerweise verarbeitet das Videofenster dieses Filters Nachrichten in einem Arbeitsthread, der vom Filter Graph Manager erstellt wurde. Wenn eine Anwendung den Filter direkt mit CoCreateInstanceerstellt, verarbeitet das Videofenster Nachrichten im Anwendungsthread. In diesem Fall muss der Anwendungsthread über eine Nachrichtenschleife verfügen, um Nachrichten an das Videofenster zu verteilen. Außerdem darf der Thread erst beendet werden, wenn der letzte Release Aufruf des Videorenderers, der beim Herunterfahren des FilterDiagramm-Managers auftritt. Andernfalls kann die Anwendung deadlocken.
Etikett | Wert |
---|---|
Filterschnittstellen | IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow |
Eingabe-Pin-Medientypen | Nicht komprimierte Videoformate. |
Eingabe-Pin-Schnittstellen | IMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl |
Ausgabe-Pin-Medientypen | Nicht zutreffend. |
Ausgabeheftschnittstellen | Nicht zutreffend. |
Filter CLSID | CLSID_VideoRenderer |
Eigenschaftenseite CLSID | Keine Eigenschaftenseite. |
Ausführbar | quartz.dll |
Merit | Windows XP und höher: MERIT_UNLIKELY |
Filterkategorie | CLSID_LegacyAmFilterCategory |
Bemerkungen
Wenn in der Debugversion von Quartz.dlldie LOG_TRACE Debugebene auf 5 oder höher festgelegt ist, zeigt der Videorenderer die Zeitstempel der einzelnen Frames im Videofenster an. Diese Nummern werden nicht in der Verkaufsversion der DLL angezeigt. Weitere Informationen finden Sie unter Debugausgabefunktionen.
Die folgenden Hinweise sind für Filterentwickler vorgesehen:
Der Videorenderer akzeptiert YUV-Formate, wenn die Videografikkarte YUV-Überlagerungsoberflächen unterstützt. Beim ersten Herstellen einer Verbindung mit dem Upstreamfilter erfordert der Videorenderer jedoch ein RGB-Format, das der Farbtiefe der aktuellen Monitoreinstellungen entspricht. Wenn die aktuelle Anzeigeeinstellung beispielsweise eine 24-Bit-Farbe aufweist, muss der Upstreamfilter 24-Bit-RGB-Video bereitstellen können. Wenn das Filterdiagramm in einen Ausführungszustand wechselt, handelt der Videorenderer eine dynamische Formatänderung an den entsprechenden YUV-Farbraum aus.
Durch die Verbindung mit einem RGB-Typ stellt der Videorenderer sicher, dass er GDI verwenden kann, falls DirectDraw nicht verfügbar ist. Sie wechselt zu GDI, wenn eine andere Anwendung den Videospeicher verwendet, wenn das Videorechteck zwei Monitore auf einem Multimonitorsystem überspannt oder das Videorechteck vollständig von einem anderen Fenster verdeckt wird.
Anmerkung
Der Videomischungsrenderer führt diese Art von dynamischer Formatänderung nicht durch und erfordert keinen RGB-Medientyp, da er nie GDI zum Rendern verwendet.
Um eine Formatänderung auszuhandeln, ruft der Videorenderer IPin::QueryAccept mit dem neuen Medientyp auf. Wenn der Upstreamfilter S_OK zurückgibt, fügt der Videorenderer die neuen Medien an das nächste Beispiel an. Der Upstreamfilter sollte IMediaSample::GetMediaType für jedes Beispiel aufrufen. Wenn GetMediaType einen Wert ohneNULL zurückgibt, gibt es eine Formatänderung an, und der Upstreamfilter sollte durch Wechseln der Ausgabetypen reagieren. (Typen in der QueryAccept--Methode nicht wechseln.) Der upstream-Filter sollte mindestens die wichtigsten RGB-Typen akzeptieren und im Idealfall die gängigen YUV-Typen unterstützen. Während des Streamings kann der Videorenderer zwischen YUV- und RGB-Typen beliebig oft hin- und herwechseln. Der Videorenderer akzeptiert keine dynamischen Formatänderungen, die vom Upstreamfilter initiiert wurden.
Wenn der Videorenderer auf eine DirectDraw-Überlagerungsoberfläche zeichnet, wird ein einzelner Puffer für den Eingabenadel zugewiesen. Wenn der Upstreamfilter versucht, eine Verbindung mit mehreren Puffern zu erzwingen, kann der Videorenderer die Überlagerungsoberfläche nicht verwenden.
Verwandte Themen