張昊,占海燕,鄧月堂,蔣明
1.中南大學信息科學與工程學院,長沙 410083
2.騰訊公司,廣東深圳 518057
3.智誠思創(chuàng)科技公司,北京 100000
基于比特流修改的H.264解碼器錯誤自動定位
張昊1,占海燕1,鄧月堂2,蔣明3
1.中南大學信息科學與工程學院,長沙 410083
2.騰訊公司,廣東深圳 518057
3.智誠思創(chuàng)科技公司,北京 100000
現代視頻編碼效率不斷提高,隨之而來的是編解碼標準越來越復雜[1]。此外,編解碼器中的一些模塊采用了SIMD指令,對于不同平臺其指令存在差異,因而很容易產生錯誤[2]。視頻編解碼器的錯誤可能導致視覺效果的不理想,因此這些錯誤需要盡可能早地發(fā)現并剔除。由些可見,測試技術對諸如H.264等標準的現代視頻編解碼器十分重要。之前,研究人員主要關心被測解碼器(Decoder Under Test,DUT)是否符合標準[3-6]。直到最近,張昊等人才提出了運用軟件測試技術檢測視頻壓縮模塊的方法[2]。但是,通過文獻[2]中的方法來測試視頻編解碼器仍然很難找到所有的錯誤。這是因為有的錯誤只有在視覺觀察或程序崩潰時才能被發(fā)現。這類錯誤往往是在一些特定環(huán)境下某些條件被觸發(fā)時才發(fā)生。當發(fā)生此類錯誤時,一種常用的方法是捕捉引起錯誤的碼流然后進行人工的調試。同時用DUT和標準解碼器對捕捉到的碼流進行解碼,通過比較兩者的解碼結果來確定出錯的模塊。當確定了出錯的模塊后,再交給編寫這個模塊的開發(fā)人員進行詳細的分析,直到查出引起錯誤的原因。需要指出的是:這個過程非常耗時,一個經驗豐富的編碼工程師可能要花半天的時間來查找錯誤的原因。軟件測試的方法很多[7],傳統(tǒng)軟件測試的錯誤定位方法往往需要軟件源代碼作為輸入[8]。然而,在多數情況下測試人員對解碼器的源代碼并不了解(比如使用的是購買的開發(fā)包)或測試人員并不是編寫這部分代碼的程序員。為了解決這個問題,本文提出了在H.264解碼器中無需源代碼分析的錯誤定位方法。本文方法不僅適用于上述的情形,而且對編碼工程師們的日常調試過程也有很大的幫助。
在具體介紹錯誤自動定位方法之前,作如下假設:視頻比特流和DUT使用baseline profile和CAVLC編碼;每次只考慮存在一個錯誤的情況。由DUT和標準解碼器同時對比特流進行解碼:若兩者解碼后的視頻不同,則說明DUT中存在錯誤。如果在第n幀出錯,則修改比特流使解碼器在解碼時跳過可能出錯的模塊,然后再分別用DUT和標準解碼器來解碼修改后的比特流(如圖1),再次比較解碼后的第n幀。若此時兩個解碼序的第n幀完全相同,則判定錯誤是位于前面跳過的那個模塊中;否則再檢查其他模塊。不斷重復上面的過程,直到找到出錯的模塊或者所有測試模塊都搜索完為止。為了重現引起視覺效果下降的解碼過程,本質上采用的是比特流編碼時的一系列參數。使用不同的技術使解碼過程跳過可能出錯的模塊,由于篇幅的限制,無法對所有的模塊進行詳細的分析說明,僅對baseline中的主要模塊:去方塊濾波模塊,計算殘差模塊和插值模塊的錯誤定位的方法并進行具體介紹。其他模塊(如幀內預測)和更深層次(如判定幀內預測中是哪種預測方法出錯)的診斷技術是以后的研究內容。
圖1 解碼器錯誤自動定位流程圖
下面是修改比特流使解碼器跳過上述三種模塊的方法:
(1)通過把圖像參數集(picture parameter set)里面的deblocking_filter_control_present_flag設為1來跳過第n幀的去方塊濾波。此外,把第n幀的slice header里面disable_ deblocking_filter_idc設為1。需要注意的是,如果在原始比特流中deblocking_filter_control_present_flag為0,則對前m幀(m<n),要將m幀的slice頭中的disable_deblocking_filter_ idc,slice_alpha_c0_offset_div2和slice_beta_offset_div2全部設為0,保證解碼后的前m幀沒有改變。
(2)計算殘差的過程包括系數分析、系數掃描和變換。輸入的比特流是修改過后跳過第n幀的去塊濾波過程的比特流,這樣確保去塊濾波過程不會影響殘差的計算。殘差的計算過程可以通過設置所有的殘差系數為0來跳過。有兩種情況需要考慮,一種是無幀內16×16模式,coded_block_pattern應該設為0(其編碼后的值可能非0),同時跳過原始比特流中的所有的殘差系數;另一種情況是使用了幀內16×16模式,此時塊的方塊編碼模式(CBP)不是作為一個獨立的元素來編碼的,而是與預測模式編在一起。因而,設置mb_mode(在I_slice和p_slice中是不一樣的)的值,使其中的CBP為0。此外,對于幀內16×16宏塊,其DC直流系數是單獨編碼的。適當地設置coeff_token的值使得全部的系數值為零就可以跳過其計算。
(3)插值過程是在幀間預測中對整數像素應用6抽頭濾波器得到1/2像素,再由線性內插得到1/4像素。與殘差計算過程類似,輸入的比特流跳過了去塊濾波過程。假設純粹的數據復制過程中不存在錯誤(一定要仔細地檢查確保其中沒有錯誤),因此,通過設置所有的運動矢量為0就可以使解碼過程跳過插值。
當比特流中含有IPCM模式的宏塊時,對比特流還需要做相應的調整。首先,由于對比特流進行了修改,要調整pcm_alignment_zero_bit使IPCM數據保持字節(jié)對齊。其次,編碼coeff_token時,如果相鄰宏塊是IPCM模式,其值也要做相應的調整。
針對文中提出的錯誤自動定位方法做了兩類實驗:一是驗證各種錯誤是否都能被正確的定位;二是測試實現錯誤定位所需要的時間。
實驗中的參考解碼器是JM16.0。多個錯誤版本是根據文獻[9]中給出的錯誤類型設計的。錯誤自動定位工具是基于JM16.0開發(fā),每個DUT中只包含一個錯誤。為了方便,所有的錯誤都設計在亮度去塊濾波器,計算殘差和亮度插值里面。這些模塊的運算復雜度都很高且常常采用SIMD指令編寫,發(fā)生錯誤的可能性很大。為了與平臺無關,所有的模塊和錯誤都采用C語言。實驗中用到的視頻序列是foreman CIF的前100幀,碼率是500 Kb/s,IPPP模式。在這樣的參數下,大多數錯誤發(fā)生在前面的幾幀中。實驗中有35個DUT,其中13個DUT分別在亮度去方塊濾波模塊中包含單一錯誤,9個DUT分別在計算殘差模塊中含有單一錯誤,13個分別在亮度插值模塊中有單一錯誤,如表1所示。
表1 模塊中存在的錯誤和實現自動定位的錯誤數
對于亮度去方塊濾波模塊錯誤定位,其比特流修改詳細過程如下:
(1)分析比特流,得到圖像參數集在比特流中的位置,確定其中編碼deblocking_filter_control_present_flag的比特位。
(2)若deblocking_filter_control_present_flag的比特位為0,則把它改為1,跳到(3);若deblocking_filter_control_present_flag為1,則直接跳到(4)。注:deblocking_filter_control_present_flag為1表示在此比特流中已包含deblock filter控制位(disable_deblocking_filter_idc)。
(3)把第n幀之外的所有幀的slice header中disable_ deblocking_filter_idc,slice_alpha_c0_offset_div2和slice_beta_ offset_div2全部設為0,使n幀之外的幀解碼結果不變;跳到(4)。
(4)在第n幀的slice header中確定編碼disable_ deblocking_filter_idc的比特位,并設為1,表示在此幀中不進行亮度去塊濾波。
若DUT中包含錯誤,用DUT與標準解碼器對上述修改后的比特流進行解碼,兩者的輸出相同,則錯誤發(fā)生在上述解碼過程中被跳過的模塊中,即錯誤定位到去方塊濾波模塊。另外兩個模塊的過程與去方塊濾波模塊的過程類似。實驗結果表明,自動定位工具能夠正確定位實驗中所有錯誤。
在實際中,發(fā)現一些模塊必須在某些條件下才會被執(zhí)行,而該條件可能要在解碼很多幀以后才達到。這樣,定位工具必須要解碼相當多的幀后才能發(fā)現錯誤,大大影響定位速度。為了測量該工具的定位速度,設計了如下實驗。該實驗以亮度去方塊濾波為例進行了測試。方法是首先通過編碼構造特定的比特流,使其只在第n幀進行去方塊濾波,進而該工具只有解碼到第n幀才會發(fā)現錯誤。將調整n的大小,然后記錄相應的錯誤定位時間。對去方塊濾波,注意到可以利用這樣一個性質:當該幀的QP≤15時,濾波條件不成立[10]。因此,修改編碼器使之對0~n-1幀都采用QP=15,而第n幀QP設置為30,因而只會在第n幀發(fā)現由濾波產生的錯誤。在實驗中分別設n為1、50、100、150、200、250時,可得到錯誤定位所需時間,如圖2。由圖可見,錯誤定位的時間與出錯幀的位置有關,越是靠后的幀出錯,定位錯誤需要的時間就越長。當n=250時,錯誤定位時間達到了近18 s。雖然這在工程實踐中是可以接受的,但是認為還有一定的優(yōu)化空間。
圖2 錯誤定位時間與出錯誤幀數關系圖
實驗結果表明,提出的錯誤定位工具的性能良好。該工具對包含錯誤的三個模塊都能有效定位,而且該方法不需要閱讀和分析解碼器源代碼,有望降低工程師的調試壓力。該工具雖然是針對H.264 baseline解碼器的,但本文提出的方法具有通用性,有望推廣至遵守其他標準的解碼器。另外,由于出錯的幀越靠后,定位時間越長。而且如果在被分析視頻的分辨率很高的情況下,定位將耗時更長。本文開發(fā)出的H.264解碼器錯誤定位工具只是初級版本,目前還只考慮了單個錯誤的情況,以后將通過進一步的研究和優(yōu)化使之能夠更快地對多個錯誤實現定位。
[1]Ostermann J,Bormans J,List P,et al.Video coding with H.264/ AVC:tools,performance and complexity[J].IEEE Circuits and Systems Magazine,2004,4:7-28.
[2]Zhang H,Deng Y T,Liu Z Y,et al.Unit testing optimized functions in H.264[C]//Proc Int Conf on Multimedia Technology,Hangzhou,China July,2011:3297-3300.
[3]Meehan P,Hurst N,Isnardi M,et al.Mpeg compliance bitstream design[C]//ProcIntConfonConsumerElectronics,Rosemont,June,1995:174-175.
[4]Kim C M,Lee B U,Park R H.Design of MPEG-2 video test bitstreams[J].IEEETransactionsonConsumerElectronics,1999,45:1213-1220.
[5]Cho J,Choi S,Chae S I.Constrained-random bitstream generationforH.264/AVCdecoderconformancetest[J].IEEE Transactions on Consumer Electronics,2010,56:848-855.
[6]Kim W S,Park I S,Park S H,et al.Conformance test of simple profileMPEG-4texturedecoding[J].JournalofElectronic Imaging,2002,11:375-380.
[7]許靜,陳宏剛,王慶人.軟件測試方法簡述與展望[J].計算機工程與應用,2003,39(13):65-67.
[8]Gonzalez-sanchez A,Piel E,Gross H G,et al.Prioritizing tests for software fault localization[C]//Proc Int Conf on Quality Software,July 2010:42-51.
[9]Wong W E,Horgan J R,London S,et al.Effect of test set minimization on fault detection effectiveness[C]//Proc Int Conf on Software engineering,New York:April 1995:41-50.
[10]ISO/IEC 14496-10 and ITU-T Rec H.264.advanced video coding[S].2003.
[11]JVT H.264/AVC reference software JM 16.0[CP].
ZHANG Hao1,ZHAN Haiyan1,DENG Yuetang2,JIANG Ming3
1.School of Information Science and Engineering,Central South University,Changsha 410083,China
2.Tencent,Inc.,Shenzhen,Guangdong 518057,China
3.Technovo Sci.&Tech.Company,Beijing 100000,China
A simple and useful method for fault localization for H.264 Decoder Under Test(DUT)is presented.The Bitstream that led to an error is modified to locate the faulty module without analyzing the source code.A useful tool is developed that can be used to speed up the debugging process.High efficiency of the proposed method is demonstrated in the experiments.
software testing;fault localization;Bitstream;H.264 decoder
針對H.264解碼器的測試問題,提出了一種簡單實用的自動錯誤定位方法。對導致錯誤的比特流進行修改,在不進行源代碼分析的情況下就達到錯誤定位的目的;開發(fā)了一個錯誤定位工具,利用這個工具可以加快調試過程。實驗結果表明,此方法有良好的效率。
軟件測試;錯誤定位;比特流;H.264解碼器
A
TP391
10.3778/j.issn.1002-8331.1112-0521
ZHANG Hao,ZHAN Haiyan,DENG Yuetang,et al.Automatic fault localization with bitstream modification for H.264 decoders.Computer Engineering and Applications,2013,49(19):177-179.
張昊(1978—),男,博士,副教授,主要研究領域為多媒體信號處理與通信,軟件測試技術及其應用,科技評價理論;占海燕(1989—),女,碩士研究生,主要研究領域為視頻壓縮中的軟件測試技術;鄧月堂,男,博士,主要研究領域為軟件測試技術;蔣明,男,博士,主要研究領域為多媒體通信技術。E-mail:hao@csu.edu.cn
2012-01-04
2012-05-24
1002-8331(2013)19-0177-03