This makes the code work properly on big endian. The MC case is similar to how it's done in the encoder. Neither of these should have any significant performance impact.
Showing the changes to codec/encoder/core/src/deblocking.cpp (1 of 3 files). Show all
Unified · Split
| @@ -242,21 +242,22 @@ uint32_t DeblockingBSMarginalMBAvcbase (SMB* pCurMb, SMB* pNeighMb, int32_t iEdg · 241 unmodified lines | |||
| 242 | int32_t i; | 242 | int32_t i; |
| 243 | uint32_t uiBSx4; | 243 | uint32_t uiBSx4; |
| 244 | uint8_t* pBS = (uint8_t*) (&uiBSx4); | 244 | uint8_t* pBS = (uint8_t*) (&uiBSx4); |
| 245 | uint32_t uiBIdx = * (uint32_t*) (&g_kuiTableBIdx[iEdge][0]); | 245 | const uint8_t *pBIdx = &g_kuiTableBIdx[iEdge][0]; |
| 246 | uint32_t uiBnIdx = * (uint32_t*) (&g_kuiTableBIdx[iEdge][4]); | 246 | const uint8_t *pBnIdx = &g_kuiTableBIdx[iEdge][4]; |
| 247 | |||
| 247 | 248 | ||
| 248 | for (i = 0; i < 4; i++) { | 249 | for (i = 0; i < 4; i++) { |
| 249 | if (pCurMb->pNonZeroCount[uiBIdx & 0xff] | pNeighMb->pNonZeroCount[uiBnIdx & 0xff]) { | 250 | if (pCurMb->pNonZeroCount[*pBIdx] | pNeighMb->pNonZeroCount[*pBnIdx]) { |
| 250 | pBS[i] = 2; | 251 | pBS[i] = 2; |
| 251 | } else { | 252 | } else { |
| 252 | pBS[i] = | 253 | pBS[i] = |
| 253 | #ifndef SINGLE_REF_FRAME | 254 | #ifndef SINGLE_REF_FRAME |
| 254 | (pCurMb->uiRefIndex[g_kiTableBlock8x8Idx[1][iEdge][i]] - pNeighMb->uiRefIndex[g_kiTableBlock8x8NIdx[1][iEdge][i]]) || | 255 | (pCurMb->uiRefIndex[g_kiTableBlock8x8Idx[1][iEdge][i]] - pNeighMb->uiRefIndex[g_kiTableBlock8x8NIdx[1][iEdge][i]]) || |
| 255 | #endif | 256 | #endif |
| 256 | MB_BS_MV (pCurMb->sMv, pNeighMb->sMv, (uiBIdx & 0xff), (uiBnIdx & 0xff)); | 257 | MB_BS_MV (pCurMb->sMv, pNeighMb->sMv, *pBIdx, *pBnIdx); |
| 257 | } | 258 | } |
| 258 | uiBIdx = uiBIdx >> 8; | 259 | pBIdx++; |
| 259 | uiBnIdx = uiBnIdx >> 8; | 260 | pBnIdx++; |
| 260 | } | 261 | } |
| 261 | return uiBSx4; | 262 | return uiBSx4; |
| 262 | } | 263 | } |