《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 基于DSP的實時MPEG-4編碼的軟件優化設計

基于DSP的實時MPEG-4編碼的軟件優化設計

2009-02-06
作者:焦 曉1 馬明罡2 朱光喜

??? 摘? 要: 結合開發工具TMS320C6201EVM板的結構和特點,闡述了在實現MPEG-4實時視頻編碼中,對算法的軟件優化所做的工作。?

??? 關鍵詞: TMS320C6201? MPEG-4? 優化? 并行處理

?

??? TMS320C6201芯片是TI公司新推出的并行處理的數字信號處理器。它的最高處理能力高達1600MIPS,即16億萬次每秒定點運算,是目前市場上所有的DSP芯片中速度較快、處理能力較強的DSP處理器。其應用前景十分廣泛。本文利用C6201開發工具EVM(模擬評估)板,用軟件實現實時MPEG-4編碼。詳細探討了MPEG-4視頻編碼中的關鍵模塊,并針對TMS320C6000的特殊指令結構,對軟件優化的特殊處理做了較深入的研究。?

1 開發工具的介紹?

??? 筆者采用的評估工具是TI公司的C6XEVM[2]。它的結構如圖1所示。

?

?

??? C6XEVM除核心DSP之外,還提供了如下工具:一個64K×32bit、133MHz的z同步脈沖靜態隨機存取存儲器(SBSRAM);兩個1M×32bit、100MHz的同步動態RAM(SDRAM);內含基于PCI或外部XDS510支持的JTAG仿真;支持采樣速率為5.5kHz~48kHz的立體聲16位音頻邊界碼;1.8V/2.5V直流電和3.3V直流電單板轉換電壓調整器;模擬5V直流電壓的單板線性電壓調整器;3個LED指示器(電壓,2個自定義指示)等。?

??? SBSRAM映射到DSP的CE0存儲空間,把它用于程序自舉。通常SBSRAM都工作在133MHz。當采用全速接口時,CPU時鐘就等于SBSRAM的時鐘;當采用半速接口時,SBSRAM的速度是CPU時鐘速度的一半。?

??? EVM提供的兩個1M×32bit的字存儲區間的SDRAM,每一個存儲空間包含兩個512K×2banks×16位的器件。它們映射到DSP的CE2和CE3存儲空間,每一個空間使用16Mbit的地址空間。 SDRAM通常是CPU時鐘速度的一半。 ?

??? EVM提供的異步存儲連接器允許給子板附加一個存儲區間或者存儲映射區間。擴展存儲的界面被映射到DSP的4M異步CE1存儲空間的低3M空間。CE1中擴展空間的地址從0x100000~12FFFFF,在MAP0和MAP1方式下為0x1400000~16FFFFF,CE1的最上面的1M字節可分配給板上外圍。CE1存儲空間的這種分配方式容許了板上器件和擴展器件的共存。?

2 MPEG-4視頻編碼?

??? MPEG-4編碼是基于VOP的編碼[3]。所謂VOP是指視頻目標平面,即視頻對象VO在某一時間的存在。VOP編碼器的結構框圖如圖2所示。?

?

?

??? 編碼器主要由兩部分組成:一是形狀編碼器;另一個是傳統的運動估計和補償及紋理VOP編碼器。VOP可采用幀內編碼(Intra-VOP,簡稱I-VOP)和幀間預測編碼(Inter-VOP)。幀間預測編碼又可以分為前向因果預測編碼(P-VOP)和前后向非因果編碼(B-VOP)。幀間預測編碼消除了視頻信息的時間冗余。對于VOP的編碼,首先將各個VOP從上到下分成16×16大小的宏塊(MB)。具體的形狀、運動和紋理編碼基于MB進行,所以一個MB的信息是形狀、運動、紋理(Shape-Motion-Texture)的總和。進行MB編碼時,再把它分成4個8×8塊(Block)的亮度Y分量,和2個8×8塊的色度Cr和Cb分量分別進行編碼。然后對6個Block分別進行8×8DCT二維變換、量化和Huffman編碼。?

??? 進行測試使用的圖像是QCIF格式(176×144象素),圖像數據從主機讀入。通過CCS測得其各個模塊所消耗的時間周期比率如下。?

??? 其各個部分占總運算量的比例分別為:?

?

?

??? 分析顯示,運動估計和運動補償模塊及紋理編碼模塊是MPEG-4實現的最主要的瓶頸。所以在程序優化上所做的工作主要是基于這兩個模塊進行。?

3 程序的優化考慮?

??? 要想充分發揮TMS320C6201的運算能力,必須從它的硬件結構出發,最大限度地利用八個功能單元,使用軟件流水線,盡量讓程序無沖突地并行執行。并行執行的優點在于,在處理彼此之間沒有承接關系的運算時,在CPU資源允許的情況下可以并行完成。但對于前后有承接關系或者判斷、跳轉頻繁的情況就無法發揮其優勢。一般循環體都滿足并行處理的條件,并且循環體往往是程序中耗時最長的。因此在進行優化時將重點放在循環體上。?

