專利名稱:一種四路并行編碼的cavlc編碼器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于視頻編碼技術(shù)領(lǐng)域,具體涉及一種H. 264/AVC硬件編碼器。
背景技術(shù):
H. 264/AVC是JVT組織最新提出的一個視頻編碼標(biāo)準(zhǔn)。因為H. 264/AVC能夠比之前一些編碼標(biāo)準(zhǔn)得到更高的壓縮效率和圖像質(zhì)量,所以它的應(yīng)用越來越廣泛。在H. 264/AVC 中,規(guī)定了兩種編碼格式上下文自適應(yīng)可變長度編碼(CAVLC)和上下文自適應(yīng)算術(shù)編碼 (CABAC)0在CAVLC編碼方式中,只對量化后的殘差系數(shù)進(jìn)行編碼,其它信息,比如說宏塊頭信息等,都以指數(shù)哥倫布碼的形式來進(jìn)行編碼(Exp-Golomb )。CAVLC編碼的主要元素有
1. Coeff_token (TotalCoeff)這是 CAVLC 中的第一個 VLC 元素。TotalCoeff 表示的是在一個虹4中所有非零系數(shù)的個數(shù),這個元素編碼在一個4x4塊中所有非零系數(shù)的個數(shù)和拖尾1的個數(shù)(TraiIingOnes)。TotalCoeff的取值范圍為0 16。2. TrailingOnes 這個元素表示拖尾1的個數(shù)。它代表的是在反Zig-Zag掃描時,除去O系數(shù)后起始連續(xù)士 1的個數(shù),其值的取值范圍為(Γ3。即如果連續(xù)士 1的個數(shù)超過 3,TrailingOnes 值為 3,其余的士 1 不作為 TrailingOnes03. Sign_trail 這個元素表示的是拖尾1的符號。每一個符號編碼為一比特,O表示正1,1表示負(fù)1。4. Level 這個元素表示在4x4塊中除去TrailingOnes外的其它的非零系數(shù)。 其編碼順序為反zig-zag順序,Level的個數(shù)取值范圍為(Tl6。5. TotalZeros 這個元素表示在以反Zig-Zag掃描順序時第一個非零系數(shù)后的總的零系數(shù)的個數(shù)。6. Run_before 這個元素表示在每一個非零系數(shù)前的零的個數(shù)。其獲取和編碼順序均為反Zig-Zag順序。相比傳統(tǒng)的變長編碼,CAVLC可以有更高的編碼效率,這是因為CAVLC中引入了這個上下文自適應(yīng)這個特點。另一方面來說,正是因為這個上下文自適應(yīng)的特點,它導(dǎo)致了很大的數(shù)據(jù)相關(guān)性,這些相關(guān)性主要包括
1.上述所描述的一些編碼元素,只有在對每個4x4塊的掃描完成后才能完全得到。2.在編碼CoeffJoken時需要先決定一個變量nC的值,而nC的值由當(dāng)前4x4塊左邊和上邊已編碼4x4塊中的非零體系數(shù)的個數(shù)計算得到。3.編碼Levels的時候有7張表格,而表格的選擇跟編碼當(dāng)前4x4塊的前一個 Level的絕對值大小和使用的表格編號有關(guān)。4. CAVLC編碼時是一個順序的過程,其過程為Coeff_token— Sign_trail — Level - Total_Zeros - Run_before0這個順序的編碼過程很難直接用硬件實現(xiàn)并行完成,使得CAVLC編碼的時間是一個不固定的時間。由于上述廣4點所說的數(shù)據(jù)相關(guān)性,使得設(shè)計高吞吐率比如說4Kx2K(4096x2160) 或更高分辨率的CAVLC硬件編碼器變得非常困難。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種高吞吐率的CAVLC編碼器。要設(shè)計高吞吐率的CAVLC編碼器,需要在電路中解決前面的相關(guān)性問題。在一個宏塊中,含有亮度(Y),色度(Cr和Cb)三種分量。在圖像格式Y(jié)UV = 4:2:0的情況下,一個宏塊中有384個量化后的殘差系數(shù)。所以掃描級有可能會成為編碼器的瓶頸。另外,由于量化后的殘差系數(shù)的可能性很多,導(dǎo)致前面提到的一些CAVLC元素的結(jié)果變化較大。比如說Level的個數(shù)最多有16個,這會導(dǎo)致在編碼時的時鐘數(shù)變化很大,進(jìn)而限制編碼器的吞吐率。本發(fā)明主要通過增加硬件并行性來解決限制CAVLC編碼器吞吐率的一些問題。本發(fā)明設(shè)計的高吞吐率的CAVLC編碼器,采用掃描級和編碼級組成的二級流水結(jié)的架構(gòu)。本發(fā)明的CAVLC編碼器的頂層架構(gòu)如
圖1所示。整個CAVLC編碼器可以分為掃描級,編碼級和CAVLC控制器三部分。掃描級由掃描級控制器,TrailingOnes計數(shù)器, TotalCoeff計數(shù)器,TotalZeros計數(shù)器,Rur^before計數(shù)器和Level檢測器組成,掃描級的功能是統(tǒng)計CAVLC元素值。編碼級由編碼級控制器,TotalCoeff編碼器,Total_Zeros 編碼器,Level編碼器,Run_before編碼器和比特流拼接器組成,編碼級的功能是編碼掃描級統(tǒng)計得到的CAVLC元素值。CAVLC控制器通過控制掃描級控制器和編碼級控制器來控制整個CAVLC編碼器的時序和功能。掃描級與編碼級兩級中采用了一塊寄存器來存儲掃描級統(tǒng)計得到的結(jié)果,這樣,就可以使得掃描級和編碼級能夠流水線并行處理。掃描級完成一個 4x4塊的掃描后,將得到的統(tǒng)計信息直接存儲在寄存器中,然后編碼級開始編碼,而掃描級則繼續(xù)掃描下一個4x4塊。通過這樣的結(jié)構(gòu),大大提高了整個編碼器的吞吐率。本發(fā)明的CAVLC編碼器具體實現(xiàn)如下
1.本發(fā)明的掃描級包含有掃描級控制器,TrailingOnes計數(shù)器,TotalCoeff計數(shù)器, Total_Zeros計數(shù)器,Run_before計數(shù)器和Level檢測器組成。掃描級控制器通過一個狀態(tài)機(jī)來控制掃描級在每個時鐘從殘差系數(shù)緩存中取4個殘差系數(shù)來統(tǒng)計CAVLC編碼的一些元素,如 TotalCoeff,Total_Zeros, TrailingOnes, Level, Run_before 等。其具體步驟如下所述
1)從系數(shù)緩存中取的四個殘差系數(shù)為COeff(TCOeff3。然后根據(jù)下面代碼(1)和(2)
所示得到8個狀態(tài)指示位S(Ts3和c(Tc3。其中s(Ts3代表各殘差系數(shù)是否等于0,C(TC3
代表各殘差系數(shù)是否等于士1
權(quán)利要求
1.一種四路并行編碼的CAVLC編碼器,其特征在于采用掃描級和編碼級組成的二級流水結(jié)的架構(gòu),分為掃描級、編碼級和CAVLC控制器三部分;其中,掃描級由掃描級控制器,TrailingOnes 計數(shù)器、TotalCoeff 計數(shù)器、Total_Zeros 計數(shù)器、Run_before 計數(shù)器和 Level檢測器組成,掃描級用于統(tǒng)計CAVLC元素值;編碼級由編碼級控制器、TotalCoeff編碼器、TotalZeros編碼器、Level編碼器、Run_bef0re編碼器和比特流拼接器組成,編碼級用于編碼掃描級統(tǒng)計得到的CAVLC元素值;CAVLC控制器通過控制掃描級控制器和編碼級控制器來控制整個CAVLC編碼器的時序和功能;并且,掃描級與編碼級兩級中采用一塊寄存器來存儲掃描級統(tǒng)計得到的結(jié)果,使得掃描級和編碼級能夠流水線并行處理;掃描級完成一個4x4塊的掃描后,將得到的統(tǒng)計信息直接存儲在寄存器中,然后編碼級開始編碼,而掃描級則繼續(xù)掃描下一個4x4塊。
2.根據(jù)權(quán)利要求1所述的四路并行編碼的CAVLC編碼器,其特征在于所述的掃描級控制器通過一個狀態(tài)機(jī)來控制掃描級在每個時鐘從殘差系數(shù)緩存中取4個殘差系數(shù)來統(tǒng) if CAVLC 115 ^-:TotalCoeff, Total_Zeros, TrailingOnes, Level, Run—before, 具體為1)從系數(shù)緩存中取的四個殘差系數(shù)為c0eff(TC0eff3,根據(jù)下面代碼(1)式和(2)式所示得到8個狀態(tài)指示位S(Ts3和c(Tc3,其中s(Ts3代表各殘差系數(shù)是否等于0,c(Tc3 代表各殘差系數(shù)是否等于士1
3.根據(jù)權(quán)利要求2所述的四路并行編碼的CAVLC編碼器,其特征在于所述的編碼級控制器控制TotalCoefT編碼器和T0tal_Zer0S編碼器在編碼級的第一個時鐘時,根據(jù)掃描級的!"otalCoeff^TotalZeros和TrailingOnes的值,查詢相應(yīng)的表格得到碼字,編碼級控制器通過TotalCoeff的值來控制Level編碼器中在每個時鐘編碼四個Level值,編碼級控制器通過Total_Zeros的值來控制Run_before編碼器中在每個時鐘編碼四個Run_before 值,編碼級控制器控制比特流拼接器在每個時鐘把TotalCoefT編碼器,T0tal_Zer0S編碼器,Level編碼器和Rim_before編碼器產(chǎn)生的碼字拼接成為比特流。
4.根據(jù)權(quán)利要求3所述的四路并行編碼的CAVLC編碼器,其特征在于所述的 TotalCoeff編碼器,Total_Zeros編碼器通過查表即得到相應(yīng)的碼字,Level編碼器和Run_ before編碼器的設(shè)計如下Level編碼器采用H. 264/AVC中一個VLCN提前計算的技術(shù),同時決定四個Level幅值的編碼對應(yīng)的表格序號,實現(xiàn)同時對四個Level進(jìn)行編碼,然后把四個Level編碼得到的碼字和對應(yīng)的長度拼接起來,VLCN提前計算的代碼為 incVLC[7] = { 0,3,6,12,24,48,Oxffff }; if ( first level && TotalCoeff>10 MTrailing0nes<3) vlcO = 1;else if (first level)vlcO = 0;else if ( abs(reg_level3) > incVLC[reg_vlc3]) vlcO = reg_vlc3+l; elsevlcO = reg_vlc3;if ( vlcO =0 ) vlcl = vlcO+1;else if ( abs(IevelO) > incVLC[vlcO]) vlcl = vlcO+1; elsevlcl=vlcO; if ( abs(Ievell) > incVLC[vlcl]) vlc2 = vlcl+1; elsevlc2 = vlcl;if ( abs(level2) > incVLC[vlc2]) vlc3 = vlc2+l; elsevlc3 = vlc2;上述代碼中abs代表的的是取絕對值的操作,incVLC[7] = { 0,3,6,12,24,48, Oxffff }表示的是表格選擇的條件;Vlc(TVlc3分別表示編碼當(dāng)前四個Level值分別對應(yīng)的表格序號,level(T level3表示當(dāng)前編碼的幅值數(shù),reg_leVe13表示前一組四個Level 值的中的level3,reg_vlc3表示編碼前一組四個Level值時編碼level3時用的表格序號 vlc3 ;然后,根據(jù)每個level和其相應(yīng)的表格序號來編碼每個level值,每個Level的碼字結(jié)構(gòu)包含前綴,后綴和它們中間的1 ;前綴由0組成,后綴的長度由levelSuffixsSize來表示;根據(jù)四個Level值的并行編碼出來的結(jié)果,按照碼字的長度,通過移位以后進(jìn)行或操作來拼接成i^ourLevelCode,即四個Level的編碼碼字;Run_before編碼器,每個時鐘也是編四個Run_before,編碼Run_before主要的工作是
5.根據(jù)權(quán)利要求4所述的四路并行編碼的CAVLC編碼器,其特征在于所述的比特流拼接器把TotalCoeff編碼器,Total_Zeros編碼器,Level編碼器和Run_before編碼器產(chǎn)生的碼字拼接成為比特流;編碼級在四個時鐘內(nèi)完成,比特流拼接器的時序設(shè)計為第一個時鐘周期,比特流拼接器把TotalCoefT碼字和第一組RmrLevelCode打包在一起;接下來兩個周期,比特流拼接器都只需要打包Level編碼器輸出的RmrLevelCode ;在最后一個時鐘周期,比特流拼接器將最后的RmrLevelCode和Total_Zeros/Run_beforeCode打包在一起。
全文摘要
本發(fā)明屬于視頻編碼技術(shù)領(lǐng)域,具體為一種四路并行編碼的CAVLC編碼器。本發(fā)明采用掃描級和編碼級并行處理的二級流水線結(jié)構(gòu),掃描級一次可以掃描四個系數(shù)的,大大的減少掃描一個4x4塊所需要的時間。同樣,通過四個level和Run_before并行編碼的方式來縮短編碼級所需要的時間。編碼級的所需要的時間通過細(xì)致的設(shè)計,使得其所消耗的時間和掃描級所用的時間相同。這樣,整個CAVLC的兩級流水線可以得到最大的吞吐率,極大地減小完成一個宏塊的編碼所需要的時鐘數(shù)。
文檔編號H04N7/26GK102325253SQ201110232250
公開日2012年1月18日 申請日期2011年8月15日 優(yōu)先權(quán)日2011年8月15日
發(fā)明者任懷魯, 姜英, 曾曉洋, 沈沙, 范益波, 鐘慧波 申請人:復(fù)旦大學(xué)