如何停止视频撕裂?(Nvidia prop 驱动程序,非合成窗口管理器)

如何停止视频撕裂?(Nvidia prop 驱动程序,非合成窗口管理器)

我遇到了这个问题,似乎困扰着许多使用专有 Nvidia 驱动程序的人:

视频撕裂:当视频中有大量平移或动作时,会出现细小的水平线(通常位于显示屏的顶部附近)。

(注意:切换回默认的 nouveau 驱动程序不是一个选项,因为它看似不存在的电源管理会使我的电池消耗速度快几倍)

我试过 Totem、Parole 和 VLC,都出现了撕裂。最好的效果是X11 output在 VLC 中使用,但相对适度的操作仍然会出现撕裂。

硬件: MacBook Air 3,2——配备 Nvidia GeForce 320M。

有两种常见方法可解决 Nvidia prop 驱动程序撕裂问题:

  1. 关闭合成因为 Nvidia 专有驱动程序通常与 Linux 上的合成窗口管理器配合不好(我知道 Compiz 是个例外)。但我使用了一个非常轻量级的窗口管理器(Awesome 窗口管理器),它甚至不能合成(或任何酷炫的效果)。我在 Xfce 中也遇到了这个问题,因为我禁用了合成功能。

  2. 启用与 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)来播放视频也可能是值得的。

相关内容