《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技术 > 业界动态 > H.264软件解码器在PXA270平台上的优化

H.264软件解码器在PXA270平台上的优化

2009-04-24
作者:罗 嵘,何 苦

  摘 要: 研究了嵌入式系統(tǒng)中H.264 Baseline軟件解碼器設(shè)計(jì)和優(yōu)化的問題,提出了四種有效的優(yōu)化方法,并在PXA270平臺(tái)上進(jìn)行了測試。測試結(jié)果顯示,綜合使用提出的四種方法,H.264軟件解碼器在PXA270(520MHz)上運(yùn)行時(shí)幀率可以達(dá)到22f/s(CIF格式)和80f/s(QCIF格式)。
  關(guān)鍵詞: H.264;軟件解碼器;PXA270

?

  視頻編解碼標(biāo)準(zhǔn)H.264是由國際電聯(lián)ITU的視頻編碼專家組VCEG(Video Coding Expert Group)和國際標(biāo)準(zhǔn)化組織ISO的活動(dòng)圖像專家組MPEG(Motion Picture Expert Group)共同組成的聯(lián)合視頻組JVT(Joint Video Team)開發(fā)的視頻編解碼標(biāo)準(zhǔn),也被稱為高級(jí)視頻編碼MPEG-4 AVC(Advanced Video Coding)或MPEG-4 Part10。H.264解碼器[1]的主要模塊有運(yùn)動(dòng)補(bǔ)償、幀間預(yù)測、去塊效應(yīng)濾波、反變換、幀內(nèi)預(yù)測、重建等。
  PXA270嵌入式處理器內(nèi)部包括一個(gè)XScale內(nèi)核[2](兼容ARM9指令集),運(yùn)行頻率最高可以達(dá)到624MHz;一個(gè)無線多媒體指令擴(kuò)展WMMX(Wireless Multi-Media Extension)協(xié)處理器,能夠支持多媒體運(yùn)算指令;還包括一系列外部接口控制器、總線控制器等。
  文獻(xiàn)[3]對H.264解碼器中的幀間預(yù)測、去塊效應(yīng)濾波、反變換、幀內(nèi)預(yù)測、重建等模塊采用了WMMX優(yōu)化,可以使其相對性能提高92%~100%。文獻(xiàn)[4]在PXA270平臺(tái)上設(shè)計(jì)了一個(gè)AVCORE多媒體函數(shù)庫,H.264解碼幀率可以達(dá)到約50f/s(QCIF格式)。文獻(xiàn)[5]則在Xscale處理器上利用WMMX技術(shù)對多種解碼器進(jìn)行了優(yōu)化,取得了較好的相對優(yōu)化效果。但是,這些方法的優(yōu)化效果有限,只利用PXA270的WMMX功能進(jìn)行了優(yōu)化,不能充分利用PXA270處理器的特點(diǎn)。
  為了提高H.264軟件解碼器在PXA270處理器上的性能,本文研究了PXA270處理器和H.264軟件解碼器的特點(diǎn),并針對其特點(diǎn)進(jìn)行了多方面的優(yōu)化。優(yōu)化方法主要包括WMMX并行計(jì)算優(yōu)化、多項(xiàng)式計(jì)算優(yōu)化、系統(tǒng)資源優(yōu)化和濾波算法優(yōu)化四種。
1 H.264解碼器優(yōu)化方法
1.1 WMMX并行計(jì)算優(yōu)化

  在PXA270平臺(tái)上,可以利用PXA270處理器內(nèi)部的WMMX硬件支持對一個(gè)宏塊內(nèi)像素點(diǎn)的乘/加法操作進(jìn)行展開處理,一次執(zhí)行4/8條乘/加法,同時(shí)處理多個(gè)像素點(diǎn)。
  WMMX軟件編程模型部分包括寄存器堆、矢量化的執(zhí)行部件和接口部件三部分[2]。WMMX寄存器堆的位寬為64bit,包括16個(gè)SIMD寄存器、8個(gè)狀態(tài)和控制寄存器。
  WMMX矢量化的執(zhí)行部件,包括一個(gè)執(zhí)行單元、一個(gè)乘累加單元、一個(gè)移位和序列改變單元。利用這些硬件單元,SIMD寄存器可以被組織成字節(jié)(8bit)、半字(16bit)、字(32bit)、雙字(64bit)結(jié)構(gòu),實(shí)現(xiàn)8/4/2/1個(gè)數(shù)據(jù)的并行運(yùn)算。
  利用WMMX的并行計(jì)算功能,H.264軟件解碼器中的很多部分可以被并行化,從而提高計(jì)算效率。例如:在H.264的運(yùn)動(dòng)估計(jì)算法中,進(jìn)行插值操作的部分算法代碼為:
  
  進(jìn)行并行計(jì)算優(yōu)化時(shí),可以對上述代碼中的內(nèi)層循環(huán)部分進(jìn)行展開:
    

  利用ARM匯編語言改寫上面的代碼,調(diào)用WMMX的硬件,可以使得該內(nèi)層循環(huán)中的四個(gè)結(jié)構(gòu)相同的運(yùn)算同時(shí)進(jìn)行,這樣就大大提高了速度。在優(yōu)化過程中,對H.264模塊中的IDCT、IQUANT和插值部分的計(jì)算使用了WMMX并行計(jì)算優(yōu)化。
