基于DSP硬解碼的低成本高清屏媒系統(tǒng)
摘要:設(shè)計(jì)并實(shí)現(xiàn)了一種基于OMAP3730的低成本高清屏媒系統(tǒng),能夠充分發(fā)揮可編程C64+DSP的強(qiáng)大計(jì)算功能, 利用硬件實(shí)現(xiàn)常用視頻格式的高清硬解碼播放,利用軟件兼顧不常有視頻格式的解碼播放,同時(shí)針對(duì)屏媒系統(tǒng)的特點(diǎn)利用DSP實(shí)現(xiàn)轉(zhuǎn)屏,達(dá)到在橫屏和豎屏上的自適應(yīng)播放的效果。
本文引用地址:http://cafeforensic.com/article/273271.htm隨著移動(dòng)互聯(lián)技術(shù)的不斷發(fā)展和應(yīng)用,多媒體技術(shù)以其不可阻擋的趨勢(shì)滲入到人們的工作和生活中,數(shù)字視頻是多媒體技術(shù)里比較復(fù)雜的領(lǐng)域,如何在低成本、低功耗的環(huán)境中實(shí)現(xiàn)高質(zhì)量的數(shù)字視頻應(yīng)用是各家公司競(jìng)爭(zhēng)的焦點(diǎn)。低功耗的ARM對(duì)外設(shè)支持比較全面,但計(jì)算能力較差;基于哈佛結(jié)構(gòu)的DSP計(jì)算能力強(qiáng)大,但對(duì)外設(shè)的支持很弱。OMAP3730是TI推出的一款ARM+DSP雙核異構(gòu)處理芯片,其中ARM核為1GHz COTEX-A8,DSP核為800MHz的可編程C64+DSP。
本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于OMAP3730的低成本高清屏媒系統(tǒng),能夠充分發(fā)揮可編程C64+DSP的強(qiáng)大計(jì)算功能, 利用硬件實(shí)現(xiàn)常用視頻格式的高清硬解碼播放,利用軟件兼顧不常有視頻格式的解碼播放。該系統(tǒng)還針對(duì)屏媒系統(tǒng)的特點(diǎn)利用DSP實(shí)現(xiàn)轉(zhuǎn)屏,實(shí)現(xiàn)在橫屏和豎屏上的自適應(yīng)播放。整個(gè)系統(tǒng)流程如圖1所示。
1 視頻類型判斷和解碼
本文用GstDiscover來判斷視頻文件的類型,GstDiscover是GStreamer庫提供的一個(gè)工具,接受輸入U(xiǎn)RI或者URI列表,返回它們的信息。GstDiscover返回的信息一般較多,我們重點(diǎn)關(guān)注返回信息中的視頻編碼以及視頻的分辨率,根據(jù)這些就能判斷該視頻是否可以硬件加速。GstDiscover的一個(gè)典型的輸出如圖2所示,給出了該文件的封裝信息video/webm;音頻信息:音頻編碼audio/x-vorbis,通道數(shù)2,比率48000;視頻信息:視頻編碼video/x-vp8,寬度854,高度480,幀率25。
具體的實(shí)現(xiàn)可以利用QT中的QProcess通過命令行的形式調(diào)用GstDiscover,使用QProcess的readAllStandardOutput函數(shù)讀取所有輸出結(jié)果。在輸出結(jié)果中用正則表達(dá)式查找關(guān)鍵字“audio:”和“video:”從而得到相關(guān)的視音頻信息。
GStreamer是一個(gè)基于管道的多媒體框架,能夠提供組件化的多媒體處理功能??蚣苤械乃械墓δ苣K都被實(shí)現(xiàn)成可以插拔的組件,并且在需要的時(shí)候能夠很方便地安裝到任意一個(gè)管道上,由于所有插件都通過管道機(jī)制進(jìn)行統(tǒng)一的數(shù)據(jù)交換,因此很容易利用已有的各種插件“組裝”出一個(gè)功能完善的多媒體應(yīng)用程序。這種松耦合的架構(gòu)很容易實(shí)現(xiàn)編解碼的模塊化。TI的GStreamer插件使用DMAI來訪問底層硬件,使得DSP的應(yīng)用變得容易。GStreamer在運(yùn)行時(shí)作為ARM處理器上的應(yīng)用程序,并通過使用DMAI來對(duì)DSP和加速模塊進(jìn)行調(diào)用,以實(shí)現(xiàn)硬件編解碼。GStreamer的應(yīng)用實(shí)現(xiàn)了公共組建的最大可復(fù)用性,提高了系統(tǒng)框架的可移植性。
元素(elements)是GStreamer中最重要的概念,你可以把一組元素鏈接到一起組成一個(gè)鏈,然后讓數(shù)據(jù)流依次通過這個(gè)鏈中的每個(gè)元素。每個(gè)元素具有某個(gè)特定的功能,比如有的元素能夠從文件讀數(shù)據(jù),有的元素可以實(shí)現(xiàn)視頻解碼,有的元素負(fù)責(zé)把數(shù)據(jù)輸往聲卡等等。通過把元素串接在一起,可以實(shí)現(xiàn)管道。管道是用來實(shí)現(xiàn)特定任務(wù)的,比如媒體回放或者視頻捕捉。GStreamer默認(rèn)提供了大量的元素,這使得開發(fā)大量媒體應(yīng)用成為可能。如果需要你也可以自己創(chuàng)建新的元素。接口(pads)是元素上數(shù)據(jù)輸入和輸出的地方,接口分兩種,輸入數(shù)據(jù)的接口(sink)和輸出數(shù)據(jù)的接口(src)。通過連接接口可以把兩個(gè)元素鏈接到一起,相連接的接口必須支持相同的數(shù)據(jù)格式。容器(bin)是一種特殊的元素,容器本來是一組連接在一起的元素的集合,但是對(duì)外容器表現(xiàn)的像一個(gè)元素一樣。管道(pipeline)是一種高層容器,為應(yīng)用層提供了總線機(jī)制,并實(shí)現(xiàn)元素響應(yīng)的同步化。
評(píng)論