關(guān)艷華,張 剛
(太原理工大學(xué)信息工程學(xué)院,山西太原 030024)
AVS視頻解碼器的PC實(shí)現(xiàn)
關(guān)艷華,張 剛
(太原理工大學(xué)信息工程學(xué)院,山西太原 030024)
介紹了AVS的解碼原理,分析了AVS開(kāi)源代碼RM52J_r1的不足之處。針對(duì)該開(kāi)源代碼解碼效率相對(duì)低的問(wèn)題,根據(jù)該開(kāi)源代碼設(shè)計(jì)了新的AVS解碼器。實(shí)驗(yàn)結(jié)果表明,在保證解碼質(zhì)量的前提下,解碼速度有了很大的提高,基本上達(dá)到了實(shí)時(shí)解碼的要求。
AVS;解碼器;實(shí)時(shí)解碼
AVS是我國(guó)擁有自主知識(shí)產(chǎn)權(quán)的視頻編解碼標(biāo)準(zhǔn)。AVS視頻編解碼性能比MPEG-2高2~3倍[1],與H.264相當(dāng),但實(shí)現(xiàn)復(fù)雜度低于H.264。RM52J_r1是AVS標(biāo)準(zhǔn)的參考軟件,實(shí)現(xiàn)了AVS標(biāo)準(zhǔn)中的規(guī)定以及擴(kuò)展的功能,利于學(xué)習(xí),然而其解碼速度卻相對(duì)低下,故本文針對(duì)該參考軟件設(shè)計(jì)了新的AVS解碼器。
AVS的解碼流程如圖1所示。
圖1 AVS解碼流程
解碼過(guò)程為:壓縮編碼后的比特流輸入到解碼器的輸入端,解碼器對(duì)該比特流進(jìn)行熵解碼和反掃描得到一系列量化系數(shù),接著對(duì)這些量化系數(shù)進(jìn)行反量化和反變化得到殘差系數(shù),通過(guò)幀內(nèi)預(yù)測(cè)或幀間預(yù)測(cè)得到預(yù)測(cè)值,將殘差系數(shù)與預(yù)測(cè)值相加得到重構(gòu)值,最后再對(duì)重構(gòu)值進(jìn)行環(huán)路濾波。
官方發(fā)布的解碼軟件RM52J_r1雖然實(shí)現(xiàn)了AVS標(biāo)準(zhǔn)中的規(guī)定,也在算法上進(jìn)行了一些改進(jìn),但是代碼的執(zhí)行效率依然很低。分析其原因是[2]:代碼的結(jié)構(gòu)較為復(fù)雜,使用了大量的條件判斷和跳轉(zhuǎn);使用了大量的多重循環(huán);函數(shù)之間多級(jí)調(diào)用;定義了過(guò)多的變量;重復(fù)地使用動(dòng)態(tài)內(nèi)存分配,大大的消耗了CPU資源,造成內(nèi)存效率低下。故本文以RM52J_r1為參考,重新設(shè)計(jì)了新的AVS解碼器。
1)新解碼器的流程設(shè)計(jì)
新解碼器的設(shè)計(jì)流程如圖2所示。首先對(duì)解碼器進(jìn)行初始化,接著查找起始碼,根據(jù)起始碼值的不同進(jìn)入相應(yīng)的函數(shù)。當(dāng)解析出I圖像頭或PB圖像頭后,就根據(jù)圖像頭信息進(jìn)行相應(yīng)的I條帶解碼,P條帶解碼或B條帶解碼。
2)各模塊算法的設(shè)計(jì)及優(yōu)化
AVS視頻編解碼標(biāo)準(zhǔn)采用基于塊的混合編碼框架,其核心技術(shù)包括[3]:熵解碼、反量化反變換、幀內(nèi)預(yù)測(cè)、幀間預(yù)測(cè)、環(huán)路濾波。
圖2 解碼器流程
(1)熵解碼
熵解碼[4-5]的過(guò)程為:首先判斷當(dāng)前8×8塊是否存在編碼數(shù)據(jù),若存在則初始化映射表和跳轉(zhuǎn)門(mén)限,否則退出。接著解析 trans_coefficient,若 trans_coefficient<59,可通過(guò)查找表CurrentVLCTable得到量化系數(shù)Level和游程Run;若trans_coefficient≥59,需先解析出 escape_level_diff,通過(guò)escape_level_diff計(jì)算出 Level和 Run;若 trans_coefficient=EOB,該塊的熵解碼結(jié)束。最后根據(jù)absLevel值更新下一個(gè)碼表的序號(hào)。
從上述熵解碼的過(guò)程可以看出,當(dāng)trans_coefficient<59時(shí),只用到CurrentVLCTable中的Level和Run兩個(gè)元素,沒(méi)用到escape_level_diff元素;當(dāng)trans_coefficient≥59時(shí),只用到元素escape_level_diff,沒(méi)用Level和Run。而大部分的熵解碼都是trans_coefficient<59的情況,故CurrentVLCTable中的escape_level_diff元素在大多數(shù)的情況下就顯得很多余。因而新解碼器在碼表設(shè)計(jì)時(shí)重新定義了兩個(gè)新的結(jié)構(gòu)體,其中一個(gè)只包含Level和Run,用于解碼trans_coefficient<59的情況,另一個(gè)只包含escape_level_diff,用于解碼trans_coefficient≥59的情況。
在根據(jù)absLevel值更新下一個(gè)碼表的序號(hào)時(shí),RM52J_r1采用一系列的判斷語(yǔ)句來(lái)實(shí)現(xiàn),影響了程序的速度。故新解碼器采用查表的方法來(lái)代替參考軟件中的條件判斷部分。具體的碼表切換規(guī)則如表1~表3所示。
表1 熵解碼幀內(nèi)亮度塊碼表切換規(guī)則
表2 熵解碼幀間亮度塊碼表切換規(guī)則
表3 熵解碼色度塊碼表切換規(guī)則
(2)反量化反變換
AVS采用的是二維8×8整數(shù)反量化與反變換,又可把二維整數(shù)反變換分解為水平和垂直方向上的一維整數(shù)反變換。本設(shè)計(jì)的實(shí)現(xiàn)過(guò)程與參考軟件基本一致。但在進(jìn)行反變換之前增加了對(duì)全零塊的判斷。若當(dāng)前8×8子宏塊為全零塊,由于反變換之后依然為全零塊,則不對(duì)其進(jìn)行反變換。
(3)幀內(nèi)預(yù)測(cè)
幀內(nèi)預(yù)測(cè)分為3個(gè)部分:宏塊中每個(gè)8×8子宏塊預(yù)測(cè)模式的確定,參考樣本值的獲得,預(yù)測(cè)值的計(jì)算。
該模塊的流程設(shè)計(jì)與RM52J_r1有所不同。在RM52J_r1中,先得到參考像素值并保存,之后再確定預(yù)測(cè)模式,接著計(jì)算預(yù)測(cè)值。本文在設(shè)計(jì)該模塊時(shí),首先確定每個(gè)8×8子宏塊的預(yù)測(cè)模式,接著根據(jù)該模式進(jìn)行相應(yīng)像素值的讀取,最后計(jì)算預(yù)測(cè)值,這樣就避免許多不必要的參考像素值的讀取。
(4)幀間預(yù)測(cè)
P幀或B幀最多可有2個(gè)參考幀。P幀可參考前向最近解碼的I幀或P幀,B幀可參考一前一后最近解碼的I幀或P幀。P/B幀宏塊的解碼與I幀大致類(lèi)似,也是根據(jù)宏塊的類(lèi)型進(jìn)行相應(yīng)的解碼。首先獲取相應(yīng)8×8子宏塊的參考索引,然后從碼流中獲得運(yùn)動(dòng)矢量殘差,根據(jù)相鄰塊的運(yùn)動(dòng)矢量得出當(dāng)前塊的預(yù)測(cè)運(yùn)動(dòng)矢量,運(yùn)動(dòng)矢量殘差與預(yù)測(cè)運(yùn)動(dòng)矢量重構(gòu)得到當(dāng)前塊的運(yùn)動(dòng)矢量。根據(jù)運(yùn)動(dòng)矢量和參考索引得到相應(yīng)的參考樣本,從而得到預(yù)測(cè)值。若該運(yùn)動(dòng)矢量指向的參考樣本不是整像素,則應(yīng)通過(guò)1/2或1/4插值來(lái)得到預(yù)測(cè)值。
幀間預(yù)測(cè)模塊在設(shè)計(jì)時(shí)采取了一些與RM52J_r1不同的設(shè)計(jì)思路。首先,在RM52J_r1中,每解一幀圖像就調(diào)用calloc函數(shù)進(jìn)行一次動(dòng)態(tài)內(nèi)存的分配,之后解碼完一幀圖像后又釋放一次,造成了內(nèi)存效率的低下,故新解碼器把參考幀的動(dòng)態(tài)內(nèi)存分配放到了解碼整個(gè)視頻序列之前,解碼完整個(gè)視頻序列后再釋放該內(nèi)存數(shù)據(jù)段。其次,在每一幀解碼的過(guò)程中,圖像的殘差數(shù)據(jù)、預(yù)測(cè)值、重構(gòu)值都采用一維數(shù)組來(lái)存儲(chǔ),降低了數(shù)組的維數(shù)。再次,由于P幀或B幀最多可有2個(gè)參考幀,故分配了3個(gè)幀緩沖來(lái)存儲(chǔ)當(dāng)前解碼幀信息以及2個(gè)參考幀信息,并對(duì)幀緩沖空間進(jìn)行了邊界擴(kuò)展,這樣有利于后續(xù)插值的優(yōu)化。
在解碼的過(guò)程中運(yùn)動(dòng)矢量可能會(huì)指向參考圖像外的樣本,因此在插值時(shí)需判斷參考像素點(diǎn)是否超出了參考圖像邊界,參考軟件中是通過(guò)max和min函數(shù)來(lái)實(shí)現(xiàn)的,對(duì)于每一個(gè)8×8子宏塊至少需判斷64次參考像素點(diǎn)的位置,大大降低了程序的執(zhí)行效率。故新解碼器對(duì)幀緩沖空間進(jìn)行了邊界擴(kuò)展,超出圖像邊界的像素點(diǎn)用最近圖像邊界的像素值來(lái)代替,這樣在插值時(shí)就不需要判斷參考像素點(diǎn)是否超出參考圖像邊界。
(5)環(huán)路濾波
AVS有3種濾波模式:強(qiáng)濾波(BS=2),標(biāo)準(zhǔn)濾波(BS=1),不濾波(BS=0)。本文的設(shè)計(jì)思想是:在解碼完一幀圖像后,按光柵掃描方式循環(huán)對(duì)一幀內(nèi)的所有宏塊進(jìn)行濾波。濾波過(guò)程為先求每一8×8子宏塊的濾波強(qiáng)度BS,然后再對(duì)亮度和色度邊界進(jìn)行濾波。若當(dāng)前解碼圖像為I幀,可直接判定BS=2,省去了計(jì)算濾波強(qiáng)度的函數(shù)。對(duì)于P,B幀來(lái)說(shuō),需計(jì)算濾波強(qiáng)度,而對(duì)于16×16和16×8的宏塊模式,不需要對(duì)宏塊內(nèi)的垂直邊界濾波,對(duì)于16×16和8×16的宏塊模式,不需要對(duì)宏塊內(nèi)的水平邊界濾波,滿足這些條件時(shí)就不需要計(jì)算相應(yīng)邊界的濾波強(qiáng)度,同時(shí)也不需要判斷是否應(yīng)對(duì)相應(yīng)的色度塊進(jìn)行濾波。同時(shí),把亮度濾波函數(shù)和色度濾波函數(shù)分開(kāi)來(lái)寫(xiě),因?yàn)樯葔K比亮度塊需濾波的像素點(diǎn)要少。經(jīng)過(guò)這樣優(yōu)化后環(huán)路濾波模塊就省去了大量的計(jì)算,提高了解碼的速度。
測(cè)試所用的PC機(jī)操作系統(tǒng)為Windows7,CPU為Pentium雙核處理器,主頻為1.8 GHz,在Visual Studio 2008環(huán)境下進(jìn)行編譯調(diào)試。分別測(cè)試了幀數(shù)為300幀的QCIF(176×144),CIF(352×288)和D1(720×576)格式的AVS測(cè)試序列,所有測(cè)試序列的幀順序都為IBBPBBP,并與參考解碼器進(jìn)行了對(duì)比。幀率的測(cè)試結(jié)果如表4所示。PSNR的測(cè)試結(jié)果如表5所示。由表4和表5可得,新解碼器與RM52J_r1的解碼信噪比一致,并且解碼速度大大提高。QCIF,CIF和D1三種視頻格式的解碼速度分別是參考軟件的4.71倍、4.52倍和4.25倍。
表4 新解碼器與參考解碼器幀率測(cè)試結(jié)果對(duì)比
表5 新解碼器與參考解碼器PSNR測(cè)試結(jié)果對(duì)比 dB
本文在學(xué)習(xí)了參考解碼軟件RM52J_r1的基礎(chǔ)上,根據(jù)參考軟件設(shè)計(jì)并實(shí)現(xiàn)了新的AVS解碼器,解碼速度較之參考軟件有了很大的提高,并且保持了原有圖像的質(zhì)量。接下來(lái)的工作可進(jìn)一步對(duì)新解碼器進(jìn)行結(jié)構(gòu)優(yōu)化以及采用多媒體指令集對(duì)其中運(yùn)算量大的程序進(jìn)行優(yōu)化。
:
[1]黃鐵軍,高文.AVS標(biāo)準(zhǔn)制定背景與知識(shí)產(chǎn)權(quán)狀況[J].電視技術(shù),2005,29(7):4-7.
[2]弓曉霞,劉興旺.AVS全I(xiàn)幀實(shí)時(shí)解碼器的PC實(shí)現(xiàn)[EB/OL].[2009-11-05].http://www.paper.edu.cn/index.php/default/releasepaper/content/200911-162.
[3]李艷,劉秀蘭.AVS軟件解碼器瓶頸分析與優(yōu)化[J].電子測(cè)量技術(shù),2010,33(4):128-130.
[4]GB/T20090.2—2006,信息技術(shù)先進(jìn)音視頻編碼 第2部分:視頻[S].2006.
[5]陳光法,姚立敏,虞露.AVS熵解碼與DSP實(shí)現(xiàn)[J].電視技術(shù),2004,28(10):43-46.
Implementation of AVS Video Decoder on PC Platform
GUAN Yanhua,ZHANG Gang
(College of Information Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
The key technology of AVS video decoder and decoding principle are introduced in this paper.The decoding efficiency of AVS Video open source code RM52J_r1 is relatively low,so a new AVS decoder is designed according to the source code.The result of experiment shows that the efficiency of the new decoder is significantly improved on the basis of good decoding quality.The new AVS decoder can meet the requirement of real-time decode.
AVS;decoder;real-time decoding
TN919.8
A
【本文獻(xiàn)信息】關(guān)艷華,張剛.AVS視頻解碼器的PC實(shí)現(xiàn)[J].電視技術(shù),2013,37(3).
國(guó)家自然科學(xué)基金項(xiàng)目(60772101)
關(guān)艷華(1988— ),女,碩士生,主研視頻編解碼;
張 剛(1953— ),博士生導(dǎo)師,主研音視頻編解碼和計(jì)算機(jī)通信等。
責(zé)任編輯:魏雨博
2012-06-18