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 | return 0; | 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 | int32_t CWelsPreProcess::UpdateSpatialPictures (sWelsEncCtx* pCtx, SWelsSvcCodingParam* pParam, | 262 | int32_t CWelsPreProcess::UpdateSpatialPictures (sWelsEncCtx* pCtx, SWelsSvcCodingParam* pParam, |
| 259 | const int8_t iCurTid, const int32_t kiDidx) { | 263 | const int8_t iCurTid, const int32_t kiDidx) { |
| 260 | if (pCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) | 264 | if (pCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) |
| 261 | return 0; | 265 | return 0; |
| 262 | if (iCurTid < m_uiSpatialLayersInTemporal[kiDidx] - 1 || pParam->iDecompStages == 0) { | 266 | const int32_t kiCurPos = GetCurPicPosition(kiDidx); |
| 263 | if ((iCurTid >= MAX_TEMPORAL_LEVEL) || (m_uiSpatialLayersInTemporal[kiDidx] - 1 > MAX_TEMPORAL_LEVEL)) { | 267 | if (iCurTid < kiCurPos || pParam->iDecompStages == 0) { |
| 268 | if ((iCurTid >= MAX_TEMPORAL_LEVEL) || (kiCurPos > MAX_TEMPORAL_LEVEL)) { | ||
| 264 | InitLastSpatialPictures (pCtx); | 269 | InitLastSpatialPictures (pCtx); |
| 265 | return 1; | 270 | return 1; |
| 266 | } | 271 | } |
| 267 | if (pParam->bEnableLongTermReference && pCtx->bLongTermRefFlag[kiDidx][iCurTid]) { | 272 | if (pParam->bEnableLongTermReference && pCtx->bLongTermRefFlag[kiDidx][iCurTid]) { |
| 268 | SPicture* tmp = m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx]; | 273 | const int32_t kiAvailableLtrPos = m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx; |
| 269 | m_pSpatialPic[kiDidx][m_uiSpatialLayersInTemporal[kiDidx] + pCtx->pVaa->uiMarkLongTermPicIdx] = | 274 | WelsExchangeSpatialPictures (&m_pSpatialPic[kiDidx][kiAvailableLtrPos], |
| 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], | ||
| 276 | &m_pSpatialPic[kiDidx][iCurTid]); | 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 | return 0; | 281 | return 0; |
| 280 | } | 282 | } |