1.2 多項(xiàng)式計(jì)算優(yōu)化
  利用WMMX硬件并行計(jì)算優(yōu)化,比較適用于各個(gè)像素點(diǎn)使用相同計(jì)算方法的情況。而對于那些每一個(gè)像素點(diǎn)都需要用不同的表達(dá)式進(jìn)行計(jì)算的情況,就需要采用另外的并行優(yōu)化思路。對于那些不便于進(jìn)行循環(huán)展開的代碼部分,可以嘗試對其多項(xiàng)式計(jì)算進(jìn)行優(yōu)化,使用提取公共因子、合并同類項(xiàng)的方法,提高運(yùn)算速度。
  例如,對于如下的表達(dá)式:
   

  上面的表達(dá)式中公因子合并之后,加/減法和乘法運(yùn)算的總數(shù)由原來的16個(gè)變成12個(gè),因而提高了速度。在H.264的軟件解碼器中,運(yùn)動(dòng)補(bǔ)償和幀內(nèi)預(yù)測部分就存在著類似的代碼,可以使用提取公因式的方法來進(jìn)行優(yōu)化。文獻(xiàn)[6]已經(jīng)證明提取公因式進(jìn)行計(jì)算優(yōu)化的方法屬于NP-hard問題,本文給出了一個(gè)比較簡單的近似優(yōu)化算法,其優(yōu)化流程為:用多項(xiàng)式組中的每一個(gè)多項(xiàng)式生成一個(gè)集合Si(i=1,2,…K,K是多項(xiàng)式的個(gè)數(shù)),其元素sij(j=1,2,…k,k是子式的個(gè)數(shù))是該多項(xiàng)式的子式;設(shè)定初始搜索次數(shù)n=0,N為預(yù)先設(shè)定的搜索次數(shù)上限;計(jì)算C,C為整個(gè)多項(xiàng)式組為優(yōu)化前總的計(jì)算次數(shù)。
  while n  選定其中一個(gè)多項(xiàng)式的子式sij;
  計(jì)算:整個(gè)多項(xiàng)式組可以減少的計(jì)算次數(shù)c;
  if c    C=c;
    記錄下子式sij;
  end
n=n+1;
end
  本文提出的算法得到的結(jié)果可能并不是最優(yōu)的,但該方法能降低計(jì)算量,還可以應(yīng)用于除H.264解碼器以外的場合,并且適用于多種架構(gòu)的處理器。在優(yōu)化過程中,對H.264解碼器中的幀內(nèi)預(yù)測模塊使用了多項(xiàng)式優(yōu)化算法。
1.3 PXA270系統(tǒng)資源優(yōu)化
  本文中H.264軟件解碼器最終運(yùn)行在PXA270處理器上。該處理器具有多種頻率可調(diào)組件,其內(nèi)部還具有256KB片內(nèi)SRAM,可以用于顯示圖像存儲(chǔ)。PXA270片內(nèi)系統(tǒng)總線頻率在高速模式下可以達(dá)到208MHz[7],并且LCD控制器的頻率可以調(diào)整,具有直接顯示YUV格式圖像的特性。充分利用好這些特性,可以大大改善H.264軟件解碼器在平臺(tái)上的運(yùn)行效率。在H.264軟件解碼器的代碼中,需要對數(shù)據(jù)進(jìn)行大量的存儲(chǔ)操作,為了提高存儲(chǔ)速度,在運(yùn)行時(shí)可以動(dòng)態(tài)地將系統(tǒng)總線頻率調(diào)整為高速模式,同時(shí)對SDRAM和Flash等存儲(chǔ)器件進(jìn)行訪問速度的調(diào)整,以保證性能要求。
  針對H.264軟件解碼器進(jìn)行的PXA270系統(tǒng)資源優(yōu)化流程如下:
