從HM4.0開始,有AMP模式的快速算法的標籤:
#define AMP_ENC_SPEEDUP 1 ///< encoder only speed-up by AMP mode skipping
#if AMP_ENC_SPEEDUP
#define AMP_MRG 1 ///< encoder only force merge for AMP partition (no motion search for AMP)
#endif
關於AMP的快速算法的兩個標籤AMP_ENC_SPEEDUP
和AMP_MRG
默認均是打開的。
先講開關AMP_ENC_SPEEDUP
。
若AMP_ENC_SPEEDUP
快速模式不打開,則直接編碼四種AMP模式:
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU );
rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD );
rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N );
rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N );
rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
若AMP_ENC_SPEEDUP
快速模式打開,則用函數TEncCu::deriveTestModeAMP
產生編碼相應的AMP模式的條件,滿足條件時才調用xCheckRDCostInter。具體如下[1]:
若bTestAMP_Hor爲真,則需要判斷SIZE_2NxnU、SIZE_2NxnD兩種模式;若bTestAMP_Ver爲真,則需要判斷SIZE_nLx2N、SIZE_nRx2N兩種模式。
開關AMP_MRG用於決定哪些情況需要嘗試merge模式的AMP劃分,變量變成了bTestMergeAMP_Hor和bTestMergeAMP_Ver。
參考文獻:
[1] 浙江大學博士論文《HEVC低複雜度編碼優化算法研究》,2013,沈曉琳