ref: 49fb042f21e841948454f45b6b74913bd80cc026
parent: 0a3db78bb9ffe7b3f668ca6c95a25bc2f96e3ff4
author: Sijia Chen <[email protected]>
date: Thu Jul 3 07:01:02 EDT 2014
add bgd fix to camera route as well to avoid visible artifact when using fake content in video
--- a/codec/encoder/core/inc/svc_mode_decision.h
+++ b/codec/encoder/core/inc/svc_mode_decision.h
@@ -68,9 +68,7 @@
//////////////
// MD from background detection
//////////////
-bool WelsMdInterJudgeBGDPskipCamera (void* pEnc, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
- bool* bKeepSkip);
-bool WelsMdInterJudgeBGDPskipScreen (void* pEnc, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
+bool WelsMdInterJudgeBGDPskip (void* pEnc, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
bool* bKeepSkip);
bool WelsMdInterJudgeBGDPskipFalse (void* pEnc, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
bool* bKeepSkip);
--- a/codec/encoder/core/src/encoder.cpp
+++ b/codec/encoder/core/src/encoder.cpp
@@ -137,13 +137,9 @@
}
-void WelsInitBGDFunc (SWelsFuncPtrList* pFuncList, const bool kbEnableBackgroundDetection, const bool kbScreenContent) {
+void WelsInitBGDFunc (SWelsFuncPtrList* pFuncList, const bool kbEnableBackgroundDetection) {
if (kbEnableBackgroundDetection) {
- if (!kbScreenContent) {
- pFuncList->pfInterMdBackgroundDecision = WelsMdInterJudgeBGDPskipCamera;
- } else {
- pFuncList->pfInterMdBackgroundDecision = WelsMdInterJudgeBGDPskipScreen;
- }
+ pFuncList->pfInterMdBackgroundDecision = WelsMdInterJudgeBGDPskip;
pFuncList->pfInterMdBackgroundInfoUpdate = WelsMdInterUpdateBGDInfo;
} else {
pFuncList->pfInterMdBackgroundDecision = WelsMdInterJudgeBGDPskipFalse;
@@ -195,7 +191,7 @@
WelsInitSampleSadFunc (pFuncList, uiCpuFlag);
//
- WelsInitBGDFunc (pFuncList, pParam->bEnableBackgroundDetection, bScreenContent);
+ WelsInitBGDFunc (pFuncList, pParam->bEnableBackgroundDetection);
WelsInitSCDPskipFunc (pFuncList, bScreenContent && (pParam->bEnableSceneChangeDetect));
// for pfGetVarianceFromIntraVaa function ptr adaptive by CPU features, 6/7/2010
--- a/codec/encoder/core/src/svc_mode_decision.cpp
+++ b/codec/encoder/core/src/svc_mode_decision.cpp
@@ -214,40 +214,8 @@
return (!bChromaCostCannotSkip && !bChromaTooLarge);
}
-bool WelsMdInterJudgeBGDPskipCamera (void* pCtx, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
- bool* bKeepSkip) {
- sWelsEncCtx* pEncCtx = (sWelsEncCtx*)pCtx;
- SWelsMD* pWelsMd = (SWelsMD*)pMd;
-
- SDqLayer* pCurDqLayer = pEncCtx->pCurDqLayer;
-
- const int32_t kiRefMbQp = pCurDqLayer->pRefPic->pRefMbQp[pCurMb->iMbXY];
- const int32_t kiCurMbQp = pCurMb->uiLumaQp;// unsigned -> signed
- int8_t* pVaaBgMbFlag = pEncCtx->pVaa->pVaaBackgroundMbFlag + pCurMb->iMbXY;
-
- const int32_t kiMbWidth = pCurDqLayer->iMbWidth;
-
- *bKeepSkip = (*bKeepSkip) &&
- ((!pVaaBgMbFlag[-1]) &&
- (!pVaaBgMbFlag[-kiMbWidth]) &&
- (!pVaaBgMbFlag[-kiMbWidth + 1]));
-
- if (
- *pVaaBgMbFlag
- && !IS_INTRA (pMbCache->uiRefMbType)
- && (kiRefMbQp - kiCurMbQp <= DELTA_QP_BGD_THD || kiRefMbQp <= 26)
- ) {
- SMVUnitXY sVaaPredSkipMv = { 0 };
- PredSkipMv (pMbCache, &sVaaPredSkipMv);
- WelsMdBackgroundMbEnc (pEncCtx, pWelsMd, pCurMb, pMbCache, pSlice, (LD32 (&sVaaPredSkipMv) == 0));
- return true;
- }
-
- return false;
-}
-
-//01/17/2013. USE the NEW BGD Pskip with COLOR CHECK for screen content because of color artifact seen in test
-bool WelsMdInterJudgeBGDPskipScreen (void* pCtx, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
+//01/17/2013. USE the NEW BGD Pskip with COLOR CHECK for screen content and camera because of color artifact seen in test
+bool WelsMdInterJudgeBGDPskip (void* pCtx, void* pMd, SSlice* pSlice, SMB* pCurMb, SMbCache* pMbCache,
bool* bKeepSkip) {
sWelsEncCtx* pEncCtx = (sWelsEncCtx*)pCtx;
SWelsMD* pWelsMd = (SWelsMD*)pMd;
--- a/test/api/encoder_test.cpp
+++ b/test/api/encoder_test.cpp
@@ -81,7 +81,7 @@
},
{
"res/Static_152_100.yuv",
- "83db4c0e3006bbe039bd327b6e78c57fbb05316f", CAMERA_VIDEO_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1
+ "02bbff550ee0630e44e46e14dc459d3686f2a360", CAMERA_VIDEO_REAL_TIME, 152, 100, 6.0f, SM_SINGLE_SLICE, false, 1
},
{
"res/CiscoVT2people_320x192_12fps.yuv",
@@ -97,7 +97,7 @@
},
{
"res/Cisco_Absolute_Power_1280x720_30fps.yuv",
- "6df1ece77c0de63cdf8ab52ccef3a7d139022717", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1
+ "f4377e3d23748d5f997cd286bc71cc75fbc72013", CAMERA_VIDEO_REAL_TIME, 1280, 720, 30.0f, SM_DYN_SLICE, false, 1
},
{
"res/CiscoVT2people_320x192_12fps.yuv",