摘要:AVS是我國自主制定的音視頻編碼技術標準。可變字長編解碼是AVS標準中的一項重要技術,該文提出了一種基于SoC平臺的AVS可變字長解碼(VLD)設計。根據AVS變長碼表的特點,重新設計合理的變長碼表減少時鐘消耗,采用C語言和匯編語言進行設計、模擬,并通過了SoC仿真平臺驗證。在164MHz工作頻率下實現滿足基準檔次6.0級別的AVS高清視頻碼流的實時解碼要求。
關鍵詞:AVS;SoC;解碼器;變長解碼
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)25-7247-02
Design of AVS Variable Length Decoder Based on SoC Platform
XU Yuan-feng, CHEN Yong-en, LIU Wei, WANG Peng
(Design Center of Communication Software and ASIC,Tongji University, Shanghai 200092, China)
Abstract: AVS is the audio and video standard of China. Variable length decoding is a very important technology of AVS. This paper proposes an implementation of variable length decoder for AVS Based on SoC Platform. According to the characteristics of AVS variable length code table, the new and proper AVS variable length code table is designed to minimize the use of clock cycles. The decoder is designed, simulated based on C language and assemble language. The whole design has been verified by SoC simulation platform. Its maximal working frequency is around 164MHz and could fulfill the performance requirement of real-time AVS JiZhun profile 6.0 level decoding.
Key words: audio video coding standard; SoC; decoder; variable length decode
AVS(Audio Video Coding Standard) 標準是《信息技術先進音視頻編碼》系列標準的簡稱, 包括系統、視頻、音頻、數字版權管理等四個主要技術標準和一致性測試等支撐標準,是由中國自主提出的第一個音視頻編碼標準。該標準面向中國的信息產業需求,服務于高分辨率數字廣播、高密度激光數字存儲媒體、無線寬帶多媒體通訊、互聯網寬帶流媒體等重大信息產業應用。AVS標準是基于當前主流的混合編碼框架,其采用了變換、量化、熵編碼、幀內預測、幀間預測、環路濾波等技術。AVS視頻中具有特征性的核心技術包括:二維熵編碼、8 8整數變換、量化、幀內預測、1/4精度像素插值、特殊的幀間預測運動補償和去塊效應環內濾波等。目前音視頻產業可以選擇的信源編碼標準有四個:MPEG-2、MPEG-4、H.264/AVC、AVS。前三個標準是由MPEG專家組完成的,第四個是我國自主制定的。從主要技術指標——編碼效率比較:MPEG-4是MPEG-2的1.4倍,AVS和H.264/AVC相當,都是MPEG-2兩倍以上[1-2]。
AVS標準采用了最新視頻編碼技術,對壓縮效果有很大改善,但其壓縮效率的提高也是以算法復雜度的增加為代價的[3],因此造成了單純用軟件解碼難以達到很高的性能。與此同時硬件實現解碼的復雜度也隨編碼效率的提高而上升,給硬件設計帶來一定的挑戰。軟件的靈活性和可編程性硬件強大的處理能力使視頻解碼芯片的設計向軟硬件協同設計方向發展[4]。這樣不僅給設計提供了更多的選擇性,而且能極大地縮短芯片上市時間。
本文提出的基于SoC 平臺的AVS可變長解碼器設計方案具有高性能、低成本的優勢,適用于需要大幅面視頻的應用場合,例如高清晰度數字電視。
1 AVS解碼器的理論模型
AVS解碼器的理論模型如圖1所示,圖中熵解碼器對AVS碼流進行解碼得到量化系數和解碼參數,量化系數經過重排序、反量化、反變換后得到殘差系數,同時,幀內或者幀間預測模塊根據解碼參數計算得到預測數據,預測數據與殘差系數相加形成圖像的重構值。重構值用于幀內預測的參考,同時也送入濾波器進行濾波以消除方塊效應,提高圖像質量的主觀感受。
2 基于SoC的系統設計方案
AVS 視頻標準采用混合編碼結構,也就是預測加變換的編碼結構。 編碼視頻流采用層次結構進行組織,由外到里分別是序列層、圖像層、組塊層、宏塊層和塊層。宏塊以上每層的開始都以一個惟一的碼字來標識,語法大部分采用定長碼編碼方式,無需大量的數據操作,僅僅從碼流中獲得解碼每個宏塊數據所需的信息,解碼復雜度不高,是嚴格的串行處理過程,這些非常適合軟件實現。宏塊解碼卻復雜得多,除了少量的定長碼解碼外,還有較為復雜的變長字解碼,這增加了解碼難度和實現的復雜度,單純的軟件解碼無法滿足高清視頻解碼實時性的要求,因而需要用硬件來實現宏塊層以下部分的解碼工作。基于對AVS解碼過程原理及復雜度的分析,將宏塊層以上部分的解碼由軟件處理,宏塊層及以下部分的解碼由硬件負責。這里提出一種新的軟硬件協同處理的AVS可變長解碼結構,如圖2所示。
在該SoC平臺中,軟件部分主要功能包括宏塊層以上部分語法元素解析和系統控制兩部分。其中系統控制部分主要負責對硬件各寄存器狀態設置、在RAM 上配置好待解AVS 碼流和已解好的語法元素流等。硬件部分則宏塊層的解碼和圖像重建工作。軟件將已解好的上層語法元素做成解宏塊所需的參數流作為驅動通過全局的DMA 控制器輸入給硬件。硬件依據輸入的參數流開始宏塊解碼并將解好的數據輸出到RAM。
3 變長字解碼設計
可變長度編碼就是采用不同長度的二進制碼來表示不同符號的編碼方法。其使用較短的碼字表示出現頻率高的信息,用較長的碼字表示出現頻率低的信息。因此,與定長碼相比,可變長度編碼的壓縮效率大大提高,在視音頻編碼標準中得到了廣泛的應用。
AVS的變長碼不同于H.264,也不同于MPGE-2。AVS采用的是上下文自適應2D-VLC[5](Two Dimension Variable Length Coding)的指數哥倫布編碼。采用指數哥倫布碼一方面可以降低解碼的復雜度,無需像MPEG-2標準一樣查找一長串碼表;另一方面,它可以根據編碼元素的概率分布靈活地選擇指數哥倫布碼編碼的階數k,從而使編碼效率逼近信息熵。
3.1 k階指數哥倫布碼
指數哥倫布碼的比特串分為前綴和后綴兩部分,其碼字結構為[M][1][INFO]。M域由若干個連續的“0”組成,1域為固定的一比特數據“1”,代表了指數哥倫布碼的分隔符,M域和1域共同構成了指數哥倫布碼的前綴。INFO域為后綴,包含了信息比特數據。
對于0 階指數哥倫布碼:假設n是前綴中0的個數,后綴中信息位INFO的個數也為n位,整個碼字長度是2n+1位。碼字的編碼數據CodeNum與n以及info的關系為:
CodeNum=2n+ INFO -1;
對于k 階指數哥倫布碼: 信息位由n+k個比特構成,整個碼字長度是2n+k+1,編碼數據為:
CodeNum=2n+k+ INFO -2k。
其中AVS指數哥倫布碼階數k的取值范圍為0~3,表1為k階指數哥倫布編碼表。
AVS中定義了4種描述符來表示指數哥倫布編碼的語法元素,分別是u(e)、s(e)、m(e)、c(e) 其中:描述符ue(v) 表示語法元素的值等于CodeNum;se(v) 根據表2中給出的有符號指數哥倫布碼的映射關系求語法元素的值;me(v)根據標準中規定的映射關系求語法元素的值;ce(v) 用于表示指數哥倫布碼與殘差系數(2D-VLD) 的映射關系,ce(v)描述的語法元素采用0階、1階、2階或3階指數哥倫布編碼進行解析,對應還有19個碼表供查找。
3.2 塊殘差系數解碼
3.2.1 變長碼表ROM存儲結構設計
在AVS中,ce(v)解碼流程中要用到的一系列待查碼表共有19個,分別為色度碼表,幀間和幀內模式下的亮度碼表。這19個變長碼表在AVS標準中是以2維的形式出現的,并且原始碼表有不包含trans_coefficient值的索引項的情況,故需要重新設計變長碼表,并使其符合SOC平臺內部ROM的存放格式。該SoC平臺的內部ROM有3種存儲結構,分別為8bit,16bit和32bit。本文選用了32bit的存儲結構,這樣能做到解一變換系數trans_coefficient只查一次表,從而減少時鐘消耗。
1)(run, level)常規解碼:當transcoefficient小于59時, 內部ROM存儲結構如表3所示。解碼時,根據上層解碼單元傳來的編碼塊信息,以transcoefficient值為索引項查找映射表3得到(run, level),同時得到更新后映射碼表的表號。ESC為transcoefficient是否小于29的標志;EOB為塊結束標志;Next table為映射碼表的表號,亮度塊時Next table范圍為0~6,色度塊時Next table范圍為0~4;absLevel為Level的絕對值。
2)(run, level)逃逸解碼:當transcoefficient大于等于59時,內部ROM存儲結構如表4所示。解碼時,以transcoefficient值為索引項查找映射表4,得到run和相關變量值,與此同時,解析出escape_level_diff的值。RefAbsLevel與escape_level_diff之和為level的絕對值,level的符號位由transcoefficient的最低位決定。存儲結構中Run由( trans_coefficient-59)/2得到;RefAbsLevel為Level的參考值;如果transcoefficient為奇數時,bit0~7存放-RefAbsLevel,否則存放RefAbsLevel。
3.2.2 殘差解碼模塊設計
AVS對塊的殘差系數采用內容自適應的變長編碼,其特點是每次解碼時都需要根據上次解碼的結果切換映射碼表。不同的碼表決定了ce (v)所用的哥倫布碼的階數k。
殘差系數解析流程如圖3所示。先判斷當前塊是否存在編碼數據,如不存在,則結束當前塊解碼,開始解下一塊。若存在,則首先選取出哥倫布編碼的階數k,因為不同的編碼方式采用的哥倫布編碼階數不一樣;其次是從碼流中解析出codenum 值;然后通過codenum 的值解析并查表得出(run,level) ,再將其存入RAM 中供下一級模塊使用。
4 實現結果分析及結論
使用C代碼和匯編代碼將本文提出的可變長解碼器付諸實現。用C實現AVS碼流宏塊層以上部分語法元素解析和系統控制;用匯編代碼實現宏塊層的解碼,并在SoC仿真驗證平臺通過功能仿真。首先將平臺軟件部分實現解碼的輸出結果與AVS標準參考軟件(C代碼)RM52產生的輸出結果進行比較,比較的結果表明SoC平臺軟件部分達到了設計的要求,這樣確保SoC平臺硬件部分輸入數據正確無誤。最后將軟硬件聯合進行仿真測試,結果該VLD模塊實現了AVS視頻解碼功能并且解碼速度有所提高。
本文提出了一種基于SoC平臺的AVS解碼器可變長解碼的軟硬件分區的實現方法,該結構利用ROM存放設計合理、優化的變長碼表。采用C語言和匯編語言實現,并通過SoC仿真平臺驗證,在較低的解碼器復雜度的前提下順利地完成了可變長解碼。
參考文獻:
[1] AVS工作組.AVS視頻(報批終審稿)信息技術先進音視頻編碼第二部分:視頻[S].
[2] 國家數字音視頻解碼技術標準工作組.視頻編碼標準AVS技術介紹[J].電子產品世界,2005(19):58-62.
[3] Tseng P C, Chang Y C, Huang Y W, et al.Advances in hardware architectures for image and video coding-A survey[J].Proceeding of the IEEE,2005,93(1):184-197.
[4] 賈惠柱,解曉東,高文.基于軟硬件分區的AVS高清視頻解碼器結構[J].計算機研究與發展,2008,45(3):510-518.
[5] Yanmei Qu, Yun He.A Simple and Memory Efficient VLSI Architecture of CA-2D-VLC Decoder for AVS[M].Proc.PCS2006,in press.