張新安
(湖南科技學院 電子工程系,湖南 永州 425100)
H.264是ITU-T的視頻編碼專家組(VCEG)和ISO/IEC的活動圖像專家組(MPEG)聯合制定的新一代視頻編碼國際標準[1]。H.264以實現視頻的高壓縮比、高圖像質量和良好的網絡適應性等優點,被廣大視頻應用產業接納。相對于傳統視頻標準MPEG-2,H.264的壓縮比提高了2~3倍,極大地節省了視頻存儲容量和網絡帶寬,因此,一直有許多學者致力于H.264視頻編碼器的設計與優化研究[2-5]。
H.264編碼系統被廣泛應用于當今數字視頻監控領域,如銀行和證券集中監控、市內交通和高速公路集中監控、小區和樓宇安防等。目前市場上大部分商用化的視頻編碼系統產品都采用 ASIC芯片設計,通常只能完成一路視頻的實時壓縮,在許多實際應用中,常常需要對多路場景進行實時監控和存儲,使用一片 DSP實現多路視頻監控,能充分利用DSP的運算能力,可以降低成本,減少設備的功耗和體積。
本文設計的基于TMS320DM642(以下簡稱DM642)的H.264視頻編碼器,在硬件設計上,充分利用了DM642可以輸入多路不同格式音視頻信號的特點,實現了 DSP處理與EDMA傳輸并行工作,在編碼器的軟件實現中,對運動估計、整數反變換、去塊濾波等關鍵模塊的算法進行了改進,并對資源使用和軟件代碼進行了全面優化,能對四路分辨率為CIF352×288的視頻信號實現H.264視頻格式的實時編碼,具有功能強、可靠性高、體積小、功耗低和易于升級等特點。
1.1..264視頻編碼器的硬件系統設計
本系統以DM642DSP為核心,實現四路CIF352×288視頻格式的H.264標準的實時編碼,硬件系統結構如圖1所示。

