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