當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]文中探討在Blackfin處理器上通過(guò)多種優(yōu)化技術(shù)實(shí)現(xiàn)H.264實(shí)時(shí)解碼器的方法。并給出實(shí)驗(yàn)結(jié)果。

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

關(guān)鍵詞H264  Blackfin  ADSP  實(shí)時(shí)解碼器  BF533

 

 

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


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

 

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

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

①高精度的基于14像素精度的運(yùn)動(dòng)預(yù)測(cè)。

②多種宏塊劃分模式。每個(gè)宏塊(16×16像素)的亮度分量有7種分區(qū)方法:16×16、16×88×16、8×88×4、4×84×4。

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

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

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

    ⑥幀內(nèi)預(yù)測(cè)編碼。H264采用了多種設(shè)計(jì)合理的幀內(nèi)預(yù)測(cè)模式,大大降低了I幀的編碼率。

    ⑦網(wǎng)絡(luò)適配層NAL(Network Abstraction Layer)為視頻編碼層提供一個(gè)與網(wǎng)絡(luò)無(wú)關(guān)的統(tǒng)一接口,使視頻編碼數(shù)據(jù)能適應(yīng)不同的網(wǎng)絡(luò)應(yīng)用環(huán)境。

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

 

2  基于ADSPBF533的軟硬件實(shí)現(xiàn)平臺(tái)

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

 

 

    評(píng)估板上采用的ADSPBF533處理器,工作頻率高達(dá)756 MHz。該處理器有以下特點(diǎn):雙16位乘法累加器;雙40位算術(shù)邏輯單元(ALU);4個(gè)8位視頻ALU;1個(gè)40

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


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


    Blackfin
處理器的軟件開(kāi)發(fā)平臺(tái)是VisualDSP++40。

 

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

3.1軟件總體設(shè)計(jì)

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

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

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

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


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

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

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

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

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

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


3.3
程序移植

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

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


   
移植完畢后,就實(shí)現(xiàn)了基于ADSP-BF533處理器的H_264解碼器;但速度達(dá)不到實(shí)時(shí)解碼的要求,還需要進(jìn)行優(yōu)化。


3.4
基于DSP平臺(tái)的優(yōu)化

    基于DSP平臺(tái)的優(yōu)化分為系統(tǒng)級(jí)優(yōu)化、C程序級(jí)優(yōu)化和匯編級(jí)優(yōu)化。


(1)
系統(tǒng)級(jí)優(yōu)化

    打開(kāi)編譯器中的優(yōu)化開(kāi)關(guān),設(shè)置為速度最優(yōu)化;打開(kāi)自動(dòng)內(nèi)聯(lián)開(kāi)關(guān);打開(kāi)“Interprocedural optimization(過(guò)程間優(yōu)化)開(kāi)關(guān);使用VisualDSP++編譯器的PGO(ProfileGuided Optimization)優(yōu)化編譯技術(shù)。


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

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

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

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

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

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


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

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

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

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

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

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

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

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


    將最耗時(shí)的一些函數(shù)用匯編語(yǔ)言改寫(xiě),充分利用
Blackfin處理器的S1MD結(jié)構(gòu)的優(yōu)點(diǎn)和硬件上的并行性,在一個(gè)指令周期內(nèi)執(zhí)行多個(gè)操作,減少函數(shù)執(zhí)行需要的指令周期。最耗時(shí)的函數(shù)有宏塊解碼函數(shù)decode_one_macroblock、逆整數(shù)變換函數(shù)itrans、去塊效應(yīng)濾波函數(shù)EdgeLoop、濾波門(mén)限計(jì)算函數(shù)Get_Strength等函數(shù)。


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

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

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

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


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


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


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

 

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

 

4 實(shí)驗(yàn)結(jié)果

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


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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