问题描述
我有这个问题似乎困扰许多人使用专有的Nvidia驱动程序:
Video tearing: fine horizontal lines (usually near the top of my display) when there is a lot of panning or action in the video.
(注意:切换回默认的nouveau驱动程序不是一个选项,因为它看似不存在的power-management使我的电池快速耗电几倍)
我尝试过Totem,Parole和VLC,并且所有这些都发生了撕裂。最好的结果是在VLC中使用X11 output
,但仍有相对温和的动作撕裂。
硬件:MacBook Air 3,2 – 配备Nvidia GeForce 320M。
使用Nvidia道具驱动程序有两种常见的修复方法:
-
关闭合成,因为Nvidia专有的驱动程序通常不适合在Linux上使用合成窗口管理器(Compiz是我所知道的一个例外)。但是我使用了一个非常轻量级的窗口管理器(Awesome窗口管理器),它甚至不能合成(或任何很酷的效果)。我在Xfce中也有这个问题,我禁用了合成。
-
启用与VBlank的同步。为了实现这一点,我在
nvidia-settings
中设置了选项,然后使用我的其他自动启动程序将其自动启动为nvidia-settings -l
。这似乎有效,因为当我运行glxgears
时,我得到:$ glxgears Running synchronized to the vertical refresh. The framerate should be approximately the same as the monitor refresh rate. 303 frames in 5.0 seconds = 60.500 FPS 300 frames in 5.0 seconds = 59.992 FPS
当我使用
nvidia-settings
检查刷新率时:$ nvidia-settings -q RefreshRate Attribute 'RefreshRate' (wampum:0.0; display device: DFP-2): 60.00 Hz.
所有这些都表明启用了与VBlank的同步。据我了解,这正是为了防止撕裂,许多人的问题甚至得到像
glxgears
这样的东西来输出正确的信息。我不明白为什么它不适合我。
xorg.conf:http://paste.ubuntu.com/992056/
观察撕裂的例子::
最佳解决方法
尝试一件事可能有用。打开nvidia-settings并转到powermizer部分。在drop-down中选择”Maximum Performance”,您应该看到您的powermizer级别跳转到最快速度。
完成后,请尝试视频。
在过去,我发现当nvidia卡处于最慢的powermizer设置时,vsync不起作用。
次佳解决方法
如果您使用双显示器,则nvidia驱动程序只能同步到其中一个显示器的vblank,除非它们使用完全相同的刷新率。而且我的意思是确切的。除非两个监视器完全相同,否则这实际上是不可能的。如果nvidia驱动程序正在同步到错误的显示器(例如,当您想要在外部电视上观看电影时同步到内置显示器),您可以覆盖它的选择。从nvidia驱动程序文档:
When using __GL_SYNC_TO_VBLANK with TwinView, OpenGL can only sync to one of the display devices; this may cause tearing corruption on the display device to which OpenGL is not syncing. You can use the environment variable __GL_SYNC_DISPLAY_DEVICE to specify to which display device OpenGL should sync. You should set this environment variable to the name of a display device; for example “CRT-1”. Look for the line “Connected display device(s):” in your X log file for a list of the display devices present and their names.
我已经在/etc /environment中永久设置了这个 – 只需在新行上添加这样的内容:
__GL_SYNC_DISPLAY_DEVICE="DFP-0"
第三种解决方法
我的英特尔沙桥处理器也遭受了视频撕裂的困扰。这对我有用。我把以下几行放在”/etc/environment”中 –
CLUTTER_PAINT = disable-clipped-redraws:disable-culling CLUTTER_VBLANK = True
它起作用了。最后按Enter键并复制粘贴这些行。可能需要重启。试试吧。
第四种方法
以下是我使用NVIDIA GeForce G102M在华硕K50IN笔记本上解决视频vsync问题的方法。我知道你的里程可能因牌不同而有所不同,但你可以尝试一下……我的诀窍是使用准系统MPlayer(但不是MPlayer2!)。它不适用于任何其他玩家。
-
在ccsm中执行通常的compiz魔术
-
在“复合”下,“关闭检测刷新率”并手动输入显示器的当前值。
-
我打开了“复制到纹理”,不知道是否有帮助。
-
在OpenGL:Tex。过滤器 – 最佳
-
与VBlank同步已开启
-
Unity插件:(不确定这是否有帮助,但据称可以提高速度)Panel Opacity – 1.0000,同样适用于Launcher Opacity。短划线模糊 – 静态
-
-
做通常的nvidia-settings魔术:
-
在XVideo和OpenGL设置下启用与VBlank的同步
-
在OpenGL设置下将图像设置设置为高质量
-
在“显示配置”下,手动设置分辨率,然后将刷新率从“自动”设置为当前刷新率。
-
-
安装mplayer和vdpau(不是mplayer2 !!!这是新的和实验性的,对我来说,至少对于VDPAU而言是滞后的)
-
包:mplayer libvdpau1 vdpau-va-driver
-
-
设置MPlayer(我也尝试了gnome-mplayer,但是它和我尝试的结果不一样)
-
打开文件〜/.mplayer /config或创建它,如果你没有它。您可能还必须创建文件夹.mplayer。它应该包含这个:
-
[default] ao=pulse vo=vdpau
如果删除了脉冲音频,请将ao更改为alsa。
通过再次注销/重新启动来重新启动X.
YMMV一如既往地尝试一下。我发现,特别是在non-LTS版本或beta驱动程序中,根据视频的编解码器,这可能不再起作用。