在X11下有几种可以显示图像的方式。 到底哪个能工作很大程序上依赖于硬件。首先,下边描述的每一种方法在不同的硬件上都会有不同的品质。 其次,在X11里的图像显示近来引起普遍的关注, 随着 Xorg 或 XFree86 的每一个版本,都会有很大的突破。
常见图像接口列表:
X11: 一般性的使用共享内存的X11输出。
XVideo: 一种X11接口扩展,支持任何X11图像的可拖拉。
SDL: 简单直接媒体层。
DGA: 直接图片存取。
SVGAlib: 低层次掌控图片层。
xv
xv表示XVideo,xv视频输出选项是我们可能碰到的最主要的硬件加速类型,许多媒体播放器也将它设为默认的视频输出选项。xv使用X的XVideo扩展来作为硬件加速,因此它需要较新的XFree86,同时也需要相关的显卡驱动支持。我们一般可以使用xvinfo指令来查看你的显卡是否支持xv输出:
$ xvinfo
X-Video Extension version 2.2 screen #0
Adaptor #0: "Intel(R) 830M/845G/852GM/855GM/865G Video Overlay"
number of ports: 1
port base: 56
operations supported: PutImage
…
如果你无法看到类似的大量的输出信息,则意味着系统当前不支持xv选项,必须配置X下的XVideo选项或下载特定的显卡驱动。
xv模式不仅提供视频的硬件加速,还提供视频的缩放(scaling)、视频亮度(brightness)及对比度(contrast)的调整,因此,你在调整视频显示时并不会给CPU提供额外的负担。
SDL
SDL 表示Simple Directmedia Layer,简单的直接媒体层。这个SDL提供了一个统一的视频和音频接口,一般的电脑游戏经常辉调用这个接口,因为这个接口使得程序在不知道视频设备的情况下,通过这个接口来访问底层的视频设备。一个程序可以将视频输出到SDL,然后由SDL负责将这些视频输出交送到它所知道的视频设备驱动。不过SDL 的一个不足的地方是它采用的是软件处理,因此建议在选择这一视频输出之前优先尝试xv选项。而对于视频播放器来讲,相比较其它视频输出选项,SDL可以提供一个更稳定、更正确、更持久的视频输出。因此,当其它视频输出选项出现问题时,不妨尝试一下SDL。
DGA
DGA 表示Direct Graphics Access,直接图形访问。它允许程序跳过X服务器直接写入framebuffer内存区。DGA选项使得程序不会占用很多的CPU时间,也可以输出全屏的视频画面,但不足的是,它却只能输出全屏的视频画面。另外,尽管DGA占用的CPU时间不多,但它却并不是硬件驱动模式。一般情况下,可以在选择 X11模式前优先选择这一模式,因为它能够提供全屏输出,而X11无法完成这一任务。
在使用这一模式前,必须在你的X服务器中激活DGA扩展,同时,你必须具备root权限。
$ grep DGA /var/log/Xorg.0.log
(II) Loading extension XFree86-DGA
以上的输出表示DGA扩展已经存在。
SVGA选项
这个选项使得媒体播放器可以在一个命令行控制台来播放视频,完全不需要X的支持。使用这一视频输出选项的前提是系统已经安装了svgalib相关的库。尽管它采用的同样是软件处理,但却给一些老旧的显示设备或者一些不支持framebuffer的显卡提供了一个额外的输出选项。同样,它要求用户具备root 权限。
Framebuffer选项
这一选项和SVGA选项十分类似,它同样允许用户在一个命令行控制台来播放视频,同样和SVGA相类似的是,它支持绝大多数的显卡,因此你几乎不必考虑硬件支持的问题,当然,前提是你的内核必须支持framebuffer(fbdev)。
VESA选项
这一选项和SVGA以及Framebuffer相类似,同样允许用户在脱离X的情况下在命令行终端来播放视频。VESA相较于Framebuffer的一个优点是,它并不要求你在内核中激活某些图形相关的支持选项,你需要的只是一个兼容VESA的BIOS。和其它输出到命令行控制台的选项相类似,VESA采用的是软件处理,而且要求用户具有root 权限。