3.1 跳轉指令的優化?

??? DSP的指令多為單周期指令,但是轉移類指令卻通常要耗費較多的時鐘周期,每個跳轉都有5個延遲間隙,從性能上考慮是一項很耗時的工作, 因此應盡可能地減少程序中的分支。?

??? 事實上,通過對程序的分析,可以看到許多判斷轉移用簡單的條件組合就可以得到實現。例如下面的小程序:?

??????????? ?if(rcoeff[i]>(lim-1)) rcoeff[i]=(lim-1);?

??????? ???? else if(rcoeff[i]<(-lim)) rcoeff[i]=(-lim);?

??? 可以改為:rcoeff[i]=MIN(rcoeff[i],(lim-1));?

???????????? rcoeff[i]=MAX(rcoeff[i],(-lim));?

??? 還有一種常用的減少判斷轉移的方法是將循環展開。特別是對多重循環的控制,若外層循環較少,可將內層循環直排,把轉移條件結合起來,以減少層與層之間的相互聯系。?

3.2 使用庫函數?

??? TI公司對TMS320C62XX的用戶提供了功能強大的IMAGE LIB[4]庫支持。在這個庫中,包含許多常用函數,可以完成DCT/IDCT變換、小波變換、DCT量化、自適應濾波等功能。這些函數都是優化過的,完全能夠實現軟件流水,效率很高。?

3.3 改寫線性匯編?

??? 線性匯編語言是TMS320C6000中獨有的一種編程語言,介于高級語言和低級語言之間。為了提高代碼的性能,可以用線性匯編來重寫影響速度的關鍵代碼段。線性匯編中不需要給出使用的寄存器、指令的延遲周期及使用的哪個功能單元等信息,C6201強大的匯編優化器會根據代碼的情況自動確定這些信息[5]。然而很多時候,為了提高代碼的效率,必須指出使用哪個功能單元。使用線性匯編時要注意:對循環體進行優化時不能使用跳轉到循環體外的跳轉指令;計數器使用減計數等。?

??? 進行優化時,首先要確定循環次數。對于循環次數是變量的情況,優化器不能并行優化;其次,要盡可能使用雙字或字存取操作。例如運動估計和補償中的一個小程序段:?

void MC_case_a(uchar ref[NUM_ROWS][NUM_COLS],?

uchar curr[NUM_ROWS][NUM_COLS], const int r_x, const int c_x,const int r_y, const int c_y, const int size)?

{?

??? int m, n;?

??? for(m=0; m

??? for(n=0; n

??? curr[c_x+m][c_y+n] = ref[r_x+m][r_y+n];?

??? }}?

}?

??? 相應的線性匯編程序如下:?

.def _MC_case_a?

.sect ″.text″?

_MC_case_a: .cproc ref, curr, r_x, c_x, r_y, c_y, num_cols?

.reg r_temp1, r_temp2, c_temp1, c_temp2?

.reg p_r, p_c, np_r?

.reg lshift, rshift, count?

.reg r_w1, r_w2, r_w3, r_w4?

.reg temp?

SHL r_x, 0x05, r_temp1?

SHL c_x, 0x05, c_temp1 ?

ADD r_y, ref, r_temp2 ?

ADD c_y, curr, c_temp2?

ADD r_temp1, r_temp2, p_r ?

ADD c_temp1, c_temp2, p_c?

SUB num_cols, 2, num_cols ?

MVK 8, count ; 循環次數為8?

MVK 0xFFFC, temp?

AND p_r, temp, np_r?

AND p_r, 0x0003, rshift?

SUB.L 0x04, rshift, lshift?

SHL rshift, 0x03, rshift ?

SHL lshift, 0x03, lshift ?

loop: .trip 8?

LDW *np_r++[1], r_w1 ?

LDW *np_r++[1], r_w2?

LDW *np_r++[num_cols], r_w3 ?

SHRU r_w1, rshift, r_w1 ?

SHL r_w3, lshift, r_w3 ?

SHL r_w2, lshift, r_w4 ?

SHRU r_w2, rshift, r_w2 ?

OR r_w1, r_w4, r_w1 ?

OR r_w2, r_w3, r_w2 ?

STW r_w1, *p_c++[1]?

STW r_w2, *p_c++[num_cols] ?

ADD p_c, 4, p_c ?

[count] SUB count, 1, count ?

[count] B loop?

.endproc?

??? 優化前,在CCS(Code Composer Studio)上測得的C程序段消耗時鐘周期為574;而優化后的線性匯編所耗時鐘周期數為58,效率顯著提高。?

