??? 摘? 要: 在分析壓縮視頻流結(jié)構(gòu)的基礎(chǔ)上,設(shè)計(jì)高性能軟件解碼器內(nèi)核和可視化界面,實(shí)現(xiàn)一個(gè)實(shí)時(shí)MPEG-2視頻碼流分析儀" title="碼流分析儀">碼流分析儀。它是視頻編碼研究、質(zhì)量分析的理想輔助工具,此方法也適用于其它基于運(yùn)動(dòng)補(bǔ)償/DCT框架的壓縮碼流分析儀的設(shè)計(jì)。?
??? 關(guān)鍵詞: MPEG-2? 內(nèi)核? 壓縮視頻流
?
??? MPEG-2視頻編碼標(biāo)準(zhǔn)[1]只定義了壓縮碼流語(yǔ)法結(jié)構(gòu)和解碼過(guò)程,編碼過(guò)程和算法無(wú)定義,不同的研發(fā)者可以采用完全不同的結(jié)構(gòu)和算法。評(píng)價(jià)編碼性能的參數(shù)通常有:壓縮比、圖像質(zhì)量、編碼速度、軟硬件復(fù)雜度等。MPEG的各種參數(shù)以編碼的形式存在于壓縮比特流中,這使得在研發(fā)中無(wú)法直觀地對(duì)它們進(jìn)行統(tǒng)計(jì)分析。另外,采用基于運(yùn)動(dòng)補(bǔ)償、DCT變換的MPEG編碼技術(shù)使得編碼、解碼高度不對(duì)稱,編碼方法復(fù)雜多樣,解碼一致簡(jiǎn)單,所以編碼算法的研究和評(píng)估常常在壓縮碼流上進(jìn)行。傳統(tǒng)上采用硬件實(shí)現(xiàn)的碼流分析器,如:Tektronix 的AD954,速度快,但價(jià)格昂貴,開(kāi)發(fā)周期長(zhǎng),靈活性差,且不便于二次開(kāi)發(fā)。隨著處理器性能的提高,實(shí)時(shí)軟件解碼比較容易實(shí)現(xiàn),同時(shí)靈活的可擴(kuò)展性和低成本特性使得純軟件設(shè)計(jì)成為視頻碼流分析儀的一個(gè)發(fā)展方向。?
??? 基于軟件的碼流分析儀由高性能軟件解碼器內(nèi)核和可視化用戶分析界面和統(tǒng)計(jì)兩部分組成。?
??? ·高性能軟件解碼器內(nèi)核:通常壓縮流比較長(zhǎng),高效分析要求很高的解碼速度;要求解碼內(nèi)核具有高度的誤碼" title="誤碼">誤碼容錯(cuò)功能,能盡可能多地接收不同程度的非法碼流;要求較強(qiáng)的從序列層(sequence)到塊層(block)的隨機(jī)訪問(wèn)功能(定位功能)。?
??? ·可視化用戶分析界面和統(tǒng)計(jì)部分:能夠讓用戶盡可能地定量定性分析各種碼流參數(shù),如定量表示信噪比PSNR、 DCT系數(shù)、量化步長(zhǎng)、比特開(kāi)銷、運(yùn)動(dòng)矢量等; 直觀表達(dá)序列組成、圖組結(jié)構(gòu)、編碼類型、圖像質(zhì)量、量化分布、比特分布、運(yùn)動(dòng)信息等。?
1 MPEG-2壓縮流參數(shù)組成及解析過(guò)程?
??? 根據(jù)ISO/IEC13818-2(MPEG-2)國(guó)際標(biāo)準(zhǔn)中碼流的語(yǔ)法定義,壓縮流中視頻數(shù)據(jù)采用分層的比特流結(jié)構(gòu)。第一層稱為基本層,可以獨(dú)立被解碼;其他層稱之為增強(qiáng)層,其解碼依賴于基本層,用于不同的信道環(huán)境中,對(duì)基本層視頻質(zhì)量有特定的提高;編碼比特流中視頻數(shù)據(jù)結(jié)構(gòu)包括視頻序列層、圖像組塊層、圖像層、碼片層(可選層用于誤碼容錯(cuò)快速重新同步)、宏塊" title="宏塊">宏塊層和塊層。MPEG-2語(yǔ)法流結(jié)構(gòu)如圖1。
?

