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

Cha*_*Suh 35 nvidia tearing macbook

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

视频撕裂:当视频中有大量平移或动作时,细水平线(通常在显示器顶部附近)。

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

我已经尝试过 Totem、Parole 和 VLC,并且所有这些都发生了撕裂。最好的结果是X11 output在 VLC 中使用,但仍然有撕裂,动作相对温和。

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

使用 Nvidia 道具驱动程序撕裂有两种常见的修复方法:

  1. 关闭 compositing,因为 Nvidia 专有驱动程序通常不适合在 Linux 上使用合成窗口管理器(我知道 Compiz 是一个例外)。但是我使用了一个非常轻量级的窗口管理器(很棒的窗口管理器),它甚至不能合成(或任何很酷的效果)。我在 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
    
    Run Code Online (Sandbox Code Playgroud)

    当我使用nvidia-settings以下方法检查刷新率时:

    $ nvidia-settings -q RefreshRate
    Attribute 'RefreshRate' (wampum:0.0; display device: DFP-2): 60.00 Hz.
    
    Run Code Online (Sandbox Code Playgroud)

    所有这些都表明同步到 VBlank启用。据我了解,这正是为了停止撕裂而设计的,很多人的问题甚至是glxgears输出正确的信息。我不明白为什么它对我不起作用。

xorg.confhttp : //paste.ubuntu.com/992056/

观察到的撕裂示例::视频撕裂

小智 18

尝试一件事可能会奏效。打开 nvidia-settings 并转到 powermizer 部分。在下拉菜单中选择“Maximum Performance”,您应该会看到您的 powermizer 级别跳转到最快的速度。

完成后,请尝试视频。

过去,我发现当 nvidia 卡处于最慢的 powermizer 设置时,vsync 不起作用。


Ali*_*ton 11

如果您使用双显示器,则 nvidia 驱动程序只能同步到其中一台显示器的 vblank,除非它们使用完全相同的刷新率。而我的意思完全相同。除非两台显示器的类型完全相同,否则这实际上是不可能的。如果 nvidia 驱动程序同步到错误的显示器(例如,当您想在外部电视上观看电影时同步到内置显示器),您可以覆盖它的选择。从 nvidia 驱动程序文档:

在 TwinView 中使用 __GL_SYNC_TO_VBLANK 时,OpenGL 只能同步到其中一个显示设备;这可能会导致 OpenGL 未同步到的显示设备上的撕裂损坏。您可以使用环境变量 __GL_SYNC_DISPLAY_DEVICE 来指定 OpenGL 应该同步到哪个显示设备。您应该将此环境变量设置为显示设备的名称;例如“CRT-1”。在您的 X 日志文件中查找“已连接的显示设备:”行,以获取存在的显示设备及其名称的列表。

我已经在 /etc/environment 中永久设置了它 - 只需在新行中添加类似的内容:

__GL_SYNC_DISPLAY_DEVICE="DFP-0"


BRK*_*ays 7

我的英特尔 Sandy Bridge 处理器也出现视频撕裂的问题。这对我有用。我将以下几行放在“/etc/environment”中 -

CLUTTER_PAINT=disable-clipped-redraws:disable-culling
CLUTTER_VBLANK=True

它奏效了。最后按回车键并复制粘贴这些行。它可能需要重新启动。尝试一下。

  • 感谢您的建议,但这些是 Gnome3 环境变量(例如 Gnome Shell 使用的)。我使用了一个非常小的窗口管理器,所以这不适用于我。此外,我没有 Sandy Bridge 处理器。 (2认同)

小智 1

这对我在 ATI radeon 驱动程序上有用,所以它可能对你有用:

添加配置文件(例如案例/etc/X11/xorg.conf.d/20-nouveau.conf)

包括这个:

Section "Device"
    Option      "EXAVsync"  "True"
    Option      "GLXVBlank" "True"
    Identifier  "Nvidia card"
    Driver      "nouveau"
EndSection
Run Code Online (Sandbox Code Playgroud)

EXA是合成视频的框架;默认情况下似乎没有 vsnc。

尝试不同的软件(例如 vlc)来播放视频可能也值得。