林子明 梁利平



摘 ???要:為解決最新一代視頻壓縮標(biāo)準(zhǔn)HEVC (High Efficiency Video Coding)中熵解碼部分存在的語法元素串行依賴性問題,本文提出一種低時(shí)鐘數(shù)冗余的CABAC(Context-Based Adaptive Arithmetic Coding)硬件解碼器實(shí)現(xiàn)方案.核心采用動(dòng)態(tài)碼表預(yù)處理方式和并行處理電路設(shè)計(jì),提高了時(shí)鐘利用效率,滿足HEVC Level4.1 Main Tier的全部要求,可以以40 MHz的時(shí)鐘完成1080HD@60fps的視頻實(shí)時(shí)解碼.
關(guān)鍵詞:HEVC;CABAC;解碼器;熵解碼;低冗余
中圖分類號(hào):TN41 ??????????????文獻(xiàn)標(biāo)志碼: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標(biāo)準(zhǔn)在2013年正式發(fā)布,其核心目標(biāo)在于:在H.264 High Profile 的基礎(chǔ)上,壓縮效率提高1倍.HEVC整體上依然采用H.264的預(yù)測(cè)加變換的混合編碼結(jié)構(gòu),其中在熵編碼部分舍棄了變長(zhǎng)編碼、統(tǒng)一采用基于上下文的自適應(yīng)算術(shù)編碼(CABAC).CABAC壓縮算法是一種高壓縮效率的算法,其壓縮效率較變長(zhǎng)編碼CAVLC提高了9%~14%,同時(shí)也大幅提高了算法復(fù)雜度,其串行本質(zhì)決定了其在高清、超高清應(yīng)用中實(shí)現(xiàn)實(shí)時(shí)編解碼非常困難.
在CABAC應(yīng)用中,編碼和解碼過程的串行依賴主要來源于兩個(gè)方面:CABAC算法依賴和HEVC語法結(jié)構(gòu)依賴.CABAC算法依賴存在于區(qū)間信息更新和上下文模型更新,比特間的依賴性導(dǎo)致難以連續(xù)多個(gè)時(shí)鐘周期的連續(xù)計(jì)算.HEVC語法結(jié)構(gòu)依賴存在于視頻協(xié)議中,為了提高壓縮效率,減少不必要的信息量,后續(xù)語法元素的選擇嚴(yán)重依賴前面的語法元素信息選擇,難以并行化處理,導(dǎo)致實(shí)際編碼和解碼過程時(shí)鐘利用率不高.
在文獻(xiàn)[1-3]中,提出優(yōu)化的常規(guī)解碼計(jì)算引擎,可以高效完成一個(gè)比特的解碼,但對(duì)區(qū)間正規(guī)化和語法元素間的依賴沒有進(jìn)行優(yōu)化.由于算術(shù)編碼對(duì)于區(qū)間的劃分有精度的限制,在達(dá)到一定的區(qū)間長(zhǎng)度后需要對(duì)區(qū)間進(jìn)行歸一化處理以保證算法的壓縮效率,導(dǎo)致實(shí)際應(yīng)用中效率仍然較低.
基于并行計(jì)算的考慮,文獻(xiàn)[4]中的作者提出采用多個(gè)解碼單元預(yù)測(cè)計(jì)算的技術(shù),通過多個(gè)計(jì)算單元的并行化處理來提高峰值解碼能力,但是并未解決HEVC算法中語法元素間的依賴性.該算法在碼流中大量存在小碼塊無預(yù)測(cè)的情形下以及亮度、色度計(jì)算等無依賴情形下,多個(gè)計(jì)算單元處理效率較高,在預(yù)測(cè)幀(P幀或B幀)中或圖像內(nèi)容劇烈變化情形下,語法元素依賴性極高,解碼單元利用率降低,平均到每個(gè)解碼單元的實(shí)際解碼效率較低.
在文獻(xiàn)[4-6]中,雖然解碼器實(shí)現(xiàn)的峰值解碼能力及平均解碼速度較高,但是多數(shù)解碼器單個(gè)宏塊解碼仍需300個(gè)以上的時(shí)鐘周期,最快也需要118個(gè)周期,可見其解碼過程中有很大部分的解碼過程存在計(jì)算資源等待的情況,造成資源浪費(fèi).此外,文獻(xiàn)[7]根據(jù)不同語法元素統(tǒng)計(jì)特性將語法元素分組處理,達(dá)到了很高的解碼速度,但該方法需專用碼流,通用性較差,不具滿足一般應(yīng)用要求.
本文針對(duì)CABAC算法依賴性和HEVC語法結(jié)構(gòu)依賴性提出一種低冗余全系統(tǒng)的CABAC硬件解碼器實(shí)現(xiàn)方案.設(shè)計(jì)單周期的算數(shù)解碼引擎,高效完成區(qū)間信息和上下文模型的更新以及區(qū)間正規(guī)化過程.采用動(dòng)態(tài)碼表預(yù)測(cè)技術(shù),有效消除語法結(jié)構(gòu)中存在的語法元素的串行依賴,減少解碼器解碼過程中的時(shí)鐘周期冗余.本文主要分為以下幾部分:第1節(jié)介紹CABAC算法和HEVC語法結(jié)構(gòu)依賴的來源,分析其實(shí)現(xiàn)的瓶頸;第2節(jié)提出本文的實(shí)現(xiàn)結(jié)構(gòu)以及采用的新算法;第3節(jié)給出硬件的測(cè)試結(jié)果并在第4節(jié)給出本文結(jié)論.
1 ??串行依賴性來源
CABAC算法基本思想是用0~1之間的一個(gè)數(shù)字表示整個(gè)碼流,編碼方式是區(qū)間遞進(jìn),這種壓縮算法的壓縮性能更接近熵極限[8].一個(gè)典型的?一個(gè)比特的解碼過程分為:1)獲取上下文模型和待解碼比特;2)比特級(jí)解碼計(jì)算;3)更新上下文模型.且第二個(gè)比特的上下文模型選取依賴于第一個(gè)比特解碼結(jié)果,這種串行依賴性嚴(yán)重制約了解碼器吞吐率的提高,是制約整個(gè)CABAC解碼技術(shù)過程的瓶頸[7].反二值化過程為語法元素級(jí)處理,影響到解碼結(jié)果輸出和下一個(gè)上下文模型的選擇,如圖1(b)所示,語法元素A解碼完成后需經(jīng)過兩級(jí)判斷才能確定下一個(gè)語法元素類型,在此判斷過程中,解碼計(jì)算單元處于空閑狀態(tài),這一結(jié)構(gòu)性依賴造成大量時(shí)鐘浪費(fèi).因此需要優(yōu)化語法元素調(diào)度算法并優(yōu)化解碼電路引擎,提高CABAC解碼器的吞吐率.
2 ??硬件實(shí)現(xiàn)
根據(jù)前面分析,本設(shè)計(jì)針對(duì)CABAC算法依賴和HEVC語法結(jié)構(gòu)進(jìn)行了深入研究,設(shè)計(jì)單周期解碼引擎解決比特級(jí)串行依賴,設(shè)計(jì)預(yù)測(cè)單元解決語法元素級(jí)的串行依賴性,提高計(jì)算資源的利用率,縮短解碼時(shí)間.
2.1 ??解碼引擎
根據(jù)前面對(duì)CABAC算法分析可知,一個(gè)算數(shù)解碼運(yùn)算需經(jīng)歷上下文模型讀取、解碼計(jì)算和上下文模型更新三個(gè)階段.其中真正的計(jì)算狀態(tài)只有解碼計(jì)算過程,上下文模型更新和區(qū)間長(zhǎng)度更新過程將造成計(jì)算單元停滯狀態(tài).進(jìn)一步分析得出如下
結(jié)論:
1)比特的解碼值輸出僅與當(dāng)前輸入?yún)^(qū)間長(zhǎng)度
信息和偏移量相關(guān);
2)上下文模型可根據(jù)當(dāng)前輸入的區(qū)間信息和
偏移量進(jìn)行更新;
3)區(qū)間的歸一化操作僅與當(dāng)前輸入?yún)^(qū)間信息初始值相關(guān);
4)比特流輸入僅有0和1兩種可能性.
因此,本設(shè)計(jì)將區(qū)間信息更新過程、上下文模型更新過程與解碼運(yùn)算過程并行實(shí)現(xiàn),如圖2所示.
在每個(gè)比特的解碼階段同時(shí)獲取區(qū)間信息和偏移量以及0和1對(duì)應(yīng)的上下文模型,分別計(jì)算輸入碼流為0和1兩種可能性下的區(qū)間信息更新值和上下文模型更新值,最后通過一級(jí)2選1邏輯輸出解碼結(jié)果.由于區(qū)間信息在整個(gè)解碼過程中持續(xù)更新且不隨著語法元素的變化而變化,因此在解碼單元內(nèi)暫存更新后的區(qū)間信息和偏移量以減少下個(gè)比特解碼時(shí)的區(qū)間信息讀取時(shí)間.通過以上優(yōu)化,單個(gè)比特的解碼過程只需一個(gè)時(shí)鐘周期即可完成,且下一個(gè)比特的上下文模型可以在本周期內(nèi)預(yù)測(cè),以減少比特間解碼的等待過程.
2.2 ??塊信息預(yù)處理
語法結(jié)構(gòu)依賴是CABAC解碼器設(shè)計(jì)過程中另一個(gè)瓶頸,該問題源于協(xié)議開發(fā)階段片面追求高壓縮率而忽略了算法復(fù)雜度的提高.通常在連續(xù)兩個(gè)語法元素解碼過程中,后續(xù)語法元素的存在性以及后續(xù)語法元素上下文模型選取需要等待第一個(gè)語法元素解碼完成并保存相關(guān)信息,從而造成解碼器空轉(zhuǎn)形成時(shí)鐘浪費(fèi).在HEVC中,由于大尺寸圖像和大范圍變換塊處理數(shù)量急劇增加,導(dǎo)致殘差模塊的計(jì)算是在整個(gè)CABAC解碼中數(shù)據(jù)量最多的部分.例如對(duì)于一個(gè)最小的4*4變換塊,HEVC語法結(jié)構(gòu)共定義了11個(gè)語法元素來表示一個(gè)點(diǎn)的值,由于各點(diǎn)信息在實(shí)際碼流中是否存在對(duì)解碼器是不可知的,理論上解碼器最多需要分析176個(gè)語法元素.
這種冗余部分的分析過程造成了在文獻(xiàn)[4-6,9-10]所實(shí)現(xiàn)的設(shè)計(jì)中,雖然單個(gè)比特的解碼速度很高,但實(shí)際解碼過程時(shí)鐘開銷遠(yuǎn)大于理論值,解碼效率較低的結(jié)果.
根據(jù)DCT/DST特性可知,變換后的能量主要集中在矩陣左上部分,而大多數(shù)的位置變換值為0,以圖3(a)為例:實(shí)際碼流中只存在左上角6個(gè)位置的圖像信息(陰影部分),其余10個(gè)位置未編入碼流,存在優(yōu)化的空間.
如圖3(b)所示,對(duì)于一個(gè)變換塊,變換后分為有效子塊(陰影部分)和無效子塊,其有效性由transform_skip_flag和coded_sub_block_flag兩個(gè)語法元素指示.因此在實(shí)際解碼過程中可在比特級(jí)解碼階段根據(jù)指示標(biāo)志預(yù)測(cè)下一個(gè)解碼的實(shí)際數(shù)據(jù)塊位置信息和語法元素類型,略過子塊2和3的分析過程.
殘差塊編碼數(shù)據(jù)分解.對(duì)于圖3(a)所示的殘差塊,其有效部分由符號(hào)位和數(shù)值位組成,分解如圖4(a).
分解后的信息由符號(hào)標(biāo)志,殘差值組成,涉及l(fā)ast_sig_coeff_x,last_sig_coeff_y,sig_coeff_flag和coeff_abs_level幾種語法元素信息,其中通過last_sig_coeff_x,last_sig_coeff_y可計(jì)算出最后一個(gè)有效數(shù)據(jù)的位置,通過sig_coeff_flag和coeff_abs_level可計(jì)算出有效殘差值位置的信息.
基于以上考慮,本設(shè)計(jì)提出一種動(dòng)態(tài)的碼表技術(shù),如圖4(b)所示.在解碼過程中,每個(gè)塊根據(jù)當(dāng)前塊數(shù)據(jù)標(biāo)志信息和位置信息動(dòng)態(tài)預(yù)測(cè)后續(xù)碼流中實(shí)際需要解碼的語法元素位置信息,并更新對(duì)應(yīng)的動(dòng)態(tài)碼表.在后面解碼對(duì)應(yīng)的語法元素時(shí),僅需要從表中讀取需要解碼的位置信息,而不需要再對(duì)每個(gè)位置進(jìn)行分析判斷語法元素是否存在,以此大幅度減少碼流解碼過程的分析過程.在實(shí)現(xiàn)中,采用三組寄存器作為動(dòng)態(tài)碼表,在解碼過程中分別存儲(chǔ)有效符號(hào)位置信息,以圖4(b)為例,有效殘差值位置信息和殘差幅度大于2的位置信息.通過該預(yù)處理機(jī)制,可以在協(xié)議分析過程中預(yù)先剔除無效位置,使解碼器始終處于解碼計(jì)算狀態(tài).
通過以上預(yù)處理技術(shù),可有效降低變換塊和殘差塊中無效數(shù)據(jù)位置的處理過程,大幅度壓縮實(shí)際解碼時(shí)間.處理效果如圖5所示.
2.3 ??語法元素預(yù)測(cè)機(jī)制
對(duì)于非變換塊部分的語法元素,仍存在大量的圖1(b)所示情形,下一個(gè)語法元素類型的選擇取決于前一個(gè)語法元素的最終結(jié)果,在此切換期間存在著較多的計(jì)算單元空閑狀態(tài).針對(duì)此情況,本設(shè)計(jì)采用轉(zhuǎn)移預(yù)測(cè)的思想進(jìn)行優(yōu)化.
視頻文件的起始幀均為I幀,一般來講對(duì)于一個(gè)視頻文件,尤其是在高分辨率高幀率的應(yīng)用下,相鄰圖像間和相鄰塊之間差異很小,因此相同語法元素連續(xù)出現(xiàn)的概率較高.基于以上思想,本設(shè)計(jì)中增加了一組語法元素記錄器,對(duì)涉及條件分支的判斷的語法元素共記錄3次,如圖6所示.
對(duì)于起始狀態(tài),無轉(zhuǎn)移預(yù)測(cè),從第二次開始進(jìn)行條件轉(zhuǎn)移預(yù)測(cè),預(yù)測(cè)成功時(shí)跳過圖1(b)中的條件判斷過程,預(yù)測(cè)失敗時(shí)進(jìn)行條件轉(zhuǎn)移判斷.記錄器根據(jù)當(dāng)前記錄結(jié)果進(jìn)行預(yù)測(cè),記錄值大的預(yù)測(cè)可能性更高,相同時(shí),下次預(yù)測(cè)以本次實(shí)際值為方向.基于以上算法,可進(jìn)一步降低語法元素間的串行依賴性,降低計(jì)算資源的空閑率.
3 ??測(cè)試結(jié)果
本設(shè)計(jì)提出全系統(tǒng)CABAC解碼器,整個(gè)解碼器完成從碼流分析,參數(shù)集解析,到全部語法元素解碼并輸出全部過程.以Altera Stratix III 為平臺(tái)進(jìn)行測(cè)試.
整個(gè)解碼系統(tǒng)以參考軟件HM10.0作為參照進(jìn)行解碼正確性比對(duì),完成7種不同1080HD@60 fps碼流的解碼測(cè)試如表1所示.
原始結(jié)果為未進(jìn)行優(yōu)化時(shí)解碼器性能.由以上測(cè)試可以看出,采用動(dòng)態(tài)碼表去除冗余空拍后可以節(jié)省20%左右的時(shí)鐘周期,采用語法元素預(yù)測(cè)機(jī)制最終實(shí)現(xiàn)高于0.6bin/cycle的解碼速度.經(jīng)過仿真測(cè)試,平均每個(gè)編碼單元僅需85個(gè)時(shí)鐘周期,遠(yuǎn)低于文獻(xiàn)[11]中實(shí)現(xiàn)的效果.文獻(xiàn)[7]雖然實(shí)現(xiàn)很高的解碼能力,但是代價(jià)是大量的解碼引擎資源浪費(fèi),平均到每個(gè)解碼單元的處理能力并不高.另外文獻(xiàn)[12-14]提出不同的解碼器實(shí)現(xiàn),都需要100 MHz以上的時(shí)鐘頻率完成1920×1080@30 fps的視頻解碼,而本實(shí)現(xiàn)僅需不超過40 MHz的時(shí)鐘即可完成1920×1080@60 fps的視頻解碼,完全滿足HEVC Level4.1 Main Tier的速度要求.本設(shè)計(jì)在FPGA上最高可實(shí)現(xiàn)65 MHz的解碼速度,每秒完成90幀的1080HD視頻解碼.表2所示為本設(shè)計(jì)與之前設(shè)計(jì)的實(shí)現(xiàn)結(jié)果.本設(shè)計(jì)未能及時(shí)流片,DC 65 nm工藝綜合速度為95 MHz,可滿足1920×1080@120 fps的視頻解碼需求.
4 ??結(jié) ??論
本文提出一個(gè)低冗余的HEVC全系統(tǒng)CABAC解碼實(shí)現(xiàn)方案,實(shí)現(xiàn)高效率的HEVC熵解碼器,提高了時(shí)鐘利用效率.本設(shè)計(jì)中,預(yù)測(cè)處理和并行化設(shè)計(jì)起到了重要作用,實(shí)現(xiàn)一個(gè)全系統(tǒng)CABAC解碼器,可以以40 MHz時(shí)鐘完成1920*1080 @60 fps的視頻解碼,完全滿足HEVC Main Profile Level 4.1 Main Tier的速度要求.
參考文獻(xiàn)
[1] ???朱敏,劉雷波,魏少軍. 一種CABAC解碼引擎的芯片實(shí)現(xiàn)[J]. 電路與系統(tǒng)學(xué)報(bào),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ì)[J]. ?武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),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ū)域檢測(cè)的HEVC幀內(nèi)編碼快速算法[J]. 西安電子科技大學(xué)學(xué)報(bào),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.