当前位置: 主页 > 应用视频 > 本地视频播放 > 硬件加速DXVA原理及低端设备流畅播放HDTV方法

硬件加速DXVA原理及低端设备流畅播放HDTV方法

2009-03-30   www.av110.net / 整理 点击: 标签:HDTV 硬件加速 DXVA
  

  DXVA是视频硬件加速的统称,不仅仅是视频数据解码(包括H261,MPEG1,MPEG2,H263,MPEG4), 还有Alpha blending, Picture resampling等。但对于播放时CPU利用率影响最大的,则是视频解码,尤其是HDTV的解码。对于低端系统来说,让GPU来负责硬件解码是不二之选。但使用硬件解码,在整个功能上也受到很多限制,尤其是解压以后的视频数据的后期处理(如deinterlace,锐化,去马赛克). 因此对于追求画质的烧友,宁可放弃硬件解码,当然代价是需要升级整个系统。

一、硬件解码过程

  硬件解码生效的时候,系统是怎么运转的呢?现在我们有两个处理器,CPU和GPU。他们通过PCI/AGP/PCIE总线交换数据。
  1.CPU从文件系统里读出原始数据(DirectSHow的源滤镜),分离出压缩的视频数据(分离器)。放在系统内存中。 GPU 发呆
  2.CPU把压缩视频数据交给GPU, 这时总线上开始忙了,压缩数据从系统内存拷贝到显卡上的显存里。
  3.CPU要求 GPU开始硬件解码,现在 CPU进入发呆期,GPU开始忙。当然CPU会定期查询一下GPU忙的怎么样了。
  4.GPU开始用自己的电路解码视频数据(已经在显存里了),解压后的数据还是放在显存里面。CPU继续发呆。
  5.视频数据刚解码完成以后还不能立刻拿去显示,因为还需要后期处理,如deinterlace,3:2pulldown,等等。GPU再用自己的后期处理电路来进行处理。CPU还是发呆
  6.后期处理以后的未压缩数据拿去显示到屏幕上, GPU再开始忙视频的缩放,亮度,gamma等事情。CPU还是闲
  7.GPU终于忙完了,下面的视频数据在哪里?通知CPU,GPU先歇会。 CPU又开始忙了,回到第1步。

  上面可以看到,硬件解码生效的时候,CPU真的可以很闲,但是为了让它生效,有些条件必须满足。最关键的原因是,与CPu->系统内存和GPU->显卡显存比起来,PCI、AGP、PCIE总线是龟速。PCI是133MB/S, AGP8X是2.1GB/S, PCIE16X是4GB/S, 而CPU-系统内存,GPU-显存则快若干倍。有兴趣的可以把不同时代的内存总线和AGP/PCIE总线速度进行一下对比。因为CPU和GPU互连的总线很慢,因此,视频数据(无论是解压前还是解压后)一旦交给GPU,GPU就要负责把它处理完,直到最终显示。
  如果在前面1-5步里有哪一步GPU不能做或你不让它做,视频硬件解码就不生效,CPU要负责。
  当然,你可能会问,也许CPU很慢,说不定在龟速总线上传输数据,GPU分担一部分工作,还是比全部CPU做要快呢? 也许如此,但在Directshow架构里,代表视频数据处理各环节的滤镜(分离器,解码器,后期处理,渲染器)需要协商出一个大家都接受的视频数据存储方式,如果某个滤镜说我只能在系统内存里玩,大家都得要在内存里玩,GPU和显存只好放弃。

二、硬件解码失败的原因

  了解了这样的步骤,我们看什么时候硬件解码会失败。

  1. GPU自己没办法独立搞定解码,比如太老的显卡,显存太少,或者象GF2MX,GF4TI这种太监(MC和IDCT只支持一个)。注:这里有错误!!!

  2. GPU的视频后期处理太差劲,你要找其他软件来做,这个对于发烧友是很常见的情况,比如放DVD加ffdshow锐化倍线。ffdshow只能在系统内存里工作,它没办法把手伸到显卡显存上,那么硬件解码只好让位给软件解码。

  3. 非常常见的一个情况,就是用vobsub加字幕。vobsub滤镜是加在解码器之后,渲染器之前的。它怎么把字幕放到图像上去? 原始图像进来,它修改原始图像,把字幕的图案画上去,再送给后面的渲染器(或者别的后期处理滤镜)。 vobsub同样只能在系统内存里工作,ok, 解码也要软件了。

  vobsub不能用,那字幕要怎么加?所幸渲染器提供了混合模式,就是把几种视频数据揉在一起,这些数据可以是在系统内存中(软件解码或软件生成),也可以是在显卡显存中(硬件解码)。最大的好处是各种视频数据可以独立生成,不会互相牵制。可以硬件解压的用硬件解压,可以软件生存的用软件生存。(类似电路里串联和并联的关系)、 哪些软件呢?比如MPC, KMP, BSPlayer, 他们自带字幕引擎。而ZoomPlayer借助于vobsub生成字幕。只能用软解压。

  Media Player Classic(MPC),不要把它和暴风影音等套件混起来。MPC是一个播放器内带了一些滤镜和字幕工具,全部是Gabest这个牛人开发的Opensource软件,暴风里除了MPC以外还有一堆其他公司的滤镜,包括vobsub, 理论上可能有版权问题。vobsub虽然也是gabest开发的,但它显示字幕的工作方式和MPC里的不同。vobsub在视频数据交给渲染器之前插入字幕, MPC把视频数据和字幕分开,一起交给渲染器。 如果套件里包涵vobsub, 建议删除之,我不确定禁用vobsub的效果如何。【alban911确认,禁用vobsub没有问题】

  KMP也是一个较常用的播放器,值得主要的是,除了自带字幕引擎以外,它内部自带了一个视频后期处理引擎,如果选画质模式等,这个引擎会生效。同样道理,这个引擎只能在系统内存里玩,那么硬件解码只能放弃。必须要选择极速/高速模式,禁用这个引擎,或者在系统选项里明确禁用此引擎,才能允许硬件解码工作。

顶一下
(2)
100%
踩一下
(0)
0%
精彩推荐