查看: 8297|回覆: 1
收起左側

關於硬體加速的工作原理

[複製連結]

發表於 2006-1-19 14:47:25 | 顯示全部樓層 |閱讀模式

馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。

您需要 登錄 才可以下載或查看,沒有賬號?註冊

x
<font face='Tahoma'>硬體加速播放的工作原理

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也是一個較常用的播放器,值得主要的是,除了自帶字幕引擎以外,它內部自帶了一個視頻後期處理引擎,如果選畫質模式等,這個引擎會生效。同樣道理,這個引擎只能在系統記憶體裏玩,那麼硬體解碼只能放棄。必須要選擇極速/高速模式,禁用這個引擎,或者在系統選項裏明確禁用此引擎,才能允許硬體解碼工作。
最後回到主題,低端系統要放HDTV流暢,多半需要借助於顯卡硬體解壓。幾個注意事項
  1. 視頻格式要mpeg2,顯卡GPU才能協助解壓 (WMV目前沒有硬體解壓方案)。【注:2005年5月微軟終於放出了WMV硬體解碼補丁,但對顯卡和系統要求頗高,且不少中低端系統上效果不明顯甚至更差】
  2。顯卡及驅動要支援mpeg2硬體解壓。
  3。視頻解碼器要能把mpeg2解壓工作分擔給顯卡
  4。視頻渲染器要用overlay,不要用VMR
  5. 字幕要用播放器自帶的,絕對不能用vobsub。 不用字幕最好啦。
  6. 不能用ffdshow, nvvpp等軟體視頻後期處理,要用顯卡裏自帶的後期視頻處理(雖然可能爛了點)。
  7。KMP必須用極速、高速模式
  8。硬體方面,最好不要用多頭顯示(overlay對多頭顯示支援不好,VMR支援好但開銷大)。如果需要多頭顯示,再加上很多人依賴的字幕,你可能被迫使用軟解壓或VMR,一個相關案例在此
http://www.silu.info/read.php?tid=20851
  9. 硬體方面,PCI顯卡因為是諸多設備共用PCI匯流排,帶寬也只有133MB/S,盡可能不要用(雖然壓縮視頻資料流程一般也就是10-20MbpS). AGP是獨享且至少是266MB/S(AGP1X),但有可能的話還是應該優化一下,比如打開FastWrite, SideBandAddessing什麼的,只要系統穩定。PCIE? 低端系統會有PCIE嗎?
  如果你不確定現有的配置是否能夠使用硬體解碼,建議在調整的時候使用NVIDIA decoder, 它可以明確指示是否工作於硬體解碼方式下。調整好了,你可以再改回你喜歡的硬體解碼器,如sonic, cyberlink等。
  還有一點很重要的,就是強烈不建議用大雜燴似的解碼器包比如暴風影音等,裏面很多的濾鏡會把directshow架構弄得非常複雜,如果你不確定某個濾鏡的作用而安裝了,可能會嚴重干擾你的系統。建議重新安裝windows系統,然後只安裝你需要的播放器和濾鏡。

關於DXVA 硬體加速解碼的框圖,從DXVA 官方文檔裏摘出來。
我的理解:
Host指的是CPU和作業系統,Accelerators是顯卡GPU。
二者通過PCI�AGP�PCIE匯流排交換資料。
關於DXVA 硬體加速解碼的框圖,從DXVA 官方文檔裏摘出來。
我的理解:
Host指的是CPU和作業系統,Accelerators是顯卡GPU。
二者通過PCI�AGP�PCIE匯流排交換資料。
CPU把壓縮視頻資料(讀檔->分離器)通過匯流排送到顯卡裏的顯存video data buffer。這部分顯存是不顯示在螢幕的。CPU要求GPU去執行解碼,然後GPU就會運用自己的 MC,IDCT電路開始解碼,得到原始(未壓縮)視頻資料。由於視頻資料壓縮演算法用到了很多幀間壓縮技術,如I,B,P幀,因此顯存裏需要保留若干份原始資料,DXVA文檔裏提到至少需要4份,5個以上更好。未壓縮視頻資料的格式可以為YUY2。UYVY, YV12, IYUV, NV12, NV21, IMC1~IMC4等。

這是摘自GPU視頻處理的一幅圖片,介紹的是NV4X的流程,但應該具有普遍意義。
  綠色的部分是由GPU完成的(當然是指硬體加速時候)

  關於DXVA情況的一些介紹,susanstone網友提供。
