Changeset 5633 for pjproject/trunk/third_party/yuv/source/scale_any.cc
- Timestamp:
- Jul 28, 2017 2:51:44 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/third_party/yuv/source/scale_any.cc
r5358 r5633 20 20 21 21 // Definition for ScaleFilterCols, ScaleARGBCols and ScaleARGBFilterCols 22 #define CANY(NAMEANY, TERP_SIMD, TERP_C, BPP, MASK) 23 void NAMEANY(uint8* dst_ptr, const uint8* src_ptr,\24 int dst_width, int x, int dx) {\25 int n = dst_width & ~MASK;\26 if (n > 0) {\27 TERP_SIMD(dst_ptr, src_ptr, n, x, dx);\28 }\29 TERP_C(dst_ptr + n * BPP, src_ptr,\30 dst_width & MASK, x + n * dx, dx);\31 22 #define CANY(NAMEANY, TERP_SIMD, TERP_C, BPP, MASK) \ 23 void NAMEANY(uint8* dst_ptr, const uint8* src_ptr, int dst_width, int x, \ 24 int dx) { \ 25 int r = dst_width & MASK; \ 26 int n = dst_width & ~MASK; \ 27 if (n > 0) { \ 28 TERP_SIMD(dst_ptr, src_ptr, n, x, dx); \ 29 } \ 30 TERP_C(dst_ptr + n * BPP, src_ptr, r, x + n * dx, dx); \ 31 } 32 32 33 33 #ifdef HAS_SCALEFILTERCOLS_NEON … … 38 38 #endif 39 39 #ifdef HAS_SCALEARGBFILTERCOLS_NEON 40 CANY(ScaleARGBFilterCols_Any_NEON, ScaleARGBFilterCols_NEON, 41 ScaleARGBFilterCols_C, 4, 3) 40 CANY(ScaleARGBFilterCols_Any_NEON, 41 ScaleARGBFilterCols_NEON, 42 ScaleARGBFilterCols_C, 43 4, 44 3) 42 45 #endif 43 46 #undef CANY 44 47 45 48 // Fixed scale down. 46 #define SDANY(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, FACTOR, BPP, MASK) \ 47 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, \ 48 uint8* dst_ptr, int dst_width) { \ 49 int r = (int)((unsigned int)dst_width % (MASK + 1)); \ 50 int n = dst_width - r; \ 51 if (n > 0) { \ 52 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ 53 } \ 54 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ 55 dst_ptr + n * BPP, r); \ 56 } 49 // Mask may be non-power of 2, so use MOD 50 #define SDANY(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, FACTOR, BPP, MASK) \ 51 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, uint8* dst_ptr, \ 52 int dst_width) { \ 53 int r = (int)((unsigned int)dst_width % (MASK + 1)); /* NOLINT */ \ 54 int n = dst_width - r; \ 55 if (n > 0) { \ 56 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ 57 } \ 58 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ 59 dst_ptr + n * BPP, r); \ 60 } 57 61 58 62 // Fixed scale down for odd source width. Used by I420Blend subsampling. 59 63 // Since dst_width is (width + 1) / 2, this function scales one less pixel 60 64 // and copies the last pixel. 61 #define SDODD(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, FACTOR, BPP, MASK) 62 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride,\63 uint8* dst_ptr, int dst_width) {\64 int r = (int)((unsigned int)(dst_width - 1) % (MASK + 1));\65 int n = dst_width - r;\66 67 68 69 70 dst_ptr + n * BPP, r);\71 65 #define SDODD(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, FACTOR, BPP, MASK) \ 66 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, uint8* dst_ptr, \ 67 int dst_width) { \ 68 int r = (int)((unsigned int)(dst_width - 1) % (MASK + 1)); /* NOLINT */ \ 69 int n = (dst_width - 1) - r; \ 70 if (n > 0) { \ 71 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ 72 } \ 73 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ 74 dst_ptr + n * BPP, r + 1); \ 75 } 72 76 73 77 #ifdef HAS_SCALEROWDOWN2_SSSE3 74 78 SDANY(ScaleRowDown2_Any_SSSE3, ScaleRowDown2_SSSE3, ScaleRowDown2_C, 2, 1, 15) 75 SDANY(ScaleRowDown2Linear_Any_SSSE3, ScaleRowDown2Linear_SSSE3, 76 ScaleRowDown2Linear_C, 2, 1, 15) 77 SDANY(ScaleRowDown2Box_Any_SSSE3, ScaleRowDown2Box_SSSE3, ScaleRowDown2Box_C, 78 2, 1, 15) 79 SDODD(ScaleRowDown2Box_Odd_SSSE3, ScaleRowDown2Box_SSSE3, 80 ScaleRowDown2Box_Odd_C, 2, 1, 15) 79 SDANY(ScaleRowDown2Linear_Any_SSSE3, 80 ScaleRowDown2Linear_SSSE3, 81 ScaleRowDown2Linear_C, 82 2, 83 1, 84 15) 85 SDANY(ScaleRowDown2Box_Any_SSSE3, 86 ScaleRowDown2Box_SSSE3, 87 ScaleRowDown2Box_C, 88 2, 89 1, 90 15) 91 SDODD(ScaleRowDown2Box_Odd_SSSE3, 92 ScaleRowDown2Box_SSSE3, 93 ScaleRowDown2Box_Odd_C, 94 2, 95 1, 96 15) 81 97 #endif 82 98 #ifdef HAS_SCALEROWDOWN2_AVX2 83 99 SDANY(ScaleRowDown2_Any_AVX2, ScaleRowDown2_AVX2, ScaleRowDown2_C, 2, 1, 31) 84 SDANY(ScaleRowDown2Linear_Any_AVX2, ScaleRowDown2Linear_AVX2, 85 ScaleRowDown2Linear_C, 2, 1, 31) 86 SDANY(ScaleRowDown2Box_Any_AVX2, ScaleRowDown2Box_AVX2, ScaleRowDown2Box_C, 87 2, 1, 31) 88 SDODD(ScaleRowDown2Box_Odd_AVX2, ScaleRowDown2Box_AVX2, ScaleRowDown2Box_Odd_C, 89 2, 1, 31) 100 SDANY(ScaleRowDown2Linear_Any_AVX2, 101 ScaleRowDown2Linear_AVX2, 102 ScaleRowDown2Linear_C, 103 2, 104 1, 105 31) 106 SDANY(ScaleRowDown2Box_Any_AVX2, 107 ScaleRowDown2Box_AVX2, 108 ScaleRowDown2Box_C, 109 2, 110 1, 111 31) 112 SDODD(ScaleRowDown2Box_Odd_AVX2, 113 ScaleRowDown2Box_AVX2, 114 ScaleRowDown2Box_Odd_C, 115 2, 116 1, 117 31) 90 118 #endif 91 119 #ifdef HAS_SCALEROWDOWN2_NEON 92 120 SDANY(ScaleRowDown2_Any_NEON, ScaleRowDown2_NEON, ScaleRowDown2_C, 2, 1, 15) 93 SDANY(ScaleRowDown2Linear_Any_NEON, ScaleRowDown2Linear_NEON, 94 ScaleRowDown2Linear_C, 2, 1, 15) 95 SDANY(ScaleRowDown2Box_Any_NEON, ScaleRowDown2Box_NEON, 96 ScaleRowDown2Box_C, 2, 1, 15) 97 SDODD(ScaleRowDown2Box_Odd_NEON, ScaleRowDown2Box_NEON, 98 ScaleRowDown2Box_Odd_C, 2, 1, 15) 121 SDANY(ScaleRowDown2Linear_Any_NEON, 122 ScaleRowDown2Linear_NEON, 123 ScaleRowDown2Linear_C, 124 2, 125 1, 126 15) 127 SDANY(ScaleRowDown2Box_Any_NEON, 128 ScaleRowDown2Box_NEON, 129 ScaleRowDown2Box_C, 130 2, 131 1, 132 15) 133 SDODD(ScaleRowDown2Box_Odd_NEON, 134 ScaleRowDown2Box_NEON, 135 ScaleRowDown2Box_Odd_C, 136 2, 137 1, 138 15) 139 #endif 140 #ifdef HAS_SCALEROWDOWN2_MSA 141 SDANY(ScaleRowDown2_Any_MSA, ScaleRowDown2_MSA, ScaleRowDown2_C, 2, 1, 31) 142 SDANY(ScaleRowDown2Linear_Any_MSA, 143 ScaleRowDown2Linear_MSA, 144 ScaleRowDown2Linear_C, 145 2, 146 1, 147 31) 148 SDANY(ScaleRowDown2Box_Any_MSA, 149 ScaleRowDown2Box_MSA, 150 ScaleRowDown2Box_C, 151 2, 152 1, 153 31) 99 154 #endif 100 155 #ifdef HAS_SCALEROWDOWN4_SSSE3 101 156 SDANY(ScaleRowDown4_Any_SSSE3, ScaleRowDown4_SSSE3, ScaleRowDown4_C, 4, 1, 7) 102 SDANY(ScaleRowDown4Box_Any_SSSE3, ScaleRowDown4Box_SSSE3, ScaleRowDown4Box_C, 103 4, 1, 7) 157 SDANY(ScaleRowDown4Box_Any_SSSE3, 158 ScaleRowDown4Box_SSSE3, 159 ScaleRowDown4Box_C, 160 4, 161 1, 162 7) 104 163 #endif 105 164 #ifdef HAS_SCALEROWDOWN4_AVX2 106 165 SDANY(ScaleRowDown4_Any_AVX2, ScaleRowDown4_AVX2, ScaleRowDown4_C, 4, 1, 15) 107 SDANY(ScaleRowDown4Box_Any_AVX2, ScaleRowDown4Box_AVX2, ScaleRowDown4Box_C, 108 4, 1, 15) 166 SDANY(ScaleRowDown4Box_Any_AVX2, 167 ScaleRowDown4Box_AVX2, 168 ScaleRowDown4Box_C, 169 4, 170 1, 171 15) 109 172 #endif 110 173 #ifdef HAS_SCALEROWDOWN4_NEON 111 174 SDANY(ScaleRowDown4_Any_NEON, ScaleRowDown4_NEON, ScaleRowDown4_C, 4, 1, 7) 112 SDANY(ScaleRowDown4Box_Any_NEON, ScaleRowDown4Box_NEON, ScaleRowDown4Box_C, 113 4, 1, 7) 175 SDANY(ScaleRowDown4Box_Any_NEON, 176 ScaleRowDown4Box_NEON, 177 ScaleRowDown4Box_C, 178 4, 179 1, 180 7) 181 #endif 182 #ifdef HAS_SCALEROWDOWN4_MSA 183 SDANY(ScaleRowDown4_Any_MSA, ScaleRowDown4_MSA, ScaleRowDown4_C, 4, 1, 15) 184 SDANY(ScaleRowDown4Box_Any_MSA, 185 ScaleRowDown4Box_MSA, 186 ScaleRowDown4Box_C, 187 4, 188 1, 189 15) 114 190 #endif 115 191 #ifdef HAS_SCALEROWDOWN34_SSSE3 116 SDANY(ScaleRowDown34_Any_SSSE3, ScaleRowDown34_SSSE3, 117 ScaleRowDown34_C, 4 / 3, 1, 23) 118 SDANY(ScaleRowDown34_0_Box_Any_SSSE3, ScaleRowDown34_0_Box_SSSE3, 119 ScaleRowDown34_0_Box_C, 4 / 3, 1, 23) 120 SDANY(ScaleRowDown34_1_Box_Any_SSSE3, ScaleRowDown34_1_Box_SSSE3, 121 ScaleRowDown34_1_Box_C, 4 / 3, 1, 23) 192 SDANY(ScaleRowDown34_Any_SSSE3, 193 ScaleRowDown34_SSSE3, 194 ScaleRowDown34_C, 195 4 / 3, 196 1, 197 23) 198 SDANY(ScaleRowDown34_0_Box_Any_SSSE3, 199 ScaleRowDown34_0_Box_SSSE3, 200 ScaleRowDown34_0_Box_C, 201 4 / 3, 202 1, 203 23) 204 SDANY(ScaleRowDown34_1_Box_Any_SSSE3, 205 ScaleRowDown34_1_Box_SSSE3, 206 ScaleRowDown34_1_Box_C, 207 4 / 3, 208 1, 209 23) 122 210 #endif 123 211 #ifdef HAS_SCALEROWDOWN34_NEON 124 SDANY(ScaleRowDown34_Any_NEON, ScaleRowDown34_NEON, 125 ScaleRowDown34_C, 4 / 3, 1, 23) 126 SDANY(ScaleRowDown34_0_Box_Any_NEON, ScaleRowDown34_0_Box_NEON, 127 ScaleRowDown34_0_Box_C, 4 / 3, 1, 23) 128 SDANY(ScaleRowDown34_1_Box_Any_NEON, ScaleRowDown34_1_Box_NEON, 129 ScaleRowDown34_1_Box_C, 4 / 3, 1, 23) 212 SDANY(ScaleRowDown34_Any_NEON, 213 ScaleRowDown34_NEON, 214 ScaleRowDown34_C, 215 4 / 3, 216 1, 217 23) 218 SDANY(ScaleRowDown34_0_Box_Any_NEON, 219 ScaleRowDown34_0_Box_NEON, 220 ScaleRowDown34_0_Box_C, 221 4 / 3, 222 1, 223 23) 224 SDANY(ScaleRowDown34_1_Box_Any_NEON, 225 ScaleRowDown34_1_Box_NEON, 226 ScaleRowDown34_1_Box_C, 227 4 / 3, 228 1, 229 23) 130 230 #endif 131 231 #ifdef HAS_SCALEROWDOWN38_SSSE3 132 SDANY(ScaleRowDown38_Any_SSSE3, ScaleRowDown38_SSSE3, 133 ScaleRowDown38_C, 8 / 3, 1, 11) 134 SDANY(ScaleRowDown38_3_Box_Any_SSSE3, ScaleRowDown38_3_Box_SSSE3, 135 ScaleRowDown38_3_Box_C, 8 / 3, 1, 5) 136 SDANY(ScaleRowDown38_2_Box_Any_SSSE3, ScaleRowDown38_2_Box_SSSE3, 137 ScaleRowDown38_2_Box_C, 8 / 3, 1, 5) 232 SDANY(ScaleRowDown38_Any_SSSE3, 233 ScaleRowDown38_SSSE3, 234 ScaleRowDown38_C, 235 8 / 3, 236 1, 237 11) 238 SDANY(ScaleRowDown38_3_Box_Any_SSSE3, 239 ScaleRowDown38_3_Box_SSSE3, 240 ScaleRowDown38_3_Box_C, 241 8 / 3, 242 1, 243 5) 244 SDANY(ScaleRowDown38_2_Box_Any_SSSE3, 245 ScaleRowDown38_2_Box_SSSE3, 246 ScaleRowDown38_2_Box_C, 247 8 / 3, 248 1, 249 5) 138 250 #endif 139 251 #ifdef HAS_SCALEROWDOWN38_NEON 140 SDANY(ScaleRowDown38_Any_NEON, ScaleRowDown38_NEON, 141 ScaleRowDown38_C, 8 / 3, 1, 11) 142 SDANY(ScaleRowDown38_3_Box_Any_NEON, ScaleRowDown38_3_Box_NEON, 143 ScaleRowDown38_3_Box_C, 8 / 3, 1, 11) 144 SDANY(ScaleRowDown38_2_Box_Any_NEON, ScaleRowDown38_2_Box_NEON, 145 ScaleRowDown38_2_Box_C, 8 / 3, 1, 11) 252 SDANY(ScaleRowDown38_Any_NEON, 253 ScaleRowDown38_NEON, 254 ScaleRowDown38_C, 255 8 / 3, 256 1, 257 11) 258 SDANY(ScaleRowDown38_3_Box_Any_NEON, 259 ScaleRowDown38_3_Box_NEON, 260 ScaleRowDown38_3_Box_C, 261 8 / 3, 262 1, 263 11) 264 SDANY(ScaleRowDown38_2_Box_Any_NEON, 265 ScaleRowDown38_2_Box_NEON, 266 ScaleRowDown38_2_Box_C, 267 8 / 3, 268 1, 269 11) 270 #endif 271 #ifdef HAS_SCALEROWDOWN38_MSA 272 SDANY(ScaleRowDown38_Any_MSA, 273 ScaleRowDown38_MSA, 274 ScaleRowDown38_C, 275 8 / 3, 276 1, 277 11) 278 SDANY(ScaleRowDown38_3_Box_Any_MSA, 279 ScaleRowDown38_3_Box_MSA, 280 ScaleRowDown38_3_Box_C, 281 8 / 3, 282 1, 283 11) 284 SDANY(ScaleRowDown38_2_Box_Any_MSA, 285 ScaleRowDown38_2_Box_MSA, 286 ScaleRowDown38_2_Box_C, 287 8 / 3, 288 1, 289 11) 146 290 #endif 147 291 148 292 #ifdef HAS_SCALEARGBROWDOWN2_SSE2 149 SDANY(ScaleARGBRowDown2_Any_SSE2, ScaleARGBRowDown2_SSE2, 150 ScaleARGBRowDown2_C, 2, 4, 3) 151 SDANY(ScaleARGBRowDown2Linear_Any_SSE2, ScaleARGBRowDown2Linear_SSE2, 152 ScaleARGBRowDown2Linear_C, 2, 4, 3) 153 SDANY(ScaleARGBRowDown2Box_Any_SSE2, ScaleARGBRowDown2Box_SSE2, 154 ScaleARGBRowDown2Box_C, 2, 4, 3) 293 SDANY(ScaleARGBRowDown2_Any_SSE2, 294 ScaleARGBRowDown2_SSE2, 295 ScaleARGBRowDown2_C, 296 2, 297 4, 298 3) 299 SDANY(ScaleARGBRowDown2Linear_Any_SSE2, 300 ScaleARGBRowDown2Linear_SSE2, 301 ScaleARGBRowDown2Linear_C, 302 2, 303 4, 304 3) 305 SDANY(ScaleARGBRowDown2Box_Any_SSE2, 306 ScaleARGBRowDown2Box_SSE2, 307 ScaleARGBRowDown2Box_C, 308 2, 309 4, 310 3) 155 311 #endif 156 312 #ifdef HAS_SCALEARGBROWDOWN2_NEON 157 SDANY(ScaleARGBRowDown2_Any_NEON, ScaleARGBRowDown2_NEON, 158 ScaleARGBRowDown2_C, 2, 4, 7) 159 SDANY(ScaleARGBRowDown2Linear_Any_NEON, ScaleARGBRowDown2Linear_NEON, 160 ScaleARGBRowDown2Linear_C, 2, 4, 7) 161 SDANY(ScaleARGBRowDown2Box_Any_NEON, ScaleARGBRowDown2Box_NEON, 162 ScaleARGBRowDown2Box_C, 2, 4, 7) 313 SDANY(ScaleARGBRowDown2_Any_NEON, 314 ScaleARGBRowDown2_NEON, 315 ScaleARGBRowDown2_C, 316 2, 317 4, 318 7) 319 SDANY(ScaleARGBRowDown2Linear_Any_NEON, 320 ScaleARGBRowDown2Linear_NEON, 321 ScaleARGBRowDown2Linear_C, 322 2, 323 4, 324 7) 325 SDANY(ScaleARGBRowDown2Box_Any_NEON, 326 ScaleARGBRowDown2Box_NEON, 327 ScaleARGBRowDown2Box_C, 328 2, 329 4, 330 7) 331 #endif 332 #ifdef HAS_SCALEARGBROWDOWN2_MSA 333 SDANY(ScaleARGBRowDown2_Any_MSA, 334 ScaleARGBRowDown2_MSA, 335 ScaleARGBRowDown2_C, 336 2, 337 4, 338 3) 339 SDANY(ScaleARGBRowDown2Linear_Any_MSA, 340 ScaleARGBRowDown2Linear_MSA, 341 ScaleARGBRowDown2Linear_C, 342 2, 343 4, 344 3) 345 SDANY(ScaleARGBRowDown2Box_Any_MSA, 346 ScaleARGBRowDown2Box_MSA, 347 ScaleARGBRowDown2Box_C, 348 2, 349 4, 350 3) 163 351 #endif 164 352 #undef SDANY 165 353 166 354 // Scale down by even scale factor. 167 #define SDAANY(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, BPP, MASK) 168 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, int src_stepx,\169 uint8* dst_ptr, int dst_width) {\170 int r = (int)((unsigned int)dst_width % (MASK + 1));\171 int n = dst_width - r;\172 if (n > 0) {\173 SCALEROWDOWN_SIMD(src_ptr, src_stride, src_stepx, dst_ptr, n);\174 }\175 SCALEROWDOWN_C(src_ptr + (n * src_stepx) * BPP, src_stride,\176 src_stepx, dst_ptr + n * BPP, r);\177 355 #define SDAANY(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, BPP, MASK) \ 356 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, int src_stepx, \ 357 uint8* dst_ptr, int dst_width) { \ 358 int r = dst_width & MASK; \ 359 int n = dst_width & ~MASK; \ 360 if (n > 0) { \ 361 SCALEROWDOWN_SIMD(src_ptr, src_stride, src_stepx, dst_ptr, n); \ 362 } \ 363 SCALEROWDOWN_C(src_ptr + (n * src_stepx) * BPP, src_stride, src_stepx, \ 364 dst_ptr + n * BPP, r); \ 365 } 178 366 179 367 #ifdef HAS_SCALEARGBROWDOWNEVEN_SSE2 180 SDAANY(ScaleARGBRowDownEven_Any_SSE2, ScaleARGBRowDownEven_SSE2, 181 ScaleARGBRowDownEven_C, 4, 3) 182 SDAANY(ScaleARGBRowDownEvenBox_Any_SSE2, ScaleARGBRowDownEvenBox_SSE2, 183 ScaleARGBRowDownEvenBox_C, 4, 3) 368 SDAANY(ScaleARGBRowDownEven_Any_SSE2, 369 ScaleARGBRowDownEven_SSE2, 370 ScaleARGBRowDownEven_C, 371 4, 372 3) 373 SDAANY(ScaleARGBRowDownEvenBox_Any_SSE2, 374 ScaleARGBRowDownEvenBox_SSE2, 375 ScaleARGBRowDownEvenBox_C, 376 4, 377 3) 184 378 #endif 185 379 #ifdef HAS_SCALEARGBROWDOWNEVEN_NEON 186 SDAANY(ScaleARGBRowDownEven_Any_NEON, ScaleARGBRowDownEven_NEON, 187 ScaleARGBRowDownEven_C, 4, 3) 188 SDAANY(ScaleARGBRowDownEvenBox_Any_NEON, ScaleARGBRowDownEvenBox_NEON, 189 ScaleARGBRowDownEvenBox_C, 4, 3) 380 SDAANY(ScaleARGBRowDownEven_Any_NEON, 381 ScaleARGBRowDownEven_NEON, 382 ScaleARGBRowDownEven_C, 383 4, 384 3) 385 SDAANY(ScaleARGBRowDownEvenBox_Any_NEON, 386 ScaleARGBRowDownEvenBox_NEON, 387 ScaleARGBRowDownEvenBox_C, 388 4, 389 3) 390 #endif 391 #ifdef HAS_SCALEARGBROWDOWNEVEN_MSA 392 SDAANY(ScaleARGBRowDownEven_Any_MSA, 393 ScaleARGBRowDownEven_MSA, 394 ScaleARGBRowDownEven_C, 395 4, 396 3) 397 SDAANY(ScaleARGBRowDownEvenBox_Any_MSA, 398 ScaleARGBRowDownEvenBox_MSA, 399 ScaleARGBRowDownEvenBox_C, 400 4, 401 3) 190 402 #endif 191 403 192 404 // Add rows box filter scale down. 193 #define SAANY(NAMEANY, SCALEADDROW_SIMD, SCALEADDROW_C, MASK) 194 void NAMEANY(const uint8* src_ptr, uint16* dst_ptr, int src_width) { 195 int n = src_width & ~MASK;\196 if (n > 0) {\197 SCALEADDROW_SIMD(src_ptr, dst_ptr, n);\198 }\199 SCALEADDROW_C(src_ptr + n, dst_ptr + n, src_width & MASK);\200 405 #define SAANY(NAMEANY, SCALEADDROW_SIMD, SCALEADDROW_C, MASK) \ 406 void NAMEANY(const uint8* src_ptr, uint16* dst_ptr, int src_width) { \ 407 int n = src_width & ~MASK; \ 408 if (n > 0) { \ 409 SCALEADDROW_SIMD(src_ptr, dst_ptr, n); \ 410 } \ 411 SCALEADDROW_C(src_ptr + n, dst_ptr + n, src_width & MASK); \ 412 } 201 413 202 414 #ifdef HAS_SCALEADDROW_SSE2 … … 208 420 #ifdef HAS_SCALEADDROW_NEON 209 421 SAANY(ScaleAddRow_Any_NEON, ScaleAddRow_NEON, ScaleAddRow_C, 15) 422 #endif 423 #ifdef HAS_SCALEADDROW_MSA 424 SAANY(ScaleAddRow_Any_MSA, ScaleAddRow_MSA, ScaleAddRow_C, 15) 425 #endif 426 #ifdef HAS_SCALEADDROW_DSPR2 427 SAANY(ScaleAddRow_Any_DSPR2, ScaleAddRow_DSPR2, ScaleAddRow_C, 15) 210 428 #endif 211 429 #undef SAANY … … 215 433 } // namespace libyuv 216 434 #endif 217 218 219 220 221
Note: See TracChangeset
for help on using the changeset viewer.