Warum ist das Zerreißen von Videos unter Linux so problematisch?

101

Ich benutze seit über einem Jahrzehnt viele Varianten von Linux (hauptsächlich Debian-Derivate). Ein Problem, das ich nicht zufriedenstellend gelöst habe, ist das Problem des horizontalen Reißens oder der nicht ordnungsgemäßen Implementierung von Vsync.

Ich sage das, weil ich 5 verschiedene Distributionen auf 4 verschiedenen Computern mit verschiedenen Monitoren und Nvidia / AMD / ATI / Intel-Grafikkarten verwendet habe. Jedes Mal gab es ein Problem mit dem Zerreißen von Videos, auch wenn sich diese nur geringfügig bewegten.

Dies ist ein großes Problem, zumal selbst Windows XP diese Probleme auf moderner Hardware nicht hat. Wenn irgendjemand Linux für irgendetwas verwenden möchte, warum sollte er dann wollen, dass konstante Fehler auftauchen, wenn etwas anderes als CLI ausgeführt wird?

Ich vermute, dass entweder nur wenige Entwickler über dieses Problem Bescheid wissen oder sich genug darum kümmern, es zu beheben. Ich habe so gut wie jeden Compositor da draußen ausprobiert, und normalerweise können sie das Problem nur minimieren, aber nicht beseitigen. Sollte es nicht so einfach sein, mit der Bildwiederholfrequenz des Monitors zu synchronisieren? Gibt es in der OSS-Community eine Politik, die verhindert, dass jemand Code schreibt, der dies behebt?

Jedes Mal, wenn ich in der Vergangenheit um Hilfe zu diesem Problem gebeten habe, wird es entweder als Randfall behandelt (was ich schwer zu glauben finde, wenn ich das Problem so oft wiederholt habe) oder ich erhalte mögliche Lösungen dafür Das Aufreißen höchstens minimieren.

Ravenstine
quelle
2
Sie erwähnen nicht, welches DE Sie verwenden. KDE kann seit ungefähr einem Jahr nichts mehr anfangen.
Sparhawk
1
Wie könnte man das Problem leicht wiederholen? Auf einem Debian / Ubuntu / Mint-Computer?
Xen2050
50
Diese XKCD scheint hier einfach so gut zu passen ...
Angew
Meine Erfahrung mit dem Zerreißen war völlig anders. Ich spiele sehr gerne und schaue Filme unter Linux. Steam hat Linux wirklich zu einer tragfähigen Plattform für großartige Spiele gemacht. Ich habe in letzter Zeit Witcher 2 und Talos Principle gespielt und in den letzten 50 Spielstunden keine Risse gesehen. Dies ist mit einer Nvidia-Karte mit proprietären Treibern auf Arch. Ich stimme Xen2050 zu, dass diese Frage nützlicher wäre, wenn genaue Spezifikationen für Ihre Builds angegeben würden. Ich bestreite nicht, dass es ein Problem gibt, ich habe gerade eine sehr gute Erfahrung gemacht.
Labyrinth
Mit Nvidia Compositing löste sich das Problem für mich, als ich 2007 Nvidia verwendete. Allerdings nicht im Vollbildmodus, da die Vollbildfenster den Compositor ausschalten, wird davon ausgegangen, dass Sie ein OpenGL-Spiel ausführen. Haben Sie bei Intel versucht, die Option "TearFree" im Abschnitt "Device" in X auf "true" zu setzen? Es verdoppelt die RAM-Nutzung, aber ich denke, es wird funktionieren.
Zan Lynx

Antworten:

92

Dies ist alles auf die Tatsache zurückzuführen, dass der X-Server veraltet und für die heutige Grafikhardware ungeeignet ist und im Grunde die gesamte direkte Grafikkartenkommunikation als Erweiterung ("Patch") über den alten, aufgeblähten Kern erfolgt. Der X-Server bietet keine integrierte Möglichkeit zur Synchronisierung zwischen dem Rendern des Fensters durch den Benutzer und dem Anzeigen eines Fensters auf dem Bildschirm, sodass sich der Inhalt während des Renderns ändert. Dies ist eines der bekannten Probleme des X-Servers (es gibt viele, das gesamte Modell dessen, was der Server tut, und es ist veraltet - Ereignisbehandlung in Unterfenstern, Metadaten zu Fenstern, grafische Grundelemente für direktes Zeichnen ...). Widget-Toolkits möchten all dies meistens beschönigen, aber das Zerreißen ist immer noch ein Problem, da es keinen Mechanismus gibt, der damit umgeht. Zusätzliche Probleme treten auf, wenn Sie mehrere Karten haben, für die unterschiedliche Treiber erforderlich sind.

Wayland, das ohne großen Enthusiasmus versucht, X zu ersetzen, unterstützt eine pedantische vsync-Synchronisation in seinem Kern und ist bekannt dafür, dass jeder Frame genau perfekt ist.

