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 | 157 | void inline DeblockingBSInsideMBAvsbase (int8_t* pNnzTab, uint8_t uiBS[2][4][4], int32_t iLShiftFactor) { |
| 158 | 158 | uint32_t uiNnz32b0, uiNnz32b1, uiNnz32b2, uiNnz32b3; |
| 159 | − ENFORCE_STACK_ALIGN_1D (uint8_t, uiBsx3, 4, 4); | |
| 160 | 159 | |
| 161 | 160 | uiNnz32b0 = * (uint32_t*) (pNnzTab + 0); |
| 162 | 161 | uiNnz32b1 = * (uint32_t*) (pNnzTab + 4); |
| 163 | 162 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); |
| 164 | 163 | uiNnz32b3 = * (uint32_t*) (pNnzTab + 12); |
| 165 | 164 | |
| 166 | − * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b0) << iLShiftFactor; | |
| 167 | − uiBS[0][1][0] = uiBsx3[0]; | |
| 168 | − uiBS[0][2][0] = uiBsx3[1]; | |
| 169 | − uiBS[0][3][0] = uiBsx3[2]; | |
| 165 | + uiBS[0][1][0] = (pNnzTab[0] | pNnzTab[1]) << iLShiftFactor; | |
| 166 | + uiBS[0][2][0] = (pNnzTab[1] | pNnzTab[2]) << iLShiftFactor; | |
| 167 | + uiBS[0][3][0] = (pNnzTab[2] | pNnzTab[3]) << iLShiftFactor; | |
| 170 | 168 | |
| 171 | − * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b1) << iLShiftFactor; | |
| 172 | − uiBS[0][1][1] = uiBsx3[0]; | |
| 173 | − uiBS[0][2][1] = uiBsx3[1]; | |
| 174 | − uiBS[0][3][1] = uiBsx3[2]; | |
| 169 | + uiBS[0][1][1] = (pNnzTab[4] | pNnzTab[5]) << iLShiftFactor; | |
| 170 | + uiBS[0][2][1] = (pNnzTab[5] | pNnzTab[6]) << iLShiftFactor; | |
| 171 | + uiBS[0][3][1] = (pNnzTab[6] | pNnzTab[7]) << iLShiftFactor; | |
| 175 | 172 | * (uint32_t*)uiBS[1][1] = (uiNnz32b0 | uiNnz32b1) << iLShiftFactor; |
| 176 | 173 | |
| 177 | − * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b2) << iLShiftFactor; | |
| 178 | − uiBS[0][1][2] = uiBsx3[0]; | |
| 179 | − uiBS[0][2][2] = uiBsx3[1]; | |
| 180 | − uiBS[0][3][2] = uiBsx3[2]; | |
| 174 | + uiBS[0][1][2] = (pNnzTab[8] | pNnzTab[9]) << iLShiftFactor; | |
| 175 | + uiBS[0][2][2] = (pNnzTab[9] | pNnzTab[10]) << iLShiftFactor; | |
| 176 | + uiBS[0][3][2] = (pNnzTab[10] | pNnzTab[11]) << iLShiftFactor; | |
| 181 | 177 | * (uint32_t*)uiBS[1][2] = (uiNnz32b1 | uiNnz32b2) << iLShiftFactor; |
| 182 | 178 | |
| 183 | − * (uint32_t*)uiBsx3 = DEBLOCK_BS_SHIFTED (uiNnz32b3) << iLShiftFactor; | |
| 184 | − uiBS[0][1][3] = uiBsx3[0]; | |
| 185 | − uiBS[0][2][3] = uiBsx3[1]; | |
| 186 | − uiBS[0][3][3] = uiBsx3[2]; | |
| 179 | + uiBS[0][1][3] = (pNnzTab[12] | pNnzTab[13]) << iLShiftFactor; | |
| 180 | + uiBS[0][2][3] = (pNnzTab[13] | pNnzTab[14]) << iLShiftFactor; | |
| 181 | + uiBS[0][3][3] = (pNnzTab[14] | pNnzTab[15]) << iLShiftFactor; | |
| 187 | 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 | 192 | uiNnz32b2 = * (uint32_t*) (pNnzTab + 8); |
| 198 | 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 | 197 | uiBS[0][1][0] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 1, 0); |
| 202 | 198 | uiBS[0][2][0] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 2, 1); |
| 203 | 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 | 203 | uiBS[0][1][1] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 5, 4); |
| 207 | 204 | uiBS[0][2][1] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 6, 5); |
| 208 | 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 | 209 | uiBS[0][1][2] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 9, 8); |
| 212 | 210 | uiBS[0][2][2] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 10, 9); |
| 213 | 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 | 215 | uiBS[0][1][3] = BS_EDGE (uiBsx4[0], iRefIdx, pCurMb->sMv, 13, 12); |
| 217 | 216 | uiBS[0][2][3] = BS_EDGE (uiBsx4[1], iRefIdx, pCurMb->sMv, 14, 13); |
| 218 | 217 | uiBS[0][3][3] = BS_EDGE (uiBsx4[2], iRefIdx, pCurMb->sMv, 15, 14); |