?
??? ·視頻序列處于最高層。視頻序列從視頻序列頭開(kāi)始,后面緊接著一系列數(shù)據(jù)單元。序列頭提供同步字、圖像分辨率、圖像寬高比、幀率、碼率、解碼緩存需求、量化矩陣、級(jí)類、掃描方式(逐行/隔行、幀圖/場(chǎng)圖)、色度模式(4:2:0、4:2:2、4:4:4)等信息。?
??? ·圖組層由一系列具有時(shí)間預(yù)測(cè)關(guān)系的圖像組成,它包含同步字、時(shí)間碼、圖組類型(封閉或是開(kāi)放)等信息。?
??? ·圖像層包含同步字、時(shí)間參考、圖像編碼類型I圖、P圖、B圖(I圖使用自身圖進(jìn)行編碼,P圖使用先前的I圖或P圖信息預(yù)測(cè)編碼,B圖由過(guò)去或?qū)?lái)的I圖或P圖雙向預(yù)測(cè)編碼得到)、解碼延時(shí)、運(yùn)動(dòng)信息碼字選取、圖像結(jié)構(gòu)、場(chǎng)時(shí)序、時(shí)間預(yù)測(cè)類型、DCT變換方式、量化類型(線性/非線性)、變長(zhǎng)編碼方式、Z掃描方式、色度模式、隔行或是逐行圖像、量化矩陣、顯示信息、產(chǎn)權(quán)信息等。?
??? ·碼片層包含同步字、碼片垂直位置、量化因子、碼片屬性標(biāo)志等信息。宏塊層包含宏塊地址、量化因子、編碼模式、運(yùn)動(dòng)矢量、DCT類型等,塊層包含量化DCT系數(shù)信息。?
??? MPEG碼流的編碼參數(shù)合成于這種分層的比特流中。本文利用碼流的這種分層結(jié)構(gòu),在解碼過(guò)程中提取感興趣的重要參數(shù),實(shí)現(xiàn)MPEG-2碼流分析儀的眾多功能。?
??? MPEG-2碼流的解碼過(guò)程有其固定的格式,可用圖2表示。從圖2中可以看出解碼過(guò)程由五個(gè)主要功能模塊組成:變長(zhǎng)碼解碼、反掃描、反量化、反DCT和運(yùn)動(dòng)補(bǔ)償。這些模塊的執(zhí)行速度直接影響著整個(gè)碼流的解析效率,其處理結(jié)果也決定了解碼圖像恢復(fù)的效果。下面將談到對(duì)其中一些主要功能模塊的優(yōu)化處理,以提高整個(gè)解析過(guò)程的性能。?
?

?
2 MPEG-2壓縮流分析儀的實(shí)現(xiàn)?
??? MPEG-2碼流實(shí)時(shí)分析需要一個(gè)高性能MPEG-2解碼核,它要求解碼器能進(jìn)行實(shí)時(shí)解碼,同時(shí)具有強(qiáng)大的糾錯(cuò)功能。從以下幾方面著手進(jìn)行MPEG-2分析儀的設(shè)計(jì)優(yōu)化。?
2.1實(shí)時(shí)解碼優(yōu)化?
??? 表1是優(yōu)化前解碼器上測(cè)試得到的解碼過(guò)程中各主要功能模塊所占用的時(shí)間百分比。對(duì)表格中各解碼功能模塊的耗時(shí)進(jìn)行分析,發(fā)現(xiàn)用于運(yùn)動(dòng)補(bǔ)償、反DCT變換、反量化、變長(zhǎng)碼的讀取占用時(shí)間較多,如運(yùn)動(dòng)補(bǔ)償約占整個(gè)解碼過(guò)程的20%以上。究其原因,這些程序模塊有著共同的特點(diǎn):代碼不長(zhǎng),但是高度循環(huán),如運(yùn)動(dòng)矢量估計(jì)、反DCT變換;或者頻繁調(diào)用同一函數(shù),占用較多的CPU資源,如變長(zhǎng)碼的讀取、反量化等。針對(duì)這些情況,本文從算法和代碼兩方面對(duì)解碼過(guò)程進(jìn)行了優(yōu)化。?
?

