李程達(dá),陳 煒
(福建郵科通信技術(shù)有限公司,福建 福州 350002)
H.264/AVC作為新一代視頻壓縮技術(shù),引入了CAV?LC和CABAC兩種全新的熵編碼方法。CAVLC和CA?BAC是在充分考慮編碼數(shù)據(jù)特性的基礎(chǔ)上對數(shù)據(jù)進(jìn)行壓縮,算法利用了相鄰數(shù)據(jù)間的相關(guān)性,可以動態(tài)調(diào)整編碼表,這些都為H.264/AVC的高壓縮率奠定了基礎(chǔ)。其中,CAVLC根據(jù)已編碼句法元素的情況,動態(tài)調(diào)整編碼中使用的碼表,取得了極高的壓縮比。本文在對CAVLC編碼原理分析的基礎(chǔ)上,優(yōu)化了相關(guān)算法,并針對該算法設(shè)計了相應(yīng)的電路結(jié)構(gòu),實現(xiàn)了待編碼殘差塊的數(shù)據(jù)特征處理,簡化了后續(xù)運算的復(fù)雜性,提高了處理能力。
在H.264/AVC中,CAVLC用于亮度和色度殘差塊數(shù)據(jù)的編碼,其利用了4×4量化塊的多種特性,例如,4×4塊經(jīng)過預(yù)測、變換、量化后,非零系數(shù)主要集中在低頻部分,在經(jīng)過zig-zag掃描后高頻系數(shù)部分連續(xù)零個數(shù)較多,量化后在數(shù)據(jù)經(jīng)過zig-zag掃描得到的數(shù)據(jù)序列中,DC系數(shù)附近的非零系數(shù)幅值較大,最后高頻位置上的非零系數(shù)值通常是1或-1。相鄰的 4×4塊的非零系數(shù)的數(shù)目是相關(guān)的,非零系數(shù)數(shù)目用查找表的方式編碼,查找表的選擇取決于相鄰塊非零系數(shù)數(shù)目,體現(xiàn)了基于上下文設(shè)計的思想[1]。
CAVLC制定了可自適應(yīng)動態(tài)調(diào)整的碼表,將非零系數(shù)值Level和零游程Run分開編碼,進(jìn)一步減少了數(shù)據(jù)中的冗余信息,為H.264/AVC卓越的編碼效率奠定了基礎(chǔ)。其編碼過程描述如圖1所示。
對CAVLC的5個流程分析后可以發(fā)現(xiàn),順序步驟之間并沒有很強烈的數(shù)據(jù)依賴關(guān)系,考慮硬件實現(xiàn)的優(yōu)勢是可以將編碼的流程并行計算,因此針對硬件實現(xiàn),對編碼的軟件算法進(jìn)行了優(yōu)化改進(jìn),具體如下:
1)改變編碼的順序流程,將5個步驟所需的參數(shù)計算部分并行執(zhí)行,從而減少時鐘周期的損耗。
2)結(jié)合編碼過程對數(shù)據(jù)序列中的數(shù)據(jù)進(jìn)行分析,編碼需要用到的是殘存塊數(shù)據(jù)的3種特征,分別為是否為0、是否為1和系數(shù)符號??紤]到硬件實現(xiàn)過程中位運算的獨特優(yōu)勢,分別用標(biāo)志位的方式來標(biāo)示整個數(shù)據(jù)序列的數(shù)據(jù)特征。在編碼過程中,對數(shù)據(jù)序列的大部分運算操作轉(zhuǎn)化為對標(biāo)志位的位運算,這樣不但減少了硬件邏輯的損耗,同時進(jìn)一步提高了處理速度,例如,對于掃描后數(shù)據(jù)序列0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0,用16 bit的標(biāo)志位分別標(biāo)示16個數(shù)據(jù)的非零屬性,得出標(biāo)志為0101 1101 0000 0000(1表示該位對應(yīng)的系數(shù)為非零系數(shù),0表示該系數(shù)為0),為1屬性標(biāo)志為0001 1101 0000 0000(1表示該位對應(yīng)的系數(shù)幅值為1,0表示該系數(shù)幅值不為1),負(fù)數(shù)屬性標(biāo)志為 0000 1100 0000 0000(1表示該位對應(yīng)的系數(shù)為負(fù)數(shù),0表示該系數(shù)為正數(shù))。
3)在圖1的步驟1中,定長表格的碼字是6 bit,高4 bit表示非零系數(shù)數(shù)目TotalCoeffs,最低2 bit表示拖尾系數(shù)的數(shù)目T1s,因此可以利用算術(shù)運算代替查表操作,節(jié)省電路面積。
在CAVLC編碼過程中,除句法元素Level之外,其余元素的編碼都是根據(jù)標(biāo)準(zhǔn)定義的碼表,求出相應(yīng)的入口地址得到該句法元素對應(yīng)的編碼碼字?;谏鲜鏊惴▋?yōu)化的思想,在對系統(tǒng)進(jìn)行模塊劃分后,本文提出了一種高效的CAVLC編碼器實現(xiàn)方法,其硬件結(jié)構(gòu)框圖如圖2所示(CAVLC編碼器部分用實線框表示,虛線框代表在整個H.264/AVC編碼器系統(tǒng)中與CAVLC相關(guān)的前后接口模塊)。其中虛線為控制信號,實線為數(shù)據(jù)流。
該結(jié)構(gòu)將CAVLC編碼的5個子流程歸為3個部分,其中參數(shù)計算編碼部分完成了非零系數(shù)總數(shù)Totalcoeffs和拖尾系數(shù)數(shù)目T1s、拖尾系數(shù)符號T1s_sign、最后非零系數(shù)前零總數(shù)TotalZeros的編碼。同時,將除拖尾系數(shù)之外的非零系數(shù)幅值Level和每個非零系數(shù)前零個數(shù)Run_before的編碼過程分開獨立進(jìn)行,對3個部分分別設(shè)計了具體的運算電路。為了進(jìn)一步減少電路規(guī)模,在電路中加入了預(yù)處理模塊,對經(jīng)過zig-zag掃描后的4×4殘差塊數(shù)據(jù)序列進(jìn)行數(shù)據(jù)特征的抽象,簡化了后續(xù)模塊計算的復(fù)雜性。整個系統(tǒng)主要由以下部分構(gòu)成:預(yù)處理模塊、Level重映射與編碼部分、參數(shù)計算與編碼部分、Run_before計算與編碼部分以及控制器。
系統(tǒng)的編碼流程由控制器控制,控制器由一個Mealy型有限狀態(tài)機實現(xiàn),其狀態(tài)轉(zhuǎn)移圖如圖3所示。系統(tǒng)復(fù)位后進(jìn)入Idle狀態(tài),各模塊進(jìn)行初始化工作,預(yù)處理模塊并行地接收來自系統(tǒng)外部,經(jīng)過zig-zag掃描后的4×4塊數(shù)據(jù),對數(shù)據(jù)處理后得到相應(yīng)的數(shù)據(jù)特征標(biāo)志。隨后系統(tǒng)啟動參數(shù)計算器(Cal狀態(tài)),參數(shù)計算器計算得出非零系數(shù)總數(shù)Totalcoeffs、拖尾系數(shù)數(shù)目T1s、拖尾系數(shù)符號T1s_sign和最后非零系數(shù)前零總數(shù)TotalZeros(CalTo?talzeros狀態(tài))。接下來,控制器根據(jù)參數(shù)計算器中模塊的輸出信號啟動參數(shù)編碼模塊、Level重映射模塊(CT_Lmap狀態(tài))。當(dāng)Level重映射完成之后,控制器啟動Level編碼器(CodeLevel狀態(tài))。待Level編碼完成后,Run_before計算與編碼部分開始工作,輸出Run_before編碼后的碼字信息(Code_Runbefore狀態(tài))。編碼完CAVLC所有句法元素后,重新讀取下一個4×4塊開始下一輪殘差塊的編碼。此外,在編碼過程中,各個編碼模塊向外部輸出碼字的數(shù)值和長度、系統(tǒng)外部的碼字重組、生成模塊根據(jù)碼字的信息,完成碼流順序的調(diào)整并生成相應(yīng)的二進(jìn)制碼流。
參數(shù)計算器完成對參數(shù)Totalcoeffs,T1s,T1s_sign和TotalZeros的計算,其結(jié)構(gòu)如圖4所示。在參數(shù)計算器中共有4個獨立的電路功能模塊,通過對數(shù)據(jù)特征標(biāo)志的計算得到參數(shù),具體電路采用移位寄存器、判斷邏輯等結(jié)構(gòu)實現(xiàn)。參數(shù)編碼器結(jié)構(gòu)如圖5所示,參數(shù)的編碼是基于碼表進(jìn)行的。Coeff_token的編碼需要總共5個碼表,其中,定長表格以邏輯計算代替查表操作,其余4個表格存放在ROM1中。在TotalZeros編碼過程中,對于4×4塊和2×2塊情況下的碼表分別存于ROM2和ROM3中,每個編碼模塊完成編碼后,輸出相應(yīng)碼字信息,包括碼字值codeword和碼字長度codelen。
Level編碼器結(jié)構(gòu)如圖6所示,控制器根據(jù)輸入的To?talcoeffs和T1s初始化suffixlength,通過信號sel選通MUX依次對Level1~Level16進(jìn)行編碼,編碼完成后輸出前綴值prefix,后綴值suffix和后綴長度suffixsize,最后控制器根據(jù)當(dāng)前已經(jīng)編碼的非零系數(shù)幅值是否大于相應(yīng)的閾值對suffixlength進(jìn)行更新。其中,Level編碼運算過程在模塊Levelcode_gen中實現(xiàn)。
用Verilog HDL語言對本文提出的電路結(jié)構(gòu)進(jìn)行RTL級描述,采用Synopsys的Design Compiler在SIMC 0.18 μm CMOS單元庫下綜合,最大限制頻率為181 MHz時,規(guī)模為2 660門。本文在仿真時采用JVT提供的JM8.6 C程序產(chǎn)生碼流進(jìn)行了測試,RTL級模型的仿真結(jié)果和C程序的運算結(jié)果一致。仿真結(jié)果顯示,在工作頻率為181 MHz的情況下,本文設(shè)計的數(shù)據(jù)吞吐率為41.97 Msample/s。實現(xiàn)對高清格式視頻(分辨力為1 280×720,30 f/s)的實時處理,需達(dá)到的數(shù)據(jù)吞吐率為41.472 Msample/s(1 280×720×1.5×30)??梢钥吹?,本文提出的CAVLC編碼器設(shè)計方案滿足對高清格式視頻的實時處理。
本文提出了一種適用于H.264/AVC的CAVLC編碼器優(yōu)化算法及其電路結(jié)構(gòu),通過對編碼流程的重新劃分,安排了緊湊的控制時序,并在電路中設(shè)計了數(shù)據(jù)特征提取的電路單元,減少了后續(xù)模塊運算的復(fù)雜性。實驗結(jié)果表明,本設(shè)計電路規(guī)模約為2 660門,能夠以41.97 Msample/s的數(shù)據(jù)吞吐率對視頻進(jìn)行處理。與同類設(shè)計相比[2],電路規(guī)模小,處理能力高,可方便用于H.264/AVC編碼芯片中,也可作為IP核嵌入到特定目的的處理器或DSP中。
[1]ITU-T Rec.H.264/ISO/lEC 14496-10 AVC,Drafl ITU-T recommendation and final drafl intemational standard of joint video specification[S].2003.
[2]CHEN T C,HUANG Y W,TSAI C Y,et al.Architecture design of context-based adaptive variable-length coding for H.264/AVC[J].IEEE Trans.Circuits and Systems II:Express Briefs,2006,53(9):832-836.