在FPGA上實現H.264/AVC視頻編碼標準
盡管H.264/AVC承諾將此已有視頻編碼標準具有更高的編碼效率,它仍為系統架構師、DSP工程師和硬件設計人員帶來了巨大的工程設計挑戰(zhàn)。H.264/AVC 標準引入了自 1990 年推出 H.261 之后視頻編碼標準演進過程中出現的大部分重大改變和算法間斷 (algorithmic discontinuities)。
本文引用地址:http://butianyuan.cn/article/190838.htm實現 H.264/AVC 編碼標準所需的算法計算復雜度、數據局部性,以及算法和數據并行性,常常會直接影響系統級別的整體架構決策。這種影響又會決定在廣播、視頻編輯、電話會議以及消費電子領域開發(fā)H.264/AVC解決方案所需的最終開發(fā)成本。
復雜度分析
為了實現實時 H.264/AVC 標準清晰度 (SD) 或高清晰度 (HD) 分辯率編碼解決方案,系統架構師常常需要使用多個 FPGA 和可編程 DSP。為了說明所需計算的巨大復雜度,先探討一下 H.264/AVC 編碼器的典型運行時的周期要求。H.264/AVC 編碼器基于由聯合視頻工作組(JVT)提供的軟件模型,該工作組由來自 ITU-T 的視頻編碼專家組 (VCEG) 和 ISO/IEC 的運動圖像專家組 (MPEG) 的專家組成。采用Intel的VTune軟件,在 Intel Pentium III 1.0 GHz 通用 CPU、512 MB 內存的平臺上運行,按照主要配置編碼解決方案實現 H.264/AVC SD,需要約 1,600 BOPS(每秒十億次運算)。
然而,單憑計算復雜度并不能決定一個功能模塊是否應映射為硬件或是使其保持為軟件。為了評估在由 FPGA、可編程 DSP或通用主處理器混合組成的平臺上實現 H.264/AVC 編碼標準時,軟件和硬件分割的可行性,需要分析將會影響整體設計決策的大量架構問題。
數據局部性。
在同步設計中,按照特定的順序和粒度訪問內存,同時根據延遲、總線競爭、對準、DMA 傳輸率以及所用內存的類型(如 ZBT 內存、SDRAM和 SRAM 等)使時鐘周期數降至最小的能力至關重要。數據局部性問題主要是由數據單元和算術單元(或處理引擎)之間的物理接口體現的。
數據并行性。
大多數信號處理算法都是對高度并行的數據進行操作(如 FIR 濾波)。單指令多數據 (SIMD) 和向量處理器對可被并行化或做成向量格式(或長數據寬度)的數據具有較高的處理效率。
FPGA可通過提供大量塊 RAM 支持大量極高總計帶寬要求來實現這一點。在新的 Xilinx Virtex-4 SX器件中,塊 RAM 的數量與 Xtreme DSP的邏輯片數緊密匹配(例如,SX25具有128個塊RAM,128個DSP邏輯片;SX35具有192個塊 RAM,192個DSP 邏輯片;SX55具有320個塊 RAM,512個DSP邏輯片)。 信號處理算法并行機制。
在典型的可編程 DSP 或通用處理器中,信號處理算法并行機制通常是指指令級并行 (ILP)。超長指令字 (VLIW) 處理器是此類采用ILP的機器中的一個例子,它將多條指令(ADD、MULT 及 BRA)組合起來,在一個周期內執(zhí)行。處理器中高度流水線化的執(zhí)行單元也是實現并行機制的典型硬件示例。現在已經有可編程DSP采用這種架構(如TI的TMS320C64x)。
但是,并非所有算法都能使用這種并行機制。遞歸算法,如 IIR 濾波、MPEG 1/2/4 中的變長編碼 (VLC)、上下文自適應變長編碼 (CAVLC),以及 H.264/AVC 中的上下文自適應二進制算術編碼 (CABAC),當映射到這些可編程 DSP 時,均無法達到最優(yōu)且效率不高。這是因為數據遞歸阻礙了 ILP 的有效利用。作為取代方案,可在FPGA 結構中有效地構建專用硬件引擎。
計算復雜度。
可編程 DSP 受計算復雜度的限制,可通過處理器的時鐘速率來度量。在FPGA中實現的信號處理算法通常為計算密集型算法。其中的例子有運動估計中的絕對差值和 (SAD) 引擎以及視頻縮放。
通過將這些模塊映射到 FPGA 中,主處理器或可編程DSP就可有額外的周期來處理其他算法。此外,FPGA 結構還可以具有多時鐘域,從而允許選擇性硬件模塊根據各自的計算要求使用獨立的時鐘速度。 理論上質量的最優(yōu)性。
當且僅當對復雜度沒有限制時,任何基于速率失真曲線的理論最優(yōu)解決方案均可實現。在可編程 DSP 或通用處理器中,計算復雜度常受可用時鐘周期的限制。而 FPGA 則相反,通過對硬件引擎的多重實例化,或提高結構中塊 RAM 和寄存器組的利用率,實行數據和算法并行機制,從而提供更高的靈活性。
可編程 DSP 或通用處理器通常受每個周期發(fā)出的指令數、執(zhí)行單元中的流水線級數以及完全饋給執(zhí)行單元所需最大數據寬度的限制。在可編程 DSP 中,受每個任務可用周期數的限制,視頻質量常常大受影響。而在 FPGA 結構中,硬件資源則可得到完全分配(三步和完全搜索運動估計對比)。
使用FPGA 實現功能模塊
圖 1 包括功能塊和數據流的 H.264/AVC 宏塊編碼器
圖 1 為定義了主功能塊和數據流的整個 H.264/AVC 宏塊級編碼器。H.264/AVC 標準的主要優(yōu)勢在于能夠通過以不同的方式和方向分析像素冗余,預測要編碼的圖像內容的值,而這種分析以前從未在其他標準中進行過。但與以前的標準相比,其復雜度和內存訪問帶寬增加了4倍。
改進預測方法
下面重點分析一下在 H.264/AVC 視頻編碼設計中實現其增強編碼效率的主要特點,根據前文討論過的設計準則對這些功能模塊進行評估。
四分之一像素精度(Quarter-pixel-accurate) 運動補償。
以前的標準采用二分之一像素運動向量精度。新設計通過采用四分之一像素運動向量精度對此進行了改善。二分之一像素位置的預測值是通過沿橫向和縱向采用一個一維6抽頭 FIR 濾波器 [1, -5, 20, 20, -5, 1]/32 計算得到的。
四分之一像素位置的預測值是通過將全像素和二分之一像素位置的采樣值進行平均得到的。這些二次采樣內插運算可在 FPGA內的硬件中高效地實現。
小塊尺寸可變塊大小運動補償。
該標準在 16×16 像素宏塊尺寸中為鋪瓦結構 (tiling structure) 提供了更多的靈活性。它允許使用 16×16、16×8、8×16、8×8、8×4、4×8 和 4×4 子宏塊尺寸。
由于給定 16×16 宏塊鋪瓦結構的組合增多,因此要找到一個速率失真優(yōu)化鋪瓦解決方案需要很高的計算強度。這一額外特性為運動估計、細化和模式決策過程中所用的計算引擎增加了巨大負荷。
環(huán)中自適應去塊(deblocking) 濾波。
去塊濾波器已經在 H.263+ 和 MPEG-4 第 2 部分的實現中作為后處理濾波器被成功采用。在 H.264/AVC 中,去塊濾波器將在運動補償環(huán)路中移動,對在預測和解碼過程中的殘留差值編碼階段造成的塊邊緣進行濾波。濾波對 4×4 塊和 16×16 宏塊邊緣均可進行,兩個邊上的兩個像素可能會被一個三抽頭濾波器更新。濾波器系數或強度由內容自適應非線性濾波器決定。
幀內編碼有向空間預測。
當無法采用運動估計時,可以采用幀內有向空間預測來估計空間冗余。這種技術通過從相鄰塊沿預先定義的一組方向向相鄰像素外插來預測當前塊。然后就可以對預測塊和實際塊之間的差值進行編碼了。
這種方法在存在空間冗余的平面背景中特別有用。對于 Intra_4×4 預測,總共有九種預測方向;對于 Intra_16×16,則有4種預測方向。注意,在 Intra_4×4情況下,由于數據因果性,將導致對當前塊上邊和左邊相鄰的 13 個像素值的快速內存訪問。對于 Intra_16×16,每邊將使用 16個像素來預測一個 16×16 塊。
多參考圖像運動補償。
H.264/AVC 標準為幀間編碼提供了多參考幀選項。除非參考圖像的數量為1,否則必須指定參考圖像在多圖像緩沖區(qū)內的索引位置。多圖像緩沖區(qū)的尺寸決定編碼器和解碼器中內存的使用情況。這些參考幀緩沖區(qū)必須在編碼器的運動估計和補償階段分別訪問。
加權預測。
JVT 認為在對一些有衰弱現象的視頻圖像進行編碼時,采用加權運動補償預測可以極大地改善編碼效率。
改善編碼效率
除了預測方法得到改進以外,該標準設計的其他部分也對編碼效率的改善進行了增強。下面兩個附加特性最容易對基于關于軟件和硬件分割的設計準則的整體系統架構產生影響。
小塊尺寸,層次化,精確匹配反變換和短字長變換。
同其他標準一樣,H.264/AVC 也是對運動補償預測殘留施加變換編碼。
但是,與以前采用 8×8 離散余弦變換 (DCT) 的標準不同,這種變換是施加于 4 x 4 塊上,并且采用 16 位整數格式,可以精確地進行反變換。小塊有助于減小分塊和振鈴結果,而精確整數規(guī)范則消除了編碼器與反變換中的解碼器之間的一切不匹配問題。
此外,還采用了一種基于阿達瑪矩陣 (Hadamard matrix) 的附加變換,以實現已變換塊的 16 個 DC 系數的冗余。與 DCT 相比,所有整數變換矩陣中只包含從 -2 到 2 之間的整數。這樣,只使用低復雜度的移位寄存器和加法器就可以通過 16 位算術計算變換和反變換。
算術和上下文自適應熵編碼。
有兩種熵編碼方法:一種是基于上下文自適應切換變長編碼集 (CAVLC) 的低復雜度技術,一種是計算要求更高的基于上下文的自適應二進制算術編碼 (CABAC) 算法。
CAVLC 是 H.264/AVC 的基本熵編碼方法。其基本編碼工具包括一個結構化 Exp-Golomb 編碼 VLC,它通過單獨定制的映射,可應用于除與量化變換系數有關的語法元素以外的所有語法元素。CABAC則采用了一種更為復雜的編碼方案。
首先,根據一種預定義的掃描模式,將變換系數映射到一個 1 維數組。量化后,塊將只包含一些重要的非零系數。
根據該統計結果,使用5個數據元素來傳遞特征 4 × 4 塊的量化變換系數的信息。使用 CABAC 可進一步改善熵編碼的效率。
CABAC 中的兩個部分。規(guī)定算術編碼內核引擎及其相關的概率估計是免乘法、低復雜度方法,只能使用移位和查找表。自適應編碼的使用使之能夠與非靜止符號統計適應。通過采用根據前面編碼語法元素進行估計從而在條件概率模型間切換的上下文建模方法,CABAC 可獲得比 CAVLC 低 5~15% 的位速率。
圖2 典型H.264/AVC硬件/軟件功能塊分割
圖 2 顯示了 H.264/AVC SD 視頻編解碼器系統級功能塊的典型分割。該解決方案基于針對 TI公司的TMS320DM642 DSP 的 Spectrum Digital EVM DM642 評估模塊,結合 Xilinx XEVM642- 2VP20 Virtex-IIPro或XEVM642-4VSX25 Virtex-4子插件板實現。
結語
以最優(yōu)模式使用時,與以前的視頻編碼標準(如 MPEG-4 第 2 部分和 MPEG-2)相比,H.264/AVC 標準的編碼工具可在很寬的位速率和分辯率范圍內使編碼效率提高約50%。但是,當分辯率比源輸入格式 (SIF) 高時,算法極為復雜。
參考文獻
“聯合視頻規(guī)范國際標準 ITU-TU 建議草案和最終草案 (ITU-T Rec. H.264/ISO/IEC 14 496-10 AVC),”ISO/IEC MPEG 與 ITU-T VCEG 聯合視頻工作組 (JVT) ,JVT-G050, 2003
A. Luthra、G.J. Sullivan 和 T. Wiegand,2003 年 7 月。“有關 H.264/AVC 視頻編碼標準的專門問題”。 IEEE Trans.電路系統視頻技術 13(7): 557-725
評論