圖1.路視頻編碼器硬件系統結構圖
TMS320DM642[6]是TI公司開發研制的一款專門面向多媒體應用的專用DSP芯片,548腳BGA封裝,芯片內核時鐘高達600MHz,處理能力最高可達4800MIPS,采用VLIW和L1/L2兩級緩存結構,并且支持EDMA,有專門為多媒體應用設計的三路視頻輸入、輸出端口(VP口),每個VP口又分成A和B 兩個通道,可與兩路10bit或一路20bit視頻A/D轉換器直接相連,通過復用三路VP口最多允許6路視頻輸入。
主機首先通過PCI初始化DSP并對其加載程序,DSP開始運行H.264編碼程序;輸入的模擬視頻信號經TVP515(0支持PAL和NTSC兩種制式)被數字化為YUV4∶2∶2的數字視頻格式,DM642的VP口對輸入的數字信號進行格式轉換,將采集的YUV分離并按照YUV分量各自連續存放的格式存放在SDRAM中,DSP通過EDMA完成4∶2∶2到4∶2∶0的視頻格式轉換,以適應H.264編碼的要求;視頻從VP口采集進來之后,采用EDMA方式進行數據搬移,搬移到緩存(cache)中之后,DM642便對數據進行壓縮處理;DSP完成一幀圖像的編碼,通過PCI向主機發出中斷,主機響應中斷,從DSP的存儲空間讀取原始圖像數據和壓縮后的碼流。主機程序在 VC++環境下編寫,提供與用戶交互的界面,可進行原始視頻的實時播放、壓縮編碼、保存、網絡傳輸;壓縮碼流的實時解壓播放、保存、回放;從網絡接收壓縮碼流實時解壓回放等各種處理。
1.2..264編碼算法的DSP實現與優化
將H.264編碼算法在DSP上實現與優化,需要經過PC機端算法實現及優化、PC機代碼的DSP化和DSP代碼優化等幾個步驟。
1.2.1.PC機上實現H.264算法并進行優化
選取 ITU-T的 JM6.1e參考軟件作為優化對象,但是JM6.1e代碼復雜,冗余度很大,需要在PC機端對其進行較大調整,涉及工作有:去除冗余代碼、規范程序結構、全局和局部變量的調整和重新定義、結構體的調整等。
1.2.2.C機H.264代碼的DSP化
ITU-T官方提供的H.264核心算法代碼是用C語言編寫、在PC機上實現的。C6000開發工具Code Composer Studio有自己的 ANSIC編譯器和優化器,并有自己的語法規則和定義,所以在DSP上實現H.264的算法,要把PC機上C語言編寫的H.264代碼進行改動,使其完全符合DSP中C的規則。
這些改動包括:去除所有的文件操作;去除可視化界面的操作;合理安排內存空間的預留和分配;規范數據類型,把浮點數的運算部分近似用定點表示,或用定點實現浮點運算;根據內存的分配定義遠近程常量和變量;把常用的數據在數據結構中提取出來,以near型數據定義在DSP內部存儲空間,以減少對EMIF端口的讀取,從而提高速度。
1.2.3.SP代碼的優化
通過把PC機H.264代碼DSP化,可以在DSP上實現H.264的編解碼算法,但是,這樣實現的算法運行效率很低,所以必須結合DSP本身的特點,對其進一步優化,才能實現H.264視頻編碼器算法對視頻圖像的實時處理。
對DSP代碼的優化分為項目級優化、C程序級優化和匯編程序級優化三個層次。
(1)項目級優化:主要是通過選擇CCS提供的編譯優化參數,根據H.264系統的要求進行優化,通過不斷地對各個參數(-mw -pm -o3 -mt等)的選擇、搭配、調整,改善循環、多重循環體的性能,進行軟件流水,從而提高軟件的并行性。
(2)C程序級優化:主要是針對采用的DSP的具體特點進行代碼的功能精簡、數據結構的優化、循環的優化、代碼的并行化處理。主要工作包括以下部分:去除掉SNR計算、幀率及其他輔助信息的程序模塊;函數及數據映射區域的調整,把經常用的數據存儲在片內存儲器中,頻繁調用的程序盡可能映射在相鄰或相近的存儲區域;針對并行化效果差的函數,尤其是多重循環體,要進行循環拆解,將多重循環拆解為單重循環;減少存儲區數據的讀取和存儲,尤其是片外存儲區域數據的調用,以減少時間;數據結構的重新定義和調整。
(3)匯編程序級優化。匯編級的優化包括兩部分:采用線性匯編語言進行優化和直接用匯編語言進行優化。由于系統編譯器的局限性,并不能將全部的函數都很好地優化,這樣就需要統計比較耗時的C語言函數,用匯編語言重新編寫。對耗時函數進行匯編語言改寫,涉及的函數有DCT變換,反DCT變換,整象素運動估計,亞象素搜索,幀內編碼函數,插值函數等。
2.1..264視頻編碼器軟件設計
軟件設計分為視頻采集、多路視頻處理和視頻壓縮三個部分。
視頻采集采用并行設計,即通過DM642的VP口同時處理四路視頻源,將數據存放到對應 VP口的緩存區。在SDRAM 中,為每一路視頻開辟三個緩存區,通過中斷信號改變緩存區的指針,將VP口中的數據通過EDMA搬移到緩存區中周期存放。在采集部分,充分使用DM642的VP口資源和片外SDRAM,無須消耗DSP的資源,提高了系統的運行效率。
多路視頻的處理采用四路編碼串行執行,即通過用戶程序控制DSP,在編碼完第一路的當前視頻幀后,再編碼下一路的當前視頻幀,依次循環進行。
視頻壓縮部分采用的H.264標準是以宏塊為單位的變換和預測的混合編碼技術,如圖2所示。編碼過程主要包括變換、量化、熵編碼、反量化、反變換、幀內預測、環路濾波、圖像重建、運動估計及運動補償。

圖2..264視頻編碼器方框圖
2.2..264視頻編碼器的軟件優化
H.264編碼計算量龐大,而DSP的硬件資源有限,需要結合DSP的特點進行較好的優化,才能達到實時編碼的要求。下面給出Cache性能優化和存儲的配置優化的方法。
2.2.1.ACHE的性能優化
DM642的存儲器系統由片內內存L1、L2和片外外存兩部分組成,L1、L2和片外SDRAM構成了整個存儲器系統的三級層次結構,如圖3所示。片內內存采用兩級緩存結構,第一級由L1P和L1D組成,L1距離DSP內核最近,數據訪問速度最快,只需一個時鐘周期。第二級L2是一個統一的程序/數據空間,根據L2配置為Cache或SRAM的不同選擇,訪問速度需 8個或 6個時鐘周期。第三級是片外外存,由SDRAM 構成,片外存儲器容量很大但訪問速度很慢,遠遠大于8個時鐘周期。