?
??? 在算法優(yōu)化上,本文調(diào)整函數(shù)結(jié)構(gòu)以避免不必要的重復(fù)計(jì)算,從而縮短解碼時(shí)間。同時(shí)在適當(dāng)增加內(nèi)存開(kāi)銷的前提下,用查表的方式取代了大量繁雜的乘除運(yùn)算。這種優(yōu)化主要用在變長(zhǎng)碼讀取、反量化等一些占用大量CPU資源的環(huán)節(jié)。圖3說(shuō)明了變長(zhǎng)碼讀取結(jié)構(gòu)的調(diào)整,其中show_bits(n)、Flush_Buffer(n)的功能分別為讀取n位比特?cái)?shù)的值和從緩沖區(qū)中移走n位比特?cái)?shù)。?
?

?
??? 在代碼優(yōu)化上,本文采用了MMX(多媒體增強(qiáng)指令集)[4][5]和SIMD(單指令多數(shù)據(jù)流)等技術(shù)來(lái)優(yōu)化源代碼。大家知道,在得到運(yùn)動(dòng)矢量后,要按照運(yùn)動(dòng)矢量進(jìn)行運(yùn)動(dòng)補(bǔ)償幀間預(yù)測(cè),得到預(yù)測(cè)誤差。一般來(lái)說(shuō),為了提高預(yù)測(cè)的準(zhǔn)確性,運(yùn)動(dòng)矢量采用半象素精度,這時(shí)需要對(duì)參考幀做象素內(nèi)插" title="內(nèi)插">內(nèi)插,以此來(lái)提高參考幀的空間分辨率。?
??? 假設(shè)Vx和Vy分別代表運(yùn)動(dòng)矢量在X方向和Y方向上的分量。對(duì)于普通匯編程序,當(dāng)其中的一個(gè)為半象素另一個(gè)為整象素時(shí),每次內(nèi)插處理一個(gè)象素需要的運(yùn)算為:2次讀+1次寫(xiě)+1次加法+1次移位。假設(shè)所有的數(shù)據(jù)都在一個(gè)緩存中,這樣讀寫(xiě)操作只需要一個(gè)時(shí)鐘周期" title="時(shí)鐘周期">時(shí)鐘周期,平均處理每個(gè)象素需要2.5個(gè)時(shí)鐘周期。當(dāng)Vx和Vy都為半象素時(shí),每次內(nèi)插處理一個(gè)象素需要的運(yùn)算為:2次讀+1次寫(xiě)+4次加法+1次移位。同樣假設(shè)所有的數(shù)據(jù)都在一個(gè)緩存中,指令完全配對(duì),平均處理每個(gè)象素需4個(gè)時(shí)鐘周期。?
??? 采用MMX技術(shù)后,在第一種情況下處理8個(gè)象素需要16條指令,當(dāng)指令完全配對(duì)時(shí)共需8個(gè)時(shí)鐘周期,平均每象素1個(gè)時(shí)鐘周期。第二種情況下處理8個(gè)象素要40個(gè)時(shí)鐘周期,平均每個(gè)象素2.5個(gè)時(shí)鐘周期。?
??? 從上面的例子可以看出,采用MMX等技術(shù)優(yōu)化源代碼在實(shí)時(shí)處理上效果明顯,仿真結(jié)果在后面給出。?
2.2 容錯(cuò)解碼實(shí)現(xiàn)?
??? 容錯(cuò)處理能力也是實(shí)現(xiàn)碼流評(píng)析性能的一項(xiàng)重要指標(biāo)。一般有兩種方法實(shí)現(xiàn)誤碼容錯(cuò):重新同步功能,MPEG碼流提供不同層次的同步字,為誤碼發(fā)生后重新同步提供起始點(diǎn); 另一個(gè)是誤碼恢復(fù)(隱藏),本文著重于這方面的研究。從基于塊的編碼可知,在一個(gè)受損的宏塊中,有三類信息需要估計(jì):紋理信息(包括原始圖像塊的象素值或塊預(yù)測(cè)DCT系數(shù)差值) ;宏塊的編碼模式;運(yùn)動(dòng)信息,即P模式或者B模式的宏塊運(yùn)動(dòng)矢量信息。?
??? 目前所有用來(lái)恢復(fù)紋理信息的技術(shù)都利用了視頻信號(hào)的高時(shí)空相關(guān)特性,原理上都是在時(shí)域、空域上估值和內(nèi)插;對(duì)于運(yùn)動(dòng)矢量而言,大部分恢復(fù)技術(shù)利用了平滑特性,進(jìn)行了時(shí)空內(nèi)插,而恢復(fù)編碼模式的技術(shù)更多地采用了啟發(fā)方式。所謂啟發(fā)方式,就是根據(jù)相鄰宏塊編碼模式?jīng)Q定當(dāng)前出錯(cuò)宏塊的模式。下面列舉三類信息的錯(cuò)誤掩蓋方法并進(jìn)行分析。?
??? 紋理信息的恢復(fù)采用空域內(nèi)插方法??沼虿逯狄紤]兩個(gè)方面的因素:不能破壞邊沿的平滑性,也不能導(dǎo)致圖像的模糊;另一方面就是運(yùn)算量。有的算法采用了比較復(fù)雜的內(nèi)插算法,雖然效果較好,但運(yùn)算量巨大,而不適合實(shí)時(shí)應(yīng)用。?
??? 一種折衷的空域插值方法,在運(yùn)算量和效果之間做了較好的平衡。如圖4所示。白色的塊表示出錯(cuò)的塊,灰色的塊為正確解碼的塊,將估計(jì)出錯(cuò)塊中的每一個(gè)象素的值。上面說(shuō)了邊沿信息是最重要的,假設(shè)出錯(cuò)點(diǎn)到上面邊沿位置距離為w2,到左邊的距離為w1,到下邊的距離為w3,而對(duì)應(yīng)邊沿象素的值為P2、P1、P3,設(shè)估計(jì)出錯(cuò)點(diǎn)的象素值為P,那么被恢復(fù)的P點(diǎn)的象素值為:?
??? P=((w1+w2)P3+(w2+w3)P1+(w1+w3)P2)/(2×(w1 +w2+w3))?????
?

