Showing the changes to codec/decoder/core/src/decode_slice.cpp (1 of 4 files). Show all
Unified · Split
| @@ -1415,16 +1415,25 @@ int32_t WelsDecodeMbCabacBSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uin · 1414 unmodified lines | |||
| 1415 | pCtx->bMbRefConcealed = pCtx->bRPLRError || pCtx->bMbRefConcealed || ! (ppRefPicL0[0] && ppRefPicL0[0]->bIsComplete) | 1415 | pCtx->bMbRefConcealed = pCtx->bRPLRError || pCtx->bMbRefConcealed || ! (ppRefPicL0[0] && ppRefPicL0[0]->bIsComplete) |
| 1416 | || ! (ppRefPicL1[0] && ppRefPicL1[0]->bIsComplete); | 1416 | || ! (ppRefPicL1[0] && ppRefPicL1[0]->bIsComplete); |
| 1417 | 1417 | ||
| 1418 | |||
| 1418 | if (pSliceHeader->iDirectSpatialMvPredFlag) { | 1419 | if (pSliceHeader->iDirectSpatialMvPredFlag) { |
| 1419 | 1420 | ||
| 1420 | //predict direct spatial mv | 1421 | //predict direct spatial mv |
| 1421 | PredMvBDirectSpatial (pCtx, pMv, ref); | 1422 | SubMbType subMbType; |
| 1423 | int32_t ret = PredMvBDirectSpatial (pCtx, pMv, ref, subMbType); | ||
| 1424 | if (ret != ERR_NONE) { | ||
| 1425 | return ret; | ||
| 1426 | } | ||
| 1422 | } else { | 1427 | } else { |
| 1423 | //temporal direct mode | 1428 | //temporal direct mode |
| 1424 | ComputeColocated (pCtx); | 1429 | ComputeColocated (pCtx); |
| 1425 | PredBDirectTemporal (pCtx, pMv, ref); | 1430 | int32_t ret = PredBDirectTemporal (pCtx, pMv, ref); |
| 1431 | if (ret != ERR_NONE) { | ||
| 1432 | return ret; | ||
| 1433 | } | ||
| 1426 | } | 1434 | } |
| 1427 | 1435 | ||
| 1436 | |||
| 1428 | //reset rS | 1437 | //reset rS |
| 1429 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; //??????????????? dqaunt of previous mb | 1438 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; //??????????????? dqaunt of previous mb |
| 1430 | for (i = 0; i < 2; i++) { | 1439 | for (i = 0; i < 2; i++) { |