專利名稱:可變塊大小運動補償分象素插值的實現(xiàn)方法及實現(xiàn)裝置的制作方法
技術(shù)領域:
本發(fā)明屬于信號處理中的視頻和圖像編解碼技術(shù)領域,特別涉及在編碼解碼過程中可變塊大小運動補償?shù)腣LSI體系結(jié)構(gòu)及數(shù)據(jù)緩存方法。
背景技術(shù):
H.264/AVC是最新的視頻編碼國際標準。新的視頻編碼國際標準采用了許多新的編碼技術(shù),如基于上下文的變長編碼(CAVLC),更高精度的運動矢量預測,可變塊大小運動預測與補償,intra預測,整型變換等,與MPEG-4視頻編碼國際標準相比,編碼效率提高了一倍。
運動補償?shù)姆椒ㄊ?,對于當前幀圖像一個被解碼的宏塊(16×16的象素塊),在片外參考幀圖像存儲器中,根據(jù)運動矢量,調(diào)入相應的預測塊象素值并對預測塊象素值進行數(shù)據(jù)緩存;根據(jù)運動矢量分象素的位置,對數(shù)據(jù)緩存中的預測塊象素值,進行分象素精度插值(包括1/4象素精度和1/2象素精度插值),共有16個分象素插值點,其中有1個整象素點G和15個分象素點(a,b,c,d,e,f,g,h,i,j,k,n,p,q,r)。如圖1所示。采用運動矢量分象素指向位置的插值點的值作為當前解碼象素塊的運動預測值。
1/4象素的插值,提高了編碼效率,也增加了運算的復雜度和計算量。
傳統(tǒng)的實現(xiàn)方法中,因為同一列(或者同一行)象素數(shù)據(jù)在同一個存儲器單元,因此不能并行的讀寫同一列(同一行)象素數(shù)據(jù)。硬件實現(xiàn)中,采用移位寄存器陣列,來實現(xiàn)水平方向或者垂直方向的插值。即包括行插值運算單元,又包括列插值運算單元,硬件的使用率較低。同時插值所需的時鐘周期數(shù)多。
發(fā)明內(nèi)容
本發(fā)明的目的是為克服已有技術(shù)的不足之處,提供一種分象素插值的實現(xiàn)方法及實現(xiàn)裝置,以提高分象素插值的效率。
本發(fā)明提出的可變塊大小運動補償分象素插值的實現(xiàn)方法,包括以下步驟1)將用于插值的象素數(shù)據(jù)存儲到參考象素塊數(shù)據(jù)緩存區(qū);2)將多個插值點分為多種類型,分別對每種類型的插值點進行插值,得到運動預測值;3)將所述運動預測值,根據(jù)各類型插值點的按行或者按列存儲到運動預測值存儲器。
本發(fā)明提出的分象素插值實現(xiàn)裝置,其特征在于,該裝置包括依次相連的參考象素塊數(shù)據(jù)緩存模塊,分象素插值單元和運動預測值存儲器;其中所述參考象素塊數(shù)據(jù)緩存模塊,用于將輸入數(shù)據(jù)根據(jù)輸入地址進存儲到參考象素塊緩存器中,所述根據(jù)輸出地址進行讀取參考象素塊緩存器中的數(shù)據(jù);所述分象素插值模塊,用于根據(jù)當前塊的運動矢量,確定所需運動預測值的插值點類型,并設定N個分象素的插值單元,一個分象素的插值單元,完成一個分象素點的插值,N個分象素的插值單元并行計算N個分象素點的值;所述運動預測值存儲器,用于存儲插值后的結(jié)果。
本發(fā)明的特點及效果本發(fā)明可提高插值運算單元的硬件利用率。同時大大減少了插值所需的時鐘周期數(shù)。
圖1為可變塊大小的7種分塊模式。
圖2為本發(fā)明的可變塊大小運動補償分象素插值的實現(xiàn)方法框圖。
圖3為本發(fā)明的可變塊大小運動補償分象素插值實現(xiàn)裝置的結(jié)構(gòu)框圖。
圖4為本發(fā)明裝置中的參考象素塊數(shù)據(jù)緩存的電路結(jié)構(gòu)框圖。
具體實施例方式
本發(fā)明提出的可變塊大小運動補償分象素插值的實現(xiàn)方法及實現(xiàn)裝置結(jié)合附圖及實施例詳細說明如下本發(fā)明提出的可變塊大小運動補償分象素插值的實現(xiàn)方法,包括以下步驟1)將用于插值的象素數(shù)據(jù)存儲到參考象素塊數(shù)據(jù)緩存區(qū);2)將多個插值點分為多種類型,分別對每種類型的插值點進行插值,得到運動預測值;3)將所述運動預測值,根據(jù)各類型插值點的按行或者按列存儲到運動預測值存儲器。
下面以H.264/AVC為實施例,對本發(fā)明的分象素插值實現(xiàn)方法進行詳細說明,本實施例包括如下的步驟,如圖2所示1)將用于插值的象素數(shù)據(jù)存儲到參考象素塊數(shù)據(jù)緩存區(qū);設定參考象素塊數(shù)據(jù)緩存區(qū)的存儲器單元塊數(shù)為B,B的取值,可以根據(jù)應用的不同,方便的通過增加或減少提高并行度或減少硬件的開銷,在本實施例中,B取16;B×B大小的塊為一個基本塊;B×B塊內(nèi)的象素點(p,q),0≤p<B,0≤q<B,映射到B個存儲器單元中的位置為(b,A′),其中b為存儲器單元的索引,A′為相應與B×B塊位置的地址偏移。
所述映射可采用直接映射方式b=(p+q%B)%BA′=q或采用另外一種映射方式將B×B塊分成4×4的小塊,先對4×4小塊進行塊的線性移位,再對每一個小塊進行線性移位,同樣可以使行列數(shù)據(jù)存儲分布在不同的存儲器模塊中。
2)將16個插值點分為6種類型,分別對6種類型的插值點進行插值;21)根據(jù)運動矢量,將16個分象素插值點分為六種類型,分別為類型0,類型1,類型2,類型3,類型4,類型5。如表1所示。
表1
22)對6種類型的插值點分別進行插值,N個插值運算單元可以并行插值,插值運算單元的數(shù)目可配置,可以根據(jù)應用的不同,選擇不同數(shù)目的插值運算單元。在本實施例中,N為4。
如圖1所示,對于類型0,直接將整象素位置的象素值作為運動預測值;對于類型1,在水平方向上,將象素(例如E,F(xiàn),G,H,I,J等)逐行并行讀取,對讀取的象素進行水平方向上的插值,將插值的結(jié)果作為運動預測值;對于類型2,在垂直方向上,將象素(例如A,C,G,M,R,T等)逐列并行讀取,對讀取的象素進行垂直方向上的插值,將插值的結(jié)果作為運動預測值;對于類型3,首先在垂直方向,將象素(例如A,C,G,M,R,T等)逐列并行讀取,對讀取的象素進行垂直方向上的插值,得到垂直方向的半象素值(例如cc,dd,h,m,ee,ff),將垂直方向的半象素值保存在寄存器中;然后在水平方向上,將象素(例如E,F(xiàn),G,H,I,J等)逐行并行讀取,對讀取的象素進行水平方向的插值,得到水平方向的半象素值(例如aa,bb,b,s,gg,hh);將水平方向的半象素值和垂直方向的半象素值進行線性插值,將線性插值的結(jié)果作為運動預測值;對于類型4,首先在水平方向上,將象素(例如E,F(xiàn),G,H,I,J等)逐行并行讀取,對讀取的象素進行水平方向的插值,得到水平方向的半象素值(例如aa,bb,b,s,gg,hh),將水平方向的半象素值保存在寄存器中;然后將水平方向的半象素值(例如aa,bb,b,s,gg,hh)在垂直方向并行讀取,對讀取的象素值進行垂直方向的插值,將插值的結(jié)果作為運動預測值;對于類型5,首先在垂直方向上,將象素(例如A,C,G,M,R,T)逐列并行讀取,對讀取的象素進行垂直方向的插值,得到垂直方向的半象素值(例如cc,dd,h,m,ee,ff);然后將垂直方向的半象素值(例如cc,dd,h,m,ee,ff)在水平方向并行讀取,對讀取的垂直方向的半象素值進行水平方向的插值,將插值的結(jié)果作為運動預測值;3)將插值的結(jié)果,即運動預測值,根據(jù)各插值類型點的按行或者按列存儲到運動預測值存儲器。
本發(fā)明提出的分象素插值裝置,如圖3所示,包括以下模塊參考象素塊數(shù)據(jù)緩存模塊,分象素插值單元,運動預測值存儲器。
1、參考象素塊數(shù)據(jù)緩存模塊參考象素塊數(shù)據(jù)緩存器將輸入數(shù)據(jù)根據(jù)輸入地址存儲到參考象素塊數(shù)據(jù)緩存。根據(jù)輸出地址,讀取參考象素塊暑假緩存器中的數(shù)據(jù)。
參考象素塊數(shù)據(jù)緩存器的結(jié)構(gòu),如圖4所示,包括以下模塊11、輸入地址調(diào)整單元;輸入地址調(diào)整單元將B×B塊的地址通過映射轉(zhuǎn)換成片上數(shù)據(jù)緩存存儲器的物理地址。該映射采用如下的直接映射方式B×B塊內(nèi)的象素點(p,q),0≤p<B,0≤q<B,映射到B個存儲器模塊中的位置為(b,A′),b=(p+q%B)%BA′=q其中b為存儲器單元的索引,A′為相應與B×B塊位置的地址偏移;B×B塊中每一行和每一列的數(shù)據(jù)在不同的存儲器模塊中,從而實現(xiàn)行列數(shù)據(jù)的并行存??;或采用另外一種映射方式是,將B×B塊分成4×4的小塊,先對4×4小塊進行塊的線性移位,再對每一個小塊進行線性移位,同樣可以使行列數(shù)據(jù)存儲分布在不同的存儲器模塊中。
12、輸入數(shù)據(jù)調(diào)整單元;輸入數(shù)據(jù)調(diào)整單元將輸入數(shù)據(jù),移位到對應的存儲器單元的位置。
13、輸出地址調(diào)整單元;輸出地址調(diào)整單元將B×B塊的地址通過映射轉(zhuǎn)換成片上數(shù)據(jù)緩存存儲器的物理地址。該轉(zhuǎn)換包括如下的直接映射B×B塊內(nèi)的象素點(p,q),0≤p<B,0≤q<B,映射到B個存儲器模塊中的位置為(b,A′),b=(p+q%B)%BA′=q其中b為存儲器單元的索引,A′為相應與B×B塊位置的地址偏移;B×B塊中每一行和每一列的數(shù)據(jù)在不同的存儲器模塊中,從而實現(xiàn)行列數(shù)據(jù)的并行存取。
或采用另外一種映射方式將B×B塊分成4×4的小塊,先對4×4小塊進行塊的線性移位,再對每一個小塊進行線性移位,同樣可以使行列數(shù)據(jù)存儲分布在不同的存儲器模塊中。
14、輸出數(shù)據(jù)調(diào)整單元;輸出數(shù)據(jù)調(diào)整單元將輸出數(shù)據(jù)進行調(diào)整,調(diào)整為B×B塊中數(shù)據(jù)的順序。
15、B個存儲器單元用于存儲參考幀象素塊數(shù)據(jù)。
2、分象素插值模塊用于設定分象素的插值單元的個數(shù)為N,使一個分象素的插值單元,完成一個分象素點的插值。N個插值單元可并行插值,其數(shù)目可配置,可以根據(jù)應用的不同,方便的通過增加或減少插值運算單元的數(shù)目提高插值速度或減少硬件的開銷。
根據(jù)當前塊的運動矢量,確定所需運動預測值的插值點類型,N個分象素的插值單元并行的計算N個分象素點的值。
3、運動預測值存儲器運動預測值存儲器用于存儲插值后的結(jié)果。
權(quán)利要求
1.一種可變塊大小運動補償分象素插值的實現(xiàn)方法,其特征在于,包括以下步驟1)將用于插值的象素數(shù)據(jù)存儲到參考象素塊數(shù)據(jù)緩存區(qū);2)將多個插值點分為多種類型,分別對每種類型的插值點進行插值,得到運動預測值;3)將所述運動預測值,根據(jù)各類型插值點的按行或者按列存儲到運動預測值存儲器。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟1)具體包括設定參考象素塊數(shù)據(jù)緩存區(qū)的存儲器單元塊數(shù)為B,B×B塊內(nèi)的象素點(p,q),0≤p<B,0≤q<B,映射到B個存儲器單元中的位置為(b,A′),其中b為存儲器單元的索引,A′為相應與B×B塊位置的地址偏移。
3.如權(quán)利要求2所述的方法,其特征在于,所述映射為b=(p+q%B)%BA′=q
4.如權(quán)利要求2所述的方法,其特征在于,所述映射為將B×B塊分成小塊,先對小塊進行塊的線性移位,再對每一個小塊進行線性移位,使行列數(shù)據(jù)存儲分布在不同的存儲器模塊中。
5.如權(quán)利要求1所述的方法,其特征在于,所述步驟2)中B的取值為16,具體包括21)根據(jù)運動矢量,將16個象素插值點分為六種類型,分別為類型0,類型1,類型2,類型3,類型4,類型5,每種類型對應的象素插值點分別為類型0為整象素點G,類型1為分象素點a,b,c,類型2為分象素點d,h,n,類型3為分象素點e,g,p,r,類型4為分象素點f,j,q,類型5為分象素點i,k;22)對所述6種類型的插值點分別在N個插值運算單元進行插值;對于類型0,直接將整象素位置的象素值作為運動預測值;對于類型1,在水平方向上,將象素逐行并行讀取,對讀取的象素進行水平方向上的插值,將插值的結(jié)果作為運動預測值;對于類型2,在垂直方向上,將象素逐列并行讀取,對讀取的象素進行垂直方向上的插值,將插值的結(jié)果作為運動預測值;對于類型3,首先在垂直方向,將象素逐列并行讀取,對讀取的象素進行垂直方向上的插值,得到垂直方向的半象素值,將垂直方向的半象素值保存在寄存器中;然后在水平方向上,將象素逐行并行讀取,對讀取的象素進行水平方向的插值,得到水平方向的半象素值;將水平方向的半象素值和垂直方向的半象素值進行線性插值,將線性插值的結(jié)果作為運動預測值;對于類型4,首先在水平方向上,將象素逐行并行讀取,對讀取的象素進行水平方向的插值,得到水平方向的半象素值,將水平方向的半象素值保存在寄存器中;然后將水平方向的半象素值在垂直方向并行讀取,對讀取的象素值進行垂直方向的插值,將插值的結(jié)果作為運動預測值;對于類型5,首先在垂直方向上,將象素逐列并行讀取,對讀取的象素進行垂直方向的插值,得到垂直方向的半象素值;然后將垂直方向的半象素值在水平方向并行讀取,對讀取的垂直方向的半象素值進行水平方向的插值,將插值的結(jié)果作為運動預測值;
6.一種如權(quán)利要求1所述的方法的分象素插值實現(xiàn)裝置,其特征在于,該裝置包括依次相連的參考象素塊數(shù)據(jù)緩存模塊,分象素插值單元和運動預測值存儲器;其中所述參考象素塊數(shù)據(jù)緩存模塊,用于將輸入數(shù)據(jù)根據(jù)輸入地址進存儲到參考象素塊緩存器中,所述根據(jù)輸出地址進行讀取參考象素塊緩存器中的數(shù)據(jù);所述分象素插值模塊,用于根據(jù)當前塊的運動矢量,確定所需運動預測值的插值點類型,并設定N個分象素的插值單元,一個分象素的插值單元,完成一個分象素點的插值,N個分象素的插值單元并行計算N個分象素點的值;所述運動預測值存儲器,用于存儲插值后的結(jié)果。
7.如權(quán)利要求6所述的裝置,其特征在于,所述參考象素塊數(shù)據(jù)緩存器包括輸入地址調(diào)整單元用于將B×B塊的地址通過映射轉(zhuǎn)換成片上數(shù)據(jù)緩存存儲器的物理地址;輸入數(shù)據(jù)調(diào)整單元用于將輸入數(shù)據(jù),移位到對應的存儲器單元的位置;輸出地址調(diào)整單元用于將B×B塊的地址轉(zhuǎn)換成片上數(shù)據(jù)緩存存儲器的物理地址。輸出數(shù)據(jù)調(diào)整單元用于輸出數(shù)據(jù)調(diào)整單元將輸出數(shù)據(jù)進行調(diào)整,調(diào)整為B×B塊中數(shù)據(jù)的順序;B個存儲器單元用于存儲參考幀象素塊數(shù)據(jù)。
8.如權(quán)利要求7所述的裝置,其特征在于,所述輸入地址調(diào)整單元和輸出地址調(diào)整單元中的映射關(guān)系為B×B塊內(nèi)的象素點(p,q),0≤p<B,0≤q<B,映射到B個存儲器模塊中的位置為(b,A′),直接映射為b=(p+q%B)%BA′=q其中b為存儲器單元的索引,A′為相應與B×B塊位置的地址偏移;B×B塊中每一行和每一列的數(shù)據(jù)在不同的存儲器模塊中,從而實現(xiàn)行列數(shù)據(jù)的并行存取。
9.如權(quán)利要求7所述的裝置,其特征在于,所述輸入地址調(diào)整單元和輸出地址調(diào)整單元中的映射關(guān)系為將B×B塊分成4×4的小塊,先對4×4小塊進行塊的線性移位,再對每一個小塊進行線性移位,同樣可以使行列數(shù)據(jù)存儲分布在不同的存儲器模塊中。
全文摘要
本發(fā)明涉及可變塊大小運動補償分象素插值的實現(xiàn)方法及實現(xiàn)裝置,屬于信號處理中的視頻和圖像編解碼技術(shù)領域,該方法包括將用于插值的象素數(shù)據(jù)存儲到參考象素塊數(shù)據(jù)緩存區(qū);將多個插值點分為多種類型,分別對每種類型的插值點進行插值,得到運動預測值;將所述運動預測值,根據(jù)各類型插值點的按行或者按列存儲到運動預測值存儲器。該裝置包括依次相連的參考象素塊數(shù)據(jù)緩存模塊,分象素插值單元和運動預測值存儲器。本發(fā)明可以提高分象素插值的效率。
文檔編號H04N7/32GK1909665SQ20061008914
公開日2007年2月7日 申請日期2006年8月7日 優(yōu)先權(quán)日2006年8月7日
發(fā)明者何蕓, 李宇, 瞿艷梅 申請人:清華大學