<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > 全硬件視頻處理引擎簡化視頻系統(tǒng)設計

          全硬件視頻處理引擎簡化視頻系統(tǒng)設計

          作者: 時間:2011-04-20 來源:網絡 收藏
          數(shù)字視頻處理始終是目前多媒體設備應用中的熱點問題。數(shù)字視頻的標準繁多,并且在還持續(xù)地發(fā)展變化之中,因此,系統(tǒng)設計必須能夠盡可能支持更廣泛的視頻格式。傳統(tǒng)的選擇是采用DSP進行軟件編解碼,但隨著1080i/p的高清視頻應用的迅速普及,其所要求的運算量也在急劇增長,基于軟件的處理方式逐漸開始面臨極大的挑戰(zhàn)。而基于硬件加速器的方案優(yōu)勢則開始顯現(xiàn),這種方式可以大大減輕處理器負載,并滿足移動設備苛刻的低功耗要求。目前,越來越多的系統(tǒng)方案開始采用基于全硬件視頻處理引擎(VPU)的設計。

            飛思卡爾i.MX53應用處理器提供了基于硬件加速器方式的典型結構,其內嵌的全硬件VPU支持從H.264、MPEG4、Divx到RV10在內的非常廣泛的視頻格式,可以涵蓋絕大部分視頻資源,并支持1080i/p高清解碼和720p編碼。此外,該處理器還可以同時進行多路視頻解碼和全雙工多路視頻編碼處理,并且允許每一路視頻采用不同的格式,從而可實現(xiàn)雙顯示器配置或視頻電話會議應用等。

            典型的硬件視頻處理引擎結構

            與通常意義上的全硬件VPU不同,該VPU的一個顯著的優(yōu)勢在于可以在一定程度上提供可編程性,以及編解碼流程的更新。原因就在于其內置有一個16位的小型可編程DSP,這個名為BIT的處理器可以通過執(zhí)行不同的固件來靈活控制編解碼的過程以及和CPU的接口 交互。

            對于CPU來說,控制VPU所需要的運算量不超過1MIPS,如此之低的計算需求同樣歸功于BIT處理器。它的內部包含了專用硬件加速器來加速碼流的處理,實現(xiàn)了包括幀率控制、FMO、ASO、視頻編解碼控制以及錯誤恢復等功能。VPU內大部分的子模塊也經過高度優(yōu)化,在編解碼各種不同視頻格式時可以充分復用,從而降低了門數(shù)和功耗。

            MX53的VPU結構如圖1所示,它通過標準的AXI/APB與ARM處理器相連,從而可以訪問片內緩存來獲得高性能。VPU主要包括兩個組件,視頻編解碼處理IP和VPU總線轉換器。前者是整個VPU的核心,主要由嵌入式BIT處理器,視頻CODEC以及總線仲裁器組成;后者負責將AMBA APB3總線轉換成VPU內部的IP Sky Blue總線。

            

          MX53的VPU結構

            視頻解碼處理流程

            得益于BIT處理器的高度完善的控制流程,從外部的CPU角度來看,VPU是高度自主控制的,CPU所需要做的僅僅是與VPU相關的進程管理工作。需要注意的是這里的進程并非指通常意義上的系統(tǒng)進程,而是VPU內部專用的進程。

            VPU可以同時處理多達4路不同格式的視頻,但處理流程都是相同的。都是從創(chuàng)建進程開始(系統(tǒng)負責創(chuàng)建和設置一個專用進程),再到運行進程(系統(tǒng)運行進程需要滿足的時間點要求是解碼器處于空閑狀態(tài)并且碼流已經在內存中就緒),最后退出進程。

            如果有多個進程準備運行,每個進程將被分配一個唯一的進程索引號,該索引號基于創(chuàng)建的順序進行分配。例如,當1路MPEG-4解碼、1路H.264解碼、1路MPGE-2解碼和1路VC-1解碼同時進行時,MPEG-4解碼進程會被分配索引號0,而VC-1解碼被分配為索引號3。

            在多進程的環(huán)境下,進程的執(zhí)行沒有優(yōu)先級之分。在創(chuàng)建了所有的進程之后,CPU將啟動BIT處理器執(zhí)行這些進程,BIT處理器同樣是利用類似時間片分割的機制來調度一個進程。

            我們跳出VPU,從整個系統(tǒng)的角度來看VPU的運作,下面以同時解碼1路H.264碼流和1路MPEG-4碼流為例。

            首先,初始化VPU,包括將BIT處理器所需的固件代碼裝入內存,設置初始化參數(shù),如BIT處理器配置參數(shù),工作緩沖區(qū)基地址、BIT代碼地址以及碼流緩沖區(qū)控制等等。

            接著創(chuàng)建H.264碼流和MPEG-4的解碼進程,包括設置碼流緩沖區(qū)的基地址和大小,幀緩沖區(qū)的基地址等。

            然后每個進程交替執(zhí)行。一個標記(Wait BusyFlag)指示是否一幀碼流已經完成解碼,完成解碼后的碼流將會被發(fā)往圖像處理單元(IPU)進行后處理和顯示。

            最后,在解碼結束后,釋放相關的內存資源并銷毀進程。

            

          《電子系統(tǒng)設計》

            內存控制是使用VPU的關鍵問題

            VPU對于外部內存有完全的訪問權,它利用外部內存來加載和存儲圖像幀、碼流以及BIT處理器的代碼和數(shù)據(jù)。內存的使用量取決于視頻格式本身和目標應用。例如,H.264解碼使用的參考幀最多達16個,但H.263解碼僅僅需要使用1個。此外,不同的格式在處理De-blocking或者疊加平滑濾波的時候也需要使用大小不同的臨時內存。

            基本上,VPU使用6種不同的存儲區(qū):幀緩沖區(qū)(用于儲存一幀圖像)、BIT處理器代碼內存區(qū)、工作緩沖區(qū)(用于BIT處理器的中間數(shù)據(jù)以及供視頻解碼硬件使用)、碼流緩沖區(qū)(用于加載碼流)、參數(shù)緩沖區(qū)(用于BIT處理器命令執(zhí)行以及返回數(shù)據(jù))、搜索RAM(用于ME模塊以減少外部內存的總線負荷)。

            其中,碼流緩沖區(qū)的處理很關鍵,對于每一個進程,系統(tǒng)必須分配一個獨立的碼流緩沖區(qū)。外部碼流緩沖區(qū)將組成一個緩沖區(qū)環(huán)(ring buffer)。BIT處理器將在獲得緩沖區(qū)環(huán)的起始地址后自動進行循環(huán)操作。

            在解碼處理中,CPU將碼流寫入到該緩沖區(qū)中,接著BIT處理器將讀取該碼流,如果二者配合不好,會導致碼流的重寫(overwriting)或者不足(underflow),一旦這種情況發(fā)生,解碼就會失敗。為了防止這種情況的發(fā)生,當前碼流的緩沖區(qū)讀/寫指針必須在外部的CPU和VPU內部的BIT處理器之間交換。CPU操作的寫指針和BIT操作的讀指針必須都要寫入內部寄存器,BIT處理器通過比較這兩個指針來判斷碼流緩沖區(qū)是否有碼流不足,如果是的話,則需要停止解碼來阻止誤讀碼流,直到CPU寫入足夠的碼流數(shù)據(jù)并更新寫指針。反過來,CPU也需要在對緩沖區(qū)環(huán)寫入數(shù)據(jù)之前對讀指針進行判斷以確定不會發(fā)生碼流重寫。

            在諸如1080i/p高清解碼的應用下,VPU所要求的內存帶寬很高,而現(xiàn)在的操作系統(tǒng)多為多任務操作系統(tǒng),因此內存帶寬不足的問題就很可能發(fā)生,這將導致播放不流暢甚至錯誤解碼的情況發(fā)生。因此必須仔細規(guī)劃系統(tǒng)帶寬的使用。

            本文小結

            從上述的分析來看,對于i.MX53的VPU的使用是非常簡單的,全硬件VPU對于編解碼過程的高度封裝實際上隱藏了這一過程的復雜性,使得從整體上來看,視頻處理成為一件輕松的任務,這正是全硬件VPU的顯著優(yōu)勢之一。目前,多媒體設備的市場競爭異常激烈,系統(tǒng)廠商的產品開發(fā)時間被壓縮得非常短,就視頻解決方案而言,應用處理器供應商必須保證其參考設計能夠提供簡潔易用的API,以及經過充分驗證的可靠性和實時編解碼性能,基于全硬件視頻處理的系統(tǒng)設計無疑是一種極具市場吸引力的解決方案。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();