林子明 梁利平
摘 ???要:為解決最新一代視頻壓縮標準HEVC (High Efficiency Video Coding)中熵解碼部分存在的語法元素串行依賴性問題,本文提出一種低時鐘數(shù)冗余的CABAC(Context-Based Adaptive Arithmetic Coding)硬件解碼器實現(xiàn)方案.核心采用動態(tài)碼表預(yù)處理方式和并行處理電路設(shè)計,提高了時鐘利用效率,滿足HEVC Level4.1 Main Tier的全部要求,可以以40 MHz的時鐘完成1080HD@60fps的視頻實時解碼.
關(guān)鍵詞:HEVC;CABAC;解碼器;熵解碼;低冗余
中圖分類號:TN41 ??????????????文獻標志碼:A
A Full System Low Redundancy CABAC Decoder for HEVC
LIN Ziming,LIANG Liping
(Institute of Microelectronics of Chinese Academy of ?Sciences,Beijing 100029,China)
Abstract: To solve the serial dependency problem that came up with CABAC in the next generation of video coding standard called High Efficiency Video Coding(HEVC),this work proposed a low redundancy full system CABAC decoder solution. By adopting the dynamic codebook and parallel computing design, this work improved the clock efficiency and could satisfy the HEVC Level4.1 Main Tier and decode a 1080HD@60fps video with a clock of 40MHz.
Key words: HEVC;CABAC;decoder;entropy decoding;low redundancy
HEVC標準在2013年正式發(fā)布,其核心目標在于:在H.264 High Profile 的基礎(chǔ)上,壓縮效率提高1倍.HEVC整體上依然采用H.264的預(yù)測加變換的混合編碼結(jié)構(gòu),其中在熵編碼部分舍棄了變長編碼、統(tǒng)一采用基于上下文的自適應(yīng)算術(shù)編碼(CABAC).CABAC壓縮算法是一種高壓縮效率的算法,其壓縮效率較變長編碼CAVLC提高了9%~14%,同時也大幅提高了算法復(fù)雜度,其串行本質(zhì)決定了其在高清、超高清應(yīng)用中實現(xiàn)實時編解碼非常困難.
在CABAC應(yīng)用中,編碼和解碼過程的串行依賴主要來源于兩個方面:CABAC算法依賴和HEVC語法結(jié)構(gòu)依賴.CABAC算法依賴存在于區(qū)間信息更新和上下文模型更新,比特間的依賴性導(dǎo)致難以連續(xù)多個時鐘周期的連續(xù)計算.HEVC語法結(jié)構(gòu)依賴存在于視頻協(xié)議中,為了提高壓縮效率,減少不必要的信息量,后續(xù)語法元素的選擇嚴重依賴前面的語法元素信息選擇,難以并行化處理,導(dǎo)致實際編碼和解碼過程時鐘利用率不高.
在文獻[1-3]中,提出優(yōu)化的常規(guī)解碼計算引擎,可以高效完成一個比特的解碼,但對區(qū)間正規(guī)化和語法元素間的依賴沒有進行優(yōu)化.由于算術(shù)編碼對于區(qū)間的劃分有精度的限制,在達到一定的區(qū)間長度后需要對區(qū)間進行歸一化處理以保證算法的壓縮效率,導(dǎo)致實際應(yīng)用中效率仍然較低.
基于并行計算的考慮,文獻[4]中的作者提出采用多個解碼單元預(yù)測計算的技術(shù),通過多個計算單元的并行化處理來提高峰值解碼能力,但是并未解決HEVC算法中語法元素間的依賴性.該算法在碼流中大量存在小碼塊無預(yù)測的情形下以及亮度、色度計算等無依賴情形下,多個計算單元處理效率較高,在預(yù)測幀(P幀或B幀)中或圖像內(nèi)容劇烈變化情形下,語法元素依賴性極高,解碼單元利用率降低,平均到每個解碼單元的實際解碼效率較低.
在文獻[4-6]中,雖然解碼器實現(xiàn)的峰值解碼能力及平均解碼速度較高,但是多數(shù)解碼器單個宏塊解碼仍需300個以上的時鐘周期,最快也需要118個周期,可見其解碼過程中有很大部分的解碼過程存在計算資源等待的情況,造成資源浪費.此外,文獻[7]根據(jù)不同語法元素統(tǒng)計特性將語法元素分組處理,達到了很高的解碼速度,但該方法需專用碼流,通用性較差,不具滿足一般應(yīng)用要求.
本文針對CABAC算法依賴性和HEVC語法結(jié)構(gòu)依賴性提出一種低冗余全系統(tǒng)的CABAC硬件解碼器實現(xiàn)方案.設(shè)計單周期的算數(shù)解碼引擎,高效完成區(qū)間信息和上下文模型的更新以及區(qū)間正規(guī)化過程.采用動態(tài)碼表預(yù)測技術(shù),有效消除語法結(jié)構(gòu)中存在的語法元素的串行依賴,減少解碼器解碼過程中的時鐘周期冗余.本文主要分為以下幾部分:第1節(jié)介紹CABAC算法和HEVC語法結(jié)構(gòu)依賴的來源,分析其實現(xiàn)的瓶頸;第2節(jié)提出本文的實現(xiàn)結(jié)構(gòu)以及采用的新算法;第3節(jié)給出硬件的測試結(jié)果并在第4節(jié)給出本文結(jié)論.
1 ??串行依賴性來源
CABAC算法基本思想是用0~1之間的一個數(shù)字表示整個碼流,編碼方式是區(qū)間遞進,這種壓縮算法的壓縮性能更接近熵極限[8].一個典型的?一個比特的解碼過程分為:1)獲取上下文模型和待解碼比特;2)比特級解碼計算;3)更新上下文模型.且第二個比特的上下文模型選取依賴于第一個比特解碼結(jié)果,這種串行依賴性嚴重制約了解碼器吞吐率的提高,是制約整個CABAC解碼技術(shù)過程的瓶頸[7].反二值化過程為語法元素級處理,影響到解碼結(jié)果輸出和下一個上下文模型的選擇,如圖1(b)所示,語法元素A解碼完成后需經(jīng)過兩級判斷才能確定下一個語法元素類型,在此判斷過程中,解碼計算單元處于空閑狀態(tài),這一結(jié)構(gòu)性依賴造成大量時鐘浪費.因此需要優(yōu)化語法元素調(diào)度算法并優(yōu)化解碼電路引擎,提高CABAC解碼器的吞吐率.
2 ??硬件實現(xiàn)
根據(jù)前面分析,本設(shè)計針對CABAC算法依賴和HEVC語法結(jié)構(gòu)進行了深入研究,設(shè)計單周期解碼引擎解決比特級串行依賴,設(shè)計預(yù)測單元解決語法元素級的串行依賴性,提高計算資源的利用率,縮短解碼時間.
2.1 ??解碼引擎
根據(jù)前面對CABAC算法分析可知,一個算數(shù)解碼運算需經(jīng)歷上下文模型讀取、解碼計算和上下文模型更新三個階段.其中真正的計算狀態(tài)只有解碼計算過程,上下文模型更新和區(qū)間長度更新過程將造成計算單元停滯狀態(tài).進一步分析得出如下
結(jié)論:
1)比特的解碼值輸出僅與當(dāng)前輸入?yún)^(qū)間長度
信息和偏移量相關(guān);
2)上下文模型可根據(jù)當(dāng)前輸入的區(qū)間信息和
偏移量進行更新;
3)區(qū)間的歸一化操作僅與當(dāng)前輸入?yún)^(qū)間信息初始值相關(guān);
4)比特流輸入僅有0和1兩種可能性.
因此,本設(shè)計將區(qū)間信息更新過程、上下文模型更新過程與解碼運算過程并行實現(xiàn),如圖2所示.
在每個比特的解碼階段同時獲取區(qū)間信息和偏移量以及0和1對應(yīng)的上下文模型,分別計算輸入碼流為0和1兩種可能性下的區(qū)間信息更新值和上下文模型更新值,最后通過一級2選1邏輯輸出解碼結(jié)果.由于區(qū)間信息在整個解碼過程中持續(xù)更新且不隨著語法元素的變化而變化,因此在解碼單元內(nèi)暫存更新后的區(qū)間信息和偏移量以減少下個比特解碼時的區(qū)間信息讀取時間.通過以上優(yōu)化,單個比特的解碼過程只需一個時鐘周期即可完成,且下一個比特的上下文模型可以在本周期內(nèi)預(yù)測,以減少比特間解碼的等待過程.
2.2 ??塊信息預(yù)處理
語法結(jié)構(gòu)依賴是CABAC解碼器設(shè)計過程中另一個瓶頸,該問題源于協(xié)議開發(fā)階段片面追求高壓縮率而忽略了算法復(fù)雜度的提高.通常在連續(xù)兩個語法元素解碼過程中,后續(xù)語法元素的存在性以及后續(xù)語法元素上下文模型選取需要等待第一個語法元素解碼完成并保存相關(guān)信息,從而造成解碼器空轉(zhuǎn)形成時鐘浪費.在HEVC中,由于大尺寸圖像和大范圍變換塊處理數(shù)量急劇增加,導(dǎo)致殘差模塊的計算是在整個CABAC解碼中數(shù)據(jù)量最多的部分.例如對于一個最小的4*4變換塊,HEVC語法結(jié)構(gòu)共定義了11個語法元素來表示一個點的值,由于各點信息在實際碼流中是否存在對解碼器是不可知的,理論上解碼器最多需要分析176個語法元素.
這種冗余部分的分析過程造成了在文獻[4-6,9-10]所實現(xiàn)的設(shè)計中,雖然單個比特的解碼速度很高,但實際解碼過程時鐘開銷遠大于理論值,解碼效率較低的結(jié)果.
根據(jù)DCT/DST特性可知,變換后的能量主要集中在矩陣左上部分,而大多數(shù)的位置變換值為0,以圖3(a)為例:實際碼流中只存在左上角6個位置的圖像信息(陰影部分),其余10個位置未編入碼流,存在優(yōu)化的空間.
如圖3(b)所示,對于一個變換塊,變換后分為有效子塊(陰影部分)和無效子塊,其有效性由transform_skip_flag和coded_sub_block_flag兩個語法元素指示.因此在實際解碼過程中可在比特級解碼階段根據(jù)指示標志預(yù)測下一個解碼的實際數(shù)據(jù)塊位置信息和語法元素類型,略過子塊2和3的分析過程.
殘差塊編碼數(shù)據(jù)分解.對于圖3(a)所示的殘差塊,其有效部分由符號位和數(shù)值位組成,分解如圖4(a).
分解后的信息由符號標志,殘差值組成,涉及l(fā)ast_sig_coeff_x,last_sig_coeff_y,sig_coeff_flag和coeff_abs_level幾種語法元素信息,其中通過last_sig_coeff_x,last_sig_coeff_y可計算出最后一個有效數(shù)據(jù)的位置,通過sig_coeff_flag和coeff_abs_level可計算出有效殘差值位置的信息.
基于以上考慮,本設(shè)計提出一種動態(tài)的碼表技術(shù),如圖4(b)所示.在解碼過程中,每個塊根據(jù)當(dāng)前塊數(shù)據(jù)標志信息和位置信息動態(tài)預(yù)測后續(xù)碼流中實際需要解碼的語法元素位置信息,并更新對應(yīng)的動態(tài)碼表.在后面解碼對應(yīng)的語法元素時,僅需要從表中讀取需要解碼的位置信息,而不需要再對每個位置進行分析判斷語法元素是否存在,以此大幅度減少碼流解碼過程的分析過程.在實現(xiàn)中,采用三組寄存器作為動態(tài)碼表,在解碼過程中分別存儲有效符號位置信息,以圖4(b)為例,有效殘差值位置信息和殘差幅度大于2的位置信息.通過該預(yù)處理機制,可以在協(xié)議分析過程中預(yù)先剔除無效位置,使解碼器始終處于解碼計算狀態(tài).
通過以上預(yù)處理技術(shù),可有效降低變換塊和殘差塊中無效數(shù)據(jù)位置的處理過程,大幅度壓縮實際解碼時間.處理效果如圖5所示.
2.3 ??語法元素預(yù)測機制
對于非變換塊部分的語法元素,仍存在大量的圖1(b)所示情形,下一個語法元素類型的選擇取決于前一個語法元素的最終結(jié)果,在此切換期間存在著較多的計算單元空閑狀態(tài).針對此情況,本設(shè)計采用轉(zhuǎn)移預(yù)測的思想進行優(yōu)化.
視頻文件的起始幀均為I幀,一般來講對于一個視頻文件,尤其是在高分辨率高幀率的應(yīng)用下,相鄰圖像間和相鄰塊之間差異很小,因此相同語法元素連續(xù)出現(xiàn)的概率較高.基于以上思想,本設(shè)計中增加了一組語法元素記錄器,對涉及條件分支的判斷的語法元素共記錄3次,如圖6所示.
對于起始狀態(tài),無轉(zhuǎn)移預(yù)測,從第二次開始進行條件轉(zhuǎn)移預(yù)測,預(yù)測成功時跳過圖1(b)中的條件判斷過程,預(yù)測失敗時進行條件轉(zhuǎn)移判斷.記錄器根據(jù)當(dāng)前記錄結(jié)果進行預(yù)測,記錄值大的預(yù)測可能性更高,相同時,下次預(yù)測以本次實際值為方向.基于以上算法,可進一步降低語法元素間的串行依賴性,降低計算資源的空閑率.
3 ??測試結(jié)果
本設(shè)計提出全系統(tǒng)CABAC解碼器,整個解碼器完成從碼流分析,參數(shù)集解析,到全部語法元素解碼并輸出全部過程.以Altera Stratix III 為平臺進行測試.
整個解碼系統(tǒng)以參考軟件HM10.0作為參照進行解碼正確性比對,完成7種不同1080HD@60 fps碼流的解碼測試如表1所示.
原始結(jié)果為未進行優(yōu)化時解碼器性能.由以上測試可以看出,采用動態(tài)碼表去除冗余空拍后可以節(jié)省20%左右的時鐘周期,采用語法元素預(yù)測機制最終實現(xiàn)高于0.6bin/cycle的解碼速度.經(jīng)過仿真測試,平均每個編碼單元僅需85個時鐘周期,遠低于文獻[11]中實現(xiàn)的效果.文獻[7]雖然實現(xiàn)很高的解碼能力,但是代價是大量的解碼引擎資源浪費,平均到每個解碼單元的處理能力并不高.另外文獻[12-14]提出不同的解碼器實現(xiàn),都需要100 MHz以上的時鐘頻率完成1920×1080@30 fps的視頻解碼,而本實現(xiàn)僅需不超過40 MHz的時鐘即可完成1920×1080@60 fps的視頻解碼,完全滿足HEVC Level4.1 Main Tier的速度要求.本設(shè)計在FPGA上最高可實現(xiàn)65 MHz的解碼速度,每秒完成90幀的1080HD視頻解碼.表2所示為本設(shè)計與之前設(shè)計的實現(xiàn)結(jié)果.本設(shè)計未能及時流片,DC 65 nm工藝綜合速度為95 MHz,可滿足1920×1080@120 fps的視頻解碼需求.
4 ??結(jié) ??論
本文提出一個低冗余的HEVC全系統(tǒng)CABAC解碼實現(xiàn)方案,實現(xiàn)高效率的HEVC熵解碼器,提高了時鐘利用效率.本設(shè)計中,預(yù)測處理和并行化設(shè)計起到了重要作用,實現(xiàn)一個全系統(tǒng)CABAC解碼器,可以以40 MHz時鐘完成1920*1080 @60 fps的視頻解碼,完全滿足HEVC Main Profile Level 4.1 Main Tier的速度要求.
參考文獻
[1] ???朱敏,劉雷波,魏少軍. 一種CABAC解碼引擎的芯片實現(xiàn)[J]. 電路與系統(tǒng)學(xué)報,2013,18(2):6—11.
ZHU M,LIU L B,WEI S J. An implementation of CABAC decoding engine[J]. Journal of Circuits and Systems,2013,18(2):6—11.(In Chinese)
[2] ?HUANG K,MA D,YAN R J,et al. High throughput VLSI architecture for H.264/AVC context-based adaptive binary arithmetic coding (CABAC) decoding[J]. ?Journal of Zhejiang University (Science C),2013,14(6): 449—463.
[3] ???田曉華. 一種高吞吐率CABAC硬件編碼器設(shè)計[J]. ?武漢理工大學(xué)學(xué)報(信息與管理工程版),2013,35(4): 490—495.
TIAN X H. A high throughput CABAC encoder design[J]. Journal of Wuhan University of Technology(Information & Management Engineering),2013,35(4): 490—495.(In Chinese)
[4] ???YU W,HE Y. A high performance CABAC decoding architecture[J]. IEEE Transactions on Consumer Electronics,2005,51(4): 1352—1359.
[5] ???YANG Y C,LIN C C,CHANG S C,et al. A high throughput VLSI architecture design for H.264 context-based adaptive binary arithmetic decoding with look ahead parsing[C]//Multimedia and Expo,2006 IEEE International Conference. Toronto,Ont: IEEE ,2006: 357—360.
[6] ???ZHENG Y,ZHENG S B,HUANG Z H,et al. A time and storage optimized hardware design for context-based adaptive binary arithmetic decoding in H.264/AVC[C]//Multimedia and Expo,IEEE International Conference. Beijing: IEEE,2007: 1567—1570.
[7] ???SZE V,CHANDRAKASAN A P. A highly parallel and scalable CABAC decoder for next generation video coding[J]. IEEE Journal of Solid-state Circuits,2012,47(1):8—22.
[8] ???GONZALEZ R C,WOODS R E. 數(shù)字圖像處理[M]. 第三版.北京: 電子工業(yè)出版社,2011.
GONZALEZ R C,WOODS R E. Digital image processing[M]. Third Edition. Beijing: Publishing House of Industry,2011.(In Chinese)
[9] ??CHEN J W,LIN Y L. A high-performance hardwired CABAC decoder for ultra-high resolution video[J]. IEEE Transactions on Consumer Electronics,2009,55(3):1614—1622.
[10] ?蔣潔. 利用平滑區(qū)域檢測的HEVC幀內(nèi)編碼快速算法[J]. 西安電子科技大學(xué)學(xué)報,2013,40(3):194—200.
JIANG J. Fast intra coding algorithm using smooth region detection for HEVC[J]. Journal of Xidian University,2013,40(3):194—200. (In Chinese)
[11] SONG R,CUI H,LI Y,et al. High-efficiency pipeline design of binary arithmetic encoder[J]. Science China Information Sciences,2014,57(9): 1—8.
[12] YANG Y C,GYO J I. High-throughput H. 264/AVC high-profile CABAC decoder for HDTV applications[J]. IEEE Transactions on Circuits and Systems for Video Technology,2009,19(9):1395—1399.
[13] ?YI Y S,PARK I C. High-speed H. 264/AVC CABAC decoding[J]. IEEE Transactions on Circuits and Systems for Video Technology,2007,17(4):490—494.
[14] ?LIAO Y H,LI G L,CHANG T S. A high throughput VLSI design with hybrid memory architecture for H. 264/AVC CABAC decoder[C]//Circuits and Systems ISCAS,Proceedings of 2010 IEEE International Symposium. Paris: IEEE,2010:2007—2010.