天天看點

【H.264/AVC視訊編解碼技術詳解】十二、解析H.264碼流的宏塊結構(下):H.264幀内編碼宏塊的預測結構

在以H.264格式編碼的視訊碼流中,宏塊結構必然包含預測結構(I_PCM模式除外),該結構中包含了像素塊的預測模式等資訊。對于不同預測模式的宏塊,其預測結構是不同的。從上篇的宏塊結構中,可以看出,對于部分模式,預測資訊儲存于mb_pred()結構中,而對于另一部分模式則采用sub_mb_pred()結構。

【H.264/AVC視訊編解碼技術詳解】十二、解析H.264碼流的宏塊結構(下):H.264幀内編碼宏塊的預測結構

在我們本系列的H.264分析器SimpleH264Analyzer項目中預設的全I幀測試碼流中,我們所分析的第一個IDR幀的第一個宏塊,其mb_type為I_NxN。實際上,對于除了I_PCM模式之外的所有Intra宏塊,其預測結構均采用mb_pred()結構。

在标準文檔中,mb_pred()的定義如下表所示(隻看Intra模式下):

【H.264/AVC視訊編解碼技術詳解】十二、解析H.264碼流的宏塊結構(下):H.264幀内編碼宏塊的預測結構

從表中可以看出,Intra預測模式的結構主要有兩組,分别表示4×4和8×8模式,每一組包含兩個元素,分别表示預測模式辨別位和預測模式值,以及最後的色度分量預測模式。

prev_intra4x4_pred_mode_flag和prev_intra8x8_pred_mode_flag:表示幀内預測模式預測辨別。如果該辨別位為1,表示幀内預測模式的預測值就是實際的模式,否則就需要另外傳遞實際的幀内預測模式。

prev_intra4x4_pred_mode_flag和prev_intra8x8_pred_mode_flag:表示額外傳遞的實際幀内預測模式。

intra_chroma_pred_mode:表示色度分量的預測模式,取值範圍為[0,3],分别代表DC、水準、垂直和平面模式。

在我們的demo中解析這部分的代碼以下面的代碼段實作:

更詳細的資訊可以到github下載下傳完整的工程:

<a href="https://github.com/yinwenjie/SimpleH264Analyzer">https://github.com/yinwenjie/SimpleH264Analyzer</a>

繼續閱讀