新聞中心

EEPW首頁 > 電源與新能源 > 設(shè)計應(yīng)用 > H.264/AVC解碼器運動矢量預(yù)測模塊設(shè)計與應(yīng)用

H.264/AVC解碼器運動矢量預(yù)測模塊設(shè)計與應(yīng)用

作者: 時間:2016-12-09 來源:網(wǎng)絡(luò) 收藏

、C塊的參考索引RefIdxA[f/b]、RefIdxB[f/b]、RefIdxC[f/b]中大于0的最小值來預(yù)測出當(dāng)前分割的參考索引號ReFrame[f/b],如果RefIdxA[f/b]、RefIdxB[f/b]、RefIdxC[f/b]全部小于0,則ReFrame[f/b]取-1;然后用ReFrame[f/b]與A、B、C塊的參考索引進行對比,如果ReFrame[f/b]只是A、B、C其中的1個,現(xiàn)令其為SelectedBlk的索引號相同,則當(dāng)前分割的運動矢量中,(MVx,MVy)取SelectedBlk的(MVxS,MVyS);否則取A、B、C塊運動矢量的中值。

本文引用地址:http://2s4d.com/article/201612/328516.htm

在空間模式及復(fù)制模式下,需要使用空間上相鄰的上邊及左邊的4×4塊的運動矢量信息來對空間模式、復(fù)制模式中的運動矢量以及ReadMV模式中的MVp進行計算。針對非MBAFF模式和MBAFF模式所需要的block的運動矢量信息分析如下:

(1)在非MBAFF模式時,硬件實現(xiàn)需要維持1個4×4 block行,以及當(dāng)前待解碼宏塊的左邊4個block列的運動矢量信息。解碼器如果需要支持1 920×1 280分辨率視頻流的解碼,則就要存儲(1 920/4+4+1)=485個4×4 block的運動矢量信息。

(2)在MBAFF模式時,由于宏塊對的出現(xiàn)使得所需要的block信息相比非MBAFF模式的情況更加復(fù)雜。硬件實現(xiàn)時需要維持2個4×4 block行,以及當(dāng)前待解碼宏塊的左邊宏塊對的8個block列的運動矢量信息。解碼器如果需要支持1 920×1 280分辨率視頻流的解碼,則就要存儲(2×(1920/4)+8+1)=969個4×4 block的運動矢量信息。

設(shè)計中將這部分信息存放在片內(nèi)SRAM中。此外,為了便于讀取以及節(jié)省存取時間,設(shè)計中將1個block的運動矢量信息存放于SRAM 1個地址單元中。1個地址單元的數(shù)據(jù)結(jié)構(gòu)需要存放前向參考索引RefIdxF、后向參考索引RefIdxB、前向水平運動矢量MVxF、前向垂直運動矢量MVyF、后向水平運動矢量MVxB、后向垂直運動矢量MVyB。

通過以上分析在硬件實現(xiàn)時采用如圖11所示的結(jié)構(gòu)對該模塊進行設(shè)計。設(shè)計中使用1個Local Sram作為1個Line buffer來對空間模式及復(fù)制模式下需要使用到的空間上相鄰塊的運動矢量信息進行存儲。計算完畢后得出完成信號給地址生成器以便其產(chǎn)生相應(yīng)的地址將解碼好的數(shù)據(jù)存回Local Sram中供后續(xù)解碼使用。

2.2 時間模式重建算法和硬件設(shè)計

由圖可見,時間模式運動矢量重建的步驟為:

(1)當(dāng)前待解的分割先在List[1][0]中找到與自己位置相對應(yīng)的分割相應(yīng)的、在List[0]中的參考圖像List[0][x],將該參考圖像作為當(dāng)前分割的List[0]參考。

(2)找出List[1][0]圖像中與當(dāng)前分割位置相對應(yīng)的分割指向List[0][x]的運動矢量MVCol[2]和參考索引refIdxCol[2]。

