亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

解碼可變長度前綴碼的方法

文檔序號:7505568閱讀:690來源:國知局

專利名稱::解碼可變長度前綴碼的方法本專利文件的一部分公開內(nèi)容包含受版權(quán)保護(hù)的材料。當(dāng)本專利文件或?qū)@_出現(xiàn)在美國專利商標(biāo)局的文件或記錄中時,版權(quán)所有者不反對任何人復(fù)印這些文件,否則將無條件地保留所有版權(quán)。背景1.領(lǐng)域本發(fā)明總地涉及可變長度前綴碼例如霍夫曼碼的解碼,更具體地說,涉及一種查找表解碼和面向前綴解碼的組合解碼方案。2.描述熵編碼(entropycoding)是一種廣泛使用的數(shù)據(jù)壓縮技術(shù),很多視頻和音頻編碼標(biāo)準(zhǔn)都基于這種技術(shù)。熵編碼的理論基礎(chǔ)是當(dāng)與代表較少出現(xiàn)的數(shù)據(jù)的位的數(shù)目相比,用更少數(shù)量的位來編碼最常使用的數(shù)據(jù)時,可以達(dá)到壓縮效果。這種方法導(dǎo)致由碼組成的編碼數(shù)據(jù)流具有不同的長度。有多種方法形成這樣的可變長度碼(VLC)。一種常見的方法使用前綴編碼,其中碼由前綴和幾個有效位組成,前綴允許解碼系統(tǒng)辨別不同的碼,有效位代表一個具體值(例如,霍夫曼編碼)。雖然大多數(shù)編碼標(biāo)準(zhǔn)在它們的編碼方案中采用霍夫曼碼,其前綴由一串“1”或“0”位組成,但是有一些標(biāo)準(zhǔn)(例如ISO/IEC14496-2,運(yùn)動圖像專家組(MPEG)-4編碼標(biāo)準(zhǔn),Visual)允許不同的編碼方案,這些方案用一串更長的位樣式來加前綴。作為一般規(guī)則,構(gòu)成可變長度碼的位的數(shù)目取決于構(gòu)成碼的前綴的位的數(shù)目。同時,通過實驗定義的一個子集的最常出現(xiàn)碼可具有相對短的前綴(包括零前綴),因而可以作為單個碼以查找方式來解碼,對于特定的系統(tǒng)而言這可能是一種更快的解碼方式。因此,需要一種根據(jù)實際頻率到碼長的分布,為用常規(guī)位組合添加前綴的可變長度碼提供高速解碼的能力。從以下對本發(fā)明的詳細(xì)描述中將會清楚本發(fā)明的特征和優(yōu)點,其中圖1圖示了示例性的可變長度編碼;圖2圖示了一開始從位流中讀取的位、選出位以及包含解碼值、有效性指示符和輔助信息在內(nèi)的表之間的關(guān)系;以及圖3是圖示了根據(jù)本發(fā)明實施方案的可變長度解碼過程的流程圖。具體實施例方式本發(fā)明的實施方案是一種為具有由常規(guī)位樣式組成的前綴的可變長度碼實現(xiàn)解碼器的方法。為了將所公開的方法應(yīng)用于具體的編碼方案,這種方案應(yīng)當(dāng)包括一個具有較短前綴(包括零前綴)的最常使用碼的子集,使得前綴掃描操作變得沒有效率。根據(jù)所公開的方法,從位流中讀取一定數(shù)量的位,其數(shù)量不少于VLC的最大可能長度。然后,選擇預(yù)定數(shù)量的位,并將它們用作一個數(shù)據(jù)結(jié)構(gòu)的索引,該數(shù)據(jù)結(jié)構(gòu)包含至少一個解碼值和有效性指示符,以及其他預(yù)解碼的數(shù)據(jù),包括但不限于前綴類型和長度、一組碼的最大碼長、實際碼長以及將返回給碼流的位數(shù)。有效性指示符用來確定是繼續(xù)解碼操作,還是從數(shù)據(jù)結(jié)構(gòu)中獲得有效解碼值并將多余的位返回給碼流。如果解碼值被指示為無效的,則解碼操作將繼續(xù),并且一種估計碼前綴的長度以及對應(yīng)于所估計長度的有效位數(shù)的解碼方法被應(yīng)用于一開始從位流中讀出的位。所公開的方法比直接查找解碼法需要更少的存儲器,并且該方法的性能與使用多個查找表的現(xiàn)有技術(shù)方法相比,表現(xiàn)出更少的存儲器存取開銷。此外,與其他面向前綴的方法相比,這種方法對于“短前綴”碼的解碼似乎更有效率,這是因為它排除了最常使用碼的前綴類型和長度確定的操作。在說明書中提及本發(fā)明的“一個實施方案”或“實施方案”是指關(guān)于該實施方案所描述的具體特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個實施方案中。因此,短語“在一個實施方案中”在整個說明書中不同地方的出現(xiàn)不一定是指同一個實施方案。圖1圖示了示例性的可變長度編碼。如圖1所示,每個可變長度碼都具有一組被用作前綴10的位以及一組有效位12。前綴可以由(在通常情況下)被復(fù)制并相互級聯(lián)的一組位(位樣式)組成。跟在碼前綴后的位可以被稱作有效位。可變長度碼(VLC)可以具有相同的前綴。在這種情況下,這些碼構(gòu)成了一個前綴碼組,但與此同時,跟在前綴后面的有效位的數(shù)量可以不同。在這樣一個組中,碼可能具有的有效位的最大數(shù)量可以被稱為最大位數(shù)。對于每個VLC而言,跟在前綴后面的位的數(shù)量可以被稱為實際位數(shù)。圖2根據(jù)本發(fā)明的實施方案圖示了一開始從位流中讀取的位、選出位以及包含解碼值、有效性指示符和輔助信息在內(nèi)的表之間的關(guān)系。如圖2的實施例所示,可從位流中讀出的位20的數(shù)量不少于任何可能的VLC長度,即,位數(shù)足以包含在具體編碼方案中最長的VLC??梢詮淖x出的位中選出任意數(shù)量的前導(dǎo)位22。提供一種數(shù)據(jù)結(jié)構(gòu)24,以至少包含針對可由選出位形成的每種位組合的解碼數(shù)據(jù)和有效性指示符。數(shù)據(jù)結(jié)構(gòu)24還可以包含與前綴類型、碼長、以及返回位流的位數(shù)有關(guān)的輔助信息,以協(xié)助以后的解碼。圖3是圖示了根據(jù)本發(fā)明實施方案的可變長度解碼過程的流程圖。在框100,從位流中讀出不少于任何可能的可變長度碼的位數(shù)。讀出的位數(shù)應(yīng)當(dāng)足夠包含最長的可變長度碼,但是不受限制,當(dāng)它可以協(xié)助解碼過程時存儲額外的位(例如,讀出的位適合機(jī)器字大小)。接著,在框102,可以從先前讀出的位中選出預(yù)定數(shù)量的位。所選擇的位數(shù)取決于所使用的具體編碼方案,因此,是出外部裝置來確定的。完成這一確定過程的方式應(yīng)當(dāng)是允許選出位覆蓋最常使用的(最可能的)VLC,同時使碼查找表的大小最小化。在框104,利用由選出位形成的值來索引碼查找表,并且獲得至少解碼值和有效性指示符、以及輔助信息。在一個實施方案中,獲得輔助信息可以是可選的。然后在框106處檢查有效性指示符,如果被指示為有效的,則在框104處獲得的解碼值在框108處作為解碼過程的結(jié)果被返回。如果需要的話,可以檢查實際碼長或者實際長度和選出位數(shù)之間的差值(在框104處作為輔助信息而被取出),以在解碼后調(diào)整位流。如果解碼數(shù)據(jù)被指示為無效的,則在框110處向一開始從位流中讀出的位應(yīng)用面向前綴的解碼方法(即,估計碼前綴的長度和對應(yīng)于所估計長度的有效位數(shù)的方法)。在框104處獲得的輔助信息可描述碼前綴的類型和長度,因而提高將進(jìn)一步應(yīng)用的方法的性能。參考附錄A,以一個用C和匯編程序設(shè)計語言實現(xiàn)的本發(fā)明的實施方案為例。這個實施例不是限制性的,本領(lǐng)域的技術(shù)人員可以用其他程序設(shè)計語言來實現(xiàn)本發(fā)明,而不會偏離所要求保護(hù)的發(fā)明的范圍。這里所描述的技術(shù)不限于任何具體的硬件或軟件配置;它們可以應(yīng)用于計算或處理環(huán)境中。這些技術(shù)可以用包含在硬件、軟件或固件組件,或它們的組合中的邏輯來實現(xiàn)。這些技術(shù)可以用在可編程機(jī)器上執(zhí)行的程序來實現(xiàn),所述可編程機(jī)器例如是移動計算機(jī)或靜止計算機(jī)、個人數(shù)字助理、機(jī)頂盒、蜂窩電話和尋呼機(jī)、以及其他電子設(shè)備,其中每個設(shè)備都包括處理器、該處理器可讀的存儲介質(zhì)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備以及一個或多個輸出設(shè)備。程序代碼被施加于使用輸入設(shè)備而輸入的數(shù)據(jù)上,以完成所描述的功能,并且生成輸出信息。輸出信息可以施加于一個或多個輸出設(shè)備。本領(lǐng)域的普通技術(shù)人員可以理解,可以利用多種計算機(jī)系統(tǒng)配置來實現(xiàn)本發(fā)明,包括微處理器系統(tǒng)、小型計算機(jī)、大型計算機(jī)等等。本發(fā)明也可以實現(xiàn)在分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。每個程序都可以用高級過程性或面向?qū)ο蟮某绦蛟O(shè)計語言來實現(xiàn),以與處理系統(tǒng)通信。然而,如果需要的話,也可以用匯編語言或機(jī)器語言來實現(xiàn)程序。無論怎樣,語言都可以被編譯或解釋。程序指令可被用來致使以該指令編程的通用或?qū)S锰幚硐到y(tǒng)執(zhí)行這里所描述的操作??商鎿Q地,可以由包含用于執(zhí)行所述操作的硬連線邏輯的特定硬件組件、或者由已編程的計算機(jī)組件和定制硬件組件的組合來執(zhí)行操作。這里所描述的方法可以作為計算機(jī)程序產(chǎn)品而被提供,該產(chǎn)品可以包括其上存儲有指令的機(jī)器可讀介質(zhì),所述指令可被用于編程一個處理系統(tǒng)或其他電子設(shè)備來實現(xiàn)所述方法。這里所使用的術(shù)語“機(jī)器可讀介質(zhì)”應(yīng)當(dāng)包括能夠存儲或編碼供機(jī)器執(zhí)行的指令序列,并致使所述機(jī)器實現(xiàn)這里所描述的任何一種方法的任何介質(zhì)。因此,術(shù)語“機(jī)器可讀介質(zhì)”應(yīng)當(dāng)包括但不限于固態(tài)存儲器、光盤和磁盤、以及編碼數(shù)據(jù)信號的載波。此外,在本領(lǐng)域中以采取動作或引發(fā)結(jié)果的一種形式或另一種形式(例如,程序、過程、處理、應(yīng)用、模塊、邏輯等等)提及軟件是常見的。這樣的表達(dá)僅僅是表述處理系統(tǒng)對軟件的執(zhí)行致使處理器完成動作或產(chǎn)生結(jié)果的簡便方式。雖然參考示意性的實施方案描述了本發(fā)明,但是本說明書并不想被解釋為限制性的。本發(fā)明所屬領(lǐng)域的技術(shù)人員所清楚的對示意性實施方案的各種修改、以及本發(fā)明的其他實施方案都被視為落入本發(fā)明的精神和范圍內(nèi)。附錄A2002英特爾公司GetVLC函數(shù)(匯編程序)InitTable函數(shù)(“C”)輸入表(“C”)和初始霍夫曼表(文本)位流結(jié)構(gòu)(“C”)-------------------------------------------InitialHuffmancodetable初始霍夫曼表-------------------------------------------/*Codes碼Vectordifferences向量差100101011-1001020011-200010300011-3000011040000111-400001010500001011-500001000600001001-600000110700000111-7000001011080000010111-8000001010090000010101-90000010010100000010011-10000001000101100000100011-1000001000001200000100001-12000000111101300000011111-13000000111001400000011101-14000000110101500000011011-15000000110001600000011001-16000000101101700000010111-17000000101001800000010101-18000000100101900000010011-19000000100002000000010001-20*/-----------------------------------------Packedcode/valuetablecontaininginformationonprefixlengthandsignificantbitnumber包含有關(guān)前綴長度和有效位數(shù)的信息的壓縮碼/值表-----------------------------------------///thetableelementsshouldbesortedbyprefixlength表元素應(yīng)當(dāng)按前綴長度排序staticconstlongexTable_Mixed[]={13,/*maxbits|bit-sizeflag*/最大位|位大小標(biāo)志7,/*numberofprefixgroups*/前綴組的數(shù)量5,/*lookuptablelength(inbits)*/查找表長度(以位為單位)1,/*codelength*/碼長1,/*sizeofgroup*/組的大小0,/*bitindex*/位索引0,/*getbits*/獲取位0,/*ungetbits*/不獲取位0x00010000,3,/*3-bitcodes*/3位碼2,1,1,0,0x00020001,0x0003ffff,4,/*4-bitcodes*/4位碼2,2,1,0,0x00020002,0x0003fffe,5,/*5-bitcodes*/5位碼2,3,1,0,0x00020003,0x0003fffd,8,/*8-bitcodes*/8位碼4,4,3,0,0x00080006,0x0009fffa,0x000a0005,0x000bfffb,7,/*7-bitcodes*/7位碼2,4,3,1,0x00060004,0x0007fffc,11,/*11-bitcodes*/11位碼4,5,5,0,0x0020000c,0x0021fff4,0x0022000b,0x0023fff5,10,/*10-bitcodes*/10位碼6,5,5,1,0x0012000a,0x0013fff6,0x00140009,0x0015fff7,0x00160008,0x0017fff8,8,/*8-bitcodes*/8位碼2,5,5,3,0x00060007,0x0007fff9,11,/*11-bitcodes*/11位碼16,6,4,0,0x00100014,0x0011ffec,0x00120013,0x0013ffed,0x00140012,0x0015ffee,0x00160011,0x0017ffef,0x00180010,0x0019fff0,0x001a000f,0x001bfff1,0x001c000e,0x001dfff2,0x001e000d,0x001ffff3,-1/*endoftable*/表結(jié)束};------------------------------BitStreamstructures位流結(jié)構(gòu)------------------------------typedefstruct_MplDataBuf{unsignedchar*data;longdata_len;longdata_offset;}MplDataBuf;typedefstruct_MplBitStream{longbit_ptr;//緩沖區(qū)位指針(31-0)MplDataBuf*data_buf;//指向數(shù)據(jù)的指針及其大小unsignedlong*start_data;//內(nèi)部位流指針unsignedlong*end_data;unsignedlong*current_data;FILE*fd;//輸入或輸出文件jmp_bufexit_point;//處理錯誤vlc碼的退出點}MplBitStream;#defineDATA_BUFFERSIZE1*1024*1024unsignedlongbit_mask[33]={0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff};-----------------------------------------------FunctiontoforminternalVLCtable形成內(nèi)部VLC表的函數(shù)-----------------------------------------------<prelisting-type="program-listing"><![CDATA[typedefunsignedlongVLCDecodeTable;staticVLCDecodeTable*CreateVLCDecodeTable_Mixed(constlong*src_table,VLCDecodeTable*table,long*table_size,longcyr_size)  {  intvm4_vlc_code_mask,vm4_vlc_data_mask,vm4_vlc_shift;  intoffset;  inti,j;  intcode_length;  intgroup_size;  intbit_index;  intget_bits;  intunget_bits;  intgroup_count;  intoutidx;  intgroup_offset;  intlookup_length;  intprefix_offset;  switch(*src_table++&amp;VM4_VLC_LEN_FLAG)  {  caseVM4_VLC_20:  vm4_vlc_code_mask=0xfffff000;  vm4_vlc_data_mask=0x00000fff;  vm4_vlc_shift=12;  break;  caseVM4_VLC_24:  vm4_vlc_code-mask=0xffffff00;  vm4_vlc_data_mask=0x000000ff;  vm4_vlc_shift=8;  break;  default:  vm4_vlc_code_mask=0xffff0000;  vm4_vlc_data_mask=0x0000ffff;  vm4_vlc_shift=16;  break;  }  offset=*src_table++*2;  lookup_length=*src_table++;  prefix_offset=(1<<lookup_length)*2+2;offset+=prefix_offset;  memset(table,0,offset*sizeof(VLCDecodeTable));  ///memset(table,-1,prefix_offset*sizeof(VLCDecodeTable));  table=32-lookup_length;///thebitcounttoshiftright右移位計數(shù)  table[1]=prefix_offset;  while(*src_table!=-1)  {  code_length=*src_table++;  group_size=*src_table++;  bit_index=*src_table++*2+prefix_offset;  get_bits=*src_table++;  unget_bits=*src_table++;  if(!table[bit_index])  {  table[bit_index]=get_bits;  table[bit_index+1]=group_offset=offset;  }  for(i=0,group_count=0;i<group_size;i++)  {  if(code_length<lookup_length)  {  for=(j=0;j<(1<<(lookup_length-code_length));j++)  {  outidx=((((((unsignedlongint)(*src_table&amp;vm4_vlc_code_mask)) ?。荆緑m4_vlc_shift)&amp;bit_mask[code_length]) ?。迹?lookup_length-code_length))+j)*2;  table[outidx+2]=/*lookup_length-*/code_length;  table[outidx+2+1]=((*src_table&amp;vm4_vlc_data_mask)<<(32-  vm4_vlc_shift))>>(32-vm4_vlc_shift);  }  }  elseif(code_length==lookup_ength)  {  outidx=((((unsignedlongint)(*src_table&amp;vm4_vlc_code_mask))  >>vm4_vlc_shift)&amp;bit_mask[code_length])*2;  table[outidx+2]=code_length;///0;  table[outidx+2+1]=((*src_table&amp;vm4_vlc_data_mask)<<(32-  vm4_vlc_shift))>>(32-vm4_vlc_shift);  }  if(!unget_bits)  {  outidx=((((unsignedlongint)(*src_table&amp;vm4_vlc_code_mask)) ?。荆緑m4_vlc_shift)&amp;bit_mask[get_bits])*2;  table[group_offset+outidx]=((*src_table&amp;vm4_vlc_data_mask)<<  (32-vm4_vlc_shift))>>(32-  vm4_vlc_shft);  table[group_offset+outidx+1]=0;  group_count++;  src_table++;  }  else  {for(j=0;j<(1<<unget_bits);j++)  {  outidx=((((((unsignedlongint)(*src_able&amp;vm4_vlc_code_mask))  >>vm4_vlc_shift)&amp;bit_mask[get_bits-unget_bits]) ?。迹紆nget_bits)+j)*2;  table[group_offset+outidx]=((*src_table&amp;vm4_vlc_data_mask) ?。迹?32-vm4_vlc_shift))>>(32-  vm4_vlc_shift);  table[group_offset+outidx+1]=unget_bits;  group_count++;  }  src_table++;  }  }  offset+=group_count*2;  }  *table_size=offset;  return(VLCDecodeTable*)table;  }]]></pre>---------------------------------------------FunctiontodecodeVLC(Assembler)解碼VLC的函數(shù)(匯編語言)----------------------------------------------.686.xmmxmmwordtextequ&lt;qword&gt;mmwordtextequ&lt;qword&gt;.modelFLATMplDataBufstruc4tdatadddata_lendddata_offsetddMplDataBufendsMplBitStreamstruc4tbit_ptrdd;;;Bufferbitpointer(31-0)緩沖區(qū)位指針data_bufdd;;;Pointertodataanditssize指向數(shù)據(jù)的指針及其大小start_datadd;;;Internalbitsreampointers內(nèi)部位流指針end_dataddcurrent_dataddfddd;;;Inputoroutputfile輸入或輸出文件exit_pointdd;;;Exitpointtohandleincorrectvlccodes處理錯誤vlc碼的退出點MplBitStreamends_TEXTsegmentextrn_longjmp:near;;;unsignedlongasmbsGetVLC_LookupBitSearch;;;(MplBitStream*bsm,constVLCDecodeTable*vlcTable)_asmbsGetVLC_LookupBitSearchprocnearsizeof_localsequ14hwsequesp+04hbsmequdwordptr[eax+04h]tableequdwordptr[eax+08h]moveax,espsubesp,sizeof_localsandesp,0fffffff0hpusheaxmov[ws],esimov[ws+04h],edimov[ws+08h],ecxmov[ws+0ch],ebxmov[ws+10h],ebpmovesi,bsmmovedi,tablemovecx,lfhsubecx,MplBitStream.bit_ptr[esi]movebx,MplBitStream.current_data[esi]moveax,[ebx]movedx,[ebx+4]shldeax,edx,cl;;;eax=datatesteax,eaxjzerror_code;;;thisbranchissupposednottobetaken假定不采用該分支;;;lookupseveralbitsfirstmovecx,[edi];;;ecx==32-lookup_bitsmovedx,eaxshredx,clmovebp,[edi+edx*8+8];;;ebp==(un)getbitsorebp,ebpjzscan;;;nottaken不采用moveax,[edi+edx*8+0ch];;;eax==decodeddatamovebx,MplBitStream.bit_ptr[esi]subebx,ebpjsnegative_ptr;;;nottaken不采用;;;exitmovMplBitStream.bit_ptr[esi],ebxmovesi,[ws]movedi,[ws+04h]movecx,[ws+08h]movebx,[ws+0ch]movebp,[ws+10h]movesp,[esp]retscan:bsrecx,eax;;;ecx=indexmovebx,[edi+4];;;ebx==prefix_offsetaddebx,62movebp,31subebx,ecxsubebx,ecx;;;ebx=offset(ofbitindexgroup位索引組的偏移)subebp,ecx;;;ebp=(31-index)movedx,[edi+ebx*4];;;edx=get_bitsmovebx,[edi+ebx*4+4];;;ebx=offset(ofcodevalueandungetbits碼值和未獲取位的偏移)subecx,edxshreax,clandeax,bit_mask[edx*4];;;eax=dataleaebx,[ebx*4]leaebx,[ebx+eax*8]movecx,[edi+ebx+4];;;ecx=unget_bitsmoveax,[edi+ebx];;;eax=datamovebx,MplBitStream.bit_ptr[esi]leaedx,[edx+ebp+1]addebx,ecxsubebx,edxjsnegative_ptr;;;nottaken不采用almostexit:movMplBitStream.bit_ptr[esi],ebxexit:movesi,[ws]movedi,[ws+04h]movecx,[ws+08h]movebx,[ws+0ch]movebp,[ws+10h]movesp,[esp]retnegative_ptr:addebx,20haddMplBitStream.current_data[esi],04hjmpalmost_exit;;;taken被采用error_code:push-1leaedx,MplBitStream.exit_point[esi]pushedxcall_longjmp;;;noreturnhereint00h_asmbsGetVLC_LookupBitSearchendp_TEXTends_DATAsegmentbit_maskdd00000000hdd00000001h,00000003h,00000007h,0000000fhdd0000001fh,0000003fh,0000007fh,000000ffhdd000001ffh,000003ffh,000007ffh,00000fffhdd00001fffh,00003fffh,00007fffh,0000ffffhdd0001ffffh,0003ffffh,0007ffffh,000fffffhdd001fffffh,003fffffh,007fffffh,00ffffffhdd01ffffffh,03ffffffh,07ffffffh,0fffffffhdd1fffffffh,3fffffffh,7fffffff,0fffffffh_DATAendsend權(quán)利要求1.在用于解碼位流中的可變長度前綴碼的系統(tǒng)中,一種方法包括從所述位流中讀出足以存儲所述系統(tǒng)的最長可變長度碼的多個位;從讀出的位中選出預(yù)定數(shù)量的位;以及根據(jù)所選出的位的實際值,從一個數(shù)據(jù)結(jié)構(gòu)中至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符。2.如權(quán)利要求1所述的方法,還包括當(dāng)解碼值被指示為無效時,向一開始從所述位流中讀出的位應(yīng)用面向前綴的解碼方法。3.如權(quán)利要求1所述的方法,其中讀出所述多個位的操作包括使指定數(shù)量的位可被訪問用于以后的操作。4.如權(quán)利要求1所述的方法,其中選出所述數(shù)量的位的操作包括使指定數(shù)量的位比讀出相同數(shù)量的位更快地可被訪問用于以后的操作。5.如權(quán)利要求1所述的方法,其中所述預(yù)定數(shù)量的位包括被用作所述數(shù)據(jù)結(jié)構(gòu)的索引的最大數(shù)量的位。6.如權(quán)利要求1所述的方法,其中所述有效性指示符指示所述解碼值是否有效。7.如權(quán)利要求1所述的方法,其中用于至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符的數(shù)據(jù)結(jié)構(gòu)包括一個存儲器區(qū)域,對于可由所述預(yù)定數(shù)量的位形成的每種位組合,所述存儲器區(qū)域至少包含該位組合的解碼值和有效性指示符。8.如權(quán)利要求2所述的方法,其中面向前綴的解碼方法還包括一種在解碼期間采用可變長度碼前綴屬性的可變長度解碼的方法。9.一種制品,包括具有多條機(jī)器可讀指令的機(jī)器可訪問介質(zhì),其中當(dāng)所述指令由處理器執(zhí)行時,所述指令通過以下步驟完成對位流中的可變長度前綴碼的解碼從所述位流中讀出足以存儲所述系統(tǒng)的最長可變長度碼的多個位;從讀出的位中選出預(yù)定數(shù)量的位;以及根據(jù)所選出的位的實際值,從一個數(shù)據(jù)結(jié)構(gòu)中至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符。10.如權(quán)利要求9所述的制品,還包括當(dāng)解碼值被指示為無效時,用于向一開始從所述位流中讀出的位應(yīng)用面向前綴的解碼方法的指令。11.如權(quán)利要求9所述的制品,其中用于讀出多個位的指令包括用于使指定數(shù)量的位可被訪問用于以后操作的指令。12.如權(quán)利要求9所述的制品,其中用于選出所述數(shù)量的位的指令包括用于使指定數(shù)量的位比讀出相同數(shù)量的位更快地可被訪問用于以后操作的指令。13.如權(quán)利要求9所述的制品,其中所述預(yù)定數(shù)量的位包括被用作所述數(shù)據(jù)結(jié)構(gòu)的索引的最大數(shù)量的位。14.如權(quán)利要求9所述的制品,其中所述有效性指示符指示所述解碼值是否有效。15.如權(quán)利要求9所述的制品,其中用于至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符的數(shù)據(jù)結(jié)構(gòu)包括一個存儲器區(qū)域,對于可由所述預(yù)定數(shù)量的位形成的每種位組合,所述存儲器區(qū)域至少包含該位組合的解碼值和有效性指示符。16.如權(quán)利要求10所述的制品,其中面向前綴的解碼方法還包括一種在解碼期間采用可變長度碼前綴屬性的可變長度解碼的方法。17.一種用于解碼位流中的可變長度前綴碼的系統(tǒng),所述系統(tǒng)包括從所述位流中讀出足以存儲所述系統(tǒng)的最長可變長度碼的多個位的邏輯;從讀出的位中選出預(yù)定數(shù)量的位的邏輯;以及根據(jù)所選出的位的實際值,從一個數(shù)據(jù)結(jié)構(gòu)中至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符的邏輯。18.如權(quán)利要求17所述的系統(tǒng),還包括當(dāng)解碼值被指示為無效時,向一開始從所述位流中讀出的位應(yīng)用面向前綴的解碼方法的邏輯。19.如權(quán)利要求17所述的系統(tǒng),其中讀出多個位的邏輯包括使指定數(shù)量的位可被訪問用于以后操作的邏輯。20.如權(quán)利要求17所述的系統(tǒng),其中選出所述數(shù)量的位的邏輯包括使指定數(shù)量的位比讀出相同數(shù)量的位的邏輯更快地可被訪問用于以后操作的邏輯。21.如權(quán)利要求17所述的系統(tǒng),其中所述預(yù)定數(shù)量的位包括被用作所述數(shù)據(jù)結(jié)構(gòu)的索引的最大數(shù)量的位。22.如權(quán)利要求17所述的系統(tǒng),其中所述有效性指示符指示所述解碼值是否有效。23.如權(quán)利要求17所述的系統(tǒng),其中用于至少獲得與可變長度碼相關(guān)聯(lián)的解碼值和有效性指示符的數(shù)據(jù)結(jié)構(gòu)包括一個存儲器區(qū)域,對于可由所述預(yù)定數(shù)量的位形成的每種位組合,所述存儲器區(qū)域至少包含該位組合的解碼值和有效性指示符。24.如權(quán)利要求18所述的系統(tǒng),其中面向前綴的解碼方法還包括一種在解碼期間采用可變長度碼前綴屬性的可變長度解碼的方法。全文摘要公開的方法可以與任何面向前綴的解碼方法一起被用來當(dāng)可以確定具有相對短前綴的最常使用碼的子集時,實現(xiàn)對可變長度碼的更快解碼。本發(fā)明的實施方案從位流中讀出不少于碼的最大可能長度的多個位。然后,選出預(yù)定數(shù)量的位并用作一個數(shù)據(jù)結(jié)構(gòu)的索引,該數(shù)據(jù)結(jié)構(gòu)包含至少解碼值和有效性指示符,還有其他預(yù)解碼數(shù)據(jù),即前綴類型和長度、一組碼的最大碼長、實際碼長、將返回給位流的位數(shù)等。有效性指示符用來確定是繼續(xù)解碼操作,還是從所述數(shù)據(jù)結(jié)構(gòu)中獲得有效解碼值并將多余的位返回給碼流。如果解碼值被指示為無效的,則解碼操作將繼續(xù),并且一種估計碼前綴的長度以及對應(yīng)于所估計長度的有效位數(shù)的解碼方法被應(yīng)用于一開始從位流中讀出的位。文檔編號H03M7/42GK1839550SQ03826790公開日2006年9月27日申請日期2003年7月15日優(yōu)先權(quán)日2003年7月15日發(fā)明者瑟蓋·尼古拉維奇·澤爾托夫,斯坦尼斯拉夫·維克多洛維奇·布拉塔諾夫申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1