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