HEVC的幀間預測解碼(1)

HEVC的幀間預測解碼(1)

HEVC的幀間預測解碼(2)

HEVC的幀間預測解碼(3)

HEVC的幀間預測解碼(4) 

HEVC的幀間預測解碼(5)



1.概述   

       

     HEVC的幀間預測過程的複雜程度實在是令人髮指。

     我從解碼角度詳細分析一下,由於細節非常多,難免有錯誤或者遺漏。


所以,請結合標準閱讀本系列,否則很難理解


     幀間預測(inter prediction)過程爲解碼提供幀間預測值(predSamples[x][y]),對應標準8.5.2中的內容。
     簡單說,幀間預測就是以預測塊(PU,prediction unit)爲單位,計算PU的運動向量(MV,motion vector),並根據MV從對應的參考幀中獲得預測值的過程。

     個人覺得此過程的焦點和難點就在於兩點:1.參考隊列緩存區(DPB)的維護 2.MV的計算。

     其中第1點在文章HEVC的參考隊列解碼中已經詳細介紹了。

      本文着重介紹第2點,mv的計算。

2.PU相關

    
      PU(prediction unit)預測單元,是進行幀間預測和運動補償的基本單元。其劃分的方法在文章HEVC標準中的圖像分割(2)中已經介紹過了。如圖,大的方框代表CU,共有8中分塊方式。
   
圖1 PU的分塊

PU(prediction unit)預測單元,是進行幀間預測和運動補償的基本單元。每一個PU中包含的參數有:
merge_flag:1表示當前PU的mvp計算採用merge模式,0表示不採用merge模式,默認爲0,當包含PU的CU爲skip模式時,merge_flag爲1。
merge_idx:給出在merge模式時,從merging mvp候選列表(merging candidate  list,在本文中簡稱MCL)中選取mvp所使用的index。
inter_pred_idc:給出PU的參考方向。0表示PRED_L0, 前向預測;1表示PRED_l1, 後向預測;2表示PRED_BI,雙向預測(除了4x8和8x4的PU,這一點在後面會解釋)。
ref_idx_l0:指出當前PU在reflist0(參考隊列0,詳見HEVC的參考隊列解碼)中的參考幀。
ref_idx_l1指出當前PU在reflist1(參考隊列1,詳見HEVC的參考隊列解碼)中的參考幀。
mvp_l0_flag:指出在非merge模式時,從mvp候選列表(motion vector predictor candidate list 0)中選取mvp所使用的index。
mvp_l1_flag指出在非merge模式時,從mvp候選列表(motion vector predictor candidate list 1)中選取mvp所使用的index。

除了上述的參數,我們的已知條件還有:當前CU的左上角座標 (  xCb,  yCb  ),當前PU的左上角座標(  xPb,  yPb  ),CU的尺寸nCbS,PU的尺寸(nPbW X nPbH),PU的partIdx。
下面分成merge模式和非merge模式進行mv的計算。

3.Merge模式的mv計算


3.1 Merge模式整體流程


當PU的merge_flag等於1時,採用merge模式計算mv。
前置處理,當Log2ParMrgLevel >2 且nCbS == 8時有:

      ( xPb, yPb ) = ( xCb, yCb )
      nPbW = nPbH= nCbS
      partIdx = 0



就是說,PU所在的CTU尺寸爲8x8且Log2ParMrgLevel >2時,PU的座標和尺寸都用CU的代替。
參數Log2ParMrgLevel 位於pps中,含義就是merge模式中多大的尺寸的塊內部的PU可以平行(parallel)做mv運算。
比如Log2ParMrgLevel = 6,那麼64x64內PU的merge模式的mv可以同時計算。具體的爲什麼能平行做,我們將在後面解釋。
Merge模式的mv計算用一句話概括就是:組成一個mv候選值的列表,然後根據merge_idx從列表裏選擇出mv。

其中列表中的每一項候選值都包含如下元素:
availableFlag,refIdxLX,predFlagLX,mvLX(其中X等於0,1,分別代表前後向)
比如時域候選值(俗稱的collocated)就包含(availableFlagColrefIdxLXColpredFlagLXColmvLXCol

Merge模式的具體流程如下:

M1.計算空域候選值(spatial merging candidates)

M2.將時域候選值(temporal merging candidates)的refIdx,即refIdxLXCol(X等於0,或者1)設爲0.

M3.計算前向參考的時域候選值的其他元素。

M4.如果當前slice爲B,再計算一次後向參考的時域候選值。

M5.組成MCL(merging candidate list

M6.將變量numCurrMergeCand和numOrigMergeCand設爲MCL中候選值的個數。

M7.如果當前slice爲B,計算組合雙向預測參考值(combined bi-predictive merging candidates)。

M8.計算零運動向量參考值(zero motion vector merging candidates)。

M9.用merge_idx從MCL中選出MCL[merge_idx]。mvLX,refIdxLX, predFlagLX等於參考值的對應元素。

M10.如果predFlagL0等於1,predFlagL1等於1,且PU的尺寸爲4x8和8x4,則
refIdxL1 = −1,predFlagL1 = 0。什麼意思呢?只有前向參考,後向參考被棄掉了。所以4x8和8x4的PU沒有可能雙向參考。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章