H.264視頻解碼器在C6416 DSP上的實(shí)現 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:介紹了最新視頻壓縮標準H.264,并實(shí)現了適合TI C6416 DSP內核的H.264視頻解碼器算法,在NVDK C6416板卡上進(jìn)行測試,達到了實(shí)時(shí)的解碼效果。該優(yōu)化算法,結合DSP處理平臺和網(wǎng)絡(luò )技術(shù),構成新的多媒體通信終端設備,具有廣泛的應用前景。 關(guān)鍵詞:H.264 視頻壓縮 數字信號算是器(DSP) NVDK 多媒體通信終端設備具有廣泛的應用前景,可以應用于視頻會(huì )議、可視電話(huà)、PDA、數字電視等各個(gè)領(lǐng)域,所以高效、實(shí)用的多媒體終端設備一直是通信領(lǐng)域研究的主要方向之一。 多媒體通信終端的實(shí)現主要有兩點(diǎn):一方面需要快速、穩定的處理器作為媒體信號處理的平臺,另一方面需要適合多媒體通信的協(xié)議標準和軟件算法,尤其是對音視頻信號的壓縮處理算法。兩者的結合才能產(chǎn)生高效的多媒全通信設備。目前隨著(zhù)數字信號處理器(DSP)的高速發(fā)展,為實(shí)現高效的音視頻信號處理提供了可能性;另一方面,最新的低碼率視頻壓縮標準H.264的出臺,提供了適合通信的視頻標準和算法指導。因此,將兩者結合,把H.264算法在DSP上實(shí)現,對于多媒體通信的研究具有一定的意義和價(jià)值。 本文介紹了H.264解碼器算法的DSP實(shí)現。在設計中,采用了ATEME公司的網(wǎng)絡(luò )視頻開(kāi)發(fā)平臺(NVDKC6416)作為DSP處理平臺,實(shí)現了H.264的優(yōu)化解碼算法。對于QCIF視頻序列,解碼速度達50~60幀/秒。 1 網(wǎng)絡(luò )視頻開(kāi)發(fā)平臺NVDK簡(jiǎn)介 NVDK是TI的第三方ATEME公司推出的基于TIC6400系列DSP評估開(kāi)發(fā)套件,是一套適用于圖像、視頻信號處理的高速DSP開(kāi)發(fā)平臺。該套件為諸如視頻基礎設施及網(wǎng)絡(luò )化視頻設備等高級視頻應用制造商提供了方便,提高了數字視頻應用項目的開(kāi)發(fā)速度。 1.1 NVDK C6416體系結構 NVDK C6416由TMS320C6416 DSP內核、10/100Mbps的以太網(wǎng)子卡、音頻/視頻接口盒、PCI總線(xiàn)、存儲器單元、擴展接口及獨立電源等構成。其功能結構框圖如圖1所示。 1.2 NVDK C6416的主要特點(diǎn) NVDK作為網(wǎng)絡(luò )及視頻開(kāi)發(fā)套件,把很多音視頻接口及網(wǎng)絡(luò )接口直接做在板卡上,給采用TI C6000系列DSP芯片作為處理單元的開(kāi)發(fā)用戶(hù)提供了便利的前端平臺。它為項目演示、算法實(shí)現、原理制作、數據仿真、FPGA開(kāi)發(fā)和軟件優(yōu)化提供了完整的DSP開(kāi)發(fā)平臺。其主要特點(diǎn)如下: %26;#183;C6416 DSP內核:600MHz時(shí)鐘頻率及8指令并行結構,最高可以達到4800MIPS的處理能力。 %26;#183;視頻特點(diǎn):在輸入端,NVDK能夠捕獲PAL制或NTSC制的模擬視頻信號,可以采用復合視頻(CVBS)或者S-video視頻信號輸入,輸入模擬視頻信號被數字化為YUV422數字視頻格式。在輸出端,NVDK在支持復合視頻(CVBS)以及S-Video輸出的同時(shí),還提供了SVGA輸出模式,視頻采集提供FULL、CIF和QCIF三種圖像格式,視頻輸出提供FULL和CIF兩種圖像格式。 %26;#183;音頻特點(diǎn):提供兩路雙聲道音頻輸出,CD音質(zhì)的輸入輸出立體聲接口,另外還提供一路單聲道的麥克風(fēng)輸入。 %26;#183;主接口:提供了PCI接口,允許與PC機相連。該板既可以以PCI模式運行,也可以單獨脫機工作。 %26;#183;網(wǎng)絡(luò )接口:以太網(wǎng)接口為視頻碼流的網(wǎng)絡(luò )傳輸帶來(lái)了方便。 %26;#183;外部擴展存儲器:256M 64位寬擴展內存SDRAM和8M 32位寬擴展內存SDRAMB及4MB FLASH ROM提供了跤的內存空間和靈活的內存分配方案。 2 H.264視頻壓縮標準 H.264是由ITU-T視頻編碼專(zhuān)家組(VCEG)和ISO/IEC移動(dòng)圖像專(zhuān)家組(MPEG)共同提出的最新國際視頻編碼標準。它在H.264、H.263視頻壓縮標準的基礎上,進(jìn)行了進(jìn)一步的改進(jìn)和擴展。其目的是為了進(jìn)一步降低編碼率,提高壓縮效率,同時(shí)提供一個(gè)友好的網(wǎng)絡(luò )接口,使得視頻碼流更適合在網(wǎng)絡(luò )上傳送。由于該標準可以提供更低的碼率,所以更適合應用于多媒體通信領(lǐng)域。 H.264主要有以下新特點(diǎn): %26;#183;網(wǎng)絡(luò )適配層NAL(Network Abstraction Layer)。 傳統的視頻編碼編完的視頻碼流在任何應用領(lǐng)域下(無(wú)論用于存儲、傳輸等)都是統一的碼流模式,視頻碼流僅有視頻編碼層(Video Coding Layer)。而H.264根據不同應用增加不同的NAL片頭,以適應不同的網(wǎng)絡(luò )應用環(huán)境,減少碼流的傳輸差錯。 %26;#183;幀內預測編碼模式(Intra Prediction Coding)。 幀內預測編碼合理地利用了I幀的空間冗余度,從而大大降低了I 幀的編碼碼流。 %26;#183;自適應塊大小編碼模式(Adqptive Block Size Coding)。 H.264允許使用16%26;#215;16、16%26;#215;8、8%26;#215;16、8%26;#215;8、8%26;#215;4、4%26;#215;8、4%26;#215;4等子塊預測和編碼模式,采用更小的塊和自適應編碼的方式,使得預測殘差的數據量減少,進(jìn)一步降低了碼率。 %26;#183;高精度亞像素運動(dòng)估計(High precision sub-pel Motion Estimation)。 H.264中明確提出了運行估計采用亞像素運動(dòng)估計的方法,并制定1/4像素和1/8像素可選的運動(dòng)估計方法。亞像素運動(dòng)估計,提高了預測精度,同時(shí)降低了殘差的編碼碼率。 %26;#183;多幀運動(dòng)補償技術(shù)(Multi-frame Motion Compensation)。 傳統的視頻壓縮編碼采用一個(gè)(P幀)或兩個(gè)(B幀)解碼幀作為當前幀預測的參考幀。在H.264中,最多允許5個(gè)參考幀,通過(guò)在更多的參考幀里進(jìn)行運動(dòng)估計和補償,找到列差更小的預測塊,降低編碼碼率。 %26;#183;整形變換編碼(Inter Transform Coding)。 H.264采用整形變換代替DCT變換,整形變換采用定點(diǎn)運算代替浮點(diǎn)運算。采用這種變換,不僅可以降低編解碼的時(shí)間,而且,為該算法在多媒體算是平臺上實(shí)現帶來(lái)了方便。在這一點(diǎn)上,H.264視頻編碼標準更適合作為多媒體終端的編解碼標準。 %26;#183;兩種可選擇熵編碼CAVLC和CABAC。 CAVLC(Context-based Adaptive Variable Length Coding):基于內容的自適應變長(cháng)編碼。 CABAC(Context-basedAdaptive Binary Arithmetic Coding):自適應二進(jìn)制算術(shù)編碼。 以往的視頻壓縮標準中,都采用Huffman編碼與變長(cháng)編碼相結合的方法進(jìn)行熵編碼。Huffman編碼雖然是一種很好用的熵編碼方法,但是其編碼效率并不是最高的,而且,Huffman編碼的抗差錯性能很低。H.264中采用了兩種可以選擇的熵編碼方法:CAVLC編碼抗差錯能力比較高,但是編碼效率不是很高;CABAC編碼是一種高效率的熵編碼方法,但是計算復雜很高。兩者各有優(yōu)缺點(diǎn),所以針對不同的應用,選擇不同的編碼方法。 3 H.264解碼器算法的DSP實(shí)現和優(yōu)化 3.1 在PC機上實(shí)現H.264算法并進(jìn)行優(yōu)化 ITU-T官方提供的H.264的核心算法不僅在代碼結構上需要改進(jìn),而且在具體的核心算法上也需要做大的改動(dòng),才能達到實(shí)時(shí)的要求。這一步需要做的具體工作包括:去處冗余代碼、規范程序結構、全局和局部變量的調整和重新定義、結構體的調整等。 3.2 PC機H.264代碼的DSP化 C6000開(kāi)發(fā)工具Code Composer Studio有自己的ANSIC編譯器和優(yōu)化器,并有自己的語(yǔ)法規則和定義,所以在DSP上實(shí)現H.264的算法要把PC機上C語(yǔ)言編寫(xiě)的H.264代碼進(jìn)行改動(dòng),使其完全符合DSP中C的規則。 這些改動(dòng)包括:去除所有的文件操作;去除可視化界面的操作;合理安排內存空間的預留和分配;規范數據類(lèi)型——因為C6416是定點(diǎn)DSP芯片,只支持四種數據類(lèi)型:short型(16 bit)、int(32bits)、long型(40bits)和double型(64bits),因此必須對數據進(jìn)行重新規范,把浮點(diǎn)數的運算部分近似用定點(diǎn)表示,或用定點(diǎn)實(shí)現浮點(diǎn)運算;根據內存的分配定義遠近程常量和變量;把常用的數據在數據結構中提取出來(lái),以near型數據定義在DSP內部存儲空間,以減少對EMIF端口的讀取,從而提高速度。 3.3 H.264的DSP算法優(yōu)化 通過(guò)把PC機H.264代碼DSP化,可以在DSP上實(shí)現H.264的編解碼算法,但是,這樣實(shí)現的算法運行效率很低,因為所有的代碼都是由C語(yǔ)言編寫(xiě),并沒(méi)有完全利用DSP的各種性能。所以必須結合DSP本身的特點(diǎn),對其進(jìn)一步優(yōu)化,才能實(shí)現H.264視頻解碼器算法對視頻圖像的實(shí)時(shí)處理。 對DSP代碼的優(yōu)化共分為三個(gè)層次:項目級優(yōu)化、C程序級優(yōu)化、匯編程序級優(yōu)化。 (1)項目級優(yōu)化:主要是通過(guò)選擇CCS提供的編譯優(yōu)化參數,根據H.264系統的要求進(jìn)行優(yōu)化,通過(guò)不斷地對各個(gè)參數(-mw -pm -o3 -mt等)的選擇、搭配、調整,改善循環(huán)、多重循環(huán)體的性能,進(jìn)行軟件流水,從而提高軟件的并行性。 (2)C程序級優(yōu)化:主要是針對采用的DSP的具體特點(diǎn)進(jìn)行代碼的功能精簡(jiǎn)、數據結構的優(yōu)化、循環(huán)的優(yōu)化、代碼的并行化處理。在這里主要工作包括以下部分:去除掉SNR計算、幀率及其他輔助信息的程序模塊。函數及數據映射區域的調整,把經(jīng)常用的數據存儲在片內存儲器中,頻繁調用的程序盡可能映射在相鄰或相近的存儲區域。C函數的并行化處理,針對并行化效果差的函數,尤其是多重循環(huán)體,要進(jìn)行循環(huán)拆解,將多重循環(huán)拆解為單重循環(huán)。減少存儲區數據的讀取和存儲,尤其是片外存儲區域數據的調用,以減少時(shí)間。數據結構的重定義和調整。 下面以數據結構的調整說(shuō)明如何合理利用DSP特性進(jìn)行軟件優(yōu)化。 數據結構是指數據的類(lèi)型及其在內存空間的分配方式,不同的數據結構,對程序的性能有不同的影響。因此,數據結構的調整對程序在DSP上并行執行是必不可少的步驟。 在H.264解碼器內核代碼中,數組mpr[i][j]用來(lái)存放一個(gè)宏塊的預測系數,數據類(lèi)型是int型,其中i、j是該系數的坐標。但是預測系數實(shí)際上只有8位位寬,所以,定義成byte型就足夠了。這樣一方面節省了內存空間,另一方面,用byte類(lèi)型可以直接使用LDW指令代替LDB指令,一次讀取4個(gè)數據,節省了讀取時(shí)間。因此H.264中對系數的讀取都是以塊為單位的,而內核中的mpr數據結構顯然不能充分利用DSP的特性,所以數據存儲結構也需要調整,把mpr中每一個(gè)塊分配到一個(gè)連續的內存空間有利于數據的傳送,如圖2所示。這樣,每一次確定了一個(gè)塊以后,只要更改一維的信息就能確定系數的位置,而原始的結構對每一個(gè)系數都有確定兩位系數。通過(guò)這樣的數據調整,可以明顯地提高程序的運行速度。 (3)匯編程序級優(yōu)化。匯編級的優(yōu)化包括兩部分:采用線(xiàn)性匯編語(yǔ)言進(jìn)行優(yōu)化和直接用匯編語(yǔ)言進(jìn)行優(yōu)化。由于系統編譯器的局限性,并不能將全部的函數都很好地優(yōu)化,這樣就需要統計比較耗時(shí)的C語(yǔ)言函數,用匯編語(yǔ)言重新編寫(xiě)。這些函數包括:插值函數、幀內預測函數、整形反亦換等函數。 下面以差值函數中的一段來(lái)說(shuō)明匯編編寫(xiě)帶來(lái)的性能提高。 橫向1/2插值源代碼:for(j=0;j
評論