Showing the changes to codec/encoder/core/src/wels_preprocess.cpp (1 of 2 files). Show all
Unified · Split
| @@ -255,26 +255,28 @@ int32_t CWelsPreProcess::AnalyzeSpatialPic (sWelsEncCtx* pCtx, const int32_t kiD · 254 unmodified lines | ||
| 255 | 255 | return 0; |
| 256 | 256 | } |
| 257 | 257 | |
| 258 | +int32_t CWelsPreProcess::GetCurPicPosition(const int32_t kiDidx) { | |
| 259 | + return (m_uiSpatialLayersInTemporal[kiDidx] - 1); | |
| 260 | +} | |
| 261 | + | |
| 258 | 262 | int32_t CWelsPreProcess::UpdateSpatialPictures (sWelsEncCtx* pCtx, SWelsSvcCodingParam* pParam, |
| 259 | 263 | const int8_t iCurTid, const int32_t kiDidx) { |
| 260 | 264 | if (pCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) |
| 261 | 265 | return 0; |
| 262 | − if (iCurTid < m_uiSpatialLayersInTemporal[kiDidx] - 1 || pParam->iDecompStages == 0) { | |
| 263 | − if ((iCurTid >= MAX_TEMPORAL_LEVEL) || (m_uiSpatialLayersInTemporal[kiDidx] - 1 > MAX_TEMPORAL_LEVEL)) { | |
| 266 | + const int32_t kiCurPos = GetCurPicPosition(kiDidx); | |
| 267 | + if (iCurTid < kiCurPos || pParam->iDecompStages == 0) { | |
| 268 | + if ((iCurTid >= MAX_TEMPORAL_LEVEL) || (kiCurPos > MAX_TEMPORAL_LEVEL)) { | |
| 264 | 269 | InitLastSpatialPictures (pCtx); |
| 265 | 270 | return 1; |
| 266 | 271 | } |
| 267 | 272 | if (pParam->bEnableLongTermReference && pCtx->bLongTermRefFlag[kiDidx][iCurTid]) { |
| 268 | − SPicture* tmp = m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx]; | |
| 269 | − m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx] = | |
| 270 | − m_pSpatialPic[kiDidx][iCurTid]; | |
| 271 | − m_pSpatialPic[kiDidx][iCurTid] = m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] - 1]; | |
| 272 | − m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] - 1] = tmp; | |
| 273 | − pCtx->bLongTermRefFlag[kiDidx][iCurTid] = false; | |
| 274 | − } else { | |
| 275 | − WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] - 1], | |
| 273 | + const int32_t kiAvailableLtrPos = m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx; | |
| 274 | + WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][kiAvailableLtrPos], | |
| 276 | 275 | &m_pSpatialPic[kiDidx][iCurTid]); |
| 276 | + pCtx->bLongTermRefFlag[kiDidx][iCurTid] = false; | |
| 277 | 277 | } |
| 278 | + WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][kiCurPos], | |
| 279 | + &m_pSpatialPic[kiDidx][iCurTid]); | |
| 278 | 280 | } |
| 279 | 281 | return 0; |
| 280 | 282 | } |