1. 程式人生 > >HEVC程式碼學習19:MV、MVD、MVP概念解析

HEVC程式碼學習19:MV、MVD、MVP概念解析

在程式碼閱讀中,可以看到MV、MVD、MVP三個概念,在開始學習的時候就很糊塗,一直買具體來看下,也找不到具體在哪裡有講解,現在來關注學習一下。

先來逗比一下,名詞解析:
MVP——most valuable player,那MVD是什麼呢?most valuable dog。好冷。。。。。算了開始正題吧。

概念

MV在之前已經詳細學習過了,是通過當前幀和參考幀進行搜尋求出的,是一個指示最佳匹配塊位置的向量。

對每一個塊的MV都進行編碼,那麼將花費很多的位元數,特別是小尺寸塊。空間相鄰的塊之間存在相關性,因此可以根據鄰近已編碼的塊進行預測,預測得到的運動向量即為MVP。時域上也是存在相關性的,因此也可以進行時域預測,可以得到時域MVP。

為了進一步減少編碼位元數,採用了殘差編碼,即對當前MV和預測MV(MVP)的差值進行編碼,這個差值即為MVD。

發展

在H.264中,使用當前塊的左側、上方、右上方的塊的中值作為當前塊的MV預測值,即MVP。
這裡寫圖片描述
MVP= median(MV1,MV2,MV3)

在HEVC中增加了merge和AMVP。
merge下直接用候選塊的MV作為當前塊的MV,即當前塊與候選塊共用一個MV,從而節省了開銷,此時不存在MVD。當MVD=0時會啟動merge模式。merge模式下,編解碼器會依照相同的規則建立候選列表,因此只需要傳輸候選列表的索引。
merge部分的程式碼目前我只看了getInterMergeCandidates,用於構建候選列表,見:

http://blog.csdn.net/lin453701006/article/details/71436116

AMVP是從時域和空域中選定多個候選塊組成一個集合,在該集合中尋找最優的MV匹配,選出最優預測MV進行差分編碼。AMVP模式下需要傳輸最優候選塊的索引、參考幀下標、以及MVD。
AMVP相關函式見:
http://blog.csdn.net/lin453701006/article/details/72842344

程式碼中的位置