天天看點

x264模式選擇算法

H264運動搜尋和模式選擇主要在函數x264_macroblock_analyse() 中執行。這個函數執行對一個宏塊的分析,确定一個宏塊的編碼模式和運動矢量。這個函數占到了編碼時間的60%以上。

這個函數的主要流程如下:(引用自雷宵骅的部落格)

(1)如果目前是I Slice,調用x264_mb_analyse_intra()進行Intra宏塊的幀内預測模式分析。

(2)如果目前是P Slice,則進行下面流程的分析:

a)調用x264_macroblock_probe_pskip()分析是否為Skip宏塊,如果是的話則不再進行下面分析。

b)調用x264_mb_analyse_inter_p16x16()分析P16x16幀間預測的代價。

c)調用x264_mb_analyse_inter_p8x8()分析P8x8幀間預測的代價。

d)如果P8x8代價值小于P16x16,則依次對4個8x8的子宏塊分割進行判斷:

i.調用x264_mb_analyse_inter_p4x4()分析P4x4幀間預測的代價。

ii.如果P4x4代價值小于P8x8,則調用 x264_mb_analyse_inter_p8x4()和x264_mb_analyse_inter_p4x8()分析P8x4和P4x8幀間預測的代價。

e)如果P8x8代價值小于P16x16,調用x264_mb_analyse_inter_p16x8()和x264_mb_analyse_inter_p8x16()分析P16x8和P8x16幀間預測的代價。

f)此外還要調用x264_mb_analyse_intra(),檢查目前宏塊作為Intra宏塊編碼的代價是否小于作為P宏塊編碼的代價(P Slice中也允許有Intra宏塊)。

(3)如果目前是B Slice,則進行和P Slice類似的處理。

我們提取P幀時的流程,用流程圖歸納它的主要算法:

流程中一些部分是由參數i_mbrd控制開或者關,這裡隐去這些細節。

一些不太重要的流程也被隐去。

x264模式選擇算法

圖一 宏塊分析流程

繼續閱讀