專利名稱:一種快速解碼CAVLC run_before碼字的硬件實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字視頻信號編解碼技術(shù)領(lǐng)域,具體涉及一種解碼CAVLC run_before 碼字的硬件實現(xiàn)方法。
背景技術(shù):
H. 264/AVC(Advanced Video Coding)由國際電信組織(ITU)和運動圖像專家組 (MPEG)聯(lián)合制定而成的國際視頻編碼標準,目前已經(jīng)在多媒體音視頻領(lǐng)域得到了廣泛的應(yīng)用。H. 264/AVC中規(guī)定其熵編碼可以采用兩種方式下文自適應(yīng)可變長編碼(CAVLC)和上下文自適應(yīng)算術(shù)編碼(CABAC)。CABAC具有較高的編碼效率,但是編解碼的復(fù)雜度也大大增加,而CAVLC在編碼效率和復(fù)雜度上有著較好的均衡。與前一代視頻標準如MPEG-1,MPEG-2 相比,CAVLC的編碼效率有著顯著提升。視頻碼流中的視頻頭信息和預(yù)測信息一般采用較低復(fù)雜度的定長碼或指數(shù)哥倫布碼,而殘差系數(shù)的信息占據(jù)了視頻碼流的絕大部分,這部分信息的編碼需要采用更高效的CAVLC編碼方式。CAVLC的碼字總共有5類
1. Coeff_token 本碼字代表非零系數(shù)的數(shù)目和拖尾1的個數(shù)(TraiIingOnes)。2. Sign_trail 本碼字是拖尾1的符號。每一個符號編碼為一比特,0表示正1, 1表示負1。3. Levels 本碼字是指"TrailingOnes外的其它的非零系數(shù)的幅值。4. Totalzeros 它編碼在以反Zig-Zag掃描順序時第一個非零系數(shù)后的總的零系數(shù)的個數(shù)。5. Run_before 本碼字是指每一個非零系數(shù)前的零的個數(shù)。對于硬件解碼而言,計算非零系數(shù)的幅值和rim_bef0re碼字是整個CAVLC解碼過程中最耗費時間的過程。對于一個長度和高度都為4個像素的圖形塊,如果采用CAVLC編碼方式,有些碼字如Coeff_token、sign_trial和iTotalzero在解碼過程中只需要一次解碼, 而run_before碼字最多可以達14個。為了加快硬件處理的速度,有必要針對run_before 碼字提出一種快速的解碼方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種適用于H. 264視頻規(guī)范所規(guī)定的CAVLC解碼過程的快速解碼run_bef0re碼字的硬件實現(xiàn)方法。本發(fā)明提出的快速解碼rUn_bef0re碼字的硬件實現(xiàn)方法,可以在一個時鐘周期內(nèi)最多完成兩個rurubefore碼字的解碼。整個碼字解碼的硬件框圖如圖1所示。本方法采用了碼表分拆和碼字合并這兩種方法,在一個時鐘周期內(nèi)最多可以解碼14個值為O的 run_before碼字,或兩個值不等于O的rurubefore碼字。輸入的視頻碼流首先經(jīng)過前導(dǎo)1 檢測器來檢測帶解碼的rurubefore碼字是否為零,前導(dǎo)1檢測器最多一次可以檢測14位前導(dǎo)1。如果當前rurubefore碼字的值不為零,我們將當前解碼位置之前所包含的O的總個數(shù)記為zerosLeft,根據(jù)zerosLeft的值可以將run_bef0re碼字分為7種類型,即將原標準中規(guī)定的rurubefore碼表分解為7個子碼表,針對每一種類型分別進行解碼。每個時鐘周期內(nèi)最多可以解碼2個run_before碼字。CAVLC定義了多種碼字,在編碼一個4x4殘差數(shù)據(jù)塊時,rurubefore碼字最多可出現(xiàn)14次,因此這一硬件實現(xiàn)方法可以大大提高了硬件解碼器的數(shù)據(jù)處理能力。具體的解碼過程分為如下四個步驟 (1)碼表分拆和碼字合并。(2)檢測前導(dǎo)1的個數(shù)。(3)根據(jù)zerosLeft的值從7個碼表的輸出選擇出正確的值。(4)更新zerosLeft變量。每次解碼完run_before碼字后對zerosLeft變量進行更新,在下次解碼時需要使用更新后的值。H. 264視頻規(guī)范中指定了一個用于解碼rurubefore碼字的碼表,此碼表如表1所示。本發(fā)明將此碼表分解為7個較小的碼表,如表2—表8所示,并對其中的5個碼表(表3、 表4、表5、表6、表7)進行碼字合并,使得其能夠在一個時鐘周期內(nèi)完成兩個碼字的解碼。CAVLC定義了 6種碼字,其中非零系數(shù)幅值的碼字和rurubefore碼字出現(xiàn)的頻率最高,在編碼一個4x4殘差數(shù)據(jù)塊時rurubefore碼字最多可出現(xiàn)14次,因此這一硬件實現(xiàn)方法可以大大提高硬件解碼器的數(shù)據(jù)處理能力。本發(fā)明的有益效果
現(xiàn)有方法在一個時鐘周期內(nèi)只能解碼一個rurubefore碼字,而本發(fā)明中描述的方法可以將速度加倍,在一個時鐘周期內(nèi)可以解碼得到多個rurubefore碼字的值,從而提高了 CAVLC整體的解碼速度。適用于各種具有H. 264視頻解碼功能的電子設(shè)備。
圖1 :run_before碼字的硬件解碼框圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明做進一步的描述。本發(fā)明所述的快速解碼rurubefore碼字的具體實施方式
如下 (1)碼表分拆和碼字合并。H. 264視頻標準中規(guī)定用于解碼rurubefore碼字的碼表如表1所示。查詢一次此碼表只能得到一個rurubefore碼字的值。為了加速此解碼過程,我們將此碼表按照zerosLeft的值分拆成7個碼表。表2是針對zer0SLeft>6時的碼表。表3是針對 zerosLeft=6時的碼表。表4是針對zerosLeft=5時的碼表。表5是針對zerosLeft=4時的碼表。表6是針對zerosLeft=3時的碼表。表7是針對zerosLeft=2時的碼表。表8針對ZerosLeft=I時的碼表。其中表3、表4、表5、表6、表7采用了碼字合并的技巧,每次查詢這5個表可以得到2個rurubefore碼字。而表2和表8,則是從表1中直接分拆得到,每次查詢表2和表8,只能得到1個run_before碼字。(2)檢測前導(dǎo)1的個數(shù)。在解碼rurubefore碼字時,首先檢測當前碼流中前導(dǎo)1的個數(shù)。本發(fā)明中的前導(dǎo)1檢測器最多可以一次檢測14個前導(dǎo)1。如果輸入的視頻碼流第一個比特為0,那么前導(dǎo)1 的個數(shù)為零,說明當前rurubefore的值大于零,此過程結(jié)束,進入步驟(3)。否則,根據(jù)前導(dǎo)1的個數(shù)可同時解碼多個run_before碼字,這些run_before碼字的解碼值都是0。我們將前導(dǎo)1的個數(shù)記為N,如果zer0SLeft>6且N≥3,那么包括當前碼字在內(nèi)的連續(xù)N/3個 run_before碼字的值都是0 ;如果2<zerosLeft<6且N≤2,那么包括當前碼字在內(nèi)的連續(xù) N/2個rurubefore碼字的值都是0 ;如果zerosLeft ≤ 2,那么包括當前碼字在內(nèi)的連續(xù) N個rurubefore碼字的值都是0。上述計算中,如果N不是3或2的整數(shù)倍,N/3和N/2取其運算結(jié)果的整數(shù)部分。本發(fā)明中N最大值為14,所以前導(dǎo)1檢測器最多一次可以解碼14 個值為零的run_before碼字。(3)根據(jù)zerosLeft的值從7個碼表的輸出選擇出正確的值。zerosLeft的取值范圍可以分為7種大于6,6,5,4,3,2,1。此時對應(yīng)的碼表分別為表2、表3、表4、表5、表6、表7、表8。根據(jù)當前zerosLeft的值,選擇相應(yīng)的碼表輸出作為最終的解碼結(jié)果。每查詢一次表2或表8,可以得到一個rurubefore碼字的值,而每查詢一次表3、表4、表5、表6或表7,可以得到兩個rurubefore碼字的值。(4)更新 zerosLeft 變量。如果當前zerosLeft等于1或者大于6,根據(jù)步驟(3)中解碼得到當前run_ before碼字的值,zerosLeft變量減去當前rurubefore碼字在解碼后得到的值,即為新的 zerosLeft變量;如果當前zerosLeft等于2、3、4、5、6中任意一個值,根據(jù)步驟(3)中得出的兩個rurubefore碼字解碼后的值,zerosLeft變量減去這兩個碼字值的和,即為新的 zerosLeft 變量。經(jīng)過上述四個步驟,即可在一個時鐘周期內(nèi)解碼兩個rurubefore碼字。此發(fā)明中提出的硬件架構(gòu)可以大大加快H. 264 CAVLC的解碼速度。表1 :H. 264標準中規(guī)定用于解碼run_before碼字碼表
權(quán)利要求
1. 一種快速解碼CAVLC rim_bef0re碼字的硬件實現(xiàn)方法,其特征在于輸入的視頻碼流首先經(jīng)過前導(dǎo)1檢測器檢測帶解碼的rurubefore碼字是否為零,前導(dǎo)1檢測器最多一次可以檢測14位前導(dǎo)1 ;將當前解碼位置之前所包含的0的總個數(shù)記為zerosLeft,根據(jù) zerosLeft的值將run_before碼字分為7種類型,即將原標準中規(guī)定的run_before碼表分解為7個子碼表,針對每一種類型分別進行解碼;具體步驟為(1)碼表分拆和碼字合并;(2)檢測前導(dǎo)1的個數(shù);(3)根據(jù)zerosLeft的值從7個碼表的輸出選擇出正確的值;(4)更新zerosLeft變量,即每次解碼完run_before碼字后對zerosLeft變量進行更新,在下次解碼時使用更新后的值;其中,所述碼表分拆和碼字合并,是將H. 264視頻標準中規(guī)定用于解碼rurubefore碼字的碼表分拆和合并如下表2—表8所示的7個表表2 針對zerosLeft>6時的碼表
2.根據(jù)權(quán)利要求1所述的快速解碼CAVLC rurubefore碼字的硬件實現(xiàn)方法,其特征在于所述檢測前導(dǎo)1的個數(shù)的步驟為在解碼rurubefore碼字時,首先檢測當前碼流中前導(dǎo) 1的個數(shù);前導(dǎo)1檢測器最多可以一次檢測14個前導(dǎo)1 ;如果輸入的視頻碼流第一個比特為0,那么前導(dǎo)1的個數(shù)為零,說明當前rurubefore的值大于零,此過程結(jié)束,進入步驟(3);否則,根據(jù)前導(dǎo)1的個數(shù)同時解碼多個rurubefore碼字,這些run_before碼字的解碼值都是0 ;將前導(dǎo)1的個數(shù)記為N,如果zer0SLeft>6 且N彡3,那么包括當前碼字在內(nèi)的連續(xù)N/3個rim_bef0re碼字的值都是0 ;如果 2<zerosLeft<6且N > 2,那么包括當前碼字在內(nèi)的連續(xù)N/2個run_before碼字的值都是 0 ;如果zerosLeft ^ 2,那么包括當前碼字在內(nèi)的連續(xù)N個run_bef0re碼字的值都是0 ; 上述計算中,如果N不是3或2的整數(shù)倍,N/3和N/2取其運算結(jié)果的整數(shù)部分。
3.根據(jù)權(quán)利要求2所述的快速解碼CAVLCrurubefore碼字的硬件實現(xiàn)方法,其特征在于所述根據(jù)zerosLeft的值從7個碼表的輸出選擇出正確的值的具體步驟為zerosLeft的取值范圍分為7種大于6,6,5,4,3,2,1 ;對應(yīng)的碼表分別為表2、 表3、表4、表5、表6、表7、表8 ;根據(jù)當前zerosLeft的值,選擇相應(yīng)的碼表輸出作為最終的解碼結(jié)果,每查詢一次表2或表8,得到一個rurubefore碼字的值,每查詢一次表3、表4、表 5、表6或表7,得到兩個rurubefore碼字的值。
4.根據(jù)權(quán)利要求3所述的快速解碼CAVLCrurubefore碼字的硬件實現(xiàn)方法,其特征在于所述更新zerosLeft變量的具體步驟為如果當前zerosLeft等于1或者大于6,根據(jù)步驟(3)中解碼得到當前rurubefore碼字的值,zerosLeft變量減去當前rurubefore碼字在解碼后得到的值,即為新的zerosLeft 變量;如果當前zerosLeft等于2、3、4、5、6中任意一個值,根據(jù)步驟(3)中得出的兩個run_ before碼字解碼后的值,zerosLeft變量減去這兩個碼字值的和,即為新的zerosLeft變量。
全文摘要
本發(fā)明屬于數(shù)字視頻信號編解碼技術(shù)領(lǐng)域,具體為一種快速解碼CAVLC run_before碼字的硬件實現(xiàn)方法。本方法采用碼表分拆和碼字合并這兩種方法,在一個時鐘周期內(nèi)最多可以解碼14個值為0的run_before碼字,或兩個值不等于0的run_before碼字。輸入的視頻碼流首先經(jīng)過前導(dǎo)1檢測器來檢測帶解碼的run_before碼字是否為零,前導(dǎo)1檢測器最多一次可以檢測14位前導(dǎo)1。當前run_before碼字的值不為零,如果我們將當前解碼位置之前所包含的0的總個數(shù)記為zerosLeft,根據(jù)zerosLeft的值可以將run_before碼字分為7種類型,將原標準中規(guī)定的run_before碼表分解為7個子碼表,針對每一種類型分別進行解碼。本發(fā)明可以大大提高硬件解碼器的數(shù)據(jù)處理能力。
文檔編號H04N7/26GK102572437SQ20121003497
公開日2012年7月11日 申請日期2012年2月16日 優(yōu)先權(quán)日2012年2月16日
發(fā)明者曾曉洋, 沈沙, 沈蔚煒, 范益波 申請人:復(fù)旦大學(xué)