《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 基于TMS320C64x DSPs的MPEG-4實(shí)時(shí)編碼器設(shè)計(jì)與實(shí)現(xiàn)

基于TMS320C64x DSPs的MPEG-4實(shí)時(shí)編碼器設(shè)計(jì)與實(shí)現(xiàn)

2008-08-26
作者:李群迎, 張曉林, 劉榮科,

  摘 要: 設(shè)計(jì)并實(shí)現(xiàn)了一種基于TMS320C64x系列高性能通用DSPs 的MPEG-4 Simple Profile編碼器。詳細(xì)介紹了系統(tǒng)的硬件結(jié)構(gòu)和工作流程。為解決高分辨率視頻編碼的實(shí)時(shí)性問題, 采用預(yù)測(cè)技術(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é)果表明編碼器對(duì)D1分辨率(720×576)視頻的編碼速率達(dá)到25幀/秒以上,且具有較低的碼率和較好的圖像質(zhì)量。
  關(guān)鍵詞: MPEG-4 TMS320C64x? 軟件優(yōu)化? 運(yùn)動(dòng)估計(jì)


  信息時(shí)代對(duì)于視頻通訊的需求越來越廣,從較低碼率的可視電話、視頻會(huì)議、實(shí)時(shí)監(jiān)控到高碼率的空中偵察、數(shù)字電視等,迫切要求將高效率、高質(zhì)量的視頻壓縮算法實(shí)用化。MPEG-4于2000年正式成為國際標(biāo)準(zhǔn)并不斷地?cái)U(kuò)展。它不僅支持碼率低于64kbps的多媒體通信,還能支持廣播級(jí)的視頻應(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)對(duì)中低分辯率視頻的實(shí)時(shí)編碼。本文基于TI公司的C64x系列DSPs設(shè)計(jì)并實(shí)現(xiàn)了一種MPEG-4編碼器,實(shí)現(xiàn)了對(duì)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)、外部存儲(chǔ)器接口(EMIF)、主機(jī)接口(HPI)、多通道緩沖串口(McBSP)以及PCI接口等。
1.2? 系統(tǒng)工作流程
  該編碼系統(tǒng)可分為圖像壓縮卡和主機(jī)兩部分。其工作流程如圖2所示。


  首先主機(jī)通過PCI初始化DSP并對(duì)其加載程序;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的存儲(chǔ)空間讀取原始圖像數(shù)據(jù)和壓縮后的碼流。主機(jī)程序在VC++環(huán)境下編寫,提供與用戶交互的界面,可對(duì)數(shù)據(jù)進(jìn)行各種處理,包括原始視頻的實(shí)時(shí)播放、保存,壓縮碼流的實(shí)時(shí)解壓播放、保存、回放、網(wǎng)絡(luò)傳輸,從網(wǎng)絡(luò)接收壓縮碼流實(shí)時(shí)解壓回放等。
  需要注意的是原始圖像和壓縮碼流在DSP中的存儲(chǔ)。視頻端口、編碼程序和主機(jī)都要訪問原始圖像,例如在某一時(shí)刻,編碼程序訪問當(dāng)前幀圖像,主機(jī)讀取上一幀圖像,而視頻端口正在輸入下一幀圖像,為了避免訪問沖突,原始圖像在DSP中采用三緩沖區(qū)進(jìn)行管理。壓縮碼流由編碼程序?qū)懭?,主機(jī)讀取,所以采用乒乓制進(jìn)行存儲(chǔ)。
1.3 內(nèi)存分配
  DM642片內(nèi)只有256KB的存儲(chǔ)空間,因此當(dāng)前幀、參考幀和當(dāng)前幀的重建幀都必須放至片外存儲(chǔ)器,壓縮碼流若被主機(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只對(duì)片內(nèi)數(shù)據(jù)進(jìn)行操作,使得流水線可以順利進(jìn)行,而壓縮碼流按逐個(gè)碼字有時(shí)間間隔地寫入,可由CPU直接寫至片外。
2 采用預(yù)測(cè)技術(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ù)測(cè)技術(shù)的運(yùn)動(dòng)估計(jì)不但可以大大縮短計(jì)算時(shí)間,而且也有助于提高圖像的質(zhì)量。
  宏塊(Macro Block)的運(yùn)動(dòng)矢量(Motion Vector)在時(shí)間和空間都具有相關(guān)性,預(yù)測(cè)的原理就是利用當(dāng)前幀和參考幀內(nèi)相鄰位置宏塊的MV來預(yù)測(cè)當(dāng)前宏塊的MV。下面詳述本文所采用的預(yù)測(cè)算法。
  (1)確定當(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值。


  (2)確定篩選候選值的依據(jù)——SAD(絕對(duì)誤差和)的門限值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和其對(duì)應(yīng)匹配塊的SAD值,ThreshSAD取三者的最小值。
  (3)從7個(gè)候選值中選出當(dāng)前宏塊的MV值。
  按照PreMV1~7的順序,依次計(jì)算當(dāng)前宏塊和7個(gè)匹配塊的SAD值。如果有SAD值小于ThreshSAD,即停止計(jì)算,選用對(duì)應(yīng)的PreMV作為當(dāng)前宏塊的MV值;如果7個(gè)SAD值均大于ThreshSAD,則采用運(yùn)動(dòng)搜索來確定當(dāng)前宏塊的MV值。該運(yùn)動(dòng)搜索并不以MV=(0,0)為中心,而是以對(duì)應(yīng)SAD值最小的PreMV為中心,搜索采用簡化的菱形算法。
  對(duì)標(biāo)準(zhǔn)視頻序列" title="視頻序列">視頻序列foreman.cif(352×288)進(jìn)行編碼(碼率300kbps),測(cè)得表1所示數(shù)據(jù)。采用預(yù)測(cè)的運(yùn)動(dòng)估計(jì)算法利用視頻序列在時(shí)間和空間上的相關(guān)性,無需對(duì)每個(gè)宏塊都進(jìn)行運(yùn)動(dòng)搜索,而且其搜索中心點(diǎn)也同樣利用了相關(guān)信息,搜索算法也可進(jìn)一步簡化,因此大大減少了運(yùn)動(dòng)估計(jì)的計(jì)算量;同時(shí),預(yù)測(cè)有助于提高圖像質(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)對(duì)其進(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 針對(duì)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特有的一種編程語言,介于高級(jí)語言和匯編語言之間。它可以指定指令用到的寄存器和功能單元,更易于對(duì)數(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)化前后的效率對(duì)比,表2中所列各代碼段均針對(duì)8×8宏塊進(jìn)行處理。


4 結(jié)果分析
  對(duì)各標(biāo)準(zhǔn)視頻序列進(jìn)行編碼,測(cè)得表3所示數(shù)據(jù)。實(shí)時(shí)采集D1(720×576)分辨率的視頻進(jìn)行編碼,測(cè)得碼率為850kbps時(shí),編碼速率達(dá)25fps以上,峰值信噪比(PSNR)高于31dB,實(shí)現(xiàn)了高分辨率的實(shí)時(shí)MPEG-4編碼。


  表3中各視頻序列的編碼均采用了8×8半像素精度的運(yùn)動(dòng)估計(jì),解碼圖像的視覺效果較好。對(duì)于較低分辨率的視頻(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 鐘玉琢,王 琪,賀玉文. 基于對(duì)象的多媒體數(shù)據(jù)壓縮編碼國際標(biāo)準(zhǔn)——MPEG-4及其校驗(yàn)?zāi)P蚚M]. 北京:科學(xué)出版社,2000
5 李方慧,王 飛,何佩琨. TMS320C6000系列DSPs的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。