Don't check for scene changes on forced IDR frames
For the first encoded frame, is bEncCurFrmAsIdrFlag true while bIdrPeriodFlag is false. Previously, the scene detection code unnecessarily checked for a scene change in the first encoded frame (where the reference frame was an uninitialized frame), triggering valgrind warnings about using uninitialized memory.
This commit is contained in:
parent
5d616714c4
commit
3eda5a899e
@ -410,6 +410,7 @@ int32_t CWelsPreProcess::SingleLayerPreprocess (void* pCtx, const SSourcePicture
|
||||
DownsamplePadding (pSrcPic, pDstPic, iSrcWidth, iSrcHeight, iShrinkWidth, iShrinkHeight, iTargetWidth, iTargetHeight);
|
||||
|
||||
if (pSvcParam->bEnableSceneChangeDetect && !pEncCtx->pVaa->bIdrPeriodFlag
|
||||
&& !pEncCtx->bEncCurFrmAsIdrFlag
|
||||
&& ! (pEncCtx->iCodingIndex & (pSvcParam->uiGopSize - 1))) {
|
||||
SPicture* pRefPic = pEncCtx->pLtr[iDependencyId].bReceivedT0LostFlag ?
|
||||
pEncCtx->pSpatialPic[iDependencyId][pEncCtx->uiSpatialLayersInTemporal[iDependencyId] +
|
||||
@ -510,7 +511,7 @@ int32_t CWelsPreProcess::MultiLayerPreprocess (void* pCtx, const SSourcePicture*
|
||||
} while (i < kiSpatialNum);
|
||||
|
||||
if (pSvcParam->bEnableSceneChangeDetect && (kiSpatialNum == pSvcParam->iNumDependencyLayer)
|
||||
&& !pEncCtx->pVaa->bIdrPeriodFlag) {
|
||||
&& !pEncCtx->pVaa->bIdrPeriodFlag && !pEncCtx->bEncCurFrmAsIdrFlag) {
|
||||
SPicture* pRef = pEncCtx->pLtr[0].bReceivedT0LostFlag ?
|
||||
pEncCtx->pSpatialPic[0][pEncCtx->uiSpatialLayersInTemporal[0] + pEncCtx->pVaa->uiValidLongTermPicIdx] :
|
||||
m_pLastSpatialPicture[0][0];
|
||||
|
Loading…
x
Reference in New Issue
Block a user