AVS編碼與DSP實(shí)現(xiàn)的視頻編碼器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)鍵詞 AVS編碼DSP視頻編碼器
引 言
隨著數(shù)字視頻技術(shù)的發(fā)展,近年來(lái)世界上出現(xiàn)了許多數(shù)字音視頻壓縮標(biāo)準(zhǔn)。AVS(Audio Vicleo Coding Stand-ard)是我國(guó)自主制定,擁有自主知識(shí)產(chǎn)權(quán)的音視頻編碼標(biāo)準(zhǔn)。與世界其他知名音視頻編碼標(biāo)準(zhǔn)相比,它具有如下特點(diǎn):①性能高,編碼效率比MPEG2高2倍以上,與H.264的編碼效率相當(dāng);②算法復(fù)雜度比H.264低;③軟硬件實(shí)現(xiàn)成本都低于H.264;④專(zhuān)利授權(quán)模式簡(jiǎn)單,費(fèi)用明顯低于同類(lèi)標(biāo)準(zhǔn)。在碼率和PSNR相當(dāng)?shù)那闆r下,AVS的編碼速度是H.264的4倍以上。
AVS視頻標(biāo)準(zhǔn)采用了一系列技術(shù)來(lái)達(dá)到高效率的視頻編碼,包括幀內(nèi)預(yù)測(cè)、幀間預(yù)測(cè)、變換和量化、熵編碼等。幀問(wèn)預(yù)測(cè)使用基于塊的運(yùn)動(dòng)矢量消除圖像聞的冗余;幀內(nèi)預(yù)測(cè)使用空間預(yù)測(cè)模式消除圖像內(nèi)的冗余;再通過(guò)對(duì)預(yù)測(cè)殘差進(jìn)行變換和量化消除圖像內(nèi)的視覺(jué)冗余;最后,運(yùn)動(dòng)矢量、預(yù)測(cè)模式、量化參數(shù)和變換系數(shù)用熵編碼進(jìn)行壓縮,以消除編碼碼字冗余。
DSP的實(shí)現(xiàn)是AVS硬件應(yīng)用的一個(gè)重要領(lǐng)域,而實(shí)時(shí)性則是一個(gè)重要要求;但由于標(biāo)準(zhǔn)提出的時(shí)間短,所以DSP實(shí)現(xiàn)的實(shí)例很少,能將AV5算法在DSP上實(shí)現(xiàn),對(duì)AVS的發(fā)展有很大的意義。另外,具有強(qiáng)大處理能力的DSP非常適合應(yīng)用在通信和圖像處理領(lǐng)域。
本系統(tǒng)選用TI公司最新推出的數(shù)字媒體處理器TMS320DM6446(簡(jiǎn)稱(chēng)“DM6446”),其主頻高達(dá)594MHz,具有豐富的專(zhuān)為多媒體運(yùn)算優(yōu)化的指令集,包括可簡(jiǎn)化設(shè)計(jì)并能降低系統(tǒng)成本的集成多媒體與通信外設(shè)。片上集成的基于ARM9的ARM926EJ-S核(主頻高達(dá)297 MHz),豐富的媒體、外設(shè)接口,為AVS視頻編解碼方案提供了很好的硬件基礎(chǔ)。
1 系統(tǒng)硬件設(shè)計(jì)
本系統(tǒng)是基于DSP的視頻監(jiān)控系統(tǒng),通過(guò)DSP對(duì)CCD攝像頭獲取的YUV 4:2:0信號(hào)進(jìn)行實(shí)時(shí)處理,將壓縮后的數(shù)據(jù)流通過(guò)以太網(wǎng)接口發(fā)送到監(jiān)控室。
數(shù)據(jù)壓縮單元主要由DSP和SDRAM實(shí)現(xiàn)。系統(tǒng)硬件結(jié)構(gòu)框圖如圖l所示。
DM6446增加了很多外圍設(shè)備及接口。例如:
◇視頻處理子系統(tǒng)VPSS(Video Processing Subsystem),其中包含CCD設(shè)備接口;
◇擴(kuò)展內(nèi)存接口EMIF(External Memory Inter-faces);
◇FPGA接口(VLYNQ Interface);
◇以太網(wǎng)接口1O/100Mbps EMAC(Ethernet MAC)。
視頻信號(hào)采集進(jìn)來(lái)之后,采用EDMA方式進(jìn)行數(shù)據(jù)搬移;搬移到緩存(cache)中后,DM6446便對(duì)數(shù)據(jù)進(jìn)行壓縮處理。圖2為該系統(tǒng)的軟件流程圖。
緩存完l幀后,DSP便通過(guò)EDMA讀取數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行壓縮處理,結(jié)果通過(guò)EDMA存儲(chǔ)在SDRAM中。當(dāng)DSP處理完1幀之后,通知主機(jī)讀取數(shù)據(jù);主機(jī)接到通知后,通過(guò)以太網(wǎng)以EDMA形式將壓縮數(shù)據(jù)讀到主機(jī)內(nèi)存中并保存在硬盤(pán)里。在監(jiān)控主機(jī)上安裝有AVS解碼器客戶(hù)端,還可以在主機(jī)上對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行實(shí)時(shí)播放。上述過(guò)程循環(huán)執(zhí)行。在執(zhí)行過(guò)程中可以根據(jù)視頻碼率自動(dòng)調(diào)節(jié)有關(guān)參數(shù)。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 AVS視頻壓縮原理
該系統(tǒng)采用AVS視頻標(biāo)準(zhǔn),原理框圖如圖3所示。
在AVS視頻標(biāo)準(zhǔn)中,所有宏塊都要進(jìn)行幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)。預(yù)測(cè)殘差需要進(jìn)行8×8離散余弦變換(DCT)和量化,然后對(duì)量化系數(shù)進(jìn)行掃描,得到一維排列的量化系數(shù),最后對(duì)量化系數(shù)進(jìn)行熵編碼。AVS使用環(huán)路濾波器對(duì)重建圖像濾波,優(yōu)點(diǎn)在于:一方面可以消除方塊效應(yīng).改善重建圖像的主觀質(zhì)量;另一方面能夠提高編碼效率。濾波強(qiáng)度可以自適應(yīng)調(diào)整。
2.2 AVS的主要技術(shù)
(1)變換和量化
考慮到編碼性能、實(shí)現(xiàn)復(fù)雜度、AVS視頻標(biāo)準(zhǔn)的主要應(yīng)用等多方面因素,AVS視頻標(biāo)準(zhǔn)最終選擇了8×8離散余弦變換。在AVS中,采用帶PIT(Pre-Scaled Integer Transform)的8x8整數(shù)余弦變換技術(shù),即正向縮放、量化、反向縮放結(jié)合在一起,而解碼端只進(jìn)行反量化,不再需要反向縮放。AVS的8×8變換量化可在16位精度上無(wú)失配地實(shí)現(xiàn)。
對(duì)于PC機(jī),一般將DCT中大量的乘加運(yùn)算使用加法和移位來(lái)實(shí)現(xiàn)。但就本系統(tǒng)的TMS32013M6446而言,乘加可以通過(guò)合理安排流水線而在一個(gè)周期內(nèi)完成,完全沒(méi)有必要也不應(yīng)該為了減少乘法而使用大量的加法和移位運(yùn)算。而對(duì)于2的整次冪的乘法還是應(yīng)使用移位來(lái)實(shí)現(xiàn),因?yàn)橐莆贿\(yùn)算比乘法運(yùn)算的功耗要低。
(2)幀內(nèi)預(yù)測(cè)
AVS視頻標(biāo)準(zhǔn)使用幀內(nèi)預(yù)測(cè)技術(shù)來(lái)提高幀內(nèi)編碼宏塊的編碼效率,預(yù)測(cè)時(shí)使用當(dāng)前塊的左邊塊和上邊塊中的相鄰像素作為參考像素。AVS視頻標(biāo)準(zhǔn)的幀內(nèi)預(yù)測(cè)以8×8亮度塊和色度塊為單位,定義了5種8×8亮度塊預(yù)測(cè)模式和4種8×8色度塊預(yù)測(cè)模式(參見(jiàn)表1和圖4),大大簡(jiǎn)化了幀內(nèi)預(yù)測(cè)。
(3)幀間預(yù)測(cè)
AVS支持P幀和B幀兩種幀間預(yù)測(cè)圖像。P幀至多采用2個(gè)前向參考幀,可在不增加緩沖區(qū)大小的前提下提高編碼效率;B幀采用前后各一個(gè)參考幀。
AVS視頻標(biāo)準(zhǔn)中運(yùn)動(dòng)補(bǔ)償塊的大小包括16×16、16×8、8×16、8×8等。運(yùn)動(dòng)矢量的精度為1/4像素,為得到非整數(shù)樣本,需要進(jìn)行插值運(yùn)算。AVS視頻標(biāo)準(zhǔn)定義了2個(gè)4抽頭FIR濾波器,分別用于l/2和1/4亮度樣本的插值。與H.264使用的6抽頭FIR濾波器相比,AVS視頻標(biāo)準(zhǔn)的濾波器實(shí)現(xiàn)復(fù)雜度較低。
(4)環(huán)路濾波
基于塊的視頻編碼很容易造成方塊效應(yīng),特別是在低碼率的情況下。AVS視頻標(biāo)準(zhǔn)定義了自適應(yīng)環(huán)路濾波器來(lái)消除方塊效應(yīng),改善重建圖像的主觀質(zhì)量,同時(shí)可提高編碼效率。環(huán)路濾波是對(duì)亮度塊和色度塊的邊界進(jìn)行的。濾波時(shí)首先對(duì)塊的水平邊界濾波,然后再對(duì)塊的垂直邊界濾波。濾波強(qiáng)度由宏塊編碼模式、量化參數(shù)和運(yùn)動(dòng)矢量等決定。H.264的環(huán)路濾波器濾波時(shí)使用邊界左右各4個(gè)像素,而AVS視頻標(biāo)準(zhǔn)只使用左右各3個(gè)像素,實(shí)現(xiàn)復(fù)雜度低于H.264的環(huán)路濾波器。AVS視頻標(biāo)準(zhǔn)使用的環(huán)路濾波器也更有利于DSP的并行實(shí)現(xiàn)。
(5)熵編碼
AVS視頻標(biāo)準(zhǔn)使用k階(k=O~3)指數(shù)哥倫布碼。CBP、宏塊模式和運(yùn)動(dòng)矢最等用0階指數(shù)哥倫布碼編碼。量化系數(shù)使用全部4種指數(shù)哥倫布碼,采用2D-VLC編碼方法,對(duì)量化系數(shù)的(run、level)進(jìn)行編碼。指數(shù)哥倫布碼的碼字結(jié)構(gòu)非常規(guī)則,解碼器不需要存儲(chǔ)碼表。量化系數(shù)使用的19張映射表所需的存儲(chǔ)空間小于2 KB。視頻標(biāo)準(zhǔn)還定義了新的ESCAPE編碼方法,能夠獲得O.05~O.08 dB的編碼增益。
2.3 程序在DSP上的優(yōu)化
本系統(tǒng)壓縮部分程序以AVS參考代碼rm52f為編碼部分的源代碼基礎(chǔ),針對(duì)AVS編碼算法和DSP的特點(diǎn)對(duì)其結(jié)構(gòu)和算法進(jìn)行了調(diào)整和改進(jìn)。對(duì)程序作如下優(yōu)化:
①合理設(shè)置結(jié)構(gòu)體和變量類(lèi)型。經(jīng)常用到的數(shù)組變量不放到結(jié)構(gòu)體中,否則要進(jìn)行雙級(jí)尋址,降低效率;對(duì)變最長(zhǎng)度進(jìn)行合理定義,嚴(yán)格合理區(qū)分8位、16位、32位的變量分配,能用小的則不用大的。(注意:在循環(huán)體中,循環(huán)計(jì)數(shù)變量應(yīng)一律使用int型,即船位,而不要使用short型)
②循環(huán)展開(kāi)。過(guò)多過(guò)深的循環(huán)不利于編譯器做軟件流水優(yōu)化,影響DSP并行處理,因此根據(jù)DSP特性適當(dāng)拆開(kāi)內(nèi)循環(huán),可以使DSP在一個(gè)周期內(nèi)執(zhí)行多條指令。優(yōu)化循環(huán)較好的方法是抽出循環(huán)作為單獨(dú)文件,對(duì)其重新編寫(xiě)、編譯和單獨(dú)執(zhí)行。由于內(nèi)層循環(huán)是惟一可以進(jìn)行軟件流水的循環(huán),所以應(yīng)該注意以下問(wèn)題(否則會(huì)使循環(huán)不能進(jìn)行軟件流水,嚴(yán)重影響性能):①可以包括內(nèi)聯(lián)函數(shù),但不可包括函數(shù)調(diào)用;②不可有條件終止、提前退出指令;③必須遞減計(jì)數(shù)且在O時(shí)終止(可用-o2、-o3自動(dòng)轉(zhuǎn)換);④不可在循環(huán)體中修改循環(huán)計(jì)數(shù)值。
③使用EEMA方式進(jìn)行數(shù)據(jù)搬移,這在CPU頻繁訪問(wèn)外部存儲(chǔ)器數(shù)據(jù)時(shí)能大大節(jié)省CPU資源。其主要實(shí)現(xiàn)了下列數(shù)據(jù)傳輸:視頻數(shù)據(jù)從片外存儲(chǔ)器傳到片內(nèi)Cache中;編碼數(shù)據(jù)從片內(nèi)傳輸?shù)狡獗4妫蛔鲞\(yùn)動(dòng)補(bǔ)償時(shí),將片外對(duì)應(yīng)的參考?jí)K數(shù)據(jù)傳輸?shù)狡瑑?nèi)。
④使用內(nèi)聯(lián)函數(shù)和線性匯編。DSP提供了許多非常有用的內(nèi)聯(lián)函數(shù)(Intrinsics),使用這些內(nèi)聯(lián)函數(shù)可以很大程度地提高程序運(yùn)行速度。對(duì)于耗時(shí)最多的運(yùn)動(dòng)估計(jì)和DCT變換部分進(jìn)行線性匯編能大大提高程序的執(zhí)行效率。使用線性匯編和標(biāo)準(zhǔn)匯編相比,不必考慮并行指令安排、指令延遲、寄存器使用和功能單元的使用,可以大大縮短編寫(xiě)代碼的時(shí)間,且效率遠(yuǎn)遠(yuǎn)高于C程序。
⑤利用編譯選頂。可以通過(guò)參數(shù)-o3的設(shè)置進(jìn)行最高級(jí)別的軟件流水線優(yōu)化;可以通過(guò)參數(shù)-mt告訴編譯器源程序沒(méi)有使用混疊技術(shù),以此提高編譯器優(yōu)化的效果;可以通過(guò)參數(shù)-pm的設(shè)置,使編譯器對(duì)程序級(jí)代碼進(jìn)行優(yōu)化。使用C64xx型DSP時(shí),應(yīng)使用-mv6400編譯選項(xiàng),以便對(duì)此類(lèi)DSP進(jìn)行更高級(jí)別的優(yōu)化。
⑥利用快速算法。AVS編碼器中,運(yùn)動(dòng)估計(jì)耗時(shí)相當(dāng)大。優(yōu)化運(yùn)動(dòng)估計(jì)的搜索次序,采用自適應(yīng)的搜索策略可以較大地提高運(yùn)動(dòng)估計(jì)的速度,比如使用FastME來(lái)進(jìn)行優(yōu)化。另外在1/4像素插值方面也可進(jìn)行一些調(diào)整,以避免重復(fù)計(jì)算。
3 總結(jié)
本系統(tǒng)很好地實(shí)現(xiàn)了對(duì)視頻數(shù)據(jù)的實(shí)時(shí)壓縮處理及傳輸,能夠?qū)崿F(xiàn)圖像數(shù)據(jù)讀寫(xiě)、內(nèi)存讀寫(xiě)、SDRAM讀寫(xiě)、配置空間讀寫(xiě)和寄存器讀寫(xiě)操作,同時(shí)協(xié)調(diào)幾種操作實(shí)現(xiàn)圖像數(shù)據(jù)的AVS壓縮。本系統(tǒng)能夠完成4路CIF格式(352×288)視頻的實(shí)時(shí)編碼,且有預(yù)留資源可供性能擴(kuò)展。以CIF格式測(cè)試序序bus為例,本系統(tǒng)壓縮的結(jié)果:當(dāng)設(shè)置QP為36時(shí),碼率為952.77 kbps,SNRY(亮度信號(hào)的信噪比)為30.80 dB,編碼速度為36 fps。從結(jié)果中可以看出,對(duì)于視頻監(jiān)控系統(tǒng),PSNR(峰值信噪比)指標(biāo)較理想,編碼速度也滿足了實(shí)時(shí)的要求。隨著AVS視頻編碼技術(shù)的不斷完善,該系統(tǒng)可以很容易地進(jìn)行升級(jí),將在電視會(huì)議等領(lǐng)域得到廣泛應(yīng)用,具有很大的發(fā)展?jié)摿Α?/P>