我遇到了这个问题,似乎困扰着许多使用专有 Nvidia 驱动程序的人:
视频撕裂:当视频中有大量平移或动作时,会出现细小的水平线(通常位于显示屏的顶部附近)。
(注意:切换回默认的 nouveau 驱动程序不是一个选项,因为它看似不存在的电源管理会使我的电池消耗速度快几倍)
我试过 Totem、Parole 和 VLC,都出现了撕裂。最好的效果是X11 output
在 VLC 中使用,但相对适度的操作仍然会出现撕裂。
硬件: MacBook Air 3,2——配备 Nvidia GeForce 320M。
有两种常见方法可解决 Nvidia prop 驱动程序撕裂问题:
关闭合成因为 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配置文件:http://paste.ubuntu.com/992056/
观察到的撕裂示例::
答案1
有一件事要尝试可能工作。打开 nvidia-settings 并转到 powermizer 部分。在下拉菜单中选择“最大性能”,您应该会看到 powermizer 级别跳转到最快速度。
完成后,尝试观看视频。
过去,我发现当 nvidia 卡处于最慢的 powermizer 设置时,vsync 不起作用。
答案2
如果您使用双显示器,除非两个显示器使用完全相同的刷新率,否则 nvidia 驱动程序只能同步到其中一个显示器的 vblank。我的意思是确切地。除非两台显示器是完全相同的类型,否则这实际上是不可能的。如果 nvidia 驱动程序同步到错误的显示器(例如,当您想在外部电视上观看电影时同步到内置显示器),您可以覆盖它的选择。来自 nvidia 驱动程序文档:
当将 __GL_SYNC_TO_VBLANK 与 TwinView 结合使用时,OpenGL 只能同步到其中一个显示设备;这可能会导致 OpenGL 未同步到的显示设备上出现撕裂损坏。您可以使用环境变量 __GL_SYNC_DISPLAY_DEVICE 来指定 OpenGL 应同步到哪个显示设备。您应该将此环境变量设置为显示设备的名称;例如“CRT-1”。在您的 X 日志文件中查找行“已连接的显示设备:”以获取现有显示设备及其名称的列表。
我已在 /etc/environment 中永久设置了它 - 只需在新行中添加类似这样的内容:
__GL_SYNC_DISPLAY_DEVICE="DFP-0"
答案3
我的 Intel Sandy Bridge 处理器也出现了视频撕裂的情况。这个方法对我有用。我在“/etc/environment”中输入了以下几行 -
CLUTTER_PAINT=禁用剪切重绘:禁用剔除
CLUTTER_VBLANK=True
并且成功了。最后按回车键并复制粘贴这些行。可能需要重新启动。试试看。
答案4
这对我使用的 ATI radeon 驱动程序有效,因此它可能对您也有效:
添加配置文件(例如 /etc/X11/xorg.conf.d/20-nouveau.conf)
包括以下内容:
Section "Device"
Option "EXAVsync" "True"
Option "GLXVBlank" "True"
Identifier "Nvidia card"
Driver "nouveau"
EndSection
EXA 是用于合成视频的框架;默认情况下它似乎不支持 vsnc。
尝试使用不同的软件(例如 vlc)来播放视频也可能是值得的。