引言
MPEG-4" target="_blank">MPEG-4視頻編碼技術(shù)可以在較小的帶寬下傳輸高質(zhì)量的視頻數(shù)據(jù),,節(jié)省大量存儲空間,但編碼復(fù)雜度也較高,,目前豐要有3種實現(xiàn)方案:在通用PC上編程實現(xiàn),;通過ASIC硬件實現(xiàn)以及使用通用DSP" target="_blank">DSP芯片實現(xiàn),。與前兩者相比,通用DSP芯片實現(xiàn)方案具有以下優(yōu)勢:運(yùn)算性能強(qiáng),;可升級性好,,與PC類似,通用DSP芯片的功能仍是通過編程來實現(xiàn)的,,能快速,、方便地進(jìn)行軟件升級及添加新的功能,以適應(yīng)技術(shù)發(fā)展和市場變化,;成本低,、功耗低、適應(yīng)場合廣泛,。
系統(tǒng)硬件設(shè)計
編碼系統(tǒng)處理核心為ADSP-BF533(以下簡稱BF533),,利用其多功能并行接口PPI采集視頻數(shù)據(jù),該P(yáng)PI具有DMA功能,,無需內(nèi)核干預(yù)便可進(jìn)行高速數(shù)據(jù)傳輸,,傳輸完成后可自動向內(nèi)核發(fā)出DMA中斷。
視頻采集部分選用0mniVision公司的CIF級彩色CMOS圖像傳感芯片OV6630,,其最大分辨率為352×288,,采集速率最高可達(dá)60fps,且片內(nèi)硬件實現(xiàn)了原始RGB數(shù)據(jù)到4:2:2YUV格式數(shù)據(jù)的轉(zhuǎn)換,,用戶無需自行編寫復(fù)雜的RGB轉(zhuǎn)YUV應(yīng)用程序,,大大減少了代碼量,很適合用作MPEG-4編碼,。
設(shè)置OV6630輸出為4:2:2 YUV視頻數(shù)據(jù)格式,,BF533的PPI即可直接接收該格式視頻數(shù)據(jù)。二者可實現(xiàn)無縫連接,,無需中間電路,。
考慮到目前還有大量模擬制式的攝像機(jī)仍在廣泛應(yīng)用,系統(tǒng)中還增加了視頻ADC ADV7183,,該芯片可以把PAL制模擬電視信號轉(zhuǎn)為ITU-R656標(biāo)準(zhǔn)4:2:2格式數(shù)字視頻,,同樣將ADV7183輸出端口與BF533的PPI相連。這樣,,既可以采用系統(tǒng)自帶CMOS圖像傳感器采集視頻,,也可以外接PAL制模擬攝像機(jī),用戶可自由選擇,。
由于BF533片內(nèi)存儲空間有限,,而視頻采集、編碼數(shù)據(jù)量巨大,選用一片Hynix公司的4MBSDRAM HY57V56162(內(nèi)含4個內(nèi)部子集)作為BF533片外大容量動態(tài)存儲器,。同時,,為存放程序啟動代碼,利用一片容量為1MB的閃存芯片PSD4256G6V構(gòu)成BF533的片外非易失性存儲器,。系統(tǒng)硬件構(gòu)成如圖1所示,。
編碼器設(shè)計實現(xiàn)
存儲器空間分配
BF533采用統(tǒng)一的32位、共4GB可尋址空間,,包括位于片內(nèi)的L1高速SRAM,片外的同步存儲器空間SDRAMSpace,,以及異步存儲器空間(A syn chronousMemory Space),。
片內(nèi)Ll SRAM包括:64KB指令SRAM、16KB指令Cache/SRAM,、32KB數(shù)據(jù)SRAM,、32KB數(shù)據(jù)Cache/SRAM,以及4KB便簽存儲器,。
L1 SRAM工作在內(nèi)核時鐘頻率,,內(nèi)核可以對其進(jìn)行高速帶寬訪問。它是所有存儲器中訪問速度最快的,,但容量有限,,因此,只應(yīng)將那些最關(guān)鍵的代碼和數(shù)據(jù)存放在L1SRAM里,。同時,,指令Cache和數(shù)據(jù)Cache全部使能,這樣可以大大提高訪問片外存儲器的效率,。Cache設(shè)置是通過相應(yīng)的I M E M_C O N T R O L,、DMEM_CONTROL,以及CPLB寄存器配置實現(xiàn)的,。
由于BF533片內(nèi)存儲空間有限,,而原始視頻數(shù)據(jù)量較大:CIF級4:2:2格式每幀圖像占用的空間為202752字節(jié),如果采用模擬PAL制式視頻輸入,,每幀占用空間更是高達(dá)829440字節(jié),,只能將其放至SDRAM中。同樣,,視頻編碼數(shù)據(jù)也應(yīng)存放在SDRAM中,。此外,系統(tǒng)啟動完成Boot loader引導(dǎo)后,,主要關(guān)鍵代碼放在片內(nèi)L1程序SRAM中執(zhí)行,,但大部分程序代碼仍需從SDRAM中執(zhí)行。由于SDRAM特殊的讀/寫方式,,如果下次訪問內(nèi)存頁與當(dāng)前活動頁(Active Page)不同,,即出現(xiàn)了頁錯失(Page Miss),,SDRAM就必須首先關(guān)閉當(dāng)前頁,再打開新的頁,,大大降低了SDRAM讀寫速率,。而該系統(tǒng)中SDRAM又需存儲多種數(shù)據(jù),內(nèi)核,、DMA均需要頻繁訪問SDRAM,,因此,應(yīng)精心分配SDRAM空間,,以使頁錯失現(xiàn)象盡量少發(fā)生,。
BF533的SDRAM控制器(SDC)可以支持SDRAM每個內(nèi)部子集中的一個活動頁,且在這4個I-Bank中進(jìn)行切換時無需任何延遲,。這樣,,將不同的數(shù)據(jù)、代碼映射至不同的I-Bank,,可使頁錯失現(xiàn)象降到最少,,進(jìn)而改善訪問SDRAM的效率。
由于需要實時編碼,,為保證視頻采集和壓縮可以同步執(zhí)行,,采用乒乓緩沖技術(shù):設(shè)置了兩塊視頻幀接收緩沖區(qū)BUF1和BUF2,采用BF533的DMA傳輸鏈方式進(jìn)行傳輸,。當(dāng)某一DMA緩沖區(qū)填滿后,,內(nèi)核對其作MPEG-4編碼(同時也在構(gòu)建參考幀),此時DMA開始對另一塊緩沖區(qū)進(jìn)行填充,。由于BUF1,、BUF2、程序代碼以及參考幀均位于不同的I-Bank,,減少了SDRAM頁面切換的機(jī)會,,實現(xiàn)了對SDRAM的高效訪問。
MPEG-4程序流程
MPEG-4編碼是基于宏塊(Macro Block)進(jìn)行的,,每個宏塊包含4個8×8亮度子塊和2個8×8色度子塊,。MPEG-4編碼原理主要包括對I幀和P幀的編碼,P幀比I幀多出了運(yùn)動估計和補(bǔ)償模塊,,二者編碼流程如圖2所示,。
代碼編寫及優(yōu)化
BF533支持C/C++高級語言,但高級語言執(zhí)行效率較低,,為達(dá)到最大執(zhí)行效率,,采用全匯編語言實現(xiàn)MPEG-4編碼。
對于I幀編碼,主要的運(yùn)算量是前向離散余弦變換FDCT和反向離散余弦變換IDCT,,這里采用了ADI提供的優(yōu)化代碼,,它基于chen氏快速DCT算法,大量運(yùn)用了BF533特有的并行指令,,完成一次8×8 DCT僅需293個時鐘周期,。
與I幀相比,P幀編碼相對復(fù)雜,,其中,,運(yùn)動估計是P幀編碼最費(fèi)時的部分,即在參考幀中搜索與當(dāng)前編碼宏塊或子塊最匹配的位置,。
SAD(絕對誤差和)準(zhǔn)則具有無需乘除運(yùn)算,、實現(xiàn)簡單方便等優(yōu)點(diǎn),選用它作為運(yùn)動估計匹配準(zhǔn)則,。
運(yùn)動估計搜索算法則采用菱形搜索法(又稱鉆石搜索法),搜索精度為半像素,,菱形搜索法具有簡單,、魯棒、高效的特點(diǎn),。
Blackfin匯編指令集中有專門用于SAD計算的指令S
AA(src_reg_O,,src_reg_1),一條該指令即可同時完成4個字節(jié)的SAD計算,。此外,,綜合使用其它一些視頻專用操作指令,如BYTEPACK(_將4個字節(jié)打包至一個3 2位寄存器中),、BYTEUNPACK(與BYTEPACK功能相反),、BYTEOPl6M(對4個字節(jié)作減法處理),可以使代碼運(yùn)行效率得到顯著改善,。
BF533集成開發(fā)環(huán)境VisualDSP++中還提供了Profile功能,,可以利用該功能對程序代碼性能進(jìn)行評估,發(fā)現(xiàn)程序執(zhí)行的瓶頸,,從而進(jìn)行有針對性的優(yōu)化,。主要的優(yōu)化方法有:1.盡量減少分支、條件判斷指令,,因為這些指令會破壞BF533流水線,,造成額外的時鐘延遲;同時,,對部分較簡單的子程序用宏改寫,,免去子程序調(diào)用過程中的堆棧操作和參數(shù)傳遞;
2.采用并行執(zhí)行指令,BF533并非超標(biāo)量結(jié)構(gòu)DSP,,但仍能有限地支持最多3條指令并行執(zhí)行,,如:saa(r1:0,r3:2)Ⅱr0=[i0++]Ⅱr2=[i1++],;使用該并行指令即可在一個時鐘周期內(nèi)完成4個字節(jié)的SAD計算,,同時完成r0、r2的數(shù)據(jù)更新,,以便下次計算,;
3.在DCT/IDCT的量化過程及其它一些模塊中,要牽涉到除法,,而BF533計算除法需要耗費(fèi)大量時鐘周期,,因此,這里將除法變?yōu)槌艘粤炕蜃拥牡箶?shù),,求倒數(shù)可以通過查找表方式實現(xiàn),。再結(jié)合移位操作,即可在基本不損失精度的同時達(dá)到高效計算除法的目的,。
經(jīng)過前述的優(yōu)化過程后,,成功地在BF533上實現(xiàn)了MPEG-4 SP的CIF級實時編碼。此外,,對于CIF級CMOS傳感器OV6630,,系統(tǒng)可以直接對其實時編碼。但如果是外接PAL制式模擬攝像頭,,經(jīng)ADV7183作A/D轉(zhuǎn)換后,,其分辨率為720×576,受BF533的性能限制,,尚無法對該級別分辨率做到實時編碼,,因此,應(yīng)先使其分辨率降為352×288,,然后再作:MPEG-4編碼,。
實驗結(jié)果
BF533內(nèi)核時鐘(CLK)設(shè)為594MHz,系統(tǒng)時鐘(SLK)為118.8MHz,。選取CIF級標(biāo)準(zhǔn)測試序列flower(幀速率為25fps,,共75幀)對系統(tǒng)進(jìn)行驗證。
圖3,、圖4給出了分別采用I幀編碼和P幀編碼后的重建圖像,。I幀編碼壓縮率為11.5:1,重建圖像信噪比為33.43dB,。P幀編碼壓縮率則達(dá)到了65.7:1,,重建圖像信噪比為32.65dB,。經(jīng)采用BF533片內(nèi)實時時鐘RTC精確計時,整個視頻序列共75幀,,編碼耗費(fèi)2.27s,,平均編碼率達(dá)到了33fps,滿足實時編碼要求,。
結(jié)語
本文介紹了CIF級別的MPEG-4 SP實時編碼在BF533 DSP,;DSP片上的實現(xiàn),該編碼器可以靈活地選用系統(tǒng)自帶CMOS傳感器及用戶自選PAL制模擬攝像機(jī)兩種視頻采集源,。該系統(tǒng)可以用在IP可視電話,、交通檢測、超市監(jiān)視,、智能小區(qū)安保等領(lǐng)域,,具有很強(qiáng)的實用價值。