1 引 言
近年來,隨著網路和多媒體技術的發展,視頻資訊通訊的重要性和需求急劇增長,而其中的關鍵就在於視頻壓縮編碼技術的應用。文獻[1]曾提出了一種基於TMS320DM642 DSP的視頻編碼方案,實現了H.264演算法。同H.264相比,MPEG4具有軟硬體開發成本低和更容易實現的優勢,是目前視頻編碼應用的主流。本文提出了一種基於TMS320DM642 DSP的MPEG4視頻編碼器的實現方法,該方案可用於遠程視頻監控、視頻會議等諸多領域。
MPEG4是由國際MPEG 格式(MPEG)開發制定的國際通用視頻壓縮編碼通訊協定,目前已經發展成為可適應不同傳輸頻寬、可用最少的資料來獲得最佳品質映像的高效壓縮演算法和工具。MPEG採用了DCT、量化、熵編碼等演算法,通過對形狀、運動、紋理等資訊的分析,消除映像資料在時間和空間上的相關性,具有高效壓縮性及普遍適用性等獨特優勢,為視頻資訊高效儲存、傳輸提供了方便。
MPEG4為不同的應用對應的碼率、解析度、品質和服務定義了編碼器和碼流的不同架構和層級,其中的簡單架構提供了對矩形視頻對象的編碼功能。本文所實現的就是MPEG4視頻編碼演算法的簡單架構。
2 MPEG4編碼器硬體平台
實現MPEG4編碼器的硬體平台以TMS320DM642DSP為核心,並配合以適當的外部儲存空間SDRAM,FLASH等外圍裝置。
2.1 TMS320DM642特性
TMS320DM642是TI為多媒體應用而開發的基於C64x核心的高效能定點數位訊號處理器,時鐘頻率600 MHz,最高處理能力可達4 800 MIPS。DM642具有C6000系列DSP的公用定點指令集,增加了多媒體擴充指令,可以更加方便快速地執行影像處理中的演算法。DM642的這些特點,使其非常適合於視頻影像處理,是實現MPEG4視頻編碼器的理想硬體平台。
2.2 硬體系統結構
編碼器的硬體平台1所示,圖中DM642作為整個系統的核心,對視頻資料進行高速處理,完成MPEG4編碼演算法;可程式化視頻格式轉換電路將輸入的原始視頻資料進行預先處理,轉換成編碼器可接受的視頻格式的數字訊號;E2PROM和FLASH用來固化應用程式和初始化參數,SDRAM作為片外儲存空間,在編碼過程中儲存待處理的視頻資料,以上三者通過EMIF匯流排與DM642串連;通過JTAG介面,利用CCS,可方便地實現系統軟硬體模擬與調試;系統時鐘為數位視訊提供即時時間基準資訊。
3 MPEG4編碼器的軟體實現和最佳化
3.1 MPEG4的軟體實現
MPEG4是一個開放的架構標準,並沒有規定具體的演算法和程式,使用者可根據需要自行開發代碼,我們採用了XVID 1.1.0開放源碼來實現MPEG4編碼器。XVID代碼實現了MPEG4的簡單架構演算法,不需要形狀編碼,只對I-VOP和P-VOP進行編碼。但XVID是針對PC機應用而設計開發的,要將他移植到DSP中,必須對代碼進行分析,結合DSP的指令結構和特點進行修改。
XVID代碼實現的MPEG4編碼器,以原始視頻資料中的每一幀作為一個視頻對象,首先判斷是I幀還是P幀,I幀需要對整幀映像資料進行編碼儲存,P幀則進行運動估計和補償,只編碼當前幀與參考幀之間的映像殘差和運動向量。每幀資料都被分為16×16宏塊,每個宏塊又分為8×8子塊,在宏塊和子塊的基礎上進行DCT、量化、VLC編碼。基於不高的映像品質需求,我們減化了XVID的某些功能,如GMC(全域運動補償)、RVLC等,減少了代碼運算量,降低了複雜度。
3.2 代碼最佳化
為提高代碼執行效率,必須結合DSP的特點對代碼進行最佳化,最佳化主要分為3個層次:
3.2.1 項目級最佳化
TI提供了功能強大的整合式開發環境CCS,包含了各種高效的編譯工具,在代碼編譯過程中,通過使用編譯器提供的編譯選項(如-o3和-pm等),編譯器可自動改善代碼結構,減少代碼中指令的相關性,通過軟體流水等方法,提高指令並行性,改善迴圈效能,並可以最佳化代碼的尺寸。
3.2.2 C語言程式級最佳化
通過使用CCS中的profile工具,對C代碼進行評估,找出運算量最大的程式段,如DCT、量化、運動估計等,這部分代碼的最佳化對提高編碼器效能有顯著影響,我們採用了以下C程式級最佳化方法:
(1) 使用C6000 DSP特有的關鍵字和內嵌函式來改寫C代碼,如使用關鍵字restrict可消除資料間的相關性以提高代碼並存執行能力,而使用內嵌函式(如_add2(),nassert())可快速最佳化C代碼,作為直接映射為內聯C6000指令的特殊函數,可提高代碼在DSP中的執行效率。
(2) 使用整型訪問短型資料,使用32位整型一次訪問2個16位短型資料,分別存放在32位寄存器的高、低16位欄位,可減少對記憶體的訪問次數,將程式讀取資料的效率提高一倍,再使用能同時對2個寄存器對應高低16位進行操作的內嵌函式,如add2();mpy2()等,可大大提高代碼執行效率。
(3) 採用迴圈展開的方法,將多迴圈變為少迴圈甚至單迴圈,減少迴圈嵌套,消除冗餘迴圈,可以提高指令並存執行的程度。
(4) DSP沒有專門的硬體除法運算單元,除法都用連續減法實現,運算量比較大,所以要盡量減少除法運算,不能減少的除法用移位元運算來實現,可減少運算耗時。
(5)使用TI映像庫函數。TI提供了功能強大的IM-AGE庫支援,包括了很多影像處理常用函數,如8×8子塊的DCT變換(IMG_fdct_8×8)、SAD計算(IMG_sad_8×8),這些函數都是最佳化過的,代碼效率很高,可直接應用到程式中。
3.2.3 組譯工具級最佳化
線性組合語言是C6000系列DSP所特有的一種程式設計語言,類似彙編,但不需要給出指令使用的功能單元、寄存器、並行性等細節資訊,彙編最佳化器可根據代碼情況自動確定。我們將代碼中運算量大、調用頻率高的關鍵區段用線性彙編進行了改寫,如量化、DCT、SAD等模組,進一步最佳化了迴圈迭代、提高了指令的並行性效果。表2給出了改寫前後幾個函數模組程式對3幀foreman.qcif測試序列編碼時消耗的刻度數對比。
3.3 儲存空間的配置
DSP的片上儲存空間有限,編碼器要處理的大量視頻資料(包括當前幀和參考幀等映像)必須放在片外,而CPU訪問片外的速度要比訪問片內慢很多。利用DM642的EDMA功能,CPU對前一幀資料編碼的同時,通過ED-MA通道提前將片外的資料搬移到片上記憶體,二者並行工作,提高了資料由片外傳輸至片內的效率,可減少CPU等待時間。
3.4 實驗結果
使用編碼器對標準qcif格式(176×144)測試序列進行編碼來測試編碼器效能,其中news序列300幀,suzie序列150幀,foreman序列400幀,通過TI的整合式開發環境CCS 2.0進行硬體模擬實驗,在設定碼率為100 b/s的條件下,結果如表3所示。
通過分析測試序列編碼結果,編碼器的編碼速率達到25 fps以上,可以滿足即時編碼的要求。在傳輸碼率降低的情況下,編碼速率還可以進一步提高。從編碼結果可以發現,不同測試序列編碼前後的壓縮比不同,這是由於測試順序圖表像的運動情況、背景變換造成的,如suzie序列背景單一,運動緩和,壓縮比較高,而news序列由於背景不斷變換,壓縮比就相對較低。通過對比編碼前和編碼後解碼得到的映像,畫面無失真現象,映像品質並沒有明顯下降。
4 結 語
本文探討了MPEG4編碼器在DM642上的實現方案和最佳化的方法,實現了MPEG4編碼的簡單架構演算法。實驗結果表明,本文所提出的方案具有較高的易實現性和實用性,增加和改進的代碼最佳化方法是有效,效能測試獲得了滿意的效果。在此基礎上,我們還可進一步對實現MPEG4進階架構和代碼最佳化方法的改進,進行更深入地研究,以滿足更高的應用要求。