分享

Linux MPlayer 开启ATI/AMD显卡硬解加速(个人测试)

 dwlinux_gs 2015-02-11
前天(11月15日),经过本人对Wiki的研究发现,一个叫做libva的东西能帮助我们进行硬解,先解释下什么是libva,这是一个Intel结合社区(所以是开源的)开发的一个用于使得自己的集成显卡能在Linux上开启除了MPEG-2以外的加速而设计的一个API,由于设计的时候分API和后台驱动,结果一位Debian使用者(社区成员之一)觉得后台驱动不一定是仅仅是那Intel的硬解,也可以是NVIDIA的VDPAU或者AMD的 XVBA,VDPAU自去年发布以来,效果还是不错的,XVBA发布了很久却一点用也没。。直到前几天,Phoronix上出了篇文章:
AMD's UVD2-based XvBA Finally Does Something On Linux
Published on November 03, 2009
http://www./scan.php?page=a ... aapi&num=1
这篇文章中给出了这件事情的始末
简短的评论是,由于只支持UVD2,请用检查/var/log/Xorg.0.log,是否存在这样的:
(II) fglrx(0): UVD2 feature is available
(II) fglrx(0): Enable composite support successfully

同时表明这得和fglrx驱动一同使用
根据文章所说,驱动要求是9.10,各位到AMD官网去下吧,上面还提到9.11版驱动可能又会使这个支持broken,让我们等待。理由么,讲具体配置的时候慢慢解释。
首先前往这个站点:
http://www./~gbeauchesne/
下载这几样东西: libva xvba-video mplayer-vaapi
其他东西可以有兴趣再去下- -然后取最近的版本,偶取得就是离本发贴日期最近的那个日子的。。
取到以后libva按照那边写的方式制作软件包,制作完毕以后产品(*.deb等)在和解包出来的那个目录同级地方
安装这些包,然后xvba-video本来就是个包,没提供源码,这大概就是为什么驱动不同支持会不同。。也安装好
到这里,命令行输入vainfo回车,如果如下即可。
$ vainfo
libva: libva version 0.31.0-sds3
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.31
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA API - 0.5.1
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointIDCT
VAProfileMPEG2Main : VAEntrypointIDCT
VAProfileH264High : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
下面就是mplayer-vaapi补丁,里面那个sh脚本并不能完成工作,主要原因是mplayer的SVN变得太快了。。
如果去抓那边提供的mplayer打包,又得用debian的build-dep,又牵涉到libavcodec,libavformat的链接等问题。。总之mplayer的编译我就不罗嗦了,这里讲下用补丁可能出现有一些失败的地方(至少我用11月5日白天的SVN是这样)
处理得方法只有一个:那就是手动看*.rej文件和你的源文件之间的区别在何处,手动补上(主要原因还是上下文有变化,各位自己处理下会看见的),处理完毕,编译,还有错误,检查之后发现是一个地方
for(int i = 0; i < ......)
C语言不允许这样的变量定义,说起来还有好几处都写对的,就这里原作者误了。。修改完了以后一切顺利之后便是使用了
根据xvba-video下载点的说法,现在只支持H264和VC1,刚才vainfo输出的结果更为精细,可参阅。注解:VC1Main和VC1Simple微软称之为WMV3...
好吧 于是乎
$ ~/build/mplayer/mplayer -vo vaapi:gl -va vaapi test.mp4
MPlayer SVN-r29912-11.1 (C) 2000-2009 MPlayer Team

Playing test.mp4.

libavformat file format detected.
[lavf] Video stream found, -vid 0
[lavf] Audio stream found, -aid 1
VIDEO: [H264] 1280x720 24bpp 23.976 fps 2801.3 kbps (342.0 kbyte/s)
Clip info:
major_brand: isom
minor_version: 1
compatible_brands: isomavc1
[vo_vaapi] Using OpenGL rendering
libva: libva version 0.31.0-sds3
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
libva: va_openDriver() returns 0
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
[VD_FFMPEG] VA API accelerated codec.
[VD_FFMPEG] Trying pixfmt=0.
Unsupported PixelFormat -1
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [vaapi] 1280x720 => 1280x720 H.264 VA API Acceleration
[vo_vaapi] Using 1:1 VA surface mapping
[VD_FFMPEG] XVMC-accelerated MPEG-2.
[VD_FFMPEG] XVMC-accelerated MPEG-2.
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
AUDIO: 48000 Hz, 2 ch, s16le, 159.4 kbit/10.38% (ratio: 19926->192000)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
[VD_FFMPEG] XVMC-accelerated MPEG-2.
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [vaapi] 1280x720 => 1280x720 H.264 VA API Acceleration
A: 0.9 V: 0.9 A-V: -0.001 ct: -0.017 0/ 0 20% 27% 1.8% 8 0 92%
===== PAUSE =====
Exiting... (Quit)

一切OK了。。说起来我这块Mobility Radeon HD2400XT在Windows平台上还没实现过720P的硬解。。
图片都是720P的,由于时间不足所以在文末发一链接,各位可到相册去查看真相
虽然VD_FFMPEG写的是XVMC什么的,其实就是还没补丁打完整,文字输出没改。。

然后看看这个:
-vo vaapi command line help:
Example: mplayer -vo vaapi:gl

Options:
dm=0|1|2
Use direct surface mapping (default: 2 - autodetect)
gl
Enable OpenGL rendering
bind
Use VA surface binding instead of copy
reflect
Enable OpenGL reflection effects

其中对于ATI/AMD的卡来说,gl是必须写上的,否则就是一个程序崩溃(只是mplayer被assert掉了而已)
bind选项暂时没发现什么,reflect选项倒是挺有意思的,在屏幕上显示一个倾角立体的效果,出现锯齿请用amdcccle选到3D,把消除混叠修改到wide或者narrow tent,说起来这是使用fglrx驱动的一个常识- -

下面是点评
一、在3D桌面模式下也能正常运行,高分辨率时启动较慢,会增加Xorg的CPU消耗
二、在不开启openGL overlay的情况下,2D桌面模式时如有其它窗口划过视频时会出现一片黑,这是OGL程序的一个普遍问题,也告知下。
三、开启硬解以后CPU消耗降到可以忽略的地步,而且原文也提到,不支持半硬解,半软解
四、H264视频支持很好,VC1视频支持我的A卡本身有问题。。这在Windows下也一样。
五、现在只支持H264和VC1 但是不包括BD RIP! ! !必须强调一下,如果硬是让它去解BD,出现Xorg HANG掉然后需要硬关机本人概不负责。去解非H264/VC1视频只是一个mplayer非正常退出
五、不支持vf,同样也不支持外挂字幕,所有vf都是在默认输入是某种colorspace做下去的- -现在输入不对。。字幕也得vf。。只会到致mplayer初始化失败
六、支持-xy 选项,这个选项是Xv的硬件缩放,没有问题
七、视频驱动初始化阶段根据当前硬件条件、桌面条件不同时间会差距很大,比如在电池节电模式下,COMPIZ启用模式下,千万别因为等了会儿没结果而按下Ctrl+C,这会造成显卡状态无法恢复,Xorg当机
八、我相信AMD和社区会在显卡硬解方面继续努力的,说起来偶在Windows下都没成功的1280X720硬解都成功了。
九、NV用户可自行研究libva和VDPAU的关系,说起来最后大家都被Intel统一了

所有的真相截图在:
http://cid-a401ed2fb1b9e1fc.skydrive./browse.aspx/XVBA

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多