1 引言 H.264/AVC是ITU-TVCEG和ISO/IEC MPEG聯(lián)合制定的最新視頻編碼國際標(biāo)準(zhǔn),是目前圖像通信研究領(lǐng)域的熱點問題之一。H.264的視頻編碼層(VCL)采用了許多新技術(shù),因而使得編碼性能大幅度提高。與以往的視頻編解碼標(biāo)準(zhǔn)相比,在相同的碼率下,H.264具有更佳的圖像質(zhì)量,這使得H.264在無線通信和網(wǎng)絡(luò)傳輸?shù)鹊痛a率視頻應(yīng)用領(lǐng)域得到了更為廣泛的應(yīng)用。但這是以復(fù)雜度的成本增加為代價的,故使H.264在實時視頻編碼及傳輸應(yīng)用中面臨巨大的挑戰(zhàn)。而用高性能數(shù)字信號處理器(DSP)來實現(xiàn)H.264實時編碼器是一種快速有效的方法,有助于H.264視頻標(biāo)準(zhǔn)的迅速推廣和應(yīng)用。 ADSP-BF561處理器性能卓越,具有600 MHz的主頻,且集成了一套通用的數(shù)字圖像處理外圍設(shè)備接口,從而為多媒體和圖像應(yīng)用創(chuàng)建了一個完美的系統(tǒng)級片上解決方案。本文針對低碼率視頻傳輸?shù)男枰芯坎崿F(xiàn)基于H.264標(biāo)準(zhǔn)的視頻編碼系統(tǒng),同時探討H.264軟件編碼器在DSP上的實現(xiàn)及優(yōu)化方法。 2 H.264編碼算法及ADSP-BF561簡介 在實際開發(fā)過程中,針對H.264的算法特點和ADSP-BF561雙核處理器的結(jié)構(gòu)特性,本文做了大量優(yōu)化工作,從而在保證編碼精度的同時,大幅度提高了編碼速度。下面簡要介紹H.264視頻編碼算法和ADSP-BF561雙核處理器系統(tǒng)。 2.1 H.264編碼算法 H.264是ISO和ITU聯(lián)合制定的新一代視頻編碼標(biāo)準(zhǔn),具有很高的壓縮比和很好的魯棒性。其整體框架如圖1所示。 在繼承了原有視頻編碼標(biāo)準(zhǔn)的基礎(chǔ)上,H.264作了多方面的改進(jìn),包括引入4×4子塊和16x16子塊共9種模式的幀內(nèi)預(yù)測。幀內(nèi)模式的引入是為了與變換編碼一起用于消除空間上的冗余,進(jìn)而大大提高編碼效率。在幀間模式中,H.264可支持多尺寸的運動估計和補償。其幀間預(yù)測時塊的大小不是固定的8x8,而是可以從4×4到16x16,并且包括長寬不等的塊(共7種類型),同時支持多參考幀,故可大大提高預(yù)測性能。此外,H.264還采用整數(shù)DCT變換來降低計算量,同時采用自適應(yīng)算術(shù)編碼來提高編碼效率,并可利用濾波器消除低比特量化帶來的塊效應(yīng)等。事實上,H.264的效率比現(xiàn)有的編碼技術(shù)可提高50%。 2.2 ADSP-BF561芯片結(jié)構(gòu) ADSP-BF561是一種雙核750 MHz處理器,具有對稱多處理(SMP)系統(tǒng)結(jié)構(gòu)。其SMP結(jié)構(gòu)在信號處理和控制功能的集成和分割方面能夠為用戶提供較高的性能和較大的設(shè)計靈活性。ADSP-BF561的系統(tǒng)結(jié)構(gòu)如圖2所示,它包含coreA和coreB兩個核,每個核的處理頻率可達(dá)750MHz。兩個核都有各自獨立的32KB L1指令存儲器(16KB Cache/SRAM)和64KB L1數(shù)據(jù)存儲器(32KB Cache/SDRAM),并可共享128KB L2存儲器。兩內(nèi)核訪問不同內(nèi)存時,其速率有明顯差異,其中訪問L1存儲器最快,L2次之,而訪問片外內(nèi)存和設(shè)備則最慢。 由于訪問存儲器速率的差異。雙核之間進(jìn)行數(shù)據(jù)交換最好在L1段直接進(jìn)行,而且需要使用IMDMA控制器。這個DMA控制器的主要功能是在雙核之間的L1存儲器之間進(jìn)行數(shù)據(jù)交換。使用IMDMA控制器可以在訪問速率比較慢的片外內(nèi)存或者對L2進(jìn)行數(shù)據(jù)處理操作時,提高數(shù)據(jù)處理的速率,進(jìn)而提高編碼效率。 3 H.264視頻編碼算法的優(yōu)化與實現(xiàn) 對編碼器的優(yōu)化主要是對P幀編碼流程的優(yōu)化和對ADSP-BF561雙核處理系統(tǒng)的優(yōu)化,合理的流程有利于各種模塊的獨立性和完整性,同時有利于以后只針對某個模塊的優(yōu)化或升級處理。而利用ADSP-BF561的雙核協(xié)調(diào)處理優(yōu)勢可以進(jìn)一步提高其速度。 3.1 P幀編碼流程的優(yōu)化 由于H.264編碼算法比較龐大,對程序細(xì)節(jié)上進(jìn)行優(yōu)化事實上不能帶來明顯的效率提高,所以應(yīng)對程序流程本身進(jìn)行調(diào)整。在H.264編碼器JM86版本中,I幀、P幀的編碼采用同一模塊,這樣就有大量幀內(nèi)、幀間宏塊的重復(fù)判斷,故使編碼速度受限。 Micro_h264編碼軟件模型針對這一缺點進(jìn)行了處理,將I幀、P幀的編碼提取出來分別獨立編碼。但是遺憾的是,micro_h264編碼軟件模型對一幀圖像的宏塊進(jìn)行編碼是按照宏塊在圖像中的光柵掃描順序一一進(jìn)行的,沒有考慮到宏塊在一幀圖像中的不同位置有著不同的特性,而且對這些宏塊采用統(tǒng)一模式進(jìn)行編碼,也會產(chǎn)生很多判斷條件,這不但不利于DSP的流水操作,也不利于模塊的優(yōu)化。本文針對這一個缺點對micro h264的P幀編碼流程進(jìn)行優(yōu)化。 根據(jù)宏塊在一幀圖像中位置的不同,可以對不同位置的宏塊分別獨立進(jìn)行編碼。同時,根據(jù)子塊在宏塊中的不同位置,也可以對其進(jìn)行獨立編碼。 一幀圖像被分成多個宏塊時,不同位置的宏塊有不同的特性。因此,可以根據(jù)宏塊在一幀圖像中的不同位置來對宏塊進(jìn)行分類,以將具有相同編碼特性的宏塊歸為一類,這樣,可以將幀圖像的宏塊分成五類。圖3所示是其宏塊分類圖。 通過對宏塊進(jìn)行分類,可對不同的宏塊調(diào)用不同的函數(shù)來對其獨立編碼,從而減少很多不必要的判斷,這樣就不會打斷DSP的流水操作,達(dá)到提高速度之目的,同時在進(jìn)行優(yōu)化時也更具針對性。 本編碼器在P幀編碼時,只用了一幀參考幀,并且改進(jìn)了micro_h264編碼器軟件模型所使用的對宏塊編碼模式逐一遍歷的算法,而是采用宏塊編碼模式快速選擇算法。P幀編碼的流程圖如圖4所示。 運行平臺的不同,軟件結(jié)構(gòu)也應(yīng)該根據(jù)各自的特點做些調(diào)整。較低復(fù)雜度的編碼器可將多個不同類宏塊獨立出來單獨處理,這樣可以省去許多中間的重復(fù)判斷,不僅能提高編碼速度,同時程序結(jié)構(gòu)也顯得更為清晰,而且,由于各個模塊的相對獨立,也有利于程序的擴(kuò)展。雖然這樣在一定程度上增加了代碼量,但卻能有效地提高編碼速度。 3.2 ADSP-BF561雙核處理系統(tǒng)的優(yōu)化 為了保證編碼器的穩(wěn)定工作,本文把內(nèi)核定位在600 MHz,如果能在600 MHz的基礎(chǔ)上實現(xiàn)4CIF格式的實時編碼,那么,提高內(nèi)核處理頻率就能支持更高質(zhì)量的4CIF格式的視頻編碼處理。為了實現(xiàn)25幀圖像的實時編碼,每幀需要的時鐘周期數(shù)為600 MHz/25=24MHz,即需要在24 MHz時鐘周期數(shù)內(nèi)編碼一幀。大約相當(dāng)于在6 MHz內(nèi)進(jìn)行一幀CIF格式的視頻處理,顯然,如果使用一個核是很難做到實時編碼處理的。本文不同于大多數(shù)雙核系統(tǒng)的一個核運行操作系統(tǒng),而另一個核運行其它軟件的工作方式,是將編碼器放在兩個核內(nèi)同時進(jìn)行處理。 在ADSP-BF561開發(fā)板上實現(xiàn)這個編碼算法時,其主要的難點是兩個核之間如何通信以及協(xié)調(diào)工作。雙核同時運行一個視頻編碼程序時,需要對數(shù)據(jù)進(jìn)行共享和交換。雖然,使用片外內(nèi)存或者L2共享存儲器來進(jìn)行宏塊數(shù)據(jù)交換的實現(xiàn)方法比較簡單,且不需要進(jìn)行數(shù)據(jù)的拷貝,但是,大量訪問低速率存儲器的操作將極大地影響程序執(zhí)行的速率,進(jìn)而影響編碼器的編碼效率,所以,不能采用共享內(nèi)存來進(jìn)行宏塊數(shù)據(jù)的交換。本文采用的是IMDMA在雙核各自的L1數(shù)據(jù)段直接進(jìn)行數(shù)據(jù)交換,而且在編碼處理的同時進(jìn)行內(nèi)存數(shù)據(jù)的交換,從而避免了大量訪問低速率的存儲空間操作,減少了程序執(zhí)行的時間。而由于消息交換數(shù)據(jù)量很小,可以使用共享存儲器,因此,可以采用訪問速率相對較快的L2存儲器來進(jìn)行存取。事實上,筆者已經(jīng)經(jīng)過優(yōu)化編程在BF561開發(fā)板上實現(xiàn)了上述編碼算法。其雙核編碼主流程如圖5所示。 4 試驗結(jié)果與數(shù)據(jù)分析 經(jīng)過優(yōu)化,H.264的編碼性能有了較大的提升,實現(xiàn)了在BF561芯片上對4CIF格式視頻的實時編碼處理。同時,筆者還在VisualDSP++5.0編譯環(huán)境下分別對原編碼器和雙核編碼器實現(xiàn)的編碼結(jié)果進(jìn)行了測試,其結(jié)果如表1所列。事實上,編碼速度基本取決于圖像畫面的運動情況和顏色是否豐富。從上面的數(shù)據(jù)可以看出,對于不同序列,其編碼速度也不同。Claire序列的編碼速度之所以很快,是因為圖像背景靜止,只有肩部和頭部有運動,所以編碼數(shù)據(jù)量較表1對不同序列的優(yōu)化結(jié)果(25f/s CIF格式)少,編碼速度較高。另外,如果圖像比較簡單,其編碼速度也會較高,從而節(jié)約編碼時間。 試驗結(jié)果表明,采用本文的優(yōu)化方法可以節(jié)約大量的H.264視頻編碼數(shù)據(jù)處理的時間,能較好地滿足4CIF視頻序列實時編碼的要求。而對于很復(fù)雜的圖像,也可以在一定的量化參數(shù)下實現(xiàn)4CIF的實時編碼。 5 結(jié)束語 本文重點研究了基于ADSP-BF561雙核處理器的H.264視頻編碼算法的優(yōu)化及其實現(xiàn)方法。同時針對ADSP-BF561雙核處理器的體系結(jié)構(gòu),對編碼的關(guān)鍵部分進(jìn)行了算法流程的調(diào)整,并通過BF561雙核之間的數(shù)據(jù)交換和協(xié)調(diào)工作,在雙核上實現(xiàn)了4CIF格式視頻數(shù)據(jù)的實時編碼。實踐證明,使用VisualDSP++5.0仿真軟件,在ADSP-BF561開發(fā)板上實現(xiàn)25f/s的H.264 4CIF視頻編碼系統(tǒng),可以滿足人們對視頻傳輸?shù)男枨蟆?/td> |