当前位置: 首页>>技术教程>>正文


如何停止视频撕裂? (Nvidia道具司机,非合成窗口管理员)

, , ,

问题描述

我有这个问题似乎困扰许多人使用专有的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道具驱动程序有两种常见的修复方法:

  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.conf:http://paste.ubuntu.com/992056/

观察撕裂的例子::

nvidia,macbook,tearing,ubuntu

最佳解决方法

尝试一件事可能有用。打开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!)。它不适用于任何其他玩家。

  1. 在ccsm中执行通常的compiz魔术

    • 在“复合”下,“关闭检测刷新率”并手动输入显示器的当前值。

    • 我打开了“复制到纹理”,不知道是否有帮助。

    • 在OpenGL:Tex。过滤器 – 最佳

    • 与VBlank同步已开启

    • Unity插件:(不确定这是否有帮助,但据称可以提高速度)Panel Opacity – 1.0000,同样适用于Launcher Opacity。短划线模糊 – 静态

  2. 做通常的nvidia-settings魔术:

    • 在XVideo和OpenGL设置下启用与VBlank的同步

    • 在OpenGL设置下将图像设置设置为高质量

    • 在“显示配置”下,手动设置分辨率,然后将刷新率从“自动”设置为当前刷新率。

  3. 安装mplayer和vdpau(不是mplayer2 !!!这是新的和实验性的,对我来说,至少对于VDPAU而言是滞后的)

    • 包:mplayer libvdpau1 vdpau-va-driver

  4. 设置MPlayer(我也尝试了gnome-mplayer,但是它和我尝试的结果不一样)

    • 打开文件〜/.mplayer /config或创建它,如果你没有它。您可能还必须创建文件夹.mplayer。它应该包含这个:

[default] ao=pulse vo=vdpau 

如果删除了脉冲音频,请将ao更改为alsa。

通过再次注销/重新启动来重新启动X.

YMMV一如既往地尝试一下。我发现,特别是在non-LTS版本或beta驱动程序中,根据视频的编解码器,这可能不再起作用。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2106.html,未经允许,请勿转载。