(3)根據(jù)當(dāng)前分割所在圖像與List[0][x]圖像的播放順序POC的差值tb[2]、List[0][x]與List[1][0]的POC的差值td[2],通過如下公式量化出當(dāng)前分割指向List[0][x]圖像的運動矢量MVL0以及指向List[1][0]的運動矢量MVL1。

tb=Clip3(-128,127,DiffPicOrderCnt(currPicOrField, pic0))

td=Clip3(-128,127,DiffPicOrderCnt(pic1,pic0))

tx=(16 384+Abs(td/2))/td

DistScaleFactor=Clip3(-1024,1023,(tb*tx+32)》6)

MVL0=(DistScaleFactor*mvCol+128)》8

MVL1=MVL0-MVCol

(4) 根據(jù)refIdxCol和當(dāng)前圖像是幀或場圖像標(biāo)志field_pic_flag以及當(dāng)前宏塊是幀宏塊或場宏塊來計算refIdxL0:

refIdxL0=((refIdxCol<0)?0:MapColToList0(refIdxCol))

refIdxL1=0

在非MBAFF模式時,圖像類型可以是FRM和FLD表示當(dāng)前是幀或場;在MBAFF模式時,圖像類型以AFRM表示當(dāng)前圖像是宏塊級幀場自適應(yīng)。

在MBAFF模式時,首先根據(jù)當(dāng)前圖像類型PicCodingStruct(CurrPic)[2]和參考圖像類型PicCodingStruct(colPic)[2]來計算1個宏塊地址mbAddrX,然后再根據(jù)mbAddrX是否為場宏塊以及當(dāng)前宏塊是否為場宏塊來計算出在List[1][0]中與當(dāng)前分割位置相對應(yīng)的宏塊mbAddrCol,最后得到其中相應(yīng)宏塊分割mbAddrColmbPartIdxColsubMbPartIdxCol的運動矢量MVCol和參考索引refIdxCol,MVCol和refIdxCol取值為mbAddrCol相應(yīng)分割的前向或者后向運動矢量和參考索引。

因此,對于已經(jīng)解碼的圖像需要存儲每個宏塊的運動矢量、參考索引、宏塊類型(mbType、subMbType)和宏塊的幀場標(biāo)志mb_field_decoding_flag[2],以用于當(dāng)前圖像宏塊的運動矢量預(yù)測。

時間模式下運動矢量重建的硬件實現(xiàn)框圖如圖13所示。設(shè)計中采用了空間模式以及復(fù)制模式硬件實現(xiàn)所用的Local Sram。這里還在Local Sram中開辟了一段新的存儲空間,用于存放所需要的圖像層信息。與空間及復(fù)制模式一樣,重建后的運動矢量信息寫回到Local Sram中供后續(xù)解碼使用。

由運算公式可見時間模式下運動矢量的重建涉及乘法、除法、加法以及減法運算,這些運算對于硬件實現(xiàn)將會帶來很大的開銷,所以設(shè)計中將差值運算拆分成流水線的形式進行運算。

本文介紹了H.264/AVC的宏塊自適應(yīng)幀場模式在P幀和B幀的幀間預(yù)測算法,H.264支持1/4或1/8像素精度的運動矢量。在1/4像素精度時可使用6抽頭濾波器來減少高頻噪聲,對于1/8像素精度的運動矢量,可使用更為復(fù)雜的8抽頭的濾波器。在進行運動估計時,編碼器還可選擇"增強"內(nèi)插濾波器來提高預(yù)測的效果。分析了運動矢量預(yù)測模塊的硬件實現(xiàn),提出了可行的數(shù)據(jù)組織結(jié)構(gòu)和硬件實現(xiàn)方法。


上一頁 1 2 下一頁

關(guān)鍵詞: H.264AVC解碼器運動矢

評論


技術(shù)專區(qū)

關(guān)閉