??????????
??? 這種算法能夠使邊界平緩,在圖像運(yùn)動(dòng)不大時(shí)不會(huì)導(dǎo)致太大的模糊,運(yùn)算量也可以接受。如果丟失了宏塊的編碼模式,比較好的恢復(fù)方法就是:統(tǒng)計(jì)與當(dāng)前宏塊在空域或時(shí)域相鄰的宏塊的編碼模式,從而得到當(dāng)前宏塊最有可能的編碼模式。
??? 表2橫向表示上宏塊編碼模式,縱向表示下宏塊的編碼模式。中間表示估計(jì)的宏塊編碼模式。需要說(shuō)明的是,文中采用的方法只是利用了空域信息,這是因?yàn)閺慕y(tǒng)計(jì)來(lái)看,宏塊編碼模式在時(shí)間上的相關(guān)性不強(qiáng),僅通過(guò)空間上的相關(guān)性就可較理想地估計(jì)出宏塊的編碼類型。從表2可以看出,只要上下宏塊有一個(gè)宏塊的編碼模式不是內(nèi)部編碼,那么預(yù)測(cè)塊就不要用內(nèi)部編碼模式,因?yàn)閹瑑?nèi)模式的信息量最多,幀內(nèi)隱藏帶來(lái)的誤差也是最大的。?
?