Wenn Sie schnell "wayland video tearing" googeln, finden Sie weitere Informationen zu allem.

orion
quelle
38
+1für "X ist das Problem, werfen Sie einen Blick auf Wayland." Ganz im Ernst, es ist die richtige Antwort.
HalosGhost
2
@HalosGhost wayland evangelism unterwegs :) noch keine netzwerksitzungsunterstützung?
kagali-san
3
@ kagali-san Ich habe nicht gesagt, dass Wayland perfekt ist (das ist es nicht). Aber es ist definitiv besser als X. :)
HalosGhost
8
@ kagali-san: Weston hat sein RDP-Backend erst vor einem Jahr zusammengeführt, wenn Sie das irgendwie relevant für eine Frage zum Thema Video-Tearing finden.
Grawity
3
@orion: und dank dir ist genau diese Seite jetzt das # 1 Ergebnis für wayland video tearing: P
Tobia Tesan
16

Bildschirmrisse treten hauptsächlich aus zwei Gründen auf: Treiber, die noch nicht vorhanden sind, und mangelnde Vsync-Funktion bei bestimmten Fenstermanagern.

Bei Treibern unterstützen sowohl freie als auch proprietäre Treiber das reißfreie Compositing (nvidia und amd). Beachten Sie, dass z. B. das Aktivieren des reißfreien Desktops in catalyst ( fglrx) zu Bildabweichungen und Verzögerungen führen kann. Daher ist diese Option normalerweise standardmäßig deaktiviert. Was den offenen Treiber betrifft, sollte vsync standardmäßig aktiviert sein. Das Problem mit dem Bildschirmabriss lässt sich möglicherweise lösen, indem Sie verschiedene Treiber ausprobieren und konfigurieren.

Was Fenstermanager angeht, so ist bekannt, dass Openbox, Awesome und andere leichte WMS keine reißfreie Unterstützung bieten. XFCE (um genau zu sein xfwm) hat es in den letzten Releases behoben, 4.11 / 12 haben jetzt Vsync. Wichtige Desktop-Umgebungen haben auch keine Probleme mit dem Zerreißen, einschließlich GNOME, KDE, Unity und Cinnamon.

Wenn der Bildschirm weiterhin reißt, können Sie einen anderen Compositing-Manager wie Compton oder Kwin ausprobieren. Kwin ist der Fenstermanager für KDE und ich habe Erfahrung mit der Verwendung von kwin in XFCE, als es vsync nicht unterstützte und es sehr gut funktionierte.

Die Lösung hier ist also das Experimentieren, was in einer Kombination von Treiber / Wm kaputt ist, kann in einer anderen funktionieren. Ich glaube, die Situation wird sich bald verbessern, da Open-Source-Treiber immer fortgeschrittener werden und der Wechsel zu Wayland alte Probleme mit Xorg loswerden kann.

kirill-a
quelle
5
Nicht wirklich. KDE (mit Kwin oder einem anderen Komponisten) ist bei NVidia oder Intel immer noch in Tränen aufgelöst.
Ivan
1
Openbox etc. arbeiten reißfrei - Sie müssen lediglich einen separaten Compositor ausführen, zB compton funktioniert wunderbar.
Wingedsubmariner
1
@wingedsubmariner, wenn ihr euch auf openbox bezieht, meint ihr damit auch fluxbox?
nass
Sehr hilfreich ist auch, dass Sie den Status von WM in verschiedenen Fensterumgebungen notieren.
nass
@nass Auf jeden Fall. Der Fenstermanager ist niemals ein limitierender Faktor.
Wingedsubmariner
14

Wenn Sie einen nvidia-Treiber> = 365.20 verwenden, aktivieren Sie die Option "Force Full Composition Pipeline" in nvidia-settings.

Bildbeschreibung hier eingeben

FuzzyTree
quelle
NVIDIA Quadro auf einem Lenovo W520, Fedora 25 und dies funktionierte :)
Jerther
4
Wenn Sie keine solche Option haben, klicken Sie auf "Erweiterte Einstellungen" am unteren Rand des Fensters und es wird angezeigt. warum ist diese "vollständige Kompositionspipeline" nicht standardmäßig aktiviert?
Rast
1
@Rast Da es früher einige Leistungsprobleme gab.
Ruslan
Übrigens scheint es, dass zumindest Intel-Treiber auch eine TearFreeOption haben, die Sie in den entsprechenden DeviceAbschnitt einfügen können . Ich habe es gerade ausprobiert und es gibt Ergebnisse, die der Full Composition Pipeline von nvidia sehr ähnlich sind.
Ruslan
Ich kann die Einstellung zum Speichern von Neustarts scheinbar nicht erreichen. Ich habe versucht, eine ~ / .xinitrc-Datei zu erstellen und darin "nvidia-settings --load-config-only & ./etc/X11/xinit/xinitrc" einzutragen schien nicht zu funktionieren
FragmentalStew
9

