專利名稱:基于avs運動補(bǔ)償?shù)倪\動矢量計算裝置的硬件實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字視頻編解碼技術(shù)領(lǐng)域,具體是一種基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的硬件實現(xiàn)方法。
背景技術(shù):
數(shù)字音視頻編解碼技術(shù)標(biāo)準(zhǔn)工作組(AVS工作組)由國家信息產(chǎn)業(yè)部科學(xué)技術(shù)司于2002年6月批準(zhǔn)成立。工作組的任務(wù)是面向我國的信息產(chǎn)業(yè)需求,聯(lián)合國內(nèi)企業(yè)和科研機(jī)構(gòu),制(修)訂數(shù)字音視頻的壓縮、解壓縮、處理和表示等共性技術(shù)標(biāo)準(zhǔn),為數(shù)字音視頻設(shè)備與系統(tǒng)提供高效經(jīng)濟(jì)的編解碼技術(shù),服務(wù)于高分辨率數(shù)字廣播、高密度激光數(shù)字存儲媒體、無線寬帶多媒體通訊、互聯(lián)網(wǎng)寬帶流媒體等重大信息產(chǎn)業(yè)應(yīng)用。
由該工作組制定的AVS音視頻編解碼技術(shù)標(biāo)準(zhǔn)的視頻部分于2006年2月22日被頒布為中華人民共和國國家標(biāo)準(zhǔn),標(biāo)準(zhǔn)號GB/T 20090.2-2006,于2006年3月1日起實施。
運動補(bǔ)償作為運動估計的逆運算,是AVS解碼算法最重要的組成部分之一。運動估計和運動補(bǔ)償旨在消除視頻數(shù)據(jù)幀與幀之間的時間冗余,從而達(dá)到視頻數(shù)據(jù)壓縮的目的。
為了達(dá)到高標(biāo)準(zhǔn)的視頻壓縮質(zhì)量,AVS音視頻編解碼技術(shù)標(biāo)準(zhǔn)共有16×16,16×8,8×16和8×8四種宏塊劃分方式,對每一個劃分后的子塊分配一組運動矢量,每組運動矢量根據(jù)其時間相鄰塊或空間相鄰塊的運動矢量計算得到,具體細(xì)節(jié)可參考AVS標(biāo)準(zhǔn)的文檔和參考軟件。
運動矢量的計算是一個計算量相對較大的模塊,采用多種宏塊劃分的目的在于提高圖像的壓縮率,但是宏塊劃分的不統(tǒng)一,給硬件在讀取相鄰參考塊以及運動矢量存儲上都帶來了控制復(fù)雜,存儲器利用率低等問題。
經(jīng)對現(xiàn)有技術(shù)文獻(xiàn)的檢索,發(fā)現(xiàn)王占輝等人在電子器件,2005(9)所發(fā)表的“MPEG-4運動補(bǔ)償處理器的VLSI結(jié)構(gòu)設(shè)計”中提到一種用于MPEG-4運動矢量計算的方法,該方法將16×16宏塊和8×8塊均統(tǒng)一為8×8塊進(jìn)行計算,如果只有宏塊的運動向量就將該宏塊的四個子塊的運動向量都等于該宏塊的運動向量,但是,對于如AVS等宏塊劃分比較復(fù)雜的編碼方式,解碼器還需要一個合理的控制機(jī)制來調(diào)度各個子塊的計算和結(jié)果存儲。
發(fā)明內(nèi)容
本發(fā)明為了解決上述問題,提供一種基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的硬件實現(xiàn)方法。本發(fā)明主要面向高清晰度視頻解碼專用芯片的設(shè)計,在對計算單元和存儲單元進(jìn)行合理劃分的基礎(chǔ)上,將各種劃分類型的宏塊都統(tǒng)一到8×8塊進(jìn)行計算和存儲,于是可在不擴(kuò)大硬件資源使用量的情況下大規(guī)模提高了計算速度。使用該方法實現(xiàn)運動向量計算裝置,可在確保視頻實時播放的前提下,有效的降低系統(tǒng)時鐘頻率。
本發(fā)明是通過以下的技術(shù)方案實現(xiàn)的,包括以下步驟(1)預(yù)解碼依據(jù)當(dāng)前解碼宏快所在的幀類型以及宏塊類型編號,給出每個宏塊的劃分方式。
(2)頂層計數(shù)將一個宏塊劃分為4個8×8的子塊,并對這4個子塊按照左上、右上、左下、右下得順序從0到3進(jìn)行編號,依據(jù)當(dāng)前宏塊的劃分方式,采用計數(shù)模塊對當(dāng)前解碼的8×8子塊進(jìn)行計數(shù),具體的計數(shù)方法為a)當(dāng)前宏塊為16×16劃分時,計數(shù)值始終為0;b)當(dāng)前宏塊為16×8劃分時,若當(dāng)前計數(shù)值為0,則下一個計數(shù)值為2,若當(dāng)前計數(shù)值為2,則下一個計數(shù)值為0;c)當(dāng)前宏塊為8×16劃分時,若當(dāng)前計數(shù)值為0,則下一個計數(shù)值為1,若當(dāng)前計數(shù)值為1,則下一個計數(shù)值為0;d)當(dāng)前宏塊為8×8劃分時,若當(dāng)前計數(shù)值為0、1或2,則下一個計數(shù)值為當(dāng)前計數(shù)值加1,若當(dāng)前計數(shù)值為3,則下一個計數(shù)值為0。
(3)計算運動矢量根據(jù)當(dāng)前解碼的8×8子塊的計數(shù)值以及當(dāng)前解碼宏塊的宏塊號,到運動矢量存儲器中讀取空間相鄰8×8子塊和時間相鄰8×8子塊的運動失量參考值,用該參考值計算當(dāng)前8×8子塊的運動矢量,具體計算方法參照《信息技術(shù)先進(jìn)音視頻編碼第二部分視頻》。
(4)存儲計算結(jié)果根據(jù)當(dāng)前解碼的8×8子塊的計數(shù)值,當(dāng)前解碼宏塊的宏塊號以及當(dāng)前宏塊的宏塊劃分方式,采用結(jié)果存儲模塊將運動矢量的計算結(jié)果寫到運動矢量存儲器的相應(yīng)位置,具體存儲方式為a)宏塊劃分為16×16時,將計算結(jié)果同時寫回到0、1、2、3四個8×8子塊對應(yīng)的位置上;b)宏塊劃分為16×8時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、1兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為2,則將結(jié)果同時寫回到2、3兩個子塊對應(yīng)的位置上;c)宏塊劃分為8×16時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、2兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為1,則將結(jié)果同時寫回到1、3兩個子塊對應(yīng)的位置上;d)宏塊劃分為8×8時,將結(jié)果寫回到與當(dāng)前計數(shù)值相對應(yīng)的8×8子塊的位置上。
本發(fā)明上述方法主要面向AVS高清晰度視頻解碼,但又不局限于解碼AVS高清晰度視頻。通過改變步驟其中對最小解碼單位以及宏塊中對最小解碼單位的編號,可以使該實現(xiàn)方法適用于其它宏塊劃分方式的視頻解碼器,并同時保證硬件資源的合理分配。
特別的,本發(fā)明與前文中所提到的王占輝等人提出的方法相比,對多種宏塊劃分情況下,各個子塊的計算和存儲的次序進(jìn)行詳細(xì)規(guī)劃,具有很強(qiáng)的擴(kuò)展性。
由上可知,本發(fā)明所述的一種基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的VLSI實現(xiàn)方法,通過對計算單元和存儲單元進(jìn)行合理劃分,采用8×8塊級流水線結(jié)構(gòu),將各種劃分類型的宏塊均統(tǒng)一到8×8子塊進(jìn)行計算和存儲。使用該方法實現(xiàn)運動向量計算裝置,可在確保視頻實時播放的前提下,有效的降低了系統(tǒng)時鐘頻率。
圖1是本發(fā)明實施例使用的運動矢量計算裝置的總體結(jié)構(gòu);圖2是AVS宏塊劃分的4種類型;圖3是每個宏塊中4個8×8子塊的標(biāo)記方式;圖4是四種宏塊劃分方式下當(dāng)前解碼宏塊的空間相鄰子塊;其中E是當(dāng)前解碼的8×8子塊,A、B、C、D是當(dāng)前解碼子塊的空間相鄰子塊。
圖5是當(dāng)前解碼宏塊的時間相鄰子塊;其中E是當(dāng)前解碼的8×8子塊,E是當(dāng)前解碼字塊的時間相鄰子塊,即顯示順序的后一幀上與當(dāng)前解碼子塊相對應(yīng)的塊。
具體實施例方式
結(jié)合本發(fā)明技術(shù)方案以及附圖提供以下實施例實施例1,本實施例使用的運動矢量計算裝置的總體結(jié)構(gòu),如圖1所示,共包括頂層計數(shù)模塊、預(yù)解碼模塊、運動矢量計算模塊、計算結(jié)果存儲模塊四個功能模塊以及一個分別于運動矢量計算模塊和計算結(jié)果存儲模塊相連的運動矢量存儲器。具體說明如下預(yù)解碼模塊依據(jù)外部輸入的當(dāng)前解碼宏塊所在的幀類型以及宏塊類型編號,得出當(dāng)前宏塊的劃分類型,劃分類型如附圖2所示,用兩個比特來表示,輸出給頂層計數(shù)控制模塊和計算結(jié)果存儲模塊。
頂層計數(shù)模塊完成計數(shù)控制功能,該模塊接收到外部的mv計算起始信號后開始計數(shù),每收到一個計算結(jié)果存儲模塊發(fā)出的子塊mv完成信號后,依據(jù)宏塊劃分方式對計數(shù)器賦新的計數(shù)值,具體計數(shù)規(guī)則為當(dāng)前宏塊為16×16劃分時,接收到8×8子塊完成信號后,計數(shù)值清0;當(dāng)前宏塊為16×8劃分時,若當(dāng)前計數(shù)值為0,收到8×8子塊完成信號后,計數(shù)值增加到2,若當(dāng)前計數(shù)值為2,收到8×8子塊完成信號后,計數(shù)值清0;當(dāng)前宏塊為8×16劃分時,若當(dāng)前計數(shù)值為0,收到8×8子塊完成信號后,計數(shù)值增加到1,若當(dāng)前計數(shù)值為1,收到8×8子塊完成信號后,計數(shù)值清0;當(dāng)前宏塊為8×8劃分時,若當(dāng)前計數(shù)值為0、1或2,收到8×8子塊完成信號后,計數(shù)值加1,若當(dāng)前計數(shù)值為3,收到8×8子塊完成信號后,計數(shù)值清0。其中各個8×8子塊的序號標(biāo)記方式如附圖3所示。
運動矢量計算模塊該模塊完成運動矢量的計算,根據(jù)計數(shù)控制模塊輸出的計數(shù)值以及外部輸入的運動矢量參數(shù)信息,從運動矢量存儲器中讀取如附圖4的空間相鄰8×8子塊和如附圖5的時間相鄰8×8子塊的運動失量參考值,用該參考值計算當(dāng)前8×8子塊的運動矢量。
計算結(jié)果存儲模塊該模塊將計算結(jié)果輸出并寫到運動矢量存儲器中,然后返回8×8子塊完成信號給頂層計數(shù)控制模塊,存儲方法為依賴于預(yù)解碼模塊輸出的宏塊劃分方式,具體存儲方法為宏塊劃分為16×16時,將計算結(jié)果同時寫回到0、1、2、3四個8x8子塊對應(yīng)的位置上;宏塊劃分為16×8時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、1兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為2,則將結(jié)果同時寫回到2、3兩個子塊對應(yīng)的位置上;宏塊劃分為8x16時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、2兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為1,則將結(jié)果同時寫回到1、3兩個子塊對應(yīng)的位置上;宏塊劃分為8×8時,將結(jié)果寫回到與當(dāng)前計數(shù)值相對應(yīng)的8×8子塊的位置上。
如上所述的一種AVS運動矢量計算裝置的VLSI實現(xiàn),解碼一個P幀宏塊最少需要15個時鐘周期(I8×8類型宏塊),最多需要63個時鐘周期(P8×8類型宏塊),解碼一個B幀宏塊最少需要15個時鐘周期(I8×8類型宏塊),最多需要127個時鐘周期(B8×8類型宏塊)。在不擴(kuò)大硬件資源使用量的情況下大規(guī)模提高了計算速度,達(dá)到了實時解碼的要求。
權(quán)利要求
1.一種基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的VLSI實現(xiàn)方法,其特征在于,包括以下步驟(1)預(yù)解碼依據(jù)當(dāng)前解碼宏快所在的幀類型以及宏塊類型編號,給出每個宏塊的劃分方式;(2)頂層計數(shù)將一個宏塊劃分為4個8x8的子塊,并對這4個子塊按照左上、右上、左下、右下得順序從0到3進(jìn)行編號,依據(jù)當(dāng)前宏塊的劃分方式,采用計數(shù)模塊對當(dāng)前解碼的8x8子塊進(jìn)行計數(shù);(3)計算運動矢量根據(jù)當(dāng)前解碼的8x8子塊的計數(shù)值以及當(dāng)前解碼宏塊的宏塊號,到運動矢量存儲器中讀取空間相鄰8x8子塊和時間相鄰8x8子塊的運動失量參考值,用該參考值計算當(dāng)前8x8子塊的運動矢量;(4)存儲計算結(jié)果根據(jù)當(dāng)前解碼的8x8子塊的計數(shù)值,當(dāng)前解碼宏塊的宏塊號以及當(dāng)前宏塊的宏塊劃分方式,采用結(jié)果存儲模塊將運動矢量的計算結(jié)果寫到運動矢量存儲器的相應(yīng)位置。
2.根據(jù)權(quán)利要求1所述的基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的VLSI實現(xiàn)方法,其特征是,所述的依據(jù)當(dāng)前宏塊的劃分方式,采用計數(shù)模塊對當(dāng)前解碼的8x8子塊進(jìn)行計數(shù),具體的計數(shù)方法為a)當(dāng)前宏塊為16x16劃分時,計數(shù)值始終為0;b)當(dāng)前宏塊為16x8劃分時,若當(dāng)前計數(shù)值為0,則下一個計數(shù)值為2,若當(dāng)前計數(shù)值為2,則下一個計數(shù)值為0;c)當(dāng)前宏塊為8x16劃分時,若當(dāng)前計數(shù)值為0,則下一個計數(shù)值為1,若當(dāng)前計數(shù)值為1,則下一個計數(shù)值為0;d)當(dāng)前宏塊為8x8劃分時,若當(dāng)前計數(shù)值為0、1或2,則下一個計數(shù)值為當(dāng)前計數(shù)值加1,若當(dāng)前計數(shù)值為3,則下一個計數(shù)值為0。
3.根據(jù)權(quán)利要求1所述的基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的VLSI實現(xiàn)方法,其特征是,所述的存儲計算結(jié)果,具體存儲方式為a)宏塊劃分為16x16時,將計算結(jié)果同時寫回到0、1、2、3四個8x8子塊對應(yīng)的位置上;b)宏塊劃分為16x8時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、1兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為2,則將結(jié)果同時寫回到2、3兩個子塊對應(yīng)的位置上;c)宏塊劃分為8x16時,若計數(shù)器當(dāng)前計數(shù)值為0,則將結(jié)果同時寫回到0、2兩個子塊對應(yīng)的位置上,若計數(shù)器當(dāng)前計數(shù)值為1,則將結(jié)果同時寫回到1、3兩個子塊對應(yīng)的位置上;d)宏塊劃分為8x8時,將結(jié)果寫回到與當(dāng)前計數(shù)值相對應(yīng)的8x8子塊的位置上。
全文摘要
一種基于AVS運動補(bǔ)償?shù)倪\動矢量計算裝置的硬件實現(xiàn)方法,屬于數(shù)字視頻編解碼技術(shù)領(lǐng)域。方法為預(yù)解碼;頂層計數(shù)將一個宏塊劃分為4個8×8的子塊,并對這4個子塊進(jìn)行編號,依據(jù)當(dāng)前宏塊的劃分方式,采用計數(shù)模塊對當(dāng)前解碼的8×8子塊進(jìn)行計數(shù);計算運動矢量;存儲計算結(jié)果根據(jù)當(dāng)前解碼的8×8子塊的計數(shù)值,當(dāng)前解碼宏塊的宏塊號以及當(dāng)前宏塊的宏塊劃分方式,采用結(jié)果存儲模塊將運動矢量的計算結(jié)果寫到運動矢量存儲器的相應(yīng)位置。本發(fā)明將各種劃分類型的宏塊都統(tǒng)一到8×8塊進(jìn)行計算和存儲,在不擴(kuò)大硬件資源使用量的情況下大規(guī)模提高了計算速度,實現(xiàn)運動向量計算裝置,可在確保視頻實時播放的前提下,有效的降低了系統(tǒng)時鐘頻率。
文檔編號H04N7/50GK1874518SQ200610027980
公開日2006年12月6日 申請日期2006年6月22日 優(yōu)先權(quán)日2006年6月22日
發(fā)明者邵楠, 劉佩林 申請人:上海交通大學(xué)