?
??? 如果受損的宏塊采用幀間編碼模式,則必須進(jìn)一步預(yù)測(cè)其運(yùn)動(dòng)矢量信息。運(yùn)動(dòng)矢量信息也必須用當(dāng)前位置周圍或者前一幀當(dāng)前位置的運(yùn)動(dòng)矢量來(lái)估計(jì),估計(jì)的方法有很多種,而且不同的序列可以有不同的方法。本文采用基于上、下以及前一幀當(dāng)前位置的宏塊運(yùn)動(dòng)信息的方法。?
??? 設(shè)待估計(jì)的幀間塊的運(yùn)動(dòng)矢量為MV,上、下以及前一幀當(dāng)前位置塊的運(yùn)動(dòng)矢量為MVabo、MVbot、MVpre,步驟如下:?
??? Step1:判斷是否存在MVabo和MVbot,如果僅僅存在一個(gè),跳到step2;如果兩個(gè)都存在,跳到step3(不會(huì)一個(gè)都不存在,否則就不會(huì)使用幀間模式了)。?
??? Step2:令MVtmp=MVabo或者M(jìn)Vtmp=MVbot,跳轉(zhuǎn)到步驟4。?
??? Step3:對(duì)兩個(gè)運(yùn)動(dòng)矢量進(jìn)行平均,令MVtmp=(MVabo+MVbot),然后跳到step4。?
??? Step4:得到了由當(dāng)前幀預(yù)測(cè)的運(yùn)動(dòng)矢量MVtmp,如果存在MVprv,判斷MVtmp和MVprv的方向,如果二者在橫向和縱向都是指向同一個(gè)方向,那么再對(duì)二者取加權(quán)平均,加權(quán)系數(shù)為1/4和3/4,結(jié)果作為本塊最后的估計(jì)運(yùn)動(dòng)矢量。如果方向不一樣,或者根本不存在MVpre,則MVtmp就作為最終得到的運(yùn)動(dòng)矢量。?
??? 概括來(lái)說(shuō),可采用錯(cuò)誤隱藏的策略:先根據(jù)上下塊信息估計(jì)宏塊的編碼模式,如果預(yù)測(cè)為跳過(guò)幀,那么就直接用前一幀的信息替代當(dāng)前塊的信息;如果為幀內(nèi)編碼,說(shuō)明幀間相關(guān)性不大,則用空域內(nèi)插方法估計(jì)象素值;如果是幀間模式,那么再估計(jì)運(yùn)動(dòng)信息進(jìn)行時(shí)域內(nèi)插。模擬結(jié)果會(huì)在下一章給出。?
2.3 MPEG-2碼流分析儀的實(shí)現(xiàn)?
??? 視頻壓縮過(guò)程是質(zhì)量、碼率、復(fù)雜度、速度的一個(gè)平衡折衷過(guò)程,其結(jié)果都體現(xiàn)在編碼比特流中,因此要研究編碼算法和結(jié)構(gòu)的有效性,必然要對(duì)壓縮目標(biāo)碼流進(jìn)行統(tǒng)計(jì)分析。MPEG-2碼流分析儀的設(shè)計(jì)功能是為了比較不同的編碼算法,從中選擇合適的算法,所以分析儀設(shè)計(jì)的前提是解碼過(guò)程沒(méi)有錯(cuò)誤,是編碼過(guò)程的真實(shí)反映。?
??? 在保證了解碼器具有較高的解碼性能的基礎(chǔ)上,本文設(shè)計(jì)了MPEG-2壓縮碼流分析儀。作為研究分析和測(cè)試工具,碼流分析儀設(shè)計(jì)的目標(biāo)是使用正確、操作簡(jiǎn)單、功能齊全。?
??? MPEG-2碼流分析儀根據(jù)MPEG-2語(yǔ)法的分層結(jié)構(gòu)進(jìn)行參數(shù)提取,能對(duì)編碼過(guò)程中宏塊的編碼模式、運(yùn)動(dòng)矢量的方向和大小、量化參數(shù)、每個(gè)宏塊的編碼比特?cái)?shù)等情況作出統(tǒng)計(jì),也能分析虛擬緩沖區(qū)的填充情況,這些都是判斷編碼算法優(yōu)劣的重要參數(shù)。?
3 仿真結(jié)果和性能分析?
??? 上面提到,本文在代碼和算法兩個(gè)方面對(duì)解碼過(guò)程作了優(yōu)化。表3反映了經(jīng)解碼優(yōu)化后在實(shí)時(shí)播放上的效果。Stefan序列為300幀,圖像大小為352×288;Zorro序列有897幀,圖像大小同上。從表3中可以看出,優(yōu)化后解碼速度都有很大的提高。?
?