3.4 存儲空間的考慮?

??? DSP存儲空間的配置十分重要。因為DSP對不同的存儲單元的訪問速度是有區別的,對片內寄存器的訪問速度最快,對片內RAM的訪問速度比片外RAM的訪問速度快。因此合理地配置和使用存儲空間,對系統整體效率影響很大。應該盡可能地把訪問比較頻繁的常數表和代碼段裝入片內RAM,如果過大,則把其中一部分裝入片外存儲器。?

??? 同時,還要考慮存儲bank的沖突。由于C6201DSP使用交叉存儲方案,將存儲器分成4個或8個bank,每個bank都是單口存儲區,因此每個周期只允許一次訪問,在一個周期內對一個bank進行兩次訪問將產生存儲器阻塞。存儲器阻塞導致所有流水線操作停止一個周期,用來從存儲器讀取第2個數據。解決的辦法是對代碼段進行修改。?

3.5 其他優化方法?

??? 除此之外,還有一些比較基本的方法,如:?

??? ·為了提高算法的實現效率,減少運算的實際開銷,盡可能把需運行時計算的參數做成查找表或常數數值,從而將運行時的計算轉化為編譯時的計算。這不僅適用于一些比較規整的參數表,對于一些并不規整的運行時計算,特別是比較耗時的計算(如浮點除),也要盡可能使其表格化。?

??? ·浮點數定點化,在編寫MPEG-4的模擬算法時,為了方便,C語言中一般既有整型數,又有浮點數。由于使用的是定點芯片,所以有必要把所有的浮點運算改為定點運算。?

??? ·使用字訪問2個16位數據,將其分別放在32位寄存器的高16位和低16位字段。這樣可以使程序讀取數據的速率提高一倍,從而大大提高執行效率。?

??? ·使用移位指令替代乘除操作,移位指令只有一個時鐘周期,比之乘除運算則可以節約許多時鐘周期。?

??? 最初的C代碼在EVM板上執行,處理速率僅為0.8幀/秒。通過上述方法優化源程序后,可在C6201的EVM板上實現實時的MPEG-4編碼,處理速度為30幀/秒。?

??? DSP芯片的使用范圍已越來越廣。特別在移動通信領域中,軟件無線電、智能天線等新技術的實現都需要強大的數字信號處理的支持。TMS320C6000系列能夠滿足這方面的需求。本文結合在其在MPEG-4編碼中應用的實例,具體闡述了TMS320C6000的軟件優化開發方法。工作中不可避免地存在某些不足,尚待進一步探討。?

參考文獻?

1 任麗香,馬淑芬,李方慧.TMS320C6000系列DSPs的原理與應用[M].北京:電子工業出版社,2000?

2 TI公司.TMS320C62x Multi-channel Evaluation Module?User’s Guide[M].1999?

3 Noordwijkerhout MPEG-4 Video Verification Model[S],?Version16.0ISO/IEC TC1/SC29/WG11 N3312 March,2000?

4 TI公司.TMS320C62x Image-Video Processing Library?Programmer's Reference[M]. 2000?