if H.264軟件解碼器運(yùn)行
  保存處理器和總線當(dāng)前配置;
  將處理器內(nèi)核置為超頻頻率上;
  將系統(tǒng)總線頻率設(shè)置為高速模式;
  為解碼器分配PXA270片內(nèi)SRAM作為緩存(受操作系統(tǒng)限制);
end
  if H.264軟件解碼器運(yùn)行結(jié)束
  恢復(fù)處理器和總線配置;
end
  系統(tǒng)級(jí)的優(yōu)化需要對處理器的頻率等關(guān)鍵資源進(jìn)行調(diào)整,這可以通過PXA270處理器的時(shí)鐘管理模塊實(shí)現(xiàn)。
1.4 濾波算法優(yōu)化
  在H.264編解碼算法中,對濾波器算法的規(guī)定具有一定的靈活性[8],可以在不違反標(biāo)準(zhǔn)的情況下使用自己的濾波方法。在改進(jìn)的濾波器中,通常采用的方法是改變子宏塊(Sub-Macroblock)邊界的濾波順序,從而提高存儲(chǔ)效率和數(shù)據(jù)的復(fù)用性[9]。本文設(shè)計(jì)了一個(gè)優(yōu)化的濾波器算法,達(dá)到了一定的效果。
  在H.264標(biāo)準(zhǔn)中,規(guī)定的標(biāo)準(zhǔn)解碼算法是:對于一個(gè)16×16的宏塊(圖像格式為YUV4:2:0),其中各個(gè)4×4的子宏塊邊界的濾波順序如圖1的標(biāo)號(hào)1~48所示。
  在用軟件實(shí)現(xiàn)濾波算法時(shí),一幀圖像數(shù)據(jù)的存儲(chǔ)以二維數(shù)組的方式進(jìn)行。例如,對于CIF(352×288)格式的一幀圖像,其亮度信號(hào)存儲(chǔ)在一個(gè)Y[352][288]數(shù)組中。
  在計(jì)算機(jī)和多數(shù)嵌入式系統(tǒng)的內(nèi)存中,內(nèi)存地址是線性的,因此一個(gè)16×16的亮度宏塊(劃分為16個(gè)4×4大小的子宏塊)中每個(gè)4×4的子宏塊分別被編號(hào)為1~16。1~4子宏塊的第一行數(shù)據(jù)在內(nèi)存中的位置為M1,第二、三、四行數(shù)據(jù)在內(nèi)存M2、M3、M4。M1~M4之間的位置分別被其他16×16的宏塊所占據(jù)。5~8子宏塊在內(nèi)存中的位置為M5~M8,因此在形式上相鄰的兩個(gè)子宏塊1和5,在內(nèi)存中的位置可能差得很遠(yuǎn)。
  在計(jì)算機(jī)系統(tǒng)中,為了充分利用數(shù)據(jù)的空間、時(shí)間相關(guān)性,會(huì)在訪問內(nèi)存中的一個(gè)數(shù)據(jù)時(shí),把該數(shù)據(jù)相鄰區(qū)域的一塊數(shù)據(jù)都加載到緩存中。例如,當(dāng)程序訪問子宏塊1的第一行數(shù)據(jù)時(shí),處理器會(huì)自動(dòng)把整個(gè)M1塊加載到緩存中,即第2~4個(gè)子宏塊的第一行也被加載到緩存中。由于緩存的大小非常有限,內(nèi)存中有很多地址都可以映射到緩存中的同一個(gè)地址處。例如,當(dāng)程序訪問子宏塊5的第一行時(shí),M5被加載到緩存中,就有可能覆蓋掉原來M1在緩存中位置。而對于M1~M3來說,它們在內(nèi)存中的位置靠得比較近,因此可以被映射到緩存中的不同區(qū)域,不會(huì)相互覆蓋。
  對于圖1中的濾波方案,會(huì)存在緩存未命中(Cache Miss)的問題。按照圖1中的濾波順序,每對一個(gè)邊界做濾波都有可能覆蓋掉前一次加載的數(shù)據(jù),這樣會(huì)增加對內(nèi)存的訪問次數(shù),降低速度。為了改進(jìn)這一點(diǎn),本文提出了如圖2所示的新的邊界濾波順序。

?

