本發(fā)明屬于視頻壓縮編碼
技術(shù)領(lǐng)域:
,涉及一種集成電路設(shè)計方法,具體涉及一種基于HEVC熵編碼器的集成電路設(shè)計方法,可用于視頻編碼中降低信源符號冗余度的無損編碼。
背景技術(shù):
:視頻編碼中熵編碼器主要完成將前期的控制數(shù)據(jù)、量化變換系數(shù)、幀內(nèi)預(yù)測數(shù)據(jù)以及運動數(shù)據(jù)等編碼為二進制流,一方面作為視頻壓縮過程中評價預(yù)測模式和劃分深度組合性能好壞的標準之一,一方面用于存儲或傳輸。熵編碼器主要包括二進制化、上下文建模和二進制算數(shù)編碼三個步驟,本身具有結(jié)構(gòu)復(fù)雜、編碼符號前后依賴性強等特征。為了加快視頻壓縮系統(tǒng)中熵編碼器的實時處理速度,采用專用集成電路實現(xiàn)視頻熵編碼器,專用集成電路通常具有速度快,穩(wěn)定性好,可靠性高等特點。視頻壓縮系統(tǒng)將一幀視頻劃分為多個等大的編碼塊單元,針對每個編碼塊單元遍歷多種預(yù)測模式和劃分深度,然后對每種預(yù)測模式和劃分深度的組合進行預(yù)測、變換和量化,得到二維量化殘差數(shù)據(jù),可以稱為TU塊,作為熵編碼的主要輸入數(shù)據(jù)。TU塊的熵編碼是基于4×4子塊進行的,需要按照TU塊中所有4×4子塊的掃描順序依次處理每個子塊,其中包含當(dāng)前TU塊中最后一個非零系數(shù)的4×4子塊稱為lastCG。熵編碼器的集成電路實現(xiàn)一直是視頻編碼中的難點所在,熵編碼器的結(jié)構(gòu)特點使得熵編碼器稱為制約整個硬件視頻編碼器速度性能的瓶頸所在。目前熵編碼器集成電路的設(shè)計方法為:4×4子塊輸入順序和TU塊中所有4×4子塊的掃描順序不同,應(yīng)當(dāng)?shù)谝粋€處理的4×4子塊往往最后一個才輸入熵編碼器,需要對當(dāng)前輸入熵編碼器卻不能處理的4×4子塊的數(shù)據(jù)進行存儲,直至獲取得到TU塊中所有的4×4子塊,再按照TU塊中所有4×4子塊的掃描順序依次對所有4×4子塊進行二值化、上下文建模和二進制算數(shù)編碼,輸出二進制碼流Bit串。這種集成電路的設(shè)計方法需要大量的存儲開銷,在存儲過程中增加了延時等待,存在硬件開銷大,實現(xiàn)復(fù)雜度高等缺點。技術(shù)實現(xiàn)要素:本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)存在的缺陷,提出了一種基于HEVC熵編碼器的集成電路設(shè)計方法,用于解決現(xiàn)有熵編碼器集成電路設(shè)計方法中存在的硬件開銷大和實現(xiàn)復(fù)雜度高的技術(shù)問題。本發(fā)明的技術(shù)思路是:通過將殘差系數(shù)TU塊中所有4×4子塊的非零系數(shù)的位置信息和幅值信息轉(zhuǎn)換為HEVC中相關(guān)語法元素,用HEVC熵編碼器的二值化方法對這些語法元素進行二進制化,得到每個子塊的二元符號Bin串長度,再按照TU塊中所有4×4子塊的掃描順序?qū)?×4子塊的二元符號Bin串長度進行計算,得到TU塊的二元符號Bin串長度,作為評價視頻壓縮過程中預(yù)測模式和劃分深度組合性能好壞的標準之一。根據(jù)上述技術(shù)思路,實現(xiàn)本發(fā)明目的采取的技術(shù)方案,包括如下步驟:(1)創(chuàng)建寄存器LengthOut1、LengthOut2、csbfOut、LengthOut1Reg32、LengthOut1Reg16、LengthOut1Reg8、LengthOut2Reg32、LengthOut2Reg16、LengthOut2Reg8、CsbfReg32、CsbfReg16、CsbfReg8、Counter32、Counter16和Counter8,并將這些寄存器初始化為0;(2)計算HEVC熵編碼器用到的HEVC標準中各語法元素的二元符號Bin長度:(2a)對當(dāng)前4×4子塊的二維系數(shù)進行掃描,得到當(dāng)前4×4子塊的一維數(shù)據(jù);(2b)對當(dāng)前4×4子塊的一維數(shù)據(jù)中非零系數(shù)的位置信息和幅值信息進行格式轉(zhuǎn)化,得到多個HEVC標準中語法元素;(2c)對HEVC標準中各語法元素進行二值化,得到當(dāng)前4×4子塊多個二元符號Bin長度;(3)計算當(dāng)前4×4子塊的二元符號Bin串長度和全零標志位csbf的值,并將計算結(jié)果分別存儲到相應(yīng)的寄存器中,實現(xiàn)步驟為:(3a)按照當(dāng)前4×4子塊與lastCG的位置關(guān)系,對當(dāng)前4×4子塊各二元符號Bin長度進行不同操作:當(dāng)當(dāng)前4×4子塊位于lastCG之前,則當(dāng)前4×4子塊的二元符號Bin串長度為0,將數(shù)值0分別存入寄存器LengthOut1和寄存器LengthOut2;當(dāng)當(dāng)前4×4子塊位于lastCG之后,對當(dāng)前4×4子塊中與所有非零系數(shù)幅值信息和除最后一個非零系數(shù)之外的非零系數(shù)的位置信息相關(guān)的二元符號Bin長度進行相加,并將計算結(jié)果存入寄存器LengthOut1;當(dāng)當(dāng)前4×4子塊位置與lastCG位置相同,對當(dāng)前4×4子塊中與所有非零系數(shù)幅值信息和位置信息相關(guān)的二元符號Bin長度進行相加,并將計算結(jié)果存入寄存器LengthOut2;(3b)計算當(dāng)前4×4子塊所有系數(shù)的絕對值之和,并判斷計算結(jié)果是否為0,若是,則當(dāng)前4×4子塊的全零標志位csbf的值為0,否則,當(dāng)前4×4子塊的全零標志位csbf的值為1,再將全零標志位csbf的值存入寄存器csbfOut;(4)根據(jù)當(dāng)前4×4子塊所在TU塊的規(guī)格,對當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY)進行不同的位置格式轉(zhuǎn)換操作,并將寄存器LengthOut1、寄存器LengthOut2和寄存器csbfOut存儲的值分別存儲到相應(yīng)的寄存器中:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU32×32,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,并將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg32的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg32的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg32的CGNum位置處;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU16×16,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,然后將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg16的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg16的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg16的CGNum位置處;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU8×8,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,然后將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg8的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg8的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg8的CGNum位置處;(5)根據(jù)當(dāng)前4×4子塊所在TU塊的規(guī)格,計算TU塊中已經(jīng)計算得到二元符號Bin串長度的4×4子塊的個數(shù),并將不同的計算結(jié)果分別存入寄存器Counter32、Counter16和Counter8:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU32×32,對寄存器Counter32存儲的值加1,并將計算結(jié)果存入寄存器Counter32;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU16×16,對寄存器Counter16存儲的值加1,并將計算結(jié)果存入寄存器Counter16;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU8×8,對寄存器Counter8存儲的值加1,并將計算結(jié)果存入寄存器Counter8;(6)將寄存器Counter32、Counter16和Counter8的值與TU塊包含的4×4子塊的總數(shù)進行比較,并根據(jù)比較結(jié)果和當(dāng)前4×4子塊所在TU塊的規(guī)格,對當(dāng)前TU塊的下一個4×4子塊和當(dāng)前TU塊進行不同操作:當(dāng)寄存器Counter32小于64,且4×4子塊所在TU塊的規(guī)格是TU32×32時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;當(dāng)寄存器Counter16小于16,且4×4子塊所在TU塊的規(guī)格是TU16×16時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;當(dāng)寄存器Counter8小于4,且4×4子塊所在TU塊的規(guī)格是TU8×8時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;(7)計算當(dāng)前4×4子塊所在不同規(guī)格的TU塊的二元符號Bin串長度:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU32×32,根據(jù)寄存器CsbfReg32存儲的值,將寄存器LengthOut1Reg32和寄存器LengthOut2Reg32中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU32×32的二元符號Bin串長度;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU16×16,根據(jù)寄存器CsbfReg16存儲的值,將寄存器LengthOut1Reg16和寄存器LengthOut2Reg16中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU16×16的二元符號Bin串長度;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU8×8,根據(jù)寄存器CsbfReg8存儲的值將寄存器LengthOut1Reg8和寄存器LengthOut2Reg8中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU8×8塊的二元符號Bin串長度。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:本發(fā)明由于在獲取不同規(guī)格的TU塊的二元符號Bin串長度的過程中,將TU塊中所有4×4子塊的非零系數(shù)的位置信息和幅值信息轉(zhuǎn)換為HEVC熵編碼器用到的HEVC標準中各語法元素的格式,并用HEVC熵編碼器的二值化方法對這些語法元素進行二進制化,得到每個4×4子塊的二元符號Bin串長度,通過比較輸入的4×4子塊與lastCG的位置關(guān)系,對每個4×4子塊進行實時處理,避免了現(xiàn)有技術(shù)中由于4×4子塊輸入順序和實際處理順序不同帶來的硬件開銷大和延時等待長的缺陷,得到TU塊的二元符號Bin串長度作為集成電路的輸出,用于評價當(dāng)前編碼塊單元的預(yù)測方向和劃分深度的組合的性能,與現(xiàn)有技術(shù)方法相比,能夠減小集成電路硬件開銷,在壓縮系統(tǒng)性能損失較小的情況下,極大降低了集成電路的實現(xiàn)復(fù)雜度。附圖說明圖1是本發(fā)明的實現(xiàn)流程圖;圖2是本發(fā)明實施例的三種掃描方式中子塊和系數(shù)的掃描順序示意圖;圖3是本發(fā)明實施例的殘差系數(shù)分布和4×4子塊坐標圖。具體實施方式以下結(jié)合附圖和具體實施例,對本發(fā)明作進一步詳細說明。參照圖1,一種基于HEVC標準的熵編碼器集成電路設(shè)計方法,包括如下步驟:步驟1,創(chuàng)建寄存器LengthOut1、LengthOut2、csbfOut、LengthOut1Reg32、LengthOut1Reg16、LengthOut1Reg8、LengthOut2Reg32、LengthOut2Reg16、LengthOut2Reg8、CsbfReg32、CsbfReg16、CsbfReg8、Counter32、Counter16和Counter8,并將這些寄存器初始化為0;LengthOut1:用于存儲當(dāng)當(dāng)前4×4子塊位于lastCG之后時,當(dāng)前4×4子塊的二元符號Bin串長度;LengthOut2:用于存儲當(dāng)當(dāng)前4×4子塊位置與lastCG位置相同時,當(dāng)前4×4子塊的二元符號Bin串長度;csbfOut:用于存儲當(dāng)前4×4子塊的全零標志位csbf的值;LengthOut1Reg32:用于存儲TU32×32塊中所有4×4子塊在位于lastCG之后情況下的二元符號Bin串長度;LengthOut1Reg16:用于存儲TU16×16塊中所有4×4子塊在位于lastCG之后情況下的二元符號Bin串長度;LengthOut1Reg8:用于存儲TU8×8塊中所有4×4子塊在位于lastCG之后情況下的二元符號Bin串長度;LengthOut2Reg32:用于存儲TU32×32塊中所有4×4子塊在位置與lastCG位置相同情況下的二元符號Bin串長度;LengthOut2Reg16:用于存儲TU16×16塊中所有4×4子塊在位置與lastCG位置相同情況下的二元符號Bin串長度;LengthOut2Reg8:用于存儲TU8×8塊中所有4×4子塊在位置與lastCG位置相同情況下的二元符號Bin串長度;CsbfReg32:用于存儲TU32×32塊中所有4×4子塊的全零標志位的值;CsbfReg16:用于存儲TU16×16塊中所有4×4子塊的全零標志位的值;CsbfReg8:用于存儲TU8×8塊中所有4×4子塊的全零標志位的值;Counter32:用于存儲TU32×32塊中已經(jīng)計算得到二元符號Bin串長度的4×4子塊的個數(shù);Counter16:用于存儲TU16×16塊中已經(jīng)計算得到二元符號Bin串長度的4×4子塊的個數(shù);Counter8:用于存儲TU8×8塊中已經(jīng)計算得到二元符號Bin串長度的4×4子塊的個數(shù)。步驟2,計算HEVC熵編碼器用到的HEVC標準中各語法元素的二元符號Bin長度:(2a)對當(dāng)前4×4子塊的二維系數(shù)進行掃描,得到當(dāng)前4×4子塊的一維數(shù)據(jù):(2a1)確定對當(dāng)前4×4子塊的二維系數(shù)進行掃描的方式:當(dāng)前4×4子塊的掃描方式ScanIdx取值為0,采用HEVC熵編碼器中的對角掃描方式,取值為1,采用HEVC熵編碼器中的水平掃描方式,取值為2,采用HEVC熵編碼器中的垂直掃描方式;HEVC熵編碼器中包括對角掃描、水平掃描和垂直掃描三種掃描方式,該三種掃描方式中子塊和系數(shù)的掃描順序示意圖如圖2所示。系數(shù)掃描基于4×4子塊進行,TU塊中所有的4×4塊之間以及4×4子塊內(nèi)部均采用相同的掃描方式進行掃描。對于采用幀內(nèi)預(yù)測的TU8×8來說,掃描方式和幀內(nèi)預(yù)測方向有關(guān),對于采用幀內(nèi)預(yù)測的TU16×16、TU32×32和所有采用幀間預(yù)測的TU塊來說,都采用對角掃描方式。(2a2)根據(jù)圖2所示的三種掃描方式,按照當(dāng)前4×4子塊由右下角到左上角的順序,從該4×4子塊的最后一個系數(shù)到第一個系數(shù)逐一進行掃描,得到一維數(shù)據(jù)。其中,圖2(a)為采用對角掃描的TU8×8塊中,所有4×4子塊之間和4×4子塊內(nèi)部系數(shù)的掃描示意圖,圖2(b)為采用水平掃描的TU8×8塊中,所有4×4子塊之間和4×4子塊內(nèi)部的掃描示意圖,圖2(c)為采用垂直掃描的TU8×8塊中,所有4×4子塊之間和4×4子塊內(nèi)部的掃描示意圖。(2b)對當(dāng)前4×4子塊的一維數(shù)據(jù)中非零系數(shù)的位置信息和幅值信息進行格式轉(zhuǎn)化,得到多個HEVC標準中語法元素:(2b1)將當(dāng)前4×4子塊的一維數(shù)據(jù)中最后一個非零系數(shù)在該4×4子塊中的位置坐標,轉(zhuǎn)化為HEVC標準中對應(yīng)的語法元素的格式;(2b2)將當(dāng)前4×4子塊的一維數(shù)據(jù)中除最后一個非零系數(shù)之外的所有非零系數(shù)的位置信息,轉(zhuǎn)化為HEVC標準中對應(yīng)的語法元素的格式;(2b3)將當(dāng)前4×4子塊的一維數(shù)據(jù)中所有非零系數(shù)的幅值信息,轉(zhuǎn)化為HEVC標準中對應(yīng)的語法元素的格式。規(guī)格為TU8×8的TU塊包含了4個4×4子塊,一個4×4子塊也稱為一個CG。該TU塊的殘差系數(shù)分布和4×4子塊坐標如圖3所示,其中CG1為非全零塊,坐標為(0,0),CG2、CG3和CG4為全零子塊,CG2的坐標為(1,0),CG3的坐標為(0,1),CG4的坐標為(1,1)。該TU塊采用對角掃描方式,CG1的非零系數(shù)的位置信息和幅值信息的格式轉(zhuǎn)換以及得到的多個HEVC標準中語法元素見表1:表1(2c)對HEVC標準中各語法元素進行二值化,得到當(dāng)前4×4子塊多個二元符號Bin長度;HEVC熵編碼器采用的二值化方法主要有截斷萊斯二值化(TruncatedRice,TR),k階指數(shù)哥倫布二值化(k-thorderExp-Golomb,EGk)和定長二值化(FixedLength,F(xiàn)L),個別語法元素采用兩種二值化方式相結(jié)合或查表的方式進行二值化。步驟3,計算當(dāng)前4×4子塊的二元符號Bin串長度和全零標志位csbf的值,并將計算結(jié)果分別存儲到相應(yīng)的寄存器中,實現(xiàn)步驟為:(3a)按照當(dāng)前4×4子塊與lastCG的位置關(guān)系,對當(dāng)前4×4子塊各二元符號Bin長度進行不同操作:當(dāng)當(dāng)前4×4子塊位于lastCG之前,則當(dāng)前4×4子塊的二元符號Bin串長度為0,將數(shù)值0分別存入寄存器LengthOut1和寄存器LengthOut2;當(dāng)當(dāng)前4×4子塊位于lastCG之后,對當(dāng)前4×4子塊中與所有非零系數(shù)幅值信息和除最后一個非零系數(shù)之外的非零系數(shù)的位置信息相關(guān)的二元符號Bin長度進行相加,并將計算結(jié)果存入寄存器LengthOut1;當(dāng)當(dāng)前4×4子塊位置與lastCG位置相同,對當(dāng)前4×4子塊中與所有非零系數(shù)幅值信息和位置信息相關(guān)的二元符號Bin長度進行相加,并將計算結(jié)果存入寄存器LengthOut2;(3b)計算當(dāng)前4×4子塊所有系數(shù)的絕對值之和,并判斷計算結(jié)果是否為0,若是,則當(dāng)前4×4子塊的全零標志位csbf的值為0,否則,當(dāng)前4×4子塊的全零標志位csbf的值為1,再將全零標志位csbf的值存入寄存器csbfOut;步驟4,根據(jù)當(dāng)前4×4子塊所在TU塊的規(guī)格,對當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY)進行不同的位置格式轉(zhuǎn)換操作,并將寄存器LengthOut1、寄存器LengthOut2和寄存器csbfOut存儲的值分別存儲到相應(yīng)的寄存器中:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU32×32,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,并將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg32的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg32的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg32的CGNum位置處;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU16×16,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,然后將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg16的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg16的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg16的CGNum位置處;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU8×8,將當(dāng)前4×4子塊在TU塊中的位置坐標(CGposX,CGposY),轉(zhuǎn)換為當(dāng)前4×4子塊在TU塊的所有子塊掃描順序中的位置CGNum,然后將寄存器LengthOut1存儲的值存儲到寄存器LengthOut1Reg8的CGNum位置處,將寄存器LengthOut2存儲的值存儲到寄存器LengthOut2Reg8的CGNum位置處,將寄存器csbfOut存儲的值存儲到寄存器CsbfReg8的CGNum位置處;(4a)計算當(dāng)前4×4子塊在所屬TU塊中所有子塊按光柵掃描順序排列中的位置CGZscanNum:CGZscanNum=(CGposY<<ShiftNum)+CGposX其中,ShiftNum=log2TUSize-2,TUSize表示當(dāng)前4×4子塊所屬的TU塊的規(guī)格;(4b)將當(dāng)前4×4子塊在所屬TU塊中所有子塊按光柵掃描順序排列中的位置CGZscanNum轉(zhuǎn)換為該子塊在所屬TU塊中所有子塊的掃描順序中的位置CGNum。經(jīng)過位置格式轉(zhuǎn)換操作將二維的位置坐標(CGposX,CGposY)轉(zhuǎn)換為一維的位置CGNum。以一個TU8×8為例,該TU8×8所包含的4個4×4子塊在三種掃描方式情況下CGZscanNum和CGNum的對應(yīng)關(guān)系如表2:表2二維坐標(CGposX,CGposY)(0,0)(1,0)(0,1)(1,1)光柵掃描位置CGZscanNum1234對角掃描CGNum4231水平掃描CGNum4321垂直掃描CGNum4231步驟5,根據(jù)當(dāng)前4×4子塊所在TU塊的規(guī)格,計算TU塊中已經(jīng)計算得到二元符號Bin串長度的4×4子塊的個數(shù),并將不同的計算結(jié)果分別存入寄存器Counter32、Counter16和Counter8:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU32×32,對寄存器Counter32存儲的值加1,并將計算結(jié)果存入寄存器Counter32;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU16×16,對寄存器Counter16存儲的值加1,并將計算結(jié)果存入寄存器Counter16;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格是TU8×8,對寄存器Counter8存儲的值加1,并將計算結(jié)果存入寄存器Counter8;步驟6,將寄存器Counter32、Counter16和Counter8的值與TU塊包含的4×4子塊的總數(shù)進行比較,并根據(jù)比較結(jié)果和當(dāng)前4×4子塊所在TU塊的規(guī)格,對當(dāng)前TU塊的下一個4×4子塊和當(dāng)前TU塊進行不同操作:當(dāng)寄存器Counter32小于64,且4×4子塊所在TU塊的規(guī)格是TU32×32時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;當(dāng)寄存器Counter16小于16,且4×4子塊所在TU塊的規(guī)格是TU16×16時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;當(dāng)寄存器Counter8小于4,且4×4子塊所在TU塊的規(guī)格是TU8×8時,執(zhí)行步驟(2),計算當(dāng)前TU塊的下一個4×4子塊的二元符號Bin串長度,否則執(zhí)行步驟(7),計算當(dāng)前TU塊的二元符號Bin串長度;步驟7,計算當(dāng)前4×4子塊所在不同規(guī)格的TU塊的二元符號Bin串長度:當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU32×32,根據(jù)寄存器CsbfReg32存儲的值,將寄存器LengthOut1Reg32和寄存器LengthOut2Reg32中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU32×32的二元符號Bin串長度;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU16×16,根據(jù)寄存器CsbfReg16存儲的值,將寄存器LengthOut1Reg16和寄存器LengthOut2Reg16中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU16×16的二元符號Bin串長度;當(dāng)當(dāng)前4×4子塊所在TU塊的規(guī)格為TU8×8,根據(jù)寄存器CsbfReg8存儲的值將寄存器LengthOut1Reg8和寄存器LengthOut2Reg8中存儲的多個4×4子塊的二元符號Bin串長度進行相加,得到TU8×8塊的二元符號Bin串長度。以TU8×8為例,共包含4個4×4子塊。寄存器CsbfReg8位寬為4,寄存器LengthOut1Reg8和寄存器LengthOut2Reg8的位寬為44,即存儲一個4×4子塊二元符號Bin串長度需要的位寬為11。寄存器CsbfReg8存儲了4個子塊的全零標志位csbf,寄存器LengthOut1Reg8存儲了TU8×8塊中所有4×4子塊在位于lastCG之后情況下的二元符號Bin串長度,寄存器LengthOut2Reg8存儲了TU8×8中所有4×4子塊在位置與lastCG位置相同情況下的二元符號Bin串長度,則當(dāng)前TU塊的二元符號Bin串長度R'為:R'=(CsbfReg[3]?LengthOut2Reg8[43:33]:0)+(CsbfReg[3]?LengthOut1Reg8[32:22]:(CsbfReg[2]?LengthOut2Reg8[32:22]:0))+((CsbfReg[3]|CsbfReg[2])?LengthOut1Reg8[21:11]:(CsbfReg[1]?LengthOut2Reg8[21:11]:0))+((CsbfReg[3]|CsbfReg[2]|CsbfReg[1])?LengthOut1Reg8[10:0]:(CsbfReg[0]?LengthOut2Reg8[10:0]:0))以下結(jié)合測試,對本發(fā)明的效果作進一步的描述。1.測試條件:本發(fā)明的測試是在主頻2.93GHz的Intel(R)Core(TM)2DuoCPU、內(nèi)存2GB的硬件環(huán)境和HEVC軟件測試平臺HM16.2的軟件環(huán)境下進行的。在本發(fā)明中,采用的測試序列為Traffic.yuv和BasketballDrill.yuv的全灰度視頻序列,QP采用標準測試組(22、27、32、37),其余配置參數(shù)均取默認值。2.測試內(nèi)容及結(jié)果分析:采用本發(fā)明和現(xiàn)有的熵編碼器集成電路的設(shè)計方法對視頻壓縮系統(tǒng)的性能進行測試,其結(jié)果如表3所示,當(dāng)BD-rate值為負時,表示相同PSNR條件下,碼率減少,性能提高;當(dāng)BD-rate值為正時,表示碼率增加,性能下降。表3測試結(jié)果表明:對于不同測試序列并且QP采用標準測試組(22、27、32、37)時,本發(fā)明的方法將二元符號Bin串長度R'作為熵編碼器的輸出,用于評價當(dāng)前預(yù)測方向和劃分深度組合的性能好壞。相比于現(xiàn)有方法中將二進制碼流Bit串長度R作為熵編碼器輸出的方法來說,修改后的方法雖然帶來了一定的壓縮性能損失,但是損失較小,在實現(xiàn)相同功能的情況下大大簡化了熵編碼器的硬件實現(xiàn),降低了集成電路的實現(xiàn)復(fù)雜度。當(dāng)前第1頁1 2 3