專(zhuān)利名稱(chēng):一種快速解碼cavlc非零系數(shù)幅值的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字視頻信號(hào)編解碼技術(shù)領(lǐng)域,具體涉及一種解碼CAVLC非零系數(shù)幅值的方法。
背景技術(shù):
H. 264/AVC(Advanced Video Coding)由國(guó)際電信組織(ITU)和運(yùn)動(dòng)圖像專(zhuān)家組 (MPEG)聯(lián)合制定而成的國(guó)際視頻編碼標(biāo)準(zhǔn),目前已經(jīng)在多媒體音視頻領(lǐng)域得到了廣泛的應(yīng)用。H. 264/AVC中規(guī)定其熵編碼可以采用兩種方式下文自適應(yīng)可變長(zhǎng)編碼(CAVLC)和上下文自適應(yīng)算術(shù)編碼(CABAC)。CABAC具有較高的編碼效率,但是編解碼的復(fù)雜度也大大增加,而CAVLC在編碼效率和復(fù)雜度上有著較好的均衡。與前一代視頻標(biāo)準(zhǔn)如MPEG-1,MPEG-2 相比,CAVLC的編碼效率有著顯著提升。視頻碼流中的視頻頭信息和預(yù)測(cè)信息一般采用較低復(fù)雜度的定長(zhǎng)碼或指數(shù)哥倫布碼,而殘差系數(shù)的信息占據(jù)了視頻碼流的絕大部分,這部分信息的編碼需要采用更高效的CAVLC編碼方式。CAVLC的碼字總共有5類(lèi)
1. Coeff_token 本碼字代表非零系數(shù)的數(shù)目和拖尾1的個(gè)數(shù)(TraiIingOnes)。2. Sign_trail 本碼字是拖尾1的符號(hào)。每一個(gè)符號(hào)編碼為一比特,0表示正1, 1表示負(fù)1。3. Levels 本碼字是指"TrailingOnes外的其它的非零系數(shù)的幅值。4. Totalzeros 它編碼在以反Zig-Zag掃描順序時(shí)第一個(gè)非零系數(shù)后的總的零系數(shù)的個(gè)數(shù)。5. Run_before 本碼字是指每一個(gè)非零系數(shù)前的零的個(gè)數(shù)。對(duì)于硬件解碼而言,計(jì)算非零系數(shù)的幅值是整個(gè)CAVLC解碼過(guò)程中最耗費(fèi)時(shí)間的過(guò)程。對(duì)于一個(gè)長(zhǎng)度和高度都為4個(gè)像素的圖形塊,如果采用CAVLC編碼方式,有些碼字如 Coeff_token、sign_trial和Total_zero在解碼過(guò)程中只需要一次解碼,而非零系數(shù)幅值的碼字最多可以達(dá)16個(gè)。同時(shí),由于CAVLC引入了上下文自適應(yīng)的編碼方式,當(dāng)前的非零系數(shù)的幅值不僅取決于碼字本身,還取決于前一個(gè)碼字的解碼結(jié)果,解碼時(shí)只能按照順序依次解碼每一個(gè)非零系數(shù)幅值的碼字,無(wú)法通過(guò)單純?cè)黾佑布⑿卸葋?lái)提升解碼速度。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種快速解碼CAVLC非零系數(shù)幅值的方法,適用于H. 264 視頻規(guī)范所規(guī)定的CAVLC解碼過(guò)程,可以在一個(gè)時(shí)鐘周期內(nèi)完成兩個(gè)非零系數(shù)幅值的解碼。在解碼得到第一個(gè)碼字的長(zhǎng)度后,第二個(gè)碼字的解碼過(guò)程就可以開(kāi)始,不必等到第一個(gè)碼字的所有信息都完成解碼。解碼過(guò)程的輸入是待解碼的視頻碼流和前一次解碼中用的碼表號(hào),輸出是兩個(gè)非零系數(shù)的幅值、長(zhǎng)度和使用的碼表號(hào)。具體的解碼過(guò)程如下
(1)針對(duì)第一個(gè)碼字,計(jì)算其幅值前綴的碼字長(zhǎng)度和解碼后的值(簡(jiǎn)稱(chēng)幅值前綴的值);
(2)計(jì)算第一個(gè)碼字的長(zhǎng)度;(3)計(jì)算第一個(gè)碼字的幅值;
(4)針對(duì)第第二個(gè)碼字,計(jì)算其幅值前綴的碼字長(zhǎng)度和解碼后的值;
(5)計(jì)算第二個(gè)碼字的兩種可能長(zhǎng)度和幅值;
(6)更新第一個(gè)碼字輸出的碼表號(hào);
(7)針對(duì)第二個(gè)碼字,選擇正確的幅值和長(zhǎng)度作為輸出;
(8)更新第二個(gè)碼字輸出的碼表號(hào)。本發(fā)明中,通過(guò)分析H. 264視頻標(biāo)準(zhǔn),優(yōu)化了碼表號(hào)的更新過(guò)程,將候選的碼表號(hào)由7個(gè)減少到2個(gè)。H. 264〇八乂^規(guī)定了7個(gè)可能的碼表號(hào),分別為0、1、2、3、4、5、6。本方法根據(jù)當(dāng)前的碼表號(hào)預(yù)測(cè)出可能用于下一個(gè)碼字解碼的新碼表號(hào)。如果當(dāng)前的碼表號(hào)為0, 那么新碼表號(hào)為1 ;如果當(dāng)前的碼表號(hào)為1,新的碼表號(hào)有兩個(gè)候選值1、2 ;如果當(dāng)前的碼表號(hào)為2,新的碼表號(hào)有兩個(gè)候選值2、3 ;如果當(dāng)前的碼表號(hào)為3,新的碼表號(hào)有兩個(gè)候選值3、4 ;如果當(dāng)前的碼表號(hào)為4,新的碼表號(hào)有兩個(gè)候選值4、5 ;如果當(dāng)前的碼表號(hào)為5, 新的碼表號(hào)有兩個(gè)候選值5、6 ;如果當(dāng)前的碼表號(hào)為6,新的碼表號(hào)為6。本發(fā)明中,消除了前后碼字的相關(guān)性,在計(jì)算第二個(gè)非零系數(shù)的幅值和碼字長(zhǎng)度時(shí),采用2路并行的方法提前開(kāi)始解碼,根據(jù)兩個(gè)不同的候選碼表號(hào)提前計(jì)算第二個(gè)碼字的長(zhǎng)度和幅值,而不是等到第一個(gè)碼字完全解碼結(jié)束后才開(kāi)始,這樣可以縮短硬件時(shí)序上的關(guān)鍵路徑,加快解碼流程。本發(fā)明的有益效果
現(xiàn)有方法在一個(gè)時(shí)鐘周期內(nèi)只能解碼一個(gè)非零系數(shù)的幅值,而本發(fā)明中描述的方法可以將速度加倍,在一個(gè)時(shí)鐘周期內(nèi)可以解碼得到兩個(gè)非零系數(shù)的幅值,從而提高了 CAVLC 整體的解碼速度。適用于各種具有H. 264視頻解碼功能的電子設(shè)備。
圖1 幅值后綴長(zhǎng)度的計(jì)算過(guò)程。圖2 快速解碼兩個(gè)CALVC非零系數(shù)幅值的整體框圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的描述。本發(fā)明所述的快速解碼非零系數(shù)幅值的具體實(shí)施方式
如下
(1)計(jì)算第一個(gè)碼字的幅值前綴(level_prefix)。幅值前綴的計(jì)算方法如表1所示。 幅值前綴的值可以通過(guò)計(jì)算當(dāng)前視頻碼流碼流中前導(dǎo)0的個(gè)數(shù)來(lái)得到,幅值前綴的值等于前導(dǎo)0的個(gè)數(shù)。幅值前綴的碼字長(zhǎng)度等于幅值前綴的值再加1。(2)計(jì)算第一個(gè)碼字的長(zhǎng)度。第一個(gè)碼字的長(zhǎng)度等于幅值后綴(levelsuffix)的長(zhǎng)度加上幅值前綴的長(zhǎng)度。解碼幅值后綴的過(guò)程如圖1所示,幅值后綴的長(zhǎng)度由幅值前綴和當(dāng)前碼表號(hào)決定。當(dāng)幅值前綴小于14時(shí),幅值后綴的長(zhǎng)度等于碼表號(hào),當(dāng)幅值前綴等于 14時(shí),幅值后綴的長(zhǎng)度是4比特,當(dāng)幅值前綴大于14時(shí),幅值后綴的長(zhǎng)度等于幅值前綴的值減3。(3)計(jì)算第一個(gè)碼字的幅值。第一個(gè)碼字的幅值可由幅值前綴、幅值后綴和碼表號(hào)經(jīng)過(guò)邏輯運(yùn)算得到,具體過(guò)程由H. 264標(biāo)準(zhǔn)規(guī)定,如表2所示,表中各變量的解釋如下=Ievel代表當(dāng)前碼字的幅值,level_prefix是幅值前綴,level_suffix是幅值后綴, traiIingone代表拖尾1的個(gè)數(shù),suffixLength代表當(dāng)前碼表號(hào);》和 << 分別代表右移操作和左移操作,%代表取余數(shù)的操作,abs()表示求絕對(duì)值的操作,min()表示在兩個(gè)數(shù)中選擇較小的一個(gè)作為輸出,&&代表邏輯與,I I代表邏輯或。(4)計(jì)算第二個(gè)碼字的幅值前綴。此步驟同步驟(1)。(5)計(jì)算第二個(gè)碼字的長(zhǎng)度。由于第二個(gè)碼字對(duì)應(yīng)的碼表號(hào)尚未產(chǎn)生,需要同時(shí)計(jì)算兩種可能的長(zhǎng)度,計(jì)算每種可能長(zhǎng)度的具體步驟同步驟(2);計(jì)算第二個(gè)碼字的幅值,同理,需要同時(shí)計(jì)算兩種可能的幅值,計(jì)算每種可能長(zhǎng)度的具體步驟同步驟(3)。(6)更新第一個(gè)碼字輸出的碼表號(hào)。如果碼表號(hào)等于6,那么新的碼表號(hào)為6;如果碼表號(hào)是0,那么新的碼表號(hào)是1 ;否則,新碼表號(hào)將依照碼字幅值的大小來(lái)決定是否等于當(dāng)前碼表號(hào)還是當(dāng)前碼表號(hào)加1。(7)同時(shí),根據(jù)第一個(gè)碼字輸出的新碼表號(hào),從步驟(5)中得到的兩個(gè)候選結(jié)果中選擇正確的幅值和碼字長(zhǎng)度作為第二個(gè)非零系數(shù)碼字的解碼結(jié)果。(8)更新第二個(gè)碼字輸出的碼表號(hào)。先計(jì)算針對(duì)第二個(gè)碼字的兩種可能的新碼表號(hào),計(jì)算方法同步驟(6),然后再根據(jù)第一個(gè)碼字輸出的碼表號(hào),選擇正確的碼表號(hào)作為最終輸出??焖俳獯a兩個(gè)CALVC非零系數(shù)幅值的整體流程如圖2所示,經(jīng)過(guò)上述步驟,兩個(gè)相鄰的非零系數(shù)幅值的大小和碼字長(zhǎng)度就可以在一個(gè)時(shí)鐘周期內(nèi)獲得,同時(shí)最新的碼表號(hào)也得到了更新。表1 幅值前綴的解碼碼表
權(quán)利要求
1.一種快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于具體步驟如下(1)針對(duì)第一個(gè)碼字,計(jì)算其幅值前綴的碼字長(zhǎng)度和解碼后的值;(2)計(jì)算第一個(gè)碼字的長(zhǎng)度;(3)計(jì)算第一個(gè)碼字的幅值;(4)針對(duì)第第二個(gè)碼字,計(jì)算其幅值前綴的碼字長(zhǎng)度和解碼后的值;(5)計(jì)算第二個(gè)碼字的兩種可能長(zhǎng)度和幅值;(6)更新第一個(gè)碼字輸出的碼表號(hào);(7)針對(duì)第二個(gè)碼字,選擇正確的幅值和長(zhǎng)度作為輸出;(8)更新第二個(gè)碼字輸出的碼表號(hào)。
2.根據(jù)權(quán)利要求1所述的快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于所述更新碼表號(hào)方法如下按照HJ64 CAVLC規(guī)定的7個(gè)可能的碼表號(hào)0、1、2、3、4、5、6,根據(jù)當(dāng)前的碼表號(hào)預(yù)測(cè)出可能用于下一個(gè)碼字解碼的新碼表號(hào)如果當(dāng)前的碼表號(hào)為0,那么新碼表號(hào)為1 ;如果當(dāng)前的碼表號(hào)為1,新的碼表號(hào)有兩個(gè)候選值1、2 ;如果當(dāng)前的碼表號(hào)為2,新的碼表號(hào)有兩個(gè)候選值2、3 ;如果當(dāng)前的碼表號(hào)為3,新的碼表號(hào)有兩個(gè)候選值3、4 ;如果當(dāng)前的碼表號(hào)為4,新的碼表號(hào)有兩個(gè)候選值4、5 ;如果當(dāng)前的碼表號(hào)為5,新的碼表號(hào)有兩個(gè)候選值 5、6 ;如果當(dāng)前的碼表號(hào)為6,新的碼表號(hào)為6。
3.根據(jù)權(quán)利要求2所述的快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于在計(jì)算第二個(gè)非零系數(shù)的幅值和碼字長(zhǎng)度時(shí),采用2路并行的方法提前開(kāi)始解碼,即根據(jù)兩個(gè)不同的候選碼表號(hào)提前計(jì)算第二個(gè)碼字的長(zhǎng)度和幅值。
4.根據(jù)權(quán)利要求3所述的快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于第一個(gè)碼字的幅值前綴的值通過(guò)計(jì)算當(dāng)前視頻碼流碼流中前導(dǎo)0的個(gè)數(shù)來(lái)得到,幅值前綴的值等于前導(dǎo)0的個(gè)數(shù);幅值前綴的碼字長(zhǎng)度等于幅值前綴的值再加1。
5.根據(jù)權(quán)利要求4所述的快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于第一個(gè)碼字的長(zhǎng)度等于幅值后綴的長(zhǎng)度加上幅值前綴的長(zhǎng)度;而解碼幅值后綴的長(zhǎng)度由幅值前綴和當(dāng)前碼表號(hào)決定當(dāng)幅值前綴小于14時(shí),幅值后綴的長(zhǎng)度等于碼表號(hào),當(dāng)幅值前綴等于14 時(shí),幅值后綴的長(zhǎng)度是4比特,當(dāng)幅值前綴大于14時(shí),幅值后綴的長(zhǎng)度等于幅值前綴的值減 3。
6.根據(jù)權(quán)利要求5所述的快速解碼CAVLC非零系數(shù)幅值的方法,其特征在于所述更新第一個(gè)碼字輸出的碼表號(hào)的方法為如果碼表號(hào)等于6,那么新的碼表號(hào)為6 ;如果碼表號(hào)是0,那么新的碼表號(hào)是1 ;否則,新碼表號(hào)依照碼字幅值的大小來(lái)決定是否等于當(dāng)前碼表號(hào)還是當(dāng)前碼表號(hào)加1 ;同時(shí),根據(jù)第一個(gè)碼字輸出的新碼表號(hào),從步驟(5)中得到的兩個(gè)候選結(jié)果中選擇正確的幅值和碼字長(zhǎng)度作為第二個(gè)非零系數(shù)碼字的解碼結(jié)果。
全文摘要
本發(fā)明屬于數(shù)字視頻信號(hào)編解碼技術(shù)領(lǐng)域,具體為一種快速解碼CAVLC非零系數(shù)幅值的方法。本方法將用于解碼非零系數(shù)幅值的候選碼表數(shù)目從7個(gè)降低到2個(gè),在得到第一個(gè)碼字的長(zhǎng)度后,即可開(kāi)始計(jì)算第二個(gè)碼字。在對(duì)第二個(gè)非零系數(shù)幅值的碼字進(jìn)行解碼時(shí)采用2路并行解碼的方法,對(duì)可能采用的兩個(gè)碼表同時(shí)進(jìn)行計(jì)算,得到兩個(gè)可能的解碼結(jié)果。當(dāng)?shù)谝粋€(gè)碼字的幅值和碼表信息更新完畢,即可從兩個(gè)結(jié)果中選擇出正確的結(jié)果。這樣可以縮短解碼流程的關(guān)鍵路徑,從而實(shí)現(xiàn)在一個(gè)時(shí)鐘周期內(nèi)同時(shí)解碼兩個(gè)非零系數(shù)的幅值。由于非零系數(shù)幅值的碼字是CAVLC編碼中出現(xiàn)頻率最多的碼字,這一方法大大提高了硬件解碼器的數(shù)據(jù)處理能力。
文檔編號(hào)H04N7/26GK102263960SQ20111023248
公開(kāi)日2011年11月30日 申請(qǐng)日期2011年8月15日 優(yōu)先權(quán)日2011年8月15日
發(fā)明者劉家良, 曾曉洋, 沈沙, 沈蔚煒, 范益波, 鐘慧波 申請(qǐng)人:復(fù)旦大學(xué)