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