一種基於h.264的cavlc編碼器的實現方法
2023-10-10 19:22:29 2
專利名稱:一種基於h.264的cavlc編碼器的實現方法
技術領域:
本發明屬於視頻編碼設計領域,涉及H. 264熵編碼的集成電路設計技術領域。 二.
背景技術:
視頻編解碼技術是當今數字多媒體存儲和傳輸應用的關鍵技術之一,現有的視頻編碼國際標準採用的基本方法都是基於塊的混合編碼方案。所謂「基於塊」,指的是首先將一幅圖像或視頻幀分成矩形的像素集合。塊的一般大小為16X16、8X8等,作為編碼處理的基本單元。「混合」指的是消除視頻每幀之間的時間冗餘的運動估計與消除幀內空間冗餘的幀內預測以及變換編碼結合。視頻編碼的一般步驟包括預測、變換、量化和熵編碼。熵編碼作為視頻編碼框架中的最後一步,對視頻壓縮性能有著非常大的影響。視頻壓縮中常用的熵編碼方法有變長編碼(Variable Length Coding)和算術編碼 (Arithmetic Coding),在最新的視頻標準H. 264中,其基本檔次採用了基於上下文的變長編碼(Context-Based Variable Length Coding,CAVLC)。CAVLC 主要用於對亮度和色度殘差變換、量化後的係數進行編碼,而其它一些語法元素則利用哥倫布編碼實現。與傳統變長編碼相比,CAVLC將一個大碼錶分成許多小碼錶,利用下下文符號所提供的相關性,為所要編碼的符號選擇合適的上下文模型(碼錶)。利用合適的上下文模型,就可以大大降低符號之間的冗餘度,但其編碼複雜度大大增加了,需要存儲碼錶也大大增加。熵編碼模塊的運算量和碼流速率緊密相關,在高比特率情況下,變換係數編碼所佔碼流佔據了所有碼流的 70%以上,這就意味著,CAVLC模塊將承擔熵編碼大部分的運算量。CAVLC主要編碼原理是通過對編碼字符的概率進行估計,選擇不同的碼錶,查得相應的碼字和碼字,然後對所得碼字進行拼接、打包輸出。主要步驟包括掃描、統計、編碼三階段。掃描是指將變換量化後的殘差塊進行Zig_zag掃描成係數串;統計是指在掃描過程中統計其中的參數(非零係數的數目、拖尾係數數目(+1/-1的數目)、除拖尾係數外的非零係數的幅值、最後一個非零係數前0的數目、每個非零係數前0的數目),以確定上下文模型的選擇;編碼階段就是按選擇好的模型對上述參數分別進行編碼。對每一個字符進行變長編碼,需要兩個值來表徵碼長(codelength)和碼字(codeword)。H. 264的CAVLC編碼過程主要分為以下步驟(1)對非零係數的數目(TotalCoeff)和拖尾係數數目(TrailingOnes)進行聯合編碼 coeff_token(TotalCoeff, TrailingOnes);(2)對每個拖尾係數的符號(Tl_sign)進行編碼;(3)對除拖尾係數外的非零係數的幅值(Level)進行編碼;(4)對最後一個非零係數前O的數目(Totalzero)進行編碼;(5)對每個非零係數前O的個數(Run_bef0re)進行編碼。每個編碼過程對應選定的編碼碼表,其中,對於C0eff_t0ken編碼,亮度部分有三個變長碼錶(Num_VLC0-Num_VLC2)和一個定長碼錶,色度部分有一個變長碼錶。 對Level編碼,其最為複雜,有7個變長碼錶(LEV_VLC0_LEV_VLC6)。其碼字可表示為"OOOOOOOOOOOOOOlxxxxxx」構造由一個前綴(level_prefix)和後綴(level_suffix)組成。 Level編碼碼字可分為常規碼和逃脫碼,逃脫碼是指那些發生概率很小的字符對應的碼字, 標準規逃脫碼的碼長為28,前綴為15。但隨著高清視頻的發展,像素比特增加至10比特甚至更高,最新標準又擴展了逃脫碼的編碼方案,最大碼長將超過28,前綴可能大於15,也這增加了 Level編碼的複雜性。對Total_zero和Run_before分別有一個變長碼錶。由此可見,CAVLC編碼使用的碼錶相當多,直接查找表(Look Up Table, LUT)實現的方法對存儲空間來說是個很大的犧牲。現有方法中,有採用直接映射的方式,造成硬體資源的浪費,且速度不快;有採用狀態機輸出,雖然資源消耗少,但吞吐量小,只能用於移動環境下低比特率處理。總之,目前實現對CAVLC編碼器的裝置方法,存在未對速度和面積較好折衷的處理的問題。
三.
發明內容
本發明的目的是解決設計CAVLC編碼器時速度和面積未能較好折衷的問題。本發明從算法和結構上綜合考慮,提出一種高速度、低複雜度的CAVLC編碼器結構,實現速度和面積很好折衷。本發明提出的技術方案實現方法之一為在對C0eff_t0ken編碼時,通過基於預處理的查找表方法,改進了查找表結構,大大降低了存儲空間,且可以快速得到相應的碼長和碼字。將原先的碼字和碼長都需要通過非零係數和拖尾係數兩個參數查找得出的查找方式,變為碼長以「差值」為主進行查找,對應裡面的碼字完全可由算術計算替代查找表的查找方式,整個過程只需引入一個減法器,大大減小了實現查找表面積。本發明提出的技術方案實現方法之二為在對非零係數幅值(level)的編碼時, 利用在線計算的方法替代查找表,消除查找表(LUT)。尤其在前綴值leVel_prefiX大於 15的逃脫碼情況下,前綴值Ievelprefix的計算是個循環迭代的過程,利用循環展開的思想,減小關鍵路徑,實現速度和面積很好折衷。
四.
圖1是本發明中CAVLC編碼器系統設計圖;圖2是本發明中CAVLC編碼狀態機;圖3是標準中CAVLC中變長碼錶Num_VLC0結構圖4是本發明中提出的CAVLC變長碼錶Num_VLC0結構圖5是本發明中level編碼前綴值(Lpfx)遞增流6是本發明中level編碼中前綴值大於15時對應的level分布表
五.具體實現方式為使本發明的目的、技術方案及優點更加清楚,下面參照附圖,具體說明本發明的實現過程。圖1所示為CAVLC編碼器裝置,該裝置包括如下模塊殘差數據塊、掃描地址產生器、統計模塊、編碼模塊、碼流拼接模塊和控制模塊。具體步驟如下(1)當開始信號有效時,控制模塊發出Zig_zag掃描狀態機、統計模塊使能信號,
4Zig.zag掃描狀態機在時鐘信號的驅動下,輸出殘差數據塊RAM的地址;(2)數據按逆向Zig_zag掃描順序讀出並進入統計模塊,分別統計出五個編碼參 Wi (TotalCoeff, TrailingOnes, Level, Total_zero, Run—before) ##入才目的
FIFO 中(3)統計結束,控制模塊發生編碼模塊使能信號,編碼模塊在控制模塊作用下,按順序編碼上述五個參數。其編碼狀態機如圖2所示,開始狀態機處理idle狀態,當編碼信號有效時,狀態機進入TC狀態,即進行TotalCoefT編碼,該編碼只需一個時鐘就能完成;之後進入Tl_sign狀態,是對拖尾係數符號進行編碼,由於拖尾係數小於等於3,所以用個3bits 輸出就可實現該編碼,也僅需一個時鐘就完成;之後進入Level狀態,是對除拖尾係數外的非零係數的幅值進行編碼,它是整個編碼過程中最複雜的過程,由於Level數目的不定,所以理論上需要1-16個時鐘完成,當Level FIFO為空時表示編碼最後一個Level值,可以進入下一狀態;Totalzero狀態是對最後一個非零係數前零的數目進行編碼,該狀態也只需要一個時鐘就能完成;最後進入RuruBefore狀態,是對每個非零係數前零的數目進行編碼,與Level狀態類似,當Run FIFO為空時表示編碼最後一個Run值。此時所有參數編碼完成,重新回到idle狀態。(4)在每個編碼過程中,輸出相應的碼字和碼長,且在控制模塊的作用下,通過多路選擇器進入碼流拼接模塊,最終拼接成固定長度的碼字輸出,一般為32bits。到此,基本介紹了本發明裝置的整個編碼流程,下面對前面介紹的兩個解決方案分別介紹。(1) Coeff_token 編碼圖3所示為C0eff_t0ken編碼所使用的對應亮度部分的碼錶1 (VLC_0),由表可知,當total_coeff = 5,tl = O時,碼字為00000000111,碼長為11,存儲則需要Ilbits和 4bits。通過對C0eff_t0ken碼錶分析,本發明提出的碼錶查找結構如圖4所示。首先按碼長對碼錶進行等長分組排列,這樣可將同碼長的碼字歸屬同一組,只要找到該碼組就可知道碼長。但仍然不能由輸入兩元素很直接的得出碼長的信息。進一步分析,提出一種基於預處理的方法來判斷碼長,通過先求出輸入兩元素的差值,再利用差值來判斷碼長。其中 「差值」等於T0tal_C0eff-Tl,利用這種方法來輔助,非常有利於碼長的判斷。因為在相同的「差值」對應的碼字中,碼長也很有規律,拖尾係數為3的碼長短1,與大概率字符短碼字的原則相符。另外,在相同的「差值」裡面,大多數情況下,碼字和拖尾係數有這樣的對應關係codeword = trailingones ;因此,可用算術計算的方法來替代查找表,可大大減少查長表大小。該方法的優點在於將原先的碼字和碼長都需要通過非零係數和拖尾係數查找得出的查找方式,變為以「差值」為主來查碼長,且對應裡面的碼字完全可由算術計算替代查找表的查找方式,整個過程只需引入一個減法器。(2) Level 編碼通過前面背景敘述可知,Level碼字由前綴(level_prefix)和後綴(leVel_ suffix)構成。不過,後綴長度的更新是一個自適應的過程,從0 6自適應變化。因此,對一個level的編碼,碼字可由以下幾個參數確定1)前綴值Ipfx ;2)後綴值Xsfx ;3)後綴長度 Irfx。記 levabs 為
權利要求
1.一種基於H. 264的熵編碼器的實現方法,其主要包括以下處理步驟首先是對變換係數進行一定規則掃描成一個係數串;再次是對其係數串中編碼參數的統計;統計完成之後再根據統計信息選擇合適的碼錶進行編碼,編碼主要是對非零係數的數目、拖尾係數數目(+1/-1的數目)、除拖尾係數外的非零係數的幅值、最後一個非零係數前0的數目、每個非零係數前0的數目;編碼完成後再將碼字拼接打包輸出。
2.如權利要求1所述的對非零係數的數目和拖尾係數數目的編碼的方法,其特徵在於利用輸入兩參數作差來進行查找,改變了查找表結構,使碼字和碼長能夠快速高效地得出; 而且降低了關鍵路徑,查找表面積得到有效降低。
3.如權利要求1所述的對除拖尾係數之外的非零係數的幅值的編碼的方法,其特徵在於利用算術計算替代查找表,在計算逃脫碼情況下的前綴值時,採用去循環方法,大大簡化了其值的求解,提高了編碼速度。
全文摘要
本發明屬於視頻編碼的設計領域,涉及H.264熵編碼的集成電路設計技術領域。本發明提供了一種基於H.264的CAVLC編碼器的實現方法。對於其中的非零係數和拖尾係數的聯合編碼,採用了一種預處理的快速查找方法。首先計算出輸入兩參數非零係數和拖尾係數的差值,再利用該值進行碼長的查找,對應碼字部分可通過算術計算替代查找表。對於其中的除拖尾係數之外的非零係數的編碼,採用了算術計算替代查找表,尤其採用了去循環方法簡化了前綴值大於15情況下的逃脫碼的前綴值計算。實現了速度和面積的有效折衷。
文檔編號H04N7/26GK102215383SQ20101014151
公開日2011年10月12日 申請日期2010年4月6日 優先權日2010年4月6日
發明者陶為 申請人:陶為