資源描述:
《硬件加速播放的工作原理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、硬件加速播放的工作原理DXVA是視頻硬件加速的統(tǒng)稱,不僅僅是視頻數(shù)據(jù)解碼(包扌舌H261,MPEG1,MPEG2,H263,MPEG4),還有Alphablending,Pictureresampling等。但對(duì)于播放時(shí)CPU利用率影響最大的,則是視頻解碼,尤其是IIDTV的解碼。對(duì)于低端系統(tǒng)來說,讓GPU來負(fù)責(zé)硬件解碼是不二Z選。但使用硬件解碼,在整個(gè)功能上也受到很多限制,尤其是解壓以后的視頻數(shù)據(jù)的后期處理(如deinterlace,銳化,去馬賽克).因此對(duì)于追求畫質(zhì)的燒友,寧可放棄硬件解碼,當(dāng)然代價(jià)是需要升級(jí)整個(gè)系統(tǒng)。稍后再談。硬件
2、解碼生效的時(shí)候,系統(tǒng)是怎么運(yùn)轉(zhuǎn)的呢?現(xiàn)在我們有兩個(gè)處理器,CPU和GPU。他們通過PCI/AGP/PCIE總線交換數(shù)據(jù)。loCPU從文件系統(tǒng)里讀岀原始數(shù)據(jù)(DirectSHOW的源濾鏡),分離出壓縮的視頻數(shù)據(jù)(分離器)。放在系統(tǒng)內(nèi)存中。GPU發(fā)呆2OCPU把壓縮視頻數(shù)據(jù)交給GPU,這時(shí)總線上開始忙了,壓縮數(shù)據(jù)從系統(tǒng)內(nèi)存拷貝到顯卡上的顯存里。3.CPU要求GPU開始硬件解碼,現(xiàn)在CPU進(jìn)入發(fā)呆期,GPU開始忙。當(dāng)然CPU會(huì)定期查詢一下GPU忙的怎么樣了。4oGPU開始用自C的電路解碼視頻數(shù)據(jù)(已經(jīng)在顯存里了),解壓后的數(shù)據(jù)還是放在顯存里面
3、。CPU繼續(xù)發(fā)呆。5.視頻數(shù)據(jù)剛解碼完成以后還不能立刻拿去顯示,因?yàn)檫€需要后期處理,如deinterlace,3:2pulldown,等等。GPU再用自己的后期處理電路來進(jìn)行處理。CPU還是發(fā)呆6o后期處理以后的未壓縮數(shù)據(jù)拿去顯示到屏幕上,GPU再開始忙視頻的縮放,亮度,ganmia等事情。CPU述是閑7.GPU終于忙完了,下面的視頻數(shù)據(jù)在哪里?通知CPU,GPU先歇會(huì)。CPU又開始忙了,回到第1步。上面可以看到,皺件解碼生效的時(shí)候,CPU真的可以很閑,但是為了讓它生效,有些條件必須滿足。最關(guān)鍵的原因是,與CPu->系統(tǒng)內(nèi)存和GPU—〉
4、顯卡顯存比起來,PCI、AGP、PCIE總線是龜速。PCI是133MB/S,AGP8X是2?1GB/S,PCIE16X是4GB/S,而CPU-系統(tǒng)內(nèi)存,GPU—顯存則快若干倍。有興趣的可以把不同時(shí)代的內(nèi)存總線和AGP/PCTE總線速度進(jìn)行一下對(duì)比。因?yàn)镃PU和GPU互連的總線很慢,因此,視頻數(shù)據(jù)(無論是解壓前還是解壓后)一旦交給GPU,GPU就要負(fù)責(zé)把它處理完,直到最終顯示。如果在前面1—5步里有哪一步GPU不能做或你不讓它做,視頻硬件解碼就不生效,CPU要負(fù)責(zé)。當(dāng)然,你可能會(huì)問,也許CPU很慢,說不定在龜速總線上傳輸數(shù)據(jù),GPU分擔(dān)一
5、部分工作,還是比全部CPU做要快呢?也許如此,但在Directshow架構(gòu)里,代表視頻數(shù)據(jù)處理各環(huán)節(jié)的濾鏡(分離器,解碼器,后期處理,渲染器)需要協(xié)商岀一個(gè)大家都接受的視頻數(shù)據(jù)存儲(chǔ)方式,如果某個(gè)濾鏡說我只能在系統(tǒng)內(nèi)存里玩,大家都得要在內(nèi)存里玩,GPU和顯存只好放棄。了解了這樣的步驟,我們看什么時(shí)候碩件解碼會(huì)失敗。1.GPU自己沒辦法獨(dú)立搞定解碼,比如太老的顯卡,顯存太少,或者象GF2MX,GF4TI這種太監(jiān)(MC和IDCT只支持一個(gè))。注:這里有錯(cuò)誤?。?!2.GPU的視頻后期處理太差勁,你要找其他軟件來做,這個(gè)對(duì)于發(fā)燒友是很常見的情況,
6、比如放DVD加ffdshow銳化倍線。ffdshow只能在系統(tǒng)內(nèi)存里工作,它沒辦法把手仲到顯卡顯存上,那么硬件解碼只好讓位給軟件解碼。3o非常常見的一個(gè)情況,就是用vobsub加字幕。vobsub濾鏡是加在解碼器之后,渲染器之前的。它怎么把字幕放到圖像上去?原始圖像進(jìn)來,它修改原始圖像,把字幕的圖案畫上去,再送給后面的渲染器(或者別的后期處理濾鏡)。vobsub同樣只能在系統(tǒng)內(nèi)存里工作,ok,解碼也要軟件了。vobsub不能用,那字幕要怎么加?所幸渲染器捉供了混合模式,就是把幾種視頻數(shù)據(jù)揉在一起,這些數(shù)據(jù)可以是在系統(tǒng)內(nèi)存中(軟件解碼或軟
7、件生成),也可以是在顯卡顯存屮(硬件解碼)。最大的好處是各種視頻數(shù)據(jù)可以獨(dú)立生成,不會(huì)互相牽制??梢杂布鈮旱挠糜布鈮?,可以軟件生存的用軟件生存。(類似電路里串聯(lián)和并聯(lián)的關(guān)系)、哪些軟件呢?比如MPC,KMP,BSPlaycr,他們自帶字幕引擎。jfljZoomPlayer借助于vobsub生成字幕。只能用軟解壓。MediaPlayerClassic(MPC),不要把它和暴風(fēng)影音等套件混起來。MPC是一個(gè)播放器內(nèi)帶了一些濾鏡和字幕工具,全部是Gabest這個(gè)牛人開發(fā)的Opensource軟件,暴風(fēng)里除了MPC以外還有一堆其他公司的濾鏡
8、,包括vobsub,理論上可能冇版權(quán)問題ovobsub雖然也是gabest開發(fā)的,但它顯示字幕的工作方式和MPC里的不同。vobsub在視頻數(shù)據(jù)交給渲染器之前插入字幕,MPC把視頻數(shù)據(jù)和字幕分開,一起交給渲