

摘要:設(shè)計(jì)并實(shí)現(xiàn)了一種基于OMAP3730的低成本高清屏媒系統(tǒng),能夠充分發(fā)揮可編程C64+DSP的強(qiáng)大計(jì)算功能,利用硬件實(shí)現(xiàn)常用視頻格式的高清硬解碼播放,利用軟件兼顧不常有視頻格式的解碼播放,同時(shí)針對屏媒系統(tǒng)的特點(diǎn)利用DSP實(shí)現(xiàn)轉(zhuǎn)屏,達(dá)到在橫屏和豎屏上的自適應(yīng)播放的效果。本文網(wǎng)絡(luò)版地址:http://www.eepw.c Olll.cn/article/273271.htm
關(guān)鍵詞:OMAP3730;gstreamer mplayer;DSPDOI:10.3969/j.issn.1005-5517.2015.4.012
隨著移動互聯(lián)技術(shù)的不斷發(fā)展和應(yīng)用,多媒體技術(shù)以其不可阻擋的趨勢滲入到人們的工作和生活中,數(shù)字視頻是多媒體技術(shù)里比較復(fù)雜的領(lǐng)域,如何在低成本、低功耗的環(huán)境中實(shí)現(xiàn)高質(zhì)量的數(shù)字視頻應(yīng)用是各家公司競爭的焦點(diǎn)。低功耗的ARM對外設(shè)支持比較全面,但計(jì)算能力較差;基于哈佛結(jié)構(gòu)的DSP計(jì)算能力強(qiáng)大,但對外設(shè)的支持很弱。OMAP3730是TI推出的一款A(yù)RM+D SP雙核異構(gòu)處理芯片,其中ARM核為1GHzCOTEX-A8, DSP核為800MHz的可編程C64+DSP。
本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于OMAP3730的低成本高清屏媒系統(tǒng)、能夠充分發(fā)揮可編程C64+DSP的強(qiáng)大計(jì)算功能,利用硬件實(shí)現(xiàn)常用視頻格式的高清硬解碼播放,利用軟件兼顧不常有視頻格式的解碼播放。該系統(tǒng)還針對屏媒系統(tǒng)的特點(diǎn)利用DSP實(shí)現(xiàn)轉(zhuǎn)屏,實(shí)現(xiàn)在橫屏和豎屏上的自適應(yīng)播放。整個(gè)系統(tǒng)流程如圖1所示
1 視頻類型判斷和解碼
本文用GstDiscover7來判斷視頻文件的類型,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è)基于管道的多媒體框架,能夠提供組件化的多媒體處理功能。框架中的所有的功能模塊都被實(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來對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)是一種特殊的元素,容器本來是一組連接在一起的元素的集合,但是對外容器表現(xiàn)的像一個(gè)元素一樣。管道(pipeline)是一種高層容器,為應(yīng)用層提供了總線機(jī)制,并實(shí)現(xiàn)元素響應(yīng)的同步化。
一個(gè)簡單的ogg播放器的管道如圖3所示,每個(gè)小框代表一個(gè)元素。源元素從文件源讀取數(shù)據(jù)發(fā)往ogg分解器。該分解器把復(fù)合數(shù)據(jù)流分解成視頻數(shù)據(jù)流和音頻數(shù)據(jù)流,然后分別發(fā)往視音頻解碼器。音頻解碼器接收到數(shù)據(jù)后進(jìn)行解碼后把數(shù)據(jù)發(fā)往音箱,視頻解碼器解碼后數(shù)據(jù)發(fā)往顯示,從而實(shí)現(xiàn)視音頻的同步播放。
基于DSP硬解碼就是把GStreamer管道中的耗費(fèi)計(jì)算時(shí)間的元素替換成可以用DSP加速的元素。一個(gè)基于DSP硬解碼的管道如圖4所示,與上面的例子的不同在于,視頻解碼元素被替換成了TIViddec,音頻解碼元素被替換成TIAuddec,顯示元素被替換成了TIDmaNideoSink.
OMAP3730通過GStreamer的組件來提供基于硬件的視音頻編解碼功能,在數(shù)字視頻、影像、語音和音頻上可以支持H.264、MPEG4/2、H.263、 VCl、 JPEG、 G.711/G.723、MP3、WMA等多種編解碼器。所以對于OMAP3730支持硬解碼的格式,我們用GStreamer來播放,對于不支持硬解碼的格式我們采用Mplayer播放,因?yàn)镸player對各種格式的兼容性和穩(wěn)定性比GStreamer要好一些。
2 基于DSP的轉(zhuǎn)屏
橫屏和豎屏各有優(yōu)點(diǎn),橫屏符合播放習(xí)慣,豎屏占用的地盤少。Linux系統(tǒng)在嵌入式系統(tǒng)上默認(rèn)是以橫屏的方式啟動,要讓系統(tǒng)支持豎屏有兩種方法,一種是系統(tǒng)方法,一種是通過應(yīng)用軟件的方法。系統(tǒng)的方法可以實(shí)現(xiàn)轉(zhuǎn)屏,但是在播放高清視頻時(shí),由于系統(tǒng)負(fù)載較大容易崩潰,所以我們采用應(yīng)用軟件的方法實(shí)現(xiàn)DSP轉(zhuǎn)屏。應(yīng)用軟件轉(zhuǎn)屏分成播放界面轉(zhuǎn)屏和視頻畫面轉(zhuǎn)屏兩部分。我們的應(yīng)用軟件界面利用QT實(shí)現(xiàn)的,可以通過設(shè)定系統(tǒng)變量exportQWS_DISPLAY=transformed:::rot90:0實(shí)現(xiàn)界面轉(zhuǎn)屏。視頻畫面轉(zhuǎn)屏又分GStreamer和Mplayer播放兩種情況。對于GStreamer的播放,我們可以實(shí)現(xiàn)一個(gè)類似于gsttividresize的轉(zhuǎn)屏元素,將該元素插入到管道中TIViddec和TIDmaiVideoSink之間實(shí)現(xiàn)轉(zhuǎn)屏。對于Mplayer的轉(zhuǎn)屏,可以在Mplayer源碼庫中vo目錄下新建一個(gè)畫面反轉(zhuǎn)插件,在播放視頻時(shí)通過命令字“-vo”強(qiáng)制使用畫面反轉(zhuǎn)插件.
TI將常用的DSP算法封裝成統(tǒng)一的名為C6Accel的軟件接口供開發(fā)人員調(diào)用。按函數(shù)功能C6Accel又分為信號處理、圖像處理、數(shù)學(xué)運(yùn)算3個(gè)庫。其中信號處理包括傅立葉變換、逆傅立葉變換、自相關(guān)、自相關(guān)、點(diǎn)乘、矩陣乘、FIR濾波、IIR濾波等功能:圖像處理包括sobel邊緣檢測、直方圖、卷積、相關(guān)度、中值濾波、矩陣運(yùn)算、圖像編碼轉(zhuǎn)換等功能:數(shù)學(xué)庫主要包含四則運(yùn)算、三角函數(shù)等功能。
畫面旋轉(zhuǎn)的本質(zhì)是一個(gè)矩陣轉(zhuǎn)置操作,可以通過DSP完成。在浮點(diǎn)DSP核上可以通過硬件實(shí)現(xiàn)矩陣轉(zhuǎn)置的功能,該功能被封裝在函數(shù)C6accel_DSPF_sp_mat_trans里面,可以直接調(diào)用。由于OMAP3730提供的是定點(diǎn)DSP缺少一個(gè)浮點(diǎn)輔助運(yùn)算器,無法通過硬件實(shí)現(xiàn)矩陣轉(zhuǎn)置,只能通過軟件實(shí)現(xiàn)。
3 總結(jié)
功耗的ARM對外設(shè)支持比較全面,但計(jì)算能力較差;基于哈佛結(jié)構(gòu)的DSP計(jì)算能力強(qiáng)大,但對外設(shè)的支持很弱。本文設(shè)計(jì)實(shí)現(xiàn)的基于OMAP3730的低成本高清屏媒系統(tǒng),能夠充分發(fā)揮可編程C64+DSP的強(qiáng)大計(jì)算功能,兼顧了ARM和DSP的優(yōu)點(diǎn),在嵌入式數(shù)字視頻領(lǐng)域有廣泛的應(yīng)用前景。