圖3.級存儲器系統結構圖
對CACHE性能優化,本設計采用了下列一些方法:合理配置L2;合理布置程序代碼段和數據段的內存布局,為防止有效代碼、數據在緩沖存儲器中相互排擠,盡量把順序執行的代碼、同時使用的數據放在相互鄰接的物理空間當中;若函數模塊和數據包含在一個循環中,循環體的大小應與Cache的容量相吻合,以便能把整個循環體全部放入 Cache中;為提高Cache中數據的重復利用率,把數據操作構成一條數據處理鏈,鏈中的下一級操作直接使用上一級操作留在Cache中的數據;根據Cache行數據寬度信息,調節數據在物理內存中的存放位置,從而利用數據預取增加Cache的命中率;通過合理的數據填充策略,避免同一時鐘周期對相同存儲體的讀寫操作造成存儲器的存取沖突。
2.2.2.儲器的配置優化
DSP的程序數據存儲空間非常有限。因此,對于視頻編解碼這種需要處理大量數據的程序而言,必須合理安排數據和程序的存儲方式,實現對存儲器的優化,以便提高程序執行的效率。否則,大量數據的反復搬移會阻礙程序運行效率的提高。
原程序有很多不適應DSP系統的程序流程結構,如內存分配和釋放操作頻繁,沒有在一開始就分配好內存,而是在一個個單獨的函數中分配和釋放內存,不僅程序運行效率低,還產生許多不必要的臨時存儲空間。為此,要對原有程序結構進行修改,調整程序運行流程,合并部分函數,使程序結構能充分利用DM642的硬件特點,盡量節省存儲空間。
根據片內存儲器容量小而存取速度快,片外存儲器容量大但存取速度慢的特點,在分配存儲器的時候對于那些經常使用的變量放在片內,如 VLC表、運動矢量、反量化、反DCT的系數以及其它中間變量等,而對于那些執行次數比較少或者比較大的變量如視頻幀參考幀則放在片外。此外由于編譯和分配空間是以文件為單位的,所以把頻繁使用的函數放在同一文件中,再將這個文件放入片內存儲器以高效地利用有限的片內資源。同時通過Profiler分析代碼調用頻率,合理安排代碼的存放位置,提高Cache的命中率和數據訪問性。為保證數據讀取的高效性,在片內開辟乒乓結構的雙緩存區。
編碼過程中要訪問的大量數據都放在片外存儲器, 處理時要進行頻繁的數據搬移,由于CPU訪問片外的速度通常要比訪問片內慢10~20倍,片外數據的傳輸通常成為程序運行時的瓶頸,即使代碼效率很高,流水線也會因為等待數據而被嚴重阻塞,本設計采用EDMA傳送數據來有效地解決這一問題。在編碼當前宏塊的同時,利用EDMA將下一個宏塊的數據、用到的參考幀數據由片外傳送至片內,當前宏塊做完運動補償后,EDMA將重建后的宏塊由片內傳送至片外。這樣CPU只對片內數據進行操作,流水線可以順利進行。
H. 264視頻編碼器的計算量主要集中在運動估計、量化、反量化、DCT與IDCT和去塊濾波幾個模塊,這些模塊優化前的運算量占到全部運算量的80%以上。下面給出幾個耗時較多的關鍵模塊的優化策略。
3.1.動估計優化
視頻編碼中,運動估計部分是運算量最大的一塊,研究顯示,對于H.264,單幀參考,運動估計占總運算量的70%,5幀參考,這個比例能達到90%,因此,采用有效快速的運動估計算法非常有必要,本系統采用基于預測和早停止技術的運動估計算法,主要方法是利用周邊鄰塊對當前塊運動矢量進行預測,并設定自適應閾值,使搜索提前停止。采用該算法,在搜索窗為32時,每塊平均搜索點數3~4個左右,與全搜索算法的4225余個點相比,速度提高了1000多倍。
計算 SAD是整像素運動估計中計算量最大的部分,TI庫函數中提供了一些函數,對于 16×16,16×8,8×8塊的搜索可以直接利用庫函數。對于 8×16 的塊不能直接利用,用線性匯編來實現后,軟件流水一次迭代的周期數為 3,與三個匯編庫函數的迭代周期數相同。
分像素運動估計中,在每個搜索位置調用Calcu_Subpixel_Residual(),計算出 1/4預測像素值,求預測殘差,將預測殘差保存在diff[16*16]中, 并將預測值保存。然后調用SATD_block()對diff[16*16]中的殘差進行哈達碼變換求 SATD,求 SATD是對每個 4×4塊進行,之后求和,4×4塊之間的計算可以軟件流水提高速度。此外,設兩個數組來保存最優的預測值,若當前考察的位置代價更小,則通過交換指針使pBestPred指向最優的預測值,避免數據拷貝。
3.2.數反變換的優化
對整數反變換模塊進行運算分析,算術運算的比例達到80%,所以優化重點是減少算術操作。一次反變換需要進行128次乘法和96次加法運算。當反變換進行Hadamard變換時,則需要進行256次乘法和192次加法運算。這樣即使是QCIF圖像,其逆變換也需要進行 50688~101376次乘法和38016~70632次加法運算。由于乘除運算比加減法運算耗時多,所以整數反變換的優化應集中在減少乘法運算次數上。
通過觀察變換矩陣可發現,該矩陣只包括±1和±1/2這4種系數,對于乘以±1的系數來說,可將其轉換為簡單的加減法,而對于乘以±1/2,則可以先進行移位運算然后再進行加減法運算,這樣就完全避免了代價昂貴的乘法和除法運算。另外可利用蝶形變換對矩陣相乘再做進一步改進。例如對 5幀不同格式圖像比較其優化前后的整數反變換過程,其所要的計算時間如表1所示。由表1可見,經統計優化后的反變換速度能提高21倍左右。

