H.264解碼糾錯在軟硬件協同系統中的實現
硬件主要負責宏塊層和子宏塊層的解碼,能夠發現預測模式、熵解碼的錯誤。如果硬件解碼過程中檢測出錯誤,硬件會向軟件發送HasErr_hw 信號。例如在幀內預測時,需要判斷相鄰宏塊的可用情況。在讀幀內預測模式的語句后加入以下判斷:
整個糾錯過程由軟件控制,修補過程由軟件直接發送數據給硬件后端。硬件檢測出錯誤并向軟件傳遞HasErr 信號,軟件會做相應的數據處理,向硬件發送Err_Processing 信號, 并根據錯誤修補方案代替前端數據處理部分為解碼器后端提供數據,如圖3 中虛線所示。
圖3 H.264 解碼器結構圖
在修補過程中, 由于采用基于空間連續性的預測,所以可以使用原有硬件中的幀內預測部分。但是,出錯后原有的一些信號需要做相應的處理,否則控制部分的一些狀態機會進入異常狀態導致硬件無法繼續正常運行。
4 實驗結果
本實驗先在PC 機上對C 模型修改和完善,硬件測試平臺則采用Xilinx Virtex4 系列的開發板。解碼器軟件部分使用C 語言編寫,Linux 下gcc 編譯,生成的二進制文件運行于基于開放核OPENRISC1200 的CPU;硬件部分使用Verilog HDL 描述。測試所用輸入碼流為ITU-T 提供的參考序列[2],加入11 個固定噪聲樣本。實驗證明解碼器能順利解碼的噪聲碼流比例有了很大提高,圖像播放流暢,很多受損的地方得到了較好的修補,但是也有一些能看出明顯的修補痕跡。
5 結論
在解碼器中加入錯誤檢查和修補功能,提高了解碼器處理受損碼流的能力,解碼器因此可以在更復雜的環境中使用,穩定性也有所提高。H.264 視頻壓縮標準本身具有一些支持錯誤修補的技術,比如可以多次重復傳輸SPS 和PPS,多個Slice,FMO 等。多次傳輸SPS 和PPS 以降低傳輸效率為代價獲得接收端更高的準確率, 這在某些環境中是非常必要的。多個Slice 和FMO 在一定程度上增加了編碼和解碼的復雜度,但是它使得更多的周邊宏塊信息可以用于受損宏塊的預測和修補。此外,就修補方式而言,也有基于幀間相關性和其它幀內預測插值方法的研究。本實驗的主要目標是使解碼器能順利解碼并且盡量重復利用已有的硬件單元,減少由于添加糾錯功能帶來的硬件面積增加。采用16×16 幀內預測的方法修補,圖像質量相對于未修補時有了很大提高,但是有些地方還是有比較明顯的修補痕跡。尋找更好的圖像修補辦法,使修補后的圖像盡量接近原始圖像,減少可以明顯分辨的修補痕跡,這些是需要繼續研究的內容。
評論