Showing the changes to codec/encoder/core/src/wels_preprocess.cpp (1 of 4 files). Show all
Unified · Split
| @@ -347,31 +347,47 @@ int32_t CWelsPreProcess::AnalyzeSpatialPic (sWelsEncCtx* pCtx, const int32_t kiD · 346 unmodified lines | |||
| 347 | iRefTemporalIdx = m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiValidLongTermPicIdx; | 347 | iRefTemporalIdx = m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiValidLongTermPicIdx; |
| 348 | 348 | ||
| 349 | SPicture* pCurPic = m_pSpatialPic[kiDidx][iCurTemporalIdx]; | 349 | SPicture* pCurPic = m_pSpatialPic[kiDidx][iCurTemporalIdx]; |
| 350 | SPicture* pRefPic = m_pSpatialPic[kiDidx][iRefTemporalIdx]; | 350 | bool bCalculateVar = (pSvcParam->iRCMode >= RC_BITRATE_MODE && pCtx->eSliceType == I_SLICE); |
| 351 | { | 351 | |
| 352 | if(pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME){ | ||
| 353 | SVAAFrameInfoExt* pVaaExt = static_cast<SVAAFrameInfoExt*> (m_pEncCtx->pVaa); | ||
| 354 | SRefInfoParam* BestRefCandidateParam =&(pVaaExt->sVaaStrBestRefCandidate[0]); | ||
| 355 | SPicture *pRefPic= m_pSpatialPic[0][BestRefCandidateParam->iSrcListIdx]; | ||
| 356 | |||
| 357 | VaaCalculation (pCtx->pVaa, pCurPic, pRefPic, false, bCalculateVar, bCalculateBGD); | ||
| 358 | |||
| 359 | if (pSvcParam->bEnableBackgroundDetection) { | ||
| 360 | BackgroundDetection (pCtx->pVaa, pCurPic, pRefPic, bCalculateBGD && pRefPic->iPictureType != I_SLICE); | ||
| 361 | } | ||
| 362 | |||
| 363 | if (bNeededMbAq) { | ||
| 364 | AdaptiveQuantCalculation (pCtx->pVaa, pCurPic, pRefPic); | ||
| 365 | } | ||
| 366 | } else { | ||
| 367 | SPicture* pRefPic = m_pSpatialPic[kiDidx][iRefTemporalIdx]; | ||
| 352 | SPicture* pLastPic = m_pLastSpatialPicture[kiDidx][0]; | 368 | SPicture* pLastPic = m_pLastSpatialPicture[kiDidx][0]; |
| 353 | bool bCalculateSQDiff = ((pLastPic->pData[0] == pRefPic->pData[0]) && bNeededMbAq); | 369 | bool bCalculateSQDiff = ((pLastPic->pData[0] == pRefPic->pData[0]) && bNeededMbAq); |
| 354 | bool bCalculateVar = (pSvcParam->iRCMode >= RC_BITRATE_MODE && pCtx->eSliceType == I_SLICE); | 370 | bool bCalculateVar = (pSvcParam->iRCMode >= RC_BITRATE_MODE && pCtx->eSliceType == I_SLICE); |
| 355 | 371 | ||
| 356 | VaaCalculation (pCtx->pVaa, pCurPic, pRefPic, bCalculateSQDiff, bCalculateVar, bCalculateBGD); | 372 | VaaCalculation (pCtx->pVaa, pCurPic, pRefPic, bCalculateSQDiff, bCalculateVar, bCalculateBGD); |
| 357 | } | ||
| 358 | 373 | ||
| 359 | if (pSvcParam->bEnableBackgroundDetection) { | 374 | if (pSvcParam->bEnableBackgroundDetection) { |
| 360 | BackgroundDetection (pCtx->pVaa, pCurPic, pRefPic, bCalculateBGD && pRefPic->iPictureType != I_SLICE); | 375 | BackgroundDetection (pCtx->pVaa, pCurPic, pRefPic, bCalculateBGD && pRefPic->iPictureType != I_SLICE); |
| 361 | } | 376 | } |
| 362 | 377 | ||
| 363 | if (bNeededMbAq) { | 378 | if (bNeededMbAq) { |
| 364 | SPicture* pCurPic = m_pLastSpatialPicture[kiDidx][1]; | 379 | SPicture* pCurPic = m_pLastSpatialPicture[kiDidx][1]; |
| 365 | SPicture* pRefPic = m_pLastSpatialPicture[kiDidx][0]; | 380 | SPicture* pRefPic = m_pLastSpatialPicture[kiDidx][0]; |
| 366 | 381 | ||
| 367 | AdaptiveQuantCalculation (pCtx->pVaa, pCurPic, pRefPic); | 382 | AdaptiveQuantCalculation (pCtx->pVaa, pCurPic, pRefPic); |
| 368 | } | 383 | } |
| 369 | 384 | ||
| 370 | if(pSvcParam->iUsageType != SCREEN_CONTENT_REAL_TIME){ | 385 | if(pSvcParam->iUsageType != SCREEN_CONTENT_REAL_TIME){ |
| 371 | if (pSvcParam->iRCMode != RC_OFF_MODE) { | 386 | if (pSvcParam->iRCMode != RC_OFF_MODE) { |
| 372 | AnalyzePictureComplexity (pCtx, pCurPic, pRefPic, kiDidx, bCalculateBGD); | 387 | AnalyzePictureComplexity (pCtx, pCurPic, pRefPic, kiDidx, bCalculateBGD); |
| 388 | } | ||
| 389 | WelsExchangeSpatialPictures (&m_pLastSpatialPicture[kiDidx][1], &m_pLastSpatialPicture[kiDidx][0]); | ||
| 373 | } | 390 | } |
| 374 | WelsExchangeSpatialPictures (&m_pLastSpatialPicture[kiDidx][1], &m_pLastSpatialPicture[kiDidx][0]); | ||
| 375 | } | 391 | } |
| 376 | return 0; | 392 | return 0; |
| 377 | } | 393 | } |
| @@ -1132,7 +1148,7 @@ int32_t CWelsPreProcess::GetRefCandidateLtrIndex(int32_t iRefIdx) · 754 unmodified lines | |||
| 1132 | { | 1148 | { |
| 1133 | const int32_t iTargetDid = m_pEncCtx->pSvcParam->iSpatialLayerNum - 1; | 1149 | const int32_t iTargetDid = m_pEncCtx->pSvcParam->iSpatialLayerNum - 1; |
| 1134 | SVAAFrameInfoExt* pVaaExt = static_cast<SVAAFrameInfoExt*> (m_pEncCtx->pVaa); | 1150 | SVAAFrameInfoExt* pVaaExt = static_cast<SVAAFrameInfoExt*> (m_pEncCtx->pVaa); |
| 1135 | SRefInfoParam* BestRefCandidateParam =&(pVaaExt->sVaaStrBestRefCandidate[iRefIdx]); | 1151 | SRefInfoParam* BestRefCandidateParam =&(pVaaExt->sVaaStrBestRefCandidate[iRefIdx]); |
| 1136 | int32_t iLtrRefIdx = m_pSpatialPic[iTargetDid][BestRefCandidateParam->iSrcListIdx]->iLongTermPicNum; | 1152 | int32_t iLtrRefIdx = m_pSpatialPic[iTargetDid][BestRefCandidateParam->iSrcListIdx]->iLongTermPicNum; |
| 1137 | return iLtrRefIdx; | 1153 | return iLtrRefIdx; |
| 1138 | } | 1154 | } |