ref: a4ae5e3747468e6e74bb676d0379af4f3afe376b
parent: 76ef30dc82a84ac8e9ba64fac429706ef0f49852
author: Sijia Chen <sijchen@cisco.com>
date: Fri Jan 9 11:17:51 EST 2015
add fix for the valgrid warning of issue#1362
--- a/codec/encoder/core/inc/encoder_context.h
+++ b/codec/encoder/core/inc/encoder_context.h
@@ -201,7 +201,7 @@
SSpatialPicIndex sSpatialIndexMap[MAX_DEPENDENCY_LAYER];
- bool bLongTermRefFlag[MAX_DEPENDENCY_LAYER][MAX_TEMPORAL_LEVEL + 1/*+LONG_TERM_REF_NUM*/];
+ bool bRefOfCurTidIsLtr[MAX_DEPENDENCY_LAYER][MAX_TEMPORAL_LEVEL];
uint16_t uiIdrPicId; // IDR picture id: [0, 65535], this one is used for LTR
int16_t iMaxSliceCount;// maximal count number of slices for all layers observation
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -3727,11 +3727,6 @@
WelsSwapDqLayers (pCtx);
}
- if (pSvcParam->bEnableLongTermReference && (pCtx->pLtr[pCtx->uiDependencyId].bLTRMarkingFlag
- && (pCtx->pLtr[pCtx->uiDependencyId].iLTRMarkMode == LTR_DELAY_MARK))) {
- pCtx->bLongTermRefFlag[iDidIdx][0] = true;
- }
-
if (pCtx->pVpp->UpdateSpatialPictures (pCtx, pSvcParam, iCurTid, iDidIdx) != 0) {
ForceCodingIDR (pCtx);
WelsLog (pLogCtx, WELS_LOG_WARNING, "WelsEncoderEncodeExt(), Logic Error Found in temporal level. ForceCodingIDR!");
@@ -3742,7 +3737,7 @@
if (pSvcParam->bEnableLongTermReference && ((pCtx->pLtr[pCtx->uiDependencyId].bLTRMarkingFlag
&& (pCtx->pLtr[pCtx->uiDependencyId].iLTRMarkMode == LTR_DIRECT_MARK)) || eFrameType == videoFrameTypeIDR)) {
- pCtx->bLongTermRefFlag[iDidIdx][iCurTid] = true;
+ pCtx->bRefOfCurTidIsLtr[iDidIdx][iCurTid] = true;
}
}
--- a/codec/encoder/core/src/ref_list_mgr_svc.cpp
+++ b/codec/encoder/core/src/ref_list_mgr_svc.cpp
@@ -289,8 +289,10 @@
}
}
- if ((pLtr->iLTRMarkMode == LTR_DELAY_MARK && pLtr->bLTRMarkingFlag) || ((pLtr->iLTRMarkMode == LTR_DIRECT_MARK)
- && (bMoveLtrFromShortToLong))) {
+ if ((pLtr->iLTRMarkMode == LTR_DELAY_MARK && pLtr->bLTRMarkingFlag)
+ || ((pLtr->iLTRMarkMode == LTR_DIRECT_MARK) && (bMoveLtrFromShortToLong))) {
+ pCtx->bRefOfCurTidIsLtr[pCtx->uiDependencyId][pCtx->uiTemporalId] = true;
+
if (pRefList->uiLongRefCount > 0) {
memmove (&pRefList->pLongRefList[1], &pRefList->pLongRefList[0],
pRefList->uiLongRefCount * sizeof (SPicture*)); // confirmed_safe_unsafe_usage
@@ -595,6 +597,9 @@
} else { // safe for IDR
WelsResetRefList (pCtx); //for IDR, SHOULD reset pRef list.
ResetLtrState (&pCtx->pLtr[pCtx->uiDependencyId]); //SHOULD update it when IDR.
+ for (int32_t k = 0; k < MAX_TEMPORAL_LEVEL; k++) {
+ pCtx->bRefOfCurTidIsLtr[pCtx->uiDependencyId][k] = false;
+ }
pCtx->pRefList0[0] = NULL;
}
--- a/codec/encoder/core/src/wels_preprocess.cpp
+++ b/codec/encoder/core/src/wels_preprocess.cpp
@@ -269,11 +269,11 @@
InitLastSpatialPictures (pCtx);
return 1;
}
- if (pParam->bEnableLongTermReference && pCtx->bLongTermRefFlag[kiDidx][iCurTid]) {
+ if (pCtx->bRefOfCurTidIsLtr[kiDidx][iCurTid]) {
const int32_t kiAvailableLtrPos = m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx;
WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][kiAvailableLtrPos],
&m_pSpatialPic[kiDidx][iCurTid]);
- pCtx->bLongTermRefFlag[kiDidx][iCurTid] = false;
+ pCtx->bRefOfCurTidIsLtr[kiDidx][iCurTid] = false;
}
WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][kiCurPos],
&m_pSpatialPic[kiDidx][iCurTid]);