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