?


  新方案在多數(shù)情況下可以利用前一次已經(jīng)加載到Cache的數(shù)據(jù)進(jìn)行操作。例如:在對編號(hào)為2、3、4的邊界進(jìn)行濾波時(shí),可以利用對1邊界進(jìn)行濾波時(shí)已經(jīng)加載的數(shù)據(jù)。這樣可以提高去宏塊效應(yīng)濾波器的速度。
  對于YUV4:2:0格式的圖像,傳統(tǒng)的濾波算法在處理一個(gè)16×16的亮度宏塊和兩個(gè)8×8的色度宏塊時(shí),可能在32條邊界(共48條邊界)處發(fā)生數(shù)據(jù)緩存未命中,這些邊界分別是1~24、25~37、41、43、45、47(參見圖1)。而改進(jìn)的濾波算法則可能在11條邊界處發(fā)生數(shù)據(jù)緩存未命中,這些邊界分別是:1、5、9、17、25、33、35、37、41、43、45(參見圖2)。由此可見,改進(jìn)的濾波算法提高了內(nèi)存訪問效率。
2 仿真和測試結(jié)果
2.1 使用WMMX優(yōu)化后的測試結(jié)果

  使用WMMX匯編語言對H.264軟件解碼器進(jìn)行并行計(jì)算優(yōu)化后得到的效果如表1。

  對比表1中的結(jié)果可以看出,WMMX計(jì)算優(yōu)化的效果最為明顯,對幀率的改善可以達(dá)到3f/s~5f/s。WMMX技術(shù)也是PXA27x系列處理器的一個(gè)亮點(diǎn),這一功能使其可與一般DSP的計(jì)算能力相匹敵。
2.2 多項(xiàng)式計(jì)算優(yōu)化的方針和測試結(jié)果
  為了顯示多項(xiàng)式優(yōu)化的效果,首先在ARM(PXA270處理器是兼容ARM體系結(jié)構(gòu)的)仿真環(huán)境下對單個(gè)函數(shù)測試,編譯器采用ARM公司出品的ADS 1.2,在測試過程中,C/C++編譯器的參數(shù)設(shè)置為:-O2-O time -g+ -cpu XXXXX(具體的ARM處理器內(nèi)核類型,如ARM946E-S)。
  在測試過程中,沒有修改編譯器的設(shè)置,為了證明算法的普適性,在多種ARM處理器內(nèi)核上進(jìn)行了仿真。
  仿真時(shí)選用的函數(shù)是:predict_4x4_mode_3;predict_4x4_mode_4;predict_4x4_mode_5;predict_4x4_mode_6;predict_4x4_mode_7;predict_4x4_mode_8。
  這些函數(shù)對應(yīng)幀內(nèi)預(yù)測的第3~8種模式,具體算法可以參照H.264的標(biāo)準(zhǔn)文檔。下面給出函數(shù)predict_
4x4_mode_3進(jìn)行優(yōu)化后的簡單示例。predict_4x4_mode_3在進(jìn)行優(yōu)化前的代碼為:
predict_4x4_mode_3
  Begin

  Y0=(a0+a2+(a1<<1)+2)>>2;
  Y1=Y4=(a1+a3+(a2<<1)+2)>>2;
  Y2=Y5=Y8=(a2+a4+(a3<<1)+2)>>2;
  Y3=Y6=Y9=Y12=(a3+a5+(a4<<1)+2)>>2;
  Y7=Y10=Y13=(a4+a6+(a5<<1)+2)>>2;
  Y11=Y14=(a5+a7+(a6<<1)+2)>>2;
  Y15=(a6+(a7<<1)+a7+2)>>2;
end
  進(jìn)行優(yōu)化后的代碼如下:
predict_4x4_mode_3
Begin
  T0=a0+a1;T1=a1+a2+2;Y0=(T0+T1)>>2;
  T0=a2+a3;Y1=Y4=(T0+T1)>>2;
  T1=a3+a4+2;Y2=Y5=Y8=(T0+T1)>>2;
  T0=a4+a5;Y3=Y6=Y9=Y12=(T0+T1)>>2;
  T1=a5+a6+2;Y7=Y10=Y13=(T0+T1)>>2;
  T0=a6+a7;Y11=Y14=(T0+T1)>>2;
  T1=a7+a7+2;Y15=(T0+T1)>>2;
end
  考慮到程序表示方面的簡明性,在優(yōu)化的程序中使用了一些臨時(shí)變量。從程序中涉及的多項(xiàng)式計(jì)算的表達(dá)式來看,在未優(yōu)化程序中,使用了21次加法和14次移位運(yùn)算;而在優(yōu)化后的程序中,使用了19次加法和7次移位運(yùn)算。對其他幾個(gè)函數(shù)進(jìn)行優(yōu)化后,也有類似的結(jié)果。仿真器得到的結(jié)果請參照表2和表3。

