TWI420830B - 動態解碼查詢表之產生方法與應用其之電子裝置 - Google Patents
動態解碼查詢表之產生方法與應用其之電子裝置 Download PDFInfo
- Publication number
- TWI420830B TWI420830B TW099147345A TW99147345A TWI420830B TW I420830 B TWI420830 B TW I420830B TW 099147345 A TW099147345 A TW 099147345A TW 99147345 A TW99147345 A TW 99147345A TW I420830 B TWI420830 B TW I420830B
- Authority
- TW
- Taiwan
- Prior art keywords
- decoding
- vlc
- lookup table
- adaptive
- processing unit
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/405—Tree adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4056—Coding table selection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Description
本揭露是有關於一種動態產生解碼查詢表之方法與應用其之電子裝置。
隨著視訊多媒體與通訊技術的進步,多媒體通訊應用不斷推陳出新。一般而言,多媒體通訊應用要傳輸與儲存龐大資訊量,所以,其應用資料壓縮技術。資料壓縮技術可區分成無失真壓縮與失真壓縮。可變長度編碼(variable length coding,VLC)屬常見的無失真壓縮。可變長度編碼是將出現機率較低之符號以較多位元來編碼,而出現機率較高之符號則採用較少位元來編碼,故能在編碼同時也達到資料壓縮的效果。近年來可變長度編碼已廣泛使用於各種視訊編解碼標準中。
由於現有大多數編碼標準較為複雜,且大多數嵌入式系統通常是利用低階處理單元,因此在可攜式裝置(Mobile Device)上搭配多媒體硬體加速器以實現多種編解碼標準,甚至是能編解碼之特殊應用積體電路(ASIC),因此許多可變長度編解碼演算法與其硬體架構被提出。然而記憶體對於ASIC而言是相當重要的,因為其會影響電路面積與電路成本。
在嵌入式處理單元(Embedded Processor)技術日漸成熟的情況下,各種編解碼標準可以軟體方式來達到即時(Real-time)處理,無須用其專用ASIC來實現編解碼標準。SoC(系統單晶片)能解碼多種編解碼標準,因為SoC是可程式化的。嵌入式處理單元記憶體(Embedded Processor Memory)是有限,且其由各個應用程式所共用。假若固定的VLC解碼查詢表(Decoder Lookup Table)會使得系統效率降低。因為各種嵌入式系統平台的記憶體並非針對特定功能而設計,所以記憶體可用空間會因為不同平台及不同執行程式組合而有所不同。如此VLC解碼查詢表會面臨記憶體配置的問題,另外,於嵌入式系統中,記憶體由多個程式共用,因此在配置VLC解碼查詢表所用記憶體的時候,並非只考量單一程式之效能。以VLC解碼來說,假設有兩種解碼方式,其中A解碼方式需要20KB的記憶空間,其解碼速度為每查詢一個字符(symbol)需要2次的查表;而B解碼方式需要30KB的記憶體空間,其解碼速度為每查詢一個字符需要1.8次的查表。假若系統只剩32KB記憶體空間,其最後的選擇並不一定為B解碼方式,因為在此嵌入式系統上,未來可能尚有其他應用程式需要執行,應用程式的執行要使用到記憶體。故而,對於嵌入式系統而言,如何善用有限的記憶體資源是一個課題。
更甚者,於現有產生解碼查詢表的方式中,一旦選定了要用哪種方式來產生解碼查詢表,就會固定用這個方式來產生解碼查詢表。這樣的話,無法因應系統效能/系統資源的動態變動,而產生適當的解碼查詢表。
本揭露有關於一種動態產生解碼查詢表之方法與應用其之可攜式電子裝置,其根據系統記憶體資源、系統目前工作負荷(work loading)與目標解碼率,來動態產生適合系統環境的解碼查詢表(或簡稱為查詢表)。
本揭露之一示範性實施例揭露一種產生解碼查詢表之方法,包括:接收一可變長度編碼(variable length coding,VLC)表;以及根據一目標解碼速度與一可用系統記憶體資源,從該VLC表動態地建立一適應性解碼查詢表。
本揭露之另一示範性實施例揭露一種可攜式電子裝置,包括:一記憶體,儲存一可變長度編碼(variable length coding,VLC)表;以及一處理單元,根據一目標解碼速度與一可用系統記憶體資源,該處理單元從該VLC表動態地建立一適應性解碼查詢表。
為了對本揭露有更佳的瞭解,下文特舉實施例,並配合所附圖式,作詳細說明如下:
本揭露實施例提出一個動態產生VLC解碼查詢表(VLC Decoder Lookup Table)之方法,其根據目前解碼速度及/或可用記憶體空間及/或系統工作負荷(work loading),以動態產生適應性(Adaptive)VLC解碼查詢表。於本揭露實施例中,預估VLC表(VLC Table)的可能多種演算法所對應的多個VLC解碼查詢表之指數數目與解碼率,再考量記憶體資源與系統效能,動態產生適合系統環境之VLC解碼查詢表。
嵌入式系統在執行的階段,其可用記憶體空間及/或系統工作負荷是變動的。於本揭露實施例中,動態產生適應系統環境(即動態適應系統可用記憶體大小與系統工作負荷)之查詢表(Lookup Table,LUT),且可能預留記憶體空間給其他應用軟體使用。於本揭露實施例中,依系統的可用記憶體空間及/或系統工作負荷及/或目標解碼率,自動且動態地建立LUT以進行解碼。
於解VLC碼時,採用逐輪(round)查詢,每經一輪查詢就會越靠近輸入碼所對應的句法元素(Syntax Element,SE),即字符(Symbol)。常用的建查詢表演算法可分兩大類:固定長度(Fixed Length,FL)解碼演算法與前導位元(Leading Bit)解碼演算法。在解VLC碼期間,每輪查詢可使用同一種查詢演算法,也可混合使用多種查詢演算法。
固定長度演算法的長度可能變動;前導位元法的前導位元也可能機動地為0(稱為leading bit 0)或1(稱為leading bit 1)。為了簡化說明起見,底下以固定長度查詢法為例,但本實施例也可以用於建立解碼查詢表之其他演算法。VLC表可是複數個;若VLC表係複數個,將會取得複數個相對應之LUT表。於不同回合對VLC表做完所有輪查詢,所得之LUT表可放置於同一個記憶體起始位置。若產生複數個LUT表的話,則第一個LUT表,可放置於記憶體的同一個起始位址,其餘LUT表可依順序放置於第一個LUT表之記憶體位置之後。
VLC表含有多個有效VLC碼(valid VLC code,簡稱為VLC碼)。解VLC碼需要一個對應的VLC解碼查詢表。不同的VLC表需要不同查詢表,但不同的VLC表可共用相同程序,如果這些查詢表是由同一個建表演算法產生即可。
表1顯示一個經過排序(Sorting)後的VLC表(含有十六個有效VLC碼)。
表2(a)~表2(f)分別顯示為用六種固定長度演算法分別對表1進行第一次(亦可稱為第1輪)建查詢表後,原VLC表的變化。灰色背景字表示在第一次查詢後會被消耗掉的位元;而無背景字表示新產生的次VLC表。F代表固定長度解碼法採用的長度,也是用於建立其對應之查詢表所用的位元數。
建查詢表時採用的演算法會成為之後解碼所用的查詢演算法。如果於第一輪建查詢表用固定長度N的演算法的話,之後解碼時將會用固定長度N的演算法。同理,於第二輪建查詢表用固定長度M的演算法的話,之後解碼時將會用固定長度M的演算法。依此而類推。
表3(a)~表3(d)顯示用前四種查詢法進行第一次查詢時所需的部份查詢表。當欄位“Done”欄為1時,表示可解出SE值,且其值顯示於欄位“Data”中;否則,進行下一次查詢,而其起始指數顯示於欄位“Data”中。
在一輪建表後,被消耗掉的位元(亦即,被用於建立查詢表的位元,如表2(a)~表2(f)中之灰色背景字)會被移除。所以,經一輪建表後就會產生零個或多個次VLC表。如果次VLC表的數目為零時,表示建表完成;否則對那些次VLC表做下一輪的建表。表2(a)~表2(f)經第一輪建表後所產生的次VLC表分別如底下表4(a)~表4(f)所示。
表4(f)不存在任何次VLC表,代表,固定長度且F=6演算法用一次建表即可建立好LUT。F=1~5的固定長度法則需要下一輪的建表。
在Code欄位中之空白區域表示這些碼在第一輪建表後被釋出;換言之,它們都可以在第一輪查詢後完成解碼,所以,它們不屬於任何一個次VLC表,故其沒有用填充顏色(網底)表示,且其字型為正常。各別次VLC表(sub VLC table)以不同填充顏色(網底),且以不同字型表示之分隔開。以表4(b)為例,由上而下的順序,粗體字且有填充顏色者代表第一個次VLC表(包括SE=11與SE=13),斜體字且無填充顏色者代表第二個次VLC表(包括SE=14,SE=4,SE=8,SE=0與SE=6),粗體字且有填充顏色者代表第三個次VLC表(包括SE=9,SE=3,SE=5,SE=10,SE=12,SE=1,SE=2與SE=7)。一個VLC表或是一個次VLC表內不能含有相同的碼(code),經過第一輪建表後產生的次VLC表的數目乃依其使用的演算法與原始VLC表而定。如果次VLC表數目為零,如表4(f),表示LUT已建好;否則,依所有之次VLC表繼續建立給下一輪查詢所需的LUT表。
在位元流(bitstream)內,某一個有效碼的位元之後可能是另一個有效碼,也可能是其它的位元組合。固定長度解碼法可查詢的位元數N等於其固定長度F(N=F)。假設固定長度為F,則其試著解N=F個位元。如果N等於或大於有效碼之碼長,表示可解出其碼;否則,其剩餘的碼成為下一次查詢的有效碼。以表2(b)為例,假設F=2,F小於碼“001”與“010”的碼長,所以無法解出其碼。而其剩餘的碼為分別為“1”與“0”,留待下一次查詢來解得。如有效碼“10”的碼長為2,因此F=2可解得其碼為SE=15,故不需另一次的查詢。
固定長度法之每次查詢所需的指數(Index)的數目比如但不受限於為2F
,指數數目越多表示其所需的硬體資源越大。以上表2(a)~表2(f)與表3(a)~表3(d)為例做說明如下。當F=1時,指數分別為0與1,都比有效碼長度小,故無法解得任何碼。當F=2時,指數為0,1,2,3,指數2可解得SE=15。當F=3時,指數為0~7,其中指數0,1,2,4,5可解出SE=11,13,14,15與15。當F=4時,指數為0~15,其中0,1,2,3,4,5,8,9,10,11,15可解出SE=11,11,13,13,14,14,15,15,15,15,7。每次查詢長度(F)越大,可查出越多的碼,但也需要越大的查詢表。例如,表2與表3中,第一次查詢的F值若分別為1、2、3、4,則可分別查到0、1、4、5個碼,但它的查詢表分別需要2、4、8、16個指數。至於第二次查詢能解出多少碼,需要幾個查詢口(entry),則視剩餘碼與查詢長度而定。
假設第1輪產生查詢表後,選擇表2(a)來繼續建VLC查詢表的話,則第2輪產生查詢表後,可能的次VLC表將如底下表5(a)~表5(t)所示。表5中的F=N/M(N與M為正整數)表示表2(a)的第一個次VLC表採固定長度N建查詢表而第二個次VLC表採固定長度M建查詢表。
如上述,第一輪建表可產生六種的次VLC表組合,從這六種組合中的第一個組合進行第二輪建表又可以產生二十個次VLC表組合。由這些個次VLC表組合,本實施例可建立適合系統要求的查詢表。
假設第2輪查詢後,選擇表5(a)來繼續建VLC查詢表的話,則第3輪產生VLC查詢表後,可能的次VLC表將如底下表6(a)~表6(l)所示。表6中的F=L/N/M(L、N與M為正整數)表示表5(a)的第一個次VLC表採固定長度L建查詢表,第二個次VLC表採固定長度N建查詢表,而第三個次VLC表採固定長度M建查詢表。
假設第3輪查詢後,選擇表6(a)來繼續建VLC查詢表的話,則第4輪產生VLC查詢表後,可能的次VLC表將如底下表7(a)~表7(l)所示。表7中的F=L/N/M(L、N與M為正整數)表示表6(a)的第一個次VLC表採固定長度L建查詢表,第二個次VLC表採固定長度N建查詢表,而第三個次VLC表採固定長度M建查詢表。
假設第4輪查詢後,選擇表7(a)來繼續建VLC查詢表的話,則第5輪產生VLC查詢表後,可能的次VLC表將如底下表8(a)~表8(b)所示。假設第5輪產生VLC查詢表後,選擇表8(a)來繼續建VLC查詢表的話,則第6輪產生查詢表後,得到表8(c),其代表沒有次VLC表。並非所有適用於表1之VLC表的查詢表都需要經過多輪的建表程序。至於需要幾輪來完成建表則視原始VLC表及使用的建表演算法而定。例如:第一輪建表時若採用固定長度6,則它需1次建表程序,請參考表4(f)。
另外,能夠解同一個VLC表的查詢表有多種。如上述,第一輪建查詢表就有舉例出六種,如表2(a)~表2(f)。,事實上,如果採用前導位元法或混合多種演算法的話,則本實施例將可得到更多種的可能建查詢表的方式。由於有多種查詢表可供選擇,本實施例能判斷用哪一種查詢表能符合系統環境(系統目前可用資源)與目標解碼速度,並自動且動態地建立符合系統需要的查詢表。
本實施例會動態產生適合系統環境的查詢表,因為系統能用的記憶體空間及/或系統工作負荷會隨著應用軟體而變動,也會隨著同時執行之應用軟體的數目而增減。
第1圖顯示為本實施例之操作流程圖。於步驟110中,接收原始的VLC表。於步驟120中,將原始VLC表排序成新的VLC表,比如,將原始VLC表的碼值(Code Value)由小而大排序成新的VLC表(簡稱為VLC表,表1是已經排序完成的VLC表)。於步驟130中,根據系統記憶體的資源(比如,查詢表的最大指數上限I1
)與目標查表速度(每次查詢之最低解碼率D1
),執行取捨函式以動態地建立系統適應性(adaptive)查詢表。比如,於步驟130中,根據系統可用記憶體資源及/或目標解碼速度及/或系統工作負荷,動態產生取捨函式所需要的取捨參數,然後估算各種建查詢表演算法所產生的查詢表大小以及其可能的解碼速度,代入至取捨函式中以求得各種建查詢表演算法的各別分數(T),然後比如但不受限於選擇分數最小或最高者之建查詢表演算法來動態建立適應性查詢表。至於取最小還是取最高分數可因取捨函式不同而異。
於本實施例中,根據兩個參數:一、代表目前可用的最大記憶體資源指數I1
與目標查詢解碼率(每次查詢之最低目標解碼率D1
),來動態產生適合於系統需求的查詢表。此外,如果系統目前工作負荷有所變動的話,則可能會影響到目標查詢解碼率D1
。
底下將舉例說明,本實施例如何建立適應性查詢表。請參考第2圖。於步驟202中,計算取捨參數K值,K={(I1
*2(-LCL)
)/D1
},其中LCL為VLC表或次VLC表中其最長碼之位元數。由K值的定義可知,當系統可使用記憶體大小改變時,I1
會改變,故K值隨之改變;另外,當系統工作負荷改變時,D1
會改變,故K值隨之改變。所以,由此亦可推論出,於本實施例中,當系統可使用記憶體大小改變及/或系統工作負荷改變時,由於K值隨之改變,所動態建立的VLC解碼查詢表的內容及/或大小(位元長度)亦隨之改變。
於步驟204中,找出排序後VLC表內所包含的所有次VLC表(表示為V[g])與這些次VLC表的總數G。於第一次(第1輪)建查詢表時,排序後VLC表被視為次VLC表,所以,於第一次(第1輪)建查詢表時,次VLC表(表示為V[g])之總數G為1。為了方便描述起見,底下所謂的次VLC表包括了排序後VLC表。
經過第一次建查詢表後,已經被建立成查詢表的位元要被移除,因此可能不會留下任何剩餘碼或者會留下一些剩餘碼。如果沒有任何剩餘碼,表示完成建立查詢表;否則形成一些較小的VLC表,此些新的VLC表稱為次VLC表。每個次VLC表各自獨立,且須分別對各次VLC表建立查詢表。
於步驟206中,判斷G是否為0;如果是,則流程結束,否則流程接至步驟208。於步驟208中,將g設為0。詳細地說,由g=0起,對所有的次VLC表V[g]執行後續流程。接著,於步驟210中,統計可使用於對次VLC表V[g]建立查詢表的演算法之總數A。以上述說明為例,
假設排序後VLC表如表1所示,經第一次查詢後,假設選FL的話,則比如但不受限於,可能共有6種查詢法可用(F=1~F=6),也就是A=6。假設選用FL,F=1建查詢表法的話,則第一次所建立的查詢表如表4(a)所示,其包括2個各自獨立的次VLC表(G=2)。
為一個VLC表或次VLC表之VLC碼建查詢表的演算法有好幾種。以固定長度解碼法而言,其可能的演算法總數有關於固定長度F值之可能範圍。以表1的VLC表而論,其最長的碼為6位元,因此,可能的F值範圍為1~6之間,所以,共有6種建查詢表法。此外,如果VLC表的最長碼為8位元,因此,可能的F值範圍為1~8之間,所以,共有8種建查詢表法。為方便說明起見,建查詢表演算法以數字代表之,加以區別,以利後方的說明。以上例而言,(FL,F=1)~(FL,F=6)可分別稱之為查詢表演算法0~查詢表演算法5。
接著,於步驟212內依次VLC表內的各碼的碼長估算其出現或然率。在此,先解釋出現或然率與解碼率。
解碼率指預期能解出的碼之數目佔總碼數的比例,其為基於下面兩個假設所得的預估值:1.位元串中的VLC碼的數目為無窮多;2.等長的VLC碼的出現或然率一致。VLC碼是依據SE的出現或然率而產生的,或然率高的SE被賦與短碼,而或然率低的SE被賦與長碼。理論上,等長的碼應該有同樣的出現或然率。可是實際應用上,所有SE的出現或然率無法全部是等於1/2n
(n是為正整數,代表碼位元長度)。對解碼端而言,可能無法得知真正的出現或然率,所以只能依上述的第二種假設而估算。基於上述假設,可以估算一位元碼(n=1)之出現或然率為1/21
=0.5;二位元碼(n=2)之出現或然率為1/22
=0.25;三位元碼(n=3)之出現或然率為1/23
=0.125,依此類推。如果某次查詢可能解出一個一位元碼及兩個三位元碼,那麼該次查詢的解碼率為1*0.5+2*0.125=0.75。
於步驟214中,初始化q為0且初始化p為極大值。於步驟216中,令a=0。於步驟218中,計算建查詢表演算法a所需指數數目in
與其解碼率dn
。固定長度解碼之查詢法所需要的指數數目比如但不受限於為2的冪次方,而其冪次就是長度。例如,如果用固定長度為2(FL,F=2)來建查詢表,則指數數目就等於22
=4;如果用固定長度為6(FL,F=6)來建查詢表,那麼指數數目就等於26
=64。至於如何根據出現或然率來計算解碼率d已於上面解釋過。指數數目in
可視為有關於此出現或然率。
於步驟220中,令分數T=i'n
+K*d’n
,其中i'n
其in
/2(LCL)
,d’n
為1-dn
。於步驟222中,判斷T是否小於先前最小分數p。如果T小於p,於步驟224中,則令q=a且令p=T,亦即,於本實施例中,建查詢表演算法q可能被採用,因到目前為止其T值為最小,但當知本揭露並不受限於此。此外,於步驟214中,將p初始化成極大值後,之後假若有小於p的分數T,則p值就會被更新(p=T)。
於步驟226中,令a值加1,亦即評估下一個建查詢表的T值。於步驟228中,判斷a值是否大於A(亦即判斷所有可能的查詢法是否都已計算過其T值)。於步驟230中,選擇演算法q來建查詢表(比如但不受限於,演算法q之T值為最小)之一部份,並移除已用於建查詢表的位元(以表2(a)~表2(f)為例,灰色背景字會被移除)以產生次VLC表(如表4(a)~表4(f)中之次VLC表所示)。如此,即可建立V[g]之查詢表。接著,於步驟232中,令g=g+1,以重複上述步驟來建立V[g+1]之查詢表。於步驟234中,判斷g是否小於總數G。如果是,則尚未建立完所有的次VLC表的查詢表,流程回至步驟210;否則,流程回至步驟204。
表9(a)為原始VLC表。假設I1
=20,D1
=0.65,K=0.39,在此條件下,估算固定長度1~6的各別T值。T1
代表固定長度1的T值,T2
代表固定長度2的T值,依此而類推。對於表9(b)而言,i'1
與d’1
分別為0.03與1.00,所以,T1
=i'1
+K*d’1
=0.42。對於表9(c)而言,i'2
與d’2
分別為0.06與0.75,所以,T2
=i'2
+K*d’2
=0.36。對於表9(d)而言,i'3
與d’3
分別為0.13與0.38,所以,T3
=i'3
+K*d’3
=0.27。對於表9(e)而言,i'4
與d’4
分別為0.25與0.31,所以,T4
=i'4
+K*d’4
=0.37。對於表9(f)而言,i'5
與d’5
分別為0.50與0.03,所以,T5
=i'5
+K*d’5
=0.51。對於表9(g)而言,i'6
與d’6
分別為1.00與0.00,所以,T6
=i'6
+K*d’6
=1.00。T1
~T6
分別為0.42、0.36、0.27、0.37、0.51與1.00。由表9(a)~10(g)可觀察出T3
值為最小(0.27),故於本實施例,比如但不受限於,選用固定長度3的演算法來建立該輪的查詢表。
於第二實施例中,以前導位元(leading bit)演算法來建立查詢表。前導位元演算法的前導位元可能機動地為0或為1。當知,在解VLC碼的期間,每次查詢可使用同一種演算法,也可混合使用不同演算法。
如上述般,對於固定長度演算法,當決定用長度F來解碼時,比如但不受限於,可從位元流取出F個位元來查詢。然而,前導位元演算法能查詢的位元數目端看位元流中的等值之前導位元數目而定。於前導位元演算法,定出最長前導位元數M,以避免解到有效VLC碼的後續位元。假定在位元流中等值的前導位元的數目為L;又假定前導位元解碼法可查詢的位元數目為N;那麼,當解一個VLC碼時,如果L大於或等於M時,則令N=M;否則,令N=L+1。如果N等於或大於有效碼之碼長,表示可解出其碼;否則,其剩餘的碼成為下一次查詢的有效碼。前導位元可分前導0位元(leading bit 0,L0)與前導1位元(leading bit 1,L1)。
若以前導位元0與M=3為例,表1中的VLC碼“000”、“001”、“010”的L值分別為3、2、1,假定沒有後續位元。因此,N分別為3、3、2個位元。前二者等於對應的碼長,故可解得“000”與“001”之SE為11與13;而最後者小於對應的碼長,所以“010”的剩餘碼為“0”,成為下回查詢的有效碼。如表10(a)所示,灰色背景位元是以前導位元0與M=3演算法於第一輪查詢中可查詢的位元。而表10(b)為採用前導位元0與M=3演算法而建立的第一輪查詢表。
以前導位元1與M=4為例,表1中的VLC碼“1111”、“111011”、“111010”的L值等於4、3、3,假定沒有後續位元。因此,它們的N等於4,並可解出“1111”之SE=7;而“111011”與“111010”的剩餘碼11與10將分別成為下次查詢的有效碼。如表11(a)所示,灰色背景位元是以前導位元10與M=4演算法於第一輪查詢中可查詢的位元。而表11(b)為採用前導位元1與M=4演算法而建立的第一輪查詢表。
應用前導位元法時,每次建立查詢表所需的指數數目等於M+1。以表1之第一次建立查詢表為例,若用前導位元0且M=3時,指數為0~3(分別表示0~3個前導位元0),其中指數3與2於解碼時可解得SE分別為11與13(如表10(b)所示)。若用前導位元1且M=4時,指數為0~4(分別表示0~4個前導位元1),其中指數4與1於解碼時可解得SE分別為7與15(如表11(b)所示)。
前導位元解碼法亦可應用於第1圖與第2圖中,故其細節於其不重述。
於本揭露上述實施例中,比如,應用程式被新打開或被關閉,或者應用程式執行更大量運算的話,系統可用記憶體空間及/或系統工作負荷將有所變動,則動態產生查詢表。故而,此查詢表為適應性,能適應於系統目前可用記憶體空間及/或系統工作負荷及/或目標解碼速度而有所改變。
於本揭露上述實施例中,VLC解碼查詢表的內容及/或位元長度隨著系統可用記憶體資源的大小的改變而改變。比如但不受限於,系統新開應用程式導致可用記憶體資源變小或是系統關閉應用程式導致可用記憶體資源變大的話,本揭露上述實施例所動態產生的VLC解碼查詢表的內容及/或位元長度會之改變。
於本揭露上述實施例中,VLC解碼查詢表的內容及/或位元長度會隨著系統目前工作負荷的改變而改變。比如但不受限於,如果系統新開應用程式導致系統目前工作負荷變大或是系統關閉應用程式導致可用系統目前工作負荷變小,或者應用程式執行高負荷任務(比如但不受限於,應使用者需求,系統執行影音作業)導致系統目前工作負荷變大,或者應用程式執行低負荷任務(比如但不受限於,應使用者需求,系統執行文書作業)導致系統目前工作負荷變小,本揭露上述實施例所動態產生的VLC解碼查詢表的內容及/或位元長度會之改變。
於本揭露上述實施例中,針對相同原始VLC表,隨著系統可用記憶體資源的變動及/或系統工作負荷的變動,本揭露上述實施例會動態產生不同的內容及/或位元長度的VLC解碼查詢表。
於本揭露上述實施例中,在解碼一個字符的過程中,系統可用記憶體資源及/或系統工作負荷可能會有所變動,本揭露上述實施例動態產生不同的內容及/或位元長度的VLC解碼查詢表來進行解碼。也就是說,於解同一個symbol期間,本揭露上述實施例動態產生的不同VLC解碼查詢表。
此外,於本揭露上述實施例中,每一次查表可由同一個記憶體位址查起,這是因為,於建立VLC解碼查詢表時,可每次可從同一個記憶體位址填入所動態產生的VLC解碼查詢表,不論要填入的VLC解碼查詢表的內容及/或位元長度是否有所不同。
另外,雖然上述二個實施例以固定長度演算法與前導位元演算法為例說明,但當知本揭露並不受限於此,其他已知或未知的建LUT演算法皆在本揭露其他可能實施例之實施範圍內。
本揭露更另一實施例揭露一種可攜式電子裝置,接收一原始VLC表以動態產生解碼VLC查詢表。第3圖顯示電子裝置300之示意圖。可攜式電子裝置300包括:記憶體310與處理單元320。根據動態變化的目標解碼速度與動態變化的記憶體310之可用資源,處理單元320從原始表動態建立適應性解碼查詢表。處理單元320可實施上述實施例之任一,故其細節於此不重述。
另外,本揭露處理單元320可利用如處理單元、數位訊號處理單元、數位視訊處理單元實施,或是以可程式化的集積電路如微控制器、元件可程式邏輯閘陣列(FPGA,Field Programmable Gate Array)之類的電路來實現,其中例如以硬體描述(HDL,Hardware description language)來設計。
另外,本揭露上述之方法亦可以軟體程式來實現,如依據本揭露之方法之一例子的程式碼記錄在一記憶媒體之中,如記憶體如ROM、RAM及之類的媒體、或光學或磁性或其他記錄媒體,或是實現為韌體(firmware)。當運算裝置之處理單元,從記憶有依本揭露之方法之程式碼之記憶媒體讀取並執行,能實現依本揭露之方法。再者,本揭露之上述方法可以軟硬體結合之方式實現。
綜上所述,雖然本揭露已以實施例揭露如上,然其並非用以限定。本發明所屬技術領域中具有通常知識者,在不脫離本揭露精神和範圍內,當可作各種更動與潤飾。本案之保護範圍當視後附之申請專利範圍所界定者為準。
110~130‧‧‧步驟
202~234‧‧‧步驟
300‧‧‧可攜式電子裝置
310‧‧‧記憶體
320‧‧‧處理單元
第1圖顯示本揭露實施例之操作流程圖。
第2圖顯示本揭露實施例如何建立適應性查詢表。
第3圖顯示本揭露實施例之可攜式電子裝置之示意圖。
110~130...步驟
Claims (22)
- 一種產生解碼查詢表之方法,包括:接收一可變長度編碼(variable length coding,VLC)表;以及根據一目標解碼速度與一可用系統記憶體資源,從該VLC表動態地建立一適應性解碼查詢表;其中,動態地建立該適應性解碼查詢表之該步驟包括:根據該目標解碼速度與該可用系統記憶體資源,設定一取捨參數;找出一排序後VLC表內所包含的所有次VLC表;計算所有可用於對該第一次VLC表建表的複數建表演算法之一各別指數數目與一各別解碼率;根據該取捨參數、該些建表演算法之該各別指數數目與該各別解碼率,從該些建表演算法中選擇其中之一來建立該適應性解碼查詢表之一部份;以及對該些次VLC表重複上述計算步驟與上述選擇步驟,以建立該適應性解碼查詢表。
- 如申請專利範圍第1項所述之方法,其中,建立該適應性解碼查詢表之該步驟包括:回應於該目標解碼速度之變動,重新建立該適應性解碼查詢表之內容。
- 如申請專利範圍第1項所述之方法,其中,建立該適應性解碼查詢表之該步驟包括:回應於該目標解碼速度之變動,重新建立該適應性解 碼查詢表之位元長度。
- 如申請專利範圍第1項所述之方法,其中,建立該適應性解碼查詢表之該步驟包括:回應於該可用系統記憶體資源之變動,重新建立該適應性解碼查詢表之內容。
- 如申請專利範圍第1項所述之方法,其中,建立該適應性解碼查詢表之該步驟包括:回應於該可用系統記憶體資源之變動,重新建立該適應性解碼查詢表之位元長度。
- 如申請專利範圍第1項所述之方法,其中,於解碼一待解碼資料過程中,如果該目標解碼速度及/或該可用系統記憶體資源之有所變動的話,動態建立該適應性解碼查詢表。
- 如申請專利範圍第1項所述之方法,其中,根據該第一次VLC表之一出現或然率來計算該些建表演算法之各別解碼率。
- 如申請專利範圍第1項所述之方法,其中,針對該VLC表中之一相同字符,動態產生不同之該適應性解碼查詢表以解碼之。
- 如申請專利範圍第1項所述之方法,其中,對該些次VLC表重複上述計算步驟與上述選擇步驟,直至次VLC表的個數為零。
- 如申請專利範圍第1項所述之方法,其中,該VLC表為複數個。
- 如申請專利範圍第1項所述之方法,其中,於不 同回合所得之該適應性解碼查詢表儲存於一記憶體之相同起始位址。
- 一種可攜式電子裝置,包括:一記憶體,儲存一可變長度編碼(variable length coding,VLC)表;以及一處理單元,根據一目標解碼速度與一可用系統記憶體資源,該處理單元從該VLC表動態地建立一適應性解碼查詢表;其中,根據該目標解碼速度與該可用系統記憶體資源,該處理單元設定一取捨參數;該處理單元找出一排序後VLC表內所包含的所有次VLC表;該處理單元計算所有可用於對該第一次VLC表建表的複數建表演算法之一各別指數數目與一各別解碼率;根據該取捨參數、該些建表演算法之該各別指數數目與該各別解碼率,該處理單元從該些建表演算法中選擇其中之一來建立該適應性解碼查詢表之一部份;以及該處理單元對該些次VLC表重複執行上述計算操作與上述選擇操作,以建立該適應性解碼查詢表。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,回應於該目標解碼速度之變動,該處理單元重新建立該適應性解碼查詢表之內容。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,回應於該目標解碼速度之變動,該處理單元重新建立該適應性解碼查詢表之位元長度。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,回應於該可用系統記憶體資源之變動,該處理單元重新建立該適應性解碼查詢表之內容。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,回應於該可用系統記憶體資源之變動,該處理單元重新建立該適應性解碼查詢表之位元長度。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,於解碼一待解碼資料過程中,如果該目標解碼速度及/或該可用系統記憶體資源之有所變動的話,該處理單元動態建立該適應性解碼查詢表。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,該處理單元根據該第一次VLC表之一出現或然率來計算該些建表演算法之各別解碼率。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,針對該可變長度編碼表中之一相同字符,以動態產生之不同該適應性解碼查詢表解碼之。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,該處理單元對該些次VLC表重複執行上述計算操作與上述選擇操作,直至該次VLC表的個數為零。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,該VLC表為複數個。
- 如申請專利範圍第12項所述之可攜式電子裝置,其中,於不同回合所得之該適應性解碼查詢表儲存於該記憶體之一相同起始位址。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW099147345A TWI420830B (zh) | 2010-12-31 | 2010-12-31 | 動態解碼查詢表之產生方法與應用其之電子裝置 |
US13/218,973 US8599049B2 (en) | 2010-12-31 | 2011-08-26 | Dynamic decoding lookup table generation method and electronic device applying the same |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW099147345A TWI420830B (zh) | 2010-12-31 | 2010-12-31 | 動態解碼查詢表之產生方法與應用其之電子裝置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201228248A TW201228248A (en) | 2012-07-01 |
TWI420830B true TWI420830B (zh) | 2013-12-21 |
Family
ID=46380283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW099147345A TWI420830B (zh) | 2010-12-31 | 2010-12-31 | 動態解碼查詢表之產生方法與應用其之電子裝置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8599049B2 (zh) |
TW (1) | TWI420830B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3342113B1 (en) | 2015-09-30 | 2021-02-24 | Hewlett-Packard Enterprise Development LP | Dynamic allocation of resources within network devices |
US11509328B2 (en) * | 2018-05-31 | 2022-11-22 | Microsoft Technology Licensing, Llc | Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets |
US11144286B2 (en) | 2019-01-14 | 2021-10-12 | Microsoft Technology Licensing, Llc | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200402940A (en) * | 2002-08-03 | 2004-02-16 | Samsung Electronics Co Ltd | Apparatus and method for decoding variable length code |
TW200825736A (en) * | 2006-12-08 | 2008-06-16 | Ind Tech Res Inst | Method and device for saving memory resources and computer-readable medium |
US20080204287A1 (en) * | 2006-05-19 | 2008-08-28 | Nvidia Corporation | Optimization of decoder memory usage for vlc tables |
TW200838157A (en) * | 2007-03-07 | 2008-09-16 | Ind Tech Res Inst | A variable length decoder and decoding method therefor |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5541595A (en) * | 1994-05-19 | 1996-07-30 | Matsushita Electric Corporation Of America | Variable length code decoder for simultaneous decoding the most significant bits and the least significant bits of a variable length code |
KR0170681B1 (ko) * | 1995-08-09 | 1999-03-20 | 김광호 | Rll코드 데이터를 위한 부호화 및 복호화장치 |
KR100408532B1 (ko) * | 1996-10-31 | 2004-01-24 | 삼성전자주식회사 | 데이타저장기기의prml코드생성방법 |
US6771824B1 (en) * | 1999-12-28 | 2004-08-03 | Lucent Technologies Inc. | Adaptive variable length decoding method |
US20060176960A1 (en) * | 2005-02-07 | 2006-08-10 | Paul Lu | Method and system for decoding variable length code (VLC) in a microprocessor |
NO328295B1 (no) | 2007-12-20 | 2010-01-25 | Tandberg Telecom As | VLC-fremgangsmate og -innretning |
US7777653B2 (en) | 2008-07-15 | 2010-08-17 | International Business Machines Corporation | Decoding variable-length code (VLC) bitstream information |
US7791509B2 (en) * | 2008-07-15 | 2010-09-07 | International Business Machines Corporation | Preprocessing variable-length code (VLC) bitstream information |
US8762602B2 (en) | 2008-07-22 | 2014-06-24 | International Business Machines Corporation | Variable-length code (VLC) bitstream parsing in a multi-core processor with buffer overlap regions |
TWI343192B (en) * | 2009-06-12 | 2011-06-01 | Ind Tech Res Inst | Decoding method |
-
2010
- 2010-12-31 TW TW099147345A patent/TWI420830B/zh active
-
2011
- 2011-08-26 US US13/218,973 patent/US8599049B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200402940A (en) * | 2002-08-03 | 2004-02-16 | Samsung Electronics Co Ltd | Apparatus and method for decoding variable length code |
US20080204287A1 (en) * | 2006-05-19 | 2008-08-28 | Nvidia Corporation | Optimization of decoder memory usage for vlc tables |
TW200825736A (en) * | 2006-12-08 | 2008-06-16 | Ind Tech Res Inst | Method and device for saving memory resources and computer-readable medium |
TW200838157A (en) * | 2007-03-07 | 2008-09-16 | Ind Tech Res Inst | A variable length decoder and decoding method therefor |
Non-Patent Citations (2)
Title |
---|
Seung Jun Lee; Jun Seek Song; Choong-Woong Lee, "Memoryconstrained high-order entropy coding by Huffman table sharing and memory allocation," Circuits and Systems, 1996., IEEE Asia Pacific Conference on , vol., no., pp.26,29, 18-21 Nov 1996 * |
Seung Jun Lee; Kyeong Ho Yang; Choong Woong Lee, "Optimal sharing of Huffman tables for memory-constrained variable length coding of multiple sources," Electronics Letters , vol. 31, no.19, pp.1657,, 14 Sep 1995 * |
Also Published As
Publication number | Publication date |
---|---|
US8599049B2 (en) | 2013-12-03 |
US20120169518A1 (en) | 2012-07-05 |
TW201228248A (en) | 2012-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI420830B (zh) | 動態解碼查詢表之產生方法與應用其之電子裝置 | |
US9223765B1 (en) | Encoding and decoding data using context model grouping | |
CN107483059B (zh) | 一种基于动态霍夫曼树的多路数据编解码方法及装置 | |
KR101725223B1 (ko) | 저장 장치에서의 데이터 압축 방법 | |
TWI360956B (en) | Cabac decoding apparatus and decoding method there | |
WO2009009574A2 (en) | Blocking for combinatorial coding/decoding for electrical computers and digital data processing systems | |
TW201031128A (en) | Adaptive canonical huffman decoder and method thereof and video decoder | |
RU2006125719A (ru) | Способ и устройство перекодировки n-битных слов в м-битные слова, где м меньше n | |
CN114900193A (zh) | 适应性霍夫曼编码***及方法 | |
US10110896B2 (en) | Adaptive motion JPEG encoding method and system | |
CN103546161A (zh) | 基于二进制位处理的无损压缩方法 | |
CN110868223A (zh) | 一种哈夫曼编码的数值运算实现方法及电路 | |
CN114222129A (zh) | 图像压缩编码方法、装置、计算机设备和存储介质 | |
CN112514397A (zh) | 点云的编解码方法和装置 | |
WO2024125558A1 (zh) | 基于预测树的点云几何编码、解码方法及设备 | |
TWI505717B (zh) | 彩色影像之接合純量嵌入圖形寫碼 | |
CN110191341B (zh) | 一种深度数据的编码方法和解码方法 | |
US10559093B2 (en) | Selecting encoding options | |
CN110808742A (zh) | 一种适用于5g ldpc码的高效译码器架构 | |
US9787323B1 (en) | Huffman tree decompression | |
WO2012142130A1 (en) | Encoding digital assets as an image | |
Burger et al. | Color quantization | |
CN111181568A (zh) | 数据压缩装置及方法、数据解压装置及方法 | |
Matos et al. | Lossy-to-lossless compression of biomedical images based on image decomposition | |
WO2015188342A1 (zh) | 基于三维调色板的图像编码方法、装置以及图像处理设备 |