使用 bumblebee 3.0 在 Ubuntu 11.10 上播放 VDPAU 加速视频的混合转储?

使用 bumblebee 3.0 在 Ubuntu 11.10 上播放 VDPAU 加速视频的混合转储?

我正在尝试在已安装并运行 Bumblebee 3.0 的 Ubuntu 11.10 上运行 hybrid-dump 以播放 VDPAU 加速视频。但按照以下 URL 中的说明,我无法让带有 vdpau 的 mplayer 工作:

https://askubuntu.com/a/100812/17702

avilella@magneto:~/hybrid_graphics/hybrid-windump$ git pull
Already up-to-date.
avilella@magneto:~/hybrid_graphics/hybrid-windump$ make clean && make

optirun true
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 metacity --replace &
LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer -vo vdpau file.720p.mkv
#(in the other gnome-terminal tab)
LD_LIBRARY_PATH=/usr/lib/nvidia-current ~/hybrid_graphics/hybrid-windump/windump :8 :0

还尝试过:

LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer -vo vdpau -vc ffh264vdpau file.720p.mkv

我没有从中获得任何视频,只有音频。如果我删除 vdpau 位,我确实可以获得视频和音频,但这样就不需要 windump 了:

LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 mplayer file.720p.mkv

如果我尝试 glxspheres,它运行良好,如下所示:

LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 glxspheres
#(in the other gnome-terminal tab)
LD_LIBRARY_PATH=/usr/lib/nvidia-current ~/hybrid_graphics/hybrid-windump/windump :8 :0

Polygons in scene: 62464
Visual ID of window: 0x27
Context is Direct
OpenGL Renderer: GeForce 310M/PCI/SSE2

现在正在播放视频。按照以下说明,我让它在一定程度上工作了:

编辑/etc/bumblebee/xorg.conf.nvidia并添加:

Section "Screen"
    Identifier "Screen0"
    DefaultDepth 24
    SubSection "Display"
        Depth    24
        Virtual  1280 720
    EndSubSection
EndSection

重新启动bumblebeed

sudo restart bumblebeed

在其中一个终端中,我调用以下mplayer命令:

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib/nvidia-current/vdpau DISPLAY=:8 optirun mplayer -vo vdpau -ao alsa file.720p.mkv

然后在另一个终端中,我调用以下compiz命令windump

LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8  compiz --replace &

~/hybrid-windump/windump :8 :0

问题:我为视频窗口的大小而苦恼。在 1366x768 的屏幕上,我设置了 1280x720 的视频大小,但图像在右侧被截断了大约 200 个像素,留下了相同大小的黑色windump区域。

有任何想法吗?

答案1

这就是我得到的结果vdpau

  1. 编辑/etc/bumblebee/xorg.conf.nvidia

    Section "Screen"
        Identifier "Screen0"
        DefaultDepth 24
        SubSection "Display"
            Depth    24
            Virtual  1920 1080
        EndSubSection
    EndSection
    
  2. 跑步

    LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib/nvidia-current/vdpau DISPLAY=:8 optirun mplayer -vo vdpau file.720p.mkv
    
  3. 跑步

    LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8  compiz --replace &
    
  4. 已下载https://github.com/gebart/hybrid-windumpxorg.conf从中删除,然后进行编译(只需make命令)。

  5. 跑步./windump :8 :0

笔记:您不需要编辑/etc/bumblebee/bumblebee.conf和更改KeepUnusedXServertrue因为我们直接使用 Optirun 运行 MPlayer。

答案2

我发现您使用 Bumblebee 启动的 X 服务器的方法存在一个缺陷(:8)。一旦 Bumblebee 守护进程检测到没有 optirun 客户端,它就会关闭 X 服务器。要使 X 服务器即使optirun已退出仍保持活动状态:

  1. 编辑/etc/bumblebee/bumblebee.conf并设置KeepUnusedXServer=true
  2. 使用重新启动守护进程sudo restart bumblebeed(注意:这将终止任何现有optirun应用程序)
  3. 触发 X 服务器的启动:(optirun true只是true一个立即返回的命令,它可以是任何东西)
  4. 在辅助 X 服务器上运行应用程序。LD_LIBRARY_PATH如果您使用 nvidia 驱动程序,则此部分是必需的:

    LD_LIBRARY_PATH=/usr/lib/nvidia-current DISPLAY=:8 metacity --replace &`
    
  5. 使用以下命令运行 windump:windump :8 :0

注意:我无法使用 gebarts 的 fork 将其与 xorg-edgers/ppa+nouveau 和 nvidia 驱动程序配合使用。使用 nvidia 驱动程序时,我在运行 时遇到了很多撕裂问题glxspheres。如果转储屏幕的分辨率与主显示分辨率不匹配,您可能需要向 中添加额外的模式行/etc/bumblebee/xorg.conf.nvidia。对于 1920x1080,要添加的行如下所示:

Section "Screen"
    Identifier "Screen0"
    DefaultDepth 24
    SubSection "Display"
        Depth    24
        Virtual  1920 1080
    EndSubSection
EndSection

答案3

我很高兴人们喜欢我的解决方案,但我想强调的是,这只是使用 Optimus 进行 VDPAU 的概念验证方法。

gebart 编写 hybrid-windump 的方式严重依赖 CPU,因为所有内容都以一种相当低效的方式从“屏幕”复制到“屏幕”。

是的,您正在使用 VDPAU 进行解码,但是您并没有获得任何 CPU 使用率节省。

还有一个选项可以通过 x 窗口 ID 转储单个窗口。

对于键盘,您需要Option "AutoAddDevices" "true"

您还可以使用 hybrid-windump 使用您选择的 DE 启动整个 VDPAU 就绪桌面会话。

如果您仍想使用它,这里有一些显示结果的视频(取决于 X 配置):

http://www.youtube.com/watch?v=WVBMLdeRoUU

http://www.youtube.com/watch?v=pxziIAPFIFY

答案4

它应该是DISPLAY=:0; metacity --replace &

另外,optirun 明确表示您的显示器为 :0.0,为什么您要尝试在显示器 :8 上启动 metacity?您是否在显示器 :8 上运行了某个程序,而我们在您的帖子中看不到该程序?如果有,请也向我们提供该信息,好吗?

相关内容