董志文 ,張 遠 ,史 萍
(1.中國傳媒大學(xué) 信息工程學(xué)院,北京 100024;2.聯(lián)合信源數(shù)字音視頻技術(shù)(北京)有限公司,北京 100085)
視頻編碼標準的制定和推廣極大地推動了多媒體應(yīng)用技術(shù)的發(fā)展。目前主流的視頻編碼標準和技術(shù)主要包括MPEG活動圖像專家組開發(fā)的MPEG-2及MPEG-4標準、ITU-T的VCEG(視頻編碼專家組)和ISO的MPEG(活動圖像專家組)組成的聯(lián)合視頻組(JVT)開發(fā)的H.264/MPEG-4 AVC標準[1]、國內(nèi)的AVS標準[2]以及微軟公司開發(fā)的VC-1(Video Codec 1)視頻編碼壓縮技術(shù)[3]。多樣化的視頻編碼標準使得不同格式的數(shù)字視頻編解碼技術(shù)及相關(guān)產(chǎn)品將長期共存。如何使一臺終端能夠兼容多個標準的視頻碼流成為亟待解決的問題。為解決這一問題,可以采用轉(zhuǎn)碼方案,即將多個不同標準的視頻碼流利用轉(zhuǎn)碼技術(shù)生成終端可識別的視頻碼流,但這樣通常會使視頻質(zhì)量下降。第二種方案是在解碼終端設(shè)備中,配置各種視頻標準的解碼器,以實現(xiàn)終端設(shè)備對各種視頻信號的兼容,但是這樣會隨著兼容視頻標準數(shù)目的增加而提高設(shè)計成本。第三種方案是以通用處理器為基礎(chǔ)設(shè)計支持多標準視頻格式的解碼器芯片,將多個視頻標準的運算單元與存儲單元復(fù)合在一起,從而在一個解碼器芯片上實現(xiàn)多標準視頻解碼的任務(wù)。采用這種方案可克服第一種方案中轉(zhuǎn)碼帶來的視頻質(zhì)量下降問題,也可大大的降低設(shè)計成本[4]。
各視頻標準碼流在數(shù)據(jù)格式上以及算法結(jié)構(gòu)上存在著一定程度的相似性,這為支持多標準視頻解碼的芯片設(shè)計提供了可能性。例如在數(shù)據(jù)格式上,各視頻標準均符合序列層、圖像層、片層、塊數(shù)據(jù)層這樣一個數(shù)據(jù)組織形式,因此可將傳統(tǒng)的解碼流程設(shè)計成系統(tǒng)層、圖像層、宏塊層、子塊層這樣一個通用的解碼流程;在算法結(jié)構(gòu)上,基本上都采用了離散余弦變換(DCT)算法去除空間冗余、采用幀間預(yù)測及運動補償算法去除時間冗余、采用熵編碼等算法進一步進行視頻流數(shù)據(jù)的壓縮等,因此,在解碼器的設(shè)計中,可將這些算法單元復(fù)合在一起使用,實現(xiàn)各標準之間的算法重用。
本文主要討論多標準視頻解碼器頂層部分,也就是在解碼流程中處于宏塊層以上部分的重用機制,并在文獻[4]和文獻[5]中介紹的重用機制的基礎(chǔ)上分析并設(shè)計了一種適用于 MPEG-2,MPEG-4,H.264,AVS 以及 VC-1 等標準的頂層模塊重用機制。
目前主流的視頻編碼標準采用的都是基于變換、運動補償預(yù)測和熵編碼的混合編碼結(jié)構(gòu)框架[6-7]。變換采用DCT變換,量化采用標量量化方式,運動補償采用基于塊匹配的運動估計方法,熵編碼采用變長編碼。因此,解碼端的主要處理流程和處理技術(shù)基本相似,如圖1所示。在處理流程上,這些標準基本都符合熵解碼、反量化、反變換、幀間預(yù)測、運動補償?shù)慕獯a順序,且基本都符合序列層、圖像層、宏塊層、塊層的語法結(jié)構(gòu)層次。這些特點為運算和控制單元可重用的多標準解碼器設(shè)計提供了理論基礎(chǔ)。同時,視頻解碼器芯片的設(shè)計普遍采用宏塊級的數(shù)據(jù)流驅(qū)動控制策略,所以緩沖區(qū)和參考幀存儲區(qū)也可以被重用。
在視頻標準中,頂層模塊是指在語法結(jié)構(gòu)層次中處于宏塊級以上的解碼部分,其他處于語法結(jié)構(gòu)層次中宏塊級及其以下的解碼部分稱為底層模塊。在MPEG-2,MPEG-4,H.264,AVS標準和VC-1中,碼流結(jié)構(gòu)基本都由序列頭、圖像頭、片頭及像素編碼數(shù)據(jù)組成,但在細節(jié)方面存在差異。以圖像頭信息為例,在H.264碼流中并非所有的圖像幀都有圖像頭。AVS規(guī)定一幀中的兩場至少有一個圖像頭。MPEG-2及MPEG-4標準規(guī)定所有的圖像數(shù)據(jù)前都有圖像頭。在MPEG-4中并沒有片頭的概念,只有宏塊組的概念。在VC-1中并非所有的圖像前都有圖像頭,且VC-1的簡單檔次中沒有起始碼前綴標志(0x000001),這與其他標準不同。盡管存在這些差異,這幾個視頻標準采用了相似的頂層解碼流程結(jié)構(gòu)。在多標準解碼器的設(shè)計中可使用圖2中的結(jié)構(gòu),從而實現(xiàn)頂層結(jié)構(gòu)的重用。圖2中虛線內(nèi)部分表示底層模塊,虛線外部分表示頂層模塊。頂層模塊主要包括Head_Parse,Initialize_Sequence,Ref_Buffer_Control,Bbv_Buffer_Ctrl,和Update_Buffer_Idx等。Head_Parse模塊解析頂層的部分頭信息,包括序列參數(shù)、圖像參數(shù)和一些擴展信息等;Initialize_Sequence模塊初始化解碼當(dāng)前序列所需要的一些參數(shù);Ref_Buffer_Control模塊負責(zé)參考幀管理的操作;Bbv_Buffer_Ctrl模塊中進行刷新碼流緩存區(qū)的操作;Update_Buffer_Idx模塊進行刷新參考幀幀存索引以及幀存顯示的操作。
解析重用
頂層語法元素是指視頻碼流中處于宏塊級以上的語法元素,主要包含解碼所必需的參數(shù),如序列參數(shù)和圖像參數(shù)等。在不同的標準中,一般使用不同的編碼方法表示這些頂層的語法元素,如無符號定長編碼和哥倫布編碼。通過對各標準的分析與歸納,頂層使用的語法元素編碼方式如表1所示。
表1 各標準頂層語法元素的編碼方式
從表1可看出,n位定長編碼是幾種標準都使用的編碼方法,k階指數(shù)哥倫布編碼用于H.264及AVS的頂層語法元素。定長碼的解碼過程比較簡單,只需要按照給定的碼字長度,從碼流中截取相應(yīng)位數(shù)的比特位,再根據(jù)需要選擇查表或者是直接返回截取的比特位即可。哥倫布編碼是變長編碼,解碼要相對復(fù)雜一些。
AVS標準中定義了9種不同的語法元素解析方式,頂層解碼用到的主要有以下幾種:
1)u(n),n位無符號整數(shù)。在語法表中,如果n的值為v,其比特數(shù)由其他語法元素值確定。解析過程由函數(shù)read_bits(n)的返回值規(guī)定,該返回值用高位在前的二進制表示。
2) r(n),連續(xù) n 個 0。 解析過程由函數(shù) read_bits(n)的返回值規(guī)定。
3)i(n),n 位整數(shù)。 在語法表中,如果 n的值為 v,其比特數(shù)由其他語法元素值確定。解析過程由函數(shù)read_bits(n)的返回值規(guī)定,該返回值用高位在前的2的補碼表示。
4)f(n),取特定值的連續(xù)n個比特。解析過程由函數(shù) read_bits(n)的返回值規(guī)定。
5)b(8),一個任意取值的字節(jié)。解析過程由函數(shù)read_bits(8)的返回值規(guī)定。
6)ue(v),無符號整數(shù)指數(shù)哥倫布碼編碼的語法元素,左位在先。
在H.264標準中,頂層用到的語法元素解析方式主要有 b(8),f(n),i(n),u(n)及 ue(v),其含義與 AVS 中的相同。
MPEG-2與MPEG-4標準中的語法元素解析方式主要有以下幾種:1) Bslbf(bit string,left bit first),比特串,左位優(yōu)先。2)Uimsbf(unsigned integer,most-significantbit first),無符號整數(shù),最高位優(yōu)先。
3) Simsbf(signed integer,in twos complements format,most significant(signed) bit first),有符號整數(shù),2 的補碼形式,最高位(符號位)在先。
VC-1標準中,頂層用到的語法元素解析方式主要有Uimsbf和Bslbf,其含義同MPEG-2標準中的定義。因此,在多標準解碼器的設(shè)計中,可在頂層語法元素解析模塊中重用定長解碼模塊,對于H.264及AVS標準可重用哥倫布解碼,從而實現(xiàn)有效的重用結(jié)構(gòu),以實現(xiàn)代碼的優(yōu)化與管理。
在前文所述的5個視頻標準中,H.264采用最多16個參考幀的參考幀管理方式;AVS采用最多兩幀的參考幀管理方式(其中P幀前向最多兩幀,B幀前后各一幀);MPEG-2,MPEG-4和VC-1采用最多兩幀的參考幀管理方式(其中P幀前向最多一幀,B幀前后向各一幀)。
鑒于H.264的參考幀管理方式與其他標準不同,筆者設(shè)計了兩種管理方式,一種是專門針對于H.264的參考幀管理機制,另一種是為AVS,MPEG-2,MPEG-4和VC-1這4個標準而設(shè)計的一種參考幀管理重用方案。其中適用于AVS,MPEG-2,MPEG-4以及VC-1的參考幀管理重用方案的主要技術(shù)要點如下:
1) 分配4個幀存緩沖區(qū),分別標識為 0,1,2,3。 其中,3表示寫入緩存區(qū)的索引號,0表示后向參考幀的緩存區(qū)索引號,1表示前向參考幀的緩存區(qū)索引號。
2)每次幀存索引號的刷新都在解碼一幀后進行。索引刷新過程為:當(dāng)前解碼幀為非B幀時,幀存索引值均加1(3號要變?yōu)?號);當(dāng)前解碼幀為B幀時,幀存索引值中的2號與3號互換。
3)幀圖像的顯示在幀存號索引刷新之后進行。幀圖像顯示過程為:當(dāng)前解碼幀為非B幀時,顯示1號所指向的幀存空間數(shù)據(jù);當(dāng)前解碼幀為B幀時,顯示2號所指向的幀存空間數(shù)據(jù)。參考幀管理的過程如圖3所示。
4)對于場的情況,只對本幀的第一場進行幀存索引號的刷新操作。
在多標準視頻解碼的流水線設(shè)計中,需要為頂層解碼以及VLD模塊提供足夠的碼流以防止緩沖區(qū)下溢,從而流暢地解碼,因此需要設(shè)計一個適用于多標準解碼并且可重復(fù)利用的碼流緩存區(qū)域,這部分的主要技術(shù)要點有:
1)為保證VLD解碼對碼流數(shù)據(jù)的正確請求,必須保證碼流緩存中的有效數(shù)據(jù)足以維持至少一個片或一幀圖像的所有宏塊數(shù)據(jù)解碼。
2)碼流緩存的刷新操作位于解碼完畢一個片或一幀圖像之后。
3)緩存區(qū)的管理必須能夠模擬硬件對碼流數(shù)據(jù)的刷新操作。
4)為適應(yīng)硬件讀寫操作,緩存區(qū)的讀寫位寬為32 bit。
根據(jù)以上技術(shù)要點,設(shè)計出如下方案。碼流緩存區(qū)的大小根據(jù)不同的圖像格式進行動態(tài)分配。以CIF(352×288),4∶2∶0格式的視頻圖像為例,首先設(shè)定碼流緩存區(qū)大小為0x80000 byte(考慮到無壓縮情況下4幀碼流的數(shù)據(jù)量大小)。在第一次刷新緩存區(qū)的碼流數(shù)據(jù)時,首先填充0x40000 byte(如果碼流足夠),之后在每次解碼一幀后進行緩存區(qū)的刷新操作。
緩存區(qū)的刷新判斷操作位于頂層的Bbv_Buffer_Ctrl模塊,在每次解碼完一個片后進行。如圖4所示,SRAM為碼流緩存區(qū),DRAM為外部大容量存儲器。VLD解碼一個片后所得到的碼流數(shù)據(jù)偏移地址通過DMA及寄存器REG模塊傳給頂層模塊,當(dāng)發(fā)現(xiàn)緩存區(qū)的有效數(shù)據(jù)小于整個碼流緩存區(qū)容量的1/4時,頂層模塊執(zhí)行緩存區(qū)的刷新操作,將碼流數(shù)據(jù)從DRAM讀入到SRAM中;否則不執(zhí)行刷新操作。設(shè)定碼流緩存區(qū)的1/4大小為判定依據(jù)是因為考慮到每幀只劃一個片時所對應(yīng)的最大片數(shù)據(jù)量。緩存區(qū)的刷新仍通過DMA模塊完成,且刷新操作要使得碼流數(shù)據(jù)填充滿所有的緩存區(qū)空間。
本文對多標準視頻解碼器的頂層結(jié)構(gòu)的重用方案進行了分析和設(shè)計。通過cmodel的驗證,設(shè)計的頂層方案可實現(xiàn)正確解碼。該方案對于多標準解碼器的軟硬件協(xié)同設(shè)計有一定的指導(dǎo)意義。
[1]Draft ITU-T recommendation and final draft international standard of joint video specification(ITU-T Rec.H.264/ISO/IEC 14496-10 AVC)[S].2003.
[2]數(shù)字音視頻編碼技術(shù)標準工作組.信息技術(shù) 先進音視頻編碼 第2部分:視頻[S].2006.
[3]SMPTE,VC-1 compressed video bitstream formatand decoding process[S].2005.
[4]謝朝輝.多模視頻解碼器復(fù)用方法研究與運動補償?shù)膶崿F(xiàn)[D].蘭州:蘭州大學(xué),2006.
[5]汪毅,林祖?zhèn)?新一代多模視頻解碼芯片的硬件結(jié)構(gòu)設(shè)計[D].成都:電子科技大學(xué),2008.
[6]畢厚杰.新一代視頻壓縮編碼標準——H.264/AVC[M].北京:人民郵電出版社,2005.
[7]李玖玲,鄧記才.H.264/AVC中運動估計搜索算法研究[J].電視技術(shù),2009,33(S1):38-39.