解码器,分离器以及DXVA的概念
我们介绍一下解码器,分离器以及DXVA的概念
解码器的功能就是对视频或者音频进行解压缩。我们知道不论是原始的视频或者是原始的音频,数据都是十分惊人和庞大的,所以我们要用编码器对其进行压缩,这样才有利于传输和存储。在播放时我们就要需要还原成画面或者声音,这就需要解压,也就是解码。其中视频解码器比较复杂:
视频压缩技术就像我们之前所说有很多种,每一种里又有不少官方的,第三方的解码器,各种解码器功能,画面,速度都有差异,不过一般分为两种解码器:硬件解码器和软件解码器。
硬件解码器就是利用解码器所带的驱动接口和硬件本身连接上,利用硬件所带的功能对视频进行解码,这样可以降低对CPU的负荷,从而实现流畅播放以及提升CPU多任务的能力。
软件解码器就是除了硬件解码器之外的所有解码器,其最大特征就是利用CPU通用处理的功能,对其进行软件解码。软件解码虽然耗费CPU,但是可以修改,升级,在CPU资源充足的情况下是最好的选择。
分离器的功能就是把封装在一起的视频以及音频还原出来。之前我们谈过有不少的封装,每一种封装必须对应一种分离器,才能正确的把视频和音频分离出来以供解码器解码。
分离器也有很多种,一般情况下非标准的封装格式在正规的播放器里都没有相应的分离器,比如MKV。而分离器比较出名的有月光分离器,haali等。
DXVA(也称DirectX VA)全称就是DirectX Video Acceleration(硬件视频加速接口)。
DXVA是一个由微软和图形芯片厂商联合定义的一个硬件接口规范。如果一种显卡芯片在硬件上支持DXVA规范,并不代表它就实现了DXVA里面定义的所有功能。不过有一点可以肯定的是:对于DXVA定义的每一项功能,符合DXVA规范的显示芯片驱动程序一定会告诉系统,这项功能在它的硬件里实现了还是没有实现——这是DXVA规范强制性要求的。这样做的好处是应用程序不需要自己花费时间和精力去测试显卡有没有实现某项功能。
同样的,如果一种解码器支持DXVA规范,也不代表它就能利用DXVA规范里面所有的功能组合,它可以选择自己有能力支持的,或者想要支持的那些功能的组合,而其他功能组合也许就放弃了。
此外,如果某种显示芯片虽然通过驱动表示支持某种功能,但解码器认为该芯片对这个功能的支持是不稳定的,容易导致系统崩溃或错误,那么解码器也可以放弃使用该芯片的这种功能。
按照DXVA规范,硬件解码加速有3种级别
1、MC加速(运动补偿,也就前文提到Pixel Prediction)
2、IDCT加速(前文提到的Frequency Transform) + MC加速
3、VLD加速(前文提到的熵解码) + IDCT加速 + MC加速+(deblocking fliter环内解块滤波)
除了比较老的显卡(例如Geforce3)才支持MC加速之外,现在GF6/7,X1000系列第二级,而GF 8600/8500支持H.264第三级加速,以及HD2000系列支持VC-1/H.264第三级加速,当然,这也需要解码器支持才能被调用。
当播放器或者解码器显示DXVA(也称DirectX VA)时也代表着硬件加速已经被开启。