?

  從仿真結(jié)果可以看出,多項(xiàng)式計(jì)算優(yōu)化算法應(yīng)用于某些特定函數(shù)上,可以縮短時(shí)間和縮減代碼體積。不過,多項(xiàng)式計(jì)算優(yōu)化算法在H.264軟件解碼器中的應(yīng)用是有限的,對整個(gè)軟件解碼器性能提高的貢獻(xiàn)不大。
2.3 優(yōu)化測試結(jié)果
  對PXA270系統(tǒng)資源進(jìn)行優(yōu)化后,再運(yùn)行H.264軟件解碼器時(shí)的測試結(jié)果比較見表4。通過系統(tǒng)資源優(yōu)化,可以使H.264軟件解碼器性能提高2f/s~3f/s。這表明系統(tǒng)資源優(yōu)化是提高H.264解碼器性能比較有效的一種方法。從表4可以看出,對去宏塊效應(yīng)濾波器優(yōu)化后,解碼器整體的性能的提高不是很大,這主要是由于濾波運(yùn)算在測試視頻中所占的比重不是很高引起的。編碼時(shí)視頻流所采用的量化器的量化程度比較低,所得的圖像比較平滑,因此需要進(jìn)行的濾波運(yùn)算也少。

?


  將上面提到的各種優(yōu)化方法綜合應(yīng)用到H.264軟件解碼器中,取得的效果相當(dāng)可觀。聯(lián)合使用各種優(yōu)化方法,可以使得各個(gè)方法間相互補(bǔ)充,獲得比單獨(dú)使用更好的優(yōu)化效果,如表4中測試組一和測試組二所示。對H.264軟件解碼器進(jìn)行聯(lián)合優(yōu)化以后,性能的提高達(dá)到40%左右。
  通過在實(shí)際平臺(tái)上的測試可知,PXA270系統(tǒng)資源優(yōu)化和WMMX并行計(jì)算優(yōu)化的貢獻(xiàn)最大,而其他兩種方法的貢獻(xiàn)則要小得多。但是也必須看到,效果好的方法其專用性也會(huì)很強(qiáng),如WMMX并行計(jì)算需要有專門硬件的支持。去宏塊效應(yīng)濾波器算法優(yōu)化和多項(xiàng)式計(jì)算優(yōu)化兩種方法雖然在PXA270平臺(tái)上對H.264軟件解碼器的優(yōu)化效果不佳,但是它們對PXA270內(nèi)部的特定資源依賴很小,通用性較強(qiáng),可以用于其他平臺(tái)或應(yīng)用實(shí)例中,具有一定的使用價(jià)值。


參考文獻(xiàn)
[1] WIEGAND T,SULLIVAN G,LUTHRA A.Draft ITU-T recommendation and final draft international standard of joint?video specification(ITU-T Rec.H.264 | ISO/IEC 14496-10 AVC),Joint Video Team(JVT) of ISO/IEC MPEG & ITU-T VCEG(ISO/IEC JTC1/SC29/WG11 and ITU-T SG16 Q.6)?8th Meeting:Geneva, Switzerland,2003,5.
[2] Intel Corporation.Intel wireless MMXTM technology developer guide,2002.
[3] PAVER N C,KHAN M H,ALDRICH B C,et al.Accelerating mobile video applications using Intel@ wireless?
MMXTM technology.IEEE workshop on signal processing? systems,2003:207-212.
[4] http://www.cyansoft.com.cn/products.php?display=1&select=1,2007-5-23.
[5] PRASAD A,MITTAL A,KUMAR M,et al.Optimization and comparison of computational complexities of standard compliant video decoders on SIMD processors.ICASSP 2007:II-93-II-96.
[6] HOSANGADI A,F(xiàn)ALLAH F,KASTNER R.Factoring and?eliminating common subexpressions in polynomial expressions.ICCAD,2004:169-174.
[7] Intel Corporation.Intel PXA27x processor family developer′s manual,2004.
[8] LIST P,JOCH A,LAINEMA J,et al.Adaptive deblocking?filter,IEEE transactions on circuits and systems for video?technology,2003.
[9] 牛曉雷,戴瓊海,劉燁斌.H.264/AVC解碼器解塊濾波的結(jié)構(gòu)優(yōu)化.計(jì)算機(jī)工程與應(yīng)用,2005:104-106.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。