?
??? 圖5是不同錯(cuò)誤掩蓋技術(shù)下解碼性能的比較??梢钥闯?沒(méi)有采用錯(cuò)誤掩蓋技術(shù)解碼的算法在出現(xiàn)解碼錯(cuò)誤后視頻質(zhì)量下降很大,并且質(zhì)量的下降不容易恢復(fù)。而采用本文的技術(shù)后,圖像質(zhì)量沒(méi)有太大的損失,基本滿足要求。?
?

?
??? 文中設(shè)計(jì)的MPEG-2分析儀對(duì)被編碼序列的主要參數(shù)如量化因子、編碼比特?cái)?shù)、虛擬緩沖區(qū)的填充情況等都進(jìn)行了單獨(dú)統(tǒng)計(jì),不同序列的重要特征也進(jìn)行了分析,使用者能夠方便地獲得需要的信息。?
??? 本文從碼流解析速度、誤碼容錯(cuò)和統(tǒng)計(jì)分析的角度著手實(shí)現(xiàn)了一個(gè)基于軟件的實(shí)時(shí)MPEG-2分析儀。從文中介紹的算法和模擬結(jié)果中可以看出,在算法和代碼兩方面進(jìn)行改進(jìn)的優(yōu)化算法在速度上有了較大提高,同時(shí)采用解碼端的錯(cuò)誤恢復(fù)和掩蓋技術(shù)在很大程度上增進(jìn)了MPEG-2壓縮流分析儀的解析能力。?
參考文獻(xiàn)?
1 IA-32 Intel Architecture Software Developer's Manual——System Programming Guide. Copyright?? 1997-2001 Intel?Corporation?
2 Intel Pentium4 Processor Optimization——Reference?Manual,Copyright?? 1999-2001 Intel Corporation?
3 ISO/IEC 13818-2. INFORMATION TECHNOLOGY -?GENERIC CODING OF MOVING PICTURES AND ASSO-CIATED AUDIO PART 2:VIDEO.1995?
4 Y. Wang and Q Zhu. Error Control and Concealment for?Video Communication Review. Proc. Of IEEE,1998;87(May):974~997?
5 精英科技.視頻壓縮與音頻編碼技術(shù).北京:中國(guó)電力出版社,2001?
6 粱 柱,王兆華.H.263視頻編碼流的時(shí)域錯(cuò)誤掩蓋.中國(guó)圖象圖形學(xué)報(bào),2000;7(A)(11)?
7 吳樂(lè)南.PC平臺(tái)新技術(shù)MMX——開(kāi)發(fā)編程指南. 南京:?東南大學(xué)出版社,1997?
8 張 云,林 鐘.PC平臺(tái)新技術(shù)MMX——應(yīng)用編程指南.?南京:東南大學(xué)出版社,1997
