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

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

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

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

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

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

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

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

?
??? 文中設計的MPEG-2分析儀對被編碼序列的主要參數(shù)如量化因子、編碼比特數(shù)、虛擬緩沖區(qū)的填充情況等都進行了單獨統(tǒng)計,不同序列的重要特征也進行了分析,使用者能夠方便地獲得需要的信息。?
??? 本文從碼流解析速度、誤碼容錯和統(tǒng)計分析的角度著手實現(xiàn)了一個基于軟件的實時MPEG-2分析儀。從文中介紹的算法和模擬結(jié)果中可以看出,在算法和代碼兩方面進行改進的優(yōu)化算法在速度上有了較大提高,同時采用解碼端的錯誤恢復和掩蓋技術在很大程度上增進了MPEG-2壓縮流分析儀的解析能力。?
參考文獻?
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 精英科技.視頻壓縮與音頻編碼技術.北京:中國電力出版社,2001?
6 粱 柱,王兆華.H.263視頻編碼流的時域錯誤掩蓋.中國圖象圖形學報,2000;7(A)(11)?
7 吳樂南.PC平臺新技術MMX——開發(fā)編程指南. 南京:?東南大學出版社,1997?
8 張 云,林 鐘.PC平臺新技術MMX——應用編程指南.?南京:東南大學出版社,1997
