1 /* 2 * Copyright 2013 The LibYuv Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef INCLUDE_LIBYUV_SCALE_ROW_H_ 12 #define INCLUDE_LIBYUV_SCALE_ROW_H_ 13 14 #include "libyuv/basic_types.h" 15 #include "libyuv/scale.h" 16 17 #ifdef __cplusplus 18 namespace libyuv { 19 extern "C" { 20 #endif 21 22 #if defined(__pnacl__) || defined(__CLR_VER) || \ 23 (defined(__native_client__) && defined(__x86_64__)) || \ 24 (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) 25 #define LIBYUV_DISABLE_X86 26 #endif 27 #if defined(__native_client__) 28 #define LIBYUV_DISABLE_NEON 29 #endif 30 // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 31 #if defined(__has_feature) 32 #if __has_feature(memory_sanitizer) 33 #define LIBYUV_DISABLE_X86 34 #endif 35 #endif 36 // GCC >= 4.7.0 required for AVX2. 37 #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) 38 #if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7)) 39 #define GCC_HAS_AVX2 1 40 #endif // GNUC >= 4.7 41 #endif // __GNUC__ 42 43 // clang >= 3.4.0 required for AVX2. 44 #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) 45 #if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) 46 #define CLANG_HAS_AVX2 1 47 #endif // clang >= 3.4 48 #endif // __clang__ 49 50 // Visual C 2012 required for AVX2. 51 #if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ 52 _MSC_VER >= 1700 53 #define VISUALC_HAS_AVX2 1 54 #endif // VisualStudio >= 2012 55 56 // The following are available on all x86 platforms: 57 #if !defined(LIBYUV_DISABLE_X86) && \ 58 (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) 59 #define HAS_FIXEDDIV1_X86 60 #define HAS_FIXEDDIV_X86 61 #define HAS_SCALEADDROW_SSE2 62 #define HAS_SCALEARGBCOLS_SSE2 63 #define HAS_SCALEARGBCOLSUP2_SSE2 64 #define HAS_SCALEARGBFILTERCOLS_SSSE3 65 #define HAS_SCALEARGBROWDOWN2_SSE2 66 #define HAS_SCALEARGBROWDOWNEVEN_SSE2 67 #define HAS_SCALECOLSUP2_SSE2 68 #define HAS_SCALEFILTERCOLS_SSSE3 69 #define HAS_SCALEROWDOWN2_SSSE3 70 #define HAS_SCALEROWDOWN34_SSSE3 71 #define HAS_SCALEROWDOWN38_SSSE3 72 #define HAS_SCALEROWDOWN4_SSSE3 73 #endif 74 75 // The following are available for gcc/clang x86 platforms: 76 // TODO(fbarchard): Port to Visual C 77 #if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__)) 78 #define HAS_SCALEUVROWDOWN2BOX_SSSE3 79 #define HAS_SCALEROWUP2LINEAR_SSE2 80 #define HAS_SCALEROWUP2LINEAR_SSSE3 81 #define HAS_SCALEROWUP2BILINEAR_SSE2 82 #define HAS_SCALEROWUP2BILINEAR_SSSE3 83 #define HAS_SCALEROWUP2LINEAR_12_SSSE3 84 #define HAS_SCALEROWUP2BILINEAR_12_SSSE3 85 #define HAS_SCALEROWUP2LINEAR_16_SSE2 86 #define HAS_SCALEROWUP2BILINEAR_16_SSE2 87 #define HAS_SCALEUVROWUP2LINEAR_SSSE3 88 #define HAS_SCALEUVROWUP2BILINEAR_SSSE3 89 #define HAS_SCALEUVROWUP2LINEAR_16_SSE2 90 #define HAS_SCALEUVROWUP2BILINEAR_16_SSE2 91 #endif 92 93 // The following are available for gcc/clang x86 platforms, but 94 // require clang 3.4 or gcc 4.7. 95 // TODO(fbarchard): Port to Visual C 96 #if !defined(LIBYUV_DISABLE_X86) && \ 97 (defined(__x86_64__) || defined(__i386__)) && \ 98 (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)) 99 #define HAS_SCALEUVROWDOWN2BOX_AVX2 100 #define HAS_SCALEROWUP2LINEAR_AVX2 101 #define HAS_SCALEROWUP2BILINEAR_AVX2 102 #define HAS_SCALEROWUP2LINEAR_12_AVX2 103 #define HAS_SCALEROWUP2BILINEAR_12_AVX2 104 #define HAS_SCALEROWUP2LINEAR_16_AVX2 105 #define HAS_SCALEROWUP2BILINEAR_16_AVX2 106 #define HAS_SCALEUVROWUP2LINEAR_AVX2 107 #define HAS_SCALEUVROWUP2BILINEAR_AVX2 108 #define HAS_SCALEUVROWUP2LINEAR_16_AVX2 109 #define HAS_SCALEUVROWUP2BILINEAR_16_AVX2 110 #endif 111 112 // The following are available on all x86 platforms, but 113 // require VS2012, clang 3.4 or gcc 4.7. 114 // The code supports NaCL but requires a new compiler and validator. 115 #if !defined(LIBYUV_DISABLE_X86) && \ 116 (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \ 117 defined(GCC_HAS_AVX2)) 118 #define HAS_SCALEADDROW_AVX2 119 #define HAS_SCALEROWDOWN2_AVX2 120 #define HAS_SCALEROWDOWN4_AVX2 121 #endif 122 123 // The following are available on Neon platforms: 124 #if !defined(LIBYUV_DISABLE_NEON) && \ 125 (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) 126 #define HAS_SCALEADDROW_NEON 127 #define HAS_SCALEARGBCOLS_NEON 128 #define HAS_SCALEARGBFILTERCOLS_NEON 129 #define HAS_SCALEARGBROWDOWN2_NEON 130 #define HAS_SCALEARGBROWDOWNEVEN_NEON 131 #define HAS_SCALEFILTERCOLS_NEON 132 #define HAS_SCALEROWDOWN2_NEON 133 #define HAS_SCALEROWDOWN34_NEON 134 #define HAS_SCALEROWDOWN38_NEON 135 #define HAS_SCALEROWDOWN4_NEON 136 #define HAS_SCALEUVROWDOWN2BOX_NEON 137 #define HAS_SCALEUVROWDOWNEVEN_NEON 138 #define HAS_SCALEROWUP2LINEAR_NEON 139 #define HAS_SCALEROWUP2BILINEAR_NEON 140 #define HAS_SCALEROWUP2LINEAR_12_NEON 141 #define HAS_SCALEROWUP2BILINEAR_12_NEON 142 #define HAS_SCALEROWUP2LINEAR_16_NEON 143 #define HAS_SCALEROWUP2BILINEAR_16_NEON 144 #define HAS_SCALEUVROWUP2LINEAR_NEON 145 #define HAS_SCALEUVROWUP2BILINEAR_NEON 146 #define HAS_SCALEUVROWUP2LINEAR_16_NEON 147 #define HAS_SCALEUVROWUP2BILINEAR_16_NEON 148 #endif 149 150 #if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) 151 #define HAS_SCALEADDROW_MSA 152 #define HAS_SCALEARGBCOLS_MSA 153 #define HAS_SCALEARGBFILTERCOLS_MSA 154 #define HAS_SCALEARGBROWDOWN2_MSA 155 #define HAS_SCALEARGBROWDOWNEVEN_MSA 156 #define HAS_SCALEFILTERCOLS_MSA 157 #define HAS_SCALEROWDOWN2_MSA 158 #define HAS_SCALEROWDOWN34_MSA 159 #define HAS_SCALEROWDOWN38_MSA 160 #define HAS_SCALEROWDOWN4_MSA 161 #endif 162 163 #if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) 164 #define HAS_FIXEDDIV1_MIPS 165 #define HAS_FIXEDDIV_MIPS 166 #define HAS_SCALEADDROW_16_MMI 167 #define HAS_SCALEADDROW_MMI 168 #define HAS_SCALEARGBCOLS_MMI 169 #define HAS_SCALEARGBCOLSUP2_MMI 170 #define HAS_SCALEARGBROWDOWN2_MMI 171 #define HAS_SCALEARGBROWDOWNEVEN_MMI 172 #define HAS_SCALECOLS_16_MMI 173 #define HAS_SCALECOLS_MMI 174 #define HAS_SCALEROWDOWN2_16_MMI 175 #define HAS_SCALEROWDOWN2_MMI 176 #define HAS_SCALEROWDOWN4_16_MMI 177 #define HAS_SCALEROWDOWN4_MMI 178 #define HAS_SCALEROWDOWN34_MMI 179 #endif 180 181 // Scale ARGB vertically with bilinear interpolation. 182 void ScalePlaneVertical(int src_height, 183 int dst_width, 184 int dst_height, 185 int src_stride, 186 int dst_stride, 187 const uint8_t* src_argb, 188 uint8_t* dst_argb, 189 int x, 190 int y, 191 int dy, 192 int bpp, 193 enum FilterMode filtering); 194 195 void ScalePlaneVertical_16(int src_height, 196 int dst_width, 197 int dst_height, 198 int src_stride, 199 int dst_stride, 200 const uint16_t* src_argb, 201 uint16_t* dst_argb, 202 int x, 203 int y, 204 int dy, 205 int wpp, 206 enum FilterMode filtering); 207 208 // Simplify the filtering based on scale factors. 209 enum FilterMode ScaleFilterReduce(int src_width, 210 int src_height, 211 int dst_width, 212 int dst_height, 213 enum FilterMode filtering); 214 215 // Divide num by div and return as 16.16 fixed point result. 216 int FixedDiv_C(int num, int div); 217 int FixedDiv_X86(int num, int div); 218 int FixedDiv_MIPS(int num, int div); 219 // Divide num - 1 by div - 1 and return as 16.16 fixed point result. 220 int FixedDiv1_C(int num, int div); 221 int FixedDiv1_X86(int num, int div); 222 int FixedDiv1_MIPS(int num, int div); 223 #ifdef HAS_FIXEDDIV_X86 224 #define FixedDiv FixedDiv_X86 225 #define FixedDiv1 FixedDiv1_X86 226 #elif defined HAS_FIXEDDIV_MIPS 227 #define FixedDiv FixedDiv_MIPS 228 #define FixedDiv1 FixedDiv1_MIPS 229 #else 230 #define FixedDiv FixedDiv_C 231 #define FixedDiv1 FixedDiv1_C 232 #endif 233 234 // Compute slope values for stepping. 235 void ScaleSlope(int src_width, 236 int src_height, 237 int dst_width, 238 int dst_height, 239 enum FilterMode filtering, 240 int* x, 241 int* y, 242 int* dx, 243 int* dy); 244 245 void ScaleRowDown2_C(const uint8_t* src_ptr, 246 ptrdiff_t src_stride, 247 uint8_t* dst, 248 int dst_width); 249 void ScaleRowDown2_16_C(const uint16_t* src_ptr, 250 ptrdiff_t src_stride, 251 uint16_t* dst, 252 int dst_width); 253 void ScaleRowDown2Linear_C(const uint8_t* src_ptr, 254 ptrdiff_t src_stride, 255 uint8_t* dst, 256 int dst_width); 257 void ScaleRowDown2Linear_16_C(const uint16_t* src_ptr, 258 ptrdiff_t src_stride, 259 uint16_t* dst, 260 int dst_width); 261 void ScaleRowDown2Box_C(const uint8_t* src_ptr, 262 ptrdiff_t src_stride, 263 uint8_t* dst, 264 int dst_width); 265 void ScaleRowDown2Box_Odd_C(const uint8_t* src_ptr, 266 ptrdiff_t src_stride, 267 uint8_t* dst, 268 int dst_width); 269 void ScaleRowDown2Box_16_C(const uint16_t* src_ptr, 270 ptrdiff_t src_stride, 271 uint16_t* dst, 272 int dst_width); 273 void ScaleRowDown4_C(const uint8_t* src_ptr, 274 ptrdiff_t src_stride, 275 uint8_t* dst, 276 int dst_width); 277 void ScaleRowDown4_16_C(const uint16_t* src_ptr, 278 ptrdiff_t src_stride, 279 uint16_t* dst, 280 int dst_width); 281 void ScaleRowDown4Box_C(const uint8_t* src_ptr, 282 ptrdiff_t src_stride, 283 uint8_t* dst, 284 int dst_width); 285 void ScaleRowDown4Box_16_C(const uint16_t* src_ptr, 286 ptrdiff_t src_stride, 287 uint16_t* dst, 288 int dst_width); 289 void ScaleRowDown34_C(const uint8_t* src_ptr, 290 ptrdiff_t src_stride, 291 uint8_t* dst, 292 int dst_width); 293 void ScaleRowDown34_16_C(const uint16_t* src_ptr, 294 ptrdiff_t src_stride, 295 uint16_t* dst, 296 int dst_width); 297 void ScaleRowDown34_0_Box_C(const uint8_t* src_ptr, 298 ptrdiff_t src_stride, 299 uint8_t* d, 300 int dst_width); 301 void ScaleRowDown34_0_Box_16_C(const uint16_t* src_ptr, 302 ptrdiff_t src_stride, 303 uint16_t* d, 304 int dst_width); 305 void ScaleRowDown34_1_Box_C(const uint8_t* src_ptr, 306 ptrdiff_t src_stride, 307 uint8_t* d, 308 int dst_width); 309 void ScaleRowDown34_1_Box_16_C(const uint16_t* src_ptr, 310 ptrdiff_t src_stride, 311 uint16_t* d, 312 int dst_width); 313 314 void ScaleRowUp2_Linear_C(const uint8_t* src_ptr, 315 uint8_t* dst_ptr, 316 int dst_width); 317 void ScaleRowUp2_Bilinear_C(const uint8_t* src_ptr, 318 ptrdiff_t src_stride, 319 uint8_t* dst_ptr, 320 ptrdiff_t dst_stride, 321 int dst_width); 322 void ScaleRowUp2_Linear_16_C(const uint16_t* src_ptr, 323 uint16_t* dst_ptr, 324 int dst_width); 325 void ScaleRowUp2_Bilinear_16_C(const uint16_t* src_ptr, 326 ptrdiff_t src_stride, 327 uint16_t* dst_ptr, 328 ptrdiff_t dst_stride, 329 int dst_width); 330 void ScaleRowUp2_Linear_Any_C(const uint8_t* src_ptr, 331 uint8_t* dst_ptr, 332 int dst_width); 333 void ScaleRowUp2_Bilinear_Any_C(const uint8_t* src_ptr, 334 ptrdiff_t src_stride, 335 uint8_t* dst_ptr, 336 ptrdiff_t dst_stride, 337 int dst_width); 338 void ScaleRowUp2_Linear_16_Any_C(const uint16_t* src_ptr, 339 uint16_t* dst_ptr, 340 int dst_width); 341 void ScaleRowUp2_Bilinear_16_Any_C(const uint16_t* src_ptr, 342 ptrdiff_t src_stride, 343 uint16_t* dst_ptr, 344 ptrdiff_t dst_stride, 345 int dst_width); 346 347 void ScaleCols_C(uint8_t* dst_ptr, 348 const uint8_t* src_ptr, 349 int dst_width, 350 int x, 351 int dx); 352 void ScaleCols_16_C(uint16_t* dst_ptr, 353 const uint16_t* src_ptr, 354 int dst_width, 355 int x, 356 int dx); 357 void ScaleColsUp2_C(uint8_t* dst_ptr, 358 const uint8_t* src_ptr, 359 int dst_width, 360 int, 361 int); 362 void ScaleColsUp2_16_C(uint16_t* dst_ptr, 363 const uint16_t* src_ptr, 364 int dst_width, 365 int, 366 int); 367 void ScaleFilterCols_C(uint8_t* dst_ptr, 368 const uint8_t* src_ptr, 369 int dst_width, 370 int x, 371 int dx); 372 void ScaleFilterCols_16_C(uint16_t* dst_ptr, 373 const uint16_t* src_ptr, 374 int dst_width, 375 int x, 376 int dx); 377 void ScaleFilterCols64_C(uint8_t* dst_ptr, 378 const uint8_t* src_ptr, 379 int dst_width, 380 int x32, 381 int dx); 382 void ScaleFilterCols64_16_C(uint16_t* dst_ptr, 383 const uint16_t* src_ptr, 384 int dst_width, 385 int x32, 386 int dx); 387 void ScaleRowDown38_C(const uint8_t* src_ptr, 388 ptrdiff_t src_stride, 389 uint8_t* dst, 390 int dst_width); 391 void ScaleRowDown38_16_C(const uint16_t* src_ptr, 392 ptrdiff_t src_stride, 393 uint16_t* dst, 394 int dst_width); 395 void ScaleRowDown38_3_Box_C(const uint8_t* src_ptr, 396 ptrdiff_t src_stride, 397 uint8_t* dst_ptr, 398 int dst_width); 399 void ScaleRowDown38_3_Box_16_C(const uint16_t* src_ptr, 400 ptrdiff_t src_stride, 401 uint16_t* dst_ptr, 402 int dst_width); 403 void ScaleRowDown38_2_Box_C(const uint8_t* src_ptr, 404 ptrdiff_t src_stride, 405 uint8_t* dst_ptr, 406 int dst_width); 407 void ScaleRowDown38_2_Box_16_C(const uint16_t* src_ptr, 408 ptrdiff_t src_stride, 409 uint16_t* dst_ptr, 410 int dst_width); 411 void ScaleAddRow_C(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 412 void ScaleAddRow_16_C(const uint16_t* src_ptr, 413 uint32_t* dst_ptr, 414 int src_width); 415 void ScaleARGBRowDown2_C(const uint8_t* src_argb, 416 ptrdiff_t src_stride, 417 uint8_t* dst_argb, 418 int dst_width); 419 void ScaleARGBRowDown2Linear_C(const uint8_t* src_argb, 420 ptrdiff_t src_stride, 421 uint8_t* dst_argb, 422 int dst_width); 423 void ScaleARGBRowDown2Box_C(const uint8_t* src_argb, 424 ptrdiff_t src_stride, 425 uint8_t* dst_argb, 426 int dst_width); 427 void ScaleARGBRowDownEven_C(const uint8_t* src_argb, 428 ptrdiff_t src_stride, 429 int src_stepx, 430 uint8_t* dst_argb, 431 int dst_width); 432 void ScaleARGBRowDownEvenBox_C(const uint8_t* src_argb, 433 ptrdiff_t src_stride, 434 int src_stepx, 435 uint8_t* dst_argb, 436 int dst_width); 437 void ScaleARGBCols_C(uint8_t* dst_argb, 438 const uint8_t* src_argb, 439 int dst_width, 440 int x, 441 int dx); 442 void ScaleARGBCols64_C(uint8_t* dst_argb, 443 const uint8_t* src_argb, 444 int dst_width, 445 int x32, 446 int dx); 447 void ScaleARGBColsUp2_C(uint8_t* dst_argb, 448 const uint8_t* src_argb, 449 int dst_width, 450 int, 451 int); 452 void ScaleARGBFilterCols_C(uint8_t* dst_argb, 453 const uint8_t* src_argb, 454 int dst_width, 455 int x, 456 int dx); 457 void ScaleARGBFilterCols64_C(uint8_t* dst_argb, 458 const uint8_t* src_argb, 459 int dst_width, 460 int x32, 461 int dx); 462 void ScaleUVRowDown2_C(const uint8_t* src_uv, 463 ptrdiff_t src_stride, 464 uint8_t* dst_uv, 465 int dst_width); 466 void ScaleUVRowDown2Linear_C(const uint8_t* src_uv, 467 ptrdiff_t src_stride, 468 uint8_t* dst_uv, 469 int dst_width); 470 void ScaleUVRowDown2Box_C(const uint8_t* src_uv, 471 ptrdiff_t src_stride, 472 uint8_t* dst_uv, 473 int dst_width); 474 void ScaleUVRowDownEven_C(const uint8_t* src_uv, 475 ptrdiff_t src_stride, 476 int src_stepx, 477 uint8_t* dst_uv, 478 int dst_width); 479 void ScaleUVRowDownEvenBox_C(const uint8_t* src_uv, 480 ptrdiff_t src_stride, 481 int src_stepx, 482 uint8_t* dst_uv, 483 int dst_width); 484 485 void ScaleUVRowUp2_Linear_C(const uint8_t* src_ptr, 486 uint8_t* dst_ptr, 487 int dst_width); 488 void ScaleUVRowUp2_Bilinear_C(const uint8_t* src_ptr, 489 ptrdiff_t src_stride, 490 uint8_t* dst_ptr, 491 ptrdiff_t dst_stride, 492 int dst_width); 493 void ScaleUVRowUp2_Linear_Any_C(const uint8_t* src_ptr, 494 uint8_t* dst_ptr, 495 int dst_width); 496 void ScaleUVRowUp2_Bilinear_Any_C(const uint8_t* src_ptr, 497 ptrdiff_t src_stride, 498 uint8_t* dst_ptr, 499 ptrdiff_t dst_stride, 500 int dst_width); 501 void ScaleUVRowUp2_Linear_16_C(const uint16_t* src_ptr, 502 uint16_t* dst_ptr, 503 int dst_width); 504 void ScaleUVRowUp2_Bilinear_16_C(const uint16_t* src_ptr, 505 ptrdiff_t src_stride, 506 uint16_t* dst_ptr, 507 ptrdiff_t dst_stride, 508 int dst_width); 509 void ScaleUVRowUp2_Linear_16_Any_C(const uint16_t* src_ptr, 510 uint16_t* dst_ptr, 511 int dst_width); 512 void ScaleUVRowUp2_Bilinear_16_Any_C(const uint16_t* src_ptr, 513 ptrdiff_t src_stride, 514 uint16_t* dst_ptr, 515 ptrdiff_t dst_stride, 516 int dst_width); 517 518 void ScaleUVCols_C(uint8_t* dst_uv, 519 const uint8_t* src_uv, 520 int dst_width, 521 int x, 522 int dx); 523 void ScaleUVCols64_C(uint8_t* dst_uv, 524 const uint8_t* src_uv, 525 int dst_width, 526 int x32, 527 int dx); 528 void ScaleUVColsUp2_C(uint8_t* dst_uv, 529 const uint8_t* src_uv, 530 int dst_width, 531 int, 532 int); 533 void ScaleUVFilterCols_C(uint8_t* dst_uv, 534 const uint8_t* src_uv, 535 int dst_width, 536 int x, 537 int dx); 538 void ScaleUVFilterCols64_C(uint8_t* dst_uv, 539 const uint8_t* src_uv, 540 int dst_width, 541 int x32, 542 int dx); 543 544 // Specialized scalers for x86. 545 void ScaleRowDown2_SSSE3(const uint8_t* src_ptr, 546 ptrdiff_t src_stride, 547 uint8_t* dst_ptr, 548 int dst_width); 549 void ScaleRowDown2Linear_SSSE3(const uint8_t* src_ptr, 550 ptrdiff_t src_stride, 551 uint8_t* dst_ptr, 552 int dst_width); 553 void ScaleRowDown2Box_SSSE3(const uint8_t* src_ptr, 554 ptrdiff_t src_stride, 555 uint8_t* dst_ptr, 556 int dst_width); 557 void ScaleRowDown2_AVX2(const uint8_t* src_ptr, 558 ptrdiff_t src_stride, 559 uint8_t* dst_ptr, 560 int dst_width); 561 void ScaleRowDown2Linear_AVX2(const uint8_t* src_ptr, 562 ptrdiff_t src_stride, 563 uint8_t* dst_ptr, 564 int dst_width); 565 void ScaleRowDown2Box_AVX2(const uint8_t* src_ptr, 566 ptrdiff_t src_stride, 567 uint8_t* dst_ptr, 568 int dst_width); 569 void ScaleRowDown4_SSSE3(const uint8_t* src_ptr, 570 ptrdiff_t src_stride, 571 uint8_t* dst_ptr, 572 int dst_width); 573 void ScaleRowDown4Box_SSSE3(const uint8_t* src_ptr, 574 ptrdiff_t src_stride, 575 uint8_t* dst_ptr, 576 int dst_width); 577 void ScaleRowDown4_AVX2(const uint8_t* src_ptr, 578 ptrdiff_t src_stride, 579 uint8_t* dst_ptr, 580 int dst_width); 581 void ScaleRowDown4Box_AVX2(const uint8_t* src_ptr, 582 ptrdiff_t src_stride, 583 uint8_t* dst_ptr, 584 int dst_width); 585 586 void ScaleRowDown34_SSSE3(const uint8_t* src_ptr, 587 ptrdiff_t src_stride, 588 uint8_t* dst_ptr, 589 int dst_width); 590 void ScaleRowDown34_1_Box_SSSE3(const uint8_t* src_ptr, 591 ptrdiff_t src_stride, 592 uint8_t* dst_ptr, 593 int dst_width); 594 void ScaleRowDown34_0_Box_SSSE3(const uint8_t* src_ptr, 595 ptrdiff_t src_stride, 596 uint8_t* dst_ptr, 597 int dst_width); 598 void ScaleRowDown38_SSSE3(const uint8_t* src_ptr, 599 ptrdiff_t src_stride, 600 uint8_t* dst_ptr, 601 int dst_width); 602 void ScaleRowDown38_3_Box_SSSE3(const uint8_t* src_ptr, 603 ptrdiff_t src_stride, 604 uint8_t* dst_ptr, 605 int dst_width); 606 void ScaleRowDown38_2_Box_SSSE3(const uint8_t* src_ptr, 607 ptrdiff_t src_stride, 608 uint8_t* dst_ptr, 609 int dst_width); 610 611 void ScaleRowUp2_Linear_SSE2(const uint8_t* src_ptr, 612 uint8_t* dst_ptr, 613 int dst_width); 614 void ScaleRowUp2_Bilinear_SSE2(const uint8_t* src_ptr, 615 ptrdiff_t src_stride, 616 uint8_t* dst_ptr, 617 ptrdiff_t dst_stride, 618 int dst_width); 619 void ScaleRowUp2_Linear_12_SSSE3(const uint16_t* src_ptr, 620 uint16_t* dst_ptr, 621 int dst_width); 622 void ScaleRowUp2_Bilinear_12_SSSE3(const uint16_t* src_ptr, 623 ptrdiff_t src_stride, 624 uint16_t* dst_ptr, 625 ptrdiff_t dst_stride, 626 int dst_width); 627 void ScaleRowUp2_Linear_16_SSE2(const uint16_t* src_ptr, 628 uint16_t* dst_ptr, 629 int dst_width); 630 void ScaleRowUp2_Bilinear_16_SSE2(const uint16_t* src_ptr, 631 ptrdiff_t src_stride, 632 uint16_t* dst_ptr, 633 ptrdiff_t dst_stride, 634 int dst_width); 635 void ScaleRowUp2_Linear_SSSE3(const uint8_t* src_ptr, 636 uint8_t* dst_ptr, 637 int dst_width); 638 void ScaleRowUp2_Bilinear_SSSE3(const uint8_t* src_ptr, 639 ptrdiff_t src_stride, 640 uint8_t* dst_ptr, 641 ptrdiff_t dst_stride, 642 int dst_width); 643 void ScaleRowUp2_Linear_AVX2(const uint8_t* src_ptr, 644 uint8_t* dst_ptr, 645 int dst_width); 646 void ScaleRowUp2_Bilinear_AVX2(const uint8_t* src_ptr, 647 ptrdiff_t src_stride, 648 uint8_t* dst_ptr, 649 ptrdiff_t dst_stride, 650 int dst_width); 651 void ScaleRowUp2_Linear_12_AVX2(const uint16_t* src_ptr, 652 uint16_t* dst_ptr, 653 int dst_width); 654 void ScaleRowUp2_Bilinear_12_AVX2(const uint16_t* src_ptr, 655 ptrdiff_t src_stride, 656 uint16_t* dst_ptr, 657 ptrdiff_t dst_stride, 658 int dst_width); 659 void ScaleRowUp2_Linear_16_AVX2(const uint16_t* src_ptr, 660 uint16_t* dst_ptr, 661 int dst_width); 662 void ScaleRowUp2_Bilinear_16_AVX2(const uint16_t* src_ptr, 663 ptrdiff_t src_stride, 664 uint16_t* dst_ptr, 665 ptrdiff_t dst_stride, 666 int dst_width); 667 void ScaleRowUp2_Linear_Any_SSE2(const uint8_t* src_ptr, 668 uint8_t* dst_ptr, 669 int dst_width); 670 void ScaleRowUp2_Bilinear_Any_SSE2(const uint8_t* src_ptr, 671 ptrdiff_t src_stride, 672 uint8_t* dst_ptr, 673 ptrdiff_t dst_stride, 674 int dst_width); 675 void ScaleRowUp2_Linear_12_Any_SSSE3(const uint16_t* src_ptr, 676 uint16_t* dst_ptr, 677 int dst_width); 678 void ScaleRowUp2_Bilinear_12_Any_SSSE3(const uint16_t* src_ptr, 679 ptrdiff_t src_stride, 680 uint16_t* dst_ptr, 681 ptrdiff_t dst_stride, 682 int dst_width); 683 void ScaleRowUp2_Linear_16_Any_SSE2(const uint16_t* src_ptr, 684 uint16_t* dst_ptr, 685 int dst_width); 686 void ScaleRowUp2_Bilinear_16_Any_SSSE3(const uint16_t* src_ptr, 687 ptrdiff_t src_stride, 688 uint16_t* dst_ptr, 689 ptrdiff_t dst_stride, 690 int dst_width); 691 void ScaleRowUp2_Linear_Any_SSSE3(const uint8_t* src_ptr, 692 uint8_t* dst_ptr, 693 int dst_width); 694 void ScaleRowUp2_Bilinear_Any_SSSE3(const uint8_t* src_ptr, 695 ptrdiff_t src_stride, 696 uint8_t* dst_ptr, 697 ptrdiff_t dst_stride, 698 int dst_width); 699 void ScaleRowUp2_Linear_Any_AVX2(const uint8_t* src_ptr, 700 uint8_t* dst_ptr, 701 int dst_width); 702 void ScaleRowUp2_Bilinear_Any_AVX2(const uint8_t* src_ptr, 703 ptrdiff_t src_stride, 704 uint8_t* dst_ptr, 705 ptrdiff_t dst_stride, 706 int dst_width); 707 void ScaleRowUp2_Linear_12_Any_AVX2(const uint16_t* src_ptr, 708 uint16_t* dst_ptr, 709 int dst_width); 710 void ScaleRowUp2_Bilinear_12_Any_AVX2(const uint16_t* src_ptr, 711 ptrdiff_t src_stride, 712 uint16_t* dst_ptr, 713 ptrdiff_t dst_stride, 714 int dst_width); 715 void ScaleRowUp2_Linear_16_Any_AVX2(const uint16_t* src_ptr, 716 uint16_t* dst_ptr, 717 int dst_width); 718 void ScaleRowUp2_Bilinear_16_Any_AVX2(const uint16_t* src_ptr, 719 ptrdiff_t src_stride, 720 uint16_t* dst_ptr, 721 ptrdiff_t dst_stride, 722 int dst_width); 723 724 void ScaleRowDown2_Any_SSSE3(const uint8_t* src_ptr, 725 ptrdiff_t src_stride, 726 uint8_t* dst_ptr, 727 int dst_width); 728 void ScaleRowDown2Linear_Any_SSSE3(const uint8_t* src_ptr, 729 ptrdiff_t src_stride, 730 uint8_t* dst_ptr, 731 int dst_width); 732 void ScaleRowDown2Box_Any_SSSE3(const uint8_t* src_ptr, 733 ptrdiff_t src_stride, 734 uint8_t* dst_ptr, 735 int dst_width); 736 void ScaleRowDown2Box_Odd_SSSE3(const uint8_t* src_ptr, 737 ptrdiff_t src_stride, 738 uint8_t* dst_ptr, 739 int dst_width); 740 void ScaleRowDown2_Any_AVX2(const uint8_t* src_ptr, 741 ptrdiff_t src_stride, 742 uint8_t* dst_ptr, 743 int dst_width); 744 void ScaleRowDown2Linear_Any_AVX2(const uint8_t* src_ptr, 745 ptrdiff_t src_stride, 746 uint8_t* dst_ptr, 747 int dst_width); 748 void ScaleRowDown2Box_Any_AVX2(const uint8_t* src_ptr, 749 ptrdiff_t src_stride, 750 uint8_t* dst_ptr, 751 int dst_width); 752 void ScaleRowDown2Box_Odd_AVX2(const uint8_t* src_ptr, 753 ptrdiff_t src_stride, 754 uint8_t* dst_ptr, 755 int dst_width); 756 void ScaleRowDown4_Any_SSSE3(const uint8_t* src_ptr, 757 ptrdiff_t src_stride, 758 uint8_t* dst_ptr, 759 int dst_width); 760 void ScaleRowDown4Box_Any_SSSE3(const uint8_t* src_ptr, 761 ptrdiff_t src_stride, 762 uint8_t* dst_ptr, 763 int dst_width); 764 void ScaleRowDown4_Any_AVX2(const uint8_t* src_ptr, 765 ptrdiff_t src_stride, 766 uint8_t* dst_ptr, 767 int dst_width); 768 void ScaleRowDown4Box_Any_AVX2(const uint8_t* src_ptr, 769 ptrdiff_t src_stride, 770 uint8_t* dst_ptr, 771 int dst_width); 772 773 void ScaleRowDown34_Any_SSSE3(const uint8_t* src_ptr, 774 ptrdiff_t src_stride, 775 uint8_t* dst_ptr, 776 int dst_width); 777 void ScaleRowDown34_1_Box_Any_SSSE3(const uint8_t* src_ptr, 778 ptrdiff_t src_stride, 779 uint8_t* dst_ptr, 780 int dst_width); 781 void ScaleRowDown34_0_Box_Any_SSSE3(const uint8_t* src_ptr, 782 ptrdiff_t src_stride, 783 uint8_t* dst_ptr, 784 int dst_width); 785 void ScaleRowDown38_Any_SSSE3(const uint8_t* src_ptr, 786 ptrdiff_t src_stride, 787 uint8_t* dst_ptr, 788 int dst_width); 789 void ScaleRowDown38_3_Box_Any_SSSE3(const uint8_t* src_ptr, 790 ptrdiff_t src_stride, 791 uint8_t* dst_ptr, 792 int dst_width); 793 void ScaleRowDown38_2_Box_Any_SSSE3(const uint8_t* src_ptr, 794 ptrdiff_t src_stride, 795 uint8_t* dst_ptr, 796 int dst_width); 797 798 void ScaleAddRow_SSE2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 799 void ScaleAddRow_AVX2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 800 void ScaleAddRow_Any_SSE2(const uint8_t* src_ptr, 801 uint16_t* dst_ptr, 802 int src_width); 803 void ScaleAddRow_Any_AVX2(const uint8_t* src_ptr, 804 uint16_t* dst_ptr, 805 int src_width); 806 807 void ScaleFilterCols_SSSE3(uint8_t* dst_ptr, 808 const uint8_t* src_ptr, 809 int dst_width, 810 int x, 811 int dx); 812 void ScaleColsUp2_SSE2(uint8_t* dst_ptr, 813 const uint8_t* src_ptr, 814 int dst_width, 815 int x, 816 int dx); 817 818 // ARGB Column functions 819 void ScaleARGBCols_SSE2(uint8_t* dst_argb, 820 const uint8_t* src_argb, 821 int dst_width, 822 int x, 823 int dx); 824 void ScaleARGBFilterCols_SSSE3(uint8_t* dst_argb, 825 const uint8_t* src_argb, 826 int dst_width, 827 int x, 828 int dx); 829 void ScaleARGBColsUp2_SSE2(uint8_t* dst_argb, 830 const uint8_t* src_argb, 831 int dst_width, 832 int x, 833 int dx); 834 void ScaleARGBFilterCols_NEON(uint8_t* dst_argb, 835 const uint8_t* src_argb, 836 int dst_width, 837 int x, 838 int dx); 839 void ScaleARGBCols_NEON(uint8_t* dst_argb, 840 const uint8_t* src_argb, 841 int dst_width, 842 int x, 843 int dx); 844 void ScaleARGBFilterCols_Any_NEON(uint8_t* dst_ptr, 845 const uint8_t* src_ptr, 846 int dst_width, 847 int x, 848 int dx); 849 void ScaleARGBCols_Any_NEON(uint8_t* dst_ptr, 850 const uint8_t* src_ptr, 851 int dst_width, 852 int x, 853 int dx); 854 void ScaleARGBFilterCols_MSA(uint8_t* dst_argb, 855 const uint8_t* src_argb, 856 int dst_width, 857 int x, 858 int dx); 859 void ScaleARGBCols_MSA(uint8_t* dst_argb, 860 const uint8_t* src_argb, 861 int dst_width, 862 int x, 863 int dx); 864 void ScaleARGBFilterCols_Any_MSA(uint8_t* dst_ptr, 865 const uint8_t* src_ptr, 866 int dst_width, 867 int x, 868 int dx); 869 void ScaleARGBCols_Any_MSA(uint8_t* dst_ptr, 870 const uint8_t* src_ptr, 871 int dst_width, 872 int x, 873 int dx); 874 void ScaleARGBCols_MMI(uint8_t* dst_argb, 875 const uint8_t* src_argb, 876 int dst_width, 877 int x, 878 int dx); 879 void ScaleARGBCols_Any_MMI(uint8_t* dst_ptr, 880 const uint8_t* src_ptr, 881 int dst_width, 882 int x, 883 int dx); 884 885 // ARGB Row functions 886 void ScaleARGBRowDown2_SSE2(const uint8_t* src_argb, 887 ptrdiff_t src_stride, 888 uint8_t* dst_argb, 889 int dst_width); 890 void ScaleARGBRowDown2Linear_SSE2(const uint8_t* src_argb, 891 ptrdiff_t src_stride, 892 uint8_t* dst_argb, 893 int dst_width); 894 void ScaleARGBRowDown2Box_SSE2(const uint8_t* src_argb, 895 ptrdiff_t src_stride, 896 uint8_t* dst_argb, 897 int dst_width); 898 void ScaleARGBRowDown2_NEON(const uint8_t* src_ptr, 899 ptrdiff_t src_stride, 900 uint8_t* dst, 901 int dst_width); 902 void ScaleARGBRowDown2Linear_NEON(const uint8_t* src_argb, 903 ptrdiff_t src_stride, 904 uint8_t* dst_argb, 905 int dst_width); 906 void ScaleARGBRowDown2Box_NEON(const uint8_t* src_ptr, 907 ptrdiff_t src_stride, 908 uint8_t* dst, 909 int dst_width); 910 void ScaleARGBRowDown2_MSA(const uint8_t* src_argb, 911 ptrdiff_t src_stride, 912 uint8_t* dst_argb, 913 int dst_width); 914 void ScaleARGBRowDown2Linear_MSA(const uint8_t* src_argb, 915 ptrdiff_t src_stride, 916 uint8_t* dst_argb, 917 int dst_width); 918 void ScaleARGBRowDown2Box_MSA(const uint8_t* src_argb, 919 ptrdiff_t src_stride, 920 uint8_t* dst_argb, 921 int dst_width); 922 void ScaleARGBRowDown2_MMI(const uint8_t* src_argb, 923 ptrdiff_t src_stride, 924 uint8_t* dst_argb, 925 int dst_width); 926 void ScaleARGBRowDown2Linear_MMI(const uint8_t* src_argb, 927 ptrdiff_t src_stride, 928 uint8_t* dst_argb, 929 int dst_width); 930 void ScaleARGBRowDown2Box_MMI(const uint8_t* src_argb, 931 ptrdiff_t src_stride, 932 uint8_t* dst_argb, 933 int dst_width); 934 void ScaleARGBRowDown2_Any_SSE2(const uint8_t* src_ptr, 935 ptrdiff_t src_stride, 936 uint8_t* dst_ptr, 937 int dst_width); 938 void ScaleARGBRowDown2Linear_Any_SSE2(const uint8_t* src_ptr, 939 ptrdiff_t src_stride, 940 uint8_t* dst_ptr, 941 int dst_width); 942 void ScaleARGBRowDown2Box_Any_SSE2(const uint8_t* src_ptr, 943 ptrdiff_t src_stride, 944 uint8_t* dst_ptr, 945 int dst_width); 946 void ScaleARGBRowDown2_Any_NEON(const uint8_t* src_ptr, 947 ptrdiff_t src_stride, 948 uint8_t* dst_ptr, 949 int dst_width); 950 void ScaleARGBRowDown2Linear_Any_NEON(const uint8_t* src_ptr, 951 ptrdiff_t src_stride, 952 uint8_t* dst_ptr, 953 int dst_width); 954 void ScaleARGBRowDown2Box_Any_NEON(const uint8_t* src_ptr, 955 ptrdiff_t src_stride, 956 uint8_t* dst_ptr, 957 int dst_width); 958 void ScaleARGBRowDown2_Any_MSA(const uint8_t* src_ptr, 959 ptrdiff_t src_stride, 960 uint8_t* dst_ptr, 961 int dst_width); 962 void ScaleARGBRowDown2Linear_Any_MSA(const uint8_t* src_ptr, 963 ptrdiff_t src_stride, 964 uint8_t* dst_ptr, 965 int dst_width); 966 void ScaleARGBRowDown2Box_Any_MSA(const uint8_t* src_ptr, 967 ptrdiff_t src_stride, 968 uint8_t* dst_ptr, 969 int dst_width); 970 void ScaleARGBRowDown2_Any_MMI(const uint8_t* src_ptr, 971 ptrdiff_t src_stride, 972 uint8_t* dst_ptr, 973 int dst_width); 974 void ScaleARGBRowDown2Linear_Any_MMI(const uint8_t* src_ptr, 975 ptrdiff_t src_stride, 976 uint8_t* dst_ptr, 977 int dst_width); 978 void ScaleARGBRowDown2Box_Any_MMI(const uint8_t* src_ptr, 979 ptrdiff_t src_stride, 980 uint8_t* dst_ptr, 981 int dst_width); 982 void ScaleARGBRowDownEven_SSE2(const uint8_t* src_argb, 983 ptrdiff_t src_stride, 984 int src_stepx, 985 uint8_t* dst_argb, 986 int dst_width); 987 void ScaleARGBRowDownEvenBox_SSE2(const uint8_t* src_argb, 988 ptrdiff_t src_stride, 989 int src_stepx, 990 uint8_t* dst_argb, 991 int dst_width); 992 void ScaleARGBRowDownEven_NEON(const uint8_t* src_argb, 993 ptrdiff_t src_stride, 994 int src_stepx, 995 uint8_t* dst_argb, 996 int dst_width); 997 void ScaleARGBRowDownEvenBox_NEON(const uint8_t* src_argb, 998 ptrdiff_t src_stride, 999 int src_stepx, 1000 uint8_t* dst_argb, 1001 int dst_width); 1002 void ScaleARGBRowDownEven_MSA(const uint8_t* src_argb, 1003 ptrdiff_t src_stride, 1004 int32_t src_stepx, 1005 uint8_t* dst_argb, 1006 int dst_width); 1007 void ScaleARGBRowDownEvenBox_MSA(const uint8_t* src_argb, 1008 ptrdiff_t src_stride, 1009 int src_stepx, 1010 uint8_t* dst_argb, 1011 int dst_width); 1012 void ScaleARGBRowDownEven_MMI(const uint8_t* src_argb, 1013 ptrdiff_t src_stride, 1014 int32_t src_stepx, 1015 uint8_t* dst_argb, 1016 int dst_width); 1017 void ScaleARGBRowDownEvenBox_MMI(const uint8_t* src_argb, 1018 ptrdiff_t src_stride, 1019 int src_stepx, 1020 uint8_t* dst_argb, 1021 int dst_width); 1022 void ScaleARGBRowDownEven_Any_SSE2(const uint8_t* src_ptr, 1023 ptrdiff_t src_stride, 1024 int src_stepx, 1025 uint8_t* dst_ptr, 1026 int dst_width); 1027 void ScaleARGBRowDownEvenBox_Any_SSE2(const uint8_t* src_ptr, 1028 ptrdiff_t src_stride, 1029 int src_stepx, 1030 uint8_t* dst_ptr, 1031 int dst_width); 1032 void ScaleARGBRowDownEven_Any_NEON(const uint8_t* src_ptr, 1033 ptrdiff_t src_stride, 1034 int src_stepx, 1035 uint8_t* dst_ptr, 1036 int dst_width); 1037 void ScaleARGBRowDownEvenBox_Any_NEON(const uint8_t* src_ptr, 1038 ptrdiff_t src_stride, 1039 int src_stepx, 1040 uint8_t* dst_ptr, 1041 int dst_width); 1042 void ScaleARGBRowDownEven_Any_MSA(const uint8_t* src_ptr, 1043 ptrdiff_t src_stride, 1044 int32_t src_stepx, 1045 uint8_t* dst_ptr, 1046 int dst_width); 1047 void ScaleARGBRowDownEvenBox_Any_MSA(const uint8_t* src_ptr, 1048 ptrdiff_t src_stride, 1049 int src_stepx, 1050 uint8_t* dst_ptr, 1051 int dst_width); 1052 void ScaleARGBRowDownEven_Any_MMI(const uint8_t* src_ptr, 1053 ptrdiff_t src_stride, 1054 int32_t src_stepx, 1055 uint8_t* dst_ptr, 1056 int dst_width); 1057 void ScaleARGBRowDownEvenBox_Any_MMI(const uint8_t* src_ptr, 1058 ptrdiff_t src_stride, 1059 int src_stepx, 1060 uint8_t* dst_ptr, 1061 int dst_width); 1062 1063 // UV Row functions 1064 void ScaleUVRowDown2_SSSE3(const uint8_t* src_ptr, 1065 ptrdiff_t src_stride, 1066 uint8_t* dst_uv, 1067 int dst_width); 1068 void ScaleUVRowDown2Linear_SSSE3(const uint8_t* src_ptr, 1069 ptrdiff_t src_stride, 1070 uint8_t* dst_uv, 1071 int dst_width); 1072 void ScaleUVRowDown2Box_SSSE3(const uint8_t* src_ptr, 1073 ptrdiff_t src_stride, 1074 uint8_t* dst_uv, 1075 int dst_width); 1076 void ScaleUVRowDown2Box_AVX2(const uint8_t* src_ptr, 1077 ptrdiff_t src_stride, 1078 uint8_t* dst_uv, 1079 int dst_width); 1080 void ScaleUVRowDown2_NEON(const uint8_t* src_ptr, 1081 ptrdiff_t src_stride, 1082 uint8_t* dst, 1083 int dst_width); 1084 void ScaleUVRowDown2Linear_NEON(const uint8_t* src_ptr, 1085 ptrdiff_t src_stride, 1086 uint8_t* dst_uv, 1087 int dst_width); 1088 void ScaleUVRowDown2Box_NEON(const uint8_t* src_ptr, 1089 ptrdiff_t src_stride, 1090 uint8_t* dst, 1091 int dst_width); 1092 void ScaleUVRowDown2_MSA(const uint8_t* src_ptr, 1093 ptrdiff_t src_stride, 1094 uint8_t* dst_uv, 1095 int dst_width); 1096 void ScaleUVRowDown2Linear_MSA(const uint8_t* src_ptr, 1097 ptrdiff_t src_stride, 1098 uint8_t* dst_uv, 1099 int dst_width); 1100 void ScaleUVRowDown2Box_MSA(const uint8_t* src_ptr, 1101 ptrdiff_t src_stride, 1102 uint8_t* dst_uv, 1103 int dst_width); 1104 void ScaleUVRowDown2_MMI(const uint8_t* src_ptr, 1105 ptrdiff_t src_stride, 1106 uint8_t* dst_uv, 1107 int dst_width); 1108 void ScaleUVRowDown2Linear_MMI(const uint8_t* src_ptr, 1109 ptrdiff_t src_stride, 1110 uint8_t* dst_uv, 1111 int dst_width); 1112 void ScaleUVRowDown2Box_MMI(const uint8_t* src_ptr, 1113 ptrdiff_t src_stride, 1114 uint8_t* dst_uv, 1115 int dst_width); 1116 void ScaleUVRowDown2_Any_SSSE3(const uint8_t* src_ptr, 1117 ptrdiff_t src_stride, 1118 uint8_t* dst_ptr, 1119 int dst_width); 1120 void ScaleUVRowDown2Linear_Any_SSSE3(const uint8_t* src_ptr, 1121 ptrdiff_t src_stride, 1122 uint8_t* dst_ptr, 1123 int dst_width); 1124 void ScaleUVRowDown2Box_Any_SSSE3(const uint8_t* src_ptr, 1125 ptrdiff_t src_stride, 1126 uint8_t* dst_ptr, 1127 int dst_width); 1128 void ScaleUVRowDown2Box_Any_AVX2(const uint8_t* src_ptr, 1129 ptrdiff_t src_stride, 1130 uint8_t* dst_ptr, 1131 int dst_width); 1132 void ScaleUVRowDown2_Any_NEON(const uint8_t* src_ptr, 1133 ptrdiff_t src_stride, 1134 uint8_t* dst_ptr, 1135 int dst_width); 1136 void ScaleUVRowDown2Linear_Any_NEON(const uint8_t* src_ptr, 1137 ptrdiff_t src_stride, 1138 uint8_t* dst_ptr, 1139 int dst_width); 1140 void ScaleUVRowDown2Box_Any_NEON(const uint8_t* src_ptr, 1141 ptrdiff_t src_stride, 1142 uint8_t* dst_ptr, 1143 int dst_width); 1144 void ScaleUVRowDown2_Any_MSA(const uint8_t* src_ptr, 1145 ptrdiff_t src_stride, 1146 uint8_t* dst_ptr, 1147 int dst_width); 1148 void ScaleUVRowDown2Linear_Any_MSA(const uint8_t* src_ptr, 1149 ptrdiff_t src_stride, 1150 uint8_t* dst_ptr, 1151 int dst_width); 1152 void ScaleUVRowDown2Box_Any_MSA(const uint8_t* src_ptr, 1153 ptrdiff_t src_stride, 1154 uint8_t* dst_ptr, 1155 int dst_width); 1156 void ScaleUVRowDown2_Any_MMI(const uint8_t* src_ptr, 1157 ptrdiff_t src_stride, 1158 uint8_t* dst_ptr, 1159 int dst_width); 1160 void ScaleUVRowDown2Linear_Any_MMI(const uint8_t* src_ptr, 1161 ptrdiff_t src_stride, 1162 uint8_t* dst_ptr, 1163 int dst_width); 1164 void ScaleUVRowDown2Box_Any_MMI(const uint8_t* src_ptr, 1165 ptrdiff_t src_stride, 1166 uint8_t* dst_ptr, 1167 int dst_width); 1168 void ScaleUVRowDownEven_SSSE3(const uint8_t* src_ptr, 1169 ptrdiff_t src_stride, 1170 int src_stepx, 1171 uint8_t* dst_uv, 1172 int dst_width); 1173 void ScaleUVRowDownEvenBox_SSSE3(const uint8_t* src_ptr, 1174 ptrdiff_t src_stride, 1175 int src_stepx, 1176 uint8_t* dst_uv, 1177 int dst_width); 1178 void ScaleUVRowDownEven_NEON(const uint8_t* src_ptr, 1179 ptrdiff_t src_stride, 1180 int src_stepx, 1181 uint8_t* dst_uv, 1182 int dst_width); 1183 void ScaleUVRowDownEvenBox_NEON(const uint8_t* src_ptr, 1184 ptrdiff_t src_stride, 1185 int src_stepx, 1186 uint8_t* dst_uv, 1187 int dst_width); 1188 void ScaleUVRowDownEven_MSA(const uint8_t* src_ptr, 1189 ptrdiff_t src_stride, 1190 int32_t src_stepx, 1191 uint8_t* dst_uv, 1192 int dst_width); 1193 void ScaleUVRowDownEvenBox_MSA(const uint8_t* src_ptr, 1194 ptrdiff_t src_stride, 1195 int src_stepx, 1196 uint8_t* dst_uv, 1197 int dst_width); 1198 void ScaleUVRowDownEven_MMI(const uint8_t* src_ptr, 1199 ptrdiff_t src_stride, 1200 int32_t src_stepx, 1201 uint8_t* dst_uv, 1202 int dst_width); 1203 void ScaleUVRowDownEvenBox_MMI(const uint8_t* src_ptr, 1204 ptrdiff_t src_stride, 1205 int src_stepx, 1206 uint8_t* dst_uv, 1207 int dst_width); 1208 void ScaleUVRowDownEven_Any_SSSE3(const uint8_t* src_ptr, 1209 ptrdiff_t src_stride, 1210 int src_stepx, 1211 uint8_t* dst_ptr, 1212 int dst_width); 1213 void ScaleUVRowDownEvenBox_Any_SSSE3(const uint8_t* src_ptr, 1214 ptrdiff_t src_stride, 1215 int src_stepx, 1216 uint8_t* dst_ptr, 1217 int dst_width); 1218 void ScaleUVRowDownEven_Any_NEON(const uint8_t* src_ptr, 1219 ptrdiff_t src_stride, 1220 int src_stepx, 1221 uint8_t* dst_ptr, 1222 int dst_width); 1223 void ScaleUVRowDownEvenBox_Any_NEON(const uint8_t* src_ptr, 1224 ptrdiff_t src_stride, 1225 int src_stepx, 1226 uint8_t* dst_ptr, 1227 int dst_width); 1228 void ScaleUVRowDownEven_Any_MSA(const uint8_t* src_ptr, 1229 ptrdiff_t src_stride, 1230 int32_t src_stepx, 1231 uint8_t* dst_ptr, 1232 int dst_width); 1233 void ScaleUVRowDownEvenBox_Any_MSA(const uint8_t* src_ptr, 1234 ptrdiff_t src_stride, 1235 int src_stepx, 1236 uint8_t* dst_ptr, 1237 int dst_width); 1238 void ScaleUVRowDownEven_Any_MMI(const uint8_t* src_ptr, 1239 ptrdiff_t src_stride, 1240 int32_t src_stepx, 1241 uint8_t* dst_ptr, 1242 int dst_width); 1243 void ScaleUVRowDownEvenBox_Any_MMI(const uint8_t* src_ptr, 1244 ptrdiff_t src_stride, 1245 int src_stepx, 1246 uint8_t* dst_ptr, 1247 int dst_width); 1248 1249 void ScaleUVRowUp2_Linear_SSSE3(const uint8_t* src_ptr, 1250 uint8_t* dst_ptr, 1251 int dst_width); 1252 void ScaleUVRowUp2_Bilinear_SSSE3(const uint8_t* src_ptr, 1253 ptrdiff_t src_stride, 1254 uint8_t* dst_ptr, 1255 ptrdiff_t dst_stride, 1256 int dst_width); 1257 void ScaleUVRowUp2_Linear_Any_SSSE3(const uint8_t* src_ptr, 1258 uint8_t* dst_ptr, 1259 int dst_width); 1260 void ScaleUVRowUp2_Bilinear_Any_SSSE3(const uint8_t* src_ptr, 1261 ptrdiff_t src_stride, 1262 uint8_t* dst_ptr, 1263 ptrdiff_t dst_stride, 1264 int dst_width); 1265 void ScaleUVRowUp2_Linear_AVX2(const uint8_t* src_ptr, 1266 uint8_t* dst_ptr, 1267 int dst_width); 1268 void ScaleUVRowUp2_Bilinear_AVX2(const uint8_t* src_ptr, 1269 ptrdiff_t src_stride, 1270 uint8_t* dst_ptr, 1271 ptrdiff_t dst_stride, 1272 int dst_width); 1273 void ScaleUVRowUp2_Linear_Any_AVX2(const uint8_t* src_ptr, 1274 uint8_t* dst_ptr, 1275 int dst_width); 1276 void ScaleUVRowUp2_Bilinear_Any_AVX2(const uint8_t* src_ptr, 1277 ptrdiff_t src_stride, 1278 uint8_t* dst_ptr, 1279 ptrdiff_t dst_stride, 1280 int dst_width); 1281 void ScaleUVRowUp2_Linear_NEON(const uint8_t* src_ptr, 1282 uint8_t* dst_ptr, 1283 int dst_width); 1284 void ScaleUVRowUp2_Bilinear_NEON(const uint8_t* src_ptr, 1285 ptrdiff_t src_stride, 1286 uint8_t* dst_ptr, 1287 ptrdiff_t dst_stride, 1288 int dst_width); 1289 void ScaleUVRowUp2_Linear_Any_NEON(const uint8_t* src_ptr, 1290 uint8_t* dst_ptr, 1291 int dst_width); 1292 void ScaleUVRowUp2_Bilinear_Any_NEON(const uint8_t* src_ptr, 1293 ptrdiff_t src_stride, 1294 uint8_t* dst_ptr, 1295 ptrdiff_t dst_stride, 1296 int dst_width); 1297 void ScaleUVRowUp2_Linear_16_SSE2(const uint16_t* src_ptr, 1298 uint16_t* dst_ptr, 1299 int dst_width); 1300 void ScaleUVRowUp2_Bilinear_16_SSE2(const uint16_t* src_ptr, 1301 ptrdiff_t src_stride, 1302 uint16_t* dst_ptr, 1303 ptrdiff_t dst_stride, 1304 int dst_width); 1305 void ScaleUVRowUp2_Linear_16_Any_SSE2(const uint16_t* src_ptr, 1306 uint16_t* dst_ptr, 1307 int dst_width); 1308 void ScaleUVRowUp2_Bilinear_16_Any_SSE2(const uint16_t* src_ptr, 1309 ptrdiff_t src_stride, 1310 uint16_t* dst_ptr, 1311 ptrdiff_t dst_stride, 1312 int dst_width); 1313 void ScaleUVRowUp2_Linear_16_AVX2(const uint16_t* src_ptr, 1314 uint16_t* dst_ptr, 1315 int dst_width); 1316 void ScaleUVRowUp2_Bilinear_16_AVX2(const uint16_t* src_ptr, 1317 ptrdiff_t src_stride, 1318 uint16_t* dst_ptr, 1319 ptrdiff_t dst_stride, 1320 int dst_width); 1321 void ScaleUVRowUp2_Linear_16_Any_AVX2(const uint16_t* src_ptr, 1322 uint16_t* dst_ptr, 1323 int dst_width); 1324 void ScaleUVRowUp2_Bilinear_16_Any_AVX2(const uint16_t* src_ptr, 1325 ptrdiff_t src_stride, 1326 uint16_t* dst_ptr, 1327 ptrdiff_t dst_stride, 1328 int dst_width); 1329 void ScaleUVRowUp2_Linear_16_NEON(const uint16_t* src_ptr, 1330 uint16_t* dst_ptr, 1331 int dst_width); 1332 void ScaleUVRowUp2_Bilinear_16_NEON(const uint16_t* src_ptr, 1333 ptrdiff_t src_stride, 1334 uint16_t* dst_ptr, 1335 ptrdiff_t dst_stride, 1336 int dst_width); 1337 void ScaleUVRowUp2_Linear_16_Any_NEON(const uint16_t* src_ptr, 1338 uint16_t* dst_ptr, 1339 int dst_width); 1340 void ScaleUVRowUp2_Bilinear_16_Any_NEON(const uint16_t* src_ptr, 1341 ptrdiff_t src_stride, 1342 uint16_t* dst_ptr, 1343 ptrdiff_t dst_stride, 1344 int dst_width); 1345 1346 // ScaleRowDown2Box also used by planar functions 1347 // NEON downscalers with interpolation. 1348 1349 // Note - not static due to reuse in convert for 444 to 420. 1350 void ScaleRowDown2_NEON(const uint8_t* src_ptr, 1351 ptrdiff_t src_stride, 1352 uint8_t* dst, 1353 int dst_width); 1354 void ScaleRowDown2Linear_NEON(const uint8_t* src_ptr, 1355 ptrdiff_t src_stride, 1356 uint8_t* dst, 1357 int dst_width); 1358 void ScaleRowDown2Box_NEON(const uint8_t* src_ptr, 1359 ptrdiff_t src_stride, 1360 uint8_t* dst, 1361 int dst_width); 1362 1363 void ScaleRowDown4_NEON(const uint8_t* src_ptr, 1364 ptrdiff_t src_stride, 1365 uint8_t* dst_ptr, 1366 int dst_width); 1367 void ScaleRowDown4Box_NEON(const uint8_t* src_ptr, 1368 ptrdiff_t src_stride, 1369 uint8_t* dst_ptr, 1370 int dst_width); 1371 1372 // Down scale from 4 to 3 pixels. Use the neon multilane read/write 1373 // to load up the every 4th pixel into a 4 different registers. 1374 // Point samples 32 pixels to 24 pixels. 1375 void ScaleRowDown34_NEON(const uint8_t* src_ptr, 1376 ptrdiff_t src_stride, 1377 uint8_t* dst_ptr, 1378 int dst_width); 1379 void ScaleRowDown34_0_Box_NEON(const uint8_t* src_ptr, 1380 ptrdiff_t src_stride, 1381 uint8_t* dst_ptr, 1382 int dst_width); 1383 void ScaleRowDown34_1_Box_NEON(const uint8_t* src_ptr, 1384 ptrdiff_t src_stride, 1385 uint8_t* dst_ptr, 1386 int dst_width); 1387 1388 // 32 -> 12 1389 void ScaleRowDown38_NEON(const uint8_t* src_ptr, 1390 ptrdiff_t src_stride, 1391 uint8_t* dst_ptr, 1392 int dst_width); 1393 // 32x3 -> 12x1 1394 void ScaleRowDown38_3_Box_NEON(const uint8_t* src_ptr, 1395 ptrdiff_t src_stride, 1396 uint8_t* dst_ptr, 1397 int dst_width); 1398 // 32x2 -> 12x1 1399 void ScaleRowDown38_2_Box_NEON(const uint8_t* src_ptr, 1400 ptrdiff_t src_stride, 1401 uint8_t* dst_ptr, 1402 int dst_width); 1403 1404 void ScaleRowDown2_Any_NEON(const uint8_t* src_ptr, 1405 ptrdiff_t src_stride, 1406 uint8_t* dst_ptr, 1407 int dst_width); 1408 void ScaleRowDown2Linear_Any_NEON(const uint8_t* src_ptr, 1409 ptrdiff_t src_stride, 1410 uint8_t* dst_ptr, 1411 int dst_width); 1412 void ScaleRowDown2Box_Any_NEON(const uint8_t* src_ptr, 1413 ptrdiff_t src_stride, 1414 uint8_t* dst_ptr, 1415 int dst_width); 1416 void ScaleRowDown2Box_Odd_NEON(const uint8_t* src_ptr, 1417 ptrdiff_t src_stride, 1418 uint8_t* dst_ptr, 1419 int dst_width); 1420 void ScaleRowDown4_Any_NEON(const uint8_t* src_ptr, 1421 ptrdiff_t src_stride, 1422 uint8_t* dst_ptr, 1423 int dst_width); 1424 void ScaleRowDown4Box_Any_NEON(const uint8_t* src_ptr, 1425 ptrdiff_t src_stride, 1426 uint8_t* dst_ptr, 1427 int dst_width); 1428 void ScaleRowDown34_Any_NEON(const uint8_t* src_ptr, 1429 ptrdiff_t src_stride, 1430 uint8_t* dst_ptr, 1431 int dst_width); 1432 void ScaleRowDown34_0_Box_Any_NEON(const uint8_t* src_ptr, 1433 ptrdiff_t src_stride, 1434 uint8_t* dst_ptr, 1435 int dst_width); 1436 void ScaleRowDown34_1_Box_Any_NEON(const uint8_t* src_ptr, 1437 ptrdiff_t src_stride, 1438 uint8_t* dst_ptr, 1439 int dst_width); 1440 // 32 -> 12 1441 void ScaleRowDown38_Any_NEON(const uint8_t* src_ptr, 1442 ptrdiff_t src_stride, 1443 uint8_t* dst_ptr, 1444 int dst_width); 1445 // 32x3 -> 12x1 1446 void ScaleRowDown38_3_Box_Any_NEON(const uint8_t* src_ptr, 1447 ptrdiff_t src_stride, 1448 uint8_t* dst_ptr, 1449 int dst_width); 1450 // 32x2 -> 12x1 1451 void ScaleRowDown38_2_Box_Any_NEON(const uint8_t* src_ptr, 1452 ptrdiff_t src_stride, 1453 uint8_t* dst_ptr, 1454 int dst_width); 1455 1456 void ScaleRowUp2_Linear_NEON(const uint8_t* src_ptr, 1457 uint8_t* dst_ptr, 1458 int dst_width); 1459 void ScaleRowUp2_Bilinear_NEON(const uint8_t* src_ptr, 1460 ptrdiff_t src_stride, 1461 uint8_t* dst_ptr, 1462 ptrdiff_t dst_stride, 1463 int dst_width); 1464 void ScaleRowUp2_Linear_12_NEON(const uint16_t* src_ptr, 1465 uint16_t* dst_ptr, 1466 int dst_width); 1467 void ScaleRowUp2_Bilinear_12_NEON(const uint16_t* src_ptr, 1468 ptrdiff_t src_stride, 1469 uint16_t* dst_ptr, 1470 ptrdiff_t dst_stride, 1471 int dst_width); 1472 void ScaleRowUp2_Linear_16_NEON(const uint16_t* src_ptr, 1473 uint16_t* dst_ptr, 1474 int dst_width); 1475 void ScaleRowUp2_Bilinear_16_NEON(const uint16_t* src_ptr, 1476 ptrdiff_t src_stride, 1477 uint16_t* dst_ptr, 1478 ptrdiff_t dst_stride, 1479 int dst_width); 1480 void ScaleRowUp2_Linear_Any_NEON(const uint8_t* src_ptr, 1481 uint8_t* dst_ptr, 1482 int dst_width); 1483 void ScaleRowUp2_Bilinear_Any_NEON(const uint8_t* src_ptr, 1484 ptrdiff_t src_stride, 1485 uint8_t* dst_ptr, 1486 ptrdiff_t dst_stride, 1487 int dst_width); 1488 void ScaleRowUp2_Linear_12_Any_NEON(const uint16_t* src_ptr, 1489 uint16_t* dst_ptr, 1490 int dst_width); 1491 void ScaleRowUp2_Bilinear_12_Any_NEON(const uint16_t* src_ptr, 1492 ptrdiff_t src_stride, 1493 uint16_t* dst_ptr, 1494 ptrdiff_t dst_stride, 1495 int dst_width); 1496 void ScaleRowUp2_Linear_16_Any_NEON(const uint16_t* src_ptr, 1497 uint16_t* dst_ptr, 1498 int dst_width); 1499 void ScaleRowUp2_Bilinear_16_Any_NEON(const uint16_t* src_ptr, 1500 ptrdiff_t src_stride, 1501 uint16_t* dst_ptr, 1502 ptrdiff_t dst_stride, 1503 int dst_width); 1504 1505 void ScaleAddRow_NEON(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 1506 void ScaleAddRow_Any_NEON(const uint8_t* src_ptr, 1507 uint16_t* dst_ptr, 1508 int src_width); 1509 1510 void ScaleFilterCols_NEON(uint8_t* dst_ptr, 1511 const uint8_t* src_ptr, 1512 int dst_width, 1513 int x, 1514 int dx); 1515 1516 void ScaleFilterCols_Any_NEON(uint8_t* dst_ptr, 1517 const uint8_t* src_ptr, 1518 int dst_width, 1519 int x, 1520 int dx); 1521 1522 void ScaleRowDown2_MSA(const uint8_t* src_ptr, 1523 ptrdiff_t src_stride, 1524 uint8_t* dst, 1525 int dst_width); 1526 void ScaleRowDown2Linear_MSA(const uint8_t* src_ptr, 1527 ptrdiff_t src_stride, 1528 uint8_t* dst, 1529 int dst_width); 1530 void ScaleRowDown2Box_MSA(const uint8_t* src_ptr, 1531 ptrdiff_t src_stride, 1532 uint8_t* dst, 1533 int dst_width); 1534 void ScaleRowDown4_MSA(const uint8_t* src_ptr, 1535 ptrdiff_t src_stride, 1536 uint8_t* dst, 1537 int dst_width); 1538 void ScaleRowDown4Box_MSA(const uint8_t* src_ptr, 1539 ptrdiff_t src_stride, 1540 uint8_t* dst, 1541 int dst_width); 1542 void ScaleRowDown38_MSA(const uint8_t* src_ptr, 1543 ptrdiff_t src_stride, 1544 uint8_t* dst, 1545 int dst_width); 1546 void ScaleRowDown38_2_Box_MSA(const uint8_t* src_ptr, 1547 ptrdiff_t src_stride, 1548 uint8_t* dst_ptr, 1549 int dst_width); 1550 void ScaleRowDown38_3_Box_MSA(const uint8_t* src_ptr, 1551 ptrdiff_t src_stride, 1552 uint8_t* dst_ptr, 1553 int dst_width); 1554 void ScaleAddRow_MSA(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 1555 void ScaleFilterCols_MSA(uint8_t* dst_ptr, 1556 const uint8_t* src_ptr, 1557 int dst_width, 1558 int x, 1559 int dx); 1560 void ScaleRowDown34_MSA(const uint8_t* src_ptr, 1561 ptrdiff_t src_stride, 1562 uint8_t* dst, 1563 int dst_width); 1564 void ScaleRowDown34_MMI(const uint8_t* src_ptr, 1565 ptrdiff_t src_stride, 1566 uint8_t* dst, 1567 int dst_width); 1568 void ScaleRowDown34_0_Box_MSA(const uint8_t* src_ptr, 1569 ptrdiff_t src_stride, 1570 uint8_t* d, 1571 int dst_width); 1572 void ScaleRowDown34_1_Box_MSA(const uint8_t* src_ptr, 1573 ptrdiff_t src_stride, 1574 uint8_t* d, 1575 int dst_width); 1576 1577 void ScaleRowDown2_Any_MSA(const uint8_t* src_ptr, 1578 ptrdiff_t src_stride, 1579 uint8_t* dst_ptr, 1580 int dst_width); 1581 void ScaleRowDown2Linear_Any_MSA(const uint8_t* src_ptr, 1582 ptrdiff_t src_stride, 1583 uint8_t* dst_ptr, 1584 int dst_width); 1585 void ScaleRowDown2Box_Any_MSA(const uint8_t* src_ptr, 1586 ptrdiff_t src_stride, 1587 uint8_t* dst_ptr, 1588 int dst_width); 1589 void ScaleRowDown4_Any_MSA(const uint8_t* src_ptr, 1590 ptrdiff_t src_stride, 1591 uint8_t* dst_ptr, 1592 int dst_width); 1593 void ScaleRowDown4Box_Any_MSA(const uint8_t* src_ptr, 1594 ptrdiff_t src_stride, 1595 uint8_t* dst_ptr, 1596 int dst_width); 1597 void ScaleRowDown38_Any_MSA(const uint8_t* src_ptr, 1598 ptrdiff_t src_stride, 1599 uint8_t* dst_ptr, 1600 int dst_width); 1601 void ScaleRowDown38_2_Box_Any_MSA(const uint8_t* src_ptr, 1602 ptrdiff_t src_stride, 1603 uint8_t* dst_ptr, 1604 int dst_width); 1605 void ScaleRowDown38_3_Box_Any_MSA(const uint8_t* src_ptr, 1606 ptrdiff_t src_stride, 1607 uint8_t* dst_ptr, 1608 int dst_width); 1609 void ScaleAddRow_Any_MSA(const uint8_t* src_ptr, 1610 uint16_t* dst_ptr, 1611 int src_width); 1612 void ScaleFilterCols_Any_MSA(uint8_t* dst_ptr, 1613 const uint8_t* src_ptr, 1614 int dst_width, 1615 int x, 1616 int dx); 1617 void ScaleRowDown34_Any_MSA(const uint8_t* src_ptr, 1618 ptrdiff_t src_stride, 1619 uint8_t* dst_ptr, 1620 int dst_width); 1621 void ScaleRowDown34_Any_MMI(const uint8_t* src_ptr, 1622 ptrdiff_t src_stride, 1623 uint8_t* dst_ptr, 1624 int dst_width); 1625 void ScaleRowDown34_0_Box_Any_MSA(const uint8_t* src_ptr, 1626 ptrdiff_t src_stride, 1627 uint8_t* dst_ptr, 1628 int dst_width); 1629 void ScaleRowDown34_1_Box_Any_MSA(const uint8_t* src_ptr, 1630 ptrdiff_t src_stride, 1631 uint8_t* dst_ptr, 1632 int dst_width); 1633 1634 void ScaleRowDown2_MMI(const uint8_t* src_ptr, 1635 ptrdiff_t src_stride, 1636 uint8_t* dst, 1637 int dst_width); 1638 void ScaleRowDown2_16_MMI(const uint16_t* src_ptr, 1639 ptrdiff_t src_stride, 1640 uint16_t* dst, 1641 int dst_width); 1642 void ScaleRowDown2Linear_MMI(const uint8_t* src_ptr, 1643 ptrdiff_t src_stride, 1644 uint8_t* dst, 1645 int dst_width); 1646 void ScaleRowDown2Linear_16_MMI(const uint16_t* src_ptr, 1647 ptrdiff_t src_stride, 1648 uint16_t* dst, 1649 int dst_width); 1650 void ScaleRowDown2Box_MMI(const uint8_t* src_ptr, 1651 ptrdiff_t src_stride, 1652 uint8_t* dst, 1653 int dst_width); 1654 void ScaleRowDown2Box_16_MMI(const uint16_t* src_ptr, 1655 ptrdiff_t src_stride, 1656 uint16_t* dst, 1657 int dst_width); 1658 void ScaleRowDown2Box_Odd_MMI(const uint8_t* src_ptr, 1659 ptrdiff_t src_stride, 1660 uint8_t* dst, 1661 int dst_width); 1662 void ScaleRowDown4_MMI(const uint8_t* src_ptr, 1663 ptrdiff_t src_stride, 1664 uint8_t* dst, 1665 int dst_width); 1666 void ScaleRowDown4_16_MMI(const uint16_t* src_ptr, 1667 ptrdiff_t src_stride, 1668 uint16_t* dst, 1669 int dst_width); 1670 void ScaleRowDown4Box_MMI(const uint8_t* src_ptr, 1671 ptrdiff_t src_stride, 1672 uint8_t* dst, 1673 int dst_width); 1674 void ScaleRowDown4Box_16_MMI(const uint16_t* src_ptr, 1675 ptrdiff_t src_stride, 1676 uint16_t* dst, 1677 int dst_width); 1678 void ScaleAddRow_MMI(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); 1679 void ScaleAddRow_16_MMI(const uint16_t* src_ptr, 1680 uint32_t* dst_ptr, 1681 int src_width); 1682 void ScaleColsUp2_MMI(uint8_t* dst_ptr, 1683 const uint8_t* src_ptr, 1684 int dst_width, 1685 int x, 1686 int dx); 1687 void ScaleColsUp2_16_MMI(uint16_t* dst_ptr, 1688 const uint16_t* src_ptr, 1689 int dst_width, 1690 int x, 1691 int dx); 1692 void ScaleARGBColsUp2_MMI(uint8_t* dst_argb, 1693 const uint8_t* src_argb, 1694 int dst_width, 1695 int x, 1696 int dx); 1697 1698 void ScaleRowDown2_Any_MMI(const uint8_t* src_ptr, 1699 ptrdiff_t src_stride, 1700 uint8_t* dst_ptr, 1701 int dst_width); 1702 void ScaleRowDown2Linear_Any_MMI(const uint8_t* src_ptr, 1703 ptrdiff_t src_stride, 1704 uint8_t* dst_ptr, 1705 int dst_width); 1706 void ScaleRowDown2Box_Any_MMI(const uint8_t* src_ptr, 1707 ptrdiff_t src_stride, 1708 uint8_t* dst_ptr, 1709 int dst_width); 1710 void ScaleRowDown4_Any_MMI(const uint8_t* src_ptr, 1711 ptrdiff_t src_stride, 1712 uint8_t* dst_ptr, 1713 int dst_width); 1714 void ScaleRowDown4Box_Any_MMI(const uint8_t* src_ptr, 1715 ptrdiff_t src_stride, 1716 uint8_t* dst_ptr, 1717 int dst_width); 1718 void ScaleAddRow_Any_MMI(const uint8_t* src_ptr, 1719 uint16_t* dst_ptr, 1720 int src_width); 1721 #ifdef __cplusplus 1722 } // extern "C" 1723 } // namespace libyuv 1724 #endif 1725 1726 #endif // INCLUDE_LIBYUV_SCALE_ROW_H_ 1727