解碼器,分離器以及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)時也代表著硬件加速已經被開啟。