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