欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng)的制作方法

文檔序號:7896929閱讀:391來源:國知局

專利名稱::基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及視頻多媒體技術(shù)開發(fā)領(lǐng)域,尤其涉及一種基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng)。
背景技術(shù)
:H.264是ITU-T(國際電信聯(lián)盟遠(yuǎn)程通信標(biāo)準(zhǔn)化組織)和MPEG(動態(tài)圖像專家組)組織共同推出的最新一代視頻壓縮標(biāo)準(zhǔn),它與H.263以及MPEG-4相似,同屬基于預(yù)測變換的混合編碼架構(gòu),在編碼過程中分為四個主要部分1)將每幀視頻分成像素塊;2)幀內(nèi)預(yù)測,削減空間冗余;3)通過運動估計和運動補(bǔ)償進(jìn)行幀間預(yù)側(cè),削減時間冗余;4)通過對原始塊和對應(yīng)的預(yù)測塊之間差別形成的殘差塊進(jìn)行變換、量化和熵編碼,進(jìn)一步削減空間冗余。H.264增加了很多新的編碼技術(shù),大大提高了編碼效率。但其高性能是以其編解碼的復(fù)雜度的提高為代價的,對于同一個編碼序列,H.264解碼所需時間通常是H.263的2_3倍。編解碼算法的復(fù)雜度直接影響到開發(fā)基于H.264視頻方案的效率。在熵編碼部分,H.264有兩套方案一個是CAVLC(基于上下文自適應(yīng)的可變長編碼),另一個是CABAC(基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼)。其中,CAVLC的本質(zhì)是變長編碼,它的特性主要體現(xiàn)在自適應(yīng)能力上,CAVLC可以根據(jù)已編碼句法元素的情況動態(tài)地選擇編碼中使用的碼表,并且隨時更新拖尾系數(shù)后綴的長度,從而獲得極高的壓縮比。CAVLC用于亮度和色度殘差數(shù)據(jù)即經(jīng)變換、量化后4x4塊的系數(shù)的編碼,利用相鄰已編碼符號所提供的相關(guān)性,為所要編碼的符號選擇合適的上下文模型。在CAVLC中,上下文模型的選擇主要體現(xiàn)在選擇變長表格,共有四個變長表格約450個碼字可供選擇。在視頻解碼過程中,所有視頻碼流都要經(jīng)過熵解碼運算,因此在整個混合編解碼系統(tǒng)中它具有舉足輕重的地位,而解碼模塊的運算量與碼流速率緊密相關(guān),在高比特率情況下變換系數(shù)即量化后的殘差數(shù)據(jù)編碼所占碼流占據(jù)了碼流總量的70%以上,這就意味著解碼模塊將承擔(dān)熵解碼器大部分的運算量?,F(xiàn)有技術(shù)中,熵解碼方案是通過讀取固定長度的碼流來解析句法元素,主要存在以下缺陷(1)解析句法元素時首先讀取固定長度的碼流并不能保證解析正確,若解析錯誤則需要重新讀取碼流來解碼,效率較低;而且,解析的過程需要大量的判斷來控制,也影響了解析效率;(2)解碼碼表占用的存儲空間比較大,對于存儲空間有限的嵌入式設(shè)備是一個限制
發(fā)明內(nèi)容本發(fā)明實施例提供一種基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng),以提高解碼效率,節(jié)省存儲空間。為此,本發(fā)明實施例提供如下技術(shù)方案一種基于上下文自適應(yīng)的可變長編碼的解碼方法,包括獲取需要解碼的碼流;確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC;根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù),所述第一解碼碼表為包含非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的解碼碼表;如果所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0,則解碼拖尾連1系數(shù)的符號;如果所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值,則根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù),所述第二解碼碼表為包含最后一個非零系數(shù)前0的總個數(shù)的解碼碼表;根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)。一種基于上下文自適應(yīng)的可變長編碼的解碼系統(tǒng),包括碼流獲取單元,用于獲取需要解碼的碼流;計算單元,用于確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC;第一解碼單元,用于根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù),所述第一解碼碼表為包含非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的解碼碼表;第一判斷單元,用于判斷所述非零系數(shù)個數(shù)是否大于0,以及所述拖尾系數(shù)個數(shù)是否大于0;符號解析單元,用于在所述第一判斷單元判斷所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0時,解碼拖尾連1系數(shù)的符號;第二判斷單元,用于判斷所述非零系數(shù)個數(shù)是否小于非零系數(shù)個數(shù)的最大值;第二解碼單元,用于在所述第二判斷單元判斷所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值時,根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù),所述第二解碼碼表為包含最后一個非零系數(shù)前0的總個數(shù)的解碼碼表;第三解碼單元,用于根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)。本發(fā)明實施例基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng),基于碼流連零個數(shù)對解碼碼表重新分組,對大部分句法的解碼采用了查表實現(xiàn),不僅大大節(jié)省了解碼碼表的存儲空間,而且有效地提高了解碼效率,可以很好地應(yīng)用于H.264視頻解碼的嵌入式設(shè)備中。為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)這些附圖獲得其他的附圖。圖1是現(xiàn)有技術(shù)中編碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)時的標(biāo)準(zhǔn)編碼碼表;圖2是本發(fā)明實施例CAVLC解碼方法的流程圖;圖3是現(xiàn)有技術(shù)中編碼非零系數(shù)為1至7時最后一個非零系數(shù)前0的總個數(shù)時的標(biāo)準(zhǔn)編碼碼表;圖4是現(xiàn)有技術(shù)中編碼某一個非零系數(shù)前0的個數(shù)的標(biāo)準(zhǔn)編碼碼表;圖5是本發(fā)明實施例中解碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的流程圖;圖6是本發(fā)明實施例中解碼最后一個非零系數(shù)前0的總個數(shù)的流程圖;圖7是本發(fā)明實施例中解碼某一個非零系數(shù)前0的個數(shù)的流程圖;圖8是本發(fā)明實施例CAVLC解碼系統(tǒng)的結(jié)構(gòu)示意圖。具體實施例方式為了使本
技術(shù)領(lǐng)域
的人員更好地理解本發(fā)明實施例的方案,下面結(jié)合附圖和實施方式對本發(fā)明實施例作進(jìn)一步的詳細(xì)說明。首先,對現(xiàn)有技術(shù)中CAVLC編碼和解碼的基本原理做簡單介紹。CAVLC用于對4X4塊的殘差數(shù)據(jù)進(jìn)行編碼,非零系數(shù)個數(shù)的范圍是016,拖尾系數(shù)個數(shù)范圍是03。如果士1的個數(shù)大于3個,則只有最后三個被視為拖尾系數(shù),其余的被視為普通的非零系數(shù)。對非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的編碼通過查表實現(xiàn),編碼表格是標(biāo)準(zhǔn)協(xié)議中的表格,和解碼表格不同。共有5個編碼表格可供選擇,根據(jù)非零系數(shù)個數(shù)預(yù)測值nC來選擇表格。例如,一個4X4塊殘差數(shù)據(jù)為:0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0,對該4X4塊殘差數(shù)據(jù)需要編碼以下句法元素a、非零系數(shù)個數(shù)numcoeff,本例中為5;拖尾系數(shù)個數(shù)numtraiIingones,本例為3;圖1是編碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)時用到的標(biāo)準(zhǔn)協(xié)議的編碼碼表(圖1僅示出了表格的部分內(nèi)容);假設(shè)nC=0,則查此表可得numcoeff=5、并且numtraiIingones=3對應(yīng)的編碼后的碼流為0000100;b、編碼三個拖尾系數(shù)(本例中的-1,-1,1)和除了拖尾系數(shù)以外非零系數(shù)幅值Levels(本例中的3,1);C、編碼最后一個非零系數(shù)前零的個數(shù)TotalZeros,本例中為3;d、編碼每個非零系數(shù)前零的個數(shù)RunBeforeCAVLC解碼是編碼的反向過程,需要從碼流中解析出編碼的各個句法元素,根據(jù)這些句法元素重構(gòu)出來4X4塊的殘差數(shù)據(jù)。解碼也是對編碼碼表的反向查表過程,例如,知道編碼碼流0000100后,查表可得非零系數(shù)個數(shù)為5,拖尾系數(shù)個數(shù)為3。解碼其他句法元素也是類似的,解析完所有句法后即可得到編碼前的殘差數(shù)據(jù)。在解碼過程中讀取碼流后可以和編碼碼表的碼流反復(fù)比較,找到匹配值后就可以查表得到句法元素的值,但這種解析方法效率極低,碼表空間也很大,不適合應(yīng)用在嵌入式設(shè)備中,因此需要重新設(shè)計解碼碼表來提高解析效率,降低碼表空間。針對上述不足,發(fā)明人通過對碼表碼字規(guī)律的統(tǒng)計發(fā)現(xiàn),H.264中CAVLC譯碼的很多碼表具有共同的一個特點,即其碼字多0,并且其碼字在第一個1后面的比特個數(shù)較少。因此,本發(fā)明實施例CAVLC解碼方法及系統(tǒng),基于碼字的連零個數(shù),首先取得起始連零的個數(shù)leadingzeros,再查一個η比特的表就可以通過查表操作,獲得句法元素的值,所述η為第一個1后面的比特數(shù)。進(jìn)一步地,對于碼表的設(shè)計基于連零個數(shù)進(jìn)行分組,將連零個數(shù)相同的碼字分為一組,每組的碼字通過第一個1后面的η比特數(shù)據(jù)進(jìn)一步區(qū)分。因此,在解碼過程中可首先獲取碼字的連零個數(shù),基于此找到碼字所在的組,然后讀取η比特的數(shù)據(jù),進(jìn)一步找到該組中具體的碼字,即可得到句法元素的值。進(jìn)一步地,由于CAVLC解碼是基于碼字的連零個數(shù),在解碼過程中需要反復(fù)地讀取碼字的連零個數(shù),因此在本發(fā)明實施例中,還可通過硬件方式獲取碼字的連零個數(shù),提高獲取碼字的連零個數(shù)的速度,提升解碼效率。如圖2所示,是本發(fā)明實施例CAVLC解碼方法的流程圖,包括以下基本步驟步驟201,獲取需要解碼的碼流。步驟202,確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC。nC的值基于當(dāng)前塊左側(cè)的非零系數(shù)個數(shù)nA和當(dāng)前塊上側(cè)的非零系數(shù)個數(shù)nB計算得來。若當(dāng)前塊左側(cè)和上側(cè)塊都可用,則nC=(nA+nB+1)>>1;若當(dāng)前塊左側(cè)和上側(cè)塊之一可用,則nC等于nA或nB;若當(dāng)前塊左側(cè)和上側(cè)塊都不可用,則nC等于0。步驟203,根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù),所述第一解碼碼表為包含非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的解碼碼表。步驟204,如果所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0,則解碼拖尾連1系數(shù)的符號。如果非零系數(shù)個數(shù)小于等于0,則表明碼字為全0,此時不需要再進(jìn)行其他解碼過程;同樣,如果拖尾系數(shù)個數(shù)小于等于0,則表明沒有拖尾系數(shù),因此,也就不用解碼拖尾連1系數(shù)的符號了。在解碼拖尾連1系數(shù)的符號時,可以通過直接讀取碼流中的比特數(shù)據(jù)來確定系數(shù)1的符號,如果讀取的比特數(shù)據(jù)為1,則表示系數(shù)1的符號為“-”;如果讀取的比特數(shù)據(jù)為0,則表示系數(shù)1的符號為“+”。步驟205,如果所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值,則根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù),所述第二解碼碼表為包含最后一個非零系數(shù)前0的總個數(shù)的解碼碼表。步驟206,解碼所述碼流中其他非零系數(shù)前0的個數(shù)。如果非零系數(shù)個數(shù)大于或等于非零系數(shù)個數(shù)的最大值,即16,則表明所述碼流中沒有0,因此,也就無需執(zhí)行上述步驟205和步驟206。需要說明的是,在上述步驟204和步驟205之間,還可進(jìn)一步包括以下步驟解碼其他非零系數(shù)幅值。具體解碼過程可采用與現(xiàn)有技術(shù)相同的方式。本發(fā)明實施例在進(jìn)行CAVLC解碼時,需要預(yù)先建立對應(yīng)各句法解析的解碼碼表,即前面所述的第一解碼碼表、第二解碼碼表、第三解碼碼表。下面將詳細(xì)說明各解碼碼表的建立方法。分析圖1所示編碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)時的標(biāo)準(zhǔn)協(xié)議的表格,可以發(fā)現(xiàn)有以下特點其碼字多0,最大連零個數(shù)為14,且第一個1后面最多只有三個比特。因此,基于這些特點,可以建立一個非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)解碼碼表,為了便于描述,將其稱為第一解碼碼表。根據(jù)碼流數(shù)據(jù)查找所述第一解碼碼表,得到解碼后的兩個句法元素信息非零系數(shù)個數(shù)、拖尾系數(shù)個數(shù),同時獲得第一個1后面的碼流長度,用于移動碼流比特指針。在建立所述第一解碼碼表時,首先基于連零個數(shù)對碼字進(jìn)行分組,將連零個數(shù)相同的碼字分為一組,每組的碼字通過第一個1后面的η比特數(shù)據(jù)進(jìn)一步區(qū)分該組中具體的碼字,即可得到句法元素的值。下面以0<=nC<2(nC為非零系數(shù)個數(shù)預(yù)測值)為例說明非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)解碼碼表的設(shè)計過程,具體過程如下首先,根據(jù)圖1所示的標(biāo)準(zhǔn)編碼碼表將連零個數(shù)相同的碼流分為一組,得到連零個數(shù)為0的碼流有1個,為碼流“1”;連零個數(shù)為1的碼流有1個,為碼流“01”;連零個數(shù)為2的碼流有1個,為碼流“001”;連零個數(shù)為3的碼流有3個,分別為碼流“000101”、“000100”、“00011”;連零個數(shù)為4的碼流有3個,分別為碼流“0000101”、“000011”、“0000100”;連零個數(shù)為5的碼流有3個,分別為碼流“00000111”、“00000110”、“00000101”;連零個數(shù)為6的碼流有3個,分別為碼流“000000111”、“000000110”、“000000101”;連零個數(shù)為7的碼流有2個,分別為碼流“0000000111”、“0000000110”;連零個數(shù)為8的碼流有1個,分別為碼流“00000000111”;由上述各組碼流可以看出,這些碼流的第一個1后面最多只有兩比特數(shù)據(jù),因此當(dāng)連零個數(shù)相同時,利用碼流中第一個1后面的兩比特數(shù)據(jù)即可區(qū)分具體的碼流。例如,連零個數(shù)為4的碼流有3個,分別為“0000101”、“000011”、“0000100”,解析時確定了連零個數(shù)為4后再讀取碼流中第一個1后面的兩比特數(shù)據(jù)。若讀取的第一個1后面的兩比特數(shù)據(jù)為0,則表示為碼流“0000100”,由圖1所示編碼碼表可知其對應(yīng)的拖尾系數(shù)個數(shù)和非零系數(shù)個數(shù)分別為3和5,第一個1后面的碼流長度為2(這個值不是標(biāo)準(zhǔn)的句法元素,僅僅是為了在解析時移動碼流指針,也可以設(shè)計在非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)解碼碼表中);若讀取的第一個1后面的兩比特數(shù)據(jù)為1,則表示為碼流“0000101”,由圖1所示編碼碼表可知其對應(yīng)的拖尾系數(shù)個數(shù)和非零系數(shù)個數(shù)分別為2和3,第一個1后面的碼流長度為2;若讀取的第一個1后面的兩比特數(shù)據(jù)為2或3,則表示為碼流“000011”(這個碼流第一個ι后面實際只有ι比特數(shù)據(jù),第二個1比特數(shù)據(jù)未知,因此讀到的兩比特數(shù)據(jù)為2或3都表示這個碼流),其對應(yīng)的拖尾系數(shù)個數(shù)和非零系數(shù)個數(shù)分別為4和3,第一個1后面的碼流長度為1。因此,當(dāng)連零個數(shù)為4時設(shè)計的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)解碼碼表為{{2,5,3},{2,3,2},{1,4,3},{1,4,3}},其中,每個集合中的三個值分別表示碼流中第一個1后面的碼流長度、非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)。比如,{2,5,3}表示碼流長度為2,非零系數(shù)個數(shù)為5,拖尾系數(shù)個數(shù)為3。按照上述思想,可以設(shè)計出針對nC在不同取值情況下的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)解碼碼表,即所述第一解碼碼表。為了使整個解碼碼表保持對齊,以便在查表時更方便快捷地計算出碼表索引值,在該解碼碼表中還可以包含一些重復(fù)值或無效的填充值。例如,當(dāng)連零個數(shù)為n(0=<n<=8)時,直接將η左移2位(即乘4),即可得到所在的組{0,0,0}{0,1,1}{0,2,2}{2,2,1}{2,5,3}{0,0,0},{0,0,0},{0,0,0},{0,1,1},{0,1,1},{0,1,1},{0,2,2},{0,2,2},{0,2,2},{2,1,0},{1,3,3},{1,3,3},{2,3,2},{1,4,3},{1,4,3},連零個數(shù)為0時連零個數(shù)為1時連零個數(shù)為2時連零個數(shù)為3時連零個數(shù)為4時{-100,-100,-100},{2,4,2},{2,3,1},{2,2,0},//連零個數(shù)為5時,-100表示不會出現(xiàn)這種情況{-100,-100,-100},{2,5,2},{2,4,1},{2,3,0},//連零個數(shù)為6時{-100,-100,-100},{-100,-100,-100},{2,5,1},{2,4,0},//連零個數(shù)為7時{-100,-100,-100},{100,-100,-100},{-100,-100,-100},{2,5,0},//連零個數(shù)為8時在本發(fā)明實施例中,同樣可以基于連零個數(shù)設(shè)計所述第二解碼碼表。如圖3所示,是現(xiàn)有技術(shù)中編碼非零系數(shù)為1至7時最后一個非零系數(shù)前0的總個數(shù)(下面以jTotalZeros表示)時的標(biāo)準(zhǔn)編碼碼表?;谏鲜鰣D3所示的標(biāo)準(zhǔn)編碼碼表,下面以非零系數(shù)等于2(圖3所示表格中第三列)為例,詳細(xì)說明解碼TotalZeros的解碼碼表的的設(shè)計過程,具體過程如下首先,需要找出這種情況下連零個數(shù)的最大值MaxnunuLeadingkros,當(dāng)非零系數(shù)為2時觀察圖3所示的編碼碼表可知Maxnum_LeadingZeros=6。其次,將連零個數(shù)相同的碼流分為一組,當(dāng)非零系數(shù)為2時分組如下連零個數(shù)為0的碼流有4個,分別為“111”、“110”、“101”、“100”;連零個數(shù)為1的碼流有3個,分別為“011”、“0101”、“0100”;連零個數(shù)為2的碼流有2個,分別為“0011”、“0010”;連零個數(shù)為3的碼流有2個,分別為“00011”、“00010”;連零個數(shù)為4的碼流有2個,分別為“000011”、“000010”;連零個數(shù)為5的碼流有1個,分別為“000001”;連零個數(shù)為6的碼流有1個,分別為“000000”。由上述各組碼流可以看出,第一個1后面最多只有兩比特(全零情況特殊處理),因此,當(dāng)連零個數(shù)相同時,可以以第一個1后面的兩比特數(shù)據(jù)來區(qū)分具體碼流。例如,當(dāng)連零個數(shù)為0時的解碼碼表為{2,3},{2,2},{2,1},{2,0}。其中,每個集合中包含兩個值,第一個值表示第一個“1”后面有兩比特數(shù)據(jù),第二個值是TotalZeors,比如,{2,3}中的第一個值表示第一個1后面有兩比特數(shù)據(jù),第二個值表示TotalZeors=3。最后設(shè)計出當(dāng)非零系數(shù)為2的TotalZeros的解碼碼表如下{{2,3},{2,2},{2,1},{2,0},//連零個數(shù)為O時{2,6},{2,5},{1,4},{1,4},//連零個數(shù)為1時{1,8},{1,8},{1,7},{1,7},//連零個數(shù)為2時{1,10},{1,10},{1,9},{1,9},//連零個數(shù)為3時{1,12},{1,12},{1,11},{1,11},//連零個數(shù)為4時{0,13},{0,13},{0,13},{0,13},//連零個數(shù)為5時{0,14},{0,14},{0,14},{0,14},//連零個數(shù)為6時}需要說明的是,觀察圖3所示的編碼碼表可知,當(dāng)非零系數(shù)為2時有全零的情況,此時讀取碼流連零個數(shù)時可能會出現(xiàn)連零個數(shù)大于6的情況,因此在解碼過程中需要用最大連零個數(shù)MaxnunuLeadingZeros來控制,解碼過程中若解析出連零個數(shù)大于6則使其等于6。依據(jù)上述原理,可以設(shè)計出當(dāng)非零系數(shù)為不同值時TotalZeros的解碼碼表,并將其組合在一起,即可生成最后一個非零系數(shù)前0的總個數(shù)的解碼碼表,即前面所述的第二解碼碼表。需要說明的是,當(dāng)非零系數(shù)取不同值時TotalZeros的解碼碼表大小是不同的,因此可以另外設(shè)計一個偏移碼表I^otalZerosTablejndexoffsettlS],此碼表以非零系數(shù)個數(shù)為索引值,查表得到的內(nèi)容是非零系數(shù)取該值時TotalZeros解碼碼表在總碼表的偏移位置。另外,還可以將非零系數(shù)個數(shù)取不同值時碼流的最大連零個數(shù)組合在一個碼表Maxnum_LeadingZerosTable[15]中,此碼表以非零系數(shù)個數(shù)為索引值,查表得到的內(nèi)容是非零系數(shù)取該值時碼流的最大連零個數(shù)。在本發(fā)明實施例中,同樣可以基于連零個數(shù)建立所述第三解碼碼表。如圖4所示,是現(xiàn)有技術(shù)中編碼某一個非零系數(shù)前0的個數(shù)的標(biāo)準(zhǔn)編碼碼表。由圖4所示編碼碼本可知,只有當(dāng)zeroleft大于6時碼流長度大于3,因此可以只對碼流長度小于等于3的碼流設(shè)計碼表解碼;當(dāng)碼流長度大于3時可以看出某一個非零系數(shù)前0的個數(shù)RunBefore的值與連零個數(shù)有一一對應(yīng)的關(guān)系,即RunBefore=連零個數(shù)+4,因此這種情況下采用計算的方式即可得到RimBefore的值。下面以zeroleft大于6為例說明RunBefore解碼碼表的設(shè)計過程。解碼RimBefore時可直接從碼流中讀取三比特數(shù)據(jù),以這三比特數(shù)據(jù)的大小為索引查表得到RimBefore的值和碼流長度值,若查表得到RimBefore的值為7(這個值相當(dāng)于一個特殊的標(biāo)記,可任意設(shè)定一個值)時,則獲取碼流連零個數(shù),RimBefore的值等于連零個數(shù)加4,相應(yīng)的碼表為{7,0},{6,3},{5,3},{4,3},{3,3},{2,3},{1,3},{0,3}。依據(jù)上述原理,可以設(shè)計出RimBefore的解碼碼表,即前面所述的第三解碼碼表,整個碼表如下VLCtab2RunBeforeTable—vie[]={//{run_before,len},run_beforetable{1,1},{1,1},{1,1},{1,1},{0,1},{0,1},{0,1},{0,1},//zeroleft等于1時{2,2},{2,2},{1,2},{1,2},{0,1},{0,1},{0,1},{0,1},//zeroleft等于2時{3,2},{3,2},{2,2},{2,2},{1,2},{1,2},{0,2},{0,2},//zeroleft等于3時{4,3},{3,3},{2,2},{2,2},{1,2},{1,2},{0,2},{0,2},//zeroleft等于4時{5,3},{4,3},{3,3},{2,3},{1,2},{1,2},{0,2},{0,2},//zeroleft等于5時{1,3},{2,3},{4,3},{3,3},{6,3},{5,3},{0,2},{0,2},//zeroleft等于6時{7,0},{6,3},{5,3},{4,3},{3,3},{2,3},{1,3},{0,3}//zeroleft大于6時};在本發(fā)明實施例中,所需的解碼碼表的總空間為:360+312+240+128+72+734+48+112+12+64=2082words。所有解碼碼表在表1中說明表權(quán)利要求1.一種基于上下文自適應(yīng)的可變長編碼的解碼方法,其特征在于,包括獲取需要解碼的碼流;確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC;根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù),所述第一解碼碼表為包含非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的解碼碼表;如果所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0,則解碼拖尾連1系數(shù)的符號;如果所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值,則根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù),所述第二解碼碼表為包含最后一個非零系數(shù)前0的總個數(shù)的解碼碼表;根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括基于編碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)時的標(biāo)準(zhǔn)編碼中各碼字的連零個數(shù)對碼流進(jìn)行分組,將連零個數(shù)相同的碼字分為一組;根據(jù)各組碼流的連零個數(shù)及該組碼流中第一個1后面的兩比特或三比特數(shù)據(jù),建立所述第一解碼碼表,所述第一解碼碼表中包含碼流中第一個1后面的碼流長度、非零系數(shù)個數(shù)、拖尾系數(shù)個數(shù)。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)包括如果所述預(yù)測值0<=nC<8,則根據(jù)所述碼流中第一個1前面的連零個數(shù)及第一個1后面的三比特數(shù)據(jù)計算第一索引值;根據(jù)所述第一索引值查找所述第一解碼碼表,得到所述碼流中第一個1后面的碼流長度、非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù);如果所述預(yù)測值8<=nC,則確定所述碼流中碼流長度固定為6;并根據(jù)所述碼流對應(yīng)的碼字查找所述第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù);如果所述預(yù)測值nC=-1,則根據(jù)所述碼流中第一個1前面的連零個數(shù)查找所述第一解碼碼表,得到所述碼流中第一個1后面的碼流長度;根據(jù)所述碼流中第一個1后面的兩比特數(shù)據(jù)查找所述第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括基于編碼最后一個非零系數(shù)前0的總個數(shù)的標(biāo)準(zhǔn)編碼中各碼字的連零個數(shù)對碼流進(jìn)行分組,將連零個數(shù)相同的碼字分為一組;根據(jù)各組碼流的連零個數(shù)及該組碼流中第一個1后面的兩比特數(shù)據(jù),建立所述第二解碼碼表,所述第二解碼碼表中包含碼流中第一個1后面的比特數(shù),最后一個非零系數(shù)前0的總個數(shù)。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù)包括根據(jù)所述非零系數(shù)個數(shù)、所述碼流中連零個數(shù)及第一個1后面的兩比特數(shù)據(jù)計算第二索引值;根據(jù)所述第二索引值查找所述第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù)。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括針對碼流長度小于等于3的碼流建立第三解碼碼表,所述第三解碼碼表為包含其他非零系數(shù)前0的個數(shù)及所述碼流的長度值的解碼碼表;所述根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)包括如果所述碼流的長度小于等于3,則根據(jù)所述碼流中的三比特數(shù)據(jù)、以及該非零系數(shù)前剩余0的總個數(shù)計算第三索引值;根據(jù)所述第三索引值查找所述第三解碼碼表,得到碼流長度和所述其他非零系數(shù)前0的個數(shù);如果所述其他非零系數(shù)前零的總個數(shù)大于6并且所述碼流中的三比特數(shù)據(jù)為預(yù)定值,則獲取所述碼流的連零個數(shù),并將所述連零個數(shù)加4作為所述其他非零系數(shù)前0的個數(shù)。7.一種基于上下文自適應(yīng)的可變長編碼的解碼系統(tǒng),其特征在于,包括碼流獲取單元,用于獲取需要解碼的碼流;計算單元,用于確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC;第一解碼單元,用于根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù),所述第一解碼碼表為包含非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)的解碼碼表;第一判斷單元,用于判斷所述非零系數(shù)個數(shù)是否大于0,以及所述拖尾系數(shù)個數(shù)是否大于0;符號解析單元,用于在所述第一判斷單元判斷所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0時,解碼拖尾連1系數(shù)的符號;第二判斷單元,用于判斷所述非零系數(shù)個數(shù)是否小于非零系數(shù)個數(shù)的最大值;第二解碼單元,用于在所述第二判斷單元判斷所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值時,根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù),所述第二解碼碼表為包含最后一個非零系數(shù)前0的總個數(shù)的解碼碼表;第三解碼單元,用于根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)。8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括第一解碼碼表建立單元,用于基于編碼非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)時的標(biāo)準(zhǔn)編碼中各碼字的連零個數(shù)對碼流進(jìn)行分組,將連零個數(shù)相同的碼字分為一組;并根據(jù)各組碼流的連零個數(shù)及該組碼流中第一個1后面的兩比特或三比特數(shù)據(jù),建立所述第一解碼碼表,所述第一解碼碼表中包含碼流中第一個1后面的碼流長度、非零系數(shù)個數(shù)、拖尾系數(shù)個數(shù);所述第一解碼單元包括第一系數(shù)解碼子單元,用于在所述預(yù)測值0<=nC<8時,根據(jù)所述碼流中第一個1前面的連零個數(shù)及第一個1后面的三比特數(shù)據(jù)計算第一索引值;并根據(jù)所述第一索引值查找所述第一解碼碼表,得到所述碼流中第一個1后面的碼流長度、非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù);第二系數(shù)解碼子單元,用于在所述預(yù)測值8<=nC時,確定所述碼流中碼流長度固定為6;并根據(jù)所述碼流對應(yīng)的碼字查找所述第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù);第三系數(shù)解碼子單元,用于在所述預(yù)測值nC=-1時,則根據(jù)所述碼流中第一個1前面的連零個數(shù)查找所述第一解碼碼表,得到所述碼流中第一個1后面的碼流長度;并根據(jù)所述碼流中第一個1后面的兩比特數(shù)據(jù)查找所述第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù)。9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括第二解碼碼表建立單元,用于基于編碼最后一個非零系數(shù)前0的總個數(shù)的標(biāo)準(zhǔn)編碼中各碼字的連零個數(shù)對碼流進(jìn)行分組,將連零個數(shù)相同的碼字分為一組;并根據(jù)各組碼流的連零個數(shù)及該組碼流中第一個1后面的兩比特數(shù)據(jù),建立所述第二解碼碼表,所述第二解碼碼表中包含碼流中第一個1后面的比特數(shù),最后一個非零系數(shù)前0的總個數(shù);所述第二解碼單元包括索引值計算子單元,用于根據(jù)所述非零系數(shù)個數(shù)、所述碼流中連零個數(shù)及第一個1后面的兩比特數(shù)據(jù)計算第二索引值;解碼子單元,根據(jù)所述第二索引值查找所述第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù)。10.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括第三解碼碼表建立單元,用于針對碼流長度小于等于3的碼流建立第三解碼碼表,所述第三解碼碼表為包含其他非零系數(shù)前0的個數(shù)及所述碼流的長度值的解碼碼表;所述第三解碼單元包括查表解碼子單元,用于在所述碼流的長度小于等于3時,根據(jù)所述碼流中的三比特數(shù)據(jù)、以及該非零系數(shù)前剩余0的總個數(shù)計算第三索引值,并根據(jù)所述第三索引值查找所述第三解碼碼表,得到碼流長度和所述其他非零系數(shù)前0的個數(shù);計算解碼子單元,用于在所述其他非零系數(shù)前零的總個數(shù)大于6并且所述碼流中的三比特數(shù)據(jù)為預(yù)定值時,獲取所述碼流的連零個數(shù),并將所述連零個數(shù)加4作為所述其他非零系數(shù)前0的個數(shù)。全文摘要本發(fā)明公開了一種基于上下文自適應(yīng)的可變長編碼的解碼方法及系統(tǒng),所述方法包括獲取需要解碼的碼流;確定所述碼流中的非零系數(shù)個數(shù)預(yù)測值nC;根據(jù)所述預(yù)測值nC查找預(yù)先建立的第一解碼碼表,得到所述碼流中的非零系數(shù)個數(shù)和拖尾系數(shù)個數(shù);如果所述非零系數(shù)個數(shù)大于0,并且所述拖尾系數(shù)個數(shù)大于0,則解碼拖尾連1系數(shù)的符號;如果所述非零系數(shù)個數(shù)小于非零系數(shù)個數(shù)的最大值,則根據(jù)所述非零系數(shù)個數(shù)查找預(yù)先建立的第二解碼碼表,得到所述碼流中最后一個非零系數(shù)前0的總個數(shù);根據(jù)所述最后一個非零系數(shù)前0的總個數(shù)及所述非零系數(shù)個數(shù),解碼所述碼流中其他非零系數(shù)前0的個數(shù)。利用本發(fā)明,可以節(jié)省碼表存儲空間,并提高解碼效率。文檔編號H04N7/26GK102547260SQ20101060452公開日2012年7月4日申請日期2010年12月22日優(yōu)先權(quán)日2010年12月22日發(fā)明者朱東巍,楊長平申請人:聯(lián)芯科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
晋中市| 霍山县| 太康县| 南乐县| 全南县| 莱西市| 中超| 丰城市| 织金县| 兰州市| 南昌市| 南安市| 九江县| 乾安县| 玉溪市| 新巴尔虎右旗| 苍溪县| 嫩江县| 上犹县| 慈溪市| 兰考县| 梅州市| 方城县| 陆川县| 罗甸县| 昭平县| 兴和县| 潜山县| 德化县| 武山县| 浮山县| 宁强县| 习水县| 友谊县| 红河县| 博白县| 右玉县| 巴彦县| 定南县| 洮南市| 大方县|