What is DxVA?   
DVD or HDTV uses video compression technique called MPEG2.
It requires lots of computing power to decode MPEG2 streams to uncompressed video.
Even current fastest CPU does not have enough power to decode full resolution HDTV.
Graphics chips manufacturers integrated some function of the MPEG2 decoding algorithm in their graphics chip to aid decoding of the MPEG2 streams.
But it was proprietary architecture and it was hard to use the function for the developers of outside of the chip company.
So Microsoft Corp. made a common API that MPEG2 decoding programs can make use of the Graphics chips capability of MPEG2 decoding regardless of the graphics chips used. This driver is called DxVA(DirectX Video Acceleration).
Unfortunately not all graphics chips and/or driver combination support DxVA.
At the time of this writing ATI Radeon series and drivers are the graphics chips that support DxVA well.
Using DxVA full resolution (1920x1080) HDTV stream can be decoded 30fps/sec using less than 50% of CPU on P4 1.8GHz.
Graphics : ATI Raden7000, 7200,7500 with DDR video memory or
    ATI Radeon 8500,9000,9500,9700,9800
    nVidia MX420, 440, FX series
DXVA Support: the good news here is that ATI was heavily involved with Microsoft when it formed the DXVA standards for MPEG2 acceleration. The original Radeon supported the full feature set of what would become DxVA even before the standard was finalized. On the NVIDIA side, NVIDIA added a new video processor to their GeForce 4 MX series that is fully DXVA compliant. The GeForce 4 Ti was focoused on 3D gaming and so the silicon went to 3D piplines rather than the video processor the GF4MX had. By the GeForce FX series technology has progressed enough for NVIDIA to put the GeForce 4 MX's video processor into every one of the FX line.


原文:http://www.silu.info/read.php?tid=66370&fpage=2</font id='Tahoma'>

發表於 2006-1-20 06:39:02 | 顯示全部樓層
好文章,
我喜歡有點硬的文章,

筆記組重點提示,
>>>>>>>>>>>>>>>>>>>>>>>>>>
,低端系統要放HDTV流暢,多半需要借助於顯卡硬體解壓。幾個注意事項
  4。視頻渲染器要用overlay,不要用VMR
  5. 字幕要用播放器自帶的,絕對不能用vobsub。 不用字幕最好啦。
  6. 不能用ffdshow, nvvpp等軟體視頻後期處理,要用顯卡裏自帶的後期視頻處理(雖然可能爛了點)。
  7。KMP必須用極速、高速模式
  8。硬體方面,最好不要用多頭顯示(overlay對多頭顯示支援不好,VMR支援好但開銷大)。如果需要多頭顯示,再加上很多人依賴的字幕,你可能被迫使用軟解壓或VMR,
  
Using DxVA full resolution (1920x1080) HDTV stream can be decoded 30fps/sec using less than 50% of CPU on P4 1.8GHz.
Graphics : ATI Raden7000, 7200,7500 with DDR video memory or
    ATI Radeon 8500,9000,9500,9700,9800
    nVidia MX420, 440, FX series
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回文 登入 | 註冊

本版積分規則

熱門推薦

HemmaBio器評ISP Elite 和 PA 8 :「一旦你聽過這聲音,就無法回頭」
HemmaBio器評ISP Elite 和
HemmaBio器評ISP Elite 和 PA 8 :「一旦你聽過這聲音,就無法回
Yamaha rx-v663為什麼每次啟動都有這個螢幕? 請益各位前輩們。 謝謝。
Yamaha rx-v663為什麼每次
一次家中的小朋友不知道碰到什麼..... 導致之後每次開機擴大機的
風暴StormAudio 家庭劇院巡禮 : 來自新加坡頂層公寓的聲音饗宴
風暴StormAudio 家庭劇院
風暴StormAudio 家庭劇院巡禮 : 來自新加坡頂層公寓的聲音饗宴
何止錦上添花!?Zidoo Neo Alpha的最佳Wingman - HD Fury Vrroom V3
何止錦上添花!?Zidoo Ne
何止錦上添花!?Zidoo Neo Alpha的最佳Wingman - HD Fury 8K VR
風暴StormAudio/Goldmund家庭劇院巡禮 "KazCorporation:為音樂愛好者實現家庭劇院夢想"
風暴StormAudio/Goldmund
風暴StormAudio/Goldmund家庭劇院巡禮"KazCorporation:為音樂愛

聯絡我們| 問題反映| 小黑屋| 手機版| Archiver|  本網站特別聘請 蔡家豪律師 為本站法律顧問

快速回覆 返回頂部 返回列表