摘 要: 針對(duì)光電經(jīng)緯儀高幀頻和高分辨率圖像實(shí)時(shí)壓縮難以實(shí)現(xiàn)的問(wèn)題,在TI公司提供的H.264單核編碼開(kāi)源工程和多核并行算法的基礎(chǔ)上,提出了基于TMS320C6678多核處理器的H.264并行算法,。在單核編碼開(kāi)源工程實(shí)現(xiàn)多核并行視頻編碼,,將每幀圖像平均劃分成多個(gè)Slice,,每個(gè)DSP核處理一個(gè)Slice,。實(shí)驗(yàn)結(jié)果表明,與單核視頻編碼相比,,多核并行視頻編碼的加速與比核數(shù)的增加呈線性增長(zhǎng),在TMS320C6678多核處理器上實(shí)現(xiàn)光電經(jīng)緯儀的實(shí)時(shí)圖像壓縮具備較強(qiáng)的工程實(shí)踐性。
關(guān)鍵詞: 光電經(jīng)緯儀;H.264,;TMS320C6678,;實(shí)時(shí)壓縮,;Slice
隨著高幀頻、高分辨率成像傳感器技術(shù)在光電經(jīng)緯儀領(lǐng)域的廣泛應(yīng)用,,光電經(jīng)緯儀圖像在傳輸和存儲(chǔ)過(guò)程中將占用更大帶寬和更多存儲(chǔ)資源,,因此有必要對(duì)圖像進(jìn)行實(shí)時(shí)壓縮,。
在當(dāng)前眾多視頻編碼標(biāo)準(zhǔn)中,H.264因其高數(shù)據(jù)壓縮率和友好的網(wǎng)絡(luò)親和性得到廣泛應(yīng)用[1-2],。但是,H.264更高的計(jì)算復(fù)雜度帶來(lái)了更長(zhǎng)的編碼時(shí)間,,參考文獻(xiàn)[3]以x264為基礎(chǔ),僅僅實(shí)現(xiàn)了時(shí)域可伸縮的編碼方案,也只能支持最大分辨率QVGA的實(shí)時(shí)編碼,這一困境使得H.264很難在光電經(jīng)緯儀實(shí)時(shí)圖像傳輸系統(tǒng)中應(yīng)用。
本文立足多核DSP和H.264編碼層次結(jié)構(gòu)的研究,,在TMS320C6678多核DSP上實(shí)現(xiàn)H.264的多核并行壓縮編碼,在TI公司提供的H.264開(kāi)源工程單核編碼的基礎(chǔ)上,,實(shí)現(xiàn)對(duì)光電經(jīng)緯儀圖像的實(shí)時(shí)壓縮,。
1 H.264多核并行算法分析
基于Slice級(jí)的并行算法是將每幀圖像劃分為多個(gè)Slice[4],,因?yàn)橥粠母鱾€(gè)Slice之間沒(méi)有數(shù)據(jù)依賴,所以可以實(shí)現(xiàn)并行編碼,。當(dāng)把一幀圖像分成多個(gè)Slice后,,降低了圖像內(nèi)部相關(guān)性,,但過(guò)多的Slice劃分會(huì)對(duì)圖像質(zhì)量產(chǎn)生影響,因此不能無(wú)限制地進(jìn)行Slice劃分[5],。
在同一幅圖像上,,不同的區(qū)域其內(nèi)容復(fù)雜度也可能各不相同[6],使得各個(gè)Slice的編碼時(shí)間各不相同,,直接導(dǎo)致了整個(gè)編碼器的均衡程度降低,。另一方面,在編碼下一幀圖像之前,,各個(gè)核必須完成對(duì)應(yīng)Slice的編碼,,因此各個(gè)Slice必須在編碼下一幀圖像之前進(jìn)行同步,同步的時(shí)間直接取決于各個(gè)核對(duì)Slice編碼的均衡程度,。
2 H.264核心代碼結(jié)構(gòu)分析
本文基于H.264單核編碼實(shí)現(xiàn)多核并行壓縮,, H.264單核編碼的流程圖如圖1所示。H.264工程對(duì)編碼參數(shù)和存儲(chǔ)空間初始化后,,循環(huán)調(diào)用Encode_one_frame部分,,對(duì)每一幀圖像進(jìn)行編碼,,直至最后一幀。在H.264開(kāi)源工程的基礎(chǔ)上,,給出了基于Slice的多核并行壓縮編碼,,流程圖如圖2所示。編碼前先對(duì)一幀圖像進(jìn)行Slice劃分,,當(dāng)所有內(nèi)核完成相應(yīng)Slice編碼后進(jìn)行多核同步,,然后才能進(jìn)行下一幀圖像的編碼。依此類推,,直至最后一幀圖像編碼完成,。
3 H.264的DSP實(shí)現(xiàn)
本文選擇TI codec庫(kù)提供的H.264開(kāi)源工程[7],該程序在作者實(shí)驗(yàn)室的DSP+FPGA圖像處理開(kāi)發(fā)板上實(shí)現(xiàn),,運(yùn)行頻率為1 GHz,,編譯環(huán)境為CCS v5.0。
多核并行編碼的實(shí)現(xiàn)是把一幀圖像分為多個(gè)Slice,,由多個(gè)處理器核來(lái)實(shí)現(xiàn)每個(gè)Slice的壓縮算法,。經(jīng)過(guò)對(duì)H.264工程的研究,Slice劃分算法的實(shí)現(xiàn)可以由以下兩種方式來(lái)實(shí)現(xiàn):
?。?)按照宏塊數(shù)目平均劃分(這里宏塊大小為16宏塊數(shù)),,如式(1)所示:
其中,image_height為圖像的高度,,ncores為參與編碼并行核數(shù),,m[ncores]為每個(gè)Slice的邊界(單位為行)。ncores個(gè)核并行處理的Slice邊界分別為:
核0:(0~m[ncores])(表示核0處理第0~m[ncores]行的數(shù)據(jù))
核1:(m[ncores]~2×m[ncores])
…
核7:(7×m[ncores]~8×m[ncores])
單核并行處理時(shí)只調(diào)用核0,,雙核時(shí)調(diào)用核0~1,四核時(shí)調(diào)用核0~3,。
?。?)按照宏塊計(jì)算復(fù)雜度平均劃分(這里的宏塊大小為16×16)。首先計(jì)算出一幀圖像中每個(gè)宏塊的計(jì)算復(fù)雜度,,記為cost[i],,i為宏塊的序列號(hào);其次,,計(jì)算所有宏塊的總計(jì)算復(fù)雜度,,記為Total_cost;最后,,按照Total_cost來(lái)平均劃分Slice邊界:
其中,,M[j]為宏塊的序列號(hào),j為實(shí)現(xiàn)次數(shù),。計(jì)算Slice邊界步驟如下:
?、佼?dāng)式(2)中的條件首次實(shí)現(xiàn)時(shí),,記錄M[1],并將M[1]帶入式(3)中,,計(jì)算出第一個(gè)Slice的行數(shù)N[1],;
②ncores變?yōu)閚cores-1,,i由0變?yōu)镸[1],,Total_cost減去式(2)的左值,得到新的Total_cost,;
?、坜D(zhuǎn)到步驟①,計(jì)算下一個(gè)新的M[2]值,,直到ncores為0,,停止計(jì)算,可以得到ncores個(gè)核并行處理的Slice邊界為:
核0:(0~M[1])
核1:(M[1]~M[2])
…
核7:(M[7]~M[8])
4 實(shí)驗(yàn)結(jié)果分析
為了測(cè)試H.264編碼算法在TMS320C6678多核處理器上的并行實(shí)現(xiàn),,實(shí)驗(yàn)中將相同YUV視頻序列分別使用(1),、(2)兩種Slice劃分算法實(shí)現(xiàn),這兩種算法均經(jīng)過(guò)單核,、雙核,、四核分別運(yùn)行。本文實(shí)驗(yàn)對(duì)象為YUV420P格式10幀圖像,,幀排序方式為IPPP,,輸出為H.264格式。對(duì)比不同劃分算法的多核并行處理結(jié)果如表1,、2所示,。
從表1、2可看出,,第1幀的處理時(shí)間為剩余9幀的一半,,這是因?yàn)榈?幀編碼為I幀,是幀內(nèi)預(yù)測(cè),;而第2~10幀圖像都是P幀,,是幀間預(yù)測(cè)。劃分算法(1)單核情況下每幀圖像的處理時(shí)間與劃分算法(2)單核情況下的處理時(shí)間相同,,這是因?yàn)閱魏饲闆r下,,每幀圖像都為一個(gè)Slice;在雙核情況下,,劃分算法(2)相對(duì)于劃分算法(1)在處理上有5%的提升,;四核情況下,劃分算法(2)相對(duì)于劃分算法(1)在時(shí)間上有很小的提升,。
劃分算法(2)相對(duì)于算法(1)在性能上能有所提升是因?yàn)楸緦?shí)驗(yàn)所選擇的圖像的計(jì)算復(fù)雜度分布不均勻,,算法(2)是以一幀圖像的宏塊復(fù)雜度為基礎(chǔ)來(lái)平均劃分一幀圖像的,,因此對(duì)于一幀圖像來(lái)說(shuō),每片Slice所分配的計(jì)算負(fù)載更加平均,,比算法(1)的按行數(shù)平均劃分處理時(shí)間要減少,。
單核、雙核,、四核并行處理加速比對(duì)比結(jié)果如表3所示,。
從表3可以看出,在四核處理情況下,,劃分算法(1)的加速比是單核處理的3.6倍,,劃分算法(2)相對(duì)于劃分算法(1)性能上有很小的提升;在雙核情況下,,劃分算法(1)的加速比約為單核處理的1.84倍,,而劃分算法(2)相對(duì)于劃分算法(1)的性能有6%的提升。
單核,、雙核,、四核的處理加速比沒(méi)有與并行核數(shù)完全成線性關(guān)系的原因是:(1)每幀圖像劃分的每個(gè)Slice的計(jì)算復(fù)雜度不同,因此編碼所需的時(shí)間也不同,,每幀圖像需要等到編碼最慢的Slice完成,,才算一幀圖像編碼結(jié)束;(2)每個(gè)Slice都包含獨(dú)立的頭信息,,在編碼時(shí)會(huì)有額外的讀取頭信息的時(shí)間消耗,。
由表1、2可以得出,,單核處理的幀率為82 f/s,,雙核處理的幀率達(dá)到150~160 f/s,四核處理的幀率達(dá)到了300 f/s,,可以看出多核并行用于實(shí)現(xiàn)光電經(jīng)緯儀圖像實(shí)時(shí)壓縮的潛能,。
本文針對(duì)光電經(jīng)緯儀高幀頻和高分辨率圖像實(shí)時(shí)壓縮難以實(shí)現(xiàn)的問(wèn)題,對(duì)H.264算法在TMS320C6678上的多核并行進(jìn)行了研究,,在H.264單核編碼的基礎(chǔ)上實(shí)現(xiàn)了兩種Slice級(jí)多核并行壓縮編碼算法,分別實(shí)現(xiàn)了光電經(jīng)緯儀圖像實(shí)時(shí)壓縮的功能,。
本文的試驗(yàn)驗(yàn)證了多核并行壓縮算法在實(shí)時(shí)壓縮方面的可行性,,對(duì)Slice劃分算法的優(yōu)化沒(méi)有進(jìn)行詳細(xì)研究,這是下一步研究的重點(diǎn),。
參考文獻(xiàn)
[1] 張紀(jì)鈴,,夏超,黃富良.一種基于H264編碼標(biāo)準(zhǔn)的快速運(yùn)動(dòng)估計(jì)算法[J].電子測(cè)量技術(shù),,2009,,32(8):69-73.
[2] 許春冬,,姚萌,廖薇.基于DM642的T264視頻編碼器優(yōu)化[J].新特器件應(yīng)用,,2009,,11(12):11-13,17.
[3] 孔群娥,,曾學(xué)文.基于x264實(shí)現(xiàn)H.264的時(shí)域可伸縮編碼[J].微計(jì)算機(jī)應(yīng)用,,2011,32(3):24-28.
[4] 黃亮.基于多核處理器的SVC高清實(shí)時(shí)編碼[J].計(jì)算機(jī)工程與應(yīng)用,,2013,,49(13):170-174.
[5] 夏齡,舒濤.一種H.264/AVC視頻編碼并行算法[J].計(jì)算機(jī)工程,,2013,,39(4):314-317.
[6] 陳曉娟,陳淑榮.實(shí)時(shí)視頻圖像的清晰度檢測(cè)算法研究[J].微型機(jī)與應(yīng)用,,2010,,29(17):36-38.
[7] 彭旭鋒,劉文怡,,李金力.基于DSP和FPGA的實(shí)時(shí)圖像壓縮系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,,2019,29(11):17-20.