Videorendererfilter
[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.]
Der Videorenderer-Filter ist ein robuster, universell einsetzbarer Videorenderer.
Hinweis
Unter Windows XP und höher ist der Standard-Videorenderer der Videomischrenderer Filter 7 (VMR-7). Der VMR-7 und der Videorenderer haben beide den Anzeigenamen "Video Renderer". Auf früheren Plattformen ist der Videorenderer der Standardrenderer. Weitere Informationen finden Sie unter Auswählen des richtigen Renderers.
Der Videorenderer verwendet DirectDraw- und Überlagerungsflächen, wenn diese vom Video-Karte unterstützt werden. Der Filter Graph-Manager macht die IVideoWindow-Schnittstelle verfügbar, mit der Anwendungen Eigenschaften für den Video-Renderer festlegen und abrufen können. Bei neueren Grafikkarten unterstützt der Videorenderer das Rendering im Vollbildmodus. Andernfalls wechselt der Filter Graph Manager automatisch zum Vollbildrendererfilter für den Vollbildmodus. Weitere Informationen finden Sie unter IVideoWindow::p ut_FullScreenMode .
![Wichtig]
Normalerweise verarbeitet das Videofenster dieses Filters Nachrichten in einem Workerthread, der vom Filter Graph-Manager erstellt wurde. Howerver: Wenn eine Anwendung den Filter direkt mit CoCreateInstance erstellt, verarbeitet das Videofenster Nachrichten im Anwendungsthread. In diesem Fall muss der Anwendungsthread über eine Nachrichtenschleife verfügen, um Nachrichten an das Videofenster zu senden. Außerdem darf der Thread erst beendet werden, wenn der Videorenderer den letzten Release-Aufruf beendet. Dies tritt auf, wenn der Filter Graph Manager heruntergefahren wird. Andernfalls könnte die Anwendung einen Deadlock haben.
Bezeichnung | Wert |
---|---|
Filterschnittstellen | IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow |
Eingabeheftmedientypen | Nicht komprimierte Videoformate. |
Eingabenadelschnittstellen | IMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl |
Ausgabeheftmedientypen | Nicht zutreffend |
Ausgabepinschnittstellen | Nicht zutreffend |
CLSID filtern | CLSID_VideoRenderer |
Eigenschaftenseite CLSID | Keine Eigenschaftenseite. |
Ausführbare Datei | quartz.dll |
Verdienst | Windows XP und höher: MERIT_UNLIKELY |
Filterkategorie | CLSID_LegacyAmFilterCategory |
Wenn in der Debugversion von Quartz.dll die LOG_TRACE Debugebene auf 5 oder höher festgelegt ist, zeigt der Videorenderer die Zeitstempel jedes Frames im Videofenster an. Diese Zahlen werden in der Einzelhandelsversion der DLL nicht angezeigt. Weitere Informationen finden Sie unter Debuggen von Ausgabefunktionen.
Die folgenden Hinweise richten sich an Filterentwickler:
Der Videorenderer akzeptiert YUV-Formate, wenn die Videografiken Karte YUV-Überlagerungsflächen unterstützen. Wenn er zum ersten Mal eine Verbindung mit dem Upstream-Filter herstellt, benötigt der Videorenderer jedoch ein RGB-Format, das der Farbtiefe der aktuellen Monitoreinstellungen entspricht. Wenn die aktuelle Anzeigeeinstellung beispielsweise 24-Bit-Farbe ist, muss der Upstream-Filter 24-Bit-RGB-Video bereitstellen können. Wenn das Filterdiagramm in einen Ausführungszustand wechselt, handelt der Videorenderer eine dynamische Formatänderung in 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. Es wechselt zu GDI, wenn eine andere Anwendung den Videospeicher verwendet, wenn das Videorechteck zwei Monitore auf einem System mit mehreren Monitoren würgt oder wenn das Videorechteck durch ein anderes Fenster vollständig verdeckt wird.
Hinweis
Der Video Mixing Renderer führt diese Art dynamischer Formatänderungen 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 Upstream-Filter S_OK zurückgibt, fügt der Videorenderer die neuen Medien an das nächste Beispiel an. Der Upstream-Filter sollte in jedem Beispiel IMediaSample::GetMediaType aufrufen. Wenn GetMediaType einen Wert ohne NULL zurückgibt, gibt dies eine Formatänderung an, und der Upstream Filter sollte durch Wechseln der Ausgabetypen reagieren. (Wechseln Sie keine Typen in der QueryAccept-Methode.) Der Upstream-Filter sollte mindestens die wichtigsten RGB-Typen akzeptieren und idealerweise die gängigen YUV-Typen unterstützen. Während des Streamings kann der Videorenderer beliebig oft zwischen YUV- und RGB-Typen hin- und herwechseln. Der Videorenderer akzeptiert keine dynamischen Formatänderungen, die vom Upstream-Filter initiiert wurden.
Wenn der Videorenderer auf eine DirectDraw-Overlayoberfläche zeichnet, weist er einen einzelnen Puffer für seinen Eingabenadel zu. Wenn der Upstream-Filter versucht, eine Verbindung mit mehreren Puffern zu erzwingen, kann der Videorenderer die Überlagerungsoberfläche nicht verwenden.