AVS是中國自主制定的第二代音視頻編碼標準。從編碼效率上看,AVS與H.264/AVC相當,比MPEG-2高兩倍;從編碼的復雜度上看,AVS的編碼復雜度相當于H.264的70%,解碼復雜度相當于H.264的30%。同時(shí),AVS不需要交納高額的專(zhuān)利費用,具有很廣闊的市場(chǎng)前景,如:數字音視頻存儲、IPTV和視頻監控等。 TMS320DM642是TI公司推出的一款面向多媒體信號處理的DSP,采用了C64x核。它具有極強的處理能力、高度的靈活性和可編程性,同時(shí)又集成了音視頻和網(wǎng)絡(luò )通信等外設,特別適用于多媒體通信應用。DM642可應用于基于IP的音視頻傳輸、數字視頻記錄、機器視覺(jué)、醫學(xué)成像、安全監視和數字相機等領(lǐng)域。 本文把AVS解碼軟件移植到DM642平臺上,并進(jìn)行了優(yōu)化,對于標清視頻,解碼速度達到30fps,完全滿(mǎn)足實(shí)時(shí)播放的要求。 AVS標準 AVS的解碼過(guò)程如圖1所示。 圖1 AVS解碼器 AVS視頻編解碼標準中的核心技術(shù)包括:幀內預測、1/4精度像素插值、特殊的幀間預測運動(dòng)補償、8×8整數變換、量化、二維熵編碼和去塊效應環(huán)內濾波等。 AVS亮度和色度幀內預測都是以8×8塊為單位的。亮度塊采用5種預測模式,色度塊采用4種預測模式。在編碼效率基本相同的情況下,AVS采用了更少的預測模式,使算法的復雜度大大降低。 對于幀間的運動(dòng)補償,AVS采用了4種塊:16×16,16×8,8×16及8×8,可以更好地刻畫(huà)物體運動(dòng),提高運動(dòng)搜索的準確性,同時(shí)降低了運動(dòng)矢量和塊模式傳輸的開(kāi)銷(xiāo),從而提高壓縮效率,降低了編解碼實(shí)現的復雜度。AVS與H.264、MPEG-4一樣,采用了1/4像素插值,但與H.264的6抽頭1/2像素插值和雙線(xiàn)性1/4像素插值不同,AVS采用了兩種4抽頭濾波器對1/2和1/4像素進(jìn)行插值,在不降低性能的情況下減少了插值所需要的參考像素點(diǎn),減小了數據存取帶寬需求。 8×8的整數變換可以在16位處理器上無(wú)失真的實(shí)現,克服了早期的8×8變換不能無(wú)失真的缺點(diǎn),同時(shí)又比H.264中4×4的整數變換有更好的去相關(guān)性。 在A(yíng)VS熵編碼過(guò)程中,所有的語(yǔ)法元素和殘差數據都是以指數哥倫布碼的形式映射成二進(jìn)制比特流。采用指數哥倫布碼的優(yōu)勢在于:一方面,它的硬件復雜度比較低,可以根據閉合公式解析碼字;另一方面,它可以根據編碼元素的概率分布,靈活地確定以k階指數進(jìn)行哥倫布碼編碼,如果k選得恰當,則編碼效率可以逼近信息熵。利用解碼后的數據,通過(guò)查表得到殘差數據。 AVS采用了兩個(gè)級別的環(huán)路濾波,只對邊界的兩個(gè)像素進(jìn)行濾波。與H.264的4個(gè)級別和邊界3個(gè)像素的環(huán)路濾波相比,復雜度大為降低。 TMS320 DM642平臺 TMS320DM642/C64x系列芯片基于超長(cháng)指令字結構VelociTI.2,在8個(gè)功能單元里擴展了88條新的指令,以增強其在視頻/圖像應用中的性能,并提高了視頻處理的并行性。 本文的實(shí)驗平臺采用SEED公司的VPM642板卡,其主要配置如下:600MHz的TMS320DM642 DSP芯片;DM642外部擴展4MB Flash, 32MB SDRAM,可用于大量視頻圖像數據和程序的存儲;4路視頻端口(PAL/NTSC制式或S端子);10/100M以太網(wǎng)接口;板上JTAG仿真接口,通過(guò)JTAG仿真器可以方便地進(jìn)行視頻壓縮算法的仿真調試。 AVS在DM642上的實(shí)時(shí)解碼 針對DSP的特點(diǎn),本文采用了大量行之有效的優(yōu)化方法,使得解碼速度大大提升。除了使用C6000編譯器提供的編譯選項-pm、-o3、-no debug以外,其他優(yōu)化措施主要包括以下幾個(gè)方面。 程序結構的調整 為了滿(mǎn)足DSP結構的需要,本文對AVS解碼軟件的程序結構進(jìn)行了調整。 PC上的程序是在解碼一幀后再進(jìn)行環(huán)路濾波,需要兩次把數據從片外搬移到片內。本文對此進(jìn)行了修改,在每個(gè)宏塊解碼完成以后就對該宏塊進(jìn)行濾波。如圖2所示。 圖2 環(huán)路濾波示意圖 在解碼一個(gè)宏塊完成以后,先對每個(gè)8×8亮度塊的垂直邊界BsV00、BsV01、BsV10、BsV11和色度塊BsV00(U)、BsV01(V)進(jìn)行濾波,濾波的結果作為輸入,再對水平邊界進(jìn)行濾波。 使用內聯(lián)指令和數據打包 C6000編譯器提供了許多內聯(lián)函數(instrinsics),如_add2、_avgu4、_dotpsu4等。內聯(lián)函數是直接與C6000匯編指令映射的在線(xiàn)函數。不易用C/C++語(yǔ)言實(shí)現功能的匯編指令都有對應的內聯(lián)函數。 對C6000的存儲器進(jìn)行訪(fǎng)問(wèn)是很費時(shí)的。要提高C6000的數據處理效率,應使1條Load/Store指令能夠訪(fǎng)問(wèn)多個(gè)數據。當程序需要對一連串的字符型、短型數據進(jìn)行訪(fǎng)問(wèn)時(shí),可以使用數據打包,一次讀寫(xiě)4個(gè)字符型、2個(gè)短型數據,并使用_dotpsu4、_add2等指令進(jìn)行處理。 本文在優(yōu)化過(guò)程中廣泛采用了內聯(lián)指令和數據打包,對于水平位置1/2像素插值,使用內聯(lián)指令和數據打包的效果如表1所示。 使用線(xiàn)性匯編 經(jīng)過(guò)C語(yǔ)言優(yōu)化的解碼程序如果仍然達不到實(shí)時(shí)的要求,則需要繼續進(jìn)行匯編優(yōu)化。與標準的匯編語(yǔ)言相比,采用線(xiàn)性匯編語(yǔ)言進(jìn)行編程不用考慮并行指令的安排、指令延遲和寄存器的使用,以上工作均由匯編優(yōu)化器自動(dòng)完成,而且,所產(chǎn)生的代碼效率可以達到手工匯編的95%"100%。 由于IDCT在程序中使用頻繁,比較占用時(shí)間,且程序相對簡(jiǎn)單。本文對此進(jìn)行了線(xiàn)性匯編優(yōu)化,優(yōu)化前和優(yōu)化后的時(shí)間比較見(jiàn)表2。 QDMA的合理使用 QDMA(快速存儲器直接訪(fǎng)問(wèn))是DMA和EDMA的進(jìn)一步發(fā)展,其提交傳輸申請的速度比DMA和EDMA快很多。實(shí)際上,QDMA是C6000中搬移數據效率最高的手段之一。QDMA支持靈活的數據傳輸,它可以完成一維到一維的數據傳輸,也可以完成二維到一維或一維到二維的數據傳輸。 對于數據量較大的傳輸,要盡量采用QDMA。本文對QDMA進(jìn)行了實(shí)驗,在將兩場(chǎng)數據合并為一幀數據時(shí),分別采用memcpy和QDMA,其時(shí)間統計見(jiàn)表3。 Cache的合理分配 TMS320DM642提供了256KB的片上RAM,它既可以當作普通RAM使用,也可以配置為Cache。DM642的Cache設置可以是32KB、64KB、128KB、256KB不等。設置的Cache越大,命中率越高,但留給程序使用的片內RAM也就越少。為了可以把使用頻率較高的數據和代碼放置在片內,本文采用了128KB的Cache和128KB片內RAM的配置方案。 采用了以上的優(yōu)化策略,AVS標清視頻在DM642上的解碼速度達到30fps,完全滿(mǎn)足了IPTV(25fps)實(shí)時(shí)播放的要求。 結語(yǔ) AVS解碼在DSP上的實(shí)時(shí)實(shí)現具有重要的意義,它可以應用到IPTV、數字視頻監控等領(lǐng)域,具有很好的市場(chǎng)應用前景。 |