專利名稱:一種用于hevc的解碼裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于HEVC的解碼裝置和方法,特別是能夠節(jié)省片內(nèi)存儲器的解碼裝置和方法。
背景技術(shù):
高效率視頻編碼HEVC (High Efficiency Video Codec)是目前由國際電信組織(ITU)和運動圖像專家組(MPEG)正在聯(lián)合制定中的下一代國際視頻編碼標(biāo)準(zhǔn)。與現(xiàn)在的國際視頻標(biāo)準(zhǔn)H. 264/AVC相比,HEVC在保證相同圖像質(zhì)量的前提下,可以將視頻的碼率降低50%,也就是說達(dá)到H. 264兩倍的編碼效率。為實現(xiàn)這一目標(biāo),HEVC的運算復(fù)雜度提高了 2至3倍。HEVC仍然是一種面向塊的基于運動補(bǔ)償?shù)囊曨l編解碼系統(tǒng),與H. 264相比最大的區(qū)別在于HEVC對一幀圖像內(nèi)的基本數(shù)據(jù)單元的劃分。在HEVC中,基本數(shù)據(jù)單元在亮度分量里不再是尺寸為16x16的宏塊(macroblock),而是最大尺寸可以達(dá)到64x64的編碼樹單元(coding tree unit)。如圖1所示,編碼樹單元再按照4分樹的結(jié)構(gòu)組織數(shù)據(jù),稱為編碼單元(coding unit),HEVC規(guī)定編碼單元的尺寸可以是64x64, 32x32,16x16以及8x8。每個編碼單元主要包括兩方面數(shù)據(jù)預(yù)測單元(prediction unit)和變換樹(transformtree)。預(yù)測單元包括巾貞間預(yù)測和巾貞內(nèi)預(yù)測。如圖2所示,巾貞間預(yù)測包括7種模式PART_2Nx2N,PART_2NxN, PART_Nx2N, PART_2NxnU, PART_2NxnD, PART_nLx2N 和 PART_nRx2N。HEVC 規(guī)定幀間預(yù)測的尺寸最大為64x64最小為4x8與8x4。幀內(nèi)預(yù)測包括2種模式PART_2Nx2N,PART_NxN0 HEVC規(guī)定幀內(nèi)預(yù)測的尺寸最大為64x64最小為4x4。如圖3所示,變換樹以四分樹的結(jié)構(gòu)組織變換單元(transform unit),標(biāo)準(zhǔn)規(guī)定變換單元的尺寸最大為32x32最小為4x4,變換單元內(nèi)包含預(yù)測之后的殘差信號。HEVC的解碼器必須兼容滿足標(biāo)準(zhǔn)語法規(guī)定的所有碼流,也就是說需要支持從上 述各種尺寸的編碼單元,以及各種尺寸的編碼工具。與基于宏塊(尺寸為固定的16x16)的H. 264解碼器相比,基于編碼單元(尺寸變化,最大尺寸為64x64)的HEVC的硬件解碼器不僅增加了控制邏輯和運算邏輯的復(fù)雜度,而且大大提高了本地存儲器占用的面積。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于HEVC的解碼裝置,該裝置包括解碼單元,用于對一個按照HEVC標(biāo)準(zhǔn)編碼的數(shù)據(jù)流中所有編碼樹單元信息進(jìn)行解碼;總線,為系統(tǒng)總線,用于解碼單元與外部存儲器之間的數(shù)據(jù)傳輸;外部存儲器,用于為HEVC解碼過程中的輸入、輸出數(shù)據(jù)提供了外部的存儲空間。進(jìn)一步,解碼單元包括熵解碼子模塊,用于一次從編碼碼流中解析出HEVC標(biāo)準(zhǔn)定義的尺寸為32x32的編碼樹單元及對應(yīng)的語法元素;
幀間預(yù)測子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先重建運動向量,然后根據(jù)運動向量讀入?yún)⒖枷袼?,最終通過插值構(gòu)建預(yù)測信號;幀內(nèi)預(yù)測子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先確定幀內(nèi)預(yù)測的模式,然后利用當(dāng)前預(yù)測區(qū)域的邊界像素構(gòu)成預(yù)測信號;反掃描子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)推導(dǎo)出掃描模式,然后按照掃描模式對熵解碼子模塊輸出的量化系數(shù)重新排列順序;反量化/反變換子模塊,用于首先利用熵解碼子模塊輸出的量化因子對反掃描子模塊輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換;圖像重構(gòu)子模塊,其輸入包括經(jīng)過反變換之后的殘差信號以及經(jīng)過預(yù)測之后的幀內(nèi)預(yù)測或幀間預(yù)測信號,圖像重構(gòu)子模塊按照HEVC標(biāo)準(zhǔn)里定義的算法進(jìn)行圖像重構(gòu);
后處理子模塊,用去塊效應(yīng)濾波器進(jìn)行濾波并進(jìn)行像素自適應(yīng)偏移。進(jìn)一步,外部存儲器包括輸入待解碼數(shù)據(jù)流緩沖存儲器,用于存儲輸入待解碼數(shù)據(jù)流;參考圖像緩沖存儲器,用于存儲參考圖像,參考圖像提供給幀間預(yù)測子模塊構(gòu)建預(yù)測信號。進(jìn)一步,所述語法元素包括編碼四分樹的劃分、預(yù)測模式、預(yù)測數(shù)據(jù)、變換四分樹的劃分、量化因子及變換系數(shù)。進(jìn)一步,如果幀間或幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配。本發(fā)明還提供了一種用于H EVC的解碼方法,該方法包括解碼步驟,用于對一個按照H EVC標(biāo)準(zhǔn)編碼的數(shù)據(jù)流中所有編碼樹單元信息進(jìn)行解碼;通過總線將解碼單元的輸出傳輸?shù)酵獠看鎯ζ?;將HEVC解碼過程中的輸入、輸出數(shù)據(jù)存儲在外部的存儲空間。進(jìn)一步,解碼步驟包括熵解碼步驟,用于一次從編碼碼流中解析出H EVC標(biāo)準(zhǔn)定義的尺寸為32x32的編碼樹單元及對應(yīng)的語法元素;幀間預(yù)測步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)首先重建運動向量,然后根據(jù)運動向量讀入?yún)⒖枷袼?,最終通過插值構(gòu)建預(yù)測信號;幀內(nèi)預(yù)測步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)首先確定幀內(nèi)預(yù)測的模式,然后利用當(dāng)前預(yù)測區(qū)域的邊界像素構(gòu)成預(yù)測信號;反掃描步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)推導(dǎo)出掃描模式,然后按照掃描模式對熵解碼步驟輸出的量化系數(shù)重新排列順序;反量化/反變換步驟,用于首先利用熵解碼步驟輸出的量化因子對反掃描步驟輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換;圖像重構(gòu)步驟,輸入包括經(jīng)過反變換之后的殘差信號以及經(jīng)過預(yù)測之后的幀內(nèi)預(yù)測或幀間預(yù)測信號,按照HEVC標(biāo)準(zhǔn)里定義的算法進(jìn)行圖像重構(gòu);后處理步驟,用去塊效應(yīng)濾波器進(jìn)行濾波并進(jìn)行像素自適應(yīng)偏移。
進(jìn)一步,所述語法元素包括編碼四分樹的劃分、預(yù)測模式、預(yù)測數(shù)據(jù)、變換四分樹的劃分、量化因子及變換系數(shù)。進(jìn)一步,如果幀間或幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配。輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換;進(jìn)一步,當(dāng)待解碼的視頻流中編碼樹單元尺寸為64x64,熵解碼/反掃描/反變換支持的最大處理數(shù)據(jù)尺寸為32x32,幀間或幀內(nèi)預(yù)測/重構(gòu)/后處理支持的最大處理數(shù)據(jù)尺寸為16x16,包括以下步驟(I)把待解碼的第η個編碼樹單元分成4個32x32區(qū)域,以變量q表示這4個區(qū)域的索引,Q=O, I, 2,3,并把q初始化為O ; (2)熵解碼子模塊讀入可以提供解析區(qū)域q的碼流,解析所有的語法元素,在編碼單元尺寸為64x64的情況下重新分配預(yù)測數(shù)據(jù);(3)在熵解碼之后,可以分成2個分支并行處理反變換分支與預(yù)測分支,反變換分支每次處理I個變換單元,用變量t表示當(dāng)前正在處理的變換單元內(nèi)的首個像素在區(qū)域q內(nèi)的編碼排列順序,O < t〈32x32,并把變量t初始化為O ;反掃描子模塊對當(dāng)前變換單元的量化系數(shù)進(jìn)行重新排序;反量化/反變換子模塊對重新排序之后的當(dāng)前變換單元的量化系數(shù)進(jìn)行反量化和反變換得到殘差信號;以變量SizeTU表示當(dāng)前變換單元尺寸,在完成反變換之后把變量t增加sizeTU,如果變量t小于32x32,那么返回重新排序步驟;預(yù)測分支把區(qū)域q分成4個16x16區(qū)域,以變量p表示這4個區(qū)域的索引,p=0, I, 2,3,并把p初始化為
O;以變量s記錄區(qū)域P內(nèi)完成圖像重構(gòu)的區(qū)域尺寸,O彡s〈16xl6,并把s初始化為O ;預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支如果是幀內(nèi)模式,就進(jìn)行幀內(nèi)預(yù)測,如果是幀間模式,就進(jìn)行幀間預(yù)測;(4)根據(jù)變換分支與預(yù)測分支的完成情況進(jìn)行判斷,如果滿足t > P * 256+s的條件,就繼續(xù)步驟(5),否則等待直至條件滿足;(5)把預(yù)測之后的數(shù)據(jù)與對應(yīng)位置上的殘差信號相加,得到重構(gòu)的圖像;(6)判斷條件s〈256,滿足條件就返回預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支的步驟,否則繼續(xù)步驟(7);步驟(7)后處理子模塊對重構(gòu)圖像進(jìn)行去塊濾波和像素自適應(yīng)偏移處理,每次處理的數(shù)據(jù)區(qū)域尺寸為16x16 ;(8)變量P加I,變量s恢復(fù)成0,判斷條件p〈4,滿足條件就返回預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支的步驟,否則進(jìn)入步驟(9);(9)變量q加I,判斷條件q〈4,滿足條件就返回步驟(2),否則返回步驟(I)處理下一個編碼樹單元。
附圖1為HEVC編碼樹單元結(jié)構(gòu)圖例。附圖2為HEVC預(yù)測單元劃分模式圖。附圖3為HEVC變換樹結(jié)構(gòu)圖例。附圖4為本發(fā)明的預(yù)測子模塊支持的最大數(shù)據(jù)區(qū)域尺寸為16x16時的HEVC解碼裝置結(jié)構(gòu)示意圖。附圖5為編碼樹單元尺寸為64x64情況下1/4區(qū)域圖示。附圖6為圖像解碼中需要保留的用于幀內(nèi)預(yù)測參考的邊界像素示意圖附圖7為幀內(nèi)預(yù)測中邊界像素更新示意圖附圖8為本發(fā)明的當(dāng)預(yù)測單元處理數(shù)據(jù)塊尺寸為16x16時的HEVC解碼方法流程圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作進(jìn)一步詳細(xì)的說明 本發(fā)明的目的在于提出一種能夠減少本地存儲器尺寸的HEVC解碼裝置和方法。這種裝置的解碼單元的子模塊處理的基本數(shù)據(jù)單元不是尺寸最大到64x64(本發(fā)明的各個子模塊都會同時處理亮度分量和色度分量,亮度信號和色度信號的尺寸比例可以包括HEVC規(guī)定的YUV422和YUV420,在下文中涉及尺寸的描述均以亮度分量為代表進(jìn)行)的編碼單元,而是在較小的數(shù)據(jù)區(qū)域(例如最大編碼單元64x64內(nèi)部的32x32、16x16或8x8區(qū)域)內(nèi)的變換單元或預(yù)測單元。由于各個子模塊的功能不同,它們需要支持的數(shù)據(jù)區(qū)域的尺寸也不一樣,比如與反變換相關(guān)的解碼單元的子模塊需要支持的最大數(shù)據(jù)區(qū)域尺寸為32x32,與預(yù)測相關(guān)的解碼單元的子模塊需要支持的最大數(shù)據(jù)區(qū)域尺寸可以根據(jù)硬件設(shè)計的需要設(shè)定為32x32、16x16或者8x8?;谶@種設(shè)計的HEVC解碼裝置不需要每個解碼單元的子模塊都支持最大尺寸可能為64x64的編碼單元,而是根據(jù)產(chǎn)品定義的子模塊處理的最大數(shù)據(jù)區(qū)域來設(shè)計系統(tǒng)流水線架構(gòu),這樣可以顯著的節(jié)省本地存儲器的開銷。圖4給出了本發(fā)明的當(dāng)幀內(nèi)幀間預(yù)測子模塊支持的最大數(shù)據(jù)區(qū)域尺寸為16x16時的HEVC解碼裝置結(jié)構(gòu)示意圖。如圖4所示,本發(fā)明裝置包括解碼單元、總線和外部存儲器。為達(dá)到上述目的,本發(fā)明裝置包括以下內(nèi)容1.解碼單元解碼單元包括H EVC解碼裝置的所有運算邏輯,一個按照HEVC標(biāo)準(zhǔn)編碼的數(shù)據(jù)流中所有編碼樹單元信息的解碼過程都是在解碼單元中完成的。解碼單元包括以下子模塊1.1熵解碼子模塊熵解碼子模塊負(fù)責(zé)從編碼碼流中解析出HEVC標(biāo)準(zhǔn)定義的編碼樹單元及以下所有語法元素,包括編碼四分樹的劃分、預(yù)測模式、預(yù)測數(shù)據(jù)、變換四分樹的劃分、量化因子及變換系數(shù)。熵解碼子模塊支持的最大數(shù)據(jù)區(qū)域尺寸為32x32,即一次運行可以解析尺寸為32x32的區(qū)域?qū)?yīng)的所有語法元素。HEVC標(biāo)準(zhǔn)規(guī)定編碼樹單元的尺寸可以為64x64、32x32或者16x16,熵解碼子模塊針對這三種尺寸分別進(jìn)行處理I)編碼樹單元尺寸為64x64。如圖5所示,I個尺寸為64x64的編碼樹單元可以劃分為4個尺寸為32x32的區(qū)域(在本段中稱為1/4區(qū)域),熵解碼子模塊每次解出I個1/4區(qū)域?qū)?yīng)的所有語法元素。尺寸為64x64的編碼樹單元中的編碼單元尺寸可以為64x64、32x32、16x16或8x8,在編碼單元尺寸小于64x64的情況下,I個1/4區(qū)域會包括I個或多個編碼單元,熵解碼子模塊每次解出1/4區(qū)域內(nèi)的所有編碼單元的語法元素。在編碼單元尺寸等于64x64的情況下,按照HEVC的語法規(guī)定,變換樹一定會進(jìn)一步分裂,所以I個1/4區(qū)域會包括I個或多個變換單元;但是預(yù)測單元的尺寸可能大于32x32,由于在編碼流中預(yù)測單元在變換單元之前,所以首先要把整個編碼單元的預(yù)測單元全部解析,然后依次解析4個1/4區(qū)域的變換單元,下面2個例子描述了在這類情況下熵解碼子模塊的處理辦法。例I)在幀間預(yù)測單元的尺寸為64x64的情況下,熵解碼子模塊只解析出的一份預(yù)測數(shù)據(jù),但是這份預(yù)測信息會被使用4次,分別用于4個1/4區(qū)域的后續(xù)解碼。例2)在幀間預(yù)測單元的尺寸為64x48/64x16的情況下,熵解碼子模塊會解析出的2份預(yù)測數(shù)據(jù),第I份是區(qū)域64x48的預(yù)測數(shù)據(jù),第2份是區(qū)域64x16的預(yù)測數(shù)據(jù),第I份預(yù)測數(shù)據(jù)會被第I和第2個1/4區(qū)域用作后續(xù)解碼,而且會被第3和第4個1/4區(qū)域分別用作上半部分(32x16)區(qū)域的預(yù)測數(shù)據(jù);第2份預(yù)測數(shù)據(jù)會被第3和第4個1/4區(qū)域分別用作下半部分(32x16)區(qū)域的預(yù)測數(shù)據(jù)。熵解碼子模塊針對其它的預(yù)測方式的處理辦法類似于上述2例。2)編碼樹單元尺寸為32x32。熵解碼子模塊每次解出I個編碼樹單元的所有語法元素。 3)編碼樹單元尺寸為16x16。熵解碼子模塊每次解出4個連續(xù)的編碼樹單元的所有語法元素。1. 2幀間預(yù)測子模塊幀間預(yù)測子模塊根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先重建運動向量,然后根據(jù)運動向量讀入?yún)⒖枷袼?,最終通過插值構(gòu)建預(yù)測信號,具體算法參照HEVC標(biāo)準(zhǔn)。幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸可以根據(jù)需要設(shè)計成32x32、16xl6或8x8。由于熵解碼子模塊每次輸出尺寸為32x32的數(shù)據(jù)區(qū)域?qū)?yīng)的預(yù)測數(shù)據(jù),在預(yù)測尺寸大于32x32時會對預(yù)測數(shù)據(jù)重新分配,幀間預(yù)測子模塊接收到的預(yù)測數(shù)據(jù)只包括預(yù)測尺寸不大于32x32的預(yù)測數(shù)據(jù),如果幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸同樣設(shè)計成32x32,預(yù)測過程可以與HEVC標(biāo)準(zhǔn)中描述的解碼過程完全一致。但是如果幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸設(shè)計成16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配。下面描述了在支持的最大處理數(shù)據(jù)尺寸分別為16x16和8x8的情況下幀間預(yù)測子模塊分配預(yù)測數(shù)據(jù)的過程。I)幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為16x16。等比于圖5的劃分方法,把32x32的預(yù)測區(qū)域劃分成4個16x16的預(yù)測區(qū)域(在本段中稱為1/4區(qū)域),幀間預(yù)測子模塊每次處理I個1/4區(qū)域中的采用幀間預(yù)測的數(shù)據(jù)區(qū)域,尺寸用變量sizePU’表示。如果當(dāng)前處理的像素所在的預(yù)測單元尺寸為sizePU,那么sizePU’ =min (sizePU, 16x16)。如果32x32的數(shù)據(jù)區(qū)域內(nèi)的幀間預(yù)測單元尺寸都不大于16x16,那么直接使用熵解碼子模塊輸出的預(yù)測數(shù)據(jù)就可以按照標(biāo)準(zhǔn)進(jìn)行預(yù)測。但是如果32x32的數(shù)據(jù)區(qū)域內(nèi)的幀間預(yù)測單元尺寸大于16x16,需要把熵解碼子模塊輸出的預(yù)測數(shù)據(jù)重新分配。下面給出2個例子描述重新分配的過程例I)如果32x32的數(shù)據(jù)區(qū)域的預(yù)測尺寸為32x32,那么熵解碼子模塊只會輸出I份預(yù)測數(shù)據(jù),這份數(shù)據(jù)會在預(yù)測每個1/4區(qū)域時使用,也就是說這份數(shù)據(jù)會被重復(fù)使用4次。例2)如果32x32的數(shù)據(jù)區(qū)域的預(yù)測尺寸為32x24和32x8,那么熵解碼子模塊會輸出2份預(yù)測數(shù)據(jù),第I份預(yù)測數(shù)據(jù)會用來重構(gòu)第I和第2個1/4區(qū)域,在重構(gòu)第3和第4個1/4區(qū)域時,第I份預(yù)測數(shù)據(jù)會用來預(yù)測上16x8區(qū)域,第2份預(yù)測數(shù)據(jù)會用來預(yù)測下16x8區(qū)域。幀間預(yù)測子模塊針對其它的預(yù)測尺寸的處理辦法類似于上述2例。2)幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為8x8。等比于圖5的劃分方法,把32x32的預(yù)測區(qū)域劃分成16個8x8的預(yù)測區(qū)域(在本段中稱為1/16區(qū)域),幀間預(yù)測子模塊每次處理I個1/16區(qū)域中的采用幀間預(yù)測的數(shù)據(jù)區(qū)域,尺寸用變量sizero’表示。如果當(dāng)前處理的像素所在的預(yù)測單元尺寸為sizePU,那么sizePU’=min (sizePU, 8x8)。如果32x32的數(shù)據(jù)區(qū)域內(nèi)的預(yù)測尺寸都不大于8x8,那么直接使用熵解碼子模塊輸出的預(yù)測數(shù)據(jù)就可以按照標(biāo)準(zhǔn)進(jìn)行預(yù)測。但是如果32x32的數(shù)據(jù)區(qū)域內(nèi)的預(yù)測尺寸大于8x8,需要把熵解碼子模塊輸出的預(yù)測數(shù)據(jù)重新分配。下面給出2個例子描述重新分配的過程例I)如果32x32的數(shù)據(jù)區(qū)域的預(yù)測尺寸為32x32,那么熵解碼子模塊只會輸出I份預(yù)測數(shù)據(jù),這份數(shù)據(jù)會在預(yù)測每個1/16區(qū)域時使用,也就是說這份數(shù)據(jù)會被重復(fù)使用16次。例2)如果32x32的數(shù)據(jù)區(qū)域的預(yù)測尺寸為32x24和32x8,那么熵解碼子模塊會輸出2份預(yù)測數(shù)據(jù),第I份預(yù)測數(shù)據(jù)會用來預(yù)測第I到第12個1/16區(qū)域,第2份預(yù)測數(shù)據(jù)會用來預(yù)測第13到第16個1/16區(qū)域。幀間預(yù)測子模塊針對其它的預(yù)測尺寸的處理辦法類似于上述2例。
1. 3幀內(nèi)預(yù)測子模塊幀內(nèi)預(yù)測子模塊根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先確定幀內(nèi)預(yù)測的模式,然后利用當(dāng)前預(yù)測區(qū)域的邊界像素構(gòu)成預(yù)測信號,具體算法參照HEVC標(biāo)準(zhǔn)。由于幀內(nèi)預(yù)測的參考像素采用的是圖像重構(gòu)之后未經(jīng)后處理的像素,所以要在完成圖像重構(gòu)之后及時保存邊界像素作為幀內(nèi)預(yù)測的參考數(shù)據(jù),圖6給出了在解碼一幀圖像過程中必須保存的用于幀內(nèi)預(yù)測參考的邊界像素位置示意圖。邊界像素既可以保存在本地存儲器也可以保存在外部存儲器,圖4的HEVC解碼裝置圖給出的是把邊界像素保存在本地存儲器的例子。幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸與幀間預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸一致,可以根據(jù)需要設(shè)計成32x32、16xl6或8x8。由于熵解碼子模塊每次輸出尺寸為32x32的數(shù)據(jù)區(qū)域?qū)?yīng)的預(yù)測數(shù)據(jù),如果幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸同樣設(shè)計成32x32,預(yù)測過程和邊界像素更新可以與HEVC標(biāo)準(zhǔn)中描述的解碼過程完全一致。但是如果幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸設(shè)計成16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配,在圖像重構(gòu)之后還要根據(jù)處理區(qū)域內(nèi)變換單元的尺寸來更新邊界像素。下面以支持的最大處理數(shù)據(jù)尺寸16x16為例介紹幀內(nèi)預(yù)測子模塊分配預(yù)測數(shù)據(jù)和更新邊界像素的過程等比于圖5的劃分方法,把32x32的預(yù)測區(qū)域劃分成4個16x16的預(yù)測區(qū)域(在本段中稱為1/4區(qū)域),幀內(nèi)預(yù)測子模塊每次處理I個1/4區(qū)域內(nèi)采用幀內(nèi)預(yù)測的變換單元對應(yīng)的數(shù)據(jù)區(qū)域,尺寸以sizeTU’表示,如果正在處理的像素所在變換單元尺寸為sizeTU,sizeTU’ =min(sizeTU, 16x16)。例如某個1/4區(qū)域采用尺寸為16x16的巾貞內(nèi)預(yù)測,但是變換單元的尺寸為8x8,那么子模塊每次針對I塊8x8區(qū)域進(jìn)行幀內(nèi)預(yù)測,總共需要運行4次才能完成整個1/4區(qū)域的幀內(nèi)預(yù)測。如果32x32的預(yù)測區(qū)域內(nèi)的幀內(nèi)預(yù)測尺寸都不大于16x16,那么直接使用熵解碼子模塊輸出的預(yù)測數(shù)據(jù)就可以按照HEVC標(biāo)準(zhǔn)進(jìn)行預(yù)測。但是如果32x32的數(shù)據(jù)區(qū)域內(nèi)的預(yù)測尺寸大于16x16,那么熵解碼子模塊只會輸出I個針對于區(qū)域32x32的預(yù)測模式,這個預(yù)測模式會在預(yù)測每個1/4區(qū)域時使用,也就是說這個預(yù)測模式會被重復(fù)使用4次。圖7給出了幀內(nèi)預(yù)測中邊界像素更新的例子,其中0/1/2/3分別表示4個相鄰的尺寸為16x16的數(shù)據(jù)區(qū)域,a/b/c/d分別表示長度為16的圖像重構(gòu)之后的像素邊界。區(qū)域O在采用幀內(nèi)預(yù)測時會把邊界a和b上的像素作為參考。如果區(qū)域O內(nèi)有I個或多個變換單元,那么在區(qū)域O完成圖像重構(gòu)之后,將會更新參考邊界像素,用邊界c替代邊界a,邊界d替代邊界b,也就是說區(qū)域I在采用幀內(nèi)預(yù)測時會參考邊界c而不會參考邊界a,區(qū)域2在采用幀內(nèi)預(yù)測時將會參考邊界d而不會參考邊界b。如果區(qū)域O是1/4個變換單元,那么在區(qū)域O完成圖像重構(gòu)之后,不能更新參考邊界像素,需要繼續(xù)保留邊界a和b,也就是說區(qū)域I在采用幀內(nèi)預(yù)測時會參考邊界a而不會參考邊界C,區(qū)域2在采用幀內(nèi)預(yù)測時會參考邊界b而不會參考邊界d。在處理區(qū)域尺寸設(shè)計為8x8的情況下,幀內(nèi)預(yù)測子模塊分配預(yù)測數(shù)據(jù)和更新邊界像素的過程與上述描述類似。1. 4反掃描子模塊反掃描子模塊根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)推導(dǎo)出掃描模式,然后按照掃描模式對熵解碼子模塊輸出的量化系數(shù)重新排列順序。掃描模式包括對角線模式,水平模式和垂直模式3種,具體算法參照HEVC標(biāo)準(zhǔn)。反掃描子模塊支持的最大處理數(shù)據(jù)尺寸設(shè)置成HEVC標(biāo)準(zhǔn)規(guī)定的最大的變換單元尺寸32x32,按照HEVC的標(biāo)準(zhǔn),尺寸為32x32的區(qū)域會包括I個或多個變換單元,反掃描子模塊每次對I個變換單元進(jìn)行操作,完成量化系數(shù)的重新 排列。1. 5反量化/反變換子模塊反量化/反變換子模塊首先利用熵解碼子模塊輸出的量化因子對反掃描子模塊輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換,具體算法參照HEVC標(biāo)準(zhǔn)。反量化/反變換子模塊支持的最大處理數(shù)據(jù)尺寸設(shè)置成HEVC標(biāo)準(zhǔn)規(guī)定的最大的變換單元尺寸32x32,由于HEVC標(biāo)準(zhǔn)規(guī)定變換單元的尺寸包括32x32、16xl6、8x8和4x4,尺寸為32x32的區(qū)域會包括I個或多個變換單元。反量化/反變換子模塊每次對I個變換單元進(jìn)行操作,完成反量化及反變換過程。1. 6圖像重構(gòu)子模塊圖像重構(gòu)子模塊的輸入包括經(jīng)過反變換之后的殘差信號以及經(jīng)過預(yù)測之后的幀內(nèi)預(yù)測或幀間預(yù)測信號,圖像重構(gòu)子模塊按照H EVC標(biāo)準(zhǔn)里定義的算法進(jìn)行圖像重構(gòu)。圖像重構(gòu)子模塊支持的最大處理數(shù)據(jù)尺寸與幀間/幀內(nèi)預(yù)測子模塊一致,即可以根據(jù)需要設(shè)計成32x32、16x16或8x8。圖像重構(gòu)子模塊每次運行的處理的數(shù)據(jù)區(qū)域的尺寸與預(yù)測子模塊的輸出數(shù)據(jù)尺寸一致,即預(yù)測子模塊每輸出一次預(yù)測信號,圖像重構(gòu)子模塊會把預(yù)測信號與對應(yīng)位置上的殘差信號求和,生成重構(gòu)信號。重構(gòu)信號不僅會輸送到后處理子模塊進(jìn)行后處理,而且編碼單元邊界和幀內(nèi)預(yù)測模式下變換單元邊界上的重構(gòu)的像素點會輸送到幀內(nèi)預(yù)測子模塊作為幀內(nèi)預(yù)測的參考點。1. 7后處理子模塊后處理子模塊包括兩個處理過程用去塊效應(yīng)濾波器(de-blocking filter)進(jìn)行濾波和像素自適應(yīng)偏移(sampleadaptive offset),像素自適應(yīng)偏移在去塊效應(yīng)濾波之后進(jìn)行,具體算法參照HEVC標(biāo)準(zhǔn)。后處理子模塊功能上獨立于前面所述的預(yù)測、反變換和重構(gòu)子模塊,因此支持的最大處理數(shù)據(jù)尺寸可以更加靈活的設(shè)定,為了節(jié)省本地存儲器的開銷同時提高運算效率,可以設(shè)定后處理子模塊支持的最大處理數(shù)據(jù)尺寸與圖像重構(gòu)子模塊相同。后處理子模塊的輸入為圖像重構(gòu)子模塊的輸出的圖像重構(gòu)信號,經(jīng)過去塊效應(yīng)濾波和像素自適應(yīng)偏移處理之后最終生成的輸出圖像,輸出圖像同時會存儲到外部存儲器作為由于幀間預(yù)測的參考圖像。
2.外部存儲器外部存儲器可以是任意一種存儲設(shè)備,外部存儲器包括輸入待解碼數(shù)據(jù)流緩沖存儲器和參考圖像緩沖存儲器,這些緩沖存儲器為HEVC解碼過程中所需要的輸入、輸出數(shù)據(jù)提供了外部的存儲空間。2.1輸入待解碼數(shù)據(jù)流緩沖存儲器本緩沖存儲器用于存儲輸入待解碼數(shù)據(jù)流。2. 2參考圖像緩沖存儲器本緩沖存儲器用于存儲參考圖像,參考圖像提供給幀間預(yù)測子模塊構(gòu)建預(yù)測信號。 3.總線總線可以是任意一種系統(tǒng)總線,負(fù)責(zé)解碼單元與外部存儲器之間的數(shù)據(jù)傳輸。圖8給出了本發(fā)明的解碼流程圖例。該流程圖的假設(shè)條件為待解碼的視頻流中編碼樹單元尺寸為64x64,熵解碼/反掃描/反變換子模塊支持的最大處理數(shù)據(jù)尺寸為32x32,幀間及幀內(nèi)預(yù)測/重構(gòu)/后處理子模塊支持的最大處理數(shù)據(jù)尺寸為16x16。該方法包括以下步驟1)把待解碼的第η個編碼樹單元按照圖5分成4個32x32區(qū)域,以變量q(q=0, 1,2,3)表示這4個區(qū)域的索引,并把q初始化為O。2)熵解碼子模塊讀入可以提供解析區(qū)域q的碼流,解析所有的語法元素,在編碼單元尺寸為64x64的情況下需要重新分配預(yù)測數(shù)據(jù)。3)在熵解碼之后,可以分成2個分支并行處理反變換分支與預(yù)測分支。3.1)反變換分支每次處理I個變換單元,用變量t (O ( t<32x32)表示當(dāng)前正在處理的變換單元內(nèi)的首個像素在區(qū)域q內(nèi)的編碼排列順序,并把變量t初始化為O。3.1.1)反掃描子模塊對當(dāng)前變換單元的量化系數(shù)進(jìn)行重新排序。3.1. 2)反量化/反變換子模塊對重新排序之后的當(dāng)前變換單元的量化系數(shù)進(jìn)行反量化和反變換得到殘差信號。3.1.3)以變量sizeTU表示當(dāng)前變換單元尺寸,在完成反變換之后把變量t增加sizeTU,如果變量t小于32x32,那么返回步驟3.1.1。3. 2)預(yù)測分支把區(qū)域q分成4個16x16區(qū)域,以變量p (p=0, I, 2,3)表示這4個區(qū)域的索弓丨,并把P初始化為O。以變量s (O < s〈16xl6)記錄區(qū)域P內(nèi)完成圖像重構(gòu)的區(qū)域尺寸,并把s初始化為O。3. 2.1)預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支a)如果是幀內(nèi)模式,就進(jìn)行幀內(nèi)預(yù)測,處理區(qū)域尺寸以變量sizeTU’表示(含義見前文描述),在完成幀內(nèi)預(yù)測之后把變量s增加sizeTU’;b)如果是幀間模式,就進(jìn)行幀間預(yù)測,處理區(qū)域尺寸以變量sizePU’表示(含義見前文描述),在完成幀間預(yù)測之后把變量s增加size PU’。4)根據(jù)變換分支與預(yù)測分支的完成情況進(jìn)行判斷,如果滿足t Sp * 256+s的條件,就繼續(xù)步驟5,否則等待直至條件滿足。5)把預(yù)測之后的數(shù)據(jù)與對應(yīng)位置上的殘差信號相加,得到重構(gòu)的圖像。6)判斷條件s〈256,滿足條件就返回步驟3. 2. 1,否則繼續(xù)步驟7)后處理子模塊對重構(gòu)圖像進(jìn)行去塊濾波和像素自適應(yīng)偏移處理,在本例中每次處理的數(shù)據(jù)區(qū)域尺寸為16x16。8)變量P加1,變量s恢復(fù)成0,判斷條件p〈4,滿足條件就返回步驟3. 2. 1,否則9)變量q加1,判斷條件q〈4,滿足條件就返回步驟2,否則返回步驟I處理下一個編碼樹單元。綜上所述,本發(fā)明方法和裝置通過控制各個子模塊支持的最大數(shù)據(jù)區(qū)域尺寸,節(jié)省了本地存儲開銷。
權(quán)利要求
1.一種用于HEVC的解碼裝置,其特征在于該裝置包括解碼單元,用于對一個按照H EVC標(biāo)準(zhǔn)編碼的數(shù)據(jù)流中所有編碼樹單元信息進(jìn)行解碼;總線,為系統(tǒng)總線,用于解碼單元與外部存儲器之間的數(shù)據(jù)傳輸;外部存儲器,用于為HEVC解碼過程中的輸入、輸出數(shù)據(jù)提供了外部的存儲空間。
2.根據(jù)權(quán)利要求1所述的解碼裝置,其特征在于解碼單元進(jìn)一步包括熵解碼子模塊,用于一次從編碼碼流中解析出HEVC標(biāo)準(zhǔn)定義的尺寸為32x32的編碼樹單元及對應(yīng)的語法元素;幀間預(yù)測子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先重建運動向量,然后根據(jù)運動向量讀入?yún)⒖枷袼兀罱K通過插值構(gòu)建預(yù)測信號;幀內(nèi)預(yù)測子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)首先確定幀內(nèi)預(yù)測的模式,然后利用當(dāng)前預(yù)測區(qū)域的邊界像素構(gòu)成預(yù)測信號;反掃描子模塊,用于根據(jù)熵解碼子模塊輸出的預(yù)測數(shù)據(jù)推導(dǎo)出掃描模式,然后按照掃描模式對熵解碼子模塊輸出的量化系數(shù)重新排列順序;反量化/反變換子模塊,用于首先利用熵解碼子模塊輸出的量化因子對反掃描子模塊輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換;圖像重構(gòu)子模塊,其輸入包括經(jīng)過反變換之后的殘差信號以及經(jīng)過預(yù)測之后的幀內(nèi)預(yù)測或幀間預(yù)測信號,圖像重構(gòu)子模塊按照HEVC標(biāo)準(zhǔn)里定義的算法進(jìn)行圖像重構(gòu);后處理子模塊,用去塊效應(yīng)濾波器進(jìn)行濾波并進(jìn)行像素自適應(yīng)偏移。
3.根據(jù)權(quán)利要求1所述的解碼裝置,其特征在于外部存儲器進(jìn)一步包括輸入待解碼數(shù)據(jù)流緩沖存儲器,用于存儲輸入待解碼數(shù)據(jù)流;參考圖像緩沖存儲器,用于存儲參考圖像,參考圖像提供給幀間預(yù)測子模塊構(gòu)建預(yù)測信號。
4.根據(jù)權(quán)利要求2所述的解碼裝置,其特征在于所述語法元素包括編碼四分樹的劃分、預(yù)測模式、預(yù)測數(shù)據(jù)、變換四分樹的劃分、量化因子及變換系數(shù)。
5.根據(jù)權(quán)利要求2所述的解碼裝置,其特征在于如果幀間或幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配。
6.一種用于HEVC的解碼方法,其特征在于該方法包括解碼步驟,用于對一個按照HEVC標(biāo)準(zhǔn)編碼的數(shù)據(jù)流中所有編碼樹單元信息進(jìn)行解碼; 通過總線將解碼單元的輸出傳輸?shù)酵獠看鎯ζ?;將HEVC解碼過程中的輸入、輸出數(shù)據(jù)存儲在外部的存儲空間。
7.根據(jù)權(quán)利要求6所述的解碼方法,其特征在于解碼步驟進(jìn)一步包括熵解碼步驟,用于一次從編碼碼流中解析出H EVC標(biāo)準(zhǔn)定義的尺寸為32x32的編碼樹單元及對應(yīng)的語法元素;幀間預(yù)測步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)首先重建運動向量,然后根據(jù)運動向量讀入?yún)⒖枷袼兀罱K通過插值構(gòu)建預(yù)測信號;幀內(nèi)預(yù)測步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)首先確定幀內(nèi)預(yù)測的模式,然后利用當(dāng)前預(yù)測區(qū)域的邊界像素構(gòu)成預(yù)測信號;反掃描步驟,用于根據(jù)熵解碼步驟輸出的預(yù)測數(shù)據(jù)推導(dǎo)出掃描模式,然后按照掃描模式對熵解碼步驟輸出的量化系數(shù)重新排列順序;反量化/反變換步驟,用于首先利用熵解碼步驟輸出的量化因子對反掃描步驟輸出的量化系數(shù)進(jìn)行反量化,然后進(jìn)行反變換;圖像重構(gòu)步驟,輸入包括經(jīng)過反變換之后的殘差信號以及經(jīng)過預(yù)測之后的幀內(nèi)預(yù)測或幀間預(yù)測信號,按照HEVC標(biāo)準(zhǔn)里定義的算法進(jìn)行圖像重構(gòu);后處理步驟,用去塊效應(yīng)濾波器進(jìn)行濾波并進(jìn)行像素自適應(yīng)偏移。
8.根據(jù)權(quán)利要求7所述的解碼方法,其特征在于所述語法元素包括編碼四分樹的劃分、預(yù)測模式、預(yù)測數(shù)據(jù)、變換四分樹的劃分、量化因子及變換系數(shù)。
9.根據(jù)權(quán)利要求7所述的解碼方法,其特征在于如果幀間或幀內(nèi)預(yù)測子模塊支持的最大處理數(shù)據(jù)尺寸為16x16或8x8,在預(yù)測之前需要對預(yù)測數(shù)據(jù)重新分配。
10.根據(jù)權(quán)利要求7所述的解碼方法,其特征在于當(dāng)待解碼的視頻流中編碼樹單元尺寸為64x64,熵解碼/反掃描/反變換支持的最大處理數(shù)據(jù)尺寸為32x32,幀間或幀內(nèi)預(yù)測/重構(gòu)/后處理支持的最大處理數(shù)據(jù)尺寸為16x16,包括以下步驟(1)把待解碼的第η個編碼樹單元分成4個32x32區(qū)域,以變量q表示這4個區(qū)域的索引,q=0, I, 2,3,并把q初始化為O ;(2)熵解碼子模塊讀入可以提供解析區(qū)域q的碼流,解析所有的語法元素,在編碼單元尺寸為64x64的情況下重新分配預(yù)測數(shù)據(jù);(3)在熵解碼之后,可以分成2個分支并行處理反變換分支與預(yù)測分支,反變換分支每次處理I個變換單元,用變量t表示當(dāng)前正在處理的變換單元內(nèi)的首個像素在區(qū)域q內(nèi)的編碼排列順序,O < t<32x32,并把變量t初始化為O ;反掃描子模塊對當(dāng)前變換單元的量化系數(shù)進(jìn)行重新排序;反量化/反變換子模塊對重新排序之后的當(dāng)前變換單元的量化系數(shù)進(jìn)行反量化和反變換得到殘差信號;以變量SizeTU表示當(dāng)前變換單元尺寸,在完成反變換之后把變量t增加sizeTU,如果變量t小于32x32,那么返回重新排序步驟;預(yù)測分支把區(qū)域q分成4個16x16區(qū)域,以變量p表示這4個區(qū)域的索引,p=0, I, 2,3,并把p初始化為O ; 以變量s記錄區(qū)域P內(nèi)完成圖像重構(gòu)的區(qū)域尺寸,O ( s<16xl6,并把s初始化為O ;預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支如果是幀內(nèi)模式,就進(jìn)行幀內(nèi)預(yù)測,如果是幀間模式,就進(jìn)行幀間預(yù)測;(4)根據(jù)變換分支與預(yù)測分支的完成情況進(jìn)行判斷,如果滿足t^ p*256+s的條件,就繼續(xù)步驟(5),否則等待直至條件滿足;(5)把預(yù)測之后的數(shù)據(jù)與對應(yīng)位置上的殘差信號相加,得到重構(gòu)的圖像;(6)判斷條件s〈256,滿足條件就返回預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支的步驟,否則繼續(xù)步驟(7);步驟(7)后處理子模塊對重構(gòu)圖像進(jìn)行去塊濾波和像素自適應(yīng)偏移處理,每次處理的數(shù)據(jù)區(qū)域尺寸為16x16 ;(8)變量P加1,變量s恢復(fù)成0,判斷條件p〈4,滿足條件就返回預(yù)測分支根據(jù)預(yù)測模式把處理流程分成2個分支的步驟,否則進(jìn)入步驟(9);.(9)變量q加1,判斷條件q〈4,滿足條件就返回步驟(2),否則返回步驟(I)處理下一個編碼樹單元。
全文摘要
本發(fā)明提供了一種用于HEVC的解碼裝置和方法,該裝置的解碼子模塊處理的基本數(shù)據(jù)單元不是尺寸最大到64x64的編碼單元,而是在較小的數(shù)據(jù)區(qū)域(如32x32、16x16或8x8區(qū)域)內(nèi)的變換單元或預(yù)測單元?;谶@種設(shè)計的H EVC解碼裝置不需要每個解碼子模塊都支持最大尺寸可能為64x64的編碼單元,而是根據(jù)產(chǎn)品定義的子模塊處理的最大數(shù)據(jù)區(qū)域來設(shè)計系統(tǒng)流水線架構(gòu),這樣可以顯著的節(jié)省本地存儲器的開銷。
文檔編號H04N7/50GK103024389SQ201210566569
公開日2013年4月3日 申請日期2012年12月24日 優(yōu)先權(quán)日2012年12月24日
發(fā)明者張琪, 付桂鵬 申請人:芯原微電子(北京)有限公司, 芯原微電子(上海)有限公司