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