When deblocking over slice edges (in single threaded sliced encoding), uiNeighborAvail might say that a MB isn't available, even though it is available for deblocking here. This fixes the encoder test of dynamic slicing, with neon optimizations enabled.
Showing the changes to codec/encoder/core/src/deblocking.cpp (1 of 1 file). Show all
Unified · Split
| @@ -555,7 +555,8 @@ void DeblockingIntraMb (DeblockingFunc* pfDeblocking, SMB* pCurMb, SDeblockingFi · 554 unmodified lines | ||
| 555 | 555 | #if defined(HAVE_NEON) && defined(SINGLE_REF_FRAME) |
| 556 | 556 | void DeblockingBSCalc_neon (SWelsFuncPtrList* pFunc, SMB* pCurMb, uint8_t uiBS[2][4][4], Mb_Type uiCurMbType, |
| 557 | 557 | int32_t iMbStride, int32_t iLeftFlag, int32_t iTopFlag) { |
| 558 | − DeblockingBSCalcEnc_neon (pCurMb->pNonZeroCount, pCurMb->sMv, pCurMb->uiNeighborAvail, iMbStride, uiBS); | |
| 558 | + DeblockingBSCalcEnc_neon (pCurMb->pNonZeroCount, pCurMb->sMv, | |
| 559 | + (iLeftFlag ? LEFT_MB_POS : 0) | (iTopFlag ? TOP_MB_POS : 0), iMbStride, uiBS); | |
| 559 | 560 | if (iLeftFlag) { |
| 560 | 561 | if (IS_INTRA ((pCurMb - 1)->uiMbType)) { |
| 561 | 562 | * (uint32_t*)uiBS[0][0] = 0x04040404; |
| @@ -576,7 +577,8 @@ void DeblockingBSCalc_neon (SWelsFuncPtrList* pFunc, SMB* pCurMb, uint8_t uiBS[2 · 14 unmodified lines | ||
| 576 | 577 | #if defined(HAVE_NEON_AARCH64) && defined(SINGLE_REF_FRAME) |
| 577 | 578 | void DeblockingBSCalc_AArch64_neon (SWelsFuncPtrList* pFunc, SMB* pCurMb, uint8_t uiBS[2][4][4], Mb_Type uiCurMbType, |
| 578 | 579 | int32_t iMbStride, int32_t iLeftFlag, int32_t iTopFlag) { |
| 579 | − DeblockingBSCalcEnc_AArch64_neon (pCurMb->pNonZeroCount, pCurMb->sMv, pCurMb->uiNeighborAvail, iMbStride, uiBS); | |
| 580 | + DeblockingBSCalcEnc_AArch64_neon (pCurMb->pNonZeroCount, pCurMb->sMv, | |
| 581 | + (iLeftFlag ? LEFT_MB_POS : 0) | (iTopFlag ? TOP_MB_POS : 0), iMbStride, uiBS); | |
| 580 | 582 | if (iLeftFlag) { |
| 581 | 583 | if (IS_INTRA ((pCurMb - 1)->uiMbType)) { |
| 582 | 584 | * (uint32_t*)uiBS[0][0] = 0x04040404; |