web-dev-qa-db-fra.com

Pourquoi la vidéo déchire-t-elle un tel problème sous Linux?

J'utilise de nombreuses variantes de Linux (principalement des dérivés Debian) depuis plus d'une décennie maintenant. Un problème que je n'ai pas vu résolu de manière satisfaisante est le problème de la déchirure horizontale, ou Vsync n'est pas correctement implémenté.

Je dis cela parce que j'utilise 5 distributions différentes sur 4 ordinateurs différents avec différents moniteurs et cartes graphiques Nvidia/AMD/ATI/Intel; à chaque fois, il y a eu un problème de déchirement vidéo avec même un léger mouvement.

C'est un gros problème, d'autant plus que même Windows XP n'a pas ces problèmes sur le matériel moderne. Si quelqu'un veut utiliser Linux pour quoi que ce soit, pourquoi voudraient-ils que des défauts constants apparaissent quand faire quelque chose non CLI?

Je suppose que peu de développeurs connaissent ce problème ou se soucient suffisamment de le résoudre. J'ai essayé à peu près tous les compositeurs, et généralement le mieux qu'ils peuvent faire est de minimiser le problème mais pas de l'éliminer. Cela ne devrait-il pas être aussi simple que de se synchroniser avec le taux de rafraîchissement du moniteur? Y a-t-il des politiques au sein de la communauté OSS qui empêchent quiconque de commettre du code qui corrige cela?

