專利名稱:使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻編碼技術(shù)中分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的實(shí)現(xiàn)方法,具體地,涉及使用數(shù)字信號(hào)處理器(Digital Signal Processor,簡稱為DSP)進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法。。
背景技術(shù):
隨著視頻編碼技術(shù)的發(fā)展,運(yùn)動(dòng)補(bǔ)償和運(yùn)動(dòng)矢量的精度不斷提高H.261為整像素,MPEG-1、MPEG-2、和MPEG-4第一版本為半像素,至MPEG-4第二版本、最新H.264及其國內(nèi)版本AVS已經(jīng)達(dá)到1/4像素。由于分?jǐn)?shù)像素精度運(yùn)動(dòng)補(bǔ)償和運(yùn)動(dòng)矢量的引入以及精度不斷提高,一方面使視頻編解碼的圖像塊幀間位移突破圖像空間取樣網(wǎng)格的限制而達(dá)到更高精度;另一方面使信號(hào)在空間域拉伸變寬,其頻譜相應(yīng)收縮變窄,改善了低通性質(zhì),從中可以提取低通性質(zhì)更好的樣點(diǎn),從而構(gòu)成幀間預(yù)測效率更高的預(yù)測圖像塊。但其代價(jià)是實(shí)現(xiàn)復(fù)雜度大幅提高。
相應(yīng)地,分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)過程被解釋為圍繞整像素精度運(yùn)動(dòng)估計(jì)過程所確定的最佳整像素位置來搜索幀間位移精確化位置或最佳低通濾波位置。常用的1/4像素精度運(yùn)動(dòng)估計(jì)方法是圖1所示的逐級(jí)8鄰點(diǎn)搜索在最佳整像素位置周圍8個(gè)半像素位置鄰點(diǎn)中搜索最佳位置,接著在最佳半像素位置周圍8個(gè)1/4像素位置鄰點(diǎn)中搜索尋找最佳位置,得到最后結(jié)果。最佳運(yùn)動(dòng)估計(jì)準(zhǔn)則是可實(shí)現(xiàn)碼率與失真度雙目標(biāo)同時(shí)優(yōu)化的Lagrangian代價(jià)J=D+λ×R。其中,λ為Lagrangian乘子,R為運(yùn)動(dòng)矢量預(yù)測差值所對應(yīng)的變長碼長,D為過去幀參考圖像與當(dāng)前幀原始圖像之差的絕對值和(Sum ofAbsolute Differences,SAD)。
數(shù)字信號(hào)處理器芯片(Digital Signal Processor,DSP)的結(jié)構(gòu)決定了它特別適合于巨大吞吐量的數(shù)字信號(hào)處理和實(shí)時(shí)應(yīng)用。目前能夠?qū)崿F(xiàn)大分辨率高復(fù)雜度實(shí)時(shí)視頻編碼的DSP為荷蘭飛利浦公司TriMedia/Nexperia系列處理器和美國德克薩斯儀器公司TMS320C64x/TMS320DM64x系列處理器。兩種DSP均包含特別有助于視頻編解碼的結(jié)構(gòu),包括大容量片內(nèi)高速緩存器Cache、大量寄存器、多指令并行處理的超長指令字VLIW結(jié)構(gòu)、以及眾多的運(yùn)算功能單元、32位單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)處理的運(yùn)算功能單元及指令集。
運(yùn)動(dòng)估計(jì)在整個(gè)視頻編碼中占據(jù)超過60%的CPU時(shí)鐘周期。對于以巨大運(yùn)算量為代價(jià)獲得編碼效率顯著提高的H.264及其國內(nèi)版本AVS(Advanced Audio-Video System,中國的先進(jìn)音視頻編碼系統(tǒng)),運(yùn)動(dòng)估計(jì)所占比例進(jìn)一步增大。利用DSP加速運(yùn)動(dòng)估計(jì)對提高編碼速度達(dá)到實(shí)時(shí)至關(guān)重要,在視頻編碼的產(chǎn)品化進(jìn)程中,是最需要關(guān)注及最值得投入的地方。
運(yùn)動(dòng)估計(jì)的主要運(yùn)算是過去幀參考圖像塊與當(dāng)前幀原始圖像塊之差的SAD的計(jì)算。加速運(yùn)動(dòng)估計(jì)的關(guān)鍵之一是加速SAD計(jì)算。許多面向多媒體應(yīng)用的處理器都提供了專門加速SAD計(jì)算的指令。如TriMedia的UME8UU指令,可以算出4個(gè)連續(xù)位置上的SAD值,用C64x的SUBABS4指令結(jié)合DOTPUT4指令也可得到相同結(jié)果。
運(yùn)動(dòng)估計(jì)還需要讀取大量參考圖像與原始圖像數(shù)據(jù)。加速運(yùn)動(dòng)估計(jì)的另一個(gè)關(guān)鍵是提高數(shù)據(jù)傳輸效率。DSP的數(shù)據(jù)傳輸包括從片外SDRAM傳輸至片內(nèi)Cache和從片內(nèi)Cache傳輸至寄存器。圖像數(shù)據(jù)為8位無符號(hào)數(shù)。TriMedia的32位讀指令可從數(shù)據(jù)Cache中讀入首地址對齊的4個(gè)圖像數(shù)據(jù)至一個(gè)寄存器;C64x的64位讀指令可從一級(jí)Cache中讀入首地址任意的8個(gè)圖像數(shù)據(jù)至一個(gè)寄存器對(由兩個(gè)32位寄存器組成)。TriMedia和C64x都擁有大容量Cache在慢速DRAM和快速CPU之間插入速度較快的SRAM,起緩沖作用,使CPU既可較快存取SRAM,又不至于使系統(tǒng)成本上升過高。TriMedia 1500系列擁有全速且分離的16K字節(jié)數(shù)據(jù)Cache和64K字節(jié)指令Cache,Cache塊(內(nèi)存中首地址對齊的連續(xù)數(shù)據(jù)段,在一個(gè)內(nèi)存讀寫周期內(nèi)整段讀寫)長64字節(jié)。C64x含兩級(jí)片內(nèi)存儲(chǔ)器結(jié)構(gòu)。其中,全速的一級(jí)存儲(chǔ)器分為16K字節(jié)數(shù)據(jù)Cache(L1D)和16K字節(jié)指令Cache(L1P),L1D塊長64字節(jié);半速的二級(jí)存儲(chǔ)器容量更大(256K~1M字節(jié)),由用戶隨意配置為數(shù)據(jù)與指令共用的二級(jí)Cache或可編程存取的片內(nèi)SRAM,其中,L2Cache塊長128字節(jié)。CPU讀內(nèi)存數(shù)據(jù)時(shí),如果在Cache中找到尋址數(shù)據(jù),成為Cache hit,就直接從Cache把數(shù)據(jù)裝入寄存器,不需要啟動(dòng)內(nèi)存讀周期。只有當(dāng)Cache中沒有尋址數(shù)據(jù)時(shí),才需要啟動(dòng)內(nèi)存讀周期裝載整個(gè)Cache塊,成為Cache miss。首先裝入Cache的數(shù)據(jù)是Cache塊首地址數(shù)據(jù)。期間CPU處于停頓狀況而不能執(zhí)行后續(xù)指令,直到尋址數(shù)據(jù)裝入寄存器為止。這個(gè)時(shí)長為Cache miss停頓時(shí)鐘周期數(shù)。CPU恢復(fù)運(yùn)行后,Cache塊的后續(xù)數(shù)據(jù)繼續(xù)裝入Cache,類似于獨(dú)立于數(shù)據(jù)處理的后臺(tái)操作。顯然Cache miss數(shù)越少,CPU存取內(nèi)存的效率越高。因?yàn)镃64x的全速L1D與半速二級(jí)存儲(chǔ)器之間的傳輸總線達(dá)256位,所以C64x的內(nèi)存?zhèn)鬏斝手饕Q于L2Cache的Cache miss數(shù)。
由此得出運(yùn)動(dòng)估計(jì)的DSP優(yōu)化措施為用32位讀指令讀4個(gè)圖像數(shù)據(jù)(TriMedia)或64位讀指令讀8個(gè)圖像數(shù)據(jù)(C64x);用UME8UU(TriMedia)、SUBABS4和DOTPUT4(C64x)等SIMD指令計(jì)算SAD值;盡量增加內(nèi)存中同一Cache塊參考圖像數(shù)據(jù)在多個(gè)搜索位置上重復(fù)讀取的機(jī)會(huì),以便提高Cache hit機(jī)會(huì),降低Cachemiss數(shù)。對于整像素精度運(yùn)動(dòng)估計(jì),參考幀數(shù)據(jù)存儲(chǔ)方法是圖像平面內(nèi)按光柵掃描順序存儲(chǔ)圖像數(shù)據(jù),存儲(chǔ)位置為二維坐標(biāo)的行數(shù)乘以寬再加列數(shù)的一維表示,這些DSP優(yōu)化措施可以直接實(shí)現(xiàn)。然而,對于分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì),1/4像素精度的參考幀圖像為整像素參考幀圖像經(jīng)過二維四倍內(nèi)插放大后生成的16∶1圖像,如何存儲(chǔ)參考幀不同分?jǐn)?shù)位置數(shù)據(jù)以適應(yīng)分?jǐn)?shù)像素運(yùn)動(dòng)估計(jì)成為一個(gè)關(guān)鍵而又棘手的問題。下面分析現(xiàn)有的兩種1/4像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)方法。
圖2所示的參考幀一是最簡單的1/4像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)方法,就是在16∶1的1/4像素精度參考幀圖像平面內(nèi)按照一維光柵掃描順序存儲(chǔ)圖像數(shù)據(jù),存儲(chǔ)位置為二維坐標(biāo)的行數(shù)乘以寬再加列數(shù)的一維表示。如下, 1/4像素精度參考幀圖像平面內(nèi)坐標(biāo)為(pic_pix_y,pic_pix_x)的一個(gè)像素在存儲(chǔ)空間的位置行位置pic_pix_y;列位置pic_pix_x; 像素存儲(chǔ)位置=存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×4+列位置。
在該參考幀中,同一分?jǐn)?shù)位置的像素被三個(gè)其他分?jǐn)?shù)位置的像素分隔開來,如兩個(gè)順序相接的整像素之間隔了一個(gè)1/4像素、一個(gè)半像素、和一個(gè)3/4像素,...由此類推。這樣就不能在分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)中直接使用多讀多操作SIMD指令-每次只能讀入一個(gè)參考幀圖像數(shù)據(jù)至寄存器;例如,如果使用UME8UU、SUBABS4和DOTPUT4等指令計(jì)算SAD值,需要把分開讀入的4個(gè)參考圖像數(shù)據(jù)拼裝成一個(gè)32位字。這樣,運(yùn)算效率和從片內(nèi)Cache傳輸數(shù)據(jù)至寄存器的效率比較低。
圖3所示的參考幀二的1/4像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)方法為標(biāo)題為“插值圖像內(nèi)存組織、分?jǐn)?shù)像素生成及預(yù)測誤差指標(biāo)計(jì)算方法”,申請?zhí)?00410076759.4,公開號(hào)CN1750659A的專利技術(shù),與文獻(xiàn)一(李春林,李國兵,“基于PC的SIMD技術(shù)在1/4像素精度運(yùn)動(dòng)預(yù)測中的應(yīng)用”,重慶郵電學(xué)院學(xué)報(bào),第17卷第1期,2005年2月,46~49頁)和文獻(xiàn)二(張劍,“一種適合SIMD并行運(yùn)算的參考圖像組織優(yōu)化算法”,微型機(jī)與應(yīng)用,2005年第6期,49~51頁)的方法完全一致。該方法針對處理器提供的SIMD指令優(yōu)化1/4像素精度運(yùn)動(dòng)估計(jì)的SAD計(jì)算。該方法把不同分?jǐn)?shù)位置的像素分開,相同分?jǐn)?shù)位置的像素組成一個(gè)1∶1圖像平面,于是16∶1的1/4像素精度參考幀圖像分成16個(gè)1∶1子圖像;在系統(tǒng)主內(nèi)存中為每個(gè)子圖像分配一段連續(xù)的存儲(chǔ)空間;子圖像存儲(chǔ)空間的排列方法可以是4×4二維空間的一維光柵掃描順序(上述專利技術(shù)提供了三種排列方法),16個(gè)子圖像存儲(chǔ)空間又形成一段連續(xù)的存儲(chǔ)空間;在子圖像平面內(nèi)按照一維光柵掃描順序存儲(chǔ)圖像數(shù)據(jù),并且像素在子圖像內(nèi)的坐標(biāo)位置與其存儲(chǔ)位置一致。
上述參考幀圖像數(shù)據(jù)存儲(chǔ)方法的特征在于,通過以下公式唯一確定1/4像素精度參考幀圖像平面內(nèi)坐標(biāo)為(pic_pix_y,pic_pix_x)的一個(gè)像素在存儲(chǔ)空間的位置 子圖像行屬性pic_pix_y&3;子圖像列屬性pic_pix_y&3 子圖像行位置pic_pix_y>>2;子圖像列位置pic_pix_x>>2 像素存儲(chǔ)位置=由子圖像行與列屬性確定的存儲(chǔ)空間首地址+子圖像行位置×(圖像寬度+水平外延長度)+子圖像列位置。
這樣就可以在計(jì)算參考圖像塊與原始圖像塊SAD值時(shí)使用多讀多操作SIMD指令,從而顯著提高運(yùn)算效率和從片內(nèi)Cache傳輸至寄存器數(shù)據(jù)的傳輸效率。在TriMedia開發(fā)板上H.264編碼速度從使用參考幀一的1幀/3秒提高到了使用參考幀二的1幀/秒。
然而,使用參考幀二于1/4像素精度運(yùn)動(dòng)估計(jì)引起過量數(shù)據(jù)Cache miss。如用TriMedia 1300開發(fā)板編碼300幀CIF格式Foreman測試序列,額定碼率768Kbps,硬件Profile顯示計(jì)算SAD部分模塊總時(shí)間3899111單位(每單位1000時(shí)鐘周期),指令執(zhí)行時(shí)間590555單位,數(shù)據(jù)Cache miss停頓時(shí)間達(dá)3191295單位,占81.85%。意味著在運(yùn)動(dòng)估計(jì)(包括整像素精度和分?jǐn)?shù)像素精度的運(yùn)動(dòng)估計(jì))中CPU因?yàn)閿?shù)據(jù)Cache miss停頓下來等待從片外SDRAM裝載數(shù)據(jù)的時(shí)間占81.85%。經(jīng)過分析,其中絕大多數(shù)數(shù)據(jù)Cache miss停頓時(shí)間出現(xiàn)在分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)中。在DM642上運(yùn)行也出現(xiàn)相同情況在TI Code Composer Studio 3.1開發(fā)環(huán)境中軟件仿真H.264編碼,運(yùn)行環(huán)境設(shè)置為600MHz主頻DM642處理器,SDRAM存取速度133MHz,編碼300幀CIF格式Foreman測試序列,額定碼率768Kbps,計(jì)算SAD部分模塊總時(shí)間2739616933個(gè)時(shí)鐘周期,CPU執(zhí)行時(shí)間613651067個(gè)時(shí)鐘周期,L1D miss停頓時(shí)間2091360100個(gè)時(shí)鐘周期,占76.34%。
過量數(shù)據(jù)Cache miss反映出數(shù)據(jù)傳輸效率低下和處理器處于不良工作狀況。1/4像素精度運(yùn)動(dòng)估計(jì)需要搜索圖1所示的8個(gè)半像素位置和8個(gè)1/4像素位置。使用圖2所示的參考幀二時(shí),這些搜索位置的數(shù)據(jù)位于11個(gè)1∶1存儲(chǔ)圖像平面內(nèi)8個(gè)半像素位置數(shù)據(jù)在3個(gè)1∶1存儲(chǔ)圖像平面內(nèi),8個(gè)1/4像素位置數(shù)據(jù)在另外8個(gè)1∶1存儲(chǔ)圖像平面內(nèi)。在不同搜索位置上,如果讀入的參考幀數(shù)據(jù)位于不同1∶1存儲(chǔ)圖像平面內(nèi),則數(shù)據(jù)間無關(guān)聯(lián)與重疊。分辨率大于QCIF時(shí),對于長64字節(jié)或128字節(jié)的Cache塊,參考圖像塊的不同行間也無重疊。這樣在當(dāng)前搜索位置上為讀入?yún)⒖紙D像塊的一行數(shù)據(jù)所裝載的1~2個(gè)Cache塊不能為以后的運(yùn)動(dòng)搜索重復(fù)利用。每個(gè)Cache塊的數(shù)據(jù)利用率最大只有16/64(Cache塊長64字節(jié))或16/128(Cache塊長128字節(jié))。完成一個(gè)16×16方塊在16個(gè)分?jǐn)?shù)位置上的1/4像素精度運(yùn)動(dòng)估計(jì),最少需要從SDRAM裝載16+17+17+8×16=178個(gè)Cache塊,最多需要裝載178×2=356個(gè)Cache塊。相比之下,使用圖1所示的參考幀一時(shí),在不同搜索位置上讀入的參考幀數(shù)據(jù)同處于一個(gè)16∶1存儲(chǔ)圖像平面內(nèi),并且交錯(cuò)融合在一起,在當(dāng)前搜索位置上裝載的1~2個(gè)Cache塊可為以后的運(yùn)動(dòng)搜索重復(fù)利用。每個(gè)Cache塊的數(shù)據(jù)利用率最大達(dá)到64/64(Cache塊長64字節(jié))或64/128(Cache塊長128字節(jié))。完成一個(gè)16×16方塊的1/4像素精度運(yùn)動(dòng)估計(jì),最少需要從SDRAM裝載(16+17)×2+2×16=98個(gè)Cache塊,最多需要裝載(16+17+2×16)×2=130個(gè)Cache塊。
從另外一個(gè)角度考慮,在圖1所示的逐級(jí)8鄰點(diǎn)搜索的1/4像素精度運(yùn)動(dòng)估計(jì)中,應(yīng)用參考幀一時(shí),被讀取的參考幀圖像數(shù)據(jù)的分布接近于DSP內(nèi)部數(shù)據(jù)Cache的結(jié)構(gòu),在整像素搜索中裝載入數(shù)據(jù)Cache的參考幀數(shù)據(jù)能夠被后面的半像素搜索和1/4像素搜索所利用,所以從片外SDRAM至片內(nèi)cache的傳輸效率較高,雖然從片內(nèi)cache至寄存器的傳輸效率非常低并且非常費(fèi)時(shí);應(yīng)用參考幀二時(shí),被讀取的參考幀圖像數(shù)據(jù)的分布與DSP內(nèi)部數(shù)據(jù)Cache的結(jié)構(gòu)相差甚遠(yuǎn),在整像素搜索中裝載到數(shù)據(jù)Cache的參考幀數(shù)據(jù)完全不能被后面的半像素搜索和1/4像素搜索所利用,所以從片外SDRAM至片內(nèi)cache的傳輸效率非常低。
于是,可以認(rèn)為,分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的DSP優(yōu)化方法最后歸結(jié)為分?jǐn)?shù)像素精度參考幀圖像數(shù)據(jù)的存儲(chǔ)形式。合適的存儲(chǔ)形式可顯著提高運(yùn)算效率和數(shù)據(jù)傳輸效率,從而實(shí)現(xiàn)高效率的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì),但是目前所采用的參考幀圖像數(shù)據(jù)存儲(chǔ)形式顯然無法做到這一點(diǎn)。
發(fā)明內(nèi)容
考慮到相關(guān)技術(shù)中存在的上述問題而提出本發(fā)明。為此,本發(fā)明旨在提供一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方案,其采用更為合適的分?jǐn)?shù)像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)形式,可以實(shí)現(xiàn)高效率的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)。
根據(jù)本發(fā)明實(shí)施例,提供了一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長64字節(jié),寄存器讀寫數(shù)據(jù)最大位長32。
該方法包括步驟S402,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間;步驟S404,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上;步驟S406,在1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)到連續(xù)存儲(chǔ)空間的一個(gè)4字節(jié)對齊的字位置上,字的存儲(chǔ)順序?yàn)?個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的一行圖像數(shù)據(jù);步驟S408,在1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序一行接一行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
其中,在步驟S402中,分配的連續(xù)存儲(chǔ)空間的大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)字節(jié)。
另外,根據(jù)以下公式唯一確定1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在連續(xù)存儲(chǔ)空間中的位置 行位置pic_pix_y; 列位置 (pic_pix_x&0xFFFFFFF0)+((pic_pix_x>>2)&3)+((pic_pix_x&3)<<2) 存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×4+列位置。
根據(jù)本發(fā)明實(shí)施例,提供了另外一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長128字節(jié),寄存器讀寫數(shù)據(jù)最大位長64。
該方法包括步驟S502,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間;步驟S504,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上;步驟S506,在1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字;在垂直分?jǐn)?shù)位置相同并且垂直坐標(biāo)順序相接的兩行上,兩行四列的8個(gè)像素合并成的兩個(gè)32位字再構(gòu)成一個(gè)64位雙字,存儲(chǔ)到連續(xù)存儲(chǔ)空間的一個(gè)8字節(jié)對齊的雙字位置上,其中,低垂直坐標(biāo)行的字位于雙字的低字位,雙字的存儲(chǔ)順序?yàn)榈痛怪弊鴺?biāo)行上4個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的兩行圖像數(shù)據(jù);步驟S508,在1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序兩行接兩行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
其中,在步驟S502中,分配的連續(xù)存儲(chǔ)空間的大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)字節(jié)。
另外,根據(jù)以下公式唯一確定1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在連續(xù)存儲(chǔ)空間中的位置 行位置((pic_pix_y&0xFFFFFFF8)>>1)+(pic_pix_y&3) 列位置 (pic_pix_y&4)+((pic_pix_x&0xFFFFFFF0)<<1)+((pic_pix_x>>2)&3)+((pic_pix_x&3)<<3) 存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×8+列位置。
本發(fā)明提供的兩種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法在各自的DSP硬件平臺(tái)上執(zhí)行1/4像素精度運(yùn)動(dòng)估計(jì)時(shí),一方面允許直接使用DSP提供的多讀多操作SIMD指令,最大限度發(fā)揮DSP的處理能力以加速運(yùn)動(dòng)估計(jì)中的SAD計(jì)算;另一方面;使得在圖1所示的逐級(jí)8鄰點(diǎn)搜索的1/4像素精度運(yùn)動(dòng)估計(jì)中被讀取的參考幀圖像數(shù)據(jù)的分布更加接近于各自DSP內(nèi)部數(shù)據(jù)Cache的結(jié)構(gòu),顯著提高了數(shù)據(jù)Cache hit的概率,大幅度降低了數(shù)據(jù)Cache miss的概率,有效提高了數(shù)據(jù)傳輸效率。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中 圖1是根據(jù)相關(guān)技術(shù)的1/4精度分?jǐn)?shù)像素運(yùn)動(dòng)估計(jì)的搜索路徑示意圖; 圖2是根據(jù)相關(guān)技術(shù)的參考幀一的示意圖; 圖3是根據(jù)相關(guān)技術(shù)的參考幀二的示意圖; 圖4是根據(jù)本發(fā)明實(shí)施例一的使用DSP進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法的流程圖; 圖5是根據(jù)本發(fā)明實(shí)施例二的使用DSP進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法的流程圖; 圖6是圖4所示的方法中的參考幀三的示意圖;以及 圖7是圖5所示的方法中的參考幀四的示意圖。
具體實(shí)施例方式 如上所述,分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的DSP優(yōu)化方法最后歸結(jié)為分?jǐn)?shù)像素精度參考幀圖像數(shù)據(jù)的存儲(chǔ)形式,在本發(fā)明實(shí)施例提供的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)方案中,根據(jù)DSP內(nèi)部結(jié)構(gòu)安排合適的分?jǐn)?shù)像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)形式,從而實(shí)現(xiàn)高運(yùn)算效率和高數(shù)據(jù)傳輸效率的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)。
以下將參照附圖來詳細(xì)描述本發(fā)明實(shí)施例,其中,給出以下實(shí)施例以提供對本發(fā)明的全面和透徹理解,而不是對本發(fā)明進(jìn)行任何限制。
實(shí)施例一 根據(jù)本發(fā)明實(shí)施例,提供了一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長64字節(jié),寄存器讀寫數(shù)據(jù)最大位長32,典型型號(hào)為荷蘭飛利浦公司TriMedia/Nexperia處理器。
如圖4所示,按以下步驟(步驟S402-步驟S408)存儲(chǔ)參考幀圖像數(shù)據(jù) 步驟S402,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間;其中,分配的連續(xù)存儲(chǔ)空間的大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)個(gè)字節(jié); 步驟S404,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上; 步驟S406,在1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)到連續(xù)存儲(chǔ)空間的一個(gè)4字節(jié)對齊的字位置上,字的存儲(chǔ)順序?yàn)?個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的一行圖像數(shù)據(jù); 例如,每行水平坐標(biāo)為16n、16n+4、16n+8、16n+12的4個(gè)整像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)順序?yàn)?n;水平坐標(biāo)為16n+1、16n+5、16n+9、16n+13的4個(gè)1/4像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)順序?yàn)?n+1;水平坐標(biāo)16n+2、16n+6、16n+10、16n+14的4個(gè)半像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)順序?yàn)?n+2;水平坐標(biāo)16n+3、16n+7、16n+11、16n+15的4個(gè)3/4像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)順序?yàn)?n+3; 步驟S408,在1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序一行接一行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
在上述處理中,根據(jù)以下公式唯一確定1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在連續(xù)存儲(chǔ)空間中的位置 行位置pic_pix_y; 列位置 (pic_pix_x&0xFFFFFFF0)+((pic_pix_x>>2)&3)+((pic_pix_x&3)<<2) 存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×4+列位置。(公式一) 以下進(jìn)一步具體描述根據(jù)本發(fā)明實(shí)施例一的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)過程。
把參考幀一中每行圖像數(shù)據(jù)重新組織,每4個(gè)同分?jǐn)?shù)位置的水平坐標(biāo)順序相接的圖像數(shù)據(jù)合并成為一個(gè)32位的字,存儲(chǔ)于存儲(chǔ)圖像平面內(nèi)4字節(jié)對齊的字位置,不同分?jǐn)?shù)位置的字交錯(cuò)排列且保持與坐標(biāo)一致的順序,兩個(gè)相同分?jǐn)?shù)位置的順序相接的字被其它三個(gè)分?jǐn)?shù)位置的字隔開,構(gòu)成圖6的參考幀三。圖6只示意性地示出水平方向上一行圖像數(shù)據(jù)排列方法。垂直方向上列的排列方法按垂直坐標(biāo)排列,與參考幀一的列排列方法一致。
其中,從整像素值經(jīng)過二維四倍內(nèi)插生成1/4像素精度的15個(gè)分?jǐn)?shù)像素值的算法屬于標(biāo)準(zhǔn)化內(nèi)容,取決于視頻編碼、解碼所采用的具體一種標(biāo)準(zhǔn),包括MPEG-4第二版本、H.264及其國內(nèi)版本AVS。從整像素值生成15個(gè)分?jǐn)?shù)像素值的實(shí)現(xiàn)方法不為本發(fā)明的說明所關(guān)注。
其中,16∶1的1/4像素精度參考幀圖像的存儲(chǔ)方法及步驟如上參照圖4所述。
應(yīng)用圖6的參考幀三于由荷蘭飛利浦公司TriMedia/Nexperia處理器運(yùn)行的實(shí)時(shí)視頻編解碼。
雖然圖6的參考幀三的存儲(chǔ)位置表達(dá)式顯得比圖2的參考幀一和圖3的參考幀二的表達(dá)式復(fù)雜,但是在實(shí)際應(yīng)用中所增加的運(yùn)算量可以忽略不計(jì)。因?yàn)楝F(xiàn)存所有視頻編碼標(biāo)準(zhǔn)均采用塊匹配的運(yùn)動(dòng)估計(jì)與補(bǔ)償方法,存取參考幀數(shù)據(jù)的單位是塊而非像素,對于一個(gè)圖像塊僅需要通過本實(shí)施例給出的上述公式一計(jì)算出塊左上頂點(diǎn)的存儲(chǔ)位置便可正確存取。如果該存儲(chǔ)位置恰好4字節(jié)對齊,用4條32位讀指令(TriMedia一個(gè)時(shí)鐘周期并發(fā)兩條讀寫指令)就可讀入?yún)⒖紙D像塊一行最多16個(gè)圖像數(shù)據(jù);否則,先用5條讀指令讀入,再根據(jù)不對齊的3個(gè)位置分3種情況處理,分別用TriMedia的FUNSHIFT3、FUNSHIFT2和FUNSHIFT1雙字移位指令從5個(gè)字中提取出所需的4個(gè)字。
圖6所示的參考幀三克服了參考幀一的不能直接運(yùn)用多讀多操作SIMD指令和參考幀二的數(shù)據(jù)cache利用率低的缺陷,同時(shí)又兼具參考幀一的數(shù)據(jù)cache利用率高和參考幀二的能夠直接運(yùn)用多讀多操作SIMD指令的優(yōu)點(diǎn)。在TriMedia上使用參考幀三執(zhí)行1/4像素精度運(yùn)動(dòng)估計(jì)時(shí),每個(gè)cache塊的數(shù)據(jù)利用率最大達(dá)到64/64。完成一個(gè)16×16方塊的1/4像素精度運(yùn)動(dòng)估計(jì),最少需要從SDRAM裝載98個(gè)cache塊,最多需要裝載130個(gè)cache塊,與參考幀一的情況相同。從另外一個(gè)角度考慮,在圖1所示的逐級(jí)8鄰點(diǎn)搜索的1/4像素精度運(yùn)動(dòng)估計(jì)中,應(yīng)用參考幀三時(shí),被讀取的參考幀圖像數(shù)據(jù)的分布接近于DSP內(nèi)部數(shù)據(jù)Cache的結(jié)構(gòu),在整像素搜索中裝載入數(shù)據(jù)Cache的參考幀數(shù)據(jù)能夠被后面的半像素搜索和1/4像素搜索所利用,所以從片外SDRAM至片內(nèi)cache的傳輸效率較高。同樣用TriMedia 1300開發(fā)板編碼300幀CIF格式Foreman測試序列,額定碼率768Kbps,硬件Profile顯示計(jì)算SAD部份模塊總時(shí)間995907單位,指令執(zhí)行時(shí)間544161單位,數(shù)據(jù)cache miss停頓時(shí)間減少至373179單位,占37.47%。與使用參考幀二的編碼結(jié)果相比,指令執(zhí)行時(shí)間相差無幾590555544161,因?yàn)閿?shù)據(jù)cache miss停頓時(shí)間從3191295單位減少至373179單位,只有原來的1/8.55,所以總時(shí)間只有原來的1/3.92,處理速度提高至近4倍。
實(shí)施例二 根據(jù)本發(fā)明實(shí)施例,提供了另外一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長128字節(jié),寄存器讀寫數(shù)據(jù)最大位長64,典型型號(hào)為美國德克薩斯儀器公司TMS320C64x/TMS320DM64x處理器。
如圖5所示,按以下步驟(步驟S502-步驟S508)存儲(chǔ)參考幀圖像數(shù)據(jù) 步驟S502,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間;其中,分配的連續(xù)存儲(chǔ)空間的大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)個(gè)字節(jié); 步驟S504,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上; 步驟S506,在1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字;在垂直分?jǐn)?shù)位置相同并且垂直坐標(biāo)順序相接的兩行上,兩行四列的8個(gè)像素合并成的兩個(gè)32位字再構(gòu)成一個(gè)64位雙字,存儲(chǔ)到連續(xù)存儲(chǔ)空間的一個(gè)8字節(jié)對齊的雙字位置上,其中,低垂直坐標(biāo)行的字位于雙字的低字位,雙字的存儲(chǔ)順序?yàn)榈痛怪弊鴺?biāo)行上4個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的兩行圖像數(shù)據(jù); 例如,4m+k(k=0,1,2,3)行水平坐標(biāo)為16n、16n+4、16n+8、16n+12的4個(gè)整像素?cái)?shù)據(jù)合并為一個(gè)32位字,與4m+k+4行水平坐標(biāo)為16n、16n+4、16n+8、16n+12的4個(gè)整像素?cái)?shù)據(jù)所合并成的一個(gè)32位字再合并為一個(gè)64位雙字,存儲(chǔ)順序?yàn)?n;4m+k行水平坐標(biāo)為16n+1、16n+5、16n+9、16n+13的4個(gè)1/4像素?cái)?shù)據(jù)合并為一個(gè)32位字,與4m+k+4行水平坐標(biāo)為16n+1、16n+5、16n+9、16n+13的4個(gè)1/4像素?cái)?shù)據(jù)所合并成的一個(gè)32位字再合并為一個(gè)64位雙字,存儲(chǔ)順序?yàn)?n+1;4m+k行水平坐標(biāo)為16n+2、16n+6、16n+10、16n+14的4個(gè)半像素?cái)?shù)據(jù)合并為一個(gè)32位字,與4m+k+4行水平坐標(biāo)為16n+2、16n+6、16n+10、16n+14的4個(gè)半像素?cái)?shù)據(jù)所合并成的一個(gè)32位字再合并為一個(gè)64位雙字,存儲(chǔ)順序?yàn)?n+2;4m+k行水平坐標(biāo)為16n+3、16n+7、16n+11、16n+15的4個(gè)3/4像素?cái)?shù)據(jù)合并為一個(gè)32位字,與4m+k+4行水平坐標(biāo)為16n+3、16n+7、16n+11、16n+15的4個(gè)3/4像素?cái)?shù)據(jù)所合并成的一個(gè)32位字再合并為一個(gè)64位雙字,存儲(chǔ)順序?yàn)?n+3; 步驟S508,在1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序兩行接兩行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
在上述處理中,根據(jù)以下公式唯一確定1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在連續(xù)存儲(chǔ)空間中的位置 行位置((pic_pix_y&0xFFFFFFF8)>>1)+(pic_pix_y&3) 列位置 (pic_pix_y&4)+((pic_pix_x&0xFFFFFFF0)<<1)+((pic_pix_x>>2)&3)+((pic_pix_x&3)<<3) 存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×8+列位置。
以下進(jìn)一步具體描述根據(jù)本發(fā)明實(shí)施例二的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)過程。
在美國德克薩斯儀器公司TMS320C64x/TMS320DM64x處理器上使用參考幀三于1/4像素精度運(yùn)動(dòng)估計(jì),處理速度雖然優(yōu)于使用參考幀一和參考幀二的速度,但是還是不盡人意。因?yàn)閰⒖紟]有針對C64x的64位讀指令和cache塊長128字節(jié)的L2cache優(yōu)化。在C64x上使用參考幀三執(zhí)行1/4像素精度運(yùn)動(dòng)估計(jì)時(shí),每個(gè)L2cache塊的數(shù)據(jù)利用率最大只有64/128。完成一個(gè)16×16方塊的1/4像素精度運(yùn)動(dòng)估計(jì),最少需要從SDRAM裝載65個(gè)cache塊,最多需要裝載130個(gè)cache塊。
為了在C64x上實(shí)現(xiàn)更高效率的1/4像素精度運(yùn)動(dòng)估計(jì),在參考幀三的基礎(chǔ)上,把垂直方向上相同分?jǐn)?shù)位置且垂直坐標(biāo)順序相接的兩行合并為一行,(垂直坐標(biāo)/4)=偶數(shù)的行內(nèi)每個(gè)字與(垂直坐標(biāo)/4)=奇數(shù)的行的同水平位置字合并成為一個(gè)64位雙字,不同水平分?jǐn)?shù)位置的雙字交錯(cuò)排列且保持與坐標(biāo)一致的順序,構(gòu)成圖7所示的參考幀四。圖7只示意性的示出水平方向上一行圖像數(shù)據(jù)排列方法。
其中,從整像素值經(jīng)過二維四倍內(nèi)插生成1/4像素精度的15個(gè)分?jǐn)?shù)像素值的算法屬于標(biāo)準(zhǔn)化內(nèi)容,取決于視頻編碼、解碼所采用的具體一種標(biāo)準(zhǔn)。
其中,16∶1的1/4像素精度參考幀圖像的存儲(chǔ)方法及步驟如上參照圖5所述。
對于一個(gè)16×16塊,如果參考幀坐標(biāo)pic_pix_y/4為偶數(shù),可以完全用64位讀指令讀入每個(gè)搜索位置上8行雙字;否則,只能用64位讀指令讀入每個(gè)搜索位置上7行雙字,用32位讀指令讀入最頂和最低兩行字。如果參考圖像塊左上頂點(diǎn)的存儲(chǔ)位置恰好4字節(jié)對齊,用4條64位讀指令(C64x一個(gè)時(shí)鐘周期并發(fā)兩條64位讀寫指令)就可讀入?yún)⒖紙D像塊兩行32個(gè)圖像數(shù)據(jù);否則,先用5條64位讀指令讀入,再根據(jù)不對齊的3個(gè)位置分3種情況處理,分別用C64x的SHRMB、PACKLH2和SHLMB雙字移位指令(分別對應(yīng)于TriMedia的FUNSHIFT3、FUNSHIFT2和FUNSHIFT1雙字移位指令,結(jié)果一致)從每行5個(gè)字中提取出所需的4個(gè)字。
使用圖7所示的參考幀四執(zhí)行1/4像素精度運(yùn)動(dòng)估計(jì)時(shí),每個(gè)L2cache塊的數(shù)據(jù)利用率最大達(dá)到128/128。完成一個(gè)16×16方塊的1/4像素精度運(yùn)動(dòng)估計(jì),最少需要從SDRAM裝載60個(gè)cache塊,最多需要裝載72個(gè)cache塊。此外在1/4像素精度運(yùn)動(dòng)估計(jì)中應(yīng)用參考幀四時(shí),被讀取的參考幀圖像數(shù)據(jù)的分布亦接近于DSP內(nèi)部數(shù)據(jù)Cache的結(jié)構(gòu)。同樣在TI Code Composer Studio 3.1開發(fā)環(huán)境中軟件仿真H.264編碼,運(yùn)行環(huán)境設(shè)置為600MHz主頻DM642處理器,SDRAM存取速度133MHz,編碼300幀CIF格式Foreman測試序列,額定碼率768Kbps,計(jì)算SAD部份模塊總時(shí)間2432427794個(gè)時(shí)鐘周期,CPU執(zhí)行時(shí)間1277413540個(gè)時(shí)鐘周期,L1D miss停頓時(shí)間1078711438個(gè)時(shí)鐘周期,占44.35%。與使用參考幀二的編碼結(jié)果相比,CPU執(zhí)行時(shí)間從613651067個(gè)時(shí)鐘周期延長到1277413540個(gè)時(shí)鐘周期,L1D miss停頓時(shí)間從2091360100個(gè)時(shí)鐘周期縮短到1078711438個(gè)時(shí)鐘周期,只有原來的1/1.94,總時(shí)間只有原來的1/1.13。通過深入優(yōu)化(主要是TI C6000正規(guī)匯編語言優(yōu)化)可以進(jìn)一步縮短CPU執(zhí)行時(shí)間,獲得更快的處理速度。
因此,綜上所述,本發(fā)明通過采用更為合適的分?jǐn)?shù)像素精度參考幀圖像數(shù)據(jù)存儲(chǔ)形式,相比于相關(guān)技術(shù),實(shí)現(xiàn)了高效率的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,所述數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長64字節(jié),寄存器讀寫數(shù)據(jù)最大位長32,其特征在于,所述方法包括
步驟S402,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間,大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)字節(jié);
步驟S404,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到所述連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上;
步驟S406,在所述1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字,存儲(chǔ)到所述連續(xù)存儲(chǔ)空間的一個(gè)4字節(jié)對齊的字位置上,字的存儲(chǔ)順序?yàn)?個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的一行圖像數(shù)據(jù);以及
步驟S408,在所述1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序一行接一行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的用于分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的數(shù)字信號(hào)處理器處理方法,其特征在于,根據(jù)以下公式唯一確定所述1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在所述連續(xù)存儲(chǔ)空間中的位置
行位置pic_pix_y
列位置
(pic_pix_x & 0xFFFFFFF0)+((pic_pix_x>>2)&3)+((pic_pix_x&3)<<2)
存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×4+列位置。
3.一種使用數(shù)字信號(hào)處理器進(jìn)行分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的方法,其中,所述數(shù)字信號(hào)處理器的數(shù)據(jù)Cache塊長128字節(jié),寄存器讀寫數(shù)據(jù)最大位長64,其特征在于,所述方法包括
步驟S502,在系統(tǒng)主內(nèi)存為視頻信源編碼的每個(gè)1/4像素精度的亮度分量參考幀分配一段連續(xù)存儲(chǔ)空間,大小為16×(圖像寬度+水平外延長度)×(圖像高度+垂直外延長度)字節(jié);
步驟S504,在1/4像素精度參考幀圖像平面內(nèi),按照從左到右、自上而下的順序存儲(chǔ)圖像數(shù)據(jù),每個(gè)8位像素?cái)?shù)據(jù)存放到所述連續(xù)存儲(chǔ)空間的一個(gè)字節(jié)位置上;
步驟S506,在所述1/4像素精度參考幀圖像平面內(nèi)的每一行上,對于相同水平分?jǐn)?shù)位置的像素,每4個(gè)水平坐標(biāo)順序相接的像素?cái)?shù)據(jù)合并為一個(gè)32位字;在垂直分?jǐn)?shù)位置相同并且垂直坐標(biāo)順序相接的兩行上,兩行四列的8個(gè)像素合并成的兩個(gè)32位字再構(gòu)成一個(gè)64位雙字,存儲(chǔ)到所述連續(xù)存儲(chǔ)空間的一個(gè)8字節(jié)對齊的雙字位置上,其中,低垂直坐標(biāo)行的字位于雙字的低字位,雙字的存儲(chǔ)順序?yàn)榈痛怪弊鴺?biāo)行上4個(gè)像素中為首的像素水平坐標(biāo)值除4再加上分?jǐn)?shù)值,由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的兩行圖像數(shù)據(jù);以及
步驟S508,在所述1/4像素精度參考幀圖像平面內(nèi)按垂直坐標(biāo)順序兩行接兩行地存儲(chǔ)數(shù)據(jù),由此存儲(chǔ)完1/4像素精度參考幀圖像平面內(nèi)的全部圖像數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的用于分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)的數(shù)字信號(hào)處理器處理方法,其特征在于,根據(jù)以下公式唯一確定所述1/4像素精度參考幀圖像平面內(nèi)的坐標(biāo)為(pic_pix_y,pic_pix_x)的像素在所述連續(xù)存儲(chǔ)空間中的位置
行位置((pic_pix_y & 0xFFFFFFF8)>>1)+(pic_pix_y & 3)
列位置
(pic_pix_y & 4)+((pic_pix_x & 0xFFFFFFF0)<<1)+((pic_pix_x>>2)&3)+((pic_pix_x & 3)<<3)
存儲(chǔ)位置=參考幀存儲(chǔ)空間首地址+行位置×(圖像寬度+水平外延長度)×8+列位置。
全文摘要
本發(fā)明針對一類DSP內(nèi)部結(jié)構(gòu)(數(shù)據(jù)Cache塊長64字節(jié),寄存器讀寫數(shù)據(jù)最大位長32)提出一種參考幀圖像數(shù)據(jù)存儲(chǔ)方法,把參考幀一中每行圖像數(shù)據(jù)重新組織,每4個(gè)同分?jǐn)?shù)位置的水平坐標(biāo)順序相接的圖像數(shù)據(jù)合并成為一個(gè)32位的字,存儲(chǔ)于存儲(chǔ)圖像平面內(nèi)4字節(jié)對齊的字位置。在此基礎(chǔ)上,本發(fā)明針對另外一類DSP內(nèi)部結(jié)構(gòu)(數(shù)據(jù)Cache塊長128字節(jié),寄存器讀寫數(shù)據(jù)最大位長64)提出另外一種參考幀圖像數(shù)據(jù)存儲(chǔ)方法,把垂直方向上相同分?jǐn)?shù)位置且垂直坐標(biāo)順序相接的兩行四列的8個(gè)像素合并成兩個(gè)32位字再構(gòu)成一個(gè)64位雙字,存儲(chǔ)到存儲(chǔ)空間的一個(gè)8字節(jié)對齊的雙字位置上。本發(fā)明方法為兼?zhèn)涓哌\(yùn)算效率和高數(shù)據(jù)傳輸效率的分?jǐn)?shù)像素精度運(yùn)動(dòng)估計(jì)實(shí)現(xiàn)方法。
文檔編號(hào)H04N7/26GK101330614SQ20071010943
公開日2008年12月24日 申請日期2007年6月21日 優(yōu)先權(quán)日2007年6月21日
發(fā)明者宋立鋒 申請人:中興通訊股份有限公司