• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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