趙建仁,邢 玲,陳 蕾
(西南科技大學(xué) 信息工程學(xué)院,綿陽(yáng) 四川 621010)
在當(dāng)今多媒體技術(shù)的不斷進(jìn)步下,手機(jī)視頻、IP機(jī)頂盒、HD-TV(高清電視)、Bluetooth(藍(lán)牙)成為其發(fā)展前沿的代表,這就需要低功耗的嵌入式處理器和具備高分辨率的輸出設(shè)備。為了支持高清視頻的實(shí)時(shí)編解碼,必須提供有效的硬件體系結(jié)構(gòu),因?yàn)樵谝曨l編解碼過(guò)程中包含了大量的數(shù)據(jù)處理,這些數(shù)據(jù)的處理大部分都是在像素(8 bits)水平進(jìn)行的,比如說(shuō)在宏塊(16×16)里面的每個(gè)像素點(diǎn)上,其處理的方式包含乘法、累加、加法、像素掃描、四舍五入、移位、飽和度計(jì)算等??紤]到相同的處理將在宏塊內(nèi)所有的像素點(diǎn)上進(jìn)行,這里采用并行的處理方式將有效地提高編解碼效率,CEVA的VLIW和SIMD技術(shù)在這里有突出的作用[1]。
現(xiàn)在許多用于無(wú)線(xiàn)和移動(dòng)多媒體應(yīng)用的復(fù)雜SOC都采用多處理架構(gòu)來(lái)提供最佳性能和所需的豐富功能集,這種多處理器方案通常意味著整個(gè)應(yīng)用的調(diào)試會(huì)更為復(fù)雜,增加了開(kāi)發(fā)成本。CEVA與ARM9的組合簡(jiǎn)化了調(diào)試過(guò)程,同時(shí)也加強(qiáng)了對(duì)嵌入在子系統(tǒng)和軟硬件應(yīng)用解決方案中的全面多處理器的支持[2]。CEVA指令集在視頻編解碼算法優(yōu)化上也有著非常好的適用性。
現(xiàn)有許多新的復(fù)雜的算法被運(yùn)用到不同的處理器上[3],但這些算法并不適用于CEVA的SIMD結(jié)構(gòu)。文中通過(guò)VLIW實(shí)現(xiàn)并行算法的操作,多數(shù)據(jù)的處理利用SIMD技術(shù)通過(guò)單指令完成,VLIW允許一個(gè)周期同時(shí)執(zhí)行8條單指令,這樣不僅僅提高了DSP的處理能力,也降低了能耗。
筆者著重于利用SIMD技術(shù)對(duì)WMV解碼器算法進(jìn)行優(yōu)化設(shè)計(jì)與仿真實(shí)現(xiàn)。所描述的VC-1解碼器[4]優(yōu)化方法也同樣適合于其它的編解碼如MPEG-4、H.264等。
文中所采用的是CEVA-X1622型號(hào)的DSP芯片[5],它具備的一些主要特性包含:高代碼密度,支持16位和32位兩種指令長(zhǎng)度、9級(jí)流水線(xiàn)、16個(gè)40位的累加寄存器、16個(gè)32位的存儲(chǔ)器訪(fǎng)問(wèn)和尋址寄存器、支持多種尋址方式、豐富的指令集功能、對(duì)8位和16位的分離操作提供全面支持。
CEVA-X系列是一個(gè)基于超長(zhǎng)指令字結(jié)合單指令多數(shù)據(jù)處理的DSP芯片,利用這一特點(diǎn)能夠更好的實(shí)現(xiàn)數(shù)據(jù)并行處理,提高代碼密度,并有效地降低功耗。如圖1所示,CEVA-X塊圖大致分為3個(gè)部分:PCU(程序控制單元)、DAAU(數(shù)據(jù)地址運(yùn)算單元)、CBU(運(yùn)算與位操作單元)。PCU分為3個(gè)子單元:指令分派器、程序排序器和OCEM(片上仿真模塊)。CBU負(fù)責(zé)所有的DSP計(jì)算和移位操作,它包含4個(gè)計(jì)算子單元(M0、M1、S、L),子單元是相互獨(dú)立的并且能夠進(jìn)行并行處理,CBU還包含有16個(gè)40位寄存器組成的累加寄存器文件(ACF),如圖2所示,每一個(gè)40位的累加器由2個(gè)16位部分和一個(gè)8擴(kuò)展位組成,擴(kuò)展位主要在計(jì)算中起保護(hù)作用。DAAU主要用于控制所有的數(shù)據(jù)存儲(chǔ)單元,它有2個(gè)相同的加載/存儲(chǔ)單元(LS0和 LS1),還包含有 25個(gè) 32位的地址寄存器文件。
圖1 CEVA-X塊圖Fig.1 CEVA-X architecture diagram
圖2 40位累加寄存器結(jié)構(gòu)圖Fig.2 40-bit accumulate register structure
VC-1[6]是源于微軟公司視頻壓縮編碼技術(shù)WMV9,經(jīng)過(guò)美國(guó)電影與電視工程協(xié)會(huì)(SMPTE)審批并命名的。VC-1支持3個(gè)類(lèi)別:簡(jiǎn)單類(lèi)主要針對(duì)低復(fù)雜度的圖像壓縮應(yīng)用,主要類(lèi)是在高碼率或高復(fù)雜度的視頻傳輸中得到廣泛應(yīng)用,而高級(jí)類(lèi)是在主要類(lèi)的基礎(chǔ)上增加了隔行方式的廣播級(jí)應(yīng)用,本文把研究的重點(diǎn)放在了主要類(lèi),解碼流程如圖3所示。
VC-1區(qū)別于其它視頻編解碼標(biāo)準(zhǔn)主要是采用了自適應(yīng)塊變換、16位精度的變換處理、多種方式的運(yùn)動(dòng)補(bǔ)償、環(huán)路濾波和重疊平滑化、均勻與非均與量化[7]。通過(guò)上述優(yōu)點(diǎn),它能夠利用較低的計(jì)算復(fù)雜度實(shí)現(xiàn)高清的視頻編解碼(類(lèi)似與H.264/AVC)。 VC-1 支持不同尺寸的塊變換 (8×8、8×4、4×8、4×4),大尺寸的塊變換有利于計(jì)算空間域里面的相似點(diǎn),小尺寸的塊變換能夠有效地減少邊界與塊邊緣不連續(xù)區(qū)域的振鈴效應(yīng),這里所采用的16位定點(diǎn)算術(shù)運(yùn)算將有利于SIMD操作。VC-1運(yùn)動(dòng)補(bǔ)償支持16×16和8×8塊大小,運(yùn)動(dòng)矢量精度可達(dá)到1/4像素,它采用不同的模式來(lái)實(shí)現(xiàn)運(yùn)動(dòng)補(bǔ)償,主要參數(shù)為運(yùn)動(dòng)矢量精度、預(yù)測(cè)塊大小和內(nèi)插濾波器類(lèi)型,有如下4種組合方式:
1)混合塊尺寸(16×16,8×8),1/4 像素精度,四抽頭雙三次濾波器。
2)16×16塊,1/4像素精度,四抽頭雙三次濾波器。
3)16×16塊,1/2像素精度,二抽頭雙三次濾波器。
圖3 VC-1主檔次解碼流程Fig.3 VC-1 Main profile decoder block-diagram
4)16×16塊,1/2像素精度,二抽頭雙線(xiàn)性濾波器。
這4種模式能夠提供足夠的靈活性去獲得運(yùn)動(dòng)補(bǔ)償?shù)膮⒖級(jí)K,同時(shí),由于沒(méi)有提供上述參數(shù)的所有組合,降低了算法復(fù)雜度。VC-1的去方塊濾波不僅僅是一個(gè)后處理過(guò)程,在編碼環(huán)中引入能有效的提高圖像質(zhì)量,其環(huán)路濾波將減少經(jīng)過(guò)反量化和反變換產(chǎn)生的邊緣失真,它是一個(gè)高條件度算法,所以在處理器上實(shí)現(xiàn)它具有一定的難度,為了降低其復(fù)雜度,VC-1每隔4個(gè)像素判斷一次是否需要濾波。環(huán)路濾波不能有效地區(qū)分塊真實(shí)邊界和量化導(dǎo)致的偽邊界,所以通過(guò)重疊平滑化來(lái)解決這一問(wèn)題。重疊平滑將加強(qiáng)邊緣的預(yù)處理并在后處理過(guò)程中進(jìn)行平滑化,執(zhí)行它的過(guò)程并不需要滿(mǎn)足很多條件,因此它能夠被用于低復(fù)雜度簡(jiǎn)單類(lèi)的實(shí)現(xiàn)。VC-1同時(shí)允許使用死區(qū)量化器和常規(guī)均勻量化器,在低碼率情況下,采用死區(qū)量化器,在高碼率時(shí),采用均勻量化器。
運(yùn)動(dòng)補(bǔ)償通過(guò)參考?jí)K和運(yùn)動(dòng)矢量來(lái)生成預(yù)測(cè)塊,如果運(yùn)動(dòng)矢量指向了小數(shù)部位的像素,那么就需要用像素插值來(lái)獲得該位置的像素值 (1/2,1/4),VC-1使用 3種濾波器進(jìn)行運(yùn)動(dòng)補(bǔ)償,一種是1/4像素處的四抽頭雙三次濾波器,另一種是1/2像素處的二抽頭雙三次和二抽頭雙線(xiàn)性濾波器。公式(1)、(2)、(3)是四抽頭雙三次濾波器在 1/4、1/2、3/4 像素處插值方法[8]。Xnm表示第m行第n列處的像素值。假如需要在一個(gè)宏塊的垂直1/4像素處進(jìn)行像素插值,為了能對(duì)整個(gè)宏塊的小數(shù)位置進(jìn)行插值,需要在所有列都運(yùn)用該濾波器。如果想充分利用SIMD來(lái)實(shí)現(xiàn)像素插值 (并行處理8個(gè)像素),那么如圖4所示,在前4行采用四抽頭濾波器進(jìn)行插值操作。這里把一個(gè)宏塊分為4個(gè)8×8子塊,對(duì)于一個(gè)8×8塊,把它一行的像素全部放入累加寄存器中,那么一個(gè)8×8塊需要8個(gè)累加寄存器(不考慮擴(kuò)展位),然后在利用SIMD技術(shù)來(lái)并行計(jì)算8個(gè)內(nèi)插像素值。除法操作通過(guò)移位來(lái)實(shí)現(xiàn),Ymn表示垂直1/4位置處的像素值,uint8表示8位無(wú)符號(hào)整型數(shù)據(jù)。
1/4像素處:
1/2像素處:
3/4像素處:
圖4 像素垂直方向插值Fig.4 Pixel vertical interpolation
為了利用SIMD技術(shù)實(shí)現(xiàn)水平方向的插值,需要對(duì)數(shù)據(jù)進(jìn)行一個(gè)特殊的排列,如圖5所示,給出了采用SIMD技術(shù)對(duì)第一行8個(gè)像素進(jìn)行濾波的數(shù)據(jù)排列方式。這里Xnm表示第m行第n列處的像素值,剩下的過(guò)程類(lèi)似于垂直插值。
圖5 水平方向像素插值的數(shù)據(jù)排列方式Fig.5 Data arrangement for horizontal filtering
去方塊濾波[9]主要用于消除由反變換、反量化、運(yùn)動(dòng)補(bǔ)償造成的塊效應(yīng),有利于獲得更好的參考圖像,進(jìn)而提高運(yùn)動(dòng)估計(jì)的精度,但由于它計(jì)算量較大,同時(shí)也消耗大量解碼時(shí)間。 去方塊濾波的執(zhí)行區(qū)域基于塊(8×8、8×4、4×8、4×4)的邊緣,對(duì)于P和B類(lèi)的圖像來(lái)說(shuō),塊邊界能出現(xiàn)在第4、8或12個(gè)像素位置處 (行或列),這取決于它們采用何種塊變換尺寸。對(duì)于I圖像而言,塊邊界只出現(xiàn)在第8、16、24行或列像素處,因?yàn)樗徊捎?×8塊變換。
由于CEVA具備足夠的寄存器資源,在加上其豐富的SIMD指令集,能夠同時(shí)對(duì)4個(gè)4×4塊或2個(gè)8×4/4×8塊進(jìn)行去方塊濾波,這種方法有利于提高緩存效率和減少解碼時(shí)間。如圖6所示為水平方向的去方塊濾波,塊分割類(lèi)型為兩個(gè)4×8塊,優(yōu)化時(shí)利用CEVA寄存器裝載P0,P1,……,P7像素值,在經(jīng)過(guò)合理的指令操作,計(jì)算出P3,P4濾波后的像素值,余下的像素采用相同的處理過(guò)程。濾波并不是針對(duì)原始圖像的真實(shí)邊界,而是對(duì)因?yàn)樽儞Q、運(yùn)動(dòng)補(bǔ)償所造成的偽邊界進(jìn)行處理。對(duì)于P幀圖像而言,如果相鄰兩塊具有同樣的運(yùn)動(dòng)矢量或兩塊殘差為0,則不做任何處理。
圖6 水平濾波Fig.6 Horizontal deblocking
反量化恢復(fù)出量化系數(shù),它是量化的逆過(guò)程。利用CEVA豐富的寄存器資源能對(duì)4個(gè)4×4塊并行處理,反量化能夠運(yùn)用斜向掃描或光柵掃描兩種方式,為了更有效利用SIMD指令,可以選擇光柵掃描方式,這樣能同時(shí)裝載8個(gè)量化系數(shù),并重新調(diào)整它們。掃描操作會(huì)在所有的系數(shù)包括零系數(shù)處被執(zhí)行,因此,有效增益依靠在一個(gè)塊中的非零系數(shù)。由于這些不必要的計(jì)算和光柵掃描命令相關(guān),優(yōu)化時(shí)把反量化的計(jì)算合并到VLD中。
VC-1 反變換尺寸支持 4 種模式:8×8、8×4、4×8、4×4,能夠只通過(guò)加法和移位操作實(shí)現(xiàn),而不需要乘法等計(jì)算復(fù)雜度高的運(yùn)算,這樣大大提高了運(yùn)算效率,如圖7所示為4種變換模式。反變換優(yōu)化[10]時(shí),同時(shí)執(zhí)行兩個(gè)8×4或4×8塊、4個(gè)4×4塊的反變換,加法和移位操作利用SIMD指令(add、shift)實(shí)現(xiàn)。這里能并行處理8個(gè)系數(shù),在對(duì)行變換計(jì)算以后,利用CEVA指令進(jìn)行矩陣轉(zhuǎn)置,行變換后的系數(shù)能夠直接作為列變換的輸入,這樣能降低內(nèi)存的實(shí)用,減少中間步驟,有效地提高處理效率。
圖7 變換模塊尺寸Fig.7 Variable block sizes for the transform
文中主要針對(duì)VC-1主檔次解碼算法進(jìn)行了優(yōu)化處理,采用Apollo-1 pro開(kāi)發(fā)板進(jìn)行移植和性能測(cè)評(píng)。這款開(kāi)發(fā)板基于ARM9采用多核多總線(xiàn)結(jié)構(gòu),通過(guò)CEVA-X1622與Apollo-1 pro的結(jié)合,實(shí)現(xiàn)對(duì)解碼器的優(yōu)化和調(diào)試。
表1給出了核心模塊優(yōu)化前和優(yōu)化后占用解碼時(shí)間比,有如下 3 個(gè)參考序列[1]:Foreman(QVGA-384Kbps),Akiyo(Qvga-384Kbps)和 Stefan(QVGA-384Kbps)。 Akiyo 序列的運(yùn)動(dòng)量很少并且背景基本沒(méi)有變,F(xiàn)oreman序列包含中等的運(yùn)動(dòng)量和紋理變化,Stefan序列有較高的運(yùn)動(dòng)量和幅度較大的紋理變化。我們發(fā)現(xiàn)其中Foreman序列的運(yùn)動(dòng)補(bǔ)償優(yōu)化最為明顯,導(dǎo)致它的整體優(yōu)化效果最好,根據(jù)2.1的分析,我們知道整個(gè)解碼過(guò)程中,大部分時(shí)間是用來(lái)進(jìn)行運(yùn)動(dòng)補(bǔ)償?shù)?,Akiyo序列比不上Foreman和Stefan的優(yōu)化效果正是因?yàn)樗^少的運(yùn)動(dòng)補(bǔ)償。
表1 測(cè)試序列優(yōu)化前后不同模塊解碼時(shí)間占有比/%Tab.1 Module decoder time improvement in percentage after optimization
表2給出了經(jīng)過(guò)了優(yōu)化后,每個(gè)序列解碼速度的提高值。Foreman相對(duì)于其它兩個(gè)序列優(yōu)化效果更明顯,根本原因歸結(jié)于對(duì)運(yùn)動(dòng)補(bǔ)償模塊的優(yōu)化程度,可見(jiàn)整體優(yōu)化性能的提升與序列運(yùn)動(dòng)補(bǔ)償多少成正比。實(shí)驗(yàn)時(shí)同時(shí)發(fā)現(xiàn)視頻參考序列在該平臺(tái)上解碼速度最高可達(dá)30 fp/s。
表2 測(cè)試序列解碼器優(yōu)化后整體性能比較Tab.2 Overall performance improvement in FPS
文中重點(diǎn)研究了CEVA開(kāi)發(fā)平臺(tái)下WMV實(shí)時(shí)解碼的算法優(yōu)化及實(shí)現(xiàn)。主要完成了以下幾方面工作:針對(duì)CEVAX1622的體系結(jié)構(gòu),對(duì)解碼器部分核心模塊的算法結(jié)構(gòu)做了優(yōu)化,并且利用SIMD技術(shù)進(jìn)行了DSP實(shí)現(xiàn)。結(jié)果表明在經(jīng)過(guò)優(yōu)化處理后,解碼算法的各個(gè)模塊所需的解碼時(shí)間得到了降低,同時(shí)解碼器解碼速度能夠有效支持標(biāo)清和高清視頻的解碼需求。
[1]沈鉦,孫義和.一種支持同時(shí)多線(xiàn)程的VLIW DSP架構(gòu)[J].電子學(xué)報(bào),2010,(2):352-353.
SHEN Zheng,SUN Yi-he.Architecture design of simultaneous multithreading VLIW DSP[J].Acta Electronica Sinica,2010(2):352-353.
[2]CEVA和ARM聯(lián)手增強(qiáng)CEVA DSP+ARM多處理器SOC的開(kāi) 發(fā) 支 持 [EB/OL].(2008-06-10)http://www.eefocus.com/article/08-06/4322410100603d0oY.html.
[3]Srinivasan S,Regunathan S L.An overview of VC-1[J].Visual Communications and Image processing,Proc.Of SPIE, 2005(5960):720-728.
[4]Srinivasan S,Hsu P,Holcomb T,et al.Windows Media Video 9:overview and applications[C]//Signal Processing:Image Communication,2004(19):851-875.
[5]CEVA-X ARCHITECTURE CEVA-X1620/1622[EB/OL].[2011-09-27]http://www.ceva-dsp.com/products/cores/pdf/cevax1622_datasheet.pdf.
[6]Proposed SMPTE Standard for Television VC-1 Compressed Video Bitstream Format and Decoding Process[C]//SMPTE Technology Committee C24 on Video Compression Technology,2005.
[7]尹明,王宏遠(yuǎn).VC-1視頻編碼技術(shù)研究[J].電視技術(shù),2005(11):19-20.
YIN Ming,WANG Hong-yuan.Technical study of VC-1 video encoding[J].Digital TV&Digital Video,2005(11):19-20.
[8]馮麗.VC-1解碼算法研究及其DSP移植與優(yōu)化[D].北京:北京交通大學(xué),2008.
[9]VC-1 Compressed Video Bitstream Format and Decoding Process[S].SMPTE 421M-2006,SMPTE Standard,2006.
[10]聶勝猛,張澤建,歐建平,等.多重頻解模糊中降低頻道量化誤差的新方法[J].現(xiàn)代電子技術(shù),2011(11):179-181,185.
NIE Sheng-meng,ZHANG Ze-jian,OU Jian-ping,et al.A new method to reduce channel quantization error in resolving velocity ambiguity by PRF varied method[J].Modern Electronics Technique,2011(11):179-181,185.
[11]張坤,王瑩,高凱.基于TOD信息的長(zhǎng)周期跳頻序列產(chǎn)生及其性能分析[J].現(xiàn)代電子技術(shù),2010(9):4-6,10.
ZHANG Kun,WANG Ying,GAO Kai.Generation of long period FH sequences vbased on TOD and property analysis[J].Modern Electronics Technique,2010(9):4-6,10.