5 TI公司.On the Implementation of MPEG-4 Motion Compensation Using the TMS320C62x [M].1999

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美一区2区视频在线观看| 欧美电影在线观看完整版| 日韩午夜免费| 亚洲黄色av| 亚洲国产高清一区| 久久精品123| 欧美一级视频免费在线观看| 亚洲一区二区在线看| 宅男66日本亚洲欧美视频| 日韩一级大片在线| 日韩视频永久免费观看| 亚洲美女网站| 在线亚洲国产精品网站| 一区二区三区四区国产| 正在播放欧美视频| 亚洲影院高清在线| 亚洲免费伊人电影在线观看av| 亚洲女女做受ⅹxx高潮| 午夜精品福利一区二区蜜股av| 亚洲永久在线观看| 午夜精品久久| 欧美在线视屏| 亚洲人成啪啪网站| 99视频国产精品免费观看| 亚洲最快最全在线视频| 亚洲调教视频在线观看| 亚洲欧美视频一区| 久久精品在线播放| 榴莲视频成人在线观看| 欧美精品久久一区| 欧美性大战久久久久| 国产精品欧美日韩久久| 国产亚洲成av人片在线观看桃| 伊人久久大香线蕉av超碰演员| 亚洲国产天堂久久综合| 一区二区三区成人 | 亚洲毛片在线| 亚洲自拍电影| 久久精品免费| 一区二区三区蜜桃网| 午夜一区在线| 久久综合伊人| 欧美另类一区二区三区| 国产精品视频男人的天堂 | 国内精品久久久久久久97牛牛| 亚洲福利一区| 一区二区三区视频在线| 欧美一级午夜免费电影| 亚洲精品视频在线看| 亚洲欧美久久久| 久久人人爽国产| 欧美日本不卡| 国产欧美在线观看| 亚洲二区三区四区| 中文av字幕一区| 亚洲国产91| 一本色道久久综合精品竹菊| 欧美一区二区高清| 欧美www视频在线观看| 国产精品swag| 激情婷婷久久| 在线亚洲精品福利网址导航| 久久精品国产96久久久香蕉| 一区二区三区四区五区精品视频| 欧美一级免费视频| 欧美大片在线观看一区二区| 国产精品久久久久三级| 在线成人av| 亚洲欧美日韩精品久久久久| 亚洲人成人一区二区在线观看| 亚洲免费视频网站| 免费观看成人| 国产日本欧美一区二区| 91久久精品一区| 亚洲人成绝费网站色www| 亚洲综合色丁香婷婷六月图片| 亚洲女ⅴideoshd黑人| 亚洲性xxxx| 亚洲黄一区二区三区| 亚洲视屏一区| 狼人天天伊人久久| 国产精品青草久久| 91久久久亚洲精品| 欧美中文字幕在线观看| 亚洲午夜免费视频| 蜜月aⅴ免费一区二区三区| 国产精品免费网站| 亚洲精品激情| 亚洲激情啪啪| 久久九九国产精品怡红院| 欧美性猛交xxxx乱大交退制版| 伊人影院久久| 性欧美大战久久久久久久免费观看 | 亚洲欧美国产高清| 欧美精品黄色| 在线观看视频亚洲| 欧美一区二区视频观看视频| 亚洲影音先锋| 欧美日本不卡| 亚洲欧洲一级| 亚洲精品免费一二三区| 久久亚洲精品伦理| 国产精品美女久久久| 日韩视频不卡| aa国产精品| 欧美激情亚洲视频| 亚洲国产三级| 亚洲精品日本| 欧美国产视频一区二区| 亚洲国产成人av| 亚洲人成77777在线观看网| 久久久综合免费视频| 国产欧美日韩精品a在线观看| 亚洲午夜精品久久| 亚洲综合导航| 国产精品久久久久免费a∨| 一本一本a久久| 亚洲一区二区三区四区中文 | 樱花yy私人影院亚洲| 亚洲国产精品激情在线观看| 久久在精品线影院精品国产| 狠狠综合久久av一区二区老牛| 久久国产精品亚洲77777| 久久久人成影片一区二区三区观看 | 黄色精品网站| 亚洲成色999久久网站| 麻豆成人小视频| 一色屋精品亚洲香蕉网站| 亚洲国产精品va在线观看黑人| 麻豆成人91精品二区三区| 在线免费观看一区二区三区| 亚洲精品女人| 欧美日韩亚洲一区二| 亚洲巨乳在线| 亚洲欧美日本在线| 国产精品中文字幕欧美| 欧美一级视频精品观看| 久久蜜桃精品| 亚洲国产影院| 一区二区三区视频在线观看| 欧美午夜视频| 午夜精品999| 久久综合伊人77777麻豆| 亚洲国产日韩欧美在线图片 | 欧美一二三视频| 国语自产精品视频在线看| 亚洲欧洲一区二区三区| 欧美日韩另类视频| 亚洲欧美成人一区二区在线电影| 久久精品在线观看| 亚洲国产欧美另类丝袜| 亚洲一区区二区| 国产日产高清欧美一区二区三区| 久久成人18免费观看| 欧美激情二区三区| 一区二区三区视频观看| 久久精品一本| 亚洲欧洲在线播放| 亚洲中无吗在线| 国内在线观看一区二区三区| 亚洲精品无人区| 国产精品欧美久久| 亚洲国产成人精品久久久国产成人一区| 欧美成年网站| 正在播放亚洲| 另类激情亚洲| 宅男精品视频| 免费看的黄色欧美网站| 99在线精品视频| 久久字幕精品一区| 中文精品视频一区二区在线观看| 久久久久久久激情视频| 亚洲免费观看高清完整版在线观看熊 | 久久久91精品国产一区二区三区 | 国产精品国产三级国产普通话三级 | 亚洲国产精品一区二区久| 亚洲午夜一级| 精品福利电影| 亚洲女同同性videoxma| 影音先锋亚洲电影| 亚洲男人的天堂在线| 在线看欧美日韩| 性欧美xxxx视频在线观看| 136国产福利精品导航| 先锋资源久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 午夜在线一区二区| 91久久国产精品91久久性色| 欧美伊人久久大香线蕉综合69| 91久久精品视频| 久久国产精品99国产精| 亚洲精品美女在线| 久久一区二区三区av| 亚洲视频一区| 欧美黑人在线播放| 亚洲第一黄网| 国产乱码精品一区二区三区不卡| 一区二区av| 亚洲国产精品悠悠久久琪琪| 久久福利精品|