Compiz Fusion und Video

Hallo,
hier bin ich, Bugs, schon wieder mit einem etwas schwammigen Thema. Es soll sich bei diesem Artikel alles um Video unter Compiz drehen. Das Thema steckt voller Tücken.

Hallo,
hier bin ich, Bugs, schon wieder mit einem etwas schwammigen Thema. Es soll sich bei diesem Artikel alles um Video unter Compiz drehen. Das Thema steckt voller Tücken.

Grundlagen

Lange Zeit war so genanntes Tearing bei Videos mit aktivem Compiz gar nicht zu vermeiden. Inzwischen wurden einige Sachen gefixt und optimiert, was die Chance eröffnet, das Ganze ganz gut in den Griff zu bekommen. Was ist Tearing überhaupt?

Wikipedia schreibt dazu:

„Tearing oder Page-Tearing beschreibt grundsätzlich, dass ein kürzlich gerenderter Frame von dem darauf folgenden überlagert wird, sodass das Objekt zerrissen wirkt. Meistens kommt Tearing bei Videospielen vor, weil arbeitslastige Prozesse die Synchronisationsvorgänge behindern können.
Grafikkarten verfügen über einen Front- und einen Backbuffer. Die GPU (Grafikprozessor) schreibt in den Backbuffer, während der Bildschirm aus dem Frontbuffer liest. Danach wechseln Front- und Backbuffer ihre Funktion. (…) Schreibt nun die GPU in einer anderen Geschwindigkeit einen Frame in den Buffer als der Speicher ausgelesen wird, so tauschen während eines Leselaufs die Buffer ihre Funktion. Nun ist aber ein anderes Bild im Buffer gespeichert, welches dadurch an das alte angehängt wird. Um dies zu verhindern wurde ein weiteres Signal eingeführt, welches gegeben wird, wenn das gesamte Frame ausgelesen ist und erst dann die Buffer gewechselt werden.
Das Benutzen von vertikaler Synchronisation (VSync) hilft, dem Tearing vorzubeugen. Eine vertikale Synchronisation verhindert bei Grafikkarten eine Aktualisierung der Bilddaten, während der Bildschirm das Bild aufbaut. Gebräuchliche VSync-Raten sind dabei 60 Hz, 70 Hz, oder 75 Hz, kann aber sogar bis zu 200Hz kommen.“

Wie sich Tearing bemerkbar macht, habe ich mal mit folgendem Screenshot simuliert. Es bilden sich horizontal verlaufende Bruchkanten im Bild, die besonders störend bei horizontalen Bildfahrten auffallen.

Auswirkungen des Tearing-Effekts
Auswirkungen des Tearing-Effekts

Warum ist Compiz so anfällig für Tearing?

Ich weiß nicht, ob „anfällig“ nun das richtige Wort dafür ist, und ob nun Compiz überhaupt der Hauptschuldige ist, ist auch noch eine Frage für sich, aber die Erklärung ist relativ einfach. Hier konkurrieren mehrere Ebenen der Darstellung um die Vorherrschaft und müssen möglichst synchronisiert und zur Kooperation überredet werden, um Tearing zu verhindern. Beim aktuellen Problem haben wir mindestens vier Ebenen, die alle miteinander klar kommen müssen.

  1. Monitor/Display
  2. Grafikkarte/Treiber
  3. Compiz
  4. Video/Mediaplayer

Monitor/Display

Fangen wir mal ganz außen an. Der Monitor zeichnet das Bild der Grafikkarte mit einer bestimmten Frequenz. Hier kann es von Hersteller zu Hersteller und je nach Displaytyp große Unterschiede geben, was die erwarteten Eingangssignale angeht. Während PC-Monitore in der Regel sehr flexibel sind, beschränken Fernseher oft die akzeptierten Signale. Die aktuellen LG-Fernseher, zum Beispiel, wollen am liebsten 60Hz über ihre HDMI-Eingänge haben, laufen aber auch noch mit 50Hz. Hier kann es aber schon zu ersten Stolperfallen und ruckeligen Bildern kommen, wenn man von den vorgegeben Frequenzen abweicht. Wenn der Monitor also 60 Hz wünscht, sollte auch die Ausgabe der Grafik auf 60 Hz fest eingestellt werden.

Grafikkarte/Treiber (hier Nvidia)

