專利名稱:用于上下文算術(shù)編解碼的運(yùn)算單元的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻解碼系統(tǒng)領(lǐng)域,尤其是一種用于上下文算術(shù)編解碼的運(yùn)算單元。
背景技術(shù):
在視頻解碼系統(tǒng)中,包括用于上下文算術(shù)編解碼的運(yùn)算單元也稱作CABAC編解碼 CABAC (Context-based Adaptive Binary Arithmetic Coding,白勺自iSiS胃
術(shù)編碼)是國際視頻編碼標(biāo)準(zhǔn)H. 264采用的一種熵編碼方案。CABAC有較高的壓縮效率,但是實(shí)現(xiàn)起來也較復(fù)雜。熵編碼器的功能是將每個(gè)宏塊(MB,micro block)中所有的語法元素的值按照一定的順序編碼到碼流中。一個(gè)語法元素在二進(jìn)制化之后包含一個(gè)以上的二進(jìn)制位,每一個(gè)二進(jìn)制位稱為一個(gè)bin,CABAC對(duì)一個(gè)bin的解碼流程大致為1選擇上下文概率模型,讀取上下文變量pStateIdX(概率狀態(tài)索引)和 valMPS (大概率符號(hào)值)2根據(jù)上下文變量pMateldx把解碼區(qū)間codIRange劃分為兩個(gè)子區(qū)間小概率符號(hào)區(qū)間(用變量codIRangeLPS表示)和大概率符號(hào)區(qū)間(用變量codIRange表示)。3根據(jù)變量codIOffset (解碼偏移)的大小,輸出當(dāng)前解碼bin (二進(jìn)制位)的值, 如果codIOffset落在大概率符號(hào)區(qū)間中,則解碼區(qū)間更新為大概率符號(hào)區(qū)間,否則,解碼區(qū)間更新為小概率符號(hào)區(qū)間。4根據(jù)當(dāng)前解碼bin的值來自適應(yīng)的更新上下文變量pMateldx和valMPS的值。5 對(duì) codIRange 禾口 codIOffset 進(jìn)行重歸一化。當(dāng)一個(gè)語法元素的所有bin解碼完畢,則將這些bin轉(zhuǎn)換成語法元素的值。以上僅是關(guān)于CABAC解碼的原理性描述,有關(guān)CABAC解碼的詳細(xì)過程可以參考 H. 264標(biāo)準(zhǔn),此處不再贅述。一個(gè)CABAC解碼器的性能指標(biāo)主要包含解碼速度和存儲(chǔ)器消耗量,一個(gè)高性能的 CABAC解碼器應(yīng)該在消耗盡量少的存儲(chǔ)器的情況下獲得盡量高的解碼速度。限制CABAC解碼器性能提高的主要因素也就可以分成兩個(gè)方面,一方面是限制解碼速度提高的因素,一方面是限制存儲(chǔ)器消耗量降低的因素。限制解碼速度提高的主要因素是解碼的竄行性以及對(duì)存儲(chǔ)器的頻繁訪問,解碼的竄行性體現(xiàn)在當(dāng)前bin的解碼依賴于先前已解碼bin的值并且解碼過程中用到的變量是逐次傳遞的,這給流水線的實(shí)現(xiàn)造成了困難,于是限制住了解碼器的解碼速度和吞吐量;對(duì)存儲(chǔ)器的頻繁訪問體現(xiàn)在對(duì)概率模型和相鄰信息的讀取。限制存儲(chǔ)器消耗量降低的主要因素在于存儲(chǔ)上下文概率模型和已解碼的相鄰宏塊信息。目前已經(jīng)公開的硬件CABAC解碼器往往解碼速度不夠高,或者存儲(chǔ)器消耗量過大,也就是性能還有待于進(jìn)一步優(yōu)化。
發(fā)明內(nèi)容
為了克服已有視頻解碼系統(tǒng)的CABAC編解碼器的解碼速度較低、存儲(chǔ)器消耗量過大的不足,本發(fā)明提供一種解碼速度較快、降低存儲(chǔ)器消耗量的用于上下文算術(shù)編解碼的運(yùn)算單元。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是一種用于上下文算術(shù)編解碼的運(yùn)算單元,所述運(yùn)算單元包括所述CABAC解碼控制模塊,用于控制整個(gè)CABAC解碼;語法元素解碼控制模塊,用于控制各個(gè)語法元素的解碼,主要負(fù)責(zé)計(jì)算上下文概率模型的索引和判斷各個(gè)語法元素解碼的結(jié)束,并在語法元素解碼結(jié)束的時(shí)候根據(jù)解碼的 bin串得出語法元素的值,以及計(jì)算在一個(gè)語法元素的解碼過程中從碼流中讀入的bit數(shù);所述運(yùn)算單元還包括概率模型緩存模塊,用于緩存當(dāng)前解碼所需的概率模型;存儲(chǔ)器訪問控制模塊,用于控制對(duì)RAM的訪問,控制RAM和概率模型緩存模塊之間的數(shù)據(jù)交互,當(dāng)概率模型緩存模塊中不含有當(dāng)前解碼所需的概率模型時(shí),對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行保存并對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行更新;解碼引擎模塊,用于進(jìn)行算術(shù)解碼,并計(jì)算在一個(gè)bin的解碼過程中從碼流中讀入的bit數(shù)。進(jìn)一步,所述解碼引擎模塊包括概率模型更新子模塊,用于根據(jù)解碼bin的值對(duì)相應(yīng)的概率模型進(jìn)行更新;解碼bin選擇子模塊,用于從四個(gè)解碼引擎的解碼bin輸出中選出有效的位,當(dāng)前工作的解碼引擎的輸出bin即為有效的位;解碼引擎選擇子模塊,用于根據(jù)控制信號(hào)產(chǎn)生四個(gè)解碼引擎的使能信號(hào);重歸一化子模塊,用于對(duì)解碼引擎狀態(tài)變量codIRange和codIOffset進(jìn)行重歸一化;四個(gè)解碼引擎子模塊,用于進(jìn)行算術(shù)解碼,包含一個(gè)常規(guī)解碼引擎、一個(gè)結(jié)束解碼引擎和兩個(gè)旁路解碼引擎,兩個(gè)旁路解碼引擎并行工作,在一個(gè)時(shí)鐘周期中解碼出兩個(gè) bin。再進(jìn)一步,所述概率模型緩存模塊包含16個(gè)7位的寄存器,所述16個(gè)寄存器作為
一組來進(jìn)行管理。更進(jìn)一步,所述語法元素解碼控制模塊包括一元解碼控制子模塊,用于控制采用一元二值化的語法元素的解碼,包括ref_ idx—10、ref—idx—11 禾口 mb—qp—delta ;截尾一元解碼控制子模塊,用于控制采用截尾一元二值化的語法元素的解碼,包括intra—chroma—pred—mode、coded—block—pattern、mvdlO/l
禾口 coeff—abs_level_ minusl ;指數(shù)哥倫布解碼控制子模塊,用于控制采用指數(shù)哥倫布二值化的語法元素的解碼,包括mvdl0/l
和 coeff_abs_level_minusl ;固定長(zhǎng)度解碼控制子模塊,用于控制采用固定長(zhǎng)度二值化的語法元素的解碼,包括rem—intra—4x4—pred—mode、coded—block—pattern 禾口 pre_intra—4x4—pred—mode ;宏塊類型解碼控制子模塊,用于控制語法元素mb_type的解碼;子宏塊類型解碼控制子模塊,用于控制語法元素SUb_mb_type的解碼;
5
宏塊略過標(biāo)志解碼控制子模塊,用于控制語法元素mb_Skip_flag的解碼,并調(diào)用固定長(zhǎng)度解碼控制子模塊;宏塊場(chǎng)解碼標(biāo)志解碼控制子模塊,用于控制語法元素mb_field_deCOding_flag 的解碼,該并調(diào)用固定長(zhǎng)度解碼控制子模塊;殘差解碼控制子模塊,用于控制和殘差相關(guān)的語法元素包括COded_blOCk_flag、 significant_coeff_flag、 last_significant_coeff_flag、 coeff—abs_level—minusl 禾口 coeff—sign_flag ;運(yùn)動(dòng)矢量解碼控制子模塊,用于控制語法元素mvd的解碼;編碼塊類型解碼控制子模塊,用于控制語法元素COded_blOCk_pattern的解碼。本發(fā)明的技術(shù)構(gòu)思為采用緩存模塊保存當(dāng)前解碼需要使用的一組概率模型,以減少對(duì)RAM(隨機(jī)訪問存儲(chǔ)器)的訪問次數(shù);采用兩個(gè)旁路解碼引擎,增強(qiáng)解碼的并行性。本發(fā)明的有益效果主要表現(xiàn)在用全硬件的方式實(shí)現(xiàn)了 CABAC解碼器,同時(shí)實(shí)現(xiàn)了兩個(gè)旁路解碼引擎,解碼速度較快,消耗的存儲(chǔ)器較少。
圖1是本發(fā)明提供的CABAC解碼器的結(jié)構(gòu)框圖。圖2是本發(fā)明提供的CABAC解碼器中的CABAC解碼控制模塊的工作流程圖。圖3是本發(fā)明提供的CABAC解碼器中的語法元素解碼控制模塊的結(jié)構(gòu)框圖。圖4是本發(fā)明提供的CABAC解碼器中的存儲(chǔ)器訪問控制模塊的工作流程圖。圖5是本發(fā)明提供的CABAC解碼器中的概率模型緩存模塊的結(jié)果框圖。圖6是本發(fā)明提供的CABAC解碼器中的解碼引擎模塊的結(jié)構(gòu)框圖。圖7是存儲(chǔ)器訪問控制模塊的工作流程圖。圖8是概率模型緩存模塊的結(jié)構(gòu)框圖。 圖9是解碼引擎模塊的結(jié)構(gòu)框圖。
圖10是解碼引擎模塊的工作流程圖。 圖11是常規(guī)解碼的邏輯電路圖。 圖12是旁路解碼引擎核心的結(jié)構(gòu)框圖。 圖13是實(shí)現(xiàn)旁路解碼的邏輯電路圖。 圖14是實(shí)現(xiàn)結(jié)束解碼的邏輯電路圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步描述。
參照?qǐng)D1 圖14,一種用于上下文算術(shù)編解碼的運(yùn)算單元(CABAC解碼器),所述解碼器包括五個(gè)模塊,分別是CABAC解碼控制模塊、語法元素解碼控制模塊、存儲(chǔ)器訪問控制模塊、概率模型緩存模塊和解碼引擎模塊。其中所述CABAC解碼控制模塊,用于控制整個(gè)CABAC解碼,由一個(gè)有限狀態(tài)機(jī)來實(shí)現(xiàn)。所述語法元素解碼控制模塊,用于控制各個(gè)語法元素的解碼,主要負(fù)責(zé)計(jì)算上下文概率模型的索引和判斷各個(gè)語法元素解碼的結(jié)束,并在語法元素解碼結(jié)束的時(shí)候根據(jù)解碼的bin串得出語法元素的值。該模塊的另一個(gè)作用是計(jì)算在一個(gè)語法元素的解碼過程中從碼流中讀入的bit (碼流中的一個(gè)二進(jìn)制位)數(shù)。所述存儲(chǔ)器訪問控制模塊,用于控制對(duì)RAM的訪問,該模塊是RAM和概率模型緩存模塊之間的橋梁,當(dāng)概率模型緩存模塊中不含有當(dāng)前解碼所需的概率模型時(shí),該模塊負(fù)責(zé)對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行保存并對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行更新。所述概率模型緩存模塊,用于緩存當(dāng)前解碼所需的概率模型,以減少對(duì)RAM的訪問次數(shù),提高解碼速度。所述解碼引擎模塊,用于進(jìn)行算術(shù)解碼,該模塊的另一個(gè)作用是計(jì)算在一個(gè)bin 的解碼過程中從碼流中讀入的bit數(shù)。所述概率模型緩存模塊包含16個(gè)7位的寄存器,這16個(gè)寄存器作為一組來進(jìn)行管理。所述解碼引擎模塊包含八個(gè)模塊,分別是概率模型更新子模塊、解碼bin選擇子模塊、解碼引擎選擇子模塊、重歸一化子模塊和四個(gè)解碼引擎子模塊。其中概率模型更新子模塊,用于根據(jù)解碼bin的值對(duì)相應(yīng)的概率模型進(jìn)行更新。解碼bin選擇子模塊,用于從四個(gè)解碼引擎的解碼bin輸出中選出有效的位,當(dāng)前工作的解碼引擎的輸出bin即為有效的位。解碼引擎選擇子模塊,用于根據(jù)控制信號(hào)產(chǎn)生四個(gè)解碼引擎的使能信號(hào)。重歸一化子模塊,用于對(duì)解碼引擎狀態(tài)變量codIRange和codIOffset進(jìn)行重歸一化。四個(gè)解碼引擎子模塊,用于進(jìn)行算術(shù)解碼,這四個(gè)解碼引擎包含一個(gè)常規(guī)解碼引擎、一個(gè)結(jié)束解碼引擎和兩個(gè)旁路解碼引擎。兩個(gè)旁路解碼引擎在一定的條件下并行工作, 同時(shí)解碼出兩個(gè)bin,提高解碼速度。所述語法元素解碼控制模塊包含十一個(gè)模塊,分別是一元解碼控制子模塊、截尾一元解碼控制子模塊、指數(shù)哥倫布解碼控制子模塊、固定長(zhǎng)度解碼控制子模塊、宏塊類型解碼控制子模塊、子宏塊類型解碼控制子模塊、宏塊掠過標(biāo)志解碼控制子模塊、宏塊場(chǎng)解碼標(biāo)志解碼控制子模塊、殘差解碼控制子模塊、運(yùn)動(dòng)矢量解碼控制子模塊和編碼塊類型解碼控制子模塊。這十一個(gè)子模塊分別控制相應(yīng)的一些語法元素的解碼,它們都是通過有限狀態(tài)機(jī)來實(shí)現(xiàn)。其中一元解碼控制子模塊,用于控制采用一元二值化的語法元素的解碼,包括ref_ idx_10(前向參考索引)、ref_idx_ll(后向參考索引)和mb_qp_delta(宏塊量化參數(shù)增
量)O截尾一元解碼控制子模塊,用于控制采用截尾一元二值化的語法元素的解碼,包括intra_chroma_pred_mode (中貞內(nèi)色度預(yù)測(cè)模式)、coded_block_pattern (編碼塊模式的后綴)、mvdl0/l
(運(yùn)動(dòng)矢量差值的前綴)和c0eff_abS_level_minuSl (系數(shù)絕對(duì)值減一的前綴)。指數(shù)哥倫布解碼控制子模塊,用于控制采用指數(shù)哥倫布二值化的語法元素的解碼,包括mvdl0/l
(運(yùn)動(dòng)矢量差值的后綴)和c0eff_abS_level_minuSl (系數(shù)絕對(duì)值減一的后綴)。固定長(zhǎng)度解碼控制子模塊,用于控制采用固定長(zhǎng)度二值化的語法元素的解碼,包括:rem_intra_4x4_pred_mode (推薦的幀內(nèi) 4x4 分塊預(yù)測(cè)模式)、coded_block_
7pattern (編碼塊模式的前綴)和pre_intra_4x4_pred_mode (前一個(gè)幀內(nèi)4x4分塊預(yù)測(cè)模式)O宏塊類型解碼控制子模塊,用于控制語法元素mb_type (宏塊類型)的解碼。子宏塊類型解碼控制子模塊,用于控制語法元素SUb_mb_type (子宏塊類型)的解碼。宏塊略過標(biāo)志解碼控制子模塊,用于控制語法元素mb_Skip_flag (宏塊略過標(biāo)志)的解碼,該模塊在滿足一定的條件時(shí)調(diào)用固定長(zhǎng)度解碼控制子模塊。 宏塊場(chǎng)解碼標(biāo)志解碼控制子模塊,用于控制語法元素mb_field_deCOding_ flag(宏塊場(chǎng)解碼標(biāo)志)的解碼,該模塊在滿足一定的條件時(shí)調(diào)用固定長(zhǎng)度解碼控制子模塊。殘差解碼控制子模塊,用于控制和殘差相關(guān)的語法元素包括COded_blOCk_ flag(編碼塊標(biāo)志)、significant_coeff_flag(有效系數(shù)標(biāo)志)、last_significant_ coeff_flag (最后有效系數(shù)標(biāo)志)、coeff_abs_level_minusl (系數(shù)絕對(duì)值減一)和coeff_ Sign_flag(系數(shù)符號(hào)標(biāo)志)。運(yùn)動(dòng)矢量解碼控制子模塊,用于控制語法元素mvd(運(yùn)動(dòng)矢量差值)的解碼。編碼塊類型解碼控制子模塊,用于控制語法元素COded_blOCk_pattern (編碼塊模式)的解碼。圖1示出了本發(fā)明提供的CABAC解碼器的整體結(jié)構(gòu),描述了各個(gè)模塊之間的連接關(guān)系和信息傳遞關(guān)系。其中的CABAC解碼控制模塊用于控制整個(gè)CABAC解碼,由一個(gè)狀態(tài)機(jī)實(shí)現(xiàn)(稱為 CABAC解碼控制狀態(tài)機(jī))。該模塊受視頻解碼系統(tǒng)的控制信息控制,當(dāng)開始解碼宏塊層的語法元素時(shí),如果視頻的熵編碼方式是CABAC,則視頻解碼系統(tǒng)在此時(shí)會(huì)給出CABAC解碼的使能信號(hào),當(dāng)CABAC解碼控制模塊收到使能信號(hào),整個(gè)CABAC解碼器就開始工作了。該模塊的工作流程如圖3所示步驟一狀態(tài)機(jī)開始處于空閑狀態(tài),解碼開始后,首先檢查是否需要對(duì)上下文概率模型以及解碼引擎進(jìn)行初始化,如果需要進(jìn)行初始化,則進(jìn)行步驟二,否則進(jìn)行步驟三。步驟二 該步驟狀態(tài)機(jī)處于初始化狀態(tài)。當(dāng)一個(gè)slice (條帶)解碼完畢(即語法元素end_0f_Slice_flag(條帶結(jié)束標(biāo)志)的解碼值為1)就對(duì)上下文概率模型和解碼引擎進(jìn)行初始化;當(dāng)一個(gè)I_PCM(幀內(nèi)立即刷新)宏塊解碼完畢(即語法元素mb_type(宏塊類型)的解碼值為I_PCM)就對(duì)解碼引擎進(jìn)行初始化,初始化完畢之后狀態(tài)機(jī)回到空閑狀態(tài)。步驟三該步驟狀態(tài)機(jī)處于解碼狀態(tài)。對(duì)一個(gè)語法元素進(jìn)行解碼。一個(gè)語法元素解碼完畢之后,狀態(tài)機(jī)回到空閑狀態(tài)。CABAC解碼控制狀態(tài)機(jī)為CABAC解碼器的頂層控制狀態(tài)機(jī),在該狀態(tài)機(jī)的各個(gè)狀態(tài)會(huì)觸發(fā)其他模塊的子狀態(tài)機(jī)工作。 當(dāng)CABAC解碼控制狀態(tài)機(jī)處于初始化狀態(tài)時(shí),可能對(duì)存儲(chǔ)概率模型的RAM和解碼引擎中的一個(gè)或者兩個(gè)進(jìn)行初始化。當(dāng)對(duì)存儲(chǔ)概率模型的RAM進(jìn)行初始化時(shí),需要使用存儲(chǔ)在ROM (只讀存儲(chǔ)器)中的兩個(gè)變量m和n,以及變量qp (量化參數(shù))的值來進(jìn)行計(jì)算而得出每個(gè)概率模型的具體數(shù)值。當(dāng)對(duì)解碼引擎進(jìn)行初始化時(shí),則將表示解碼引擎狀態(tài)的兩個(gè)變量codIRange和codIOffset分別初始化為OxlFE和read_bits (9)(表示從碼流中讀入9個(gè)比特)。當(dāng)CABAC解碼控制狀態(tài)機(jī)處于解碼狀態(tài)時(shí),CABAC解碼控制模塊就會(huì)給出語法元素解碼控制模塊的使能信號(hào)。使能信號(hào)有效之后,語法元素解碼控制模塊就開始工作了,其工作流程如圖5所示步驟一狀態(tài)機(jī)首先處于空閑狀態(tài),解碼開始后,將變量bin_idX( 二進(jìn)制位索引) 設(shè)置為0,然后進(jìn)行步驟二。步驟二 進(jìn)行算術(shù)解碼。如果語法元素的解碼沒有結(jié)束,則進(jìn)行步驟三,否則進(jìn)行步驟四。步驟三將變量binjdx增加1,然后進(jìn)行步驟二。步驟四對(duì)解碼bin串進(jìn)行反二進(jìn)制化,然后狀態(tài)機(jī)回到空閑狀態(tài)。在步驟二中,根據(jù)解碼的語法元素的不同,會(huì)調(diào)用語法元素解碼控制模塊中的一個(gè)或幾個(gè)子模塊來控制語法元素的解碼。如果語法元素為ref_idX_10、ref_idX_ll或者 mb_qp_delta,則會(huì)調(diào)用一元解碼控制模塊。如果語法元素為intra_Chr0ma_pred_m0de、 coded_block_pattern(后綴)、mvdlO/1
(前綴)或者 coeff_abs_level_minusl (前綴),則會(huì)調(diào)用截尾一元解碼控制模塊。如果語法元素為mvdlO/1
(后綴)或者 coeff_abs_level_minusl (后綴),則會(huì)調(diào)用指數(shù)哥倫布解碼控制模塊。如果語法元素為 rem_intra_4x4_pred_mode、coded_block_pattern (前綴)、coded_block_flag 或者 pre_ intra_4x4_pred_mode,則會(huì)調(diào)用固定長(zhǎng)度解碼控制模塊。如果語法元素為mb_type,則會(huì)調(diào)用宏塊類型解碼控制模塊。如果語法元素為sUb_mb_type,則會(huì)調(diào)用子宏塊類型解碼控制模塊。如果語法元素為mb_Skip_flag,則會(huì)調(diào)用宏塊略過標(biāo)志解碼控制模塊。如果語法元素為mb_field_deC0ding_flag,則會(huì)調(diào)用宏塊場(chǎng)解碼標(biāo)志解碼控制模塊。有一些語法元素是由前綴和后綴級(jí)聯(lián)而成,包括COded_blOCk_pattern、 mvdl0/l
和c0eff_abS_level_minuSl,在解碼這幾個(gè)語法元素時(shí),首先會(huì)調(diào)用這幾個(gè)語法元素對(duì)應(yīng)的解碼控制模塊,這些解碼控制模塊會(huì)在解碼前綴和后綴時(shí)分別調(diào)用對(duì)應(yīng)的解碼控制模塊。和殘差相關(guān)的語法元素,包括coded_block_flag、significant_coeff_flag、 last_significant_coeff_flag> coeff_abs_level_minusl 禾口 coefT_sign_flag,它們是緊密相關(guān)的一組語法元素,于是由一個(gè)殘差解碼控制模塊在整體上來對(duì)它們的解碼進(jìn)行控制,該模塊的工作流程如圖6所示步驟一狀態(tài)機(jī)首先處于空閑狀態(tài),當(dāng)使能信號(hào)、概率模型有效標(biāo)志和碼流有效標(biāo)志三個(gè)信號(hào)都有效之后,就開始解碼語法元素c0ded_bl0ck_flag。如果語法元素coded_ block_flag的值為1,則進(jìn)行步驟二,否則狀態(tài)機(jī)回到空閑狀態(tài)。步驟二 解碼語法元素 significant_coeff_flag 禾口 last_significant_coeff_ flag,當(dāng)這兩個(gè)語法元素解碼完畢,進(jìn)行步驟三。步驟三解碼語法元素coeff_abs_level_mimusl 和 coeff_sign_flag,當(dāng)這兩個(gè)語法元素解碼完畢,狀態(tài)機(jī)回到空閑狀態(tài)。在每個(gè)步驟中,殘差解碼控制模塊會(huì)調(diào)用該步驟解碼的語法元素相對(duì)應(yīng)的解碼控制模塊來控制解碼。語法元素解碼控制模塊除了用于控制各個(gè)語法元素的解碼,提供解碼控制信號(hào)之外,還要負(fù)責(zé)計(jì)算上下文概率模型的索引,這需要根據(jù)相鄰已解碼的宏塊信息,或者是當(dāng)前解碼的語法元素的已解碼bin的值來確定具體的概率模型的索引。并且,概率模型的索引和概率模型在RAM中的存儲(chǔ)形式有關(guān),這會(huì)在對(duì)存儲(chǔ)器訪問控制模塊進(jìn)行詳細(xì)介紹的時(shí)候進(jìn)一步說明。語法元素解碼控制模塊的另一個(gè)作用是計(jì)算在一個(gè)語法元素的解碼過程中從碼流中讀入的bit (碼流中的一個(gè)二進(jìn)制位)數(shù),這通過累加解碼引擎?zhèn)鬟f過來的bit_ num(在一個(gè)bin的解碼過程中從碼流中讀入的比特?cái)?shù))來實(shí)現(xiàn)。存儲(chǔ)器訪問控制模塊用于控制對(duì)RAM的訪問,該模塊是RAM和概率模型緩存模塊之間的橋梁,當(dāng)概率模型緩存模塊中不含有當(dāng)前解碼所需的概率模型時(shí),該模塊負(fù)責(zé)對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行保存并對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行更新。該模塊設(shè)計(jì)的好壞對(duì)整個(gè)CABAC解碼器的解碼速度影響很大。只有通過高效的存儲(chǔ)器管理,才能使解碼過程盡量少的被讀寫RAM所打斷。為了實(shí)現(xiàn)這個(gè)目的,本發(fā)明提供的存儲(chǔ)器訪問模塊對(duì)需要使用到的395個(gè)概率模型進(jìn)行了優(yōu)化的分類,分類的基本原則為在解碼順序上相鄰的語法元素需要使用的概率模型歸入同一組,同一個(gè)語法元素需要使用的概率模型歸入同一組。一組概率模型包含的概率模型個(gè)數(shù)也需要綜合考慮兩個(gè)因素來選取,一組概率模型包含的概率模型個(gè)數(shù)越多,則對(duì)MM的讀寫概率越小,有利于提高解碼速度;一組概率模型包含的概率模型個(gè)數(shù)越少,則對(duì)概率模型緩存模塊的一次讀寫所消耗的時(shí)間越少,有利于提高解碼速度。所以這兩個(gè)因素是矛盾的,需要折中考慮。本發(fā)明中一組概率模型包含的概率模型個(gè)數(shù)的最大值取16,概率模型的分組如表1所示
權(quán)利要求
1.一種用于上下文算術(shù)編解碼的運(yùn)算單元,所述運(yùn)算單元包括 CABAC解碼控制模塊,用于控制整個(gè)CABAC解碼;語法元素解碼控制模塊,用于控制各個(gè)語法元素的解碼,主要負(fù)責(zé)計(jì)算上下文概率模型的索引和判斷各個(gè)語法元素解碼的結(jié)束,并在語法元素解碼結(jié)束的時(shí)候根據(jù)解碼的bin 串得出語法元素的值,以及計(jì)算在一個(gè)語法元素的解碼過程中從碼流中讀入的bit數(shù); 其特征在于所述運(yùn)算單元還包括 概率模型緩存模塊,用于緩存當(dāng)前解碼所需的概率模型;存儲(chǔ)器訪問控制模塊,用于控制對(duì)RAM的訪問,控制RAM和概率模型緩存模塊之間的數(shù)據(jù)交互,當(dāng)概率模型緩存模塊中不含有當(dāng)前解碼所需的概率模型時(shí),對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行保存并對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行更新;解碼引擎模塊,用于進(jìn)行算術(shù)解碼,并計(jì)算在一個(gè)bin的解碼過程中從碼流中讀入的 bit 數(shù)。
2.如權(quán)利要求1所述的用于上下文算術(shù)編解碼的運(yùn)算單元,其特征在于所述解碼引擎模塊包括概率模型更新子模塊,用于根據(jù)解碼bin的值對(duì)相應(yīng)的概率模型進(jìn)行更新; 解碼bin選擇子模塊,用于從四個(gè)解碼引擎的解碼bin輸出中選出有效的位,當(dāng)前工作的解碼引擎的輸出bin即為有效的位;解碼引擎選擇子模塊,用于根據(jù)控制信號(hào)產(chǎn)生四個(gè)解碼引擎的使能信號(hào); 重歸一化子模塊,用于對(duì)解碼引擎狀態(tài)變量codIRange和codIOffset進(jìn)行重歸一化; 四個(gè)解碼引擎子模塊,用于進(jìn)行算術(shù)解碼,包含一個(gè)常規(guī)解碼引擎、一個(gè)結(jié)束解碼引擎和兩個(gè)旁路解碼引擎,兩個(gè)旁路解碼引擎并行工作,在一個(gè)時(shí)鐘周期中解碼出兩個(gè)bin。
3.如權(quán)利要求1或2所述的用于上下文算術(shù)編解碼的運(yùn)算單元,其特征在于所述概率模型緩存模塊包含16個(gè)7位的寄存器,所述16個(gè)寄存器作為一組來進(jìn)行管理。
4.如權(quán)利要求1或2所述的用于上下文算術(shù)編解碼的運(yùn)算單元,其特征在于所述語法元素解碼控制模塊包括一元解碼控制子模塊,用于控制采用一元二值化的語法元素的解碼,包括ref_idx_ 10、ref—idx_ll 禾口 mb—qp—delta ;截尾一元解碼控制子模塊,用于控制采用截尾一元二值化的語法元素的解碼,包括 intra—chroma—pred—mode、coded—block—pattern、mvdlO/1
禾口 coeff_abs_level_ minusl ;指數(shù)哥倫布解碼控制子模塊,用于控制采用指數(shù)哥倫布二值化的語法元素的解碼,包括mvdl0/l
和 coeff_abs_level_minusl ;固定長(zhǎng)度解碼控制子模塊,用于控制采用固定長(zhǎng)度二值化的語法元素的解碼,包括 rem—intra—4x4—pred—mode、coded—block—pattern 禾口 pre_intra—4x4—pred—mode ; 宏塊類型解碼控制子模塊,用于控制語法元素mb_type的解碼; 子宏塊類型解碼控制子模塊,用于控制語法元素sub_mb_type的解碼; 宏塊略過標(biāo)志解碼控制子模塊,用于控制語法元素mb_Skip_flag的解碼,并調(diào)用固定長(zhǎng)度解碼控制子模塊;宏塊場(chǎng)解碼標(biāo)志解碼控制子模塊,用于控制語法元素mb_field_deC0ding_flag的解碼,該并調(diào)用固定長(zhǎng)度解碼控制子模塊;殘差解碼控制子模塊,用于控制和殘差相關(guān)的語法元素包括COded_blOCk_flag、 significant_coeff_flag> last_significant_coeff_flag> coeff_abs_level_minusl 禾口 coeff_sign_flag ;運(yùn)動(dòng)矢量解碼控制子模塊,用于控制語法元素mvd的解碼;編碼塊類型解碼控制子模塊,用于控制語法元素c0ded_bl0Ck_pattern的解碼。
全文摘要
一種用于上下文算術(shù)編解碼的運(yùn)算單元,包括CABAC解碼控制模塊,用于控制整個(gè)CABAC解碼;語法元素解碼控制模塊,用于控制各個(gè)語法元素的解碼;概率模型緩存模塊,用于緩存當(dāng)前解碼所需的概率模型;存儲(chǔ)器訪問控制模塊,用于控制對(duì)RAM的訪問,控制RAM和概率模型緩存模塊之間的數(shù)據(jù)交互,當(dāng)概率模型緩存模塊中不含有當(dāng)前解碼所需的概率模型時(shí),對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行保存并對(duì)概率模型緩存模塊中的數(shù)據(jù)進(jìn)行更新;解碼引擎模塊,用于進(jìn)行算術(shù)解碼,并計(jì)算在一個(gè)bin的解碼過程中從碼流中讀入的bit數(shù)。本發(fā)明解碼速度較快、降低存儲(chǔ)器消耗量。
文檔編號(hào)H04N7/26GK102231830SQ20101055524
公開日2011年11月2日 申請(qǐng)日期2010年11月23日 優(yōu)先權(quán)日2010年11月23日
發(fā)明者嚴(yán)曉浪, 朱朋, 葛海通, 黃凱 申請(qǐng)人:浙江大學(xué)