Chaque fois que j'ai demandé de l'aide sur ce problème dans le passé, soit il est traité comme un cas Edge (ce que je trouve difficile de croire, étant donné le nombre de fois où j'ai reproduit le problème), soit j'obtiens des solutions potentielles qui tout au plus minimiser le déchirement.

109
Ravenstine

Tout cela est dû au fait que le serveur X est obsolète, inadapté au matériel graphique d'aujourd'hui et, fondamentalement, toutes les communications directes par carte vidéo se font en tant qu'extension ("patch") sur l'ancien noyau gonflé. Le serveur X ne fournit aucun moyen de synchronisation intégré entre le rendu de la fenêtre par l'utilisateur et l'écran affichant une fenêtre, de sorte que le contenu change au milieu du rendu. C'est l'un des problèmes bien connus du serveur X (il en a beaucoup, le modèle complet de ce que fait le serveur et est obsolète - gestion des événements dans les sous-fenêtres, métadonnées sur les fenêtres, primitives graphiques pour le dessin direct ...). Les kits d'outils de widgets veulent surtout masquer tout cela, mais la déchirure reste un problème car il n'y a pas de mécanisme pour gérer cela. Des problèmes supplémentaires surviennent lorsque vous avez plusieurs cartes qui nécessitent des pilotes différents, et en plus de cela, la bibliothèque opengl a une dépendance câblée sur xlib, vous ne pouvez donc pas vraiment l'utiliser indépendamment sans passer par X.

Wayland, qui tente quelque peu sans enthousiasme de remplacer X, prend en charge une synchronisation vsync pédante dans son cœur et est annoncé pour que chaque image soit parfaitement parfaite.

Si vous googlez rapidement "déchirement vidéo wayland", vous trouverez plus d'informations sur tout.

94
orion

Si vous utilisez un pilote nvidia> = 365,20, essayez d'activer l'option "Forcer la composition complète du pipeline" dans nvidia-settings.

enter image description here

19
FuzzyTree

L'éclatement de l'écran apparaît principalement pour deux raisons - les pilotes qui ne sont pas encore là et le manque de vsync avec certains gestionnaires de fenêtres.

En ce qui concerne les pilotes, les pilotes gratuits et propriétaires prennent en charge le compositing à déchirure libre (nvidia et AMD tous les deux). Sachez que par exemple l'activation du bureau sans déchirure dans le catalyseur (fglrx) peut entraîner une perte de trame et des retards, il est donc généralement désactivé par défaut. Quant au pilote ouvert, vsync doit être activé par défaut. Ainsi, le problème de déchirement d'écran peut être résolu en essayant différents pilotes et en les configurant.

Quant aux gestionnaires de fenêtres, il est connu qu'Openbox, Awesome et d'autres wms légers ne prennent pas en charge les déchirures. XFCE (xfwm, pour être précis) l'a corrigé dans les versions récentes, 4.11/12 ont maintenant Vsync. Les principaux environnements de bureau n'ont également aucun problème avec le déchirement, y compris GNOME, KDE, Unity et Cinnamon.

Si vous rencontrez toujours des problèmes d'écran, votre option est d'essayer un autre gestionnaire de composition comme Compton ou Kwin. Kwin est le gestionnaire de fenêtres pour KDE et j'ai l'expérience de l'utilisation de kwin dans XFCE quand il ne supportait pas vsync et cela fonctionnait très bien.

Donc, la solution ici est l'expérimentation, ce qui est cassé dans une combinaison de pilote/wm peut fonctionner dans une autre. Je crois que la situation s'améliorera bientôt car les pilotes open-source sont de plus en plus avancés et le passage à wayland peut éliminer les anciens problèmes avec Xorg.

17
kirill-a

J'ai eu une forte déchirure ici et maintenant c'est résolu.

Après avoir lu ceci ( merveilleuse explication ) sur le fonctionnement d'un serveur Xorg, je me suis rendu compte que le serveur X peint des mises à jour de fenêtres directement sur la carte mémoire à tout moment au hasard, sauf si vous utilisez un gestionnaire de fenêtres compatible avec la composition.

Lorsque la composition est activée, le gestionnaire de fenêtres regroupe toutes les modifications des différents tampons de mémoire de fenêtre, crée une image résultante pour tout l'écran et la sauvegarde sur la carte d'affichage en une seule fois.

La plupart des distributions modernes ont un gestionnaire de fenêtres de composition. KWin pour KDE, Mutter pour Gnome, Muffin pour Cinnamon, Marco pour Mate, xfwm pour XFCE, etc. Cependant, le compositing peut être désactivé pour économiser des ressources.

Dans mon cas, la composition a été désactivée dans KDE4. Une fois activé, le déchirement a disparu. [~ # ~] edit [~ # ~] : J'ai également eu besoin de changer sur les options KWin la stratégie VSync de Automatic à Réutiliser le contenu de l'écran afin de se débarrasser des déchirures comme expliqué dans ce rapport de bogue spécifique à kwin .

Les options du pilote peuvent également être un facteur. Dans mon cas, les options par défaut fonctionnent bien. Arch Wiki possède une excellente documentation sur les options pour différentes cartes d'affichage telles que cartes Intel ou cartes NVIDIA .

Pour vérifier si une option est activée dans votre configuration xorg actuelle, vous pouvez consulter le journal. Par exemple, pour vérifier si DRI est activé:

cat /var/log/Xorg.0.log | grep DRI
11
David

La solution est ici: Linux Mint 17.3 MATE vient maintenant avec Compton .

Allez simplement à Desktop Settings -> Windows -> Window Manager et choisissez Metacity + Compton. C'est ça.

J'ai une carte vidéo AMD et cela fonctionne hors de la boîte pour le pilote open source.

Pour le pilote AMD propriétaire, lorsque les vidéos HTML5 sont agrandies en plein écran, vous pouvez voir une couleur bleue qui remplira tout l'écran. Pour résoudre ce problème, créez et chmod +x le script ci-dessous:

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

Exécutez-le chaque fois que vous redémarrez le système, mais n'essayez pas de l'ajouter à Startup Applications - cela peut interrompre le démarrage pour une raison quelconque.

2
Constantine

Dans Peppermint Linux, accédez à Préférences> Centre de contrôle Peppermint, sélectionnez Effets de bureau et activez "Activer les effets de bureau" et "Synchroniser le dessin avec le blanc vertical".

0
Stefan Reich

Sous Ubuntu 18.04 avec Mate 1.20.1, je n'ai vu presque aucun problème de vsync sur https://www.vsynctester.com/ après le réglage:

Panneau de configuration> Mate Tweak> Windows> Gestion des fenêtres: Marco (pas de composite)

(AMD Radeon HD 6450)

0
cweiske

J'utilise Linux Mint XFCE et ce problème m'a frustré pendant un bon moment. J'ai trouvé une solution pour mon ordinateur portable avec une carte graphique intégrée Intel et problème de déchirement résol . Pour mon bureau avec une carte NVIDIA, cette astuce ne peut pas fonctionner. Mais je viens de trouver le coupable.

J'ai une amélioration immédiate des performances lorsque j'ai désactivé la composition de fenêtres. Voici comment vous pouvez le faire:

Allez dans Tous les paramètres/Réglages du gestionnaire de fenêtres/Compositeur et désactivez le tout.

Gardez à l'esprit que c'est spécifique à la distribution et que le mien est Mint avec XFCE et je n'ai aucune idée de comment trouver quelque chose de similaire sur d'autres distributions.

0
Dejan Petrovic