基于ADSP-BF533處理器的H.264解碼器
出處:張迅 發(fā)布于:2007-04-18 10:57:23
H.264是ITU T的VCEG和ISO/IEC的MPEG聯(lián)合成立的聯(lián)合視頻組JVT(Joint Video Tearn)共同制定的新視頻編碼標(biāo)準(zhǔn),定位于覆蓋整個視頻應(yīng)用領(lǐng)域。H.264標(biāo)準(zhǔn)采用了基于可變大小宏塊的運動補償、多幀參考、整數(shù)變換、基于1/4像素的運動估計、去塊效應(yīng)濾波器等新技術(shù),因而獲得更好的壓縮性能,同時也導(dǎo)致了運算量的大幅度增加。
Blackfin處理器采用了ADI公司和英特爾公司共同開發(fā)的微信號結(jié)構(gòu),在結(jié)構(gòu)中加人專門的視頻處理指令,工作頻率高達756 MHz,能完成12OOM次/s乘加操作。與采用超標(biāo)量結(jié)構(gòu)或超長指令集的DSP(如TI的C6000系列)相比,Blackfin處理器在功耗、成本方面具有很大的優(yōu)勢,非常適合嵌入式的視頻應(yīng)用。
H.264視頻編解碼器的基本結(jié)構(gòu)與早期的編碼標(biāo)準(zhǔn)(H.263、MPEG4等)相似,都是由運動補償、變換、量化、熵編碼、環(huán)路去塊效應(yīng)濾波器等功能單元組成的。H.264標(biāo)準(zhǔn)的改進主要體現(xiàn)在各功能模塊內(nèi)部。H_264的重大改進表現(xiàn)在以下幾個方面:
?、俑叩幕?/4像素的運動預(yù)測。
②多種宏塊劃分模式。每個宏塊(16×16像素)的亮度分量有7種分區(qū)方法:16×16、16×8、8×16、8×8、8×4、4×8、4×4。
③多幀預(yù)測。在幀間編碼時,可選5個不同的參考幀。
?、苷麛?shù)變換。采用基于4×4像素塊的整數(shù)變換代替DCT變換。
?、軭_264/AVC支持兩種熵編碼方法,即CAVLC(基于上下文的自適應(yīng)可變長編碼)和CABAC(基于上下文的自適應(yīng)算術(shù)編碼)。CAVLC的抗差錯能力比較高,而編碼效率比CABAC低;CABAC編碼效率高,但需要的計算量和存儲容量更大。
⑥幀內(nèi)預(yù)測編碼。H.264采用了多種設(shè)計合理的幀內(nèi)預(yù)測模式,大大降低了I幀的編碼率。
⑦網(wǎng)絡(luò)適配層NAL(Network Abstraction Layer)為視頻編碼層提供一個與網(wǎng)絡(luò)無關(guān)的統(tǒng)一接口,使視頻編碼數(shù)據(jù)能適應(yīng)不同的網(wǎng)絡(luò)應(yīng)用環(huán)境。
H.264分為7種不同的框架(profile)——Baselineprofile、Main profiIe、Extended profile、High profik、High10 profik、High4:2:2 profile和High 4;4:4,分別代表不同的技術(shù)限制和算法集合。其中baseline prome的使用是不收版權(quán)費的。
硬件平臺采用ADI公司的ADSP—BF533 EZ—kit Lite評估板。此評估板包括l塊ADSP—BF533處理器,32MB SDRAM,2 MB? Flash,ADVl836音頻編解碼器外接4輸入/6輸出音頻接口,ADV7183視頻解碼器和ADV7171視頻編碼器外接3輸入/3輸出視頻接口,1個UART接口,1個USB調(diào)試接口,1個JTAG調(diào)試接口。評估板系統(tǒng)結(jié)構(gòu)框圖如所示。
軟件驗證采用如下方式:首先,通過DSP仿真器將H.264編碼文件拷貝到評估板的存儲器里。然后,軟件從存儲器中讀取編碼文件的數(shù)據(jù),進行解碼操作。,將解碼的數(shù)據(jù)通過PPI接口輸出到ADV7171芯片,ADV7171芯片將輸入的視頻數(shù)據(jù)編碼為PAL格式輸出到顯示器上二進行顯示。
Blackfin處理器的軟件開發(fā)平臺是VisualDSP++4.0。
3.1軟件總體設(shè)計
為了實現(xiàn)實時解碼的要求,需要優(yōu)化程序的設(shè)計。優(yōu)化流程如下:
?、僭赑C機上進行算法的驗證和評估、優(yōu)化程序的流程設(shè)計和數(shù)據(jù)結(jié)構(gòu)設(shè)計。
②將程序代碼移植到Blackfin處理器。在Visual—DSP++集成開發(fā)環(huán)境里進行編譯,刪除PC平臺相關(guān)的代碼,添加DSP平臺相關(guān)的代碼。
?、圻M行基于DSP平臺的優(yōu)化操作。設(shè)置速度優(yōu)化的編譯參數(shù),進行C語言級的優(yōu)化,用匯編指令改寫耗時的函數(shù),通過使用專用的向量指令和并行指令減少函數(shù)的執(zhí)行時間。
3.2 在PC機上實現(xiàn)并優(yōu)化解碼器程序
解碼器程序參考了JM9.6,并在以下方面作了優(yōu)化:
?、儆捎谥恢С諦aseline profile,刪除有關(guān)B幀、SI片、SP片和數(shù)據(jù)分割等不支持特性的冗余程序代碼;
?、谛拚齁M9.6,每次處理一個Slice時都要分配內(nèi)存,讀取其中信息,再釋放內(nèi)存,合理安排內(nèi)存空間的分配和釋放;
?、蹖幀、P幀分別獨立解碼,宏塊解碼也按預(yù)測模式和預(yù)測方向分成不同的解碼模塊,以省去中間的重復(fù)判斷,提高解碼速度;
?、軆?yōu)化CAVLC碼表的查詢方法。
3.3 程序移植
VisualDSP++是一款支持Blackfin處理器的集成開發(fā)、調(diào)試環(huán)境,包括VisuaIDSP++內(nèi)核(VDK)、C/C++編譯器、圖形繪制工具、調(diào)試工具、器件模擬器等多種功能;能夠很好地支持在Blackfin處理器上用C/C++語言進行開發(fā)工作。
移植的步是除去所有的編譯環(huán)境不支持的函數(shù)(例如某些時間相關(guān)的函數(shù)),將文件操作修改為讀取文件數(shù)據(jù)緩存的操作,刪除SNR信息收集和信息打印輸出等DSP平臺實現(xiàn)不需要的代碼。第二步是添加與硬件相關(guān)的代碼。這些代碼包括系統(tǒng)初始化代碼、輸出模塊代碼、中斷服務(wù)程序和解碼速率控制程序等程序代碼。
移植完畢后,就實現(xiàn)了基于ADSP-BF533處理器的H_264解碼器;但速度達不到實時解碼的要求,還需要進行優(yōu)化。
3.4 基于DSP平臺的優(yōu)化
基于DSP平臺的優(yōu)化分為系統(tǒng)級優(yōu)化、C程序級優(yōu)化和匯編級優(yōu)化。
(1)系統(tǒng)級優(yōu)化
打開編譯器中的優(yōu)化開關(guān),設(shè)置為速度化;打開自動內(nèi)聯(lián)開關(guān);打開“Interprocedural optimization”(過程間優(yōu)化)開關(guān);使用VisualDSP++編譯器的PGO(Profile—Guided Optimization)優(yōu)化編譯技術(shù)。
(2)C程序級優(yōu)化
C程序級的優(yōu)化主要是針對BIackfin處理器的具體特點進行優(yōu)化:
?、倬帉戞溄用枋鑫募瑢⒔?jīng)常用的數(shù)據(jù)存儲在片內(nèi)存儲器,例如CAVLC熵解碼的碼表;啟用指令Cache和數(shù)據(jù)Cache,設(shè)置好啟用Cache機制的指令地址和數(shù)據(jù)地址。
②將除法操作轉(zhuǎn)換為乘法操作或者采用查表法計算。
③減少對片外存儲器的訪問次數(shù)。對于經(jīng)常訪問的片外存儲器區(qū)域,設(shè)置Cache使能,并可設(shè)置Cache鎖定,防止被緩存的數(shù)據(jù)被替換,減少Cache未命中的幾率。
④對于能夠用較短的數(shù)據(jù)類型表達的數(shù)據(jù)改用較短的數(shù)據(jù)類型表達,例如原定義為int類型的4×4逆整數(shù)變換的輸人數(shù)據(jù),實際上可以定義為short類型。
(3)匯編級優(yōu)化
匯編級優(yōu)化通常遵循以下原則:
將耗時的一些函數(shù)用匯編語言改寫,充分利用Blackfin處理器的S1MD結(jié)構(gòu)的優(yōu)點和硬件上的并行性,在一個指令周期內(nèi)執(zhí)行多個操作,減少函數(shù)執(zhí)行需要的指令周期。耗時的函數(shù)有宏塊解碼函數(shù)decode_one_macroblock、逆整數(shù)變換函數(shù)itrans、去塊效應(yīng)濾波函數(shù)EdgeLoop、濾波門限計算函數(shù)Get_Strength等函數(shù)。
下面以4×4矩陣逆整數(shù)變換函數(shù)itrans和1/4像素插值濾波get_block(),說明用匯編指令優(yōu)化帶來的性能提高。4×4矩陣的逆整數(shù)變換函數(shù)itrans采用的是2級蝶形運算,先對4×4矩陣的每一行分別做行逆變換,再對每一列做列逆變換。一維變換采用如所示的蝶形算法。
完成一維逆變換只需8條指令,算上函數(shù)調(diào)用的開銷和其他一些輔助指令,完成一個4×4矩陣的逆整數(shù)變換時總共需要82條指令周期。表1是優(yōu)化前、后的比較。
get_block函數(shù)對像素矩陣進行1/4像素插值操作。先用六階濾波器進行1/2像素插值,然后用線性內(nèi)插法進行l(wèi)/4像素插值。
l/2像素b計算方法為:b=round((E一5F+20G+20H一5I+j)/32)。示意圖如所示。E、F、G、H、I、J是整數(shù)像素,b是G和H之問的1/2像素。
在EZKit533開發(fā)板上測試了解碼器算法,對CIF格式(352×288)的foreman測試序列,可以達到45~50幀/s的解碼速度;對CIF格式的mobile測試序列,能夠達到40幀~44幀的解碼速度。如果增加解碼速率控制模塊,可以穩(wěn)定地實現(xiàn)以30幀/s的速率播放CIF測試序列。實驗結(jié)果證明,在Blackiln處理器上實現(xiàn)H.264實時解碼器是可行的。ADI公司甚至聲稱可以在600 Mtz的BF533處理器上實現(xiàn)D1(720×576)格式的視頻實時解碼器。
BIackfin處理器有低功耗、低成本和高性能的特點。在Blackfin處理器上實現(xiàn)的H.264視頻解碼器很適合用于IP機頂盒、可視電話、PMP(便攜式媒體播放器)等嵌人式視頻應(yīng)用中。
參考文獻:
[1]. AVC datasheet http://m.58mhw.cn/datasheet/AVC_1518400.html.
[2]. ADV7183 datasheet http://m.58mhw.cn/datasheet/ADV7183_1055694.html.
[3]. ADV7171 datasheet http://m.58mhw.cn/datasheet/ADV7171_125144.html.
[4]. ALU datasheet http://m.58mhw.cn/datasheet/ALU_2089372.html.
[5]. ADSP-BF533 datasheet http://m.58mhw.cn/datasheet/ADSP-BF533_314552.html.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機技術(shù)特性與嵌入式開發(fā)實踐指南2026/1/7 10:00:02
- 單片機(MCU)與數(shù)字信號處理器(DSP)分類及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級DSP信號處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機專用SoC單片機2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類型擴充定義2025/10/27 13:59:22









