摘 要: 設計并實現(xiàn)了一種基于TMS320C64x系列高性能通用DSPs 的MPEG-4 Simple Profile編碼器,。詳細介紹了系統(tǒng)的硬件結(jié)構(gòu)和工作流程,。為解決高分辨率視頻編碼的實時性問題, 采用預測技術(shù)的運動估計" title="運動估計">運動估計算法以及基于C64x CPU的軟件優(yōu)化技術(shù),。實驗結(jié)果表明編碼器對D1分辨率(720×576)視頻的編碼速率達到25幀/秒以上,,且具有較低的碼率和較好的圖像質(zhì)量。
關(guān)鍵詞: MPEG-4 TMS320C64x? 軟件優(yōu)化? 運動估計
信息時代對于視頻通訊的需求越來越廣,,從較低碼率的可視電話,、視頻會議、實時監(jiān)控到高碼率的空中偵察,、數(shù)字電視等,,迫切要求將高效率、高質(zhì)量的視頻壓縮算法實用化,。MPEG-4于2000年正式成為國際標準并不斷地擴展,。它不僅支持碼率低于64kbps的多媒體通信,還能支持廣播級的視頻應用,。與以前的視頻標準相比,,MPEG-4可以提供更高的壓縮效率、更好的交互性以及更強的抗誤碼能力,。目前,,MPEG-4已經(jīng)成為視頻壓縮標準的主流。
MPEG-4算法非常復雜,,其編解碼的實時性難以保證,,通常只能實現(xiàn)對中低分辯率視頻的實時編碼。本文基于TI公司的C64x系列DSPs設計并實現(xiàn)了一種MPEG-4編碼器,,實現(xiàn)了對D1分辨率(720×576)視頻的實時編碼,,且在保證輸出碼率低于1Mbps的同時,解碼圖像具有較高的峰值信噪比和較好的視覺效果,。
1? 編碼系統(tǒng)" title="編碼系統(tǒng)">編碼系統(tǒng)的硬件結(jié)構(gòu)
編碼系統(tǒng)以TMS320DM642高性能通用DSP芯片為核心,。圖1為系統(tǒng)框圖。
1.1? TMS320DM642芯片的特點
DM642屬于TI公司的C64x系列DSPs,。Veloci TI結(jié)構(gòu)使C6000 DSPs在視頻和圖像處理中得到廣泛應用,。CPU的VLIW結(jié)構(gòu)由多個并行運行的執(zhí)行單元組成,這些單元在單個周期內(nèi)可執(zhí)行多條指令,。并行是C6000獲得高性能的關(guān)鍵,。C64x在C6000的基礎上有一些重要的改進。除了有更高的時鐘頻率外,,C64x從以前的Veloci TI結(jié)構(gòu)擴展到Veloci TI.2結(jié)構(gòu),,包含了許多新的指令,增加了額外的數(shù)據(jù)通道,寄存器的數(shù)量也增加了一倍,。這些擴展使得CPU可以在一個時鐘周期內(nèi)處理更多的數(shù)據(jù),,從而獲得更高的運算性能,。
DM642芯片集成了各種片內(nèi)外設,,使得開發(fā)視頻和圖像領域的應用更為方便。它帶有三個可配置的視頻端口,,提供與視頻輸入,、視頻輸出以及碼流輸入的無縫接口。這些視頻端口支持許多格式的視頻輸入/輸出,,包括BT.656,、HDTV Y/C、RGB以及MPEG-2碼流的輸入,。利用DM642開發(fā)視頻編碼器,,其視頻輸入部分只需要一塊視頻采集芯片即可,如Phillips的SAA7113,,無需外加邏輯控制電路和FIFO緩存,,使硬件系統(tǒng)更為簡單和穩(wěn)定。DM642的其它外設包括:10Mbps/100Mbps的以太網(wǎng)口(EMAC),、多通道音頻串口(McASP),、外部存儲器接口(EMIF)、主機接口(HPI),、多通道緩沖串口(McBSP)以及PCI接口等,。
1.2? 系統(tǒng)工作流程
該編碼系統(tǒng)可分為圖像壓縮卡和主機兩部分。其工作流程如圖2所示,。
首先主機通過PCI初始化DSP并對其加載程序,;DSP開始運行MPEG-4編碼程序,從視頻端口獲取實時采集的視頻,,如圖1所示,。SAA7113輸出BT.656格式的數(shù)字視頻,作為DM642 VPORT的輸入,,VPORT輸出YUV(4:2:0)格式的圖像,,作為編碼程序的輸入;DSP完成一幀圖像的編碼,,通過PCI向主機發(fā)出中斷,;主機響應中斷,從DSP的存儲空間讀取原始圖像數(shù)據(jù)和壓縮后的碼流,。主機程序在VC++環(huán)境下編寫,,提供與用戶交互的界面,可對數(shù)據(jù)進行各種處理,包括原始視頻的實時播放,、保存,壓縮碼流的實時解壓播放,、保存、回放,、網(wǎng)絡傳輸,,從網(wǎng)絡接收壓縮碼流實時解壓回放等。
需要注意的是原始圖像和壓縮碼流在DSP中的存儲,。視頻端口,、編碼程序和主機都要訪問原始圖像,例如在某一時刻,,編碼程序訪問當前幀圖像,,主機讀取上一幀圖像,而視頻端口正在輸入下一幀圖像,,為了避免訪問沖突,,原始圖像在DSP中采用三緩沖區(qū)進行管理。壓縮碼流由編碼程序?qū)懭?,主機讀取,,所以采用乒乓制進行存儲。
1.3 內(nèi)存分配
DM642片內(nèi)只有256KB的存儲空間,,因此當前幀,、參考幀和當前幀的重建幀都必須放至片外存儲器,壓縮碼流若被主機讀取,,也放至片外,。其它數(shù)據(jù)如程序代碼、全局變量,、VLC碼表,、各編碼模塊產(chǎn)生的中間數(shù)據(jù)等均可放至片內(nèi)。
由于CPU訪問片外的速度通常要比訪問片內(nèi)慢幾十倍,,片外數(shù)據(jù)的傳輸通常成為程序運行時的瓶頸,,即使代碼效率很高,流水線也會因為等待數(shù)據(jù)而被嚴重阻塞,。解決這一問題的有效方法是用EDMA傳送數(shù)據(jù),。程序是逐個宏塊" title="宏塊">宏塊進行編碼的,在編碼當前宏塊的同時,,EDMA將下一個宏塊的數(shù)據(jù),、用到的參考幀數(shù)據(jù)由片外傳送至片內(nèi);當前宏塊做完運動補償后,,EDMA將重建后的宏塊由片內(nèi)傳送至片外,。這樣CPU只對片內(nèi)數(shù)據(jù)進行操作,,使得流水線可以順利進行,而壓縮碼流按逐個碼字有時間間隔地寫入,,可由CPU直接寫至片外,。
2 采用預測技術(shù)的運動估計算法
運動估計是MPEG-4編碼中計算量最大的一部分,占據(jù)整個編碼時間的50%以上,。各種快速運動估計算法" title="估計算法">估計算法也成為近年來研究的熱點,。本文通過實驗證明,采用預測技術(shù)的運動估計不但可以大大縮短計算時間,,而且也有助于提高圖像的質(zhì)量,。
宏塊(Macro Block)的運動矢量(Motion Vector)在時間和空間都具有相關(guān)性,預測的原理就是利用當前幀和參考幀內(nèi)相鄰位置宏塊的MV來預測當前宏塊的MV,。下面詳述本文所采用的預測算法。
?。?)確定當前宏塊MV的7個候選值PreMV1~7,。
如圖3所示。PreMV1=(0,0),;PreMV4取當前宏塊左邊相鄰宏塊的MV值,;PreMV5取上邊相鄰宏塊的MV值;PreMV6取右上方相鄰宏塊的MV值,;PreMV2=mid{PreMV4, PreMV5, PreMV6},,即取三者的中值;PreMV3取參考幀相同位置宏塊的MV值,;PreMV7取參考幀右下方相鄰宏塊的MV值,。
(2)確定篩選候選值的依據(jù)——SAD(絕對誤差和)的門限值ThreshSAD,。
SAD是確定最佳匹配塊的準則,。門限值ThreshSAD是指這樣一個值:如果參考幀內(nèi)某一宏塊和當前宏塊的SAD小于ThreshSAD,則當前宏塊的MV值就可取作二者之間的位移,。因此,,ThreshSAD就可作為篩選7個候選值的依據(jù)。
由于SAD在空間上的相關(guān)性,,ThreshSAD由相鄰宏塊的SAD值來確定:
ThreshSAD=Min{SADleft,SADtop,SADtop_left}
其中,,SADleft、SADtop,、SADtop-right分別為MBleft,、MBtop、MBtop-right和其對應匹配塊的SAD值,,ThreshSAD取三者的最小值,。
(3)從7個候選值中選出當前宏塊的MV值,。
按照PreMV1~7的順序,依次計算當前宏塊和7個匹配塊的SAD值,。如果有SAD值小于ThreshSAD,,即停止計算,選用對應的PreMV作為當前宏塊的MV值,;如果7個SAD值均大于ThreshSAD,,則采用運動搜索來確定當前宏塊的MV值。該運動搜索并不以MV=(0,0)為中心,,而是以對應SAD值最小的PreMV為中心,,搜索采用簡化的菱形算法。
對標準視頻序列" title="視頻序列">視頻序列foreman.cif(352×288)進行編碼(碼率300kbps),,測得表1所示數(shù)據(jù),。采用預測的運動估計算法利用視頻序列在時間和空間上的相關(guān)性,無需對每個宏塊都進行運動搜索,,而且其搜索中心點也同樣利用了相關(guān)信息,,搜索算法也可進一步簡化,因此大大減少了運動估計的計算量,;同時,,預測有助于提高圖像質(zhì)量,直接進行快速運動搜索通常會帶來局部最小的問題,,從而影響圖像質(zhì)量,,而PreMV1~7取自位于當前宏塊周圍各個方向的宏塊的MV值,避免陷入局部最小,。
3 基于C64x CPU的軟件優(yōu)化技術(shù)
為了提高代碼的執(zhí)行效率,,必須充分利用C64x CPU的VLIW和流水線結(jié)構(gòu)對其進行優(yōu)化,使程序無沖突地并行執(zhí)行,。MPEG-4編碼程序中包含大量的循環(huán)體,,例如計算SAD值、量化,、DCT,、半像素插值、運動補償和構(gòu)建重建幀等,。這些循環(huán)體代碼并不復雜,,但執(zhí)行次數(shù)頻繁,占據(jù)了編碼的絕大部分時間,,因此循環(huán)體的優(yōu)化是重點,。本文所采取的代碼優(yōu)化分為C語言優(yōu)化和編寫線性匯編兩個步驟,主要從消除數(shù)據(jù)相關(guān)性,、數(shù)據(jù)打包和循環(huán)體的軟件流水三個方面進行優(yōu)化,。
3.1 針對C語言的優(yōu)化
C代碼的優(yōu)化主要依靠開發(fā)環(huán)境CCS的編譯器完成,,編程者需要合理選擇編譯選項,并利用特定的關(guān)鍵字和指令向編譯器提供優(yōu)化信息,。例如關(guān)鍵字restrict用來消除數(shù)據(jù)間的相關(guān)性,,編譯器從而可以安排語句的并行執(zhí)行;內(nèi)聯(lián)函數(shù)_nassert有助于數(shù)據(jù)的打包處理,;宏指令#pragma MUST_ITERATE告訴編譯器有關(guān)循環(huán)迭代次數(shù)的信息,,編譯器會根據(jù)這一信息進行軟件流水。
3.2? 用線性匯編改寫關(guān)鍵代碼
線性匯編是TMS320C6000特有的一種編程語言,,介于高級語言和匯編語言之間,。它可以指定指令用到的寄存器和功能單元,更易于對數(shù)據(jù)的打包處理,。
線性匯編代碼的并行處理和軟件流水由匯編優(yōu)化器完成,,編程者需要熟悉C64x DSP的CPU結(jié)構(gòu)和指令集,認真設計代碼并充分利用編譯器的反饋信息合理修改代碼,,才能寫出高質(zhì)量的線性匯編,。本設計中程序主框架采用C語言編寫,其它各關(guān)鍵部分的代碼采用線性匯編實現(xiàn),。表2是代碼優(yōu)化前后的效率對比,表2中所列各代碼段均針對8×8宏塊進行處理,。
4 結(jié)果分析
對各標準視頻序列進行編碼,,測得表3所示數(shù)據(jù)。實時采集D1(720×576)分辨率的視頻進行編碼,,測得碼率為850kbps時,,編碼速率達25fps以上,峰值信噪比(PSNR)高于31dB,,實現(xiàn)了高分辨率的實時MPEG-4編碼,。
表3中各視頻序列的編碼均采用了8×8半像素精度的運動估計,解碼圖像的視覺效果較好,。對于較低分辨率的視頻(QCIF,、CIF),其編碼速率已遠遠高于實時的要求,,因此可以考慮添加新的算法以提高壓縮效率并增強碼流的抗差錯性能,。
本文以DM642芯片為例詳述了基于C64x DSPs的MPEG-4實時編碼器設計。編碼器采用MPEG-4 Simple Profile算法,,在算法和代碼優(yōu)化方面還有一定的研究空間,。本文給出的設計方法可以進一步推廣到H.264或者其他視頻編碼系統(tǒng)。
參考文獻
1 Prasad RSV, Ramkishor korada. Efficient implementation of MPEG-4 video encoder on RISC core[J].IEEE Transactions on Consumer Electronics, 2003,;47(1):1~6
2 A. Dasu, S. Panchanathan. A Survey of Media Processing? Approaches[J]. IEEE Trans.on Circuit and System for Video Technology, 2002,;12(8):1~13
3 Tihao Chiang, Hung_Ju Lee, Huifang Sun. An overview of the encoding tools in the MPEG-4 reference software[J].In-ternational Symposium on Circuits and Systems, 2000,; May 28-31:1~4
4 鐘玉琢,王 琪,,賀玉文. 基于對象的多媒體數(shù)據(jù)壓縮編碼國際標準——MPEG-4及其校驗模型[M]. 北京:科學出版社,,2000
5 李方慧,王 飛,,何佩琨. TMS320C6000系列DSPs的原理與應用[M].北京:電子工業(yè)出版社,,2003