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