嵌入式視頻圖像系統(tǒng)壓縮算法的實(shí)現(xiàn)和優(yōu)化
為避免發(fā)生的Cache大量缺失,采取 3種方法[6] 。
本文引用地址:http://butianyuan.cn/article/92476.htm1.整個(gè)編碼算法應(yīng)該分成 3個(gè)模塊: 宏塊編碼、運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)重建 , 這樣使每個(gè)模塊代碼都適合 L1P。每次循環(huán)以宏塊組為單位 , 宏塊組的大小由 L1D大小決定。在宏塊編碼模塊中, 當(dāng)宏塊組被傳送到片內(nèi),他們一起經(jīng)過(guò) DCT Direct Cosine Transform 、量化、熵編碼 , 直到宏塊組編碼模塊結(jié)束為止,L1D才刷新這組宏塊。同時(shí)對(duì)應(yīng)的程序包括 DCT、量化、熵編碼也被保存到 L1P。
2.盡量減少數(shù)據(jù)類型的大小。可以用 8位數(shù)據(jù)就不用 16位數(shù)據(jù) , 這樣不但節(jié)省空間 ,而且能提高L1D的使用效率。因?yàn)?L1D行的大小是固定的, 在一行內(nèi)如果采用 8位數(shù)據(jù) 比 16位數(shù)據(jù)可多放一倍 , 從而減少程序中 Cache缺失情況的發(fā)生。
3.采用乒乓緩存結(jié)構(gòu), 提高 Cache命中率 , 減少 CPU等待時(shí)間。
在視頻編碼模塊中,當(dāng)前幀和參考幀數(shù)據(jù)放在片外存儲(chǔ)器,在編碼過(guò)程中需要依次對(duì)圖像幀中的每個(gè)宏塊進(jìn)行操作。但宏塊直接從片外內(nèi)存讀取,這就會(huì)發(fā)生CPU等待??梢栽O(shè)置兩對(duì)片上緩存,一對(duì)存放當(dāng)前幀宏塊,一對(duì)存放參考幀宏塊,它們以乒乓方式工作。乒乓緩沖工作模式如圖1所示。編碼前E DMA將片外的當(dāng)前幀中編碼宏塊數(shù)據(jù)和在搜索范圍內(nèi)的參考幀宏塊數(shù)據(jù)搬移到片上內(nèi)存。在用EDMA搬移數(shù)據(jù)到其中一塊片內(nèi)緩存的同時(shí),,處理器可以對(duì)另一塊緩存中的數(shù)據(jù)進(jìn)行處理。經(jīng)過(guò)這樣的修改,CPU一直從片上讀取存儲(chǔ)器數(shù)據(jù)大大減少了CPU阻塞情況的發(fā)生,提高了編碼速度。
圖2 乒乓緩沖存儲(chǔ)器結(jié)構(gòu)
SAD和像素插值的優(yōu)化
SAD(Sum ofAbsolute Difference)是運(yùn)動(dòng)估計(jì)模塊[7]關(guān)鍵模塊 , 而 DM642提供了一套豐富的視頻和圖像專用指令可以高效實(shí)現(xiàn)運(yùn)動(dòng)估計(jì)算法。
LDNDW (Load Non2alignedDoubleWord)指令,可以一次讀取 64位無(wú)邊界數(shù)據(jù)。這個(gè)指令可以從當(dāng)前幀中和參考幀一次讀取8個(gè) 8位像素?cái)?shù)據(jù)。因此可以提高當(dāng)前幀和參考幀宏塊數(shù)據(jù)的搬移速度。
SUBABS4(Subtractwith Absolute)指令,計(jì)算在兩組 8位數(shù)據(jù)包之間的 4個(gè)絕對(duì)值之差。
評(píng)論