全硬件視頻處理引擎簡化視頻系統(tǒng)設(shè)計(jì)
飛思卡爾i.MX53應(yīng)用處理器提供了基于硬件加速器方式的典型結(jié)構(gòu),其內(nèi)嵌的全硬件VPU支持從H.264、MPEG4、Divx到RV10在內(nèi)的非常廣泛的視頻格式,可以涵蓋絕大部分視頻資源,并支持1080i/p高清解碼和720p編碼。此外,該處理器還可以同時(shí)進(jìn)行多路視頻解碼和全雙工多路視頻編碼處理,并且允許每一路視頻采用不同的格式,從而可實(shí)現(xiàn)雙顯示器配置或視頻電話會(huì)議應(yīng)用等。
典型的硬件視頻處理引擎結(jié)構(gòu)
與通常意義上的全硬件VPU不同,該VPU的一個(gè)顯著的優(yōu)勢在于可以在一定程度上提供可編程性,以及編解碼流程的更新。原因就在于其內(nèi)置有一個(gè)16位的小型可編程DSP,這個(gè)名為BIT的處理器可以通過執(zhí)行不同的固件來靈活控制編解碼的過程以及和CPU的接口 交互。
對(duì)于CPU來說,控制VPU所需要的運(yùn)算量不超過1MIPS,如此之低的計(jì)算需求同樣歸功于BIT處理器。它的內(nèi)部包含了專用硬件加速器來加速碼流的處理,實(shí)現(xiàn)了包括幀率控制、FMO、ASO、視頻編解碼控制以及錯(cuò)誤恢復(fù)等功能。VPU內(nèi)大部分的子模塊也經(jīng)過高度優(yōu)化,在編解碼各種不同視頻格式時(shí)可以充分復(fù)用,從而降低了門數(shù)和功耗。
MX53的VPU結(jié)構(gòu)如圖1所示,它通過標(biāo)準(zhǔn)的AXI/APB與ARM處理器相連,從而可以訪問片內(nèi)緩存來獲得高性能。VPU主要包括兩個(gè)組件,視頻編解碼處理IP和VPU總線轉(zhuǎn)換器。前者是整個(gè)VPU的核心,主要由嵌入式BIT處理器,視頻CODEC以及總線仲裁器組成;后者負(fù)責(zé)將AMBA APB3總線轉(zhuǎn)換成VPU內(nèi)部的IP Sky Blue總線。
視頻解碼處理流程
得益于BIT處理器的高度完善的控制流程,從外部的CPU角度來看,VPU是高度自主控制的,CPU所需要做的僅僅是與VPU相關(guān)的進(jìn)程管理工作。需要注意的是這里的進(jìn)程并非指通常意義上的系統(tǒng)進(jìn)程,而是VPU內(nèi)部專用的進(jìn)程。
VPU可以同時(shí)處理多達(dá)4路不同格式的視頻,但處理流程都是相同的。都是從創(chuàng)建進(jìn)程開始(系統(tǒng)負(fù)責(zé)創(chuàng)建和設(shè)置一個(gè)專用進(jìn)程),再到運(yùn)行進(jìn)程(系統(tǒng)運(yùn)行進(jìn)程需要滿足的時(shí)間點(diǎn)要求是解碼器處于空閑狀態(tài)并且碼流已經(jīng)在內(nèi)存中就緒),最后退出進(jìn)程。
如果有多個(gè)進(jìn)程準(zhǔn)備運(yùn)行,每個(gè)進(jìn)程將被分配一個(gè)唯一的進(jìn)程索引號(hào),該索引號(hào)基于創(chuàng)建的順序進(jìn)行分配。例如,當(dāng)1路MPEG-4解碼、1路H.264解碼、1路MPGE-2解碼和1路VC-1解碼同時(shí)進(jìn)行時(shí),MPEG-4解碼進(jìn)程會(huì)被分配索引號(hào)0,而VC-1解碼被分配為索引號(hào)3。
在多進(jìn)程的環(huán)境下,進(jìn)程的執(zhí)行沒有優(yōu)先級(jí)之分。在創(chuàng)建了所有的進(jìn)程之后,CPU將啟動(dòng)BIT處理器執(zhí)行這些進(jìn)程,BIT處理器同樣是利用類似時(shí)間片分割的機(jī)制來調(diào)度一個(gè)進(jìn)程。
我們跳出VPU,從整個(gè)系統(tǒng)的角度來看VPU的運(yùn)作,下面以同時(shí)解碼1路H.264碼流和1路MPEG-4碼流為例。
首先,初始化VPU,包括將BIT處理器所需的固件代碼裝入內(nèi)存,設(shè)置初始化參數(shù),如BIT處理器配置參數(shù),工作緩沖區(qū)基地址、BIT代碼地址以及碼流緩沖區(qū)控制等等。
接著創(chuàng)建H.264碼流和MPEG-4的解碼進(jìn)程,包括設(shè)置碼流緩沖區(qū)的基地址和大小,幀緩沖區(qū)的基地址等。
然后每個(gè)進(jìn)程交替執(zhí)行。一個(gè)標(biāo)記(Wait BusyFlag)指示是否一幀碼流已經(jīng)完成解碼,完成解碼后的碼流將會(huì)被發(fā)往圖像處理單元(IPU)進(jìn)行后處理和顯示。
最后,在解碼結(jié)束后,釋放相關(guān)的內(nèi)存資源并銷毀進(jìn)程。
內(nèi)存控制是使用VPU的關(guān)鍵問題
VPU對(duì)于外部內(nèi)存有完全的訪問權(quán),它利用外部內(nèi)存來加載和存儲(chǔ)圖像幀、碼流以及BIT處理器的代碼和數(shù)據(jù)。內(nèi)存的使用量取決于視頻格式本身和目標(biāo)應(yīng)用。例如,H.264解碼使用的參考幀最多達(dá)16個(gè),但H.263解碼僅僅需要使用1個(gè)。此外,不同的格式在處理De-blocking或者疊加平滑濾波的時(shí)候也需要使用大小不同的臨時(shí)內(nèi)存。
基本上,VPU使用6種不同的存儲(chǔ)區(qū):幀緩沖區(qū)(用于儲(chǔ)存一幀圖像)、BIT處理器代碼內(nèi)存區(qū)、工作緩沖區(qū)(用于BIT處理器的中間數(shù)據(jù)以及供視頻解碼硬件使用)、碼流緩沖區(qū)(用于加載碼流)、參數(shù)緩沖區(qū)(用于BIT處理器命令執(zhí)行以及返回?cái)?shù)據(jù))、搜索RAM(用于ME模塊以減少外部內(nèi)存的總線負(fù)荷)。
其中,碼流緩沖區(qū)的處理很關(guān)鍵,對(duì)于每一個(gè)進(jìn)程,系統(tǒng)必須分配一個(gè)獨(dú)立的碼流緩沖區(qū)。外部碼流緩沖區(qū)將組成一個(gè)緩沖區(qū)環(huán)(ring buffer)。BIT處理器將在獲得緩沖區(qū)環(huán)的起始地址后自動(dòng)進(jìn)行循環(huán)操作。
在解碼處理中,CPU將碼流寫入到該緩沖區(qū)中,接著BIT處理器將讀取該碼流,如果二者配合不好,會(huì)導(dǎo)致碼流的重寫(overwriting)或者不足(underflow),一旦這種情況發(fā)生,解碼就會(huì)失敗。為了防止這種情況的發(fā)生,當(dāng)前碼流的緩沖區(qū)讀/寫指針必須在外部的CPU和VPU內(nèi)部的BIT處理器之間交換。CPU操作的寫指針和BIT操作的讀指針必須都要寫入內(nèi)部寄存器,BIT處理器通過比較這兩個(gè)指針來判斷碼流緩沖區(qū)是否有碼流不足,如果是的話,則需要停止解碼來阻止誤讀碼流,直到CPU寫入足夠的碼流數(shù)據(jù)并更新寫指針。反過來,CPU也需要在對(duì)緩沖區(qū)環(huán)寫入數(shù)據(jù)之前對(duì)讀指針進(jìn)行判斷以確定不會(huì)發(fā)生碼流重寫。
在諸如1080i/p高清解碼的應(yīng)用下,VPU所要求的內(nèi)存帶寬很高,而現(xiàn)在的操作系統(tǒng)多為多任務(wù)操作系統(tǒng),因此內(nèi)存帶寬不足的問題就很可能發(fā)生,這將導(dǎo)致播放不流暢甚至錯(cuò)誤解碼的情況發(fā)生。因此必須仔細(xì)規(guī)劃系統(tǒng)帶寬的使用。
本文小結(jié)
從上述的分析來看,對(duì)于i.MX53的VPU的使用是非常簡單的,全硬件VPU對(duì)于編解碼過程的高度封裝實(shí)際上隱藏了這一過程的復(fù)雜性,使得從整體上來看,視頻處理成為一件輕松的任務(wù),這正是全硬件VPU的顯著優(yōu)勢之一。目前,多媒體設(shè)備的市場競爭異常激烈,系統(tǒng)廠商的產(chǎn)品開發(fā)時(shí)間被壓縮得非常短,就視頻解決方案而言,應(yīng)用處理器供應(yīng)商必須保證其參考設(shè)計(jì)能夠提供簡潔易用的API,以及經(jīng)過充分驗(yàn)證的可靠性和實(shí)時(shí)編解碼性能,基于全硬件視頻處理的系統(tǒng)設(shè)計(jì)無疑是一種極具市場吸引力的解決方案。
評(píng)論