陳穩(wěn) 張德學(xué)
摘 要 高效率視頻編碼(High Efficiency Video Coding 簡(jiǎn)稱HEVC)是在ITU-T H.264/AVC標(biāo)準(zhǔn)基礎(chǔ)上發(fā)展起來的新一代視頻編碼標(biāo)準(zhǔn),旨在通過并行化的設(shè)計(jì)來提升視頻編碼效率。本文論述了HEVC解碼算法的流程,提出了一種多核并行解碼算法,此法算可在parallella開發(fā)板上實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,此種算法可提高解碼速度。
關(guān)鍵詞 HEVC 并行 解碼算法 parallella 多核
中圖分類號(hào):TP301.6 文獻(xiàn)標(biāo)識(shí)碼:A ? DOI:10.16400/j.cnki.kjdkz.2015.06.027
Multi-core Parallel Decoding Algorithm Based on
High-efficiency Video Coding Standard
CHEN Wen, ZHANG Dexue
(College of Electronic, Communication and Physics,
Shandong University of Science and Technology, Qingdao, Shandong 266590)
Abstract High Efficiency Video Coding (High Efficiency Video Coding referred HEVC) is the next generation video coding standard developed in the ITU-T H.264 / AVC standard, based on the parallel design aims to improve video coding efficiency. This paper discusses the process of decoding algorithm HEVC proposed a multi-core parallel decoding algorithm, this method can be considered in parallella development board. Experimental results show that this algorithm can improve the decoding speed.
Key words HEVC; parallel; decoding algorithm; multi-core
隨著電子技術(shù)的不斷發(fā)展,視頻也已經(jīng)成為人們不可缺少的一部分。隨著高清(HD)和超高清(UHD)等技術(shù)走進(jìn)我們的生活,視頻編碼標(biāo)準(zhǔn)必須要緊跟技術(shù)發(fā)展的步伐。盡管近年來網(wǎng)絡(luò)帶寬和存儲(chǔ)能力迅速增加,但是也遠(yuǎn)不能滿足以海量信息為特征的視頻數(shù)據(jù)的傳輸和存儲(chǔ)的要求,因此視頻信息量的高效壓縮是解決這一矛盾的重要技術(shù)措施之一。①HEVC的誕生在很大程度上緩解了這一問題,雖然由于壓縮效率的提高,算法復(fù)雜度也隨之增加,由此會(huì)使得解碼端的算法變得復(fù)雜,增加解碼時(shí)間。
目前對(duì)HEVC解碼的研究主要集中在通過增加并行性來提高解碼速度。所用的方法是將一幀圖像分割成條帶、條帶片斷或區(qū)塊,分割出來的部分再劃分并行計(jì)算區(qū)域。本文采用多核技術(shù),通過分析每個(gè)解碼模塊的工作原理及所耗費(fèi)的時(shí)間,將最有可能改進(jìn)的去塊濾波階段和自適應(yīng)取樣偏移階段分配到parallella開發(fā)板中的16個(gè)核中運(yùn)行。
本文首先簡(jiǎn)述HEVC標(biāo)準(zhǔn)及解碼流程,接著給出了HEVC多核并行解碼算法并做分析。
1 HEVC標(biāo)準(zhǔn)簡(jiǎn)介
高效率視頻編碼(High Efficiency Video Coding HEVC)是于2010年誕生的,它是由ISO/IEC的MPEG(Moving Picture Experts Group)和ITU-T的VCEG(Video Coding Experts Group)成立的聯(lián)合視頻編碼組(JCT-VC)共同開發(fā)的新的視頻編碼標(biāo)準(zhǔn)。2013年完成了HEVC的Final Draft版,成為正式國際標(biāo)準(zhǔn)。H.264/MPEG-4 AVC是HEVC改進(jìn)的基礎(chǔ),最明顯的改進(jìn)就是提高了視頻編碼效率,在相同的圖像質(zhì)量前提下,壓縮率比H.264/MPEG-4 AVC提高了近一倍。②此外,HEVC還支持8-10位的色彩深度。HEVC的設(shè)計(jì)特別關(guān)注兩方面的問題:提高視頻編碼的壓縮率和提高并行處理結(jié)構(gòu)的應(yīng)用。此后人們對(duì)于HEVC的研究和改進(jìn)也主要圍繞這兩方面進(jìn)行。
HEVC編碼復(fù)雜度大,這對(duì)編碼SOC芯片的性能提出了很大的挑戰(zhàn)。但是隨著多核處理器性能的提高以及芯片處理能力的增強(qiáng),算法復(fù)雜性對(duì)應(yīng)用的影響將會(huì)越來越小。在不久的將來,HEVC必將會(huì)取代H.264/AVC,HEVC的發(fā)展與完善必將極大地推動(dòng)高清、超高清視頻的應(yīng)用步伐。
2 HEVC解碼流程
HEVC解碼分為四個(gè)階段,分別是熵解碼階段,重建階段,去塊濾波(Deblocking filter)階段與取樣自適應(yīng)偏移(Sample addaptive offset)濾波階段。解碼流程如圖1所示。
圖1 HEVC解碼流程圖
2.1 熵解碼
解碼的第一個(gè)步驟就是對(duì)采用不同熵解碼算法的語法元素進(jìn)行解碼。這一步由三個(gè)部分來完成,NAL(網(wǎng)絡(luò)接入層 Network Access Layer)單元解析,條帶頭解碼和條帶數(shù)據(jù)解碼。HEVC是以NAL方式組織數(shù)據(jù)的,編碼后的數(shù)據(jù)流分割為NAL單元在有損網(wǎng)絡(luò)環(huán)境中傳輸。③一個(gè)NAL單元由NAL單元頭和NAL單元有效載荷組成,不同的NAL單元可分為攜帶編碼過的圖像數(shù)據(jù)的VCL NAL單元和攜帶多幀共享的元數(shù)據(jù)的非VCL NAL單元。在HEVC視頻編解碼的過程中,一幀圖像會(huì)被分割成條帶(slice),條帶片斷(slice segment)或塊(tile),條帶是由條帶片斷組成的元素。我們可以將一幀圖像分割成許多的slice,也可以一個(gè)slice中只有一幀圖像。Slice中存放了之前編碼過的圖像信息,其中,Slice頭信息包含了當(dāng)前圖像的整體信息,比如當(dāng)前圖像的預(yù)測(cè)方式,QP等整幀圖像編碼的信息;Slice數(shù)據(jù)信息包含了圖像的預(yù)測(cè)和殘差信息。這一階段最重要的特點(diǎn)是一個(gè)slice為一個(gè)獨(dú)立的解碼單元,由于這種包含信息的獨(dú)立性,避免了一個(gè)slice信息的丟失而連累其它slice信息,降低了誤碼率。endprint
HEVC采用了WPP(Wavefront parallel processing)和Tile兩種方法使HEVC更加適應(yīng)并行性,即每一個(gè)slice都是可獨(dú)立進(jìn)行解碼的,同時(shí),slice內(nèi)部又分為許多編碼樹單元(Coding Tree Unit ?CTU),WPP使得每一行的CTU又能夠獨(dú)立的解碼。Parallella-16開發(fā)板有16個(gè)協(xié)處理器可供使用,把一幀圖像劃分16個(gè)slice,每個(gè)slice又由一行CTU組成,這樣將16個(gè)slice,即16行CTU分配到16個(gè)協(xié)處理器中,充分利用HEVC的并行性的優(yōu)點(diǎn),提高解碼效率。
2.2 重建
包括反量化(Inverse Quantization IQ)和反變換(Inverse Transform IT)。HEVC的編碼采用離散余弦變換(Discrete Cosine Transform DCT),雖然DCT在數(shù)據(jù)壓縮方面并不是最佳的,但是它的優(yōu)點(diǎn)在于將空間頻率的幅值集中在低頻部分,便于量化。量化的目的是降低DCT系數(shù)的精度,從而提高壓縮率。由于量化會(huì)導(dǎo)致誤差的出現(xiàn),所以HEVC采用幀內(nèi)預(yù)測(cè)的方法消除視頻圖像內(nèi)部的冗余,采用幀間預(yù)測(cè)的方法消除視頻各幀圖像之間的冗余。運(yùn)動(dòng)補(bǔ)償也具有同樣的作用。相鄰的幀有很多相似的地方,即冗余,運(yùn)動(dòng)補(bǔ)償可以根據(jù)對(duì)先前真的預(yù)測(cè)結(jié)果,來補(bǔ)償當(dāng)前幀,消除冗余,提高壓縮比。
2.3 去塊濾波
圖2 去塊濾波中水平邊界樣點(diǎn)值
去塊濾波(Deblocking Filter DF)與下面將要介紹的取樣自適應(yīng)偏移(Sample Adaptive Offset SAO)濾波都是在重建圖像的基礎(chǔ)上進(jìn)行的。去塊濾波分為垂直邊界濾波和水平邊界濾波,首先利用水平濾波器對(duì)垂直邊界濾波,然后再利用垂直濾波器對(duì)水平邊界濾波。同時(shí),過強(qiáng)的濾波會(huì)導(dǎo)致圖像細(xì)節(jié)區(qū)過度平滑,而濾波強(qiáng)度不夠又會(huì)使得方塊效應(yīng)降低圖像的質(zhì)量,所以HEVC規(guī)定了三種邊界強(qiáng)度:0、1、2。④如果強(qiáng)度大于0,就需要對(duì)塊邊界進(jìn)行判定,以確定當(dāng)前邊界是否需要濾波。每個(gè)邊界選取周圍8€?個(gè)點(diǎn)參與濾波運(yùn)算,由四行像素值確定濾波運(yùn)算是否進(jìn)行,如圖2所示。
上方的四行樣點(diǎn)值需要滿足:dp0+dp1+dp2+dp3<,才會(huì)執(zhí)行濾波操作。計(jì)算公式如式(1)所示。
dp0=|p2,0-2p1,0+p0,0|, dp3=|p2,3-2p1,3+p0,3| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)
dp4=|p2,4-2p1,4+p0,4|, dp7=|p2,7-2p1,7+p0,7|
此公式的意義在于通過與直線比較,反映出塊邊界信號(hào)強(qiáng)度的變化。將此公式用于垂直方向的濾波,只需將行列的下標(biāo)調(diào)換位置。
HEVC在對(duì)去塊濾波的設(shè)計(jì)上更能反映出HEVC對(duì)并行性的應(yīng)用。垂直邊界濾波與水平邊界濾波之間具有相關(guān)性,水平邊界濾波的結(jié)果作為垂直邊界濾波的輸入。但是,每一個(gè)水平邊界濾波進(jìn)程和每一個(gè)垂直邊界濾波進(jìn)程都是獨(dú)立的,可以并行處理。由此,運(yùn)用到多核并行解碼算法中,可以將水平邊界濾波進(jìn)程分配到parallella-16開發(fā)板的16個(gè)協(xié)處理器中,水平邊界濾波完成后,對(duì)垂直邊界濾波做同樣的操作,這樣將原本由單核完成的任務(wù)交給多核完成,從而提高濾波效率。
2.4 取樣自適應(yīng)偏移濾波
取樣自適應(yīng)偏移(Sample Adaptive Offset SAO)濾波是HEVC增加的一個(gè)解碼部分,是與H.264/AVC最重要的區(qū)別之處。SAO濾波應(yīng)用在去塊濾波的垂直濾波之后,它與去塊濾波具有相關(guān)性,不是獨(dú)立存在的,它的作用是消除取樣差值造成的振鈴現(xiàn)象和方塊效應(yīng)。⑤SAO工作流程如圖3所示。
圖3 取樣自適應(yīng)偏移濾波
SAO通過分析去塊濾波后的數(shù)據(jù)與原始圖像之間的關(guān)系來對(duì)去塊濾波后的數(shù)據(jù)進(jìn)行補(bǔ)償操作,使其能夠盡量接近原始圖像的效果。SAO濾波會(huì)根據(jù)樣本的類和適應(yīng)的區(qū)域使用不同的偏移量,具體分為兩種偏移方式:帶狀偏移(Band Offset BO)和邊緣偏移(Edge Offset EO)。帶狀偏移在重建像素上增加偏移量時(shí)不需要參考相鄰像素的信息,沒有數(shù)據(jù)的相關(guān)性。而邊緣偏移需要參考8個(gè)相鄰像素的信息。當(dāng)parallella-16開發(fā)板中的16個(gè)協(xié)處理器完成對(duì)去塊濾波的垂直濾波后,接著進(jìn)行取樣自適應(yīng)偏移濾波。
3 多核并行算法工具
首先將HEVC的標(biāo)準(zhǔn)測(cè)試模型HM12.0移植到parallella中,然后使用openMP C compiler,調(diào)用parallella-16中的協(xié)處理器,將其分配到需要并行運(yùn)算的解碼部分,完成解碼。
3.1 parallella
Parallella是一個(gè)和信用卡差不多大小的主機(jī)板,由Adapteva公司設(shè)計(jì)開發(fā),內(nèi)有雙核的ARM A9處理器,parallella-16擁有16個(gè)Epiphany協(xié)處理器核。Parallella是為并行計(jì)算而設(shè)計(jì)的,具有開源,節(jié)能,性能高,體積小等特點(diǎn)。⑥Parallella開發(fā)板實(shí)物圖如圖4所示,parallella并行體系結(jié)構(gòu)如圖5所示。
3.2 OpenMP C Compiler
OpenMP C Compiler(OMPi)是共享內(nèi)存的并行計(jì)算平臺(tái)上一個(gè)基于源代碼變換技術(shù)的OpenMP編譯器,它使用C語言源代碼和OpenMP的#progmas生成調(diào)用多線程的C代碼。OpenMP是一個(gè)跨平臺(tái)的多線程實(shí)現(xiàn),主線程生成一系列的子線程,并將任務(wù)劃分給子線程執(zhí)行。這些子線程的并行運(yùn)行,由運(yùn)行環(huán)境將線程分配給不同的處理器。endprint
圖4 parallella開發(fā)板實(shí)物圖
圖5 parallella并行體系結(jié)構(gòu)
圖6 HM12.0各解碼部分執(zhí)行時(shí)間
圖7 HM12.0各解碼部分所占比例
4 實(shí)驗(yàn)設(shè)計(jì)
將HM12.0移植到parallella開發(fā)板上,分析各解碼部分的代碼,得出HM12.0解碼各部分代碼的執(zhí)行時(shí)間,如圖6所示。更加直觀的餅狀圖如圖7所示。
由圖6,7可以看出,濾波部分(去塊濾波和SAO濾波)占用的解碼時(shí)間最多,所以這是一個(gè)解碼上的瓶頸,前面已經(jīng)介紹了去塊濾波部分的垂直濾波和水平濾波可以滿足并行性的要求,再加上利用HEVC的WPP方法增強(qiáng)并行性,綜合考慮,對(duì)熵解碼階段和濾波階段進(jìn)行多核分配。
5 結(jié)論
本文基于新一代視頻編碼標(biāo)準(zhǔn)HEVC較高的并行性,提出了一種可在多核中實(shí)現(xiàn)的并行解碼算法,通過部分解碼代碼在多核中的有效分配,提高了HEVC解碼的效率,使其更加適應(yīng)現(xiàn)代社會(huì)對(duì)于視頻解碼速度的要求。
注釋
① 朱秀昌,李欣,陳杰.新一代視頻編碼標(biāo)準(zhǔn)——HEVC[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2013(3).
② G.J. Sullivan, Woo-Jin Han, and T. Wiegand, “Overview of the High Efficiency Video Coding (HEVC) Standard,” IEEE Transactions on Circuits and Systems for Video Technology,vol.22,no.12,pp.1649-1668,Dec.2012.
③ Rickard Sj berg, Ying Chen,Akira Fujibayashi,Miska M. Hannuksela,Jonatan Samuelsson,Thiow Keng Tan,Ye-Kui Wang,and Stephan Wenger,“Overview of HEVC High-Level Syntax and Reference Picture Management”,IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12 pp.1858-1870,Dec.2012.
④ Andrey Norkin,Gisle Bj ntegaard,Arild Fuldseth,Matthias Narroschke,Masaru Ikeda,Kenneth Andersson,Minhua Zhou,and Geert Van der Auwera,”HEVC Deblocking Filter,”IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12, pp.1746-1754,Dec,2012.
⑤ Chih-Ming Fu,Ching-Yeh Chen, Yu-Wen Huang, Shawmin Lei. Mediatek Inc,“Sample Adaptive Offset for HEVC,”Multimedia Signal Processing (MMSP), ?2011 IEEE 13th International Workshop.
⑥ Parallella:Parallella-1.x Reference Manual [EB/OL].[2014-09-09].http://www.parallella.org/docs/parallella_manual.pdf.endprint