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