This avoids having to set a define indicating the endianness. This doesn't incur any significant measurable slowdown.
Showing the changes to codec/encoder/core/src/deblocking.cpp (1 of 3 files). Show all
Unified · Split
| @@ -156,34 +156,29 @@ static const ALIGNED_DECLARE (int32_t, g_kiTableBlock8x8NIdx[2][4][4], 16) = { · 155 unmodified lines | |||
| 156 | 156 | ||
| 157 | void inline DeblockingBSInsideMBAvsbase (int8_t* pNnzTab, uint8_t uiBS[2][4][4], int32_t iLShiftFactor) { | 157 | void inline DeblockingBSInsideMBAvsbase (int8_t* pNnzTab, uint8_t uiBS[2][4][4], int32_t iLShiftFactor) { |
| 158 | uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3; | 158 | uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3; |
| 159 | ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx3, 4, 4); | ||
| 160 | 159 | ||
| 161 | uiNnz32b0 = * (uint32_t*) (pNnzTab + 0); | 160 | uiNnz32b0 = * (uint32_t*) (pNnzTab + 0); |
| 162 | uiNnz32b1 = * (uint32_t*) (pNnzTab + 4); | 161 | uiNnz32b1 = * (uint32_t*) (pNnzTab + 4); |
| 163 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); | 162 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); |
| 164 | uiNnz32b3 = * (uint32_t*) (pNnzTab + 12); | 163 | uiNnz32b3 = * (uint32_t*) (pNnzTab + 12); |
| 165 | 164 | ||
| 166 | * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b0) << iLShiftFactor; | 165 | uiBS[0][1][0] = (pNnzTab[0] | pNnzTab[1]) << iLShiftFactor; |
| 167 | uiBS[0][1][0] = uiBsx3[0]; | 166 | uiBS[0][2][0] = (pNnzTab[1] | pNnzTab[2]) << iLShiftFactor; |
| 168 | uiBS[0][2][0] = uiBsx3[1]; | 167 | uiBS[0][3][0] = (pNnzTab[2] | pNnzTab[3]) << iLShiftFactor; |
| 169 | uiBS[0][3][0] = uiBsx3[2]; | ||
| 170 | 168 | ||
| 171 | * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b1) << iLShiftFactor; | 169 | uiBS[0][1][1] = (pNnzTab[4] | pNnzTab[5]) << iLShiftFactor; |
| 172 | uiBS[0][1][1] = uiBsx3[0]; | 170 | uiBS[0][2][1] = (pNnzTab[5] | pNnzTab[6]) << iLShiftFactor; |
| 173 | uiBS[0][2][1] = uiBsx3[1]; | 171 | uiBS[0][3][1] = (pNnzTab[6] | pNnzTab[7]) << iLShiftFactor; |
| 174 | uiBS[0][3][1] = uiBsx3[2]; | ||
| 175 | * (uint32_t*)uiBS[1][1] = (uiNnz32b0 | uiNnz32b1) << iLShiftFactor; | 172 | * (uint32_t*)uiBS[1][1] = (uiNnz32b0 | uiNnz32b1) << iLShiftFactor; |
| 176 | 173 | ||
| 177 | * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b2) << iLShiftFactor; | 174 | uiBS[0][1][2] = (pNnzTab[8] | pNnzTab[9]) << iLShiftFactor; |
| 178 | uiBS[0][1][2] = uiBsx3[0]; | 175 | uiBS[0][2][2] = (pNnzTab[9] | pNnzTab[10]) << iLShiftFactor; |
| 179 | uiBS[0][2][2] = uiBsx3[1]; | 176 | uiBS[0][3][2] = (pNnzTab[10] | pNnzTab[11]) << iLShiftFactor; |
| 180 | uiBS[0][3][2] = uiBsx3[2]; | ||
| 181 | * (uint32_t*)uiBS[1][2] = (uiNnz32b1 | uiNnz32b2) << iLShiftFactor; | 177 | * (uint32_t*)uiBS[1][2] = (uiNnz32b1 | uiNnz32b2) << iLShiftFactor; |
| 182 | 178 | ||
| 183 | * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b3) << iLShiftFactor; | 179 | uiBS[0][1][3] = (pNnzTab[12] | pNnzTab[13]) << iLShiftFactor; |
| 184 | uiBS[0][1][3] = uiBsx3[0]; | 180 | uiBS[0][2][3] = (pNnzTab[13] | pNnzTab[14]) << iLShiftFactor; |
| 185 | uiBS[0][2][3] = uiBsx3[1]; | 181 | uiBS[0][3][3] = (pNnzTab[14] | pNnzTab[15]) << iLShiftFactor; |
| 186 | uiBS[0][3][3] = uiBsx3[2]; | ||
| 187 | * (uint32_t*)uiBS[1][3] = (uiNnz32b2 | uiNnz32b3) << iLShiftFactor; | 182 | * (uint32_t*)uiBS[1][3] = (uiNnz32b2 | uiNnz32b3) << iLShiftFactor; |
| 188 | 183 | ||
| 189 | } | 184 | } |
| @@ -197,22 +192,26 @@ void inline DeblockingBSInsideMBNormal (SMB* pCurMb, uint8_t uiBS[2][4][4], int8 · 7 unmodified lines | |||
| 197 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); | 192 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); |
| 198 | uiNnz32b3 = * (uint32_t*) (pNnzTab + 12); | 193 | uiNnz32b3 = * (uint32_t*) (pNnzTab + 12); |
| 199 | 194 | ||
| 200 | * (uint32_t*)uiBsx4 = DEBLOCK_BS_SHIFTED (uiNnz32b0); | 195 | for (int i = 0; i < 3; i++) |
| 196 | uiBsx4[i] = pNnzTab[i] | pNnzTab[i + 1]; | ||
| 201 | uiBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 1, 0); | 197 | uiBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 1, 0); |
| 202 | uiBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 2, 1); | 198 | uiBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 2, 1); |
| 203 | uiBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 3, 2); | 199 | uiBS[0][3][0] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 3, 2); |
| 204 | 200 | ||
| 205 | * (uint32_t*)uiBsx4 = DEBLOCK_BS_SHIFTED (uiNnz32b1); | 201 | for (int i = 0; i < 3; i++) |
| 202 | uiBsx4[i] = pNnzTab[4 + i] | pNnzTab[4 + i + 1]; | ||
| 206 | uiBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 5, 4); | 203 | uiBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 5, 4); |
| 207 | uiBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 6, 5); | 204 | uiBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 6, 5); |
| 208 | uiBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 7, 6); | 205 | uiBS[0][3][1] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 7, 6); |
| 209 | 206 | ||
| 210 | * (uint32_t*)uiBsx4 = DEBLOCK_BS_SHIFTED (uiNnz32b2); | 207 | for (int i = 0; i < 3; i++) |
| 208 | uiBsx4[i] = pNnzTab[8 + i] | pNnzTab[8 + i + 1]; | ||
| 211 | uiBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 9, 8); | 209 | uiBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 9, 8); |
| 212 | uiBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 10, 9); | 210 | uiBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 10, 9); |
| 213 | uiBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 11, 10); | 211 | uiBS[0][3][2] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 11, 10); |
| 214 | 212 | ||
| 215 | * (uint32_t*)uiBsx4 = DEBLOCK_BS_SHIFTED (uiNnz32b3); | 213 | for (int i = 0; i < 3; i++) |
| 214 | uiBsx4[i] = pNnzTab[12 + i] | pNnzTab[12 + i + 1]; | ||
| 216 | uiBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 13, 12); | 215 | uiBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 13, 12); |
| 217 | uiBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 14, 13); | 216 | uiBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 14, 13); |
| 218 | uiBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 15, 14); | 217 | uiBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 15, 14); |