AVS-M與H.264(Baseline)視頻解碼器結構的分析
H.264是JVT組織起草的一個覆蓋多種應用和面向多種傳輸環(huán)境的國際標準,它規(guī)定了三種檔次,基本檔次(Baseline profile)、主要檔次(Main profile)和擴展檔次(Extended profile),其中基本檔次利用I片和P片支持幀內和幀間編碼,支持利用基于上下文的自適應的變長編碼進行的熵編碼(CAVLC),主要用于會議電視、可視電話和無線通信等實時視頻通信。
AVS(Audio video coding)標準是由我國自主制定,擁有自主知識產權的音視頻編解碼技術標準。AVS-M(Mobile video)是AVS系列標準中的第七部分――移動視頻,應用于數字存儲媒體、寬帶視頻業(yè)務、遠程監(jiān)控和可視電話等。
AVS-M和H.264(Baseline)視頻解碼器在結構上十分相似,但又各有其核心思想,本文基于JM10.2和WM3.3源代碼對兩解碼器的關鍵技術作了詳細分析。程序中并未單獨有H.264(Baseline)的代碼,是筆者從JM10.2中抽取出來分析的,下文中H.264均表示從基本檔次上考慮。
AVS-M和H.264視頻解碼器都只需考慮I幀和P幀(為了兩標準視頻解碼器更好地比較,本文對H.264只考慮幀圖像,不考慮場圖像)的解碼,總體思想是從比特流中解出頭信息,產生預測塊,熵解碼得到的量化系數經反量化、反變換得到殘差塊,預測塊和殘差塊相加后,經過濾波器即可得到重建的圖像,其結構框圖如圖1所示。
圖1 解碼器總體框架
在實際應用當中,這兩種標準設計出來的解碼器應用領域有所不同,現就以下幾個方面分析兩種標準的差異。
1 比特流信息
①NALU(Network Abstract Layer Unit):兩標準中的比特流都是以NAL為單位,每個NAL單元包含一個RBSP,NALU的頭信息定義了RBSP所屬類型。類型一般包括序列參數集(SPS)、圖像參數集(PPS)、增強信息(SEI)、條帶(Slice)等,其中,SPS和PPS屬于參數集,兩標準采用參數集機制是為了將一些重要的序列、圖像參數(解碼圖像尺寸、片組數、參考幀數、量化和濾波參數標記等)與其他參數分離,通過解碼器先解碼出來。此外,為了增強圖像的清晰度,AVS-M增加了圖像頭(Picture head)信息。讀取NALU過程中,每個NALU前有一個起始碼0x000001,為防止內部0x000001序列競爭,H.264編碼器在最后一字節(jié)前插入一個新的字節(jié)――0x03,所以解碼器檢測到該序列時,需將0x03刪掉,而AVS-M只需識別出起始碼0x000001。
②讀取宏塊類型(mb type)和宏塊編碼模板(cbp):編解碼圖像以宏塊劃分,一個宏塊由一個16*16亮度塊和相應的一個8*8cb和一個8*8cr色度塊組成。
(a) 兩標準的幀內、幀間預測時宏塊的劃分是有區(qū)別的。H.264中,I_slice亮度塊有Intra_4*4和Intra_16*16兩種模式,色度塊只有8*8模式;P_slice宏塊分為16*16、16*8、8*16、8*8、8*4、4*8、4*4共7種模式。而AVS-M中,I_slice亮度塊有I_4*4和I_Direct兩模式,P_slice時宏塊的劃分和H.264中的劃分一致。
(b) 兩標準的宏塊cbp值計算也不相同。H.264中,Intra_16*16宏塊的亮度(色度)cbp直接通過讀mb type得到;非Intra_16*16宏塊的亮度cbp=coded_block_pattern%16,色度cbp=coded_block_pattern/16 。其中,亮度cbp最低4位有效,每位決定對應宏塊的殘差系數是否為0;色度cbp為0時,對應殘差系數為0,cbp為1時,DC殘差系數不為0,AC系數為0,cbp為2時,DC、AC殘差系數都不為0。AVS-M中,當宏塊類型不是P_skip時,直接從碼流中得到cbp的索引值,并以此索引值查表得到codenum值,再以codenum查表分別得到幀內/幀間cbp。此cbp為6位,每位代表宏塊按8*8劃分時是否包含非零系數,當變換系數不為0時,需進一步讀cbp_4*4中每位值來判斷一個8*8塊中4個4*4塊的系數是否為0。
2 幀內預測
H.264中Intra_16*16亮度塊和8*8色度塊都有4種預測模式(垂直、水平、直流、平面),AVS-M中8*8色度塊只有3種(垂直、水平、直流),H.264中Intra_4*4和AVS-M中的4*4亮度塊都有9種預測模式,但排列順序不一樣。H.264中的Intra_4*4和AVS-M中的4*4亮度塊的模式可以通過鄰塊的幀內模式來預測,預測方法不同。H.264中,當前亮度塊的最可能模式由左塊(A)、上塊(B)中較小的決定,如果相鄰塊不存在,則A、B模塊的模式置為DC。而預測模式的選定要看碼流中標志信息prev_intra4*4_pred_mode,該標志為1時,則用最可能模式,該標志不為0時,還需看參數rem_intra4*4_pred_mode,如果它小于最可能模式,則預測模式即為rem_intra4*4_pred_mode,否則為rem_intra4*4_pred_mode+1。AVS-M中,左塊(A)、上塊(B)的預測模式(若不存在,置為-1)形成表格后,通過查表可獲得當前塊的最可能模式。對I_Direct,其預測模式即為最可能模式;對I_4*4,需看標志信息pred_mode_flag,該標志為0時,預測模式即為最可能模式;該標志為1時,當碼流中讀到的intra_luma_pred_mode小于最可能模式,則預測模式為最可能模式,否則,預測模式為intra_luma_pred_mode+1。另外, H.264中的Intra_16*16和色度預測模式從碼流中讀取,AVS-M的色度預測模式也從碼流中讀取。
3 幀間預測
兩標準下亮度塊的運動矢量等于預測運動矢量(MVPred)加上比特流中讀取到的運動矢量差(MVD)。由于亮度MV精度為1/4像素,而色度精度為1/8像素,因此,色度塊的運動矢量等于亮度塊的兩倍。AVS-M和H.264的當前亮度塊E和鄰塊A、B、C、D的空間位置分別如圖2、3所示。E的大小可以是16*16、16*8、8*16、8*8、8*4、4*8或4*4。顯然,AVS-M中,A是與E的左下角樣本緊鄰的塊,B、D與E的左上角樣本緊鄰的塊,C是與E的右上角樣本緊鄰的塊。H.264中,A是與E的左上角樣本緊鄰的塊,B、D與E的左上角樣本緊鄰的塊,C是與E的右上角樣本緊鄰的塊。
圖2 AVS-M預測塊鄰塊位置
圖3 H.264預測塊鄰塊位置
4 熵解碼
H.264中采用基于上下自適應的可變長編碼(CAVLC),其原理: 4*4塊殘差數據經整數變換、量化后非零系數主要集中在低頻部分,高頻系數大部分是零,且高頻位置上非零系數值大部分是+1和-1。AVS-M熵編碼也采用變長編碼技術,在AVS-M熵編碼過程中,所有的語法元素和殘差數據都是以指數哥倫布碼的形式映射成二進制比特流。
5 環(huán)路濾波
兩標準都是采用基于塊的殘差系數反變換、反量化,量化過程相對粗糙,反量化恢復的變換系數必定帶來誤差,另一方面,運動補償塊可能來自不同幀位置的內插樣本塊,將導致邊界不連續(xù),因此,需采用環(huán)路濾波來消除塊預測誤差造成的失真。H.264中根據相鄰塊模式、參考索引、運動矢量和解碼塊確定濾波強度,濾波強度參數Bs值為0~4,對于Bs為1~3的采用4抽頭濾波器,對于Bs為4的采用6抽頭濾波器。H.264中濾波器能適應片級、邊界級和樣點級的需要。而在AVS-M中根據當前宏塊是幀內(幀間)編碼宏塊來選擇幀內(幀間)濾波器,當滿足濾波條件后,采用4抽頭濾波器對邊界先垂直后水平濾波。AVS-M濾波器相對H.264而言,像素少,強度弱,但在消除方塊效應的同時能大大地減少濾波時間。
應用前景
直播衛(wèi)星電視和高清電視是其中進展最快的項目。與整機廠商互動,AVS標準組可從實際應用中得到反饋,對標準、實現算法、軟件、IP內核、專用芯片進行及時的修改和改進,從而真正適應產業(yè)的需求。
上廣電主持的衛(wèi)星電視實驗系統(tǒng)項目中的AVS編碼器則采用了“轉碼器+DSP”的實現方案。該系統(tǒng)高度兼容MPEG-2,這是由于MPEG-2的節(jié)目較多,所以AVS與它有一個融合-取代的過程。如加密、用戶管理、收費系統(tǒng)、編輯系統(tǒng)等其他配套系統(tǒng)不變。
總結
由上分析可知,兩種視頻解碼器結構有很多共同之處。目前,關于H.264視頻解碼器的優(yōu)化、硬件移植的方法及其應用很多,這些也可被AVS-M采納。本文根據優(yōu)化H.264的相關文獻中的一些方法對AVS-M作過軟件上的優(yōu)化。算法上的優(yōu)化主要包括插值、環(huán)路濾波和熵解碼的優(yōu)化。插值時可以將像素分為內部像素和邊界像素,避免重復的判斷。環(huán)路濾波時每個4*4塊中的每個點有相同的邊界門限,其相應的濾波操作也可以4次完成。熵解碼時,可通過重新建表減少轉化程序。代碼上的優(yōu)化主要包括程序結構優(yōu)化、循環(huán)展開、數據類型選擇和數據的移動等,例如,Decode_one_macroblock函數中,可根據宏塊類型采用不同的函數來解碼,對臨時的緩存區(qū)可簡化。此外,對插值運算(可轉化為矩陣運算)、反量化和反變換等涉及到矩陣運算的函數都可使用MMX/SSE指令集優(yōu)化。
H.264是國際通用標準,而AVS-M是我國自主制定的標準,因而,兩標準兼容的視頻解碼器的出現是種必然。本課題接下來的工作即是在對已有結構對比分析的基礎上結合兩套代碼,將兩解碼器結構相同部分進行復用,不同部分通過開關進行選擇,實現對兩種不同格式的碼流進行識別并實時解碼
評論