專利名稱:H.264解碼器的運動補償插值方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻解碼電路的ASIC實現(xiàn)。
背景技術(shù):
在H.264 baseline解碼器的ASIC實現(xiàn)中,運動補償插值器是關(guān)鍵模塊之一。由于H.264標準規(guī)定亮度像素點和色度像素點的插值公式不同,通常的做法是將這兩部分分開,做兩個插值器分別完成對亮度和色度的插值。這樣實現(xiàn)的設(shè)計往往具有較大的硬件復雜度,難以節(jié)約硬件開銷。并且由于亮度像素點和色度像素點是串行傳輸?shù)模瑑蓚€解碼器中始終至少有一個處于閑置狀態(tài)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種采用同一個插值器去實現(xiàn)亮度像素點和色度像素點的插值計算的H.264解碼器的運動補償插值器。
H.264標準規(guī)定,運動補償過程需要完成亞像素插值。對于亮度部分,插值精確到1/4像素。求出半像素點的方法如下所述利用所求半像素點左右(或上下)最近的各3個相鄰整像素點作加權(quán)平均,加權(quán)系數(shù)為1,-5,20,20,-5,1。以圖2a為例,若當前需要計算的半像素點為E,位于E左側(cè)的三個整像素位置上的點為A1,A0,A;位于E右側(cè)的三個整像素位置上的點為B,B0,B1。則,E計算公式為E=(A1-5×A0+20×A+20×B-5×B0+B1+16)/32 式(1)在具體硬件實現(xiàn)時,可采用如下方法E1=A1-5×A0+20×A+20×B-5×B0+B1+16,E由E1右移5bit得到。
其中利用插值求出1/4像素點的方法為,對最靠近所求1/4像素點的兩個半像素點(或一個整像素點和一個半像素點)求算術(shù)平均即可。以附圖2a為例,假設(shè)X是待求的1/4像素點。則X采用如下公式得到X=(E+F+1)/2式(2)實際用硬件實現(xiàn)時可采用如下方法X1=E+F+1,X由X1右移1bit得到。
對于色度部分,插值精確到1/8像素。設(shè)X’為待求1/8像素點,A’、B’、C’、D’為X’周圍相鄰的整像素點,它們的位置關(guān)系如圖3所示,設(shè)xFracC為X’和A’的橫坐標之差,yFracC為X’和A’的縱坐標之差。則X’的計算公式為X’=((8-xFracC)*(8-yFracC)*A’+xFracC*(8-yFracC)*B’+(8-xFracC)*yFracC*C’+xFracC*yFracC*D’+32)/64式(3)具體硬件實現(xiàn)時,可采用如下方法X1’=(8-xFracC)*(8-yFracC)*A’+xFracC*(8-yFracC)*B’+(8-xFracC)*yFracC*C’+xFracC*yFracC*D’+32,由X1’右移6比特即可得到所求X’。
本發(fā)明的優(yōu)點在于所述方法是在ASIC上實現(xiàn)的,其中,對于4×4大小的亮度塊和4×4大小的色度塊分別按以下步驟實現(xiàn)II.對于所述亮度塊,計算待求當前1/4像素點X時,依次含有以下步驟步驟(1.0)初始化,設(shè)定,整像素點A、B、C、D是當前4×4亮度塊中的一個2×2塊中的4個點,且X處在A、B、C、D構(gòu)成的正方形區(qū)域內(nèi),A、B、C、D按順時針方向設(shè)置,其中,A是2×2塊中的左上角頂點,以A為原點,橫坐標沿AB方向設(shè)置,縱坐標沿AD方向設(shè)置,A、A0、A1依次是待求1/4像素點X附近上側(cè)逆水平方向上的相鄰整像素點,B、B0、B1依次是X附近上側(cè)順水平方向的相鄰整像素點,D、D0、D1依次是X下側(cè)逆水平方向的相鄰整像素點,C、C0、C1是X下側(cè)順水平方向上的相鄰整像素點,同理,A、J0、J1及D、L0、L1分別是該像素點X附近左側(cè)逆、順垂直方向的相鄰整像素點,B、K0、K1及C、M0、M1分別是該像素點X附近右側(cè)逆、順垂直方向上的相鄰整像素點;E、H、I、F依次是線段AB、BC、CD、DA的中點,都是半像素點,G是線段FH的中點,為半像素點,F(xiàn)1、F0、F及H1、H0、H分別為半像素點G同一水平線的左方和右方最近的3個半像素點;步驟(1.1),在橫向半像素插值濾波器1存入整像素點A1、A0、A、B、B0、B1的值,在橫向半像素插值濾波器2存入半像素點F1、F0、F、H、H0、H1的值,在橫向半像素插值濾波器3存入整像素點D1、D0、D、C、C0、C1的值;步驟(1.2),在第一個時鐘周期內(nèi)執(zhí)行以下步驟縱向半像素插值濾波器從參考幀讀入整像素點A、D一列的6個相鄰整像素點,從上到下依次為J1、J0、A、D、L0、L1,并按以下公式計算半像素點F的值F=(J1-5×J0+20×A+20×D-5×L0+L1+16)/32,該縱向半像素插值濾波器分別把半像素點F的值送入移位寄存器組2,把整像素點A送入移位寄存器組1,把整像素點D送入移位寄存器組3;步驟(1.3),在第二個時鐘周期依次執(zhí)行以下的步驟該縱向半像素插值濾波器參考幀讀入整像素點B、C所在一列的6個相鄰整像素點,從上到下依次為K1、K0、B、C、M0、M1,并按以下公式求出半像素點H的值H=(K1-5×K0+20×B+20×D-5×M0+M1+16)/32,該縱向半像素插值濾波器分別把半像素點H送入移位寄存器組2,把整像素點B送入移位寄存器組1,把整像素點C送入移位寄存器組3;步驟(1.4),移位寄存器組1把整像素點A1、A0、A、B、B0、B1送入橫向半像素插值器1,該插值濾波器按照如下公式計算半像素點E的值E=(A1-5×A0+20×A+20×B-5×B0+B1+16)/32;移位寄存器組3把整像素點D1、D0、D、C、C0、C1送入橫向半像素插值器3,該插值濾波器按照如下公式計算半像素點I的值I=(D1-5×D0+20×D+20×C-5×C0+C1+16)/32;移位寄存器組2把半像素點F1、F0、F、H、H0、H1送入橫向半像素插值器2,該插值濾波器按照如下公式計算半像素點G的值G=(F1-5×F0+20×F+20×H-5×H0+H1+16)/32;步驟(1.5),移位寄存器組1把整像素點A、B的值,移位寄存器組2把整像素點F、H的值,移位寄存器組3把整像素點C、D的值,橫向半像素插值濾波器1把半像素點E的值,橫向半像素插值濾波器2把半像素點G的值,橫向半像素插值濾波器3把半像素點I的值,并行送入9選4模塊;步驟(1.6),該9選4模塊按輸入的4×4塊的橫、縱軸方向的運動向量分量的最低2比特確定所求1/4像素點所處的位置;若橫軸方向運動向量mvx,的最低2比特mvx[1:0]為00,則該待求像素在橫軸方向位于整像素位置;若mvx[1:0]為01,則該待求像素在橫軸方向位于整像素向右1/4像素位置;若mvx[1:0]為10,則該待求像素在橫軸方向位于整像素向右1/2像素位置;若mvx[1:0]為11,則該待求像素在橫軸方向位于整像素向右3/4像素位置;對于縱軸方向的運動向量mvy,則用“向下”代替上述的“向右”即可;根據(jù)由上述方法得到的所求1/4像素點所處的位置,9選4模塊選擇確定像素點X所在的小正方形的4個頂點A、E、G、F;步驟(1.7),該9選4模塊把步驟(1.6)所得到用于進一步計算所需的作為小正方形的4個像素點送入4選2模塊;用步驟(1.6)所述的運動向量最低2比特來判別若待求1/4像素點位于該小正方形的一條邊上,該4選2輸出該小正方形該邊的兩個頂點;若待求1/4像素點位于該小正方形中央,該4選2輸出該小正方形對角線的兩個頂點,所述的這兩個點為半像素點;步驟(1.8),該4選2模塊把步驟(1.7)得到的2個像素點輸入到2求1模塊;該2求1模塊對這兩個點求加權(quán)平均并完成舍如,即求出待求的1/4像素點;II對于所述的色度塊,計算當前待求1/8像素點X’時,依次含有以下步驟步驟(2.0),初始化,設(shè)定,整像素點A’、B’、C’、D’是當前4×4色度塊中的一個2×2塊中的4個點,且X’處在A’、B’、C’、D’構(gòu)成的正方形區(qū)域內(nèi),A’、B’、C’、D’按順時針方向設(shè)置,其中,A’是2×2塊中的左上角頂點,以A’為原點,橫坐標沿A’B’方向設(shè)置,縱坐標沿A’D’方向設(shè)置,不失一般性,不妨設(shè)X’位于邊A’B’上;步驟(2.1),所述的縱向半像素插值濾波器從參考幀讀入A’、B’、C’、D’4個整像素點,按以下方式求出正方形A’B’C’D’范圍內(nèi)所有5個半像素點對于處在整像素點連線位置上的半像素點,利用連線端點上的兩個整像素點求算術(shù)平均值,即得到該半像素點的值;對于處在正方形A’B’C’D’中心的半像素點,利用A’、B’、C’、D’4個點求算術(shù)平均值,即得到該半像素點的值;步驟(2.2),把步驟(2.1)所述的4個頂點A’、B’、C’、D’及5個半像素點共9個點送入9選4模塊;該9選4模塊根據(jù)待求1/8像素點X’的橫、縱軸方向的運動向量mvx、mvy的最低3比特mvx[2:0]、mvy[2:0],按如下方法確定待求1/8像素點X’所處的位置若mvx[2:0]為000,則處于橫軸方向的整像素位置;若mvx[2:0]為001,則處于橫軸方向的1/8像素位置;若mvx[2:0]為010,則處于橫軸方向的1/4像素位置;若mvx[2:0]為011,則處于橫軸方向的3/8像素位置;若mvx[2:0]為100,則處于橫軸方向的1/2像素位置;若mvx[2:0]為101,則處于橫軸方向的5/8像素位置;若mvx[2:0]為110,則處于橫軸方向的3/4像素位置;若mvx[2:0]為111,則處于橫軸方向的7/8像素位置;對于縱軸方向,把所述的“向右”改成“向下”即可;步驟(2.3),該9選4模塊根據(jù)步驟(2.2)中得到的所求像素點X’的位置信息,確定X’所處的小正方形的四個頂點A’、E’、F’、G’,并通過一個暫存寄存器組把A’、E’、F’、G’的值送入縱向半像素插值濾波器;步驟(2.4),所述的縱向半像素插值濾波器根據(jù)輸入的4個像素點A’、E’、F’、G’,算出5個1/4像素點,這5個1/4像素點和輸入的A’、E’、F’、G’構(gòu)成一個3×3的“田”字形陣列;計算的方法同步驟(2.1);縱向半像素插值濾波器把這9個點送入9選4模塊;步驟(2.5),所述9選4模塊按照步驟(2.2)所述的方法找到待求像素點X’所處的小正方形的4個頂點A’、H’、I’、J’,并把A’、H’、I’、J’送入到4選2模塊;步驟(2.6),所述的4選2模塊向所述的2求1模塊輸出小正方形A’、H’、I’、J’的X’所在的一條邊的端點A’、H’;步驟(2.7),所述2選1模塊對接收到的像素點A’、H’求算術(shù)平均值,并完成舍入,得到所求的1/8像素點X’。
根據(jù)本發(fā)明提出的上述方法實現(xiàn)的H.264運動補償插值器可以在傳統(tǒng)運動補償插值器插值器的基礎(chǔ)上節(jié)省硬件資源,減小芯片面積,從而降低成本。
圖1是本發(fā)明的運動補償插值器的頂層結(jié)構(gòu)示意圖。
圖2是亮度像素點的插值流程。這實際上是一個不斷縮小搜索范圍,并在當前范圍內(nèi)計算所需值的過程。
圖3是色度像素點的插值流程。這實際上是一個不斷縮小搜索范圍,并在當前范圍內(nèi)計算所需值的過程。
圖4是移位寄存器組結(jié)構(gòu)示意圖。該移位寄存器組可以存儲當前的像素點和當前像素點之前輸入的3個像素點。左端第一個個寄存器中的值被直接輸出到橫向半像素插值濾波器。o1、o2端口將被輸出到9選4模塊,作為候選的9個點中的2個。由于亮度和色度候選的點的位置不同,需要針對像素點的種類輸出不同位置的值。若當前處理的是亮度部分,開關(guān)需要合向右側(cè);否則,開關(guān)要合向左側(cè)。
圖5是縱向半像素插值濾波器結(jié)構(gòu)示意圖。該圖中,標注有Sx符號的模塊表示將輸入的數(shù)據(jù)向左移x位。該結(jié)構(gòu)利用移位和加法替代了乘系數(shù)操作,實現(xiàn)了加權(quán)求和功能。當處理亮度像素點時,所有多路選擇器向下的支路被選中,可用于實現(xiàn)6抽頭的插值。當處理色度像素點時,所有多路選擇器向上或向下的支路都可被選中;若向上支路被選中,它可用于5個半像素點的生成,若向下支路被選中,它可用于縱向半像素點的生成。
圖6是橫向半像素插值濾波器結(jié)構(gòu)示意圖。該圖中,標注有Sx符號的模塊表示將輸入的數(shù)據(jù)向左移x位。L是寄存器組,可將寄存數(shù)據(jù)延遲一個時鐘送向后一級。該結(jié)構(gòu)利用移位和加法替代了乘系數(shù)操作,實現(xiàn)了加權(quán)求和功能。值得注意的是,移位只需對總線的對應位進行連接,不需額外的硬件資源。該結(jié)構(gòu)中僅僅采用一個加法器就實現(xiàn)了6抽頭濾波器中的4個乘系數(shù)操作(分別乘以-5,20,20,-5)。當處理亮度像素點時,所有多路選擇器向上的支路被選中,可用于實現(xiàn)6抽頭的插值;當處理色度像素點時,所有多路選擇器向下的支路被選中,可用于求兩個相鄰點的算術(shù)平均值。
圖7是9選4模塊結(jié)構(gòu)示意圖。該模塊負責從輸入的9個構(gòu)成“田”字形的點中選出4個點,用于下一步操作。這個功能通過4組多路選擇器完成。其中sel信號是運動向量mvx和mvy中的各一比特組成,根據(jù)亮度部分或色度部分略有不同。
圖8是4選2模塊結(jié)構(gòu)示意圖。該模塊負責從輸入的4個構(gòu)成正方形的點中選出2個點,用于下一步操作。這個模塊主要由2個加法器和6個多路選擇器組構(gòu)成。加法器用于處理色度部分計算時的一些中間變量;左起第一列多路選擇器用作亮度部分的處理,它們負責從輸入的4個亮度像素點中選擇2個輸出;左起第二列多路選擇器用作色度部分的處理,它們負責從輸入的4個色度像素點和加法器輸出的中間結(jié)果中選擇2個輸出;左起第三列多路選擇器負責從亮度和色度的結(jié)果中選擇一組輸出。
圖9是2求1模塊結(jié)構(gòu)示意圖。它利用輸入的兩個點作算術(shù)平均,并完成舍入操作。本模塊的輸出就是最終待求的1/4亮度像素點或者1/8色度像素點。
具體實施例方式
本發(fā)明將對亮度像素點進行插值的流程劃分為4個步驟。圖2a至圖2d為該流程的示意圖。假設(shè)X為當前待求的1/4像素點,A、A0、A1、B、B0、B1、C、C0、C1、D、D0和D1都是X附近的像素點,他們的位置關(guān)系如圖2a所示。則本流程的4個步驟如下所述。
1.求半像素點。利用6抽頭濾波器(插值公式如式(1)所述)計算得到5個半像素點。以圖2為例,X為待求1/4像素點,A、B、C、D四個整像素點為X所在正方形區(qū)域的頂點。這樣,本步驟所求的5個半像素點為E、F、G、H和I。其中,E利用式(1)所述方法求得,輸入為A、A0、A1、B、B0和B1;F利用式(1)所述方法求得,其輸入為F上方和下方最近的各3個整像素點,即J1、J0、A、D、L0、L1;G利用式(1)所述方法求得,其輸入為G同一水平線上左方和右方最近的各3個半像素點。E、F、G、H和I的計算方法H.264標準已經(jīng)有詳細的論述,因此不再累述。本步驟完成之后,包括A、B、C、D四個整像素點(這是原始輸入)和E、F、G、H、I五個半像素點在內(nèi),X所在正方形區(qū)域內(nèi)所有4個整像素點和5個半像素點都為已知,它們構(gòu)成一個“田”字形。
2.9選4。對于亮度像素點,運動向量的最低2比特表征了該像素點所處的分像素位置。例如,若橫軸方向的運動向量(設(shè)為mvx)的最低2比特(mvx[1:0])為00,則表示該像素點在橫軸方向處于整像素位置;若mvx[1:0]為01,則表示該像素點在橫軸方向處于整像素點向右1/4像素位置;若mvx[1:0]為10,則表示該像素點在橫軸方向處于整像素點向右1/2像素位置;若mvx[1:0]為11,則表示該像素點在橫軸方向處于整像向右3/4像素位置。對于縱軸方向,也是類似的,只要將“向右”改為“向右下”即可。利用這些信息,即可以從步驟1得到的9個點中選出步驟3進一步計算所需的4個點。以圖2為例,X點對應的X、縱軸方向的運動向量最低2比特分別為01、01。利用這些比特,可以進一步確定X在正方形ABCD的左上部分的正方形(即正方形AEGF)內(nèi)部。因此可以選出A、E、G和F為步驟3進一步計算所需的4個點。
3.4選2。步驟2已經(jīng)確定待求1/4像素點所在的小正方形的4個頂點。按照標準規(guī)定,為求出該1/4像素點,只需從這4個點中選出合適的兩個點,求算術(shù)平均即可。如果待求點處在小正方形的一條邊上,則為該邊的兩個端點。否則,如果所求的點位于4個點的中央(即“田”字的中心),則為小正方形的一條對角線的兩個端點(由于小正方形有兩條對角線,我們只輸出兩個端點都為半像素點的那條對角線的端點)。以圖2為例,如果待求的1/4像素點為X,那么本步驟輸出的結(jié)果是E和F(注意這里E、F都是半像素點。之所以不選A、G,是因為A不是半像素點)。
4.2求1。對步驟3得到的2個點求算術(shù)平均并完成舍入,即可求出待求的1/4像素點。
如上所述,求亮度部分1/4像素點的插值過程可以描述為求半像素點9選44選22求1。如果當前所需求解的不是1/4像素位置上的點,可以將輸入的整像素點或者步驟1~3中的某一步的結(jié)果直接引出作為插值器的輸出。
為了在亮度插值器的基礎(chǔ)上同時完成色度像素點的插值,需要對H.264標準中色度像素點的插值公式作恒等變換。設(shè)X’為待求亞像素點,A’、B’、C’、D’為X’周圍相鄰的整像素點,其中A’為左上角的像素點;設(shè)xFracC為X’和A’的橫坐標之差,yFracC為X’和A’的縱坐標之差。H.264標準規(guī)定色度像素點的插值公式可描述為X’=((8-xFracC )*(8-yFracC)*A’+xFracC*(8-yFracC)*B’+(8-xFracC)*yFracC*C’+xFracC*yFracC*D’+32)/64式(3)實際用硬件實現(xiàn)時,采用如下方法實現(xiàn)X1’=(8-xFracC)*(8-yFracC)*A’+xFracC*(8-yFracC)*B’+(8-xFracC)*yFracC*C’+xFracC*yFracC*D’+32,由X1’右移6比特即可得到所求X’。
本發(fā)明將對色度像素點進行插值的流程劃分為6個步驟。圖3為該流程的示意圖。假設(shè)X’為當前待求的1/4像素點,A’、B’、C’、D’四個相鄰的整像素點是X’所在正方形區(qū)域的頂點,它們的位置關(guān)系如圖3所示。則本流程的6個步驟如下所述。
1.求半像素點。利用求輸入整像素點A’、B’、C’、D’的算術(shù)平均值的辦法,求出正方形A’B’C’D’內(nèi)的所有半像素點。其中,對于處在整像素點連線上的半像素點,利用連線端點上的2個整像素點求算術(shù)平均即可,對于處在正方形中心的半像素點,則求A’、B’、C’、D’四個數(shù)的算術(shù)平均值。以圖3為例,E’=(A’+B’)/2;G’=(A’+C’)/2而F’=(A’+B’+C’+D’)/4。這一步后,以A’、B’、C’、D’為頂點的正方形內(nèi)部的9個構(gòu)成“田”字形的點全部成為已知。
2.9選4。對于色度像素點,運動向量的最低3比特表征了該像素點所處的分像素位置。假設(shè)運動向量為mvx、mvy,若橫軸方向的運動向量(mvx)的最低3比特(mvx[2:0])為000,則表示該像素點在橫軸方向處于整像素位置;若mvx[2:0]為001,則表示該像素點在橫軸方向處于整像向右1/8像素位置……以此類推,直至mvx[2:0]為111,則表示該像素點在橫軸方向處于整像向右7/8像素位置。對于縱軸方向的運動向量mvy,也是類似的,只要將“向右”改為“向下”即可。在本步驟,利用mvx[2:1]和mvy[2:1],即可以從步驟1得到的9個點中選出步驟3進一步計算所需的4個點。以圖3為例,X’點對應的X、縱軸方向的運動向量最低3比特分別為001、000。利用其中高位兩比特,可以進一步確定X’在正方形A’B’C’D’的左上部分的正方形(即正方形A’E’F’G’)內(nèi)部。因此可以從以A’、B’、C’、D’為頂點的正方形內(nèi)部的9個構(gòu)成“田”字形的點中,選出A’、E’、G’和F’為步驟3進一步計算所需的4個點。
3.求半像素點。這個步驟實際上并不是真正求出半像素位置上的點。而是在步驟2基礎(chǔ)上進一步計算小正方形內(nèi)部的點。以圖3為例,本步驟是以A’、E’、F’和G’點為正方形的四個頂點,重復步驟1。也就是說,在步驟1中,利用A’、E’、G’、 F’代替A’、B’、C’、D’,就是步驟3。由于該過程的實際操作和步驟1完全一樣,所以同樣命名為“求半像素點”。完成這一步后,以A’、E’、G’、F’為頂點的正方形內(nèi)部的9個構(gòu)成“田”字形的點全部成為已知。
4.9選4。把以A’、E’、G’、F’為頂點的正方形內(nèi)部的9個構(gòu)成“田”字形的點作為輸入,重復步驟2,可以得到步驟5所需要進一步計算的4個點。本步驟和步驟2的不同在于,本步驟用到的運動向量為mvx[1:0]、mvy[1:0],而步驟2用到的運動向量為mvx[2:1]、mvy[2:1]。以圖3為例,本步驟完成后可以選出A’、H’、I’、J’作為進一步操作所需的4個點。
5.4選2。步驟4得到的4個點構(gòu)成一個小正方形,待求像素點必然在該小正方形區(qū)域內(nèi)。本步驟根據(jù)待求點的不同位置,為步驟6提供不同的輸入。如果待求點處在小正方形的一條邊上,則向步驟6輸出小正方形該邊的兩個端點。否則,如果所求的點位于4個點的中央(即“田”字的中心),則輸出的兩個點值為(A’+B’)和(C’+D’),因為(A’+B’)和(C’+D’)在2求1模塊內(nèi)相加即可實現(xiàn)A’、B’、C’、D’4個點的算術(shù)平均。在圖3中,該步驟的輸出為A’、H’。
6.2求1。對5的結(jié)果求算術(shù)平均,并完成舍入,即可得帶待求得1/8像素的值。
由上所述,求色度部分1/8像素點的插值的過程可以描述為求半像素點9選4求半像素點9選44選22求1。如果當前所需求解的不是1/8像素位置上的點,可以將輸入的整像素點或者1~5中的某一步的結(jié)果直接引出作為插值器的輸出??梢钥吹缴认袼夭逯盗鞒炭梢酝ㄟ^在亮度像素插值的第2步、第3步之間再次插入第1、第2步得到。
本發(fā)明的色度插值和亮度插值的硬件復用結(jié)構(gòu),特征如下1.在上述色度和亮度插值流程中,擁有相同簡稱的步驟共享相同的硬件資源。例如,亮度插值中的求半像素點和色度插值中的求半像素點共享同一個硬件模塊;亮度插值中的9選4和色度插值中的9選4共享同一個硬件模塊;亮度插值中的4選2和色度插值中的4選2共享同一個硬件模塊等等。
2.按照亮度像素點插值流程構(gòu)建插值器結(jié)構(gòu)的骨架,依靠該骨架可以完成亮度像素點插值。
3.在2所述的骨架的9選4和半像素點生成步驟之間添加反饋環(huán)路,用以完成色度像素點插值。
4.色度像素點插值分成兩個節(jié)拍完成。在第一個節(jié)拍內(nèi)輸入插值原始數(shù)據(jù),直到完成第一次9選4。第二個節(jié)拍將第一次9選4的結(jié)果反饋到半像素點生成單元(縱向半像素點插值濾波器可以充當半像素點生成單元),直至完成求最后結(jié)果。
圖1是本發(fā)明設(shè)計的運動補償插值器的頂層結(jié)構(gòu)圖。此處結(jié)合圖1說明該結(jié)構(gòu)的工作原理。
對亮度部分的處理原理如本節(jié)所述。運動補償插值器的數(shù)據(jù)輸入為從參考幀讀入的數(shù)據(jù)。每個時鐘周期輸入同一列的6個相鄰整像素點(下一個時鐘周期,輸入右側(cè)相鄰一列的6個相鄰整像素點)。以圖1為例,插值器輸入端輸入的6個點J1、J0、A、D、L0、L1分別對應于圖2中的同名點。由此,下一個時鐘周期,插值器輸入就變?yōu)镵1、K0、B、C、M0、M1。
假設(shè)當前時鐘周期輸入的六個點為J1、J0、A、D、L0、L1。這六個點首先進入縱向半像素點插值濾波器,該濾波器對這六個輸入的點完成式(1)所描述的操作,并且輸出一個半像素點F。F位于A和D連線的中點。F點被輸出到移位寄存器組2中備用。與此同時,A和D也分別被輸入到移位寄存器組1和3種備用,而其他的4個輸入則不需要再被用到,可以丟棄了。
3個移位寄存器組根據(jù)當前所求點的位置把合適的操作點輸出給其他模塊。一方面,移位寄存器組將自身存儲的已知點輸入9選4模塊供其選擇;另一方面,它還為橫向半像素插值濾波器提供輸入數(shù)據(jù)。所有橫向半像素濾波器和移位寄存器組的輸出全部作為9選4模塊的輸入。這樣的輸出共有9個。以計算圖2中的點X為例移位寄存器組1輸出A、B,橫向半像素濾波器1輸出E;移位寄存器組2輸出F、H,橫向半像素濾波器2輸出G;移位寄存器組3輸出D、C,橫向半像素濾波器3輸出I。
之后,這9個點被9選4模塊選擇,完成上文所說的9選4步驟,得到4個點。這4個點進入4選2模塊,完成上文所述的4選2步驟。4選2模塊的2個輸出進入2求1模塊,完成2求1步驟,從而得到所求的1/4亮度像素點的值。在處理亮度像素點的時候,圖1中縱向半像素插值濾波器的iA和iB端口外的開關(guān)可以合向任何一邊,它并不對處理結(jié)果產(chǎn)生影響;9選4模塊入口處的開關(guān)必須合向下方,即連接到橫向半像素濾波器和移位寄存器組的輸出。
對色度部分的操作如本節(jié)所述。對色度部分進行操作時,運動補償插值器的數(shù)據(jù)輸入為從參考幀讀入的2個縱向相鄰的整像素點。色度部分的插值過程分成兩個節(jié)拍。在第一個節(jié)拍內(nèi),圖1中縱向半像素插值濾波器的iA和iB端口外的開關(guān)向左合上,接通A’和D’(此時的A’、D’對應于圖3中的同名點)。此時輸入的2個縱向相鄰的整像素點A’和D’進入縱向半像素插值濾波器??v向半像素插值濾波器立刻計算出這兩個點連線中點的半像素點(圖3中的G’)。這個半像素點被輸出到移位寄存器組2中備用。與此同時,A’和D’也分別被輸入到移位寄存器組1和3種備用。在此之后,移位寄存器組和橫向半像素插值濾波器的工作和對亮度像素點操作時一樣,它們合作聯(lián)合輸出9個“田”字形的點(4個整像素點和5個半像素點)。在第一個節(jié)拍時,9選4模塊入口處的開關(guān)必須合向下方,即連接到橫向半像素濾波器和移位寄存器組的輸出。9選4模塊的輸出被寄存到暫存寄存器堆中。暫存寄存器堆由4個寄存器堆組成,每個寄存器堆存放一個點的數(shù)據(jù)。在第二個節(jié)拍時,圖1中縱向半像素插值濾波器的iA和iB端口外的開關(guān)向右合上,接通暫存寄存器堆的數(shù)據(jù)。iA~iD輸入9選4模塊的4個輸出,oa~oe輸出計算后的5個點。iA~iD及oa~oe上的9個點,在位置上構(gòu)成一個“田”字形。這時候的縱向半像素插值濾波完成的是色度操作流程中的步驟3。第二個節(jié)拍內(nèi),9選4模塊入口處的開關(guān)必須合向上方,將節(jié)拍一產(chǎn)生的iA~iD及oa~oe上的9個點輸入9選4模塊,完成上文所說的9選4步驟,得到4個點。這4個點進入4選2模塊,完成上文所述的4選2步驟。4選2模塊的2個輸出進入2求1模塊,完成2求1步驟,從而得到所求的1/8色度像素點的值。
權(quán)利要求
1.H.264解碼器的運動補償插值方法,其特征在于所述方法是在ASIC上實現(xiàn)的,其中,對于4×4大小的亮度塊和4×4大小的色度塊分別按以下步驟實現(xiàn)I.對于所述亮度塊,計算待求當前1/4像素點X時,依次含有以下步驟步驟(1.0),初始化,設(shè)定整像素點A、B、C、D是當前4×4亮度塊中的一個2×2塊中的4個點,且X處在A、B、C、D構(gòu)成的正方形區(qū)域內(nèi),A、B、C、D按順時針方向設(shè)置,其中,A是2×2塊中的左上角頂點,以A為原點,橫坐標沿A=>B方向設(shè)置,縱坐標沿A=>D方向設(shè)置,A、A0、A1依次是待求1/4像素點X附近上側(cè)逆水平方向上的相鄰整像素點,B、B0、B1依次是X附近上側(cè)順水平方向的相鄰整像素點,D、D0、D1依次是X下側(cè)逆水平方向的相鄰整像素點,C、C0、C1是X下側(cè)順水平方向上的相鄰整像素點,同理,A、J0、J1及D、L0、L1分別是該像素點X附近左側(cè)逆、順垂直方向的相鄰整像素點,B、K0、K1及C、M0、M1分別是該像素點X附近右側(cè)逆、順垂直方向上的相鄰整像素點;E、H、I、F依次是線段AB、BC、CD、DA的中點,都是半像素點,G是線段FH的中點,為半像素點,F(xiàn)1、F0、F及H1、H0、H分別為半像素點G同一水平線的左方和右方最近的3個半像素點;步驟(1.1),在橫向半像素插值濾波器1存入整像素點A1、A0、A、B、B0、B1的值,在橫向半像素插值濾波器2存入半像素點F1、F0、F、H、H0、H1的值,在橫向半像素插值濾波器3存入整像素點D1、D0、D、C、C0、C1的值;步驟(1.2),在第一個時鐘周期內(nèi)執(zhí)行以下步驟縱向半像素插值濾波器從參考幀讀入整像素點A、D一列的6個相鄰整像素點,從上到下依次為J1、J0、A、D、L0、L1,并按以下公式計算半像素點F的值F=(J1-5×J0+20×A+20×D-5×L0+L1+16)/32,該縱向半像素插值濾波器分別把半像素點F的值送入移位寄存器組2,把整像素點A送入移位寄存器組1,把整像素點D送入移位寄存器組3;步驟(1.3),在第二個時鐘周期依次執(zhí)行以下的步驟該縱向半像素插值濾波器參考幀讀入整像素點B、C所在一列的6個相鄰整像素點,從上到下依次為K1、K0、B、C、M0、M1,并按以下公式求出半像素點H的值H=(K1-5×K0+20×B+20×D-5×M0+M1+16)/32,該縱向半像素插值濾波器分別把半像素點H送入移位寄存器組2,把整像素點B送入移位寄存器組1,把整像素點C送入移位寄存器組3;步驟(1.4),移位寄存器組1把整像素點A1、A0、A、B、B0、B1送入橫向半像素插值器1,該插值濾波器按照如下公式計算半像素點E的值E=(A1-5×A0+20×A+20×B-5×B0+B1+16)/32;移位寄存器組3把整像素點D1、D0、D、C、C0、C1送入橫向半像素插值器3,該插值濾波器按照如下公式計算半像素點I的值I=(D1-5×D0+20×D+20×C-5×C0+C1+16)/32;移位寄存器組2把半像素點F1、F0、F、H、H0、H1送入橫向半像素插值器2,該插值濾波器按照如下公式計算半像素點G的值G=(F1-5×F0+20×F+20×H-5×H0+H1+16)/32;步驟(1.5),移位寄存器組1把整像素點A、B的值,移位寄存器組2把整像素點F、H的值,移位寄存器組3把整像素點C、D的值,橫向半像素插值濾波器1把半像素點E的值,橫向半像素插值濾波器2把半像素點G的值,橫向半像素插值濾波器3把半像素點I的值,并行送入9選4模塊;步驟(1.6),該9選4模塊按輸入的4×4塊的橫、縱軸方向的運動向量分量的最低2比特確定所求1/4像素點所處的位置;若橫軸方向運動向量mvx的最低2比特mvx[1:0]為00,則該待求像素在橫軸方向位于整像素位置;若mvx[1:0]為01,則該待求像素在橫軸方向位于整像素向右1/4像素位置;若mvx[1:0]為10,則該待求像素在橫軸方向位于整像素向右1/2像素位置;若mvx[1:0]為11,則該待求像素在橫軸方向位于整像素向右3/4像素位置;對于縱軸方向的運動向量mvy,則用“向下”代替上述的“向右”即可;根據(jù)由上述方法得到的所求1/4像素點所處的位置,9選4模塊選擇確定像素點X所在的小正方形的4個頂點A、E、G、F;步驟(1.7),該9選4模塊把步驟(1.6)所得到用于進一步計算所需的作為小正方形的4個像素點送入4選2模塊;用步驟(1.6)所述的運動向量最低2比特來判別若待求1/4像素點位于該小正方形的一條邊上,該4選2輸出該小正方形該邊的兩個頂點;若待求1/4像素點位于該小正方形中央,該4選2輸出該小正方形對角線的兩個頂點,所述的這兩個點為半像素點;步驟(1.8),該4選2模塊把步驟(1.7)得到的2個像素點輸入到2求1模塊;該2求1模塊對這兩個點求加權(quán)平均并完成舍如,即求出待求的1/4像素點;II對于所述的色度塊,計算當前待求1/8像素點X’時,依次含有以下步驟步驟(2.0),初始化,設(shè)定,整像素點A’、B’、C’、D’是當前4×4色度塊中的一個2×2塊中的4個點,且X’處在A’、B’、C’、D’構(gòu)成的正方形區(qū)域內(nèi),A’、B’、C’、D’按順時針方向設(shè)置,其中,A’是2×2塊中的左上角頂點,以A’為原點,橫坐標沿A’=>B’方向設(shè)置,縱坐標沿A’=>D’方向設(shè)置,不失一般性,不妨設(shè)X’位于邊A’B’上;步驟(2.1),所述的縱向半像素插值濾波器從參考幀讀入A’、B’、C’、D’4個整像素點,按以下方式求出正方形A’B’C’D’范圍內(nèi)所有5個半像素點對于處在整像素點連線位置上的半像素點,利用連線端點上的兩個整像素點求算術(shù)平均值,即得到該半像素點的值;對于處在正方形A’B’C’D’中心的半像素點,利用A’、B’、C’、D’4個點求算術(shù)平均值,即得到該半像素點的值;步驟(2.2),把步驟(2.1)所述的4個頂點A’、B’、C’、D’及5個半像素點共9個點送入9選4模塊;該9選4模塊根據(jù)待求1/8像素點X’的橫、縱軸方向的運動向量mvx、mvy的最低3比特mvx[2:0]、mvy[2:0],按如下方法確定待求1/8像素點X’所處的位置若mvx[2:0]為000,則處于橫軸方向的整像素位置;若mvx[2:0]為001,則處于橫軸方向的1/8像素位置;若mvx[2:0]為010,則處于橫軸方向的1/4像素位置;若mvx[2:0]為011,則處于橫軸方向的3/8像素位置;若mvx[2:0]為100,則處于橫軸方向的1/2像素位置;若mvx[2:0]為101,則處于橫軸方向的5/8像素位置;若mvx[2:0]為110,則處于橫軸方向的3/4像素位置;若mvx[2:0]為111,則處于橫軸方向的7/8像素位置;對于縱軸方向,把所述的“向右”改成“向下”即可;步驟(2.3),該9選4模塊根據(jù)步驟(2.2)中得到的所求像素點X’的位置信息,確定X’所處的小正方形的四個頂點A’、E’、F’、G’,并通過一個暫存寄存器組把A’、E’、F’、G’的值送入縱向半像素插值濾波器;步驟(2.4),所述的縱向半像素插值濾波器根據(jù)輸入的4個像素點A’、E’、F’、G’,算出5個1/4像素點,這5個1/4像素點和輸入的A’、E’、F’、G’構(gòu)成一個3×3的“田”字形陣列;計算的方法同步驟(2.1);縱向半像素插值濾波器把這9個點送入9選4模塊;步驟(2.5),所述9選4模塊按照步驟(2.2)所述的方法找到待求像素點X’所處的小正方形的4個頂點A’、H’、I’、J’,并把A’、H’、I’、J’送入到4選2模塊;步驟(2.6),所述的4選2模塊向所述的2求1模塊輸出小正方形A’、H’、I’、J’的X’所在的一條邊的端點A’、H’;步驟(2.7),所述2選1模塊對接收到的像素點A’、H’求算術(shù)平均值,并完成舍入,得到所求的1/8像素點X’。
全文摘要
本發(fā)明涉及視頻解碼電路的運動補償插值技術(shù)領(lǐng)域,其特征在于采用同一組半像素插值濾波器形成亮度(或色度)部分的4個整像素點和5個半像素點的值,然后再依次通過9選4、4選2模塊用待求的像素點對應的運動向量的最低2比特或3比特來判斷待求像素點所處的位置,找到它的相鄰兩個像素點,再通過求算術(shù)平均來算出待求像素點的值;對于色度像素部分,9選4模塊首次選出的小正方形的4個頂點對應的像素值需要被反饋回縱向半像素濾波器,用于求出小正方形中的5個像素點,該5個像素點和4個頂點共9個點構(gòu)成“田”字形,然后它們依次通過9選4、4選2模塊完成和亮度部分相類似的過程。本發(fā)明所述的方法可以有效的降低芯片面積,節(jié)約成本。
文檔編號H04N9/77GK1964493SQ200610144288
公開日2007年5月16日 申請日期2006年12月1日 優(yōu)先權(quán)日2006年12月1日
發(fā)明者楊華中, 俞堯, 羅嶸 申請人:清華大學