前天(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 |
|
来自: dwlinux_gs > 《视频硬解》