本系列主要介紹視頻編解碼芯片的設(shè)計(jì),以HEVC視頻編碼標(biāo)準(zhǔn)為基礎(chǔ),簡(jiǎn)要介紹編解碼芯片的整體硬件架構(gòu)設(shè)計(jì)以及各核心模塊的算法優(yōu)化與硬件流水線設(shè)計(jì)。
參考幀壓縮引擎對(duì)存儲(chǔ)在幀存儲(chǔ)器中的數(shù)據(jù)進(jìn)行壓縮,以減少外部帶寬和功耗。當(dāng)運(yùn)動(dòng)補(bǔ)償幀的像素必須寫入外部DRAM時(shí),參考幀壓縮引擎將對(duì)這些像素進(jìn)行壓縮。在運(yùn)動(dòng)估計(jì)期間,參考幀壓縮引擎解壓縮先前幀的像素并將其傳輸?shù)揭曨l編解碼器。
本文將先介紹一種優(yōu)化的參考幀壓縮的預(yù)測(cè)方法和熵編碼算法,然后介紹其VLSI實(shí)現(xiàn)和性能評(píng)估。
1
概述
對(duì)于支持UHD實(shí)時(shí)編碼的視頻編碼器來說,幀間預(yù)測(cè)中的帶寬問題逐漸成為系統(tǒng)設(shè)計(jì)的瓶頸。參考幀壓縮是一種減少視頻編碼器訪存帶寬的有效方案,不僅可以減小讀參考幀像素的帶寬,還能減少編碼器向外存寫入重建幀像素的帶寬。
對(duì)于現(xiàn)有的參考幀算法,有如下4個(gè)衡量標(biāo)準(zhǔn):
1、壓縮率:壓縮率表示壓縮后和壓縮前的參考幀數(shù)據(jù)大小的比。壓縮率越小,代表該參考幀壓縮算法的效果越好,訪存帶寬越小。
2、吞吐率:太復(fù)雜的壓縮算法可能會(huì)導(dǎo)致幀壓縮模塊的吞吐率過小,不能滿足高分辨率視頻實(shí)時(shí)編碼的要求。
3、模塊透明度:參考幀壓縮模塊必須能夠支持編碼器從任意位置取參考像素時(shí)能夠立即解碼,而不需要預(yù)先載入其他位置的參考像素。
4、硬件實(shí)現(xiàn):參考幀壓縮的算法必須易于硬件實(shí)現(xiàn),以簡(jiǎn)化硬件設(shè)計(jì)時(shí)的難度。
2
算法設(shè)計(jì)
數(shù)據(jù)結(jié)構(gòu)
在整個(gè)HEVC視頻編碼器系統(tǒng)中,環(huán)路濾波單元處理的基本單元塊高度為4。因此,為了能讓參考幀壓縮模塊能夠支持整個(gè)編碼器系統(tǒng)的數(shù)據(jù)讀寫,本文提出的參考幀壓縮算法的壓縮基本單元大小為8×4,最終的壓縮碼流數(shù)據(jù)結(jié)構(gòu)如下所示。
圖1
其中,“F”代表該8×4左上角的像素;“G”代表該8×4的分組模式;“M”代表該8×4塊中每個(gè)分組的編碼模式;“D”代表編碼后的殘差;“T”代表符號(hào)位。
由圖可知,每個(gè)8×4塊的壓縮數(shù)據(jù)可能存在3種類型:“Ori Data”、“NotAll Zero”和“All Zero”,分別代表了該殘差分布的3種類型。在本設(shè)計(jì)中,我們用每個(gè)8×4塊壓縮后碼流的長(zhǎng)度信息標(biāo)記其數(shù)據(jù)類型。每個(gè)8×4塊壓縮后的碼流長(zhǎng)度用一個(gè)8比特的數(shù)表示,并且和壓縮后的碼流一起存入外部存儲(chǔ)器中。如果碼流長(zhǎng)度等于8,那么該8×4塊壓縮碼流為“All Zero”類型;如果碼流長(zhǎng)度大于8且小于256,那么該8×4塊壓縮碼流為“Not All Zero”類型;如果碼流長(zhǎng)度等于0,那么該8×4塊壓縮碼流為“Ori Data”類型。
“Ori Data”代表壓縮后的碼流長(zhǎng)度大于等于256比特,將該8×4塊的原始像素打包進(jìn)最終碼流中,并且將碼流長(zhǎng)度標(biāo)記為0。
“Not All Zero”類型是最基本的數(shù)據(jù)類型,代表該8×4塊在經(jīng)過了預(yù)測(cè)和熵編碼階段后,將殘差的熵編碼結(jié)果以及預(yù)測(cè)的模式信息打包進(jìn)了最終碼流。
“All Zero”代表該8×4塊的所有像素等于同一個(gè)值,只存儲(chǔ)該8×4塊左上角的像素,并將碼流長(zhǎng)度標(biāo)記為8。
DPCM預(yù)測(cè)
在預(yù)測(cè)之前,每幀圖像會(huì)被劃分為若干8×4的塊。考慮到算法復(fù)雜度的限制,本文采用了DPCM預(yù)測(cè)方法,如下所示,其中箭頭表示該像素的預(yù)測(cè)方向。
圖2
左上角的像素會(huì)被直接打包進(jìn)壓縮碼流的“F”部分,該像素將會(huì)作為參考幀壓縮模塊解壓縮階段的起點(diǎn);第1列的剩余3個(gè)像素的殘差等于該像素與其上方像素的差值;第2列到第8列的28個(gè)像素的殘差等于該像素與其左側(cè)像素的差值。
小值優(yōu)化的半定長(zhǎng)編碼
在熵編碼階段,本文針對(duì)預(yù)測(cè)殘差的分布特征,對(duì)[1]中提出的半定長(zhǎng)編碼方案做了小值優(yōu)化。首先,每個(gè)8×4塊被劃分為8個(gè)2×2的子編碼塊,根據(jù)每個(gè)小塊內(nèi)殘差的最大絕對(duì)值得到其編碼模式CM,如下表所示。
表1
小值優(yōu)化的半定長(zhǎng)編碼規(guī)則如下表所示,其中S是殘差的符號(hào)位,S代表S的取反值。
表2
如果2×2子編碼塊內(nèi)的某個(gè)殘差等于2CM-1,則在“T”中增加一位0;如果等于-2CM-1,在“T”中增加一位 1。在確定了2×2子編碼塊的編碼模式CM后,該2×2子編碼塊內(nèi)的4個(gè)殘差值可以根據(jù)上表得到其編碼值。
由數(shù)據(jù)結(jié)構(gòu)圖可知, “F”部分和“G”部分的長(zhǎng)度是固定的。在確定了“M”部分的數(shù)值后,可以得到“D”部分的長(zhǎng)度,以及“D”部分中各個(gè)殘差的長(zhǎng)度。“T”部分的長(zhǎng)度可以由總長(zhǎng)度減去“F”、“G”、“M”和“D”的長(zhǎng)度得到。
子編碼塊分組
如果相鄰的子編碼塊擁有相同的編碼模式,那么可以用同一個(gè)“M”來表示這個(gè)子編碼塊組的編碼模式,減少 “M”部分的長(zhǎng)度。下圖描述了4種分組方式以及對(duì)應(yīng)的分組模式“G”。
圖3
3
VLSI設(shè)計(jì)
參考幀壓縮模塊的壓縮階段的流水級(jí)如下所示。
圖4
第1個(gè)流水級(jí),對(duì)8×4編碼塊做DPCM預(yù)測(cè),且將左上角像素放入最終碼流的“F”部分,并根據(jù)殘差獲得每個(gè)2×2子編碼塊的編碼模式“M”,在此基礎(chǔ)上得到2×2子編碼塊的分組方式“G”。
第2個(gè)流水級(jí),對(duì)8×4塊內(nèi)的殘差同時(shí)編碼,并且放入最終碼流的“D”部分。
第3個(gè)流水級(jí),如果第1個(gè)流水級(jí)計(jì)算得到所有殘差等于0,那么將左上角像素打包進(jìn)最終碼流中,并將碼流長(zhǎng)度記錄為8;如果第2個(gè)流水級(jí)編碼得到的“D”加上“F”、“G”、“M”、“T”的總碼流長(zhǎng)度大于等于256,那么將該原始32個(gè)像素打包到最終碼流中,并將碼流長(zhǎng)度記錄為0;如果碼流長(zhǎng)度小于256,那么將第1個(gè)流水級(jí)以及第2個(gè)流水級(jí)得到“F”、“G”、“M”、“D”和“T”部分打包到一起輸出到外部存儲(chǔ)器中,并記錄碼流長(zhǎng)度。
參考幀壓縮模塊的解壓縮階段的流水級(jí)如下所示。
圖5
第1個(gè)流水級(jí),解析出碼流中的“F”、“G”、“M”、“D”和“T”。
第2個(gè)流水級(jí),根據(jù)第1個(gè)流水級(jí)中的編碼模式“M”分離出“D”部分中各個(gè)殘差的編碼值。
第3個(gè)流水級(jí),參照小值優(yōu)化的半定長(zhǎng)編碼規(guī)則表,對(duì)“D”中各個(gè)殘差同時(shí)解碼。
第4個(gè)流水級(jí),根據(jù)第3個(gè)流水級(jí)得到的殘差值以及第1個(gè)流水級(jí)得到的左上角像素值恢復(fù)得到整個(gè)8×4塊的32個(gè)像素。
參考幀壓縮模塊的編解碼階段的每個(gè)流水級(jí)均為2個(gè)時(shí)鐘周期,也就是說設(shè)計(jì)的吞吐率是32/2=16,如果是YUV420的視頻序列,則吞吐率是16/1.5=10.67。
4
性能評(píng)估
對(duì)Class A~E的序列進(jìn)行測(cè)試,得到最終的壓縮率的測(cè)試結(jié)果如下所示。
圖6
在壓縮率方面,本文提出的參考幀壓縮算法的平均壓縮率約為56.1%,因?yàn)椴捎昧溯^小的編碼塊(8×4)和較簡(jiǎn)單的壓縮算法,影響了最終的壓縮效果。
在硬件面積方面,本文提出的參考幀壓縮架構(gòu)的等效邏輯門數(shù)目?jī)H為43.98K,這同樣歸因于較小的編碼塊和較簡(jiǎn)單的壓縮算法。
在吞吐率方面,本文提出的參考幀壓縮架構(gòu)的吞吐率高達(dá)5.3G 像素/s,能夠在Level B級(jí)的數(shù)據(jù)復(fù)用時(shí),支持UHD 4K×2K@60fps實(shí)時(shí)編碼的硬件設(shè)計(jì)。
參考文獻(xiàn):
[1] L. Guo, D. Zhou and S. Goto.A New Reference Frame RecompressionAlgorithm and Its VLSI Architecture for UHDTV Video Codec[J].IEEE Transactionson Multimedia, 2014, 16(8):2323-2332.