Ich hatte hier einen starken Riss und jetzt ist er gelöst.

Nachdem ich diese ( wundervolle Erklärung ) zur Funktionsweise eines Xorg-Servers gelesen hatte, stellte ich fest, dass X-Server zu jeder beliebigen Zeit Fensteraktualisierungen direkt auf die Speicherkarte malt, es sei denn, Sie verwenden einen Compositing-fähigen Fenstermanager.

Wenn das Zusammensetzen aktiviert ist, setzt der Fenstermanager alle Änderungen aus den verschiedenen Fensterspeicherpuffern zusammen, erstellt ein Ergebnisbild für den gesamten Bildschirm und speichert es auf einmal auf der Grafikkarte.

Die meisten modernen Distributionen verfügen über einen Compositing Window Manager. KWin für KDE, Mutter für Gnome, Muffin für Cinnamon, Marco für Mate, xfwm für XFCE usw. Das Compositing kann jedoch deaktiviert werden, um Ressourcen zu sparen.

In meinem Fall war Compositing in KDE4 deaktiviert. Sobald es aktiviert war, verschwand das Zerreißen. BEARBEITEN : Ich musste auch bei den KWin-Optionen die VSync-Strategie von Automatisch auf Bildschirminhalt wiederverwenden ändern , um das Zerreißen loszuwerden, wie in diesem kwin-spezifischen Fehlerbericht erläutert .

Die Treiberoptionen können ebenfalls ein Faktor sein. In meinem Fall funktionieren die Standardoptionen in Ordnung. Das Arch Wiki bietet eine hervorragende Dokumentation zu den Optionen für verschiedene Grafikkarten, z. B. Intel-Karten oder NVIDIA-Karten .

Um zu überprüfen, ob eine Option in Ihrer aktuellen xorg-Konfiguration aktiviert ist, können Sie das Protokoll überprüfen. So überprüfen Sie beispielsweise, ob DRI aktiviert ist:

cat /var/log/Xorg.0.log | grep DRI
David
quelle
1
In XFCE (in Xubuntu 16.04) ist das Zusammensetzen standardmäßig aktiviert, das Synchronisieren mit dem vertikalen Leerzeichen jedoch nicht . Verwenden Sie den xfwm4-tweaks-settingsBefehl, um die Tweaker-Anwendung anzuzeigen, und auf der Registerkarte Compositor finden Sie die obige Option. Das Einschalten hat einen großen Unterschied gemacht und kann hier überprüft werden: vsynctester.com/index.html ( Schalten Sie die Funktion ein / aus, während die Animation angezeigt wird ). Es ist nicht perfekt, es gibt einige fehlende Frames, aber viel besser als wenn es ausgeschaltet ist.
Karatedog
1

Die Lösung ist hier: Linux Mint 17.3 MATE wird jetzt mit Compton geliefert .

Gehen Sie einfach zu Desktop Settings-> Windows-> Window Managerund wählen Sie Metacity + Compton. Das ist es.

Ich habe eine AMD-Grafikkarte und sie funktioniert sofort für Open Source-Treiber.

Wenn für proprietäre AMD-Treiber HTML5-Videos auf Vollbild maximiert werden, wird möglicherweise eine blaue Farbe angezeigt, die den gesamten Bildschirm ausfüllt. Um dies zu beheben, erstellen Sie und chmod +xdas Skript unten:

#!/bin/bash
killall compton 2> /dev/null
compton -b --unredir-if-possible

Führen Sie es immer dann aus, wenn Sie das System neu starten, aber versuchen Sie nicht, es hinzuzufügen Startup Applications- es kann aus irgendeinem Grund den Startvorgang unterbrechen.

Konstantin
quelle
0

Gehen Sie in Peppermint Linux zu Preferences> Peppermint Control Center, wählen Sie Desktop Effects und aktivieren Sie "Enable desktop effects" und "Synchronize drawing to the vertical blank".

Stefan Reich
quelle
0

Ich benutze Linux Mint XFCE und dieses Problem hat mich eine ganze Weile frustriert. Ich habe eine Lösung für meinen Laptop mit integrierter Intel-Grafikkarte gefunden und sie hat das Problem des Reißens gelöst . Für meinen Desktop mit NVIDIA-Karte kann dieser Trick nicht funktionieren. Aber ich habe gerade einen Täter gefunden.

Ich habe eine sofortige Leistungssteigerung erfahren, wenn ich die Fenstererstellung deaktiviert habe. Hier ist, wie du das machen kannst:

Gehen Sie zu Alle Einstellungen / Window Manager Tweaks / Compositor und deaktivieren Sie das Ganze.

Denken Sie daran, dass dies distro-spezifisch ist und meiner ist Mint mit XFCE und ich habe keine Ahnung, wie man ähnliche Dinge in anderen Distributionen findet.

Dejan Petrovic
quelle