專利名稱:視頻編碼器中一種快速的搜索塊讀取模塊的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信號(hào)處理中的視頻編碼領(lǐng)域,涉及視頻編碼器中一種快速的搜索塊讀取模塊背景技術(shù)視頻是指由一系列時(shí)間上相關(guān)的圖像組成的系列,其中的每幅圖像稱為一個(gè)“幀”(本申請(qǐng)中對(duì)幀模式和場(chǎng)模式的圖像都統(tǒng)一適用,所以不再區(qū)分幀和場(chǎng),統(tǒng)一稱為幀),每個(gè)幀又可以劃分為若干個(gè)“塊”,通常塊為正方形或矩形,視頻編碼以塊為基本單位進(jìn)行編碼,視頻編碼中常用的塊有16×16,8×16,16×8,8×8,4×4等,都是以象素為單位;“象素”則是指構(gòu)成圖像的點(diǎn),是構(gòu)成圖像的最小單元。
對(duì)視頻進(jìn)行編碼的目的是對(duì)視頻的數(shù)據(jù)進(jìn)行壓縮,以方便存儲(chǔ)和傳輸,而視頻編碼器就是具有該功能的器件。一個(gè)好的視頻編碼器,可以在保持視頻盡量好的視覺質(zhì)量的同時(shí),把數(shù)據(jù)量壓縮到盡可能低。
視頻編碼器由很多功能模塊組成,其中“運(yùn)動(dòng)估計(jì)(motion estimation,ME)模塊”是視頻編碼器中的一個(gè)重要模塊,承擔(dān)了整個(gè)編碼過程中90%左右的運(yùn)算量。運(yùn)動(dòng)估計(jì)模塊實(shí)現(xiàn)的功能是,針對(duì)當(dāng)前需要編碼的塊,從用于參考的一幀圖像中,找出一個(gè)和當(dāng)前要編碼的圖像塊大小相同的、匹配程度最好的塊,并利用這個(gè)塊對(duì)當(dāng)前編碼的塊進(jìn)行預(yù)測(cè),得到預(yù)測(cè)殘差。通常,如果從整個(gè)一幀參考圖像中搜尋用于預(yù)測(cè)的塊,運(yùn)算量會(huì)相當(dāng)巨大,所以定義一個(gè)“搜索范圍”,比一幀圖像的區(qū)域小些,比塊的區(qū)域大些;所用的匹配程度最好的塊就從這個(gè)區(qū)域中尋找。
如圖1所示,該圖示意了運(yùn)動(dòng)估計(jì)模塊所實(shí)現(xiàn)的功能,該圖包括了一個(gè)m×n的待編碼圖像塊(在圖像處理中,說一個(gè)圖像是x×y,是指“寬(水平方向)×高(垂直方向)”,單位為象素,和有時(shí)所用的“行數(shù)(垂直方向)×列數(shù)(水平方向)有所區(qū)別),需要對(duì)該塊進(jìn)行編碼;一個(gè)W×H的參考幀,這個(gè)參考幀中,規(guī)定了一個(gè)a×b的區(qū)域,該區(qū)域是搜索范圍;如上所提及的一個(gè)a×b的搜索范圍,在這個(gè)搜索范圍內(nèi),可以選出m×n的塊作為搜索塊;如上所提及的m×n的搜索塊,用于和待編碼塊做匹配程度的檢測(cè);一個(gè)m×n的殘差圖像塊,由待編碼圖像塊和搜索圖像塊的對(duì)應(yīng)象素分別作差得到。該圖中表示運(yùn)動(dòng)估計(jì)模塊的功能為選擇搜索范圍內(nèi)所有可能的搜索塊,和待編碼圖像塊作差得到一個(gè)m×n的殘差圖像塊,根據(jù)殘差圖像塊得到搜索塊和待編碼圖像塊匹配程度;由于在a×b的搜索范圍內(nèi),有很多m×n的搜索塊,因此最后需要從這些搜索塊中,選擇一個(gè)匹配程度最好的搜索塊,這個(gè)從所有搜索塊中選取的匹配程度最好的塊,稱為“最佳參考?jí)K”;最后運(yùn)動(dòng)估計(jì)模塊利用最佳參考?jí)K對(duì)待編碼圖像塊進(jìn)行預(yù)測(cè),得到最終真正要使用的殘差圖像塊。
運(yùn)動(dòng)估計(jì)模塊中,實(shí)現(xiàn)從所有搜索塊中選出最佳參考?jí)K這個(gè)功能的子模塊,是運(yùn)動(dòng)搜索(motion search)模塊。為了從所有搜索塊選出最佳參考?jí)K,一個(gè)運(yùn)動(dòng)搜索模塊,需要遍歷所有可能的搜索塊,對(duì)每個(gè)搜索塊作匹配程度檢測(cè)。
一種傳統(tǒng)的運(yùn)動(dòng)搜索模塊遍歷所有搜索塊的過程如圖2所示,圖中包括一個(gè)a×b的搜索范圍;從搜索范圍內(nèi)選擇的m×n的搜索塊;圖中所示的流程為先從搜索范圍的左上角開始,選擇一個(gè)搜索塊,對(duì)這個(gè)搜索塊作匹配程度檢測(cè),記錄匹配程度;完成后,向下移動(dòng)一個(gè)象素,選擇一個(gè)新的搜索塊,對(duì)這個(gè)搜索塊作匹配程度檢測(cè),記錄匹配程度,并和之前已檢測(cè)的搜索塊的匹配程度作比較;完成后,再向下移動(dòng)一個(gè)象素,取新的塊,繼續(xù)相同過程,一直到搜索范圍的底端,這樣就完成了搜索范圍中,一個(gè)列的搜索塊的匹配程度檢測(cè)和比較。之后回到搜索范圍頂端,向右移動(dòng)一個(gè)象素,開始新的一個(gè)列的搜索塊的匹配程度檢測(cè)和比較,如此進(jìn)行,直到所有的搜索塊都檢測(cè)完,得到最佳參考?jí)K。
運(yùn)動(dòng)搜索模塊在搜尋最佳匹配塊的過程中,最主要的工作是計(jì)算每個(gè)搜索塊的匹配程度。計(jì)算一個(gè)搜索塊的匹配程度,需要將這個(gè)搜索塊中的每個(gè)象素,和待編碼圖像塊中的對(duì)應(yīng)象素作差,得到每個(gè)象素殘差,然后對(duì)所有象素殘差,按一定規(guī)則計(jì)算其匹配程度度量(比如所有象素殘差的絕對(duì)值之和,該度量稱為SAD,SAD越小,匹配越好)。
實(shí)現(xiàn)上述功能的傳統(tǒng)的高并行度運(yùn)動(dòng)搜索模塊用二維寄存器陣列實(shí)現(xiàn),其結(jié)構(gòu)及工作原理如圖3所示,包括一個(gè)參考圖像數(shù)據(jù)存儲(chǔ)器,用于存儲(chǔ)參考幀搜索范圍內(nèi)象素的數(shù)據(jù),該存儲(chǔ)器每次只能讀出一行象素的數(shù)據(jù);一個(gè)二維的搜索塊寄存器陣列,用于每次讀出一個(gè)塊的象素的數(shù)據(jù);一個(gè)二維的待編碼圖像塊的寄存器陣列,用于寄存待編碼圖像塊的象素的數(shù)據(jù),該寄存器陣列每次可以讀出一個(gè)塊的象素的數(shù)據(jù),在對(duì)一個(gè)塊的編碼過程中,這個(gè)寄存器陣列內(nèi)的數(shù)據(jù)不變,直到完成當(dāng)前塊的編碼,進(jìn)入下一個(gè)塊的編碼;一個(gè)二維的減法器陣列,用于將待編碼圖像塊數(shù)據(jù)和搜索塊數(shù)據(jù)作差,計(jì)算得到殘差圖像塊的數(shù)據(jù);一個(gè)匹配程度度量計(jì)算器,用于根據(jù)殘差圖像塊數(shù)據(jù)計(jì)算得到搜索塊的匹配程度度量;一個(gè)匹配程度度量比較器和塊選擇器,用于選出目前為止匹配最好的搜索塊(以位置作為標(biāo)識(shí));各部件的連接關(guān)系為所述參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端與二維的搜索塊寄存器陣列的輸入端相連,該二維的搜索塊寄存器陣列的輸出端和待編碼圖像塊的寄存器陣列輸出端均與二維的減法器陣列的輸入端相連,二維的減法器陣列的輸出端與匹配程度度量計(jì)算器的輸入端相連,匹配程度度量計(jì)算器的輸出端與匹配程度度量比較器和塊選擇器的輸入端相連。
在上述運(yùn)動(dòng)搜索模塊的結(jié)構(gòu)中,其中的參考圖像數(shù)據(jù)存儲(chǔ)器和二維的搜索塊寄存器陣列兩個(gè)部件構(gòu)成了運(yùn)動(dòng)搜索模塊中的搜索塊讀取模塊,如圖4所示,包括一個(gè)參考圖像數(shù)據(jù)存儲(chǔ)器,用于存儲(chǔ)參考幀搜索范圍內(nèi)象素的數(shù)據(jù),該存儲(chǔ)器每次只能讀出一行象素的數(shù)據(jù);一個(gè)二維的搜索塊寄存器陣列,用于每次讀出一個(gè)塊的象素的數(shù)據(jù)。其連接關(guān)系為所述參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端與二維的搜索塊寄存器陣列的輸入端相連,該二維的搜索塊寄存器陣列的輸出端為后續(xù)模塊提供搜索塊數(shù)據(jù)。
在上述搜索塊讀取模塊的結(jié)構(gòu)中,二維的搜索塊寄存器陣列的具體結(jié)構(gòu)如圖5所示,由m×n個(gè)單元寄存器組成(m、n的取值由待編碼的圖像塊的大小確定,即與該圖像塊的象素?cái)?shù)目相同,如m×n為16×16,8×16,16×8,8×8,4×4等),每個(gè)單元寄存器寄存一個(gè)象素?cái)?shù)據(jù);各單元寄存器的連接關(guān)系為各列每個(gè)單元寄存器的輸出口與該列中上方相鄰的單元寄存器的輸入口相連通(最上方的單元寄存器輸出口不和其他單元寄存器相連),最下方單元寄存器的輸入口構(gòu)成該二維的搜索塊寄存器陣列的輸入端,與參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端相連;該二維的搜索塊寄存器陣列的二維的數(shù)據(jù)輸出端口(由所有單元寄存器的輸出口構(gòu)成)為后續(xù)模塊提供參考?jí)K數(shù)據(jù)。
圖5中,每個(gè)小方塊表示了可以寄存一個(gè)象素?cái)?shù)據(jù)的單元寄存器,小方塊內(nèi)的數(shù)據(jù)(x,y)表示了這個(gè)單元寄存器在陣列中位于第x行第y列;設(shè)待編碼塊大小為m×n,則這個(gè)寄存器陣列的大小也是m×n。標(biāo)識(shí)k,k+1...表示在寄存器陣列中,這一行的單元寄存器存儲(chǔ)了搜索范圍中第k行,第k+1行...對(duì)應(yīng)的數(shù)據(jù)。其中,第k+n行由參考圖像數(shù)據(jù)存儲(chǔ)器輸出,即將進(jìn)入寄存器陣列。該寄存器陣列具有逐行向上移位的功能,從參考圖像數(shù)據(jù)存儲(chǔ)器讀出的新一行的數(shù)據(jù)由寄存器陣列的下端進(jìn)入寄存器陣列,同時(shí)寄存器陣列原有數(shù)據(jù)逐行向上移位一個(gè)行距,最上面一行數(shù)據(jù)從寄存器陣列溢出。每加載一行新的數(shù)據(jù),從邏輯結(jié)構(gòu)上說,等效于搜索塊的位置往下移動(dòng)了一個(gè)象素。
上述二維的搜索塊寄存器陣列的工作步驟如圖6所示,該圖詳細(xì)表示了隨著時(shí)間的變化,二維的搜索塊寄存器陣列中數(shù)據(jù)的交換過程。圖中x坐標(biāo)表示時(shí)間,y坐標(biāo)表示了寄存器陣列的行標(biāo)號(hào)。每個(gè)實(shí)線小方塊為寄存器陣列中的一行,其中的文字L(e,f)表示這一行寄存器中所存儲(chǔ)的數(shù)據(jù),來自搜索范圍內(nèi),(第e行,第f列)開始到(第e行,第f+m-1列)為止的一行長(zhǎng)度為m象素的數(shù)據(jù)。X表示是無效數(shù)據(jù)。虛線小方塊表示來自參考圖像數(shù)據(jù)存儲(chǔ)器輸出,即將進(jìn)入寄存器陣列的一行數(shù)據(jù)。該工作步驟分s1、s2、...幾個(gè)階段,分別為s1)初始化,此時(shí)二維的搜索塊寄存器陣列中,所有數(shù)據(jù)都是無效數(shù)據(jù);s2)第1列加載階段,此時(shí)開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期加載一行,每加載一行,無效數(shù)據(jù)減少一行,之前已加載的數(shù)據(jù)向上移位一行;s3)第1列搜索階段,此時(shí)寄存器中已全是第1列的有效數(shù)據(jù),開始計(jì)算匹配程度度量,同時(shí)每個(gè)時(shí)鐘周期加載一個(gè)新的行,其余行向上移位一行,最上一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊位置向下移動(dòng)了一個(gè)象素的距離;這樣一直到第1列搜索塊完成;s4)第2列加載階段,從第1列過渡到第2列,相當(dāng)于搜索塊位置向右移動(dòng)了一個(gè)象素距離,此時(shí)寄存器陣列中已加載的第1列的數(shù)據(jù),對(duì)第2列的搜索塊來說,都是無效的數(shù)據(jù),需要從第2列的第1行開始重新加載數(shù)據(jù);s5)第2列加載完成,進(jìn)行第2列的搜索,和第1列一樣,直到第2列搜索完成,開始加載第3列數(shù)據(jù),如此進(jìn)行,直到所有搜索塊完成。
執(zhí)行完上述步驟后,就完成了所有搜索塊的匹配程度檢測(cè),從這些搜索塊中找出匹配程度最好的,作為最佳參考?jí)K,就完成了這個(gè)塊的運(yùn)動(dòng)搜索,進(jìn)行這個(gè)塊的后續(xù)編碼流程,然后開始下個(gè)塊的運(yùn)動(dòng)搜索。
可以看到,傳統(tǒng)的二維的搜索塊寄存器陣列,在搜索過程中,每完成一個(gè)列搜索塊的搜索,都需要重新加載數(shù)據(jù)到寄存器陣列,帶來了一定程度的額外時(shí)間開銷,增加了時(shí)間代價(jià)。這種代價(jià),在搜索范圍大,塊的大小比較小時(shí),占總時(shí)間的比例不高,但是一旦塊的大小增大,搜索范圍減小,這個(gè)額外時(shí)間開銷所占的比例就會(huì)增大。假設(shè)塊的大小為m×n,搜索范圍a×b,則加載時(shí)間需要(a-m+1)×(n-1)個(gè)時(shí)鐘周期,完成搜索的總時(shí)間為(a-m+1)×(b)個(gè)時(shí)鐘周期,加載時(shí)間的開銷占了總時(shí)間的(a-m+1)(n-1)(a-m+1)b=(n-1)b]]>
如果塊大小為8×8,搜索范圍為64×64,則加載時(shí)間有399時(shí)鐘周期,完成搜索總時(shí)間為3648時(shí)鐘周期,加載時(shí)間占11%;如果大小為16×16,搜索范圍為32×32,則加載時(shí)間有255時(shí)鐘周期,完成搜索總時(shí)間為544時(shí)鐘周期,加載時(shí)間占到了47%。
發(fā)明內(nèi)容本發(fā)明的目的是為克服已有技術(shù)的不足之處,提出一種快速的搜索塊讀取模塊,對(duì)其中的二維的搜索塊寄存器陣列進(jìn)行了結(jié)構(gòu)上的改進(jìn),使其改進(jìn)了搜索次序,以很小的額外硬件資源為代價(jià),大大減小了加載時(shí)間帶來的額外時(shí)間開銷,減小整個(gè)搜索過程的時(shí)間代價(jià),提高編碼器編碼速度,實(shí)現(xiàn)高分辨率下的實(shí)時(shí)編碼。
本發(fā)明提出的一種快速的搜索塊讀取模塊,包括參考圖像數(shù)據(jù)存儲(chǔ)器,用于存儲(chǔ)參考幀搜索范圍內(nèi)象素的數(shù)據(jù);二維的搜索塊寄存器陣列,用于每次讀出一個(gè)塊的象素的數(shù)據(jù);其特征在于,所述參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端同時(shí)與二維的搜索塊寄存器陣列的最上一行寄存器輸入端口、最下一行寄存器輸入端口相連,該二維的搜索塊寄存器陣列的數(shù)據(jù)輸出端口給后續(xù)模塊提供搜索塊數(shù)據(jù)。
本發(fā)明的特點(diǎn)及技術(shù)效果本發(fā)明的主要特點(diǎn)在于,改進(jìn)了二維的搜索塊寄存器陣列的結(jié)構(gòu),即增加了若干列的暫存性質(zhì)的單元寄存器,同時(shí)改變了各單元寄存器連接關(guān)系,即各單元寄存器之間有三個(gè)方向的數(shù)據(jù)移位通道。因此工作時(shí),使用蛇行搜索路線,將不同位置的搜索塊銜接起來,不再需要每列都重新加載數(shù)據(jù)。
按照本發(fā)明的結(jié)構(gòu),額外消耗的加載時(shí)間只在第1列加載時(shí)才有,后續(xù)的列都不需要加載過程,假設(shè)塊的大小為m×n,搜索范圍a×b,則加載時(shí)間需要n-1個(gè)時(shí)鐘周期,完成搜索的總時(shí)間為(a-m+1)×(b-n+1)+(n-1)個(gè)時(shí)鐘周期,加載時(shí)間的開銷占了總時(shí)間的(n-1)(a-m+1)(b-n+1)+(n-1)]]>如果塊大小為8×8,搜索范圍為64×64,則加載時(shí)間有7時(shí)鐘周期,完成搜索總時(shí)間為3256時(shí)鐘周期,加載時(shí)間占0.2%;如果大小為16×16,搜索范圍為32×32,則加載時(shí)間有15時(shí)鐘周期,完成搜索總時(shí)間為304時(shí)鐘周期,加載時(shí)間占5%。
對(duì)比傳統(tǒng)方法,可以發(fā)現(xiàn),本發(fā)明不論在加載時(shí)間上、總時(shí)間上,還是加載時(shí)間所占比例上,都大大減小的了代價(jià)。在最為總要的指標(biāo),總時(shí)間上,第一種情況減小了11%,第二種情況減小了56%。
圖1為運(yùn)動(dòng)估計(jì)模塊的功能示意圖,其中高度和寬度的單位都是象素。
圖2為對(duì)所有搜索塊進(jìn)行匹配程度檢測(cè)的一種遍歷次序的示意圖。
圖3為傳統(tǒng)高并行度運(yùn)動(dòng)搜索模塊的結(jié)構(gòu)示意圖。
圖4為傳統(tǒng)高并行度運(yùn)動(dòng)搜索模塊中搜索塊讀取子模塊的結(jié)構(gòu)示意圖。
圖5為傳統(tǒng)搜索塊讀取模塊中二維的搜索塊寄存器陣列的具體結(jié)構(gòu)示意圖。
圖6為傳統(tǒng)搜索塊讀取模塊的工作步驟示意圖。
圖7為本發(fā)明的快速的搜索塊讀取模塊結(jié)構(gòu)示意圖。
圖8為本發(fā)明的快速的搜索塊讀取模塊中二維的搜索塊寄存器陣列的具體結(jié)構(gòu)示意圖。
圖9為本發(fā)明的快速的搜索塊讀取模塊的工作步驟示意圖。
具體實(shí)施方式下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
本發(fā)明提出的一種快速的搜索塊讀取模塊,其結(jié)構(gòu)如圖7所示,包括一個(gè)參考圖像數(shù)據(jù)存儲(chǔ)器,用于存儲(chǔ)參考幀搜索范圍內(nèi)象素的數(shù)據(jù),該參考圖像數(shù)據(jù)存儲(chǔ)器每次只能讀出一行象素的數(shù)據(jù);一個(gè)二維的搜索塊寄存器陣列,用于每次讀出一個(gè)塊的象素的數(shù)據(jù);各部件的連接關(guān)系為所述參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端同時(shí)與二維的搜索塊寄存器陣列的最上行寄存器輸入端口、最下行寄存器輸入端口相連,該二維的搜索塊寄存器陣列的數(shù)據(jù)輸出端口為后續(xù)模塊提供搜索塊數(shù)據(jù)。
本發(fā)明的快速的搜索塊讀取模塊與圖4所示的傳統(tǒng)搜索塊讀取模塊結(jié)構(gòu)相比,該結(jié)構(gòu)增加了一條由參考圖像數(shù)據(jù)存儲(chǔ)器輸出到二維的搜索塊寄存器陣列上端輸入的數(shù)據(jù)通路。
上述二維的搜索塊寄存器陣列的具體結(jié)構(gòu)如圖8所示,由(m+1)×n個(gè)單元寄存器及三選一多路選擇器組成(m、n為正整數(shù),其取值由待處理的圖像塊的大小確定,即與該圖像塊的象素?cái)?shù)目相同),其中m×n中的每個(gè)單元寄存器寄存一個(gè)象素?cái)?shù)據(jù),第m+1列寄存器為暫存單元寄存器;各單元寄存器的連接關(guān)系為每個(gè)單元寄存器的輸出端口與上、下、左三個(gè)相鄰的單元寄存器的輸入端口相連通;每個(gè)單元寄存器的輸入端口與上、下、右三個(gè)相鄰的單元寄存器的輸出端口通過三選一多路選擇器相連通(三選一多路選擇器的功能是實(shí)現(xiàn)在這三個(gè)輸出端中,同一個(gè)時(shí)間只有一個(gè)輸出有效地到達(dá)輸入端,另外兩個(gè)輸出被屏蔽,三選一多路選擇器是電路中的基本單元,所占資源很小);寄存器陣列中第一行和最后一行的單元寄存器構(gòu)成該二維的搜索塊寄存器陣列的上輸入端口與下輸入端口,均與參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端相連;該二維的搜索塊寄存器陣列的二維的數(shù)據(jù)輸出端口(由除去該一列暫存單元寄存器以外的各單元寄存器的輸出端口構(gòu)成)為后續(xù)模塊提供參考?jí)K數(shù)據(jù)。
圖8中,每個(gè)小方塊表示了可以寄存一個(gè)象素?cái)?shù)據(jù)的單元寄存器,小方塊內(nèi)的數(shù)據(jù)(x,y)表示了這個(gè)單元寄存器在陣列中位于第x行第y列,其中y值為e的,表示新增加的暫存單元寄存器;假設(shè)塊大小為m×n,則這個(gè)寄存器陣列的大小是(m+1)×n。標(biāo)識(shí)k,k+1…表示在寄存器陣列中,這一行的單元寄存器存儲(chǔ)了搜索范圍中第k行,第k+1行…對(duì)應(yīng)的數(shù)據(jù)。其中,第k+n,k-1行由參考圖像數(shù)據(jù)存儲(chǔ)器輸出,即將進(jìn)入寄存器陣列;上端口和下端口的輸入中,同一時(shí)間只有一個(gè)有效(邏輯上對(duì)應(yīng)了同一時(shí)間搜索塊的位置只能向上移動(dòng)或向下移動(dòng),而不能即向上移動(dòng)又向下移動(dòng))。
該二維的搜索塊寄存器陣列具有逐行向上移位的功能,從存儲(chǔ)器讀出的新一行的數(shù)據(jù)可以由寄存器陣列的下端進(jìn)入寄存器陣列,同時(shí)寄存器陣列原有數(shù)據(jù)逐行向上移位一個(gè)行距,最上面一行數(shù)據(jù)從寄存器陣列溢出。每加載一行新的數(shù)據(jù),從邏輯結(jié)構(gòu)上說,等效于搜索塊的位置往下移動(dòng)了一個(gè)象素。
該二維的搜索塊寄存器陣列具有逐行向下移位的功能,從存儲(chǔ)器讀出的新一行的數(shù)據(jù)可以由寄存器陣列的上端進(jìn)入寄存器陣列,同時(shí)寄存器陣列原有數(shù)據(jù)逐行向下移位一個(gè)行距,最下面一行數(shù)據(jù)從寄存器陣列溢出。每加載一行新的數(shù)據(jù),從邏輯結(jié)構(gòu)上說,等效于搜索塊的位置往上移動(dòng)了一個(gè)象素。
該二維的搜索塊寄存器陣列具有逐列向左移位的功能,可以不從存儲(chǔ)器讀出的新一行的數(shù)據(jù),同時(shí)寄存器陣列所有列逐列向左移動(dòng)一列,最左面一列數(shù)據(jù)從寄存器陣列溢出,最右一列的數(shù)據(jù)(即暫存單元寄存器中的數(shù)據(jù))變?yōu)闊o效數(shù)據(jù)。每進(jìn)行一次列形式的向左移位,從邏輯結(jié)構(gòu)上說,等效于搜索塊的位置往右移動(dòng)了一個(gè)象素。
本發(fā)明的二維的搜索塊寄存器陣列,和圖5所示的傳統(tǒng)二維的搜索塊寄存器陣列相比,該陣列在結(jié)構(gòu)上作了如下的改進(jìn)1)在傳統(tǒng)二維的搜索塊寄存器陣列的基礎(chǔ)上,最右增加了一列的暫存單元寄存器,在具體實(shí)施過程中,也可增加多列的這種單元寄存器,用于一次向水平方向移動(dòng)多個(gè)象素距離;2)在傳統(tǒng)二維的搜索塊寄存器陣列的基礎(chǔ)上,增加了向下逐行移位的數(shù)據(jù)通路;3)在傳統(tǒng)二維的搜索塊寄存器陣列的基礎(chǔ)上,增加了向左逐列移位的數(shù)據(jù)通路;在硬件資源上,這幾個(gè)改動(dòng)增加了一列寄存器資源和三選一多路選擇器。
本發(fā)明的快速的搜索塊讀取模塊工作步驟如圖9所示,該圖詳細(xì)表示了隨著時(shí)間的變化,二維的搜索塊寄存器陣列中數(shù)據(jù)的交換過程。圖中x坐標(biāo)表示時(shí)間,y坐標(biāo)表示了寄存器陣列的行標(biāo)號(hào)。每個(gè)實(shí)線小方塊表示了寄存器陣列中的一行,其中的文字表示L(e,f)表示這一行寄存器中所存儲(chǔ)的數(shù)據(jù),來自搜索范圍內(nèi),(第e行,第f列)開始到(第e行,第f+m列)為止的一行長(zhǎng)度為m+1象素的數(shù)據(jù)。X表示是無效數(shù)據(jù)。虛線小方塊表示來自參考圖像數(shù)據(jù)存儲(chǔ)器輸出,即將進(jìn)入寄存器陣列的一行數(shù)據(jù)。該工作步驟分s1、s2、…幾個(gè)階段,分別為s1)初始化,此時(shí)二維的搜索塊寄存器陣列中,所有數(shù)據(jù)都是無效數(shù)據(jù);s2)第1列加載階段,此時(shí)開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列下端加載一行,每加載一行,無效數(shù)據(jù)減少一行,之前已加載的數(shù)據(jù)向上移位一行;s3)第1列搜索階段,此時(shí)寄存器中已全是第1列的有效數(shù)據(jù),開始計(jì)算匹配程度度量,同時(shí)每個(gè)時(shí)鐘周期加載一個(gè)新的行,其余行向上移位一行,最上一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊的位置向下移動(dòng)了一個(gè)象素的距離;這樣一直到第1列搜索塊完成;s4)第2列搜索,在第1列搜索完成后,寄存器陣列向左逐列移位一個(gè)象素,邏輯結(jié)構(gòu)上來說,搜索塊的位置向右移動(dòng)了一個(gè)象素的距離,立即切換到第2列的最下方的搜索塊,開始第2列的搜索,之后開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列上端加載一行,每加載一行,之前已加載的數(shù)據(jù)向下移位一行,最下一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊的位置向上移動(dòng)了一個(gè)象素的距離;這樣直到第2列搜索塊完成;s5)第3列搜索,在第2列搜索完成后,寄存器陣列向左逐列移位一個(gè)象素,邏輯結(jié)構(gòu)上來說,搜索塊的位置向右移動(dòng)了一個(gè)象素的距離,立即切換到第3列的最上方的搜索塊,開始第3列的搜索,之后開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列下端加載一行,每加載一行,之前已加載的數(shù)據(jù)向上移位一行,最上一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊的位置向下移動(dòng)了一個(gè)象素的距離;這樣直到第3列搜索塊完成,如此下去,直到完成所有搜索塊的搜索;執(zhí)行完上述步驟后,就完成了所有搜索塊的讀取,從這些搜索快中找出匹配程度最好的,選擇為最佳參考?jí)K,就完成了這個(gè)塊的運(yùn)動(dòng)搜索,進(jìn)行這個(gè)塊的后續(xù)編碼流程,然后開始下個(gè)塊的運(yùn)動(dòng)搜索。
本發(fā)明的快速的搜索塊讀取模塊,在完成一個(gè)列的搜索塊搜索后,直接轉(zhuǎn)到下一列的最下端,開始由下向上搜索,到最上端后,直接轉(zhuǎn)到再下列的最上端,由上向下搜索,完成一個(gè)蛇形的搜索路徑。在具體實(shí)施過程中,這個(gè)蛇行可以是行方向的,也可以是列方向的。
本發(fā)明的用于視頻編碼中的快速的搜索塊讀取模塊實(shí)施例詳細(xì)說明如下假設(shè)在運(yùn)動(dòng)搜索中,塊大小為16×16,搜索范圍為48×48;用于上述場(chǎng)合的本實(shí)施例的快速的搜索塊讀取模塊的具體組成結(jié)構(gòu)如圖7所示,包括一個(gè)參考圖像數(shù)據(jù)存儲(chǔ)器,用于存儲(chǔ)參考幀搜索范圍內(nèi)象素的數(shù)據(jù),存儲(chǔ)量為48×48=2304象素?cái)?shù)據(jù),該存儲(chǔ)器每次只能讀出一行象素的數(shù)據(jù);一個(gè)17×16的二維搜索塊寄存器陣列,用于每次讀出一個(gè)塊的象素的數(shù)據(jù);本實(shí)施例的快速的搜索塊讀取模塊中各部件的連接關(guān)系如下參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端同時(shí)與二維的搜索塊寄存器陣列的上輸入端口、下輸入端口相連;二維的搜索塊寄存器陣列的二維的數(shù)據(jù)輸出端口為后續(xù)模塊提供搜索塊數(shù)據(jù)。
本實(shí)施例中的參考圖像數(shù)據(jù)存儲(chǔ)器可采用已有的部件。
本實(shí)施例的二維的搜索塊寄存器陣列組成結(jié)構(gòu)如圖8所示,由一個(gè)17列16行的單元寄存器構(gòu)成的陣列和272個(gè)三選一多路選擇器組成,每個(gè)寄存器可以存儲(chǔ)一個(gè)象素的數(shù)據(jù),第17列為暫存單元寄存器;其中,每個(gè)單元寄存器的輸出端口與上、下、左三個(gè)相鄰的單元寄存器的輸入端口相連通(如沒有對(duì)應(yīng)的相鄰寄存器單元,則不必相連);每個(gè)單元寄存器的輸入端口與上、下、右三個(gè)相鄰的單元寄存器的輸出端口通過一個(gè)三選一多路選擇器相連通(如沒有對(duì)應(yīng)的相鄰寄存器單元,則不必相連);寄存器陣列中第一行和最后一行的單元寄存器構(gòu)成該二維的搜索塊寄存器陣列的上輸入端口與下輸入端口;寄存器陣列中除去暫存單元寄存器以外的所有單元寄存器的輸出端口構(gòu)成一個(gè)二維的數(shù)據(jù)輸出端口。
本實(shí)施例的具體工作流程如下1)初始化,此時(shí)二維的搜索塊寄存器陣列中,所有數(shù)據(jù)都是無效數(shù)據(jù);2)第1列加載,此時(shí)開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列下端加載一行,每加載一行,無效數(shù)據(jù)減少一行,之前已加載的數(shù)據(jù)向上移位一行,一直到加載16行數(shù)據(jù);3)第1列搜索,此時(shí)寄存器中已全是第1列的有效數(shù)據(jù),開始計(jì)算匹配程度度量,同時(shí)每個(gè)時(shí)鐘周期加載一個(gè)新的行,其余行向上移位一行,最上一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊向下移動(dòng)了一個(gè)象素的距離;這樣一直到第1列的33(48-16+1)個(gè)搜索塊完成;4)第2列搜索,在第1列搜索完成后,寄存器陣列向左逐列移位一個(gè)象素,立即切換到第2列的最下方的搜索塊,開始第2列的搜索,之后開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列上端加載一行,每加載一行,之前已加載的數(shù)據(jù)向下移位一行,最下一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊向上移動(dòng)了一個(gè)象素的距離;這樣直到第2列的33個(gè)搜索塊完成;5)第3列搜索,在第2列搜索完成后,寄存器陣列向左逐列移位一個(gè)象素,立即切換到第3列的最上方的搜索塊,開始第3列的搜索,之后開始從存儲(chǔ)器中逐行讀出參考圖像數(shù)據(jù),每個(gè)時(shí)鐘周期在寄存器陣列下端加載一行,每加載一行,之前已加載的數(shù)據(jù)向上移位一行,最上一行溢出寄存器陣列,邏輯結(jié)構(gòu)上來說,搜索塊向下移動(dòng)了一個(gè)象素的距離;這樣直到第3列的33個(gè)搜索塊完成,如此下去,直到完成所有搜索塊的搜索。
權(quán)利要求
1.視頻編碼器中一種快速的搜索塊讀取模塊,包括一個(gè)或多個(gè)參考圖像數(shù)據(jù)存儲(chǔ)器,一個(gè)或多個(gè)二維的搜索塊寄存器陣列,其特征在于,所述參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端同時(shí)與二維的搜索塊寄存器陣列的最上一行寄存器輸入端口、最下一行寄存器輸入端口相連。
2.如權(quán)利要求
1所述的搜索塊讀取模塊,其特征在于,所述二維的搜索塊寄存器陣列由(m+1)×n個(gè)單元寄存器及三選一多路選擇器組成,其中m×n中的每個(gè)單元寄存器寄存一個(gè)象素?cái)?shù)據(jù),第m+1列寄存器為暫存單元寄存器,其中m、n為正整數(shù);各單元寄存器的連接關(guān)系為每個(gè)單元寄存器的輸出端口與上、下、左三個(gè)相鄰的單元寄存器的輸入端口相連通;每個(gè)單元寄存器的輸入端口與上、下、右三個(gè)相鄰的單元寄存器的輸出端口通過三選一多路選擇器相連通;寄存器陣列中第一行和最后一行的單元寄存器構(gòu)成該二維的搜索塊寄存器陣列的上輸入端口與下輸入端口,均與參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端相連;該二維的搜索塊寄存器陣列的二維的數(shù)據(jù)輸出端口為后續(xù)模塊提供搜索塊數(shù)據(jù)。
專利摘要
本發(fā)明涉及視頻編碼器中一種快速的搜索塊讀取模塊,屬于信號(hào)處理中的視頻編碼領(lǐng)域。該模塊包括參考圖像數(shù)據(jù)存儲(chǔ)器,二維的搜索塊寄存器陣列;參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端同時(shí)與二維的搜索塊寄存器陣列的最上一行寄存器輸入端口、最下一行寄存器輸入端口相連。其中的二維的搜索塊寄存器陣列由(m+1)×n個(gè)單元寄存器及三選一多路選擇器組成,寄存器陣列中第一行和最后一行的單元寄存器構(gòu)成該二維的搜索塊寄存器陣列的上輸入端口與下輸入端口,均與參考圖像數(shù)據(jù)存儲(chǔ)器的輸出端相連。本發(fā)明在運(yùn)動(dòng)搜索過程中,可高效地讀取搜索塊,減小整個(gè)搜索過程的時(shí)間代價(jià),提高編碼器編碼速度,實(shí)現(xiàn)高分辨率下的實(shí)時(shí)編碼。
文檔編號(hào)G06T7/20GK1997156SQ200610144273
公開日2007年7月11日 申請(qǐng)日期2006年12月1日
發(fā)明者何蕓, 朱炳強(qiáng) 申請(qǐng)人:清華大學(xué)導(dǎo)出引文BiBTeX, EndNote, RefMan