引 言
由于成本和視頻通信質量的因素,可視電話從推出到現(xiàn)在,一直受到用戶的冷落?,F(xiàn)在因為技術的進步和寬帶因特網的普及,可視電話呈現(xiàn)出新的生機。業(yè)內專家預測,未來幾年內,可視電話不僅可與電信固話、小靈通、移動/聯(lián)通手機互聯(lián),還可與3G 手機互通??梢曤娫拰⒊蔀楠毩⒌漠a業(yè),發(fā)展前景良好。
筆者基于TI公司的單顆600 MHz TMS320DM643(簡稱為DM643)數字媒體處理器,開發(fā)了一套性能優(yōu)異、價格低廉的嵌入式IP可視電話,實現(xiàn)點對點網絡音視頻實時通信。
1 基于TMS320DM643的硬件設計
DM643數字媒體處理器[1]集成了一系列外設,以適應視頻和影像技術的發(fā)展。其中包括3個可配置視頻端口,1個10/100 Mbps的以太網MAC(EMAC),1個面向音頻應用的串行口(McASP),1個串行口(McBSP)以及一些其他外設。C64x核內有8個并行的處理單元,采用VLIW(甚長指令集)結構,處理能力高達4800MIPS,并在C6OOO公共指令集的基礎上擴展了88條指令。這些指令使C64x能夠更方便地執(zhí)行圖象處理中的算法。
基于單顆DM643的嵌入式IP可視電話的組成如圖1所示。從攝像機輸入的視頻信號和從麥克風輸入的音頻信號經A/D轉換后送入DSP,DSP對音/視頻信號進行壓縮、編碼、合流;然后通過局域網或因特網將數據傳輸出去,同時將從網絡上接收的數據分流,并分別進行視頻信號的解碼顯示和音頻信號的解碼播放。系統(tǒng)中,還通過DM643的McBSP/UART 口外接了一個鍵盤,以實現(xiàn)電話的撥號功能。
圖1 嵌入式IP可視電話的組成
1.1 視頻采集電路
本系統(tǒng)采用的視頻解碼芯片是Philips公司的SAA7l15.從攝像機輸入的全電視信號在SAA7l15內部經過鉗位、抗混疊濾波、A/D轉換、YuV分離電路之后,在YuV到YCrCb的轉換電路中轉換成BT.656視頻數據流,通過DM643的視頻口VPo輸入到壓縮核心單元DM643中。視頻數據的行/場同步信號包含在BT.656數字視頻數據流的EAV(End of Active Video)和SAV(Startof Active Video)時基信號中,視頻口只需視頻采樣時鐘和采樣使能信號。SAA7l15內部寄存器參數的配置和狀態(tài)的讀出通過1 C總線進行。視頻采集接口的原理如圖2所示。
圖2 視頻采集接口原理
DM643將解碼后的視頻數據通過視頻口VP1通道送給SAA7121顯示輸出。SAA7121是Philips公司的一款視頻編碼芯片,可實現(xiàn)數字視頻的D/A 變換。SAA7121的工作模式由其內部的控制寄存器決定,控制寄存器的初始化通過1 C總線完成。DM643利用自身具有的1 C總線模塊,作為主控制器,對SAA7121進行參數編程控制。
1.2音頻輸入/輸出電路
本系統(tǒng)采用TI的高性能立體聲編/解碼器TI V320AIC23(簡稱AIC23),實現(xiàn)音頻信號的采集和播放。AIC23與DM643的I/0電壓兼容,可實現(xiàn)與DM643的McASP接口無縫連接。
在本系統(tǒng)中,AIC23工作于主模式,左右聲道的采樣字寬均為16位。數據接口為DSP mode模式。通過12 C總線設置內部寄存器的工作參數和反饋狀態(tài)信息。
由于網絡傳輸的固有特點,音頻數據和視頻數據傳輸到接收方時不可能是均勻的。如果發(fā)送方不作任何糾正處理,則很難保證音/視頻的同步輸出。為了實現(xiàn)音頻和視頻的采樣同步,利用鎖相環(huán)PI I 1708.從SAA7115的U C引腳輸出27 MHz時鐘,經PLI 1708的SCKO 3引腳輸出默認時鐘頻率18.433 MHz,作為AIC23的輸入主時鐘MCI K.AIC23內部采用的時鐘可通過設置寄存器由主時鐘MCLK分頻得到。由于音視頻采樣信號采用同一個時鐘源,因此不會出現(xiàn)音/視頻不同步的問題。
1.3 以太網接口電路
本系統(tǒng)用LXT971作為快速以太網物理層自適應收發(fā)器。LXT971支持IEEE 802.3標準,提供MII(MediaIndependent Interface)接口,可以支持MAC;而DM643內部正好集成有MAC控制器,所以LXT971可與DM643實現(xiàn)無縫連接。連接電路如圖3所示,其中BH1102為1:1的隔離變壓器。
圖3 網絡接口原理
1.4存儲器擴展電路
DM643通過EMIF接口擴展了2片32 MB的SDRAM來存放原始圖像數據,1片4 MB的Flash來存放應用程序。二者都映射到DM643的外部數據空間。
2 軟件實現(xiàn)和優(yōu)化
在本系統(tǒng)中,視頻編/解碼算法采用H.264標準[2],音頻編解碼算法采用G.723.1a,回音消除采用G.167,媒體協(xié)議采用RTP/RTCP,網絡協(xié)議采用TCP/UDP/IP,通信協(xié)議采用H.323v.4;另外還軟件實現(xiàn)了靜音、電話功能,并運用抖動緩沖媒體同步技術實現(xiàn)了各種網絡狀況下的音唇一致。操作系統(tǒng)采用基于DSP/B10S的TI參考架構5(RF5)?;赗F5操作系統(tǒng)的應用程序模塊主要包括:音/視頻采集模塊、音/視頻編解碼模塊、UART控制模塊和網絡傳輸模塊。
本系統(tǒng)采用的H.264編/解碼可大大提高圖像質量或降低像通信帶寬。同等圖像質量,H.264算法比H.263算法碼流降低了5O ;但同時H.264算法比H.263算法復雜得多,需要更強的處理能力,以及做更多的軟件優(yōu)化工作。H.264算法在DM643上的實現(xiàn)和優(yōu)化是整個系統(tǒng)軟件設計的難點和重點。下面以它為例說明軟件的開發(fā)、優(yōu)化工作。
DM643上的軟件開發(fā)過程可分為3個階段:
第1階段是開發(fā)C代碼,然后使用profiling工具確定代碼可能存在的低效率段。為進一步改進代碼性能,需進入第2階段。
第2階段是優(yōu)化C代碼。利用內聯(lián)函數、編譯器的外殼選項等方法進一步優(yōu)化C代碼。再次使用profiling工具檢查其性能,如果代碼仍達不到所期望的效果,須進入第3階段。[!--empirenews.page--]
第3階段是編寫線性匯編代碼 從C代碼中抽出對性能影響很大的代碼段,用線性匯編重新編寫這段代碼,然后使用匯編優(yōu)化器優(yōu)化該代碼。
2.1 C代碼的開發(fā)和優(yōu)化
開發(fā)過程中要充分利用Tl公司為用戶提供的功能強大的函數庫,比如IMAGE.LIB庫中就包含許多常用函數,可以實現(xiàn)DCT/IDCT變換、DCT量化、自適應濾波等功能。這些函數都是優(yōu)化過的,完全能夠實現(xiàn)軟件流水,效率很高。另外,開發(fā)C語言代碼還需要考慮的要點包括:① 使用適當的數據結構- - 對定點乘法,應盡可能使用short型數據;對循環(huán)計數器應使用int或者無符號int 類型。②使用查找表或常數值代替通過直接計算得到結果的語句或函數。
代碼分析結果顯示DCT、IDCT 、運動估計占程序總運算量的比重很大,因此這部分是程序優(yōu)化的重點。優(yōu)化C 代碼包括使用編譯器選項、使用內聯(lián)函數、使用軟件流水等。
(1)向編譯器指明不相關的指令。
為使指令并行操作,編譯器必須確定指令間的相關性,只有不相關的指令才可并行執(zhí)行。若編譯器不能確定兩條指令是不相關的,則只能安排它們串行執(zhí)行。用戶可通過如下方法指明相關的指令:
①關鍵字cons t 表示一個變量或一個變量的存儲單元保持不變,使用const 可提高代碼的性能和適應性。
②使用-mt 選項向編譯器說明在代碼中不存在存儲器相關性,即允許編譯器在無存儲器相關性的假設下進行優(yōu)化。
(2)使用內聯(lián)函數(intrinsics)。
可用內聯(lián)函數快速優(yōu)化C 代碼。如在算術操作中,常對計算的結果做飽和(saturation)處理,使用intrinsics只須調用SADD, 一個指令周期便可得到最終結果。比花費兩個嵌套的條件判斷語句來判斷結果是否溢出,最后得到結果效率要高得多。
(3)使用軟件流水。
在編譯時,使用-o2 選項和-o3 選項,編譯器可對循環(huán)代碼實現(xiàn)軟件流水。為填滿軟件流水線,軟件流水結構需要執(zhí)行的最小循環(huán)迭代次數稱為最小循環(huán)次數。循環(huán)總數小于最小循環(huán)次數時,執(zhí)行不流水形式循環(huán); 循環(huán)總數大于最小循環(huán)次數時,執(zhí)行軟件流水形式循環(huán)??梢允褂?ms 選項,使編譯器根據循環(huán)次數僅產生一種循環(huán)形式; 可使用-o3 和-pm 選項,使優(yōu)化器訪問整個程序,了解循環(huán)次數信息; 使用-nassert 內聯(lián)函數,防止冗余循環(huán)產生;使用-mh 選項,消除軟件流水循環(huán)的排空,從而減小代碼尺寸。
由于在嵌套循環(huán)中編譯器僅對最里面的循環(huán)執(zhí)行軟件流水,因此對于執(zhí)行周期很少的內循環(huán)進行循環(huán)展開,對外循環(huán)進行軟件流水。
使用軟件流水應當注意的問題: 盡管軟件流水循環(huán)可以包含內聯(lián)函數,但不能包含函數調用; 在循環(huán)中不使用break 語句; 循環(huán)控制變量不能與循環(huán)體內的語句有關; 如果循環(huán)體內復雜的條件代碼需要超過5 個條件寄存器或者32 個以上寄存器,則這個循環(huán)不可進行軟件流水。
(4)片內存儲器的分配及DMA技術的運用。
DM643 內部有16 KB 的一級程序緩存、16 KB 的一級數據緩存和256 KB 的程序數據共享二級緩存,遠小于執(zhí)行程序和待處理圖像數據,不可能將程序和圖像數據都在片內RAM 中緩存,因此合理地配置和使用存儲空間,對系統(tǒng)整體效率影響很大。
提高算法程序執(zhí)行速度的關鍵是使核心循環(huán)代碼和要訪問的數據在第1 次訪問之后全部發(fā)生L1P 和L1D 命中。核心循環(huán)代碼占的空間很小,執(zhí)行過一次之后,完全可以全部在L1P 中緩存,因此,不用考慮代碼如何在存儲器中存放,主要問題是圖像數據的存放。
由于L1D 采取LRU (Least Recently Used)分配機制,因此對于小于等于16 KB 的連續(xù)存放的數據塊可完全在L1D 中命中。以解碼過程為例,IDCT 和運動補償模塊都是以宏塊為單位進行運算的,IDCT 數據類型為short型,運動補償中的預測幀和當前幀的數據類型為unsignedchar 型。計算一個宏塊(420 格式)的IDCT 和運動補償要訪問的數據大小共需1 536 字節(jié),運動補償的數據包括預測宏塊和當前宏塊的數據,實際解碼中以6 個宏塊(10 KB)作為1 次處理對象。待處理的數據要從外部存儲器搬到L2 中連續(xù)的存儲空間,可利用EDMA 與CPU 并行工作的特點,采取Ping??Pong 技術,使CPU 在處理Ping空間數據的同時,由EDMA 將下次要處理的數據搬到Pong 空間中; 當CPU 處理Pong 空間數據時,再由EDMA將Ping 空間已處理好的數據搬回外部存儲器,并將下次要處理的數據搬到Ping 空間,這樣就可達到CPU 的最大計算能力。Ping、Pong 空間各占用的大小為20 KB, 兩個總共約40 KB.L2 中的剩余空間分出64 KB 留給數據空間,用于解碼中常用的解碼表、量化步長、輸入壓縮碼流緩沖區(qū)和輸出碼流緩沖區(qū)等。64 KB 的程序空間用于存儲H. 264 算法中的運動預測、運動補償和中斷服務程序等關鍵代碼。L2 其余部分配置為Cache, 操作與L1D 類似。
2. 2 編寫線性匯編代碼
為了提高代碼性能,對影響處理速度的關鍵C 代碼段可以用線性匯編重新編寫。線性匯編代碼類似于匯編代碼,不同的是線性匯編代碼中不需要給出匯編代碼必須指出的所有信息(如所使用的寄存器、指令的并行與否、指令的延遲周期和指令使用的功能單元等),匯編優(yōu)化器會根據代碼的情況確定這些信息。當然,如果能夠事先確定一些信息(如循環(huán)的執(zhí)行次數、存儲區(qū)的地址等),則編寫的線性匯編代碼的效率更高。具體的優(yōu)化措施如下:
①使用偽指令向匯編優(yōu)化器提供較為詳細的信息。
②畫出指令的相關圖,根據相關圖合理分配邏輯單元,最大限度地保證指令的并行執(zhí)行。
③充分使用C64x DSP 提供的強大包處理指令處理數據(包處理指令可同時處理2 個l6 位數據和4 個8 位數據)。本系統(tǒng)中使用了AVGU4、MIN2、M AX2、SPACKU4、PACK2、D0T P2、D0T PN2 和UNPKLU4 等指令。C64x DSP 還提供了STDW(STNDW)、LDDW(LDNDW)指令,可一次存取連續(xù)的64 位數據??衫肔DDW 指令,將作1 次行變換所需數據1 次取來,并將處理后的結果利用STDW 指令一次存好。這樣大大縮短了代碼長度,提高了代碼效率。
④利用Schedule Table 確定循環(huán)的重復間隔,合理安排功能單元,進行軟件的流水。
[!--empirenews.page--]⑤對于兩重循環(huán)嵌套,可將內層循環(huán)展開為外層循環(huán)內部的條件指令。這樣可減小由內層循環(huán)所帶來的循環(huán)前后的prolog 和epilog 的開銷。
3 性能分析
設計、調試好硬件系統(tǒng),并在DM643 上對整個系統(tǒng)軟件進行設計和優(yōu)化后,視/ 音頻編/ 解碼的處理速度及系統(tǒng)功能得到了很大提高。IP 可視電話基本做到話音清晰并實時傳輸,在網絡速度為30 kbps 以上時能實現(xiàn)CIF 圖像25~ 30 幀/ s, 并可以音唇同步。
結語
該系統(tǒng)能在一顆DM643 芯片上實現(xiàn)網絡可視電話的幾乎全部功能,能對音/ 視頻進行實時的編解碼和網絡傳輸,圖像質量高且易于升級,是一種比較理想的網絡可視電話解決方案。下一步的工作是把短信、電子郵件等其他功能整合進來。這樣,網絡IP 可視電話必將成為家庭或辦公室的真正桌面通信中心。