Direkt hinter dem Monitor sitzt im Grunde der Treiber der Grafikkarte. Genau hier muss man als erstes eingreifen. Im Idealfall stellt man hier die native Auflösung des Displays (bei fullHD Fernsehern 1920 x 1080) und die passende Frequenz ein.

Auflösung und Bildfrequenz

Hier tauchen nun auch das erste mal Optionen zur Synchronisation (Sync to VBlank) auf. Beim Nvidia System sogar gleich an zwei bis drei (je Version) Stellen.

VideoX Settings
OpenGL Settings

Diese Synchronisations-Optionen sollten alle aktiviert werden. Bei den OpenGL-Einstellungen muss man eventuell noch die Qualität zugunsten der Performance zurückschrauben, wenn der Treiber die zuvor eingestellten Werte für Auflösung und Frequenz nicht akzeptieren will. Hier ist gegebenenfalls ein wenig experimentieren vonnöten.

Compiz

Auch bei Compiz gib es einige Stellschrauben, die überprüft werden sollten. Diese findet man alle im CompizConfig Einstellungsmanager unter dem Bereich Allgemeine Compiz Optionen / Display Settings.
Als erstes sollte die Aktualisierungsrate angepasst werden. Hier sollten wieder die 60 Hz stehen. Zusätzlich ist die Option Aktualisierungsrate erkennen sehr zu empfehlen, da Compiz sich dann sogar Hardware bedingt leicht abweichenden Werten wie 59,95 Hz anpassen kann.
Ganz wichtig ist dann noch der letzte Punkt Mit VBlank synchronisieren. Diese Option muss aktiviert sein, damit Compiz sich im Gleichtakt mit der Grafikkarte bewegen kann.

Allgemeine Compiz Optionen / Display Settings

Video/Mediaplayer

Hier wird es wieder experimentell. Viele Player haben in ihren Settings und Einstellungen Synchronisationsoptionen. Diese sind bezeichnet mit Namen wie VblankSync, SyncVBlanc, VSync oder auch Vertikalsynchronisation. Sie alle wollen das gleiche erreichen: das Synchronisieren der Bildausgabe mit der Grafikkarte und dem Monitor. Soweit so gut und in der Regel ist ein Aktivieren dieser Optionen zu empfehlen, wäre da nicht noch Compiz, der dazwischenfunkt. Es kann durchaus passieren, dass Tearing im Video noch gefördert wird, wenn diese Optionen im Player selbst aktiviert sind. Das allerdings ist auch nicht generell so. Bei mythTV habe ich jedenfalls ein besseres Bild, wenn ich dort bei aktivem Compiz diese Optionen deaktiviere und mich bei der Synchronisation ganz auf Compiz verlasse, der mit seinem Fenstermanager ja Oberfläche und Video zusammenbringt. Hier muss man also ausprobieren, was sich am besten macht. Zum Testen eignen sich Videos mit schnellen Seitwährtsschwenks und Kamerafahrten mit kontrastreichen vertikalen Strukturen, etwa Baumstämme oder Zaunlatten vor einem hellen Himmel.

Checkt also diese ganzen Optionen mal ab und vielleicht ist es Euch dann auch wie mir möglich, Video, TV und DVD ohne Störungen in Fullscreen zu genießen, ohne Compiz temporär deaktivieren zu müssen.

Und was ist mit Flash?

Tja, was soll man dazu sagen? Ich weiß nicht, wie Flash intern arbeitet, aber derzeit bietet es unter Linux keine Möglichkeit, sich irgendwie synchronisieren zu lassen. Compiz bekommt die Sache aber eigentlich gut in den Griff, bei kleinen Flash-Videos sollte es kein Tearing mehr geben, doch zieht Flash aufgrund eines nicht zeitgemäßen Fehlens einer Hardwareunterstützung derart viel Systemlast, so dass es sich bei hohen Auflösungen sehr schnell verschluckt und seine Bildausgabefrequenz nicht mehr halten kann. So kann man bei Flash-Videos in fullHD noch froh über Tearing sein, denn im schlimmsten Fall verkommt ein solcher Film dann schon mal zur Diashow.

Also viel Glück beim Probieren und Optimieren. Und wenn es nicht klappen sollte, tröstet Euch, ich denke, in 5 Jahren ist das alles kein Problem mehr. Dann sind die Sachen noch mehr aufeinander abgestimmt und die Hardware noch ein bisschen flotter und Flash vielleicht endlich weg vom Fenster.

Bis demnächst..

Bugs