專利名稱:用于重排并行熵編碼和解碼的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本申請總體涉及數(shù)據(jù)壓縮,具體地涉及編碼器、解碼器和用于對有限字母表源進(jìn)行熵編碼的方法。
背景技術(shù):
不論有損還是無損,數(shù)據(jù)壓縮通常使用熵編碼來將解相關(guān)信號編碼為比特序列,即比特流。高效數(shù)據(jù)壓縮具有廣泛應(yīng)用,如圖像、音頻和視頻編碼。視頻編碼的當(dāng)前最新技 術(shù)是ITU-T H. 264/MPEG AVC視頻編碼標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了針對不同應(yīng)用的多個不同簡檔,包括主簡檔、基線簡檔等等。存在用于編碼/解碼圖像和視頻的多個標(biāo)準(zhǔn)和行業(yè)格式(包括H. 264),采用有損壓縮過程來產(chǎn)生二進(jìn)制數(shù)據(jù)。例如,H. 264包括預(yù)測操作以獲得殘差數(shù)據(jù),接著進(jìn)行DCT變換和DCT系數(shù)的量化。然后,對得到的數(shù)據(jù)(包括量化系數(shù),運動矢量、編碼模式和其他相關(guān)數(shù)據(jù))進(jìn)行熵編碼,以產(chǎn)生數(shù)據(jù)比特流,從而發(fā)送或存儲在計算機(jī)可讀介質(zhì)上。已經(jīng)開發(fā)了多個編碼方案來編碼二進(jìn)制數(shù)據(jù)。例如,可以使用Huffman碼來編碼JPEG0H. 264標(biāo)準(zhǔn)允許兩種可能的熵編碼過程上下文自適應(yīng)可變長度編碼(CAVLC)或上下文自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)。CABAC得到比CAVLC更大的壓縮,但是CABAC計算要求更高。一些行業(yè)格式包括上下文自適應(yīng)算術(shù)熵編碼方案。其他標(biāo)準(zhǔn)可以是HEVC、SVC、3DV標(biāo)準(zhǔn)。在任一這些情況下,編碼方案對二進(jìn)制數(shù)據(jù)操作,以產(chǎn)生編碼數(shù)據(jù)的連續(xù)比特流。在解碼器處,解碼方案接收比特流,并對序列比特流進(jìn)行熵解碼,以重構(gòu)二進(jìn)制數(shù)據(jù)。有利地,提供一種改進(jìn)的編碼器、解碼器和熵編碼方法。
現(xiàn)在參照附圖作為示例,附圖示出了本申請的示例實施例,其中圖I以框圖形式示出了用于對視頻進(jìn)行編碼的編碼器;圖2以框圖形式示出了用于對視頻進(jìn)行解碼的解碼器;圖3示出了編碼過程的框圖;圖4以框圖形式示出了根據(jù)本申請一方面的示例編碼器;圖5以框圖形式示出了根據(jù)本申請一方面的示例解碼器;圖6以流程圖形式示出了使用并行熵編碼器對輸入符號序列進(jìn)行編碼的示例方法;圖7以流程圖形式示出了使用并行熵解碼器對編碼數(shù)據(jù)的比特流進(jìn)行解碼的示例方法;
圖8示出了編碼器的示例實施例的簡化框圖;圖9示出了解碼器的示例實施例的簡化框圖;圖10以流程圖形式示出對輸入序列進(jìn)行重排并行編碼的方法;以及圖11以流程圖形式示出對編碼比特流進(jìn)行重排并行解碼的方法。在不同的附圖中可能已經(jīng)使用類似的參考標(biāo)號來標(biāo)記類似的組份。
具體實施例方式在一方面,本申請描述了一種用于對輸入比特序列進(jìn)行編碼的方法。該方法包括 根據(jù)預(yù)定的重排調(diào)度將輸入序列重排成輸入比特組;針對每個輸入比特組,并行確定所述輸入比特組中的每個輸入比特的上下文,并且基于每個輸入比特的上下文將該比特與概率相關(guān)聯(lián),其中所述組中的每個輸入比特的上下文與所述組中的每個其他輸入比特的上下文不同,并且獨立于所述組中的其他輸入比特來確定所述組中的每個輸入比特的上下文;以及對輸入比特進(jìn)行熵編碼以生成編碼序列。在另一方面,本申請描述了一種用于對輸入符號序列進(jìn)行編碼的編碼器。該編碼器包括處理器、存儲器以及編碼應(yīng)用,該編碼應(yīng)用存儲在存儲器中,并且包含用于將所述處理器配置為根據(jù)上述方法對輸入序列進(jìn)行編碼的指令。在又一方面,本申請描述了一種用于對編碼數(shù)據(jù)的比特流進(jìn)行解碼以重構(gòu)比特序列的方法。該方法包括對編碼數(shù)據(jù)的比特流進(jìn)行解碼以產(chǎn)生解碼比特組,其中,對于每個比特組,產(chǎn)生所述比特組的解碼包括確定針對所述比特組中的每個比特的上下文,并且基于該比特的上下文將該比特與概率相關(guān)聯(lián),以及其中所述比特組中的每個比特的上下文與所述組中的每個其他比特的上下文不同,并且獨立于所述組中的每個其他比特來確定所述組中的每個比特的上下文;以及基于預(yù)定的重排調(diào)度重排比特組中的比特以產(chǎn)生重構(gòu)的比特序列。在又一方面,本申請描述了一種用于對編碼數(shù)據(jù)的比特流進(jìn)行解碼以重構(gòu)符號序列的解碼器。該解碼器包括處理器、存儲器以及解碼應(yīng)用,該解碼應(yīng)用存儲在存儲器中,并且包含用于將所述處理器配置為根據(jù)上述方法對比特流進(jìn)行解碼的指令。在另一方面,本申請描述了一種計算機(jī)可讀介質(zhì),其包含計算機(jī)可執(zhí)行指令,所述指令在執(zhí)行時將處理器配置為執(zhí)行此處描述的一種或多種方法。結(jié)合附圖,通過閱讀以下示例的描述,本領(lǐng)域普通技術(shù)人員將理解本申請的其他方面和特征。以下描述總體涉及數(shù)據(jù)壓縮,具體地,涉及有限字母表源(如二進(jìn)制源)的高效并行編碼。在以下給出的許多示例中,給出這種編碼和解碼方案的特定應(yīng)用。例如,以下許多示意參照視頻編碼??梢哉J(rèn)識到,本申請不限于視頻編碼或圖像編碼。在以下描述中,參照H. 264標(biāo)準(zhǔn)來描述示例實施例。本領(lǐng)域技術(shù)人員將理解,本申請不限于H. 264,而是可以適用于其他視頻編碼/解碼標(biāo)準(zhǔn)。還可以認(rèn)識到,本申請不必限于視頻編碼/解碼,可以適用于任何二進(jìn)制源的編碼/解碼。在以下描述中,在視頻應(yīng)用的上下文中,在某種程度上可互換地使用術(shù)語幀和片(slice)。本領(lǐng)域技術(shù)人員將認(rèn)識到,在H. 264標(biāo)準(zhǔn)的情況下,幀可以包含一個或多個片。還將認(rèn)識到,取決于適用的視頻編碼標(biāo)準(zhǔn)的特定要求,特定編碼/解碼操作是逐幀執(zhí)行的,一些編碼/解碼操作是逐片執(zhí)行的。在任何特定實施例中,適用的視頻編碼標(biāo)準(zhǔn)可以確定是否關(guān)于幀和/或片來執(zhí)行以下描述的操作,視情況而定。相應(yīng)地,根據(jù)本公開,本領(lǐng)域技術(shù)人員將理解,這里描述的特定操作或過程以及對幀、片或兩者的特定引用對于給定實施例是否適用于幀、片或兩者?,F(xiàn)在參照圖1,圖I以框圖形式示出了用于對視頻進(jìn)行編碼的編碼器10。還參照圖2,圖2示出了用于對視頻進(jìn)行解碼的解碼器50的框圖??梢哉J(rèn)識到,這里描述的編碼器10和解碼器50均可以在專用或通用計算設(shè)備(包含一個或多個處理單元和存儲器)上實現(xiàn)。編碼器10或解碼器50執(zhí)行的操作可以通過例如專用集成電路或通過通用處理器可執(zhí)行的存儲程序指令來實現(xiàn),視情況而定。設(shè)備可以包括附加軟件,包括例如用于控制基本設(shè)備功能的操作系統(tǒng)。關(guān)于以下描述,本領(lǐng)域技術(shù)人員可以認(rèn)識到在其中可以實現(xiàn)編碼器10或解碼器50的設(shè)備和平臺的范圍。編碼器10接收視頻源12并產(chǎn)生編碼比特流14。解碼器50接收編碼比特流14并 輸出解碼視頻幀16。編碼器10和解碼器50可以被配置為符合多個視頻壓縮標(biāo)準(zhǔn)來操作。例如,編碼器10和解碼器50可以符合H. 264/AVC。在其他實施例中,編碼器10和解碼器50可以符合其他視頻壓縮標(biāo)準(zhǔn),包括H. 264/AVC標(biāo)準(zhǔn)的演進(jìn)。編碼器10包括空間預(yù)測器21、編碼模式選擇器20、變換處理器22、量化器24和熵編碼器24。本領(lǐng)域技術(shù)人員可以認(rèn)識到,編碼模式選擇器20確定視頻源的適合編碼模式,例如對象幀/片是I、P還是B類型,幀/片內(nèi)的特定宏塊是幀間還是幀內(nèi)編碼。變換處理器22對空間域數(shù)據(jù)執(zhí)行變換。具體地,變換處理器22應(yīng)用基于塊的變換來將空間域數(shù)據(jù)轉(zhuǎn)換為頻譜分量。例如,在許多實施例中,使用離散余弦變換(DCT)。在一些實例中,可以使用其他變換,如離散正弦變換等等。將基于塊的變換應(yīng)用于像素數(shù)據(jù)塊得到變換域系數(shù)的集合。量化器24對變換域系數(shù)的集合進(jìn)行量化。然后,熵編碼器26對量化系數(shù)和關(guān)聯(lián)信息(如運動矢量、量化參數(shù)等等)進(jìn)行編碼。幀內(nèi)編碼的幀/片(即,類型I)不參照其他幀/片進(jìn)行編碼。換言之,它們不采用時間預(yù)測。然而,幀內(nèi)編碼的幀依賴于幀/片內(nèi)的空間預(yù)測,如圖I中通過空間預(yù)測器21進(jìn)行說明。即,在對特定塊編碼時,可以將塊中的數(shù)據(jù)與針對該幀/片已經(jīng)編碼的塊內(nèi)鄰近像素的數(shù)據(jù)進(jìn)行比較。使用預(yù)測算法,可以將塊的源數(shù)據(jù)轉(zhuǎn)換為殘差數(shù)據(jù)。然后,變換處理器22對殘差數(shù)據(jù)進(jìn)行編碼。例如,H. 264規(guī)定了 4x4變換塊的9種空間預(yù)測模式。在一些實施例中,這9種模式中的每一種可以用于獨立處理塊,然后使用速率失真優(yōu)化來選擇最佳模式。H. 264標(biāo)準(zhǔn)還規(guī)定了使用運動預(yù)測/補(bǔ)償來利用時間預(yù)測。相應(yīng)地,編碼器10具有反饋環(huán)路,反饋環(huán)路包括解量化器28、反變換處理器30和解塊處理器32。這些單元反映了解碼器50實現(xiàn)以再現(xiàn)幀/片的解碼過程。幀存儲器34用于存儲再現(xiàn)幀。按照這種方式,運動預(yù)測基于在解碼器50處重構(gòu)幀是什么,而不基于原始幀,由于編碼/解碼中涉及的有損壓縮,原始幀可能不同于重構(gòu)幀。運動預(yù)測器36使用幀存儲器34中存儲的幀/片作為源幀/片,來與當(dāng)前幀進(jìn)行比較,以識別相似塊。相應(yīng)地,對于應(yīng)用運動預(yù)測的宏塊,變換處理器22編碼的“源數(shù)據(jù)”是出自運動預(yù)測過程的殘差數(shù)據(jù)。殘差數(shù)據(jù)是表示參考塊與當(dāng)前塊之間的差異(如果存在)的像素數(shù)據(jù)。關(guān)于參考幀和/或運動矢量的信息可以不由變換處理器22和/或量化器24處理,而是可以提供給熵編碼器26,作為比特流的一部分與量化系數(shù)一起編碼。本領(lǐng)域技術(shù)人員將認(rèn)識到用于實現(xiàn)H. 264編碼器的細(xì)節(jié)和可能變型。解碼器50包括熵解碼器52、解量化器54、反變換處理器56、空間補(bǔ)償器57和解塊處理器60。幀緩沖器58提供重構(gòu)幀以便應(yīng)用運動補(bǔ)償?shù)倪\動補(bǔ)償器62使用??臻g補(bǔ)償器57表示根據(jù)先前解碼塊來恢復(fù)特定幀內(nèi)編碼塊的視頻數(shù)據(jù)的操作。熵解碼器52接收并解碼比特流14,以恢復(fù)量化系數(shù)。在熵解碼過程中,還可以恢復(fù)輔助信息,如果適用,一些輔助信息可以提供給運動補(bǔ)償環(huán)路,以用于運動補(bǔ)償。例如,熵解碼器52可以恢復(fù)運動矢量和/或針對幀間編碼宏塊的參考幀信息。然后,解量化器54對量化系數(shù)進(jìn)行解量化,以產(chǎn)生變換域系數(shù),然后,反變換處理器56對變換域系數(shù)進(jìn)行反變換,以重建“視頻數(shù)據(jù)”??梢哉J(rèn)識到,在一些情況下,如對于幀內(nèi)編碼宏塊,重建的“視頻數(shù)據(jù)”是相對于幀內(nèi)先前解碼塊的、用于空間補(bǔ)償?shù)臍埐顢?shù)據(jù)。 空間補(bǔ)償器57根據(jù)殘差數(shù)據(jù)和來自先前解碼塊的像素數(shù)據(jù)來產(chǎn)生視頻數(shù)據(jù)。在其他情況下,如對于幀間編碼宏塊,來自反變換處理器56的重建“視頻數(shù)據(jù)”是相對于來自不同幀的參考塊的、用于運動補(bǔ)償?shù)臍埐顢?shù)據(jù)。這里,空間和運動補(bǔ)償均可以稱為“預(yù)測操作”。運動補(bǔ)償器62在幀緩沖器58內(nèi)定位專用于特定幀間編碼宏塊的參考塊。運動補(bǔ)償器62基于專用于幀間編碼宏塊的參考幀信息和運動矢量來進(jìn)行該操作。然后,運動補(bǔ)償器62提供參考塊像素數(shù)據(jù),以與殘差數(shù)據(jù)組合,得到針對該宏塊的重建視頻數(shù)據(jù)。然后,可以對重構(gòu)幀/片應(yīng)用解塊過程,如解塊處理器60所示。在解塊之后,輸出幀/片作為解碼視頻幀16,例如以在顯示設(shè)備上顯示??梢岳斫?,視頻回放機(jī)(如計算機(jī)、機(jī)頂盒、DVD或藍(lán)光播放器和/或移動手持設(shè)備)可以在輸出設(shè)備上顯示之前將解碼幀緩沖在存儲器中。熵編碼是所有無損和有損壓縮方案(包括上述視頻壓縮)的基本部分。熵編碼的目的是表示通常由獨立但是不同分布過程建模為比特序列的假定解相關(guān)信號。用于實現(xiàn)該操作的技術(shù)必須不依賴于解相關(guān)信號如何產(chǎn)生,但是可以依賴于每個即將到來符號的相關(guān)概率估計。實際中使用兩種常見熵編碼方法第一種是可變長度編碼,利用碼字來標(biāo)識輸入符號或輸入序列;第二種是范圍(或算術(shù))編碼,對
在步驟408,在步驟406中處理每個符號之后,如果上下文模型是自適應(yīng)的,則可 以更新上下文模型。步驟406和408逐比特重復(fù),以串行處理輸入序列X,基于其比特的估計概率將其比特分配到N個子序列。在步驟410中,如果檢測到刷新(flush)事件,則步驟406和408的循環(huán)結(jié)束。刷新事件可以是適于應(yīng)用的任何觸發(fā)事件。例如,在視頻編碼中,刷新事件可以是幀結(jié)束或片結(jié)束。在圖像處理中,刷新事件可以是圖像結(jié)束。在一個實施例中,刷新事件甚至可以是宏塊結(jié)束。刷新事件還可以基于一個或多個子序列滿足的閾值或準(zhǔn)則。例如,如果至少一個子序列超過閾值符號數(shù)目,則可以發(fā)生刷新事件。本領(lǐng)域技術(shù)人員可以認(rèn)識到其他可能的刷新事件。在步驟410中發(fā)生刷新事件時,將子序列提供給其相應(yīng)熵編碼器,在相應(yīng)熵編碼器中,對子序列分別進(jìn)行熵編碼,以產(chǎn)生相應(yīng)編碼子序列,如步驟412所示。在一個示例實施例中,熵編碼器被配置為使用靜態(tài)8比特Huffman編碼來編碼子序列。備選地,可以使用其他編碼方案,包括二進(jìn)制算術(shù)編碼。還可以使用編碼方案的組合,例如針對每個子序列使用不同的編碼方案??梢哉J(rèn)識到,由于熵編碼器的并行架構(gòu),步驟412中子序列的熵編碼并行進(jìn)行。在步驟414,通過對N個編碼子序列進(jìn)行復(fù)用來構(gòu)造單一比特流。在本實施例中,通過以已知順序?qū)⒈忍亓鞯挠行лd荷部分中的編碼比特流連接,并向比特流提供前綴字段來構(gòu)造單一比特流,該前綴字段包含用于標(biāo)識每個編碼子序列在比特流中的位置的索引信
肩、O將認(rèn)識到,在視頻編碼的情況下,針對多個幀或片,可以重復(fù)步驟406、408、410、412和414,以產(chǎn)生編碼多個幀的比特流。將認(rèn)識到,當(dāng)刷新事件發(fā)生時,編碼子序列可以具有不同長度。相應(yīng)地,可以提供前綴字段中的索引信息,以精確定位每個編碼子序列在比特流有效載荷部分中的位置。在一些實施例中,長度可以被編碼并置于前綴字段中。例如,每個編碼子序列k的長度(以字節(jié)為單位)可以由L(k)給出。前綴碼可以定義為If η < 128, then C(η) = η << I ;Else if η < 16512,then C(η) = ((n_128) << 2) 11 ;
Else if η < 2113664,then C(n) = ((n-16512) << 3) 3 ;Else C(n) = ((n_2113664) << 3) |7 ;其中“<<”是右移,“ I ”是按比特或??梢哉J(rèn)識到,可能存在“η”的上限,在本示例中為“L(k) ”。在任何給定實施例中,該上限可以依賴于實施方式。該上限可以由可以用于給定子序列的最大字節(jié)數(shù)目或者由可以用于指定子序列長度的最大字節(jié)數(shù)目來設(shè)置。在一個實例中,L(k)的限制是其必須在4個字節(jié)之內(nèi)表示,這意味著L(k)的大小限于大約216+2113664。使用以上定義的前綴碼,輸出比特流的首部部分由C(LQO)給出。前綴碼的上述結(jié)果確保字節(jié)對齊??梢岳斫猓鲜銮熬Y碼定義采用指數(shù)golomb碼。可以認(rèn)識到,可以使用其他合適的編碼方案來將索引信息置于首部中,包括例如Elias碼。在另一示例中,將索引信息置于前綴中而不進(jìn)行編碼。
在解碼器處,首先對前綴碼進(jìn)行解碼,以識別每個子序列的長度??梢哉J(rèn)識到,通過知道子序列的長度,解碼器能夠識別有效載荷中每個子序列的起始和結(jié)尾。然后,解碼器能夠解析有效載荷字段以將有效載荷解復(fù)用為各個編碼子序列。在不同的示例實施例中,首部中的索引信息可以指定每個子序列的起始比特的位置,盡管位置信息的表示可能導(dǎo)致大于長度信息從而需要首部中的更多比特?,F(xiàn)在參照圖7,圖7以流程圖形式示出了用于對編碼數(shù)據(jù)的比特流進(jìn)行解碼的方法 500。方法500包括在步驟502中接收編碼數(shù)據(jù)的比特流。在一些實例中,比特流可以從計算機(jī)可讀存儲介質(zhì)中讀取,如例如致密光盤(CD)、數(shù)字視頻光盤(DVD)、藍(lán)光光盤等等。在一些實例中,可以在有線或無線連接上通過與一個或多個網(wǎng)絡(luò)(可能包括因特網(wǎng))的通信鏈路來接收比特流。在步驟504中,解碼器讀取比特流的前綴字段,以提取索引信息。例如,在本實施例中,解碼器提取N個編碼子序列比特流的編碼長度信息L(k)?;谔崛『徒獯a的長度信息,解碼器識別比特流的有效載荷部分中N個編碼子序列比特流的位置。相應(yīng)地,在步驟506中,解碼器從比特流的有效載荷字段中提取編碼子序列。在步驟508,利用N個并行熵解碼器對編碼子序列進(jìn)行并行熵解碼。每個熵解碼器接收編碼子序列之一,對其進(jìn)行熵解碼,并輸出解碼符號子序列。在步驟510,對N個解碼子序列進(jìn)行交織,以形成重構(gòu)符號序列?;谏舷挛哪P蛯獯a子序列進(jìn)行交織。具體地,解碼器基于上下文模型確定每個比特的估計概率,并基于估計概率從與該估計概率相關(guān)聯(lián)的解碼子序列中選擇符號。然后,在步驟512,輸出重構(gòu)符號序列。可以理解,步驟512可以包括向視頻或圖像解碼器的其余部分提供重構(gòu)符號序列,如這種解碼器內(nèi)的解量化和反變換過程。在本實施例中,在步驟506/508,解碼器能夠基于以預(yù)定順序置于有效載荷字段中的“源”來確定與有效載荷字段內(nèi)的每個編碼子序列比特流相關(guān)聯(lián)的“源”。在這種示例實施例中,不具有符號的源在編碼器處輸出空(NULL)碼;或者編碼器確保前綴針對該源指定“O”長度編碼子序列。在另一實施例中,該順序不是預(yù)定的。在一個示例中,編碼器指定該順序,并標(biāo)識與每個編碼子序列相關(guān)聯(lián)的概率,例如通過將這種信息置于前綴字段中。在另一實施例中,可以將概率信息置于有效載荷字段內(nèi),作為編碼子序列的前綴或后綴。在另一示例實施例中,可以使用索引方案來傳送序列的順序,而不發(fā)送顯式概率。例如,每個編碼器/解碼器可以具有索引,子序列可以均具有指定其編碼器/解碼器索引的首部部分,這允許比特流全部避免首部部分。本領(lǐng)域技術(shù)人員可以認(rèn)識到其他可能性。在一些實例中,并行編碼或解碼處理單元的數(shù)目d,即并行熵編碼器206 (圖4)或解碼器306(圖5)的數(shù)目,可以不同于不同估計概率的數(shù)目N。在一種情況下,解碼器可以具有比N個概率更少的并行解碼器306。解碼器可以采用調(diào)度來使一個或多個解碼器處理多個子序列,從而將并行度減少一定程度。然而,在一種情況下,如果編碼器知道解碼器具有d < Nf解碼器306,編碼器可以將一些源/概率合并,使得編碼器產(chǎn)生的子序列數(shù)目不大于d。在另一場景中,如果解碼器具有d > N個解碼器306,則編碼器可以對一些源/概 率進(jìn)行劃分,以最大化可用并行解碼器306的使用。
在另一場景中,編碼器預(yù)先不知道在解碼器中有多少并行解碼器306可用。在這種情況下,如果解碼器具有的并行解碼器306少于編碼器產(chǎn)生的子序列,則解碼器不能并行處理所有子序列,解碼器可以調(diào)度解碼器306在子序列中的使用。對于并行解碼處理單元的數(shù)目d不同于N的實例,有利地,具有用于對源輸出進(jìn)行組合(對于d < N)或劃分(對于d > N)的機(jī)制。對于該示例機(jī)制,編碼器在編碼時知道值d。然而,如果解碼器不具有d個解碼單元,仍能夠?qū)崿F(xiàn)無損解碼。在本示例中,令P為源k的LPS概率。輸出序列k的開銷被認(rèn)為是0H(k)=8* I C (L (k)) I -4*log (1-p) +4,其中C | (v)是使用上述前綴碼表示值v的字節(jié)數(shù)目。如果存在具有 LPS 概率 q 的源 m,對于序列 m, OH (k) > N (k) * [p*log (p/q) + (l_p) log ((l_p) / (l_q))],其中N(k)是源k的輸出中的二進(jìn)制符號的數(shù)目,則將源k的輸出與源m的輸出合并,并對于合并序列使用LPS = q。只要0H(k)/N(k)大于一些源k和m之間的相對熵,可以重復(fù)該過程。具有重排的上下文建模根據(jù)上面對子序列的并行編碼和解碼的描述,本領(lǐng)域普通技術(shù)人員將明白這種編碼器或解碼器中的瓶頸可能是上下文建模。在編碼器和解碼器中,上下文建模處理都一次消耗一個比特。例如,在圖4示出的編碼器200處,由上下文建模組件和解復(fù)用器204逐比特地處理輸入序列xl02。特別地,針對輸入序列X 102中的每個連續(xù)比特,首先基于在編碼器200內(nèi)實現(xiàn)的預(yù)定模型確定其上下文。然后,基于具有相同上下文的比特的歷史來確定與該比特關(guān)聯(lián)的概率。換言之,在許多上下文建模方案中,對概率的評估基于上下文特定的比特歷史。具有不同上下文的其他比特具有不同的比特歷史。以這種方式,上下文建模組件和解復(fù)用器204依次針對每個比特找出其上下文,然后找出其概率。應(yīng)該理解,與每個概率關(guān)聯(lián)的序列(b1; b2,...,bn)可以包括具有不同上下文的比特。解碼器300(圖5)使用相同的上下文建模將解碼出的比特重組并交織成重構(gòu)序列310 (圖5)。上下文建模組件和復(fù)用器308 (圖5)確定下一個比特的上下文,并且基于該上下文的比特歷史確定與該下一個比特關(guān)聯(lián)的概率。根據(jù)對概率的確定,上下文建模組件和復(fù)用器308選擇與該概率關(guān)聯(lián)的下一個解碼出的比特。在此基礎(chǔ)上,其逐比特地對比特進(jìn)行交織以創(chuàng)建重構(gòu)的序列310。
根據(jù)本申請的一個方面,修改上下文建模以并入重排處理,其允許上下文建模在某種程度上并行地發(fā)生。輸入序列被重排成比特組,任何組都不大于M個比特,其中可以由上下文建模組件并行地處理每個組,即并行地處理多達(dá)M個比特。重排是在編碼器和解碼器處執(zhí)行的。該重排取決于上下文模型,而不依賴于輸入序列的內(nèi)容,因此可以離線地確定重排調(diào)度。存在兩個強(qiáng)加于每個比特組上的條件。首先,比特組中的每個比特具有與該組中的每個其他比特不同的上下文。換言之,按重排調(diào)度形成比特組,使得沒有任何組包含具有相同上下文的兩個比特。該條件防止了下述循環(huán)問題其中來自相同上下文的兩個比特不能被并行評估,因為分配給那兩個比特的概率將取決于該上下文的比特歷史。如果在該組中存在來自相同上下文的不止一個比特,則不能并行地向它們分配概率,因為它們中的至少一個將改變另一個的比特歷史。因此,按重排調(diào)度形成比特組,使得沒有任何比特組包含具有相同上下文的兩個比特。第二個條件是獨立于該組中的每個其他比特來確定比特組中的每個比特的上下 文。換言之,該組中的每個比特的上下文必須在不參考該組中的其他比特的情況下是可確定的。如果該組中的某個比特的上下文取決于該組中的任意其他比特的內(nèi)容/值,則不滿足第二條件。重排調(diào)度是離線創(chuàng)建的,以避免違反這兩個條件。在該上下文中,離線意味著在編碼或解碼處理之前的任何時間,而不是在編碼或解碼處理期間。重排調(diào)度還可被描述如下。為了方便起見,可以將輸入序列Xi寫為X[i]以及將每個比特Ci的上下文寫為c[i]。對于序列X = X0X1. . . Xlri,替代使用自然順序0,1,2,3,. . . n-1,重排調(diào)度旨在找出新的編碼順序1,J1,... jn_1;使得滿足下述條件存在整數(shù)K,O <= K < n/M,使得對于所有的k < = K :(DXUJXUJ. · .XU+m-J 都具有不同的上下文 c[jkM]c[jkM+1]· · · c []·(_」,以及(2)c[jH]c[jkM+1]· · ·的導(dǎo)數(shù)不取決于 X [jkM]X[jkM+1]· · · X [jik+m]。這樣,本申請?zhí)峁┰诮o定上下文模型中發(fā)現(xiàn)固有的并行性的方法。下面的內(nèi)容是對用于針對給定上下文模型開發(fā)重排調(diào)度以遵照這兩個條件的至少一個示例方法或過程的描述。該過程開始于給定上下文模型,因為重排調(diào)度對于上下文模型是特定的。令X =XtlX1. . . Xlri表示要編碼的隨機(jī)序列。假定希望在解碼器中的上下文建模中同時處理M個比特。該解決方案確定針對X的編碼順序。令F表示長度為M的有序緩沖器,令Ci表示由給定上下文模型確定的Xi的上下文,并且令z表示長度為η的整數(shù)序列??梢允褂孟旅娴氖纠^程來生成重排調(diào)度步驟I :設(shè)j = O, j’ = O,并且初始化z,使得對于所有的O <= i < n, Zi = -I。步驟2 :設(shè)i = j, k = O,并且j = η。將F初始化為空。步驟3 :如果Zi > 0,則跳到步驟5 ;否則繼續(xù)進(jìn)行步驟4。步驟4 :如果Cj不依賴于F中的任何符號,則執(zhí)行下述操作將Xi 插入 F ;設(shè)k = k+Ι ;
Szi = j’ 以及 j’ = j’ +1 ;如果Cj依賴于F中的任何符號,則執(zhí)行下述操作如果i < j ;設(shè) j = i。步驟5:設(shè) i = i+l;步驟6 :重復(fù)步驟3-5,直到k = M或者i = η。步驟7 :如果k = M以及j < η,則清空F,并且跳到步驟2 ;否則繼續(xù)進(jìn)行步驟8。步驟8:令i = j;步驟9 :如果Zi > O,則跳到步驟11 ;否則繼續(xù)進(jìn)行步驟10。
步驟10 :令 Zi = j’ 并且 j’ = j’ +1 ;步驟11 :設(shè) i = i+1 ;步驟12 :重復(fù)步驟9-11,直到j(luò)’ = η。應(yīng)該理解,前述過程是用于實現(xiàn)針對給定上下文模型的滿足上面陳述的用于實現(xiàn)并行上下文建模的兩個條件的重排調(diào)度的過程的一個示例實施例。應(yīng)該理解,可以改進(jìn)上面描述的過程,使得編碼順序可被分割為具有各種并行性的連續(xù)的分段。例如,第一分段允許并行地處理M個比特,第二分段允許并行地處理M-I個比特,依此類推。在一個示例實現(xiàn)中,該過程可以開始于比特組的最大期望的比特數(shù)目Μ??梢苑治鼍哂薪o定上下文模型的序列X,以找出滿足那兩個條件的長度為M的所有可能的組。然后,可以縮短比特組長度,直到序列X的所有比特是組的成員,以及組可以具有從I到M變化的長度。示例過程可以如下步驟I :設(shè) M = 16。步驟2 :根據(jù)輸入序列的比特形成長度為M的所有可能的比特組,其中每個組都滿足那兩個條件。步驟3:設(shè) M = M-I。步驟4 :重復(fù)步驟2和3,直到M = O。此外,因為重排調(diào)度是離線確定的,所以還可以使用窮盡搜索來找出針對給定上下文模型的在并行處理的吞吐量方面的最佳重排。此外,在存在若干競爭上下文模型的情況下,本重排過程或其變型可被用于找出在并行處理方面比其他重排調(diào)度具有更好吞吐量的重排調(diào)度。應(yīng)該指出,此處描述的過程或其變型可被用于改善抗錯能力。還要注意,此處上下文的概念是一般性的,包括編碼判決。例如,在H. 264AVC標(biāo)準(zhǔn)的CABAC中,僅在設(shè)置了相同位置的有效位時,才編碼表明當(dāng)前位置是否是末位有效位置的最末位(bin)判決。因此,盡管H. 264AVC標(biāo)準(zhǔn)中規(guī)定的上下文模型沒提及有效位,但是在上面的解決方案中,上下文模型被擴(kuò)展,使得在重排調(diào)度中反映這種依賴性。現(xiàn)在參考圖10,其以流程圖形式示出用于重排熵編碼的示例方法600。在該示例實施例中,編碼器被配置為執(zhí)行并行熵編碼,盡管本申請不局限于并行熵編碼。方法600開始于在步驟602中接收輸入序列。該輸入序列是屬于有限字母表的符號的序列;在該示例實施例中,該序列是二進(jìn)制的。在步驟604中重排該序列以形成重排的序列。該重排基于針對給定上下文模型的滿足上面陳述的兩個條件的重排調(diào)度。如上面討論的,該重排調(diào)度是針對給定上下文模型預(yù)先確定的。如此形成的重排調(diào)度由級聯(lián)的滿足那兩個條件的比特組構(gòu)成。然后,并行地處理每個比特組,以便將比特指派給適當(dāng)?shù)撵鼐幋a器。具體地,如步驟606中所示,針對每個比特組,并行地確定每個比特的上下文。然后,基于每個比特的上下文和該上下文的比 特歷史,將每個比特與概率相關(guān)聯(lián)。上下文的確定和與概率的關(guān)聯(lián)針對組中的比特并行地發(fā)生。然后,基于每個比特的關(guān)聯(lián)概率,將每個比特指派給適當(dāng)?shù)撵鼐幋a器。在步驟608中,如前面所述,并行熵編碼器并行地編碼比特以產(chǎn)生編碼數(shù)據(jù)的比特流。圖10中的示例處理假定了并行熵編碼。應(yīng)該理解,此處描述的重排上下文建模不一定涉及并行熵編碼。重排上下文建模提高了編碼過程的上下文建模方面的吞吐量;使用該上下文信息的對輸入比特的熵編碼可以是并行的或串行的。例如,重排上下文建模可以與H. 264的CABAC —起使用。下面對示例解碼過程的描述也假設(shè)了使用并行熵解碼。應(yīng)該理解,本申請不限于并行熵解碼。下面描述的重排上下文建??梢耘c并行或串行熵解碼一起使用。現(xiàn)在參考圖11,其以流程圖形式示出用于使用重排上下文建模對編碼比特流進(jìn)行解碼的示例方法700。方法700開始于在步驟702中接收編碼比特流。如上所述,可以對編碼比特流進(jìn)行熵解碼以產(chǎn)生多個均與具體概率關(guān)聯(lián)的解碼出的子序列,如步驟704中所指示的那樣。在本實施例中,解碼可以使用多個并行熵解碼器來發(fā)生,以產(chǎn)生多個解碼出的子序列。在另一個實施例中,解碼器可以使用串行熵解碼器來產(chǎn)生單個解碼出的序列。在步驟706中,使用上下文建模生成中間序列,以將來自解碼出的子序列的比特指派給中間序列,由此對比特進(jìn)行交織以重建或重構(gòu)“重排的”輸入序列。換言之,中間序列是多個級聯(lián)的比特組。為了重構(gòu)比特組,步驟706涉及確定下一個比特組中的每個比特的上下文,即該比特組中的每個比特位置的上下文。然后,使用該上下文以及與該上下文相關(guān)聯(lián)的比特歷史,確定與該比特位置關(guān)聯(lián)的概率。應(yīng)該理解,組中的每個比特位置的上下文的確定以及與該比特位置的概率的關(guān)聯(lián)是針對組中的比特并行執(zhí)行的。然后,基于比特位置的關(guān)聯(lián)的概率,將來自解碼出的子序列的比特指派給那些位置,以形成和輸出比特組。然后以類似方式生成下一個比特組。然后,在步驟708中,基于在編碼器處使用的相同重排調(diào)度,對如此形成的中間序列進(jìn)行重排。重排調(diào)度描述了將如何重排比特組以形成重構(gòu)的序列。然后,重構(gòu)的序列可用于解碼處理的其余部分,諸如解量化、反變換、運動或空間補(bǔ)償,等等。應(yīng)該理解,中間序列不一定是在串行熵解碼的情況下形成的。用于解碼的方法可以包括解碼比特流以產(chǎn)生解碼出的比特組。對于每個組,產(chǎn)生該比特組的解碼是基于上下文建模過程的。上下文建模過程可以利用重排的比特組中的可用的并行性,如果它們已經(jīng)被如此編碼的話。因此,針對每個比特組,解碼器確定上下文,并且基于比特的上下文將比特與概率相關(guān)聯(lián)。如果比特組滿足上面闡述的兩個條件,則可以針對比特組中的所有比特并行地進(jìn)行上述操作。這兩個條件即該比特組中的每個比特的上下文不同于該組中的每個其他比特的上下文,以及獨立于該組中的每個其他比特來確定該組中的每個比特的上下文。針對具體上下文模型離線開發(fā)的并且在編碼過程中使用的重排調(diào)度對于解碼器而言是已知的。因此,解碼器能夠基于該重排調(diào)度對比特組的解碼出的比特進(jìn)行重排,以將比特返回它們的原本順序,并且因此產(chǎn)生重構(gòu)的比特序列?,F(xiàn)在參照圖8,圖8示出了編碼器900的示例實施例的簡化框圖。編碼器900包括處理器902、存儲器904和編碼應(yīng)用906。編碼應(yīng)用906可以包括存儲在存儲器904中并包含指令的計算機(jī)程序或應(yīng)用,所述指令用于將處理器902配置為執(zhí)行這里描述的步驟或操作。例如,編碼應(yīng)用906可以編碼并輸出根據(jù)這里描述的并行熵編碼過程編碼的視頻比特流。編碼應(yīng)用906可以包括熵編碼器26,被配置為使用這里描述的一個或多個過程,對輸入序列進(jìn)行熵編碼,并輸出比特流??梢岳斫猓幋a應(yīng)用906可以存儲在計算機(jī)可讀介質(zhì)上,如致密光盤、閃存設(shè)備、隨機(jī)存取存儲器、硬盤等等。在一些實施例中,編碼器900中的處理器902可以是單一處理單元,被配置為實現(xiàn)編碼應(yīng)用906的指令。在一些其他實施例中,處理器902可以包括能夠并行執(zhí)行指令的多于一個處理單元。多個處理單元可以是邏輯上或物理上單獨的處理單元。在一些實例中,編碼器900可以包括N個或更多處理單元,其中編碼應(yīng)用906將處理單元中的N個處理單元配置為實現(xiàn)這里描述的方法。還可以認(rèn)識到,在一些實例中,編碼應(yīng)用906的一些或全部 操作以及一個或多個處理單元可以通過專用集成電路(ASIC)等等來實現(xiàn)。參照還參照圖9,圖9示出了解碼器1000的示例實施例的簡化框圖。解碼器1000包括處理器1002、存儲器1004和解碼應(yīng)用1006。解碼應(yīng)用1006可以包括存儲在存儲器1004中并包含指令的計算機(jī)程序或應(yīng)用,所述指令用于將處理器1002配置為執(zhí)行這里描述的步驟或操作。解碼應(yīng)用1006可以包括熵解碼器1008,被配置為接收根據(jù)這里描述的熵編碼過程來編碼的比特流,以及從比特流中提取編碼數(shù)據(jù)。解碼應(yīng)用1006可以將處理器配置為對編碼子序列進(jìn)行并行解碼,以產(chǎn)生重構(gòu)序列,如這里所述。可以理解,解碼應(yīng)用1006可以存儲在計算機(jī)可讀介質(zhì)上,如致密光盤、閃存設(shè)備、隨機(jī)存取存儲器、硬盤等等。在一些實施例中,解碼器1000中的處理器1002可以是單一處理單元,被配置為實現(xiàn)解碼應(yīng)用1006的指令。在一些其他實施例中,處理器1002可以包括能夠并行執(zhí)行指令的多于一個處理單元。多個處理單元可以是邏輯上或物理上單獨的處理單元。在一些實例中,解碼器1000可以包括d個、N個或更多或更少的處理單元,其中解碼應(yīng)用1006將處理單元配置作為并行熵解碼器操作,以實現(xiàn)這里描述的方法。還可以認(rèn)識到,在一些實例中,解碼應(yīng)用1006的一些或全部操作以及一個或多個處理單元可以通過專用集成電路(ASIC)等等來實現(xiàn)??梢哉J(rèn)識到,根據(jù)本申請的解碼器和/或編碼器可以在多個計算設(shè)備中實現(xiàn),包括但不限于服務(wù)器、合適編程的通用計算機(jī)、電視機(jī)頂盒、電視廣播設(shè)備和移動設(shè)備。可以通過包含指令的軟件來實現(xiàn)解碼器或編碼器,所述指令用于將處理器配置為執(zhí)行這里描述的功能。軟件指令可以存儲在任何合適的計算機(jī)可讀存儲器上,包括CD、RAM、ROM、閃存等
坐寸ο可以理解,這里描述的編碼器和解碼器以及實現(xiàn)所描述的用于配置編碼器的方法/過程的模塊、例程、進(jìn)程、線程或其他軟件組件可以使用標(biāo)準(zhǔn)計算機(jī)編程技術(shù)和語言來實現(xiàn)。本申請不限于特定處理器、計算機(jī)語言、計算機(jī)編程慣例、數(shù)據(jù)結(jié)構(gòu)、其他這種實現(xiàn)細(xì)節(jié)。本領(lǐng)域技術(shù)人員將認(rèn)識到,可以將所描述的過程實現(xiàn)為存儲在易失性或非易失性存儲器中的計算機(jī)可執(zhí)行代碼的一部分、專用集成芯片(ASIC)的一部分等。
可以對所描述的實施例進(jìn)行特定適配和修改。因此,上述實施例被認(rèn)為是示意性 而非限制性。
權(quán)利要求
1.一種用于對輸入比特序列進(jìn)行編碼的方法,所述方法包括 根據(jù)預(yù)定的重排調(diào)度將所述輸入比特序列重排成輸入比特組, 針對每個輸入比特組, 并行確定所述輸入比特組中的每個輸入比特的上下文,并且基于每個輸入比特的上下文將該比特與概率相關(guān)聯(lián), 其中所述組中的每個輸入比特的上下文與所述組中的每個其他輸入比特的上下文不同,并且獨立于所述組中的其他輸入比特來確定所述組中的每個輸入比特的上下文;以及對輸入比特進(jìn)行熵編碼以生成編碼序列。
2.根據(jù)權(quán)利要求I所述的方法,其中所述重排調(diào)度定義在所述重排中所述輸入序列中的比特被分配到的所述輸入比特組。
3.根據(jù)權(quán)利要求2所述的方法,其中所述重排調(diào)度是離線確定的,并且基于預(yù)定義的上下文模型。
4.根據(jù)權(quán)利要求3所述的方法,還包括定義所述重排調(diào)度。
5.根據(jù)權(quán)利要求1-4中任一項所述的方法,其中確定還包括基于所述輸入比特組中的每個比特的關(guān)聯(lián)概率將該比特指派給多個并行熵編碼器之一。
6.一種用于對輸入符號序列進(jìn)行編碼的編碼器,所述符號屬于有限字母表,所述編碼器包括 處理器; 存儲器;以及 編碼應(yīng)用,存儲在所述存儲器中,并且包含用于將所述處理器配置為執(zhí)行下述操作的指令 根據(jù)預(yù)定的重排調(diào)度將所述輸入比特序列重排成輸入比特組, 針對每個輸入比特組, 并行確定所述輸入比特組中的每個輸入比特的上下文,并且基于每個輸入比特的上下文將該比特與概率相關(guān)聯(lián), 其中所述組中的每個輸入比特的上下文與所述組中的每個其他輸入比特的上下文不同,并且獨立于所述組中的其他輸入比特來確定所述組中的每個輸入比特的上下文;以及對輸入比特進(jìn)行熵編碼以生成編碼序列。
7.根據(jù)權(quán)利要求6所述的編碼器,其中所述重排調(diào)度定義在所述重排中所述輸入序列中的比特被分配到的所述輸入比特組。
8.根據(jù)權(quán)利要求7所述的編碼器,其中所述重排調(diào)度是離線確定的,并且基于預(yù)定義的上下文模型,以及所述存儲器存儲所述重排調(diào)度。
9.根據(jù)權(quán)利要求6-8中任一項所述的編碼器,其中所述編碼器包括多個并行熵編碼器,并且所述處理器被配置為基于所述輸入比特組中的每個比特的關(guān)聯(lián)概率將該比特指派給多個并行熵編碼器之一。
10.一種用于對編碼數(shù)據(jù)的比特流進(jìn)行解碼以重構(gòu)比特序列的方法,所述方法包括 對編碼數(shù)據(jù)的比特流進(jìn)行解碼以產(chǎn)生解碼比特組,其中,對于每個比特組,產(chǎn)生所述比特組的解碼包括確定針對所述比特組中的每個比特的上下文,并且基于該比特的上下文將該比特與概率相關(guān)聯(lián),以及其中所述比特組中的每個比特的上下文與所述組中的每個其他比特的上下文不同,并且獨立于所述組中的每個其他比特來確定所述組中的每個比特的上下文;以及 基于預(yù)定的重排調(diào)度重排比特組中的比特以產(chǎn)生重構(gòu)的比特序列。
11.根據(jù)權(quán)利要求10所述的方法,其中所述重排調(diào)度定義了比特組以及重排所述比特組中的比特以產(chǎn)生重構(gòu)的比特序列的方式。
12.根據(jù)權(quán)利要求11所述的方法,其中所述重排調(diào)度是離線確定的,并且基于預(yù)定義的上下文模型。
13.根據(jù)權(quán)利要求12所述的方法,還包括定義所述重排調(diào)度。
14.一種用于對編碼數(shù)據(jù)的比特流進(jìn)行解碼以重構(gòu)符號序列的解碼器,所述符號屬于有限字母表,所述解碼器包括 處理器; 存儲器;以及 解碼應(yīng)用,存儲在所述存儲器中,并且包含用于將所述處理器配置為執(zhí)行下述操作的指令 對編碼數(shù)據(jù)的比特流進(jìn)行解碼以產(chǎn)生解碼比特組,其中,對于每個比特組,產(chǎn)生所述比特組的解碼包括確定針對所述比特組中的每個比特的上下文,并且基于該比特的上下文將該比特與概率相關(guān)聯(lián),以及其中所述比特組中的每個比特的上下文與所述組中的每個其他比特的上下文不同,并且獨立于所述組中的每個其他比特來確定所述組中的每個比特的上下文;以及 基于預(yù)定的重排調(diào)度重排比特組中的比特以產(chǎn)生重構(gòu)的比特序列。
15.根據(jù)權(quán)利要求14所述的解碼器,其中所述重排調(diào)度定義了比特組以及重排所述比特組中的比特以產(chǎn)生重構(gòu)的比特序列的方式。
16.根據(jù)權(quán)利要求15所述的解碼器,其中所述重排調(diào)度是離線確定的,并且基于預(yù)定義的上下文模型,以及所述存儲器存儲所述重排調(diào)度。
17.一種計算機(jī)可讀介質(zhì),存儲用于將處理器配置為執(zhí)行權(quán)利要求1-5中的任一項所述的方法的計算機(jī)可執(zhí)行指令。
18.一種計算機(jī)可讀介質(zhì),存儲用于將處理器配置為執(zhí)行權(quán)利要求10-13中的任一項所述的方法的計算機(jī)可執(zhí)行指令。
全文摘要
一種用于根據(jù)上下文模型特定的重排調(diào)度、通過對輸入序列中的比特進(jìn)行重排以形成比特組的并行上下文建模的方法。重排調(diào)度被開發(fā)為使得形成的比特組滿足兩個條件第一,比特組中的每個比特的上下文與該組中的每個其他比特的上下文不同;以及獨立于該組中的每個其他比特來確定該組中的每個比特的上下文。該并行上下文建??梢栽诰幋a或解碼操作中使用。
文檔編號H03M7/30GK102845065SQ201180019702
公開日2012年12月26日 申請日期2011年4月19日 優(yōu)先權(quán)日2010年4月19日
發(fā)明者何大可, 格爾·克里斯蒂娜·馬丁-科謝, 喬治里·弗倫茨·科羅迪 申請人:捷訊研究有限公司