表1.數反變換優化前后時間對比
3. 3 去塊濾波的優化
由于H.264中最小塊的大小是4×4,所以在每個4×4塊中的每個點有相同的邊界門限。依據這一點,16個點可以只計算4次邊界門限,其相應的濾波操作也可以4次完成。通過這種優化方法可以將去塊濾波函數的調用次數降下來。
測試在一臺P4 3.0GHz,1G內存,操作系統為Windows XP的 PC機上進行。硬件測試平臺為基于本文方案研制的DM642編碼器板,主頻600MHz。對各種不同的CIF格式的視頻序列進行編碼,統計出優化前后的編碼性能如表2所示。

表2.試結果(一路視頻輸入)
從表2可以看出,在優化前系統不能完成一路視頻的實時編碼,優化后一路視頻的編碼幀率達到100fps以上,另從表2實驗結果可知,信噪比下降很少。在實時采集和編碼四路視頻時,即使在視頻內容比較復雜的情況下,總編碼幀率仍可達到102幀/秒,因此,本文設計的H.264編碼器完全能勝任四路CIF格式視頻的實時編碼,充分利用了DM642可以接受多路不同格式音視頻信號和數據處理能力強的優點,降低了系統得成本。
在TMS320D642 DSP上實現了四路CIF格式視頻的實時H.264軟件編碼器。給出的程序代碼的優化方法,對于所有的C64DSP都具有通用性,提出的關鍵模塊的優化策略,對采用其它視頻壓縮標準的編碼器的優化具有重要的參考和借鑒價值。該H.264視頻編碼器與網絡平臺相連接可以應用于多路視頻監控、視頻會議、可視電話、無線流媒體通信等應用領域。這種在通用DSP上全軟件實現的H.264視頻編碼器,具有功能強、使用靈活、便于升級等特點,有廣泛的應用前景。
[1]ITU-T. Recommendation H.264 Advanced video coding for generic audiovisual services[S].2004.
[2]陸璐,周維.適用于H.264的快速模式選擇算法[J].通信學報,2006 , 27 (7) : 117-121.
[3]張江鑫,馮明.H. 264快速幀內預測模式選擇算法[J].中國圖象圖形學報, 2008, 13 (10) : 2023-2036.
[4]劉佳,董金明.一種新的 H.264/AVC快速幀內預測模式選擇判決算法[J].電子與信息學報,2009, 31 (5) : 1072~1076.
[5]余成偉,陸建華,鄭君里.H.264 編碼模式選擇快速算法研究[J].清華大學學報, 2007, 47(10) : 1677-1680.
[6]Texas Instruments Incorporated. TMS320DM642 Hardware Designer’s Resource Guide[R]. Texas Incorporated 2004.