隨著網(wǎng)絡(luò)技術(shù)和多媒體技術(shù)的發(fā)展.視頻通信的需求逐漸增加.同時(shí)最新的視頻壓縮標(biāo)準(zhǔn)不斷推出。MPEG-4 ( Moving Pictures Expcrts Group-4)是國際運(yùn)動(dòng)圖像像編碼專家組(MPEG Moving Picture Experts Group)在1998年11月制定[1]的,它不同于其他標(biāo)準(zhǔn).是個(gè)而向多媒體應(yīng)用的壓縮標(biāo)準(zhǔn). 第1次提出了基于對(duì)象的壓縮方法.使交互功能的實(shí)現(xiàn)成為可能。日前基于PC平臺(tái)的MPEG-4視頻編碼器[2]在互聯(lián)網(wǎng)的遠(yuǎn)程教育和高清晰電影等方面己經(jīng)有較多的應(yīng)用.但在硬盤錄像機(jī)、多媒體通信等視頻業(yè)務(wù)的嵌入式系統(tǒng)應(yīng)用更為廣泛。以DSP為嵌入式圖像處理核心的系統(tǒng),具有開發(fā)周期短,編程靈活的特點(diǎn),因此DSP圖像處理系統(tǒng)成為了研究熱點(diǎn)。
DSPs結(jié)構(gòu)特點(diǎn)
TMS320C6455是TI ( Tcxas Instrumcnts Incorporatcd)公司推出的最新高速DSP芯片[3]。具體結(jié)構(gòu)見圖1。最主要的特點(diǎn)從是結(jié)構(gòu)[4]上采用了VLIW(VLIW: VeryLong Instruction Word)超長指令字內(nèi)核結(jié)構(gòu).具有1200 MHz的CPU,每個(gè)周期可以同時(shí)執(zhí)行8條32bit的指令。速度可達(dá)到9600 MIPS ( 1200 MHz X 8條指令=4 800 MIPS) 。片內(nèi)采用2級(jí)高速緩存結(jié)構(gòu).片外存儲(chǔ)器有很強(qiáng)大的外部存儲(chǔ)器接口EMIF ( Extcrnal Mcm ory Intcrfacc)。 這些性能能滿足視頻圖像處理的實(shí)時(shí)性要求.確立了它在高端多媒體應(yīng)用中的地位。
?
圖1 TMS320C6455DSP 的內(nèi)核結(jié)構(gòu)
對(duì)Cache的優(yōu)化
最大程度地發(fā)揮Cache效率是達(dá)到期望編碼器性能的一個(gè)關(guān)鍵因素[5]。Cache高速的存儲(chǔ)訪問速度可以減少CPU延遲周期.提高處理器的效率。TMS320C64xDSP有兩級(jí)存儲(chǔ)結(jié)構(gòu)應(yīng)用片內(nèi)數(shù)據(jù)和程序存儲(chǔ)。對(duì)于L1Cache能夠以CPU的同樣速度訪問。L2Cache既可以作數(shù)據(jù)空間也可以作為程序空間使用.L2是片外空間與L1的橋梁。
MPEG-4視頻編碼器是以宏塊為單位進(jìn)行編碼處理 ,只有當(dāng)前宏塊處理完成所有的過程后,視頻編碼器才能傳送一個(gè)宏塊。直接出現(xiàn)的缺點(diǎn)是: 一個(gè)視頻編碼器整個(gè)代碼大于 L1P。每個(gè)宏塊在 L1P和 L2之間的傳送過程 ,導(dǎo)致嚴(yán)重的Cache缺失。而一個(gè)單獨(dú)的宏塊從片外存儲(chǔ)空間到片內(nèi)空間的搬移 , 也不能發(fā)揮 EDMA (Extended Direct Memony Access )的優(yōu)勢。
為避免發(fā)生的Cache大量缺失,采取 3種方法[6] 。
1.整個(gè)編碼算法應(yīng)該分成 3個(gè)模塊: 宏塊編碼、運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)重建 , 這樣使每個(gè)模塊代碼都適合 L1P。每次循環(huán)以宏塊組為單位 , 宏塊組的大小由 L1D大小決定。在宏塊編碼模塊中, 當(dāng)宏塊組被傳送到片內(nèi),他們一起經(jīng)過 DCT Direct Cosine Transform 、量化、熵編碼 , 直到宏塊組編碼模塊結(jié)束為止,L1D才刷新這組宏塊。同時(shí)對(duì)應(yīng)的程序包括 DCT、量化、熵編碼也被保存到 L1P。
2.盡量減少數(shù)據(jù)類型的大小。可以用 8位數(shù)據(jù)就不用 16位數(shù)據(jù) , 這樣不但節(jié)省空間 ,而且能提高L1D的使用效率。因?yàn)?L1D行的大小是固定的, 在一行內(nèi)如果采用 8位數(shù)據(jù) 比 16位數(shù)據(jù)可多放一倍 , 從而減少程序中 Cache缺失情況的發(fā)生。
3.采用乒乓緩存結(jié)構(gòu), 提高 Cache命中率 , 減少 CPU等待時(shí)間。
在視頻編碼模塊中,當(dāng)前幀和參考幀數(shù)據(jù)放在片外存儲(chǔ)器,在編碼過程中需要依次對(duì)圖像幀中的每個(gè)宏塊進(jìn)行操作。但宏塊直接從片外內(nèi)存讀取,這就會(huì)發(fā)生CPU等待。可以設(shè)置兩對(duì)片上緩存,一對(duì)存放當(dāng)前幀宏塊,一對(duì)存放參考幀宏塊,它們以乒乓方式工作。乒乓緩沖工作模式如圖1所示。編碼前E DMA將片外的當(dāng)前幀中編碼宏塊數(shù)據(jù)和在搜索范圍內(nèi)的參考幀宏塊數(shù)據(jù)搬移到片上內(nèi)存。在用EDMA搬移數(shù)據(jù)到其中一塊片內(nèi)緩存的同時(shí),,處理器可以對(duì)另一塊緩存中的數(shù)據(jù)進(jìn)行處理。經(jīng)過這樣的修改,CPU一直從片上讀取存儲(chǔ)器數(shù)據(jù)大大減少了CPU阻塞情況的發(fā)生,提高了編碼速度。
?
圖2 乒乓緩沖存儲(chǔ)器結(jié)構(gòu)
SAD和像素插值的優(yōu)化
SAD(Sum ofAbsolute Difference)是運(yùn)動(dòng)估計(jì)模塊[7]關(guān)鍵模塊 , 而 DM642提供了一套豐富的視頻和圖像專用指令可以高效實(shí)現(xiàn)運(yùn)動(dòng)估計(jì)算法。
LDNDW (Load Non2alignedDoubleWord)指令,可以一次讀取 64位無邊界數(shù)據(jù)。這個(gè)指令可以從當(dāng)前幀中和參考幀一次讀取8個(gè) 8位像素?cái)?shù)據(jù)。因此可以提高當(dāng)前幀和參考幀宏塊數(shù)據(jù)的搬移速度。
SUBABS4(Subtractwith Absolute)指令,計(jì)算在兩組 8位數(shù)據(jù)包之間的 4個(gè)絕對(duì)值之差。
DOPTPU4是個(gè)計(jì)算 4對(duì) 8位數(shù)據(jù)乘積求和的運(yùn)算。兩個(gè) DOPTPU4可在單周期內(nèi)并行 , 所以可極大地提高 SAD的計(jì)算速度。具體步驟如下:
1)兩個(gè) LDNDW指令從當(dāng)前幀和參考幀取 8個(gè)像素;
2)兩個(gè) SUBABS4計(jì)算 8個(gè)像素的差值;
3)兩個(gè) DOTPU4計(jì)算 8個(gè)像素乘積求和。
像素插值也是個(gè)計(jì)算量大的模塊。AVG4指令可執(zhí)行 4個(gè) 8位數(shù)值平均值計(jì)算。AVG2可以執(zhí)行 2個(gè) 16位數(shù)據(jù)的平均計(jì)算。SHRMB(Shift Right andMerge Byte) 右移第 2個(gè)寄存器 , 把第 1個(gè)寄存器的低位作為高字節(jié)。AVG4計(jì)算平均值,SHRMB處理結(jié)果。
此外筆者參考 TI提供的 IMGLIB支持庫 該庫中還包括了許多常用的圖像和視頻處理的函數(shù) ,以完成 DCT、 IDCT (Inverse Direct Cosine Transform)、中值濾波等功能 , 這些函數(shù)都是經(jīng)過匯編優(yōu)化。完全能夠?qū)崿F(xiàn)軟件流水, 執(zhí)行效率很高。采用標(biāo)準(zhǔn)序列 Coastguard.yuv編碼 5幀數(shù)據(jù),主要函數(shù)優(yōu)化前后性能比較,如表 1所示。
表 1 各個(gè)函數(shù)優(yōu)化性能比較
Tab1Performance of functions by analysis
利用 EDMA進(jìn)行數(shù)據(jù)搬移, 提高存儲(chǔ)速度
TMS320C6455DSP支持 EDMA功能 , 是在沒有 CPU介入的情況下 , 訪問存儲(chǔ)器的一種工作方式。它可以直接通過 EDMA通道 , 提前把外設(shè)或片外存儲(chǔ)器中的數(shù)據(jù)直接搬移到片上內(nèi)存。對(duì) CPU來說 , 所訪問的數(shù)據(jù)總是在片內(nèi)的 , 沒有阻塞的情況發(fā)生 , 減少了 CPU等待時(shí)間[8]。
使用 TI的 CSL (Chip SupportLibrary )支持功能[9,10]。它有專門的 DMA模塊 , 便于對(duì) DMA的各個(gè)存儲(chǔ)器控制。主要使用 DAT函數(shù) , 進(jìn)行 DMA存儲(chǔ)器間數(shù)據(jù)傳送。其中使用 DAT copy ( )和DAT fill ( )。
就象常用的內(nèi)存操作 memcpy 、memset 一樣 , 只需要在 API接口指出源地址、目的地址、長度、維數(shù)屬性等 , 而不需要再去考慮具體的寄存器。
下面的代碼就是把 SDRAM中的 90幀 CIF 288 ×352 格式視頻序列中的一幀 , 利用 EDMA在緩存中進(jìn)行搬移。
DAT_open(DAT_CHANNY, DAT_ PRI_ LOW,DAT_OPEN_2D);
Copy2FrameBuf(Unit8*framebuf)
{
if((tempbuf_rawbuf)>13685852)
if (tempbuf!=NULL)
free(tempbuf);
return 1;
}
DAT.copy(tempbuf,framebuf,152064);
Tembuf+=152064;
return 0;
}
編碼器的總體性能
表2 MPEG-4編碼器的性能
從表2數(shù)據(jù)可以看出,對(duì)于不同的視頻序列幀率提高至少5倍以上,信噪比雖然有所降低,但是由于頻幀的大幅度提高并達(dá)到實(shí)時(shí)要求而得到彌補(bǔ),顯示效果更好。
結(jié)語
筆者論述了TMS32OC6455DSP 平臺(tái)上進(jìn)行視頻編碼算法優(yōu)化的措施。主要考慮根據(jù)DSP自身特點(diǎn)和視頻算法進(jìn)行優(yōu)化,通過實(shí)驗(yàn)可以驗(yàn)證達(dá)到30幀/秒以上的實(shí)時(shí)性要求,隨著IC 技術(shù)的發(fā)展和DSP 價(jià)格的降低,基于DSP的視頻編碼器的商用價(jià)值越來越明顯。
評(píng)論