<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ADSP-BF533處理器的H.264解碼器

          基于ADSP-BF533處理器的H.264解碼器

          作者: 時間:2007-01-24 來源:網(wǎng)絡(luò) 收藏

          H264標(biāo)準(zhǔn)擁有比其他視頻編碼標(biāo)準(zhǔn)更好的壓縮性能,但計算復(fù)雜度高,限制了H264標(biāo)準(zhǔn)的應(yīng)用。BlackfinADI公司推出的低功耗、高性能的定點DSP芯片,有極高的性價比,是H264標(biāo)準(zhǔn)DSP實現(xiàn)的理想平臺。文中探討在Blackfin上通過多種優(yōu)化技術(shù)實現(xiàn)H264實時的方法。并給出實驗結(jié)果。

          關(guān)鍵詞H264 Blackfin 實時

           

          H264ITU TVCEGISOIECMPEG聯(lián)合成立的聯(lián)合視頻組JVT(Joint Video Tearn)共同制定的新視頻編碼標(biāo)準(zhǔn),定位于覆蓋整個視頻應(yīng)用領(lǐng)域。H264標(biāo)準(zhǔn)采用了可變大小宏塊的運動補(bǔ)償、多幀參考、整數(shù)變換、14像素精度的運動估計、去塊效應(yīng)濾波器等新技術(shù),因而獲得更好的壓縮性能,同時也導(dǎo)致了運算量的大幅度增加。


          Blackfin
          采用了ADI公司和英特爾公司共同開發(fā)的微信號結(jié)構(gòu),在結(jié)構(gòu)中加人專門的視頻處理指令,工作頻率高達(dá)756 MHz,能完成12OOM次/s乘加操作。與采用超標(biāo)量結(jié)構(gòu)或超長指令集的DSP(TIC6000系列)相比,Blackfin處理器在功耗、成本方面具有很大的優(yōu)勢,非常適合嵌入式的視頻應(yīng)用。

           

          1 H264視頻編碼標(biāo)準(zhǔn)

          H264視頻編的基本結(jié)構(gòu)與早期的編碼標(biāo)準(zhǔn)(H263、MPEG4)相似,都是由運動補(bǔ)償、變換、量化、熵編碼、環(huán)路去塊效應(yīng)濾波器等功能單元組成的。H264標(biāo)準(zhǔn)的改進(jìn)主要體現(xiàn)在各功能模塊內(nèi)部。H_264的重大改進(jìn)表現(xiàn)在以下幾個方面:

          ①高精度的14像素精度的運動預(yù)測。

          ②多種宏塊劃分模式。每個宏塊(1616像素)的亮度分量有7種分區(qū)方法:1616、168816、88、8448、44。

          ③多幀預(yù)測。在幀間編碼時,可選5個不同的參考幀。

          ④整數(shù)變換。采用基于44像素塊的整數(shù)變換代替DCT變換。

          H_264AVC支持兩種熵編碼方法,即CAVLC(基于上下文的自適應(yīng)可變長編碼)CABAC(基于上下文的自適應(yīng)算術(shù)編碼)。CAVLC的抗差錯能力比較高,而編碼效率比CABAC低;CABAC編碼效率高,但需要的計算量和存儲容量更大。

          ⑥幀內(nèi)預(yù)測編碼。H264采用了多種設(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)境。

          H264分為7種不同的框架(profile)――BaselineprofileMain profiIe、Extended profile、High profikHigh10 profik、High422 profileHigh 4;44,分別代表不同的技術(shù)限制和算法集合。其中baseline prome的使用是不收版權(quán)費的。

           

          2 基于的軟硬件實現(xiàn)平臺

          硬件平臺采用ADI公司的 EZkit Lite評估板。此評估板包括lADSPBF533處理器,32MB SDRAM,2 MB Flash,ADVl836音頻編解碼器外接4輸入/6輸出音頻接口,ADV7183視頻解碼器和ADV7171視頻編碼器外接3輸入/3輸出視頻接口,1UART接口,1USB調(diào)試接口,1JTAG調(diào)試接口。評估板系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

           

          評估板上采用的ADSPBF533處理器,工作頻率高達(dá)756 MHz。該處理器有以下特點:雙16位乘法累加器;雙40位算術(shù)邏輯單元(ALU);48位視頻ALU140

          位移位器;專用的視頻信號處理指令;148 KB的片內(nèi)存儲器(16 KB可作為指令Cache32 KB可作為數(shù)據(jù)Cache);動態(tài)電源管理功能等。Blackfin處理器還包括豐富的外設(shè)和接口:EBIU接口(4128 MB SDRAM接口,4l MB異步存儲器接口),3個定時/計數(shù)器,1UART1SPI接口,2個同步串行接口,1路并行外設(shè)接口(支持ITU656數(shù)據(jù)格式)等等。Blackfin處理器在結(jié)構(gòu)上充分體現(xiàn)了對媒體應(yīng)用(特別是視頻應(yīng)用)算法的支持。


          軟件驗證采用如下方式:首先,通過
          DSP仿真器將H264編碼文件拷貝到評估板的存儲器里。然后,軟件從存儲器中讀取編碼文件的數(shù)據(jù),進(jìn)行解碼操作。最后,將解碼的數(shù)據(jù)通過PPI接口輸出到ADV7171芯片,ADV7171芯片將輸入的視頻數(shù)據(jù)編碼為PAL格式輸出到顯示器上二進(jìn)行顯示。


          Blackfin
          處理器的軟件開發(fā)平臺是VisualDSP++40

           

          3 H 264實時解碼器軟件設(shè)計

          3.1軟件總體設(shè)計

          為了實現(xiàn)實時解碼的要求,需要優(yōu)化程序的設(shè)計。優(yōu)化流程如下:

          ①在PC機(jī)上進(jìn)行算法的驗證和評估、優(yōu)化程序的流程設(shè)計和數(shù)據(jù)結(jié)構(gòu)設(shè)計。

          ②將程序代碼移植到Blackfin處理器。在VisualDSP++集成開發(fā)環(huán)境里進(jìn)行編譯,刪除PC平臺相關(guān)的代碼,添加DSP平臺相關(guān)的代碼。

          ③進(jìn)行基于DSP平臺的優(yōu)化操作。設(shè)置速度優(yōu)化的編譯參數(shù),進(jìn)行C語言級的優(yōu)化,用匯編指令改寫最耗時的函數(shù),通過使用專用的向量指令和并行指令減少函數(shù)的執(zhí)行時間。


          3.2
          PC機(jī)上實現(xiàn)并優(yōu)化解碼器程序

          解碼器程序參考了JM96,并在以下方面作了優(yōu)化:

          ①由于只支持Baseline profile,刪除有關(guān)B幀、SI片、SP片和數(shù)據(jù)分割等不支持特性的冗余程序代碼;

          ②修正JM96,每次處理一個Slice時都要分配內(nèi)存,讀取其中信息,再釋放內(nèi)存,合理安排內(nèi)存空間的分配和釋放;

          ③將I幀、P幀分別獨立解碼,宏塊解碼也按預(yù)測模式和預(yù)測方向分成不同的解碼模塊,以省去中間的重復(fù)判斷,提高解碼速度;

          ④優(yōu)化CAVLC碼表的查詢方法。


          3.3
          程序移植

          VisualDSP++是一款支持Blackfin處理器的集成開發(fā)、調(diào)試環(huán)境,包括VisuaIDSP++內(nèi)核(VDK)CC++編譯器、高級圖形繪制工具、調(diào)試工具、器件模擬器等多種功能;能夠很好地支持在Blackfin處理器上用CC++語言進(jìn)行開發(fā)工作。


          移植的第一步是除去所有的編譯環(huán)境不支持的函數(shù)(例如某些時間相關(guān)的函數(shù)),將文件操作修改為讀取文件數(shù)據(jù)緩存的操作,刪除SNR信息收集和信息打印輸出等DSP平臺實現(xiàn)不需要的代碼。第二步是添加與硬件相關(guān)的代碼。這些代碼包括系統(tǒng)初始化代碼、輸出模塊代碼、中斷服務(wù)程序和解碼速率控制程序等程序代碼。


          移植完畢后,就實現(xiàn)了基于ADSP-BF533處理器的H_264解碼器;但速度達(dá)不到實時解碼的要求,還需要進(jìn)行優(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è)置為速度最優(yōu)化;打開自動內(nèi)聯(lián)開關(guān);打開“Interprocedural optimization(過程間優(yōu)化)開關(guān);使用VisualDSP++編譯器的PGO(ProfileGuided Optimization)優(yōu)化編譯技術(shù)。


          (2)C
          程序級優(yōu)化

          C程序級的優(yōu)化主要是針對BIackfin處理器的具體特點進(jìn)行優(yōu)化:

          ①編寫鏈接描述文件,將經(jīng)常用的數(shù)據(jù)存儲在片內(nèi)存儲器,例如CAVLC熵解碼的碼表;啟用指令Cache和數(shù)據(jù)Cache,設(shè)置好啟用Cache機(jī)制的指令地址和數(shù)據(jù)地址。

          ②將除法操作轉(zhuǎn)換為乘法操作或者采用查表法計算。

          ③減少對片外存儲器的訪問次數(shù)。對于經(jīng)常訪問的片外存儲器區(qū)域,設(shè)置Cache使能,并可設(shè)置Cache鎖定,防止被緩存的數(shù)據(jù)被替換,減少Cache未命中的幾率。

          ④對于能夠用較短的數(shù)據(jù)類型表達(dá)的數(shù)據(jù)改用較短的數(shù)據(jù)類型表達(dá),例如原定義為int類型的44逆整數(shù)變換的輸人數(shù)據(jù),實際上可以定義為short類型。


          (3)
          匯編級優(yōu)化

          匯編級優(yōu)化通常遵循以下原則:

          使用寄存器代替局部變量。如果局部變量用來保存計算的中間結(jié)果,那么用寄存器

          代替局部變量可以省掉很多訪問內(nèi)存的時問。

          使用硬件循環(huán)代替軟件循環(huán)。.Blackfin處理器有專用的硬件支持兩級嵌套的零開銷

          硬件循環(huán)。用硬件循環(huán)代替軟件循環(huán)可避免堵塞流水線,提高速度。

          ③使用并行指令和向量指令。使用并行指令和向量指令,可以充分利用Blackfin處理器的SIMD系統(tǒng)結(jié)構(gòu)的優(yōu)點和內(nèi)部硬件資源的并行處理優(yōu)點,減少指令執(zhí)行次數(shù)和提高指令執(zhí)行效率。使用1條并行指令同時執(zhí)行2條或3條非并行指令。向量指令可以同時對多個數(shù)據(jù)流進(jìn)行相同的加工操作。

          ④使用視頻處理指令。視頻處理應(yīng)用可以使用Blackfin處理器專用的視頻處理指令,提高執(zhí)行效率。


          將最耗時的一些函數(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ù)。


          下面以
          44矩陣逆整數(shù)變換函數(shù)itrans14像素插值濾波get_block(),說明用匯編指令優(yōu)化帶來的性能提高。44矩陣的逆整數(shù)變換函數(shù)itrans采用的是2級蝶形運算,先對44矩陣的每一行分別做行逆變換,再對每一列做列逆變換。一維變換采用如圖2所示的蝶形算法。

          Blackfin處理器的SIMD結(jié)構(gòu)支持向量操作,最多可以在1個周期內(nèi)完成416位的加法操作。它的并行指令能同時進(jìn)行算術(shù)運算和兩個數(shù)據(jù)的裝載/存儲操作。例如上述的蝶形運算可以用如下指令實現(xiàn)(設(shè)寄存器IO中保存了輸人數(shù)據(jù)y[4][4]的地址,I2中保存了系數(shù)數(shù)組cof[2]={0x7fff0x4000}的地址,Il中保存了臨時變量tmp[4][4]的地址,R2R1保存的是中問結(jié)果)

          R7=[IO++]

          Al=R6I*R71,AO=R61*R71(IS)┃│I R5=

          [10++]┃┃[││++]=R2;

          R4h =(A1一一R51*R61),R41=(AO+=R51*R61)(IS)││W[I1++]=R1h

          R71=R61*R5h(IS)1 W[11++]=R11;

          R5=R7>>>1(v);

          A1=R61*R5hAOR61*R51(IS);

          R3h(A1+R61*R71), R31(AO =R61*R7h)(IS)

          R2=R4+l+R3,R1=R4一│ R3


          完成一次一維逆變換只需
          8條指令,算上函數(shù)調(diào)用的開銷和其他一些輔助指令,完成一個44矩陣的逆整數(shù)變換時總共需要82條指令周期。表1是優(yōu)化前、后的比較。


          get_block
          函數(shù)對像素矩陣進(jìn)行14像素插值操作。先用六階濾波器進(jìn)行12像素插值,然后用線性內(nèi)插法進(jìn)行l4像素插值。


          l
          2像素b計算方法為:b=round((E5F+20G+20H5I+j)32)。示意圖如圖3所示。E、FG、H、IJ是整數(shù)像素,bGH之問的12像素。

           

          像素的亮度值為unsigned char類型,先利用并行指令可以在1個指令周期內(nèi)將8個像素的亮度值讀到寄存器,然后利用視頻專用指令將4個字節(jié)解包到1個寄存器對(R1OR32)中去,利用向量指令在1個周期內(nèi)進(jìn)行2次乘加操作。通過視頻專用指令、向量指令和并行指令的使用,減少了函數(shù)指令的指令周期數(shù)。

           

          4 實驗結(jié)果

          EZKit533開發(fā)板上測試了解碼器算法,對CIF格式(352288)foreman測試序列,可以達(dá)到4550幀/s的解碼速度;對CIF格式的mobile測試序列,能夠達(dá)到40幀~44幀的解碼速度。如果增加解碼速率控制模塊,可以穩(wěn)定地實現(xiàn)以30幀/s的速率播放CIF測試序列。實驗結(jié)果證明,在Blackiln處理器上實現(xiàn)H264實時解碼器是可行的。ADI公司甚至聲稱可以在600 MtzBF533處理器上實現(xiàn)D1(720576)格式的視頻實時解碼器。


          BIackfin
          處理器有低功耗、低成本和高性能的特點。在Blackfin處理器上實現(xiàn)的H264視頻解碼器很適合用于IP機(jī)頂盒、可視電話、PMP(便攜式媒體播放器)等嵌人式視頻應(yīng)用中。



          關(guān)鍵詞: 解碼器 處理器 BF533 ADSP 基于

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();