TWI397268B - 解碼用的熵處理器 - Google Patents
解碼用的熵處理器 Download PDFInfo
- Publication number
- TWI397268B TWI397268B TW096134466A TW96134466A TWI397268B TW I397268 B TWI397268 B TW I397268B TW 096134466 A TW096134466 A TW 096134466A TW 96134466 A TW96134466 A TW 96134466A TW I397268 B TWI397268 B TW I397268B
- Authority
- TW
- Taiwan
- Prior art keywords
- bits
- address
- value
- variable length
- sequence
- Prior art date
Links
- 238000000034 method Methods 0.000 claims description 141
- 230000008569 process Effects 0.000 claims description 77
- 238000012545 processing Methods 0.000 claims description 26
- 239000000284 extract Substances 0.000 claims description 3
- 230000004044 response Effects 0.000 claims 1
- 239000013598 vector Substances 0.000 description 16
- 101000777301 Homo sapiens Uteroglobin Proteins 0.000 description 10
- 102100031083 Uteroglobin Human genes 0.000 description 10
- 241001442055 Vipera berus Species 0.000 description 10
- 230000003044 adaptive effect Effects 0.000 description 7
- 238000003491 array Methods 0.000 description 6
- 235000012431 wafers Nutrition 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 101100021996 Arabidopsis thaliana CYP97C1 gene Proteins 0.000 description 2
- 101100510695 Arabidopsis thaliana LUT2 gene Proteins 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Description
本申請案主張於2006年9月15日提出申請之臨時美國專利申請案第60/825,899號之優先權,所述專利申請案所揭露之內容以引用方式併入本文中。
本揭露案大體而言是關於資料處理之領域。更特定言之,本揭露案是關於用於執行熵處理之方法以及裝置。
查表(lookup table)通常用於對諸如霍夫曼可變長度碼(VLC)之VLC進行解碼。並行解碼器可使解碼過程加速,因為並行解碼器可在每一循環中解碼若干個位元。然而,由於霍夫曼可變長度碼具有可變之長度,故冗餘(redundant)節點儲存於查表中以使得能夠在每一循環中解碼多個位元。具有冗餘節點之查表未有效地使用記憶體。用於串行(serial)解碼器之查表在記憶體使用方面更有效,因為存在較少的冗餘節點。然而,串行解碼器比並行解碼器慢,因為串行解碼在每一循環中僅解碼一個位元。
所需要的為用以更有效地執行熵處理同時更有效地使用記憶體之方法。
用於處理可變長度碼之方法包含:確定第一位址;對來自至少一開始於第一位址之表之操作碼進行解碼;回應於操作碼中之每一者:接收位元之序列的部分,位元之序列包含第一可變長度碼;自第二表於當前位址接收S;清除位元之序列中的S個位元;接收對應於多個階段中之一階段之T;確定位元之序列中之T個位元的集合之值;自第二表於當前位址接收D;以及計算下一位址,下一位址為當前位址、D以及T個位元之集合之值的和;以及擷取下一操作碼,下一操作碼是自下一位址而擷取的;以及確定經解碼之語法元素。
本揭露案之至少一些實施例是關於用於熵處理之系統以及方法與系統。
以下描述以及圖式為說明性的且不被解釋為限制性的。描述眾多特定細節以提供對本揭露案之徹底理解。然而,在特定例子中,未描述熟知或習知的細節以避免使描述不清楚。對本揭露案中之一個或一實施例之參考可(但未必)為對同一實施例之參考;且,此等參考意謂至少一個。
在本說明書中對“一個實施例”或“一實施例”之參考意謂結合實施例描述之特定特徵、結構或特性包括於本揭露案之至少一個實施例中。短語“在一個實施例中”於本說明書中各個位置處之出現未必均指明為同一實施例,單獨或替代實施例亦不互相排除其他實施例。此外,描述各種特徵,其可能由一些實施例且不由其他實施例所展現。類似地,描述各種要求,其可能為對於一些實施例而非對於其他實施例之要求。
圖1說明熵處理器之一個實施例。
熵處理器100包括位元對準器111、執行引擎110、暫存器檔案114、控制先進先出(first in first out,FIFO)(CFIFO)116、資料FIFO(DFIFO)117、特殊FIFO(SFIFO)118、表位址產生器101、表記憶體102、指令解碼器103以及中央處理器單元(CPU)介面115。位元對準器111自輸入位元流120提取位元片(bit slice)。輸入位元流120包含表示可變長度碼的位元之序列。執行引擎110根據由執行引擎110處理之經解碼指令自輸入位元流120產生經解碼的語法元素(包括諸如經由振幅產生器104、游程產生器(run generator)105以及正負號產生器106產生振幅、游程以及正負號之離散餘弦變換(DCT)係數以及經由運動向量(MV)預測模組107產生的運動向量),且將經解碼之語法元素寫入至暫存器檔案114中之暫存器、CFIFO 116、DFIFO 117或SFIFO 118中之一者中。
表位址產生器101基於來自執行引擎110、暫存器檔案114以及指令解碼器103之輸出而產生下一表位址。表記憶體102包含用於該執行引擎110之指令(亦稱作操作碼(opcode))以及資料。自表記憶體102於表位址產生器101所產生之位址處擷取用於執行引擎110之下一指令。指令解碼器103解碼下一指令以由執行引擎110執行。
在一個實施例中,藉由改變表記憶體102之內容而執行熵處理器100之可程式化。由經由CPU介面115而連接至熵處理器100之CPU下載該表記憶體102。
在一個實施例中,將自該表記憶體102擷取之指令解碼為多個欄位以用於執行引擎110。自執行引擎110向位元對準器111提供欄位中之一些(諸如showbits(T)以及getbits(S)欄位)以提取待處理之位元之序列的下一部分。在一個實施例中,showbits欄位規定將自輸入位元流120獲得來決定表記憶體102中之下一位址的位元之數目,且getbits欄位規定自輸入位元流120清除之位元之數目。在一個實施例中,showbits欄位以及getbits欄位由指令解碼器103自表記憶體102讀出且經發送至執行引擎110。由執行引擎110將showbits欄位以及getbits欄位發送至位元對準器111。
在一個實施例中,暫存器檔案114包含通用暫存器112、專用暫存器113以及迴路計數暫存器111。專用暫存器113以及迴路(loop)計數暫存器111經設計以加速解碼過程且減少執行引擎與外部記憶體以及儲存記憶體之間的資料交流(traffic)量。
在一個實施例中,迴路計數暫存器111控制該執行引擎110執行用以解碼當前語法(current syntax)元素之解碼操作多少次。舉例而言,當在一巨集區塊中存在16個框內預測模式時,將迴路計數器設定為16且該執行引擎110執行“解碼框內(intra)預測模式”指令16次以自輸入位元流120獲得經解碼之語法元素。
在一個實施例中,執行引擎110包括前後(context)自適應(adaptive)二進位算術編碼(CABAC)模組108以及前後自適應可變長度編碼(CAVLC)模組109來加速CAVLC以及CABAC過程之處理,諸如H.264位元流解碼。CABAC模組108以及CAVLC模組109描述於“Draft ITU-T Recommendation and Final Draft International Standard of Joint Video Specification”(ITU-T Rec.H.264 | ISO/IEC 14496-10 AVC)中。在一個實施例中,CAVLC模組109以及CABAC模組108是與標準霍夫曼可變長度編碼(VLC)表共用表記憶體102。
CPU介面115自外部CPU接收命令以允許外部CPU讀取儲存於CFIFO 116中之經解碼的語法元素。在一個實施例中,熵處理器100可用於藉由載入不同資訊至表記憶體102中而根據多個視訊以及影像編碼標準來解碼位元流,所述標準為諸如H.264、動畫專家群(MPEG)2、MPEG4、動畫與電視工程師協會(SMPTE)421M(VC1)、H.263、聯合照片專家群(JPEG)。
圖2說明可變長度碼以及相對應之表記憶體之一個實施例。
霍夫曼表200包括表示一值3之可變長度碼0、表示一值0之可變長度碼11、表示一值1之可變長度碼101以及表示一值2的可變長度碼100。每一可變長度碼為關於對應值之位元序列。
在一個實施例中,表記憶體201儲存操作碼以及資料以控制熵處理器來根據相對應的可變長度碼來對輸入位元流進行解碼。在一個實施例中,組織該表記憶體201以平衡效能與碼密度。在一個實施例中,表記憶體201為單一表。在另一實施例中,表記憶體201包括一個以上之表。圖3B描述藉由使用表記憶體201中說明之表組織而進行的解碼過程。
在一個實施例中,對於指令之資料結構包括五個欄位:getbits欄位(S)、showbits欄位(T)、立即資料欄位(D)、操作碼欄位(O)以及目的地欄位(Dest)。T欄位指出使用來自輸入位元流之第一位元之多少位元來決定表中之下一位址。S欄位指出來自輸入位元流之第一位元之多少位元被自輸入位元流中清除。O欄位指出如何將D欄位轉譯為下一表位址或經解碼之值。
在一個實施例中,在解碼過程中使用操作碼ADV、LD0、LD1、LDT0、LDT1、LDT2、LDT3以及LDT4。ADV操作碼使用getbits欄位以及showbits欄位。具有值S之getbits欄位界定多少位元將被自位元流清除。同時,位元對準器輸出由來自在S個位元經清除之後的位元流之接下來T個位元所表示之值VAL。
表位址產生器使用D、VAL以及當前表位址以產生下一位址。舉例而言,若當前位址為Curr_Addr,則下一位址為Curr_Addr+D+VAL。下一操作開始處理緊隨上一經清除之位元的位元。如showbits欄位中所規定之T個位元未經清除且因此可用於下一操作。
在一個實施例中,VLC解碼過程以ADV操作碼而開始。ADV為用以分階段解碼VLC之中間步驟。在一個實施例中,ADV操作包括兩個連續步驟:flushbits(S)以及VAL=showbits(T)。此操作flushbits(S)是自輸入流清除S個位元;且此操作VAL=showbits(T)輸出由輸入位元流中在經清除之位元之後的前T個位元所界定之值。
第一ADV操作碼在getbits欄位中具有0且具有非零showbits欄位。無任何位元經清除,但位元對準器輸出規定的位元作為VAL。隨後之ADV操作碼具有非零getbits欄位以及非零showbits欄位。S個位元經清除,且位元對準器輸出T個位元作為VAL。在完成解碼過程之所有階段之後,使用其他操作碼以載入經解碼之語法元素。
使用LD0、LD1以自D欄位載入經解碼之語法元素。使用操作碼LDT0-4以自D欄位載入經解碼之語法元素且載入自位元流提取之正負號位元。
在一個實施例中,使用LD0以及LD1來產生經解碼之符號值。LD0 #d A包括以下操作:A=#d、flushbits(s)、階段=0以及執行完成。A可為Dest欄位中所界定之任一儲存裝置,諸如CFIFO、DFIFO、SFIFO或暫存器檔案中之暫存器。LD0將#d載入至由Dest欄位所規定之暫存器之較低的8個位元,自輸入位元流清除S個位元,將階段計數器重設(reset)為0且結束對當前LD0指令之執行。LD1 #d+256 A包括以下操作:A=#d+256、flushbits(s)、階段=0以及執行完成。LD1將256+#d載入至由Dest欄位所規定之暫存器之較低的9個位元,自輸入位元流清除S個位元,將階段計數器重設為0且結束對當前LD1指令之執行。在以處於[0,255]之範圍內之值而寫入至儲存裝置時使用LD0。在以處於[256,511]之範圍內之值而寫入至儲存裝置時使用LD1。
在一個實施例中,使用操作碼LDT0-4以在MPEG2解碼過程中產生游程以及層次(level)係數。將游程以及層次(LEV)壓縮至8位元之D欄位中。
LDT0 #d A包括以下操作,其中A為{游程,層次,正負號}。A可為Dest欄位中所界定之任一儲存裝置,諸如CFIFO、DFIFO、SFIFO或暫存器檔案中之暫存器。游程[5:0]=#d[7:2],層次[11:0]=#d[1:0],flushbits(s),正負號=getbits(1),階段=0以及結束LDT0之執行。游程(RUN)之值經指定為D之較高的6個位元。層次之值經指定為D之較低的2個位元。向該正負號指定該位元流之下一位元之值。將階段計數器重設為零。
LDT1 #d A包括以下操作,其中A為{游程,層次,正負號}。游程[4:0]=#d[7:3],層次[11:0]=#d[2:0],flushbits(s),正負號=getbits(1),階段=0以及LDT1指令執行完成。游程之值經指定為D之較高的5個位元。層次之值經指定為D之較低的3個位元。向正負號指定位元流之下一位元之值。將階段計數器重設為零。
LDT2 #d A包括以下操作,其中A為{游程,層次,正負號}。游程[3:0]=#d[7:4],層次[11:0]=#d[3:0],flushbits(s),正負號=getbits(1),階段=0以及執行完成。游程之值經指定為D之較高的4個位元。層次之值經指定為D之較低的4個位元。向正負號指定該位元流之下一位元之值。將階段計數器重設為零。
LDT3 #d A包括以下操作,其中A為{游程,層次,正負號}。游程[2:0]=#d[7:3],層次[11:0]=#d[4:0],flushbits(s),正負號=getbits(1),階段=0以及執行完成。游程之值經指定為D之較高的3個位元。層次之值經指定為D之較低的5個位元。向正負號指定該位元流之下一位元之值。將階段計數器重設為零。
LDT4 #d A包括以下操作,其中A為{游程,層次,正負號}。游程[2:0]=#d[7:3],層次[11:0]=#d[4:0],flushbits(s),正負號=getbits(1),階段=0以及執行完成。游程之值經指定為D之較高的3個位元。層次之值經指定為D之較低的5個位元。向正負號指定該位元流之下一位元之值。將階段計數器重設為零。
LDT4 #d A包括以下操作,其中A為{游程,層次,正負號}。游程[2:0]=#d[7:3],層次[11:0]=#d[4:0],flushbits(s),正負號=getbits(1),階段=0以及執行完成。游程之值經指定為D之較高的3個位元。層次之值經指定為D之較低的5個位元。向正負號指定該位元流之下一位元之值。將階段計數器重設為零。
將A儲存於Dest欄位中所規定之記憶體位置中。舉例而言,可將經解碼之語法元素儲存於CFIFO、DFIFO、SFIFO或暫存器檔案中。CFIFO經設計以儲存諸如運動向量、MBType、Ref idx之經解碼之語法元素。DFIFO經設計以儲存諸如多個變換係數之語法元素。SFIFO經設計以儲存自解碼過程導出之特殊值,諸如框內預測模式以及重建之運動向量(MV)。重建之MV可由視訊信號處理器(Video Signal Processor)使用以獲得各種參考像素資料。圖3A說明霍夫曼VLC之一個實施例。
霍夫曼VLC為可變長度碼之一般形式。在一個實施例中,熵處理器可以有效方式來解碼霍夫曼VLC。在一或多個階段中執行該解碼過程。每一階段可查找(look up)一或多個位元。在表之大小與階段之數目之間存在著一種折衷。在視訊編碼標準中,對於不同語法元素存在不同的霍夫曼表。為了獲得最佳碼密度以及解碼效能,需要在不同階段中使用不同的查找位元。
霍夫曼樹310為界定霍夫曼編碼演算法之一方式。在解碼過程開始時,存取節點303。擷取VLC之第一位元。若第一位元為1,則指標(pointer)轉移至節點307。若第一位元為0,則指標轉移至節點304且經解碼之語法值為“3”且解碼過程完成。在節點307處,擷取VLC之第二位元。若第二位元為1,則指標轉移至節點308且經解碼之語法值為“0”且解碼過程完成。若第二位元為0,則指標轉移至節點305。在節點305處,擷取VLC之第三位元。若第三位元為1,則指標轉移至節點309且經解碼之語法值為“1”且解碼過程完成。若第三位元為0,則指標轉移至節點306且經解碼之語法值為“2”且解碼過程完成。
圖3B說明一表記憶體之一個實施例以表示圖3A中所說明之霍夫曼VLC。
表300以及表301為用於霍夫曼樹310之兩種解碼方法之實例。表300使用兩個查找階段。第一階段使用2個查找位元且第二階段使用1個查找位元。表301使用三個查找階段,每一階段使用1個查找位元。兩個表之表大小均為7。表300具有更好的解碼效能,因為其僅需要3個循環來解碼3位元之VLC。使用兩個循環來在兩個階段中之每一者中解碼且使用一個循環來輸出結果。表301使用4個循環來解碼3位元之VLC。使用三個循環來在兩個階段中之每一者中解碼且使用一個循環來輸出結果。
對於表300,處理以位址0,表300之第一項開始。在解碼之第一階段於位址0處載入ADV操作碼。根據表300之第一項,S為0,T為2且D為1。自輸入位元流提取兩個位元。下一位址為當前位址(0)加D(1)加VAL。T之VAL視自輸入位元流提取之兩個位元而定可為0、1、2或3。
若VAL為0,則自位址1載入LD0操作碼,且根據位址1處之D欄位,經解碼之語法值為3。此結果對應於霍夫曼樹310之節點304。若VAL為1,則根據位址2處之D欄位,結果為3。此結果亦對應於節點304。若兩個位元中之第一者為0,則僅藉由一個位元來完成VLC且隨後位元為下一語法元素之部分。因此,第二位元在確定當前經解碼之語法元素之值中不起作用。
若VAL為3,則在解碼之第二階段於位址4處載入LD0操作碼。根據位址4之D值,經解碼之語法值為0。此結果對應於霍夫曼樹310之節點308。
若VAL為2,則在解碼之第二階段於位址3處載入ADV操作碼。S為1,T為2且D為2。清除兩個位元。T之VAL視自進入之位元流所提取之位元而定為0或1。若VAL為0,則自位址5處之D欄位載入的結果為2。此結果亦對應於霍夫曼樹310之節點306。若VAL為1,則自位址6處之D欄位載入的結果為1。此結果亦對應於霍夫曼樹310之節點309。
圖3C說明一表記憶體之一個實施例以表示圖3A中所說明之霍夫曼VLC。
對於表301,處理以位址0,表301之第一項開始。在解碼之第一階段於位址0處載入ADV操作碼。根據表301之第一項,S為0,T為1且D為1。自輸入位元流提取一個位元。下一位址為當前位址(0)加D(1)加VAL。T之VAL視自輸入位元流所提取之第一位元而定可為0或1。
若VAL為0,則自位址1載入LD0操作碼,且根據位址1處之D欄位,經解碼之語法值為3。此結果對應於霍夫曼樹310之節點304。若VAL為1,則在解碼之第二階段於位址2處載入ADV操作碼。根據位址2,S為1,T為1且D為0。自輸入位元流提取一個位元。自輸入位元流清除一個位元。下一位址為當前位址(2)加D(0)加VAL。D為不小於1或等於1之值(D>=1)。T之VAL視自輸入位元流所提取之第二位元而定可為0或1。此結果對應於霍夫曼樹310之節點307。
若VAL為1,則自位址4載入LD0操作碼,且根據位址4處之D欄位,經解碼之語法值為0。此結果對應於霍夫曼樹310之節點308。若VAL為0,則在解碼之第二階段於位址3處載入ADV操作碼。根據位址3,S為1,T為1且D為2。自輸入位元流提取一個位元。自輸入位元流清除一個位元。下一位址為當前位址(3)加D(2)加VAL。T之VAL視自輸入位元流所提取之第二位元而定可為0或1。此結果對應於霍夫曼樹310之節點305。
若VAL為0,則自位址5載入LD0操作碼,且根據位址5處之D欄位,經解碼之語法值為2。此結果對應於霍夫曼樹310之節點306。若VAL為1,則自位址6載入LD0操作碼,且根據位址6處之D欄位,經解碼之語法值為1。此結果對應於霍夫曼樹310之節點309。
圖4說明一熵處理器之一實施例。
在一個實施例中,將上述的表記憶體分為兩個表以減小表大小。S、O以及D欄位比T以及Dest欄位得到更為頻繁之使用。將T以及Dest欄位儲存於較小表(長表402)中;且將欄位S、O以及D儲存於較大表(短表406)中。在長表402中,存在稱為“NXT PC”之欄位,使用其以指出長表402之下一執行位址。
在一個實施例中,短表406包括3個欄位:操作欄位(O)、立即欄位(D)以及getbits欄位(S)。在一個實施例中,長表402包括5個欄位。操作欄位(O)、立即欄位(D)、BSEL欄位(BSEL)、Dest欄位以及狀況(condition)。
長表402從由CPU發送之位址而開始執行。自此位址取出之第一指令為NXT指令。NXT指令執行以下操作。輸出當前的查找方法:BREG=Breg_array[BSEL];輸出Dest欄位;自立即欄位輸出短表之開始位址;等待短表執行結束。若短表執行完成,則轉向下一位址。
在對符號重複解碼之情況下,使用LPCL指令以執行以下操作。輸出當前的查找方法:BREG=Breg_array[BSEL];輸出Dest欄位;輸出短表之開始位址且執行短指令;等待短表執行結束。若迴路計數器(loop counter,LPC)不為零,則減小LPC,重複對同一指令之執行,否則轉向下一指令。
藉由執行SET指令而設定初始LPC值,其中Dest欄位經設定為LPC且初始值經設定於長表之立即欄位中。在一個實施例中,實際showbits實料處於BREG_ARRAY中;且長表包含指標以選擇showbits之序列。在一個實施例中,具有雙移位器結構(shifters tructure)之位元對準器經設計以在同一循環中執行getbits(S)、showbits(T)操作。
長表位址產生器401經組態以自CPU接收一種開始長表位址。長表402自長表位址產生器401接收長表位址。LPC計數器400產生一種迴路計數器以指出將當前位址向長表402發送多少次,使得當前位址處之欄位在增加至長表402中之由NXT PC欄位所指出的下一位址之前已經重新使用。
長表402自當前位址產生BSEL欄位429以及Dest欄位425。
使用BSEL 429以自BREG_ARRAY 403選擇一查找方法。BREG_ARRAY 403之所選取的項(entry)經儲存於BREG 404中且表示所選的查找方法。查找方法界定解碼之每一階段中應使用多少查找位元。在一實施例中,BSEL 429為3個位元且BREG_ARRAY 403具有高達8個項。最多8個查找方法儲存於BREG_ARRAY 403中。根據不同實施例,可使得更多或更少查找方法可用。
經由多工器(mux)430輸出BREG 404。BREG 404可被暫存或直接來自多工器430。使用另一特殊暫存器(階段405)來儲存VLC解碼之階段數目。在一個實施例中,若階段數目超過8,則使用針對階段8界定之查找位元數目。查找方法界定用於解碼過程之階段中之每一階段的T欄位之集合。
舉例而言,第一項儲存查找方法“44444456”且第二項儲存查找方法“12222233”。第一項意謂查找位元經界定如下:階段1:查找6個位元;階段2:查找5個位元;階段3至階段8:查找4個位元;階段9以及之後,查找4個位元。第二項意謂查找位元經界定如下:階段1:查找3個位元;階段2至階段7:查找3個位元;階段8:查找1個位元;階段9以及之後,查找1個位元。
為了解碼一個語法元素(符號),針對查找方法的每一階段以及經解碼之語法元素之載入,在第一循環中自長表402讀出T以及Dest之相對設定;接著在後續循環中讀出包括S、O以及D之其他欄位。
短位址表產生器407自短表406接收D,自位元對準器410接收VAL且自長表402(對於開始位址)或自短表位址產生器407之先前循環(對於後續位址)接收當前位址。參看圖5以及圖6較為詳細地描述短位址表產生器。
位元對準器410接收輸入位元流422、S以及T。位元對準器410清除輸入位元流422之S個位元且輸出來自輸入位元流422之T個位元之集合的VAL。參看圖7較為詳細地描述位元對準器410。
在一個實施例中,將經解碼之語法元素之輸出自短表中之D值輸出至游程408以及層次409且由位元對準器410自輸入位元流422輸出至正負號411。在分一實施例中,基於Dest欄位將經解碼之語法元素之輸出予以輸出至許多暫存器或FIFO中之一者(此圖式中未說明。)
圖5說明短表位址產生器之一個實施例。
為了支援快速時脈頻率,將短表位址產生器510設計為具有兩個管線階段。來自短表500之D在輸入位址之下一循環(Next_addr 523)中傳出。短表之輸出在此輸出到達位址產生器之前經鎖存。存在著三個管線暫存器:VAL暫存器501、D暫存器502以及位址暫存器504。輸入Curr_Addr 524作為短表500之當前位址。
若階段=0,則選擇長表520輸出作為接近“下一A”之多工器之輸出;否則,選擇“Curr_Addr+D+VAL”之輸出作為多工器521的輸出。在一個實施例中,長表位址產生器之組合邏輯為如下:Next_Long_Address=CPU_send_address?CPU_Start_Address:LPC==0?Current_long_Address+1:Current_long_Address。
圖6說明短表位址產生器之一個實施例。
在不需要較高時脈頻率之應用的情況下,可設計一管線(pipeline)階段之短表位址產生器510。短表500之輸出在輸入位址之下一循環(Next_addr)中傳出。長表之位址來自長表產生器。
圖7說明本發明之位元對準器之一個實施例。
位元對準器710經設計以支援有效查找過程。位元對準器710可清除S個位元且同時輸出(或展示)接下來的T個位元。此特徵在執行ADV操作碼時非常有用。在VLC解碼中使用ADV操作碼。在VLC解碼中,執行引擎自表記憶體中之getbits欄位提供S且自showbits欄位提供T。使用S+T個位元中之最後T個位元來決定下一表位址。使用位元1至位元S以產生S且使用位元S+1至位元S+T以產生T。對於下一操作,getbits自位元S+1開始。開頭S個位元亦稱作shadow_bits,且最後T個位元亦稱作front_bits。
位元對準器710可清除S個位元且同時提取下一正負號位元。此特徵在執行LDT0-4操作碼時亦非常有用。在MPEG2中解碼係數VLC中的最後步驟中使用LDT0-4操作碼,其中正負號位元跟隨著該係數VLC。在此情況下,在同一循環中對係數VLC以及正負號位元進行解碼。正負號位元處於所提取之(S+1)個位元之最低有效位元(Least significant bit,LSB)中。S為位元1至位元S且正負號位元為位元S+1。
位元位置暫存器706保持著關於輸入位元流711之位元位置。加法器705接收S 712、getsign 713以及位元位置714且將此等值相加以產生位元位置715。S 715為待清除之位元之數目且getsign 713在S個位元之後的下一位元待提取作為正負號位元之情況下為1且在下一位元並非待提取作為正負號位元之情況下為0。getsign 713在執行“ADV”或“LD”操作碼時為0。getsign 713在執行“LDT”操作碼時為1。在“LDT”之情況下,將shadow_bits 712之最低有效位元儲存至正負號暫存器中。
將位元位置715保存於位元位置暫存器706中作為當前位元位置且將其用作對於對位元位置暫存器706之下一次引用時的位元位置714。
左移位器702經組態以經由輸入緩衝器700自輸入位元流711接收n位元之輸入資料。左移位器將n位元之輸入左移m個位元。藉由位元位置715來指出m個位元。
右移位器704接收作為自左移位器702之輸出的自位元位置715開始之n個位元。反相器705接收T 716且產生經反相之T 717。經反相之T 717指出將自左移位器702接收之n個位元右移的位元之數目。右移位器704將自左移位器接收之輸入的前T個位元置放於VAL 713之最低有效位置中且剩餘位元將為零。
AND模組703接收在位元位置714之前的n個位元且自遮罩產生器701接收遮罩。遮罩產生器藉由S+getsign來產生遮罩,其在最低有效位置處具有1位元且在別處為0。AND 703之輸出為阻罩(shadow)位元718,其為在此操作中經清除之位元。
舉例而言,輸入流為11011001011...,get_sign=0,暫存器中之當前位元位置為1,加法器輸出之位元寬度為m=3,輸入緩衝器之位元寬度為n=8,第一位元為1,S=2且T=2...自加法器至左移位之輸入為2,左移位器之輸出為{00000110_11001011};遮罩產生器之輸出為00000011;至AND邏輯之輸入為00000011以及00000110;AND邏輯之輸出為00000010;至右移位器之輸入為11001011,至反相之輸入為T=010(二進位),自反向之輸出為101(二進位),右移位器之輸出front_bits(VAL)為00000011。正負號位元處於shadow_bits之LSB中。
圖8說明執行可變長度解碼之方法之一個實施例。
在過程800中,確定第一位址。在一個實施例中,自表記憶體中之長表確定第一位址。長表自CPU接收開始位址且基於開始位址而產生Dest位址以及第一位址。
在過程801中,對操作碼進行解碼。在一個實施例中,使用ADV操作碼以執行如本文所描述之多階段解碼過程之一階段。
在過程802中,接收包含可變長度碼的位元之序列。使用可變長度碼之一些標準為H.264、MPEG2、MPEG4、VC1、H.263以及JPEG。
在過程803中,自表記憶體於當前短表位址處接收S、T以及D。
在過程804中,自位元之序列清除S個位元。
在過程805中,由自位元之序列提取之T個位元來確定VAL。
在過程806中,計算下一位址。在一個實施例中,藉由使當前位址、D以及VAL相加而計算下一位址。下一位址取決於對由VAL表示之T個位元之解碼(藉由影響下一位址之計算)。自下一位址擷取操作碼。下一位址變為當前位址且執行操作碼。
在過程807中,自下一位址接收一操作碼。
在過程808中,確定最後一階段是否完成。在一個實施例中,基於所擷取之操作碼而對此進行確定。若所擷取之操作碼為ADV操作碼,則執行解碼之另一階段。若所擷取之操作碼為LD0-1或LDT0-4操作碼,則根據本發明之一些實施例而擷取經解碼之語法元素。
在過程809中,確定經解碼之語法元素。圖9以及圖10說明用以確定經解碼之語法元素之過程的兩個實施例。
圖9說明根據本發明之一個實施例而擷取經解碼之語法元素的方法。
在過程900中,對LD0或LD1操作碼進行解碼。根據本發明之一個實施例,在執行解碼過程之後執行此等指令。表記憶體中之當前位址視解碼過程而定且經解碼之語法元素可在開始於當前位址處之一或多個位址中找到。
在過程901中,接收包含可變長度碼的位元之序列。使用可變長度碼之一些標準為H.264、MPEG2、MPEG4、VC1、H.263以及JPEG。
在過程902中,自表記憶體於當前短表位址處接收S以及D。
在過程903中,自位元之序列清除S個位元。
在過程904中,基於Dest欄位將D儲存於記憶體位置處。D為經解碼之語法元素。在一個實施例中,自長表記憶體接收Dest欄位。Dest欄位可規定如本文所描述的暫存器檔案中之若干暫存器中之一者或若干FIFO中之一者。
圖10說明根據本發明之一個實施例而擷取經解碼之語法元素的方法。
在過程1000中,對LDT0、LDT1、LDT2、LDT3或LDT4操作碼進行解碼。根據本發明之一個實施例,在執行解碼過程之後執行此等指令。表記憶體中之當前位址視解碼過程而定且經解碼之語法元素可在當前位址處找到。
在過程1001中,接收包含可變長度碼的位元之序列。使用可變長度碼之一些標準為H.264、MPEG2、MPEG4、VC1、H.263以及JPEG。
在過程1002中,自表記憶體於當前短表位址處接收S以及D。
在過程1003中,自位元之序列清除S個位元。
在過程1004中,使用D值之部分而產生游程經解碼之語法元素。若使用LD0操作碼,則游程為D之最高有效的6個位元。若使用LD1操作碼,則游程為D之最高有效的5個位元。若使用LD2操作碼,則游程為D之最高有效的4個位元。若使用LD3操作碼,則游程為D之最高有效的3個位元。若使用LD4操作碼,則游程為D之最高有效的2個位元。
在過程1005中,使用D值之部分而產生層次經解碼之語法元素。若使用LD0操作碼,則層次(LEV)為D之最低有效的2個位元。若使用LD1操作碼,則層次為D之最低有效的3個位元。若使用LD2操作碼,則層次為D之最低有效的4個位元。若使用LD3操作碼,則層次為D之最低有效的5個位元。若使用LD4操作碼,則層次為D之最低有效的6個位元。
在過程1006中,由位元之序列清除之S個位元之後的第一個位元擷取正負號(SIGN)。
在過程1007中,基於Dest欄位將經解碼之語法元素儲存於記憶體位置處。在一個實施例中,自長表記憶體接收Dest欄位。Dest欄位可規定如本文所描述的暫存器檔案中之若干暫存器中之一者或若干FIFO中之一者。
圖11說明視訊解碼器系統之一個實施例。
在一個實施例中,方法經設計以在無CPU輔助的情況下藉由使用組合之VLC解碼來產生框內預測模式。
在H.264標準[1]中,為了產生框內(intra)預測模式,存在著若干步驟:luma4x4BlkIdx=0;自位元流來解碼prev_intra4x4_pred_mode_flag[luma4x4BlkIdx];若prev_intra4x4_pred_mode_flag[luma4x4BlkIdx]不為零,則解碼rem_intra4x4_pred_mode[luma4x4BlkIdx]。
接著如下而產生框內預測模式:predIntra4x4PredMode=Min(intra4x4PredModeA,intra4x4PredModeB)若(prev_intra4x4_pred_mode_flag[luma4x4BlkIdx])則Intra4x4PredMode[luma4x4BlkIdx]=predIntra4x4PredMode否則若(rem_intra4x4_pred_mode[luma4x4BlkIdx]<predIntra4x4PredMode)則Intra4x4PredMode[luma4x4BlkIdx]=rem_intra4x4_pred_mode[luma4x4BlkIdx]否則Intra4x4PredMode[luma4x4BlkIdx]=rem_intra4x4_pred_mode[luma4x4BlkIdx]+1 luma4x4BlkIdx為0至15。
傳統方法需解碼兩個符號來產生最終intra4x4PredMode。首先取得一個旗標prev_intra4x4_pred-mode_flag,接著基於此旗標,進行或忽略對稱作rem_intra4x4_pred_mode之另一符號的解碼。
在一個實施例中,組合的解碼方法經設計以對intra4x4PredMode進行解碼。藉由使用以下方法對於每一迴路在一循環中進行操作。
1)存在著稱作MBX以及MBY之兩個計數器來儲存當前巨集區塊之位置。使用組合邏輯來產生三個旗標:left_border_mb、right_border_mb以及top_border_mb。使用此等旗標以在相鄰MB不存在之情況下導出預設值。
2)存在著用以儲存當前MB之框內預測模式的由4x4暫存器陣列組成之二維暫存器陣列,用以儲存頂部(top)預測模式之4x1暫存器陣列以及用以儲存左側預測模式之4x1暫存器陣列。
3)將prev_intra4x4_pred_mode_flag與rem_intra4x4_pred_mode組合在一起且藉由使用以下新表對其進行解碼。使用255以指出rem_intra4x4_pred_mode何時不需經解碼且使用相鄰框內預測模式以導出當前框內預測模式。
4)存在著組合邏輯以計算當前預測模式。自上述的查表產生經解碼之值。藉由存取二維暫存器陣列而產生Pred_mode。組合邏輯包括兩個比較操作器、一個加法器以及兩個多工器。舉例而言:luma4x4BlkIdx=0;自位元流來解碼combined_intra4x4_pred_mode_flag[luma4x4BlkIdx];(1)predIntra4x4PredMode=Min(intra4x4PredModeA,intra4x4PredModeB)(2)若combined_intra4x4_pred_mode_flag[luma4x4Blkldx]為255則Intra4x4PredMode[luma4x4BlkIdx]=predIntra4x4PredMode;(3)否則:若(combined_intra4x4_pred_mode[luma4x4BlkIdx]<predIntra4x4PredMode)則Intra4x4predMode[luma4x4BlkIdx]=combined_intra4x4_pred_mode[luma4x4BlkIdx]否則Intra4x4PredMode[luma4x4BlkIdx]=combined_intra4x4_pred_mode[luma4x4BlkIdx]+1 luma4x4BlkIdx為0至15。
以上(1)、(2)、(3)之操作在如圖8中之組邏輯中進行。
在一個實施例中,解碼用之框內預測模式使用四個長指令。將方法0界定為0x22222223。方法0亦可為其他值。(1)BS0 CC16 NXT D2 #vlx_h264_ht_3//ue_imbtype r0+cfifo*
/ (2)BS0 CC16 CMP D0 #0xe0a0//比較r0[7:5]==5(I4)*
/ (3)BS0 CC17 SET D5 #16//設定LPC (4)BS0 CC17 LPCL D1 #vlx_h264_ht_1//取得框內預測模式*
/
在(1)中,BS0意謂一種查找方法0,其經設計以用於語法完整性。CC16意謂始終為真。D2意謂CFIFO以及R0作為目的地。#vlx_h264_ht_3意謂MBTYPE短表之開始位址。NXT將執行同一指令且在短表結束執行之後轉向下一指令。若MBType為框內4x4模式,則R0[7:5]以值0x5而儲存著。R0[4:0]以值0而儲存著。
在(2)中,BS0意謂查找方法0,其經設計以用於語法完整性。CMP為比較指令。其進行以下操作:若(R0[7:0]& 0xe0==0xa0),則比較結果為真;否則比較結果為假。若MBType為框內4x4模式,則R0[7:5]以值0x5而經儲存。因此,R0[7:0]& 0xe0=0xa0,且比較結果為真。D0為0,其經設計以用於語法完整性。
在(3)中,BS0意謂查找方法0,其經設計以用於語法完整性。CC17意謂上一指令(1)中之比較結果為真。D5意謂LPC特殊暫存器。值為16之立即欄位載入LPC。
在(4)中,BS0意謂查找方法0。CC17意謂上一指令(1)中之比較結果為真。D1意謂CFIFO作為目的地。#vlx_h264_ht_1意謂短表之開始位址。LPCL將對同一指令執行LPC中所規定之數目的次數(其為16)。
圖12說明二維暫存器陣列結構之一個實施例。
運動向量預測以及重建。在一個實施例中,多重二維暫存器陣列結構經設計以用於運動向量(MV)預測以及MV產生。等效於MV預測以及重建之功能之操作描述於H.264標準[1]中。
取得MV之傳統方法需要CPU來進行MV預測以及重建。在VLC解碼器與CPU之間存在著繁重的交流(traffic)量,因為CPU需要自VLC解碼器讀出許多語法元素以執行預測以及重建。
在一個實施例中,MV預測以及重建在無CPU輔助之情況下以固線(hardwired)方式進行且在一個循環中完成且於兩個管線階段中執行。
在一個實施例中,於熵處理器中進行MV預測以及重建。在一個實施例中,將圖1中之所有組件整合於同一晶片上。在一個實施例中,將圖14中之VRISC與熵處理器整合於同一晶片上;或者,將圖14中之VRISC與熵處理器整合於不同的各別的晶片上。
圖13說明視訊解碼器系統之一個實施例。
為了減少熵處理器與外部CPU以及外部記憶體之間的交流量,設計多重二維暫存器陣列。使用四個分離部分之暫存器陣列以儲存四種類型之語法元素。每一暫存器陣列儲存當前巨集區塊中之語法元素以及相鄰巨集區塊中之語法元素。每一暫存器陣列具有其自己的讀取位址以及寫入位址。存在著位址計算電路以基於當前子區塊索引而產生相鄰子區塊之位址。使用所產生之位址來讀出頂部邊界子區塊中之語法元素以及左側邊界子區塊中之語法元素。因此每一讀取埠同時輸出三個資料:當前資料、來自頂部列(N+1)x1陣列之頂部資料,來自左側行(N+1)x1陣列之左側資料。在一個實施例中,暫存器陣列之形狀經設計以具有巨集區塊之相同形狀以便同時讀取當前、頂部、左側之列/行。
每一暫存器陣列包含用於當前巨集區塊之NxN陣列以及用於頂部巨集區塊列之(N+1)x1陣列、用於左側巨集區塊行之Nx1陣列。對於運動向量(MV)陣列,N=4。對於Refidx以及子類型陣列,N=2。對於MBType,N=1。由MV解碼器控制器模組來控制暫存器陣列。MV解碼器控制器模組並行產生四個暫存器陣列之索引且自暫存器陣列讀出當前資訊以及相鄰資訊。MV預測模組讀取當前資訊以及相鄰資訊且計算當前MV。藉由使用一個索引,可在同一循環自(NxN)、(N+1)x1以及Nx1陣列讀出三個值。若索引在NxN區塊之邊界上,則(N+1)x1陣列將作為相鄰元素而一同讀出。將當前MV結果寫入至暫存器陣列中且同樣將其發送至CFIFO。
在一個實施例中,方法經設計以在熵處理器內部基於德耳塔(Delta)MV以及相鄰MV以產生運動向量(MV)來減少至外部CPU之交流量且減少記憶體之儲存。
該執行引擎解碼DeltaMV且將結果寫入至臨時暫存器(Tmp DMV)。同時,DeltaMV旁路至運動向量預測模組。在下一循環中,自運動向量預測模組來計算CurrMV。將CurrMV儲存至MV陣列中且同時將Tmp DMV儲存至CFIFO中。亦將CurrMV發送至一種計算DMA設定模組;且將DMA設定參數儲存至SFIFO中。將CurrMV發送至一種計算邊界強度模組(Calculate Boundary Strength module);且將邊界強度結果儲存至BS命令暫存器中。外部CPU或視訊信號處理器可讀取BS命令暫存器以及SFIFO。使用BS命令來對視訊信號處理器(VSP)進行組態且VSP根據BS命令而進行解塊濾波(Deblock Filtering)。
在一個巨集區塊中視巨集區塊之區塊分割而存在著可變數目之MV。當將一個巨集區塊分割為16個4x4子區塊時,所述巨集區塊中MV之最大數目為16。存在著三個暫存器:兩個通用暫存器R0以及R1以及載入自巨集區塊以及子巨集區塊分割導出之MV計數器的稱作LPC之迴路計數器,所述暫存器用以加速導出巨集區塊中存在著多少個MV。
圖14說明巨集區塊以及子巨集區塊分割之一個實施例且圖15說明MV計數產生器之一個實施例。
在一個實施例中,方法經設計以基於兩個暫存器以及加法器樹而產生MV計數。運動計數視巨集區塊以及子巨集區塊之分割而定。每一分割具有其自己的運動向量。用以導出MV之數目之傳統方法基於Mbtype以及子類型而使用條件式決定或查表。為了節省循環過程以及硬體成本,設計有效方法來基於兩個通用暫存器R0、R1以及專用小加法器樹而產生MV計數。將MV計數儲存於迴路計數器LPC中。LPC之值用於對德耳塔MV之進一步解碼。LPCM意謂儲存MV計數器之目的地LPC。
在一個實施例中,H.264中之MV解碼過程為如下。
該執行引擎首先對MB類型進行解碼。若MB為框間模式,則該執行引擎解碼具有四個可能值(P_MB_16x8、P_MB_8x16、P_MB_8x8、P_MB_16x16)之MB_TYPE。將經解碼之MB_TYPE儲存至R0[6:5]中。區塊類型與值之間的關係示於下表中。
若區塊類型為P_MB_8x8,則該執行引擎解碼對於每一8x8區塊具有四個可能值(SUBBLK_8x8、SUBBLK_4x8、SUBBLK_8x4、SUBBLK_4x4)之子區塊類型。將第一個8x8區塊之經解碼之sub_block_type儲存至R1[7:6]中。將第二個8x8區塊之經解碼之sub_block_type儲存至R1[5:4]中。將第三個8x8區塊之經解碼之sub_block_type儲存至R1[3:2]中。將第四個8x8區塊之經解碼之sub_block_type儲存至R1[1:0]中。sub_block_type與值之間的關係示於下表中。
該執行引擎藉由使R0[7:5]、R1[7:6]、R1[5:4]、R1[3:2]、R1[1:0]以及1相加而產生MV計數且儲存至LPC中。將MV計數儲存至迴路計數器LPC中;且該執行引擎解碼MV語法元素N次(若N等於MV計數)。
舉例而言,MB_TYPE=P_MB_8x8,四個8x8區塊之值為SUBBLK_8x4、SUBBLK_8x4、SUBBLK_8x4、SUBBLK_8x8。R0以及R1中之值將分別為0x2a以及0x60。總MV計數為(3+1+1+1+0+1)=7。
使用一種6-輸入小樹型加法器之結構來導出MV之數目。至樹型加法器之每一輸入為2位元。
在一個實施例中,在解碼MV中使用若干個長指令。將方法0界定為0x22222223。將方法1界定為0x22222222。方法0以及方法1亦可為其他值。
(1)BS0 CC16 NXT D2 #vlx_h264_ht_4//ue_pmbtype r0+cfifo*
/ (2)BS0 CC16 CMP D0 #0xe060//比較r0[7:5]==3(P或零)*
/ (3)BS0 CC17 JMP D7 #h264_1t_dec_8x8_b8mode//*
/ (4)BS0!CC17 JMP D7 #h264_lt_dec_mb_mv//*
/h264_lt_dec_8x8_b8mode: (5)BS0 CC17 NXT D4 #vlx_h264_ht_9//若(p8x8)ue_0 cfifo/r1[8x8 mbmode]*
/ (6)BS0 CC17 NXT D4 #vlx_h264_ht_9//若(p8x8)ue_0 cfifo/r1[8x8 mbmode]*
/ (7)BS0 CC17 NXT D4 #vlx_h264_ht_9//若(p8x8)ue_0 cfifo/r1[8x8 mbmode]*
/ (8)BS0 CC17 NXT D4 #vlx_h264_ht_9//若(p8x8)ue_0 cfifo/r1[8x8 mbmode]*
/h264_lt dec_mb_mv: (9)BS0 CC16 SET D15 #0//設定LPC (10)BS1 CC16 LPCL D1 #vlx_h264_ht_42//getMV*
/
在(1)中,BS0意謂查找方法0,其經設計以用於語法完整性。CC16意謂始終為真。D2意謂CFIFO以及R0作為目的地。#vlx_h264_ht_3意謂PMBTYPE短表之開始位址。NXT將執行同一指令且在短表結束執行之後轉向下一指令。MBType與R0之間的關係描述於下表中。
在(2)中,BS0意謂查找方法0,其經設計以用於語法完整性。CMP為比較指令。其執行以下操作:若(R0[7:0]& 0xe0==0x60)則比較結果為真;否則比較結果為假。
在(3)中,BS0意謂查找方法0,其經設計以用於語法完整性。CC17意謂上一指令(2)中之比較結果為真。D7意謂JUNK目的地。丟棄結果。JMP意謂若CC17為真,則轉向#h264_lt_dec_8x8_b8mode,否則轉向下一指令。#h264_lt_dec_8x8_b8mode為用以解碼8x8子模式之第一位址。
在(4)中,BS0意謂查找方法0,其經設計以用於語法完整性。CC17意謂上一指令(2)中之比較結果為真。!意謂使狀態反相。D7意謂JUNK目的地。丟棄結果。JMP意謂若CC17為假,則轉向#h264_lt_dec_mb_mv。#h264_lt_dec_mb_mv為用以解碼MV之第一位址。若MBType不為8x8框間模式,則跳過解碼8x8子(sub)模式且立即解碼MV。
在(5)(6)(7)(8)中,BS1意謂查找方法0。其解碼當前MB中之4個8x8區塊之8x8模式。CC17意謂上一指令(2)中之比較結果為真。D4意謂CFIFO以及r1+作為目的地。#vlx_h264_ht_9意謂短表之開始位址。在一個實施例中,至R1+之寫入包含兩個操作:a)R1=R1<<2;b)R1[1:0]=經解碼之值;在寫入R1之前,R1將自動左移2個位元。
舉例而言,若四個8x8區塊之8x8模式分別為2、1、3、0。則R1如下而改變:在(5)之後,R1={6'h0,2'h2};在(6)之後,R1={4'h0,2'h2,2'h1};在(7)之後,R1={2'h0,2'h2,2'h1,2'h3};在(8)之後,R1={2'h2,2'h1,2'h3,2'h0};在(9)中,BS0意謂查找方法0。CC16意謂始終為真。C=16(見(例如)附錄)。D15意謂MV計數器作為LPC特殊暫存器之負載。MV計數載入至LPC,MV計數為樹型加法器之輸出。#0經設計以用於語法完整性。
在(10)中,BS1意謂查找方法1。CC16意謂始終為真。C=16(見(例如)附錄)。D1意謂CFIFO作為目的地。#vlx_h264_ht_42意謂短表之開始位址。LPCL將執行同一指令LPC中所規定之數目的次數。
實例。PMBType=3(意謂8x8模式),四個8x8區塊之8x8模式分別為2、1、3、0。在(8)之後,R0={3'h3,5'h0},R1={2'h2,2'h1,2'h3,2'h0}。在(9)之後,LPC=R0[7:5]+R1[7:6]+R1[5:4]+R1[3:2]+R1[1:0]+1=3+2+1+3+0+1=10。在當前MB中存在10個運動向量。在(10)之後,對10個MV進行解碼且將其儲存至CFIFO中。
圖16說明用於游程以及層次變換係數之雙暫存器結構之一個實施例。
在一個實施例中,雙暫存器陣列結構經設計以各別地儲存著變換係數(包括游程以及層次)符號。
在H.264中,分別在游程以及層次方面對係數進行解碼,而在MPEG2中,係數被作為游程與層次對而同時解碼。為了有效支援H.264 CAVLC解碼,設計用以儲存游程以及層次值之兩個局部16x1暫存器陣列。可以遞增次序或遞減次序而對暫存器陣列進行定址。暫存器陣列經設計以在將結果寫入至DFIFO之前緩衝整個16x1區塊。在對全部16個或較少(視當前4x4區塊中存在多少游程之層次對而定)游程以及層次值進行解碼之後,將其組合於一起作為游程之層次對且將其推至DFIFO中。在MPEG2之情況下,使游程以及層次陣列旁路(bypassed)且將游程之層次對直接儲存至DFIFO中。16x1暫存器陣列可保存4x4子區塊之最多16個係數。在具有較少係數之子區塊之情況下,僅填充具有較低位址之項。以反轉次序寫入暫存器陣列,位址自(亦即)N-1開始下降至0。此處,N意謂當前子區塊中係數之數目。以自0至N-1之遞增次序而讀取暫存器陣列。將正負號儲存於層次值之MSB中。
圖17說明視訊解碼器系統之一個實施例。
視訊解碼器系統包括熵處理器1702、視訊位元流FIFO1701、視訊位元流FIFO 1704以及係數(Coeff)FIFO 1703、精簡指令集電腦(reduced instruction set computer,RISC)處理器1705、匯流排控制器1700以及動態隨機存取記憶體(DRAM)控制器1706。使用RISC處理器1705以經由匯流排控制器1700來解碼圖像以及片段級(slice level)可變長度碼(VLC)碼或固定長度碼。亦使用RISC處理器1705以將不同操作碼以及資料下載至熵處理器1702之表記憶體中來允許熵處理器1702根據不同視訊標準來解碼VLC。一些視訊標準包括H.264、MPEG2、MPEG4、VC1、H.263以及JPEG。
熵處理器1702儲存VLC表且處理巨集區塊級(level)位元流剖析以及解碼任務。熵處理器將變換係數值發送至視訊信號處理器(VSP)以進行經由係數FIFO(Coeff FIFO)之進一步解碼。使用視訊信號處理器(VSP)以處理逆變換、框內(intra)預測、框間(inter)預測以及解塊(deblocking)濾波任務。存在自熵處理器之SFIFO以及視訊信號處理器之資料路徑。
在一個實施例中,特殊FIFO儲存著自運動向量導出之直接記憶體存取(DMA)設定(setting)。SFIFO儲存特殊DMA參數以用於視訊信號處理器。
熵處理器處理不同視訊編碼標準之VLC解碼。在多個位元流輸入(例如,一個位元流為MPEG2,另一者為H.264)之情況下,表記憶體可儲存VLC表之多個集合,此時RISC處理器在切換不同位元流的解碼期間不需要對各表進行切換。
在一個實施例中,可並行讀取或寫入諸如SFIFO、CFIFO以及DFIFO之多個FIFO,因此在熵處理器與解碼系統之諸如視訊信號處理器(VSP)以及CPU的其他部分之間存在著高資料轉移頻寬(見(例如)圖14)。可將熵處理器、VSP以及CPU整合至單一晶片中或將其建構於各別的晶片中。舉例而言,CPU(VRISC)可自CFIFO讀取資料且將資料儲存至局部記憶體中以用於進一步處理。舉例而言,自CFIFO讀取MBType;且外部CPU可基於框內或框間MBType而向外部視訊信號處理器(VSP)提供不同的命令。舉例而言,諸如視訊信號處理器(VSP)或外部CPU之引擎可自SFIFO讀取資料以產生多個直接記憶體存取(DMA)設定參數。外部VSP亦可自SFIFO讀取框內預測模式且基於框內預測模式而進行框內預測處理。關於框內預測處理之其他細節可在以引用方式併入本文中之H.264標準[1]中找到。外部視訊信號處理器可自DFIFO讀取變換域(domain)係數,以用於諸如逆量化、逆變換(見(例如)[1])之進一步的後(post)處理。三個FIFO經設計以經由並行讀取或寫入來致能熵處理器與解碼系統之諸如VSP及/或外部CPU之其他部分之間的非常高之資料轉移(transfer)頻寬。
圖18展示採取電腦系統1800之例示性形式之機器的圖解表示,在所述機器中可執行用於使得機器執行本文論述之方法中之任一或多者的指令之集合。機器可連接(例如,網路連接)至其他機器。在網路佈置中,機器可作為主從式網路環境中之伺服器或用戶端機器而操作,或作為點對點(或分散式)網路環境中之對等(peer)機器而操作。在一個實施例中,機器與伺服器通信以促進伺服器之操作且/或存取伺服器之操作。
電腦系統1800包括中央處理單元(CPU)1802(亦即,在一些實施例中包括圖形處理單元(GPU))、熵處理器1826、主記憶體1804以及非揮發性記憶體1806,其經由匯流排1808而互相通信。在一些實施例中,電腦系統1800可為(例如)膝上型電腦、個人數位助理(PDA)或行動電話。電腦系統1800可更包括視訊顯示器1810(例如,液晶顯示器(LCD)或陰極射線管(CRT))。電腦系統1800亦包括文數字輸入設備1812(例如,鍵盤)、游標控制設備1814(例如,滑鼠)、磁碟驅動單元1816、信號產生設備1818(例如,揚聲器)以及網路介面設備1820。在一個實施例中,視訊顯示器1810包括用於使用者輸入之觸敏螢幕(touch sensitive screen)。在一個實施例中,使用觸敏螢幕替代鍵盤以及滑鼠。磁碟驅動單元1816包括機器可讀媒體1822,在其上儲存實施本文描述之方法或功能之任一或多者的指令(例如,軟體1824)之一或多個集合。軟體1824亦可在由電腦系統1800執行期間完全或至少部分地常駐於主記憶體1804、熵處理器1826內及/或CPU 1802內,主記憶體以及處理器1802亦組成機器可讀媒體。可經由網路介面設備1820在網路1801上進一步發射或接收軟體1824。
雖然在例示性實施例中使機器可讀媒體1822展示為單一媒體,但應將術語“機器可讀媒體”理解為包括儲存指令之一或多個集合之單一媒體或多個媒體(例如,集中式或分散式資料庫及/或相關聯之快取記憶體以及伺服器)。術語“機器可讀媒體”亦將被理解為包括能夠儲存、編碼或載運指令之集合以由機器執行以及使得機器執行本發明之方法中之任一或多者的任一媒體。術語“機器可讀媒體”因此將被理解為包括(但不限於)固態記憶體、光學以及磁性媒體以及載波信號。
一般而言,可將經執行以實施本揭露案之實施例之常用程式實施為操作系統之部分或特定應用程式、組件、程式、物件、模組或稱作“電腦程式”的指令序列。電腦程式通常包含在各個時間於電腦中之各個記憶體以及儲存設備中之一或多個指令集合,且所述指令集合在由電腦中之一或多個處理器讀取並執行時使得電腦執行操作以執行涉及本揭露案之各種態樣的元件。
此外,雖然已在全功能電腦以及電腦系統之背景中描述實施例,但熟習此項技術者應瞭解,各種實施例能夠作為多種形式之程式產品而銷售,且本揭露案均等地應用而不管用以實際實現銷售的機器或電腦可讀媒體之特定類型。電腦可讀媒體之實例包括(但不限於):尤其諸如揮發性以及非揮發性記憶體設備、軟碟以及其他抽取式磁碟、硬碟驅動器、光碟(例如,緊密光碟-唯讀記憶體(CD ROM)、數位化通用光碟(DVD)等等)之可記錄類型之媒體,以及諸如數位以及類比通信鏈路的傳輸類型之媒體。
雖然本發明已以較佳實施例揭露如上,然其並非用以限定本發明,任何熟習此技藝者,在不脫離本發明之精神和範圍內,當可作些許之更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。前述說明書提供關於特定例示性實施例之描述。因此,將說明書以及圖式視作是在說明意義性上而非在限制性意義上。
短模板 sssooooodddddddd o:操作碼欄位 d:立即欄位,8-b s:移位欄位 s=0-7,移位0至7個位元 o=0-31 短指令由如下之3個欄位組成。Shf | op | #imm 長模板 octtbbbboooocccc ntttdddddddddddd b:breg選擇(BSEL) o:操作碼 c:狀況 n:反相 t:dest d:立即欄位,12-b x:保留 長指令由如下之5個欄位組成。breg | cond |操作碼| | #immed 短指令集合 0 adv flushbits(s),pc=pc+d[7:0]+showbits(B[stage++]); 1 ld0 #d A A=#d,flushbits(s),階段=0,返回; 2 ld1 #d A A=#d+0x100,flushbits(s),階段=0,返回; 3 ldt0 #d A {R,A}=LUT0[#d],flushbits(s),S=getbits(1),階段=0, 返回; 4 ldt1 #d A {R,A}=LUT1[#d],flushbits(s),S=getbits(1),階段=0, 返回; 5 ldt2 #d A {R,A}=LUT2[#d],flushbits(s),S=getbits(1),階段=0, 返回; 6 ldt3 #d A {R,A}=LUT3[#d],flushbits(s),S=getbits(1),階段=0, 返回; 7 ldt4 #d A {R,A}=LUT4[#d],flushbits(s),S=getbits(1),階段=0, 返回; LUT0[A]:(A[7:2]<<12)| A[1:0] LUT1[A]:(A[7:3]<<12)| A[2:0] LUT2[A]:(A[7:4]<<12)| A[3:0] LUT3[A]:(A[7:5]<<12)| A[4:0] LUT4[A]:(A[7:6]<<12)| A[5:0] 長指令集合 1 NXT B=B_array[#b]; if[!]#c{ set #t D; cns #d;//call and switch } else pc=pc+2; 3 jmp if[!]#c{ pc=#d;//jump } else pc=pc+2; 4 set dest if[!]#c{ dest=#d; } pc=pc+2; 7 LPCL B=B_array[#b]; if[!]#c{ if L pc=pc+2; else{ LPC--; } } else pc=pc+2; 8 CMP 比較(R0 &{n,t[2:0],d[11:8]}與d[7:0]。 暫存器 通用暫存器 R0:通用暫存器0 R1:通用暫存器1 迴路計數暫存器 LPC:迴路計數器。 欄位定義 “t”欄位定義 0:dfifo 1:cfifo 2:cfifo,r0 3:cfifo,r1 4:cfifo,r1+ r1<<=2. 5:lpc 以立即欄位[7:0]設定lpc。 7:JUNK,不將結果儲存於任何位置。 15:LPCM 以MV計數來設定lpc。 lpc=((r0+r1[1:0]+r1[3:2]+r1[5:4]+r1[7:6]+1)<<1)。 16:r0 r0=立即欄位[7:0] 17:r1 r1=立即欄位[7:0] “c”欄位定義 7-0:r0[7:0] 15-8:r1[7:0] 16:始終 17:CMP之比較結果為真 18:val==0 迴路狀態定義 L:LPC=0
100...熵處理器
101...表位址產生器
102...表記憶體
103...指令解碼器
104...振幅產生器
105...游程產生器
106...正負號產生器
107...運動向量(MV)預測模組
108...前後自適應二進位算術編碼(CABAC)模組
109...前後自適應可變長度編碼(CAVLC)模組
110...執行引擎
111...位元對準器/迴路計數暫存器
112...通用暫存器
113...專用暫存器
114...暫存器檔案
115...中央處理器單元(CPU)介面
116...控制先進先出(CFIFO)
117...資料FIFO(DFIFO)
118...特殊FIFO(SFIFO)
120...輸入位元流
200...霍夫曼表
201...表記憶體
300...表
301...表
303...節點
304...節點
305...節點
306...節點
307...節點
308...節點
309...節點
310...霍夫曼樹
400...LPC計數器
401...長表位址產生器
402...長表
403...BREG_ARRAY
404...BREG
405...階段
406...短表
407...短位址表產生器/短表位址產生器
408...游程
409...層次
410...位元對準器
411...正負號
422...輸入位元流
425...Dest欄位
429...BSEL欄位
430...多工器(mux)
500...短表
501...VAL暫存器
502...D暫存器
504...位址暫存器
520...長表
521...多工器
523...Next_addr
524...Curr_Addr
700...輸入緩衝器
701...遮罩產生器
702...左移位器
703...AND模組
704...右移位器
705...加法器/反相器
706...位元位置暫存器
710...位元對準器
711...輸入位元流
712...S/shadow_bits
713...getsign/VAL
714...位元位置
715...位元位置/S
716...T
717...經反相之T
718...shadow_bits
800...過程
801...過程
802...過程
803...過程
804...過程
805...過程
806...過程
807...過程
808...過程
809...過程
900...過程
901...過程
902...過程
903...過程
904...過程
1000...過程
1001...過程
1002...過程
1003...過程
1004...過程
1005...過程
1006...過程
1007...過程
1700...匯流排控制器
1701...視訊位元流FIFO
1702...熵處理器
1703...係數(Coeff)FIFO
1704...視訊位元流FIFO
1705...RISC處理器
1706...動態隨機存取記憶體(DRAM)控制器
1800...電腦系統
1801...網路
1802...中央處理單元(CPU)/處理器
1804...主記憶體
1806...非揮發性記憶體
1808...匯流排
1816...磁碟驅動單元
1818...信號產生設備
1820...網路介面設備
1822...機器可讀媒體
1824...軟體
1826...熵處理器
參看以下描述、所附申請專利範圍以及隨附圖式,將更好地理解本發明之此等以及其他特徵、態樣以及優勢。
圖1說明本發明之熵處理器之一個實施例。
圖2說明根據一個實施例,霍夫曼表與表記憶體之間的關係。
圖3A說明霍夫曼樹之一個實施例。
圖3B說明本發明之表記憶體之一個實施例。
圖3C說明本發明之表記憶體之另一實施例。
圖4說明本發明之熵處理器之一個實施例。
圖5說明本發明之短表位址產生器之一個實施例。
圖6說明本發明之短表位址產生器之一個實施例。
圖7說明本發明之位元對準器之一個實施例。
圖8說明解碼一可變長度碼之方法的一個實施例。
圖9說明在解碼一可變長度碼之後擷取經解碼之語法元素的一個實施例。
圖10說明在解碼一可變長度碼之後擷取經解碼之語法元素的另一實施例。
圖11說明視訊解碼器系統之一個實施例。
圖12說明二維暫存器陣列之一個實施例。
圖13說明視訊解碼器系統之一個實施例。
圖14說明巨集區塊以及子巨集區塊分割之一個實施例。
圖15說明運動向量計數產生器之一個實施例。
圖16說明用於游程以及層次變換係數之雙暫存器結構之一個實施例。
圖17說明視訊解碼器系統之一個實施例。
圖18展示採取電腦系統之例示性形式的機器之圖解表示。
100...熵處理器
101...表位址產生器
102...表記憶體
103...指令解碼器
104...振幅產生器
105...游程產生器
106...正負號產生器
107...運動向量(MV)預測模組
108...前後自適應二進位算術編碼(CABAC)模組
109...前後自適應可變長度編碼(CAVLC)模組
110...執行引擎
111...位元對準器/迴路計數暫存器
112...通用暫存器
113...專用暫存器
114...暫存器檔案
115...中央處理器單元(CPU)介面
116...控制先進先出(CFIFO)
117...資料FIFO(DFIFO)
118...特殊FIFO(SFIFO)
120...輸入位元流
Claims (17)
- 一種用於處理可變長度碼之方法,所述方法包含:確定第一位址;執行來自至少一開始於第一位址之表之第一多個操作碼;回應於所述第一多個操作碼中之每一者:接收位元之序列之部分,位元之所述序列包含第一可變長度碼;自第二表於當前位址接收一擷取位元(getbits)欄位中的數值S,其中S為整數;清除多個位元之所述序列中之S個位元;接收對應於多個解碼階段中之一者之一顯示位元(showbits)欄位中的數值T,其中T為整數;確定多個位元之所述序列中之T個位元之集合的值;自所述第二表於所述當前位址接收一立即資料欄位中的數值D;以及計算下一位址,所述下一位址為所述當前位址、D以及T個位元之所述集合之所述值的和;以及擷取所述多個操作碼中之下一操作碼,所述下一操作碼是自所述下一位址而擷取的;以及確定經解碼之語法元素,其中,各該第一操作碼包括該擷取位元(getbits)欄位、該顯示位元(showbits)欄位、該立即資料欄位以及一 目的地欄位。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,更包含回應於第一表中之至少一操作碼而選擇多個查找方法中之一者,所述查找方法針對所述多個階段中的每一者來確定T之值。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,更包含:接收計數器,其中執行來自所述至少一開始於第一位址之表之第一多個操作碼之所述過程且經執行多次,次數由所述計數器而確定。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中另外自所述至少一表來接收該目的地欄位中的數值DEST,其中將所述經解碼之語法元素儲存於基於DEST而選擇之記憶體中。
- 如申請專利範圍第4項所述之用於處理可變長度碼之方法,其中所述記憶體為暫存器檔案,將所述經解碼之語法元素儲存於所述暫存器檔案中。
- 如申請專利範圍第4項所述之用於處理可變長度碼之方法,其中所述記憶體為多個FIFO中之一者,所述方法更包含基於DEST而選擇所述多個FIFO中之一者。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中確定所述經解碼之語法元素之所述過程包含:接收第二操作碼;回應於所述第二操作碼: 接收多個位元之所述序列之部分;自所述至少一表於所述當前位址來確定S;清除多個位元之所述序列中之S個位元;自所述至少一表於所述當前位址來確定D;以及將D儲存於記憶體中,D表示所述經解碼之語法值。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中確定所述經解碼之語法元素之所述過程包含:接收第二操作碼;回應於所述第二操作碼:接收多個位元之所述序列之部分;自所述至少一表於所述當前位址來確定S;清除多個位元之所述序列中之S個位元;以及自所述第二表於所述當前位址來存取D;自D之第一部分來確定游程;自D之第二部分來確定層次;存取多個位元之所述序列中之一位元;自多個位元之所述序列中的所述一位元來確定正負號;以及將經解碼之語法值儲存於記憶體中,所述經解碼之語法值為游程、層次以及正負號。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中確定所述經解碼之語法元素之所述過程包含:修改所述至少一表之內容;使用所述至少一表來對第二多個位元之部分進行解 碼,所述第二多個位元藉由使用第二可變長度碼來編碼,所述第一可變長度碼以及所述第二可變長度碼是根據不同標準而經編碼。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中所述第一可變長度碼根據由H.264、MPEG2、MPEG4、VC1、H.263以及JPEG組成的多個編碼標準中之一者而經編碼。
- 如申請專利範圍第1項所述之用於處理可變長度碼之方法,其中清除多個位元之所述序列中之S個位元以及確定多個位元的所述序列中之T個位元之所述集合之值包含:將多個位元的所述序列之所述部分左移S個位元;將多個位元之所述序列之所述部分右移以確定T個位元的所述集合之值。
- 一種處理器,其包含具有多個操作碼之至少一表,所述至少一表經組態以接收當前位址且針對多個解碼階段中之每一者來產生一擷取位元(getbits)欄位中的數值S以及一顯示位元(showbits)欄位中的數值T,其中S、T為整數;位元對準器,其經組態以接收多個位元之序列之部分,自所述至少一表來接收S以及T,自多個位元的所述序列清除S個位元以及自多個位元之所述序列提取T個位元,多個位元之所述序列包含第一可變長度碼;位址產生器,其經組態以自所述至少一表於所述當前位址來存取一立即資料欄位中的數值D且針對所述多 個解碼階段中之每一者來計算下一位址,所述下一位址為所述當前位址、D以及T個位元之所述集合之值的和;以及處理器,其經組態以執行所述至少一表中之所述多個操作碼且確定經解碼之語法元素,其中,各該操作碼包括該擷取位元(getbits)欄位、該顯示位元(showbits)欄位、該立即資料欄位以及一目的地欄位。
- 如申請專利範圍第12項所述之處理器,其中所述至少一表包含:第一表,其經組態以接收第一表位址且自所述第一表位址產生第二表位址;第二表,其經組態以接收所述第二表位址且自所述第二表位址產生多個暫存值BREG,該些暫存值BREG中包含分別對應多個解碼階段中的多個數值T;計數器,其經組態以產生階段計數;以及多工器,其經耦接以接收所述階段計數以及BREG,所述多工器產生對應於所述階段計數之T之值。
- 如申請專利範圍第12項所述之處理器,更包含計數器,其中所述處理器經組態以執行開始於所述第一位址之所述多個操作碼且執行多次,次數由所述計數器來確定。
- 如申請專利範圍第12項所述之處理器,更包含多個暫存器,其中DEST自所述至少一表而被接收,所述處理器經進一步組態以將所述經解碼之語法元素儲存於基於 DEST而選擇之暫存器中。
- 如申請專利範圍第12項所述之處理器,更包含多個FIFO,其中DEST自所述至少一表而被接收,所述處理器經進一步組態以將所述經解碼之語法元素儲存於基於DEST而選擇之所述FIFO中。
- 如申請專利範圍第12項所述之處理器,其中所述處理器經進一步組態以將經解碼之語法值儲存於記憶體中,所述經解碼之語法值是自來自所述至少一表的D之至少一值而組合者。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US82589906P | 2006-09-15 | 2006-09-15 | |
US11/855,134 US7508328B2 (en) | 2006-09-15 | 2007-09-13 | Entropy processor for decoding |
Publications (2)
Publication Number | Publication Date |
---|---|
TW200826516A TW200826516A (en) | 2008-06-16 |
TWI397268B true TWI397268B (zh) | 2013-05-21 |
Family
ID=39184627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW096134466A TWI397268B (zh) | 2006-09-15 | 2007-09-14 | 解碼用的熵處理器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7508328B2 (zh) |
TW (1) | TWI397268B (zh) |
WO (1) | WO2008034094A2 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8811496B1 (en) | 2008-07-29 | 2014-08-19 | Marvell International Ltd. | Decoding image data |
US20100246679A1 (en) * | 2009-03-24 | 2010-09-30 | Aricent Inc. | Video decoding in a symmetric multiprocessor system |
FR2958429B1 (fr) * | 2010-04-02 | 2012-11-30 | Lead Tech Design | Dispositif de traitement permettant d'extraire un ensemble de donnees d'un mot de donnees, circuit electronique et procede d'extraction de donnees correspondants |
US20130114687A1 (en) * | 2011-11-07 | 2013-05-09 | Sharp Laboratories Of America, Inc. | Fixed intra run-level mode for cavlc in hevc |
US20130188736A1 (en) | 2012-01-19 | 2013-07-25 | Sharp Laboratories Of America, Inc. | High throughput significance map processing for cabac in hevc |
US10616581B2 (en) | 2012-01-19 | 2020-04-07 | Huawei Technologies Co., Ltd. | Modified coding for a transform skipped block for CABAC in HEVC |
US9654139B2 (en) | 2012-01-19 | 2017-05-16 | Huawei Technologies Co., Ltd. | High throughput binarization (HTB) method for CABAC in HEVC |
US9860527B2 (en) | 2012-01-19 | 2018-01-02 | Huawei Technologies Co., Ltd. | High throughput residual coding for a transform skipped block for CABAC in HEVC |
US9743116B2 (en) | 2012-01-19 | 2017-08-22 | Huawei Technologies Co., Ltd. | High throughput coding for CABAC in HEVC |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040081245A1 (en) * | 1998-06-25 | 2004-04-29 | Equator Technologies, Inc. | Processing circuit and method for variable-length coding and decoding |
US6934338B1 (en) * | 1998-05-18 | 2005-08-23 | Sony Corporation | Variable length decoder for decoding digitally encoded video signals |
US6963613B2 (en) * | 2002-04-01 | 2005-11-08 | Broadcom Corporation | Method of communicating between modules in a decoding system |
-
2007
- 2007-09-13 US US11/855,134 patent/US7508328B2/en not_active Expired - Fee Related
- 2007-09-14 WO PCT/US2007/078551 patent/WO2008034094A2/en active Application Filing
- 2007-09-14 TW TW096134466A patent/TWI397268B/zh not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6934338B1 (en) * | 1998-05-18 | 2005-08-23 | Sony Corporation | Variable length decoder for decoding digitally encoded video signals |
US20040081245A1 (en) * | 1998-06-25 | 2004-04-29 | Equator Technologies, Inc. | Processing circuit and method for variable-length coding and decoding |
US6963613B2 (en) * | 2002-04-01 | 2005-11-08 | Broadcom Corporation | Method of communicating between modules in a decoding system |
Also Published As
Publication number | Publication date |
---|---|
WO2008034094A3 (en) | 2009-05-22 |
TW200826516A (en) | 2008-06-16 |
US20080072016A1 (en) | 2008-03-20 |
US7508328B2 (en) | 2009-03-24 |
WO2008034094A2 (en) | 2008-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI397268B (zh) | 解碼用的熵處理器 | |
US8213511B2 (en) | Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction | |
JP4920034B2 (ja) | マルチスレッドsimd処理を利用したメディア符号化の並列実行 | |
US7119723B1 (en) | Decoding variable length codes while using optimal resources | |
US6842124B2 (en) | Variable length decoder | |
US8306125B2 (en) | 2-bin parallel decoder for advanced video processing | |
US7286066B1 (en) | Acceleration of bitstream decoding | |
US8233537B2 (en) | Efficient implementation of H.264 4 by 4 intra prediction on a VLIW processor | |
US20080046698A1 (en) | Run Length Encoding in VLIW Architecture | |
US9001882B2 (en) | System for entropy decoding of H.264 video for real time HDTV applications | |
JP2007300517A (ja) | 動画像処理方法、動画像処理方法のプログラム、動画像処理方法のプログラムを記録した記録媒体及び動画像処理装置 | |
US6546053B1 (en) | System and method for decoding signal and method of generating lookup table for using in signal decoding process | |
US20240037700A1 (en) | Apparatus and method for efficient motion estimation | |
JP4547503B2 (ja) | 算術符号化装置、算術符号化方法、算術符号化プログラム及びプログラムを格納したコンピュータで読み取り可能な記録媒体 | |
Kim et al. | ASIP approach for implementation of H. 264/AVC | |
JP2010118939A (ja) | 画像復号装置 | |
KR101151352B1 (ko) | H.264/avc를 위한 문맥 적응적 가변 길이 복호화기 | |
JP2009232454A (ja) | 高域係数用符号化ブロックパターン生成方法及び装置 | |
WO2010095181A1 (ja) | 可変長復号化装置 | |
KR20180031944A (ko) | 비디오 디코더 및 이를 포함하는 전자 시스템 | |
Huang et al. | High throughput VLSI architecture for H. 264/AVC context-based adaptive binary arithmetic coding (CABAC) decoding | |
Lin et al. | CABAC Encoder | |
Liu et al. | An architecture of entropy decoder, inverse quantiser and predictor for multi-standard video decoding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |