• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3  *
4  * This source code is subject to the terms of the BSD 2 Clause License and
5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6  * was not distributed with this source code in the LICENSE file, you can
7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8  * Media Patent License 1.0 was not distributed with this source code in the
9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10  */
11 
12 #ifndef INCLUDE_LIBYUV_ROW_H_  // NOLINT
13 #define INCLUDE_LIBYUV_ROW_H_
14 
15 #include <stdlib.h>  // For malloc.
16 
17 #include "libyuv/basic_types.h"
18 
19 #ifdef __cplusplus
20 namespace libyuv {
21 extern "C" {
22 #endif
23 
24 #define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a) - 1)))
25 
26 #ifdef __cplusplus
27 #define align_buffer_64(var, size)                                             \
28   uint8* var##_mem = reinterpret_cast<uint8*>(malloc((size) + 63));            \
29   uint8* var = reinterpret_cast<uint8*>                                        \
30       ((reinterpret_cast<intptr_t>(var##_mem) + 63) & ~63)
31 #else
32 #define align_buffer_64(var, size)                                             \
33   uint8* var##_mem = (uint8*)(malloc((size) + 63));               /* NOLINT */ \
34   uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63)       /* NOLINT */
35 #endif
36 
37 #define free_aligned_buffer_64(var) \
38   free(var##_mem);  \
39   var = 0
40 
41 #if defined(__pnacl__) || defined(__CLR_VER) || \
42     (defined(__i386__) && !defined(__SSE2__))
43 #define LIBYUV_DISABLE_X86
44 #endif
45 // True if compiling for SSSE3 as a requirement.
46 #if defined(__SSSE3__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 3))
47 #define LIBYUV_SSSE3_ONLY
48 #endif
49 
50 #if defined(__native_client__)
51 #define LIBYUV_DISABLE_NEON
52 #endif
53 // clang >= 3.5.0 required for Arm64.
54 #if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON)
55 #if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5))
56 #define LIBYUV_DISABLE_NEON
57 #endif  // clang >= 3.5
58 #endif  // __clang__
59 
60 // The following are available on all x86 platforms:
61 #if !defined(LIBYUV_DISABLE_X86) && \
62     (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
63 // Conversions:
64 #define HAS_ABGRTOUVROW_SSSE3
65 #define HAS_ABGRTOYROW_SSSE3
66 #define HAS_ARGB1555TOARGBROW_SSE2
67 #define HAS_ARGB4444TOARGBROW_SSE2
68 #define HAS_ARGBSETROW_X86
69 #define HAS_ARGBSHUFFLEROW_SSE2
70 #define HAS_ARGBSHUFFLEROW_SSSE3
71 #define HAS_ARGBTOARGB1555ROW_SSE2
72 #define HAS_ARGBTOARGB4444ROW_SSE2
73 #define HAS_ARGBTORAWROW_SSSE3
74 #define HAS_ARGBTORGB24ROW_SSSE3
75 #define HAS_ARGBTORGB565ROW_SSE2
76 #define HAS_ARGBTOUV422ROW_SSSE3
77 #define HAS_ARGBTOUV444ROW_SSSE3
78 #define HAS_ARGBTOUVJROW_SSSE3
79 #define HAS_ARGBTOUVROW_SSSE3
80 #define HAS_ARGBTOYJROW_SSSE3
81 #define HAS_ARGBTOYROW_SSSE3
82 #define HAS_BGRATOUVROW_SSSE3
83 #define HAS_BGRATOYROW_SSSE3
84 #define HAS_COPYROW_ERMS
85 #define HAS_COPYROW_SSE2
86 #define HAS_I400TOARGBROW_SSE2
87 #define HAS_I411TOARGBROW_SSSE3
88 #define HAS_I422TOABGRROW_SSSE3
89 #define HAS_I422TOARGB1555ROW_SSSE3
90 #define HAS_I422TOARGB4444ROW_SSSE3
91 #define HAS_I422TOARGBROW_SSSE3
92 #define HAS_I422TOBGRAROW_SSSE3
93 #define HAS_I422TORAWROW_SSSE3
94 #define HAS_I422TORGB24ROW_SSSE3
95 #define HAS_I422TORGB565ROW_SSSE3
96 #define HAS_I422TORGBAROW_SSSE3
97 #define HAS_I422TOUYVYROW_SSE2
98 #define HAS_I422TOYUY2ROW_SSE2
99 #define HAS_I444TOARGBROW_SSSE3
100 #define HAS_J400TOARGBROW_SSE2
101 #define HAS_J422TOARGBROW_SSSE3
102 #define HAS_MERGEUVROW_SSE2
103 #define HAS_MIRRORROW_SSE2
104 #define HAS_MIRRORROW_SSSE3
105 #define HAS_MIRRORROW_UV_SSSE3
106 #define HAS_MIRRORUVROW_SSSE3
107 #define HAS_NV12TOARGBROW_SSSE3
108 #define HAS_NV12TORGB565ROW_SSSE3
109 #define HAS_NV21TOARGBROW_SSSE3
110 #define HAS_NV21TORGB565ROW_SSSE3
111 #define HAS_RAWTOARGBROW_SSSE3
112 #define HAS_RAWTOYROW_SSSE3
113 #define HAS_RGB24TOARGBROW_SSSE3
114 #define HAS_RGB24TOYROW_SSSE3
115 #define HAS_RGB565TOARGBROW_SSE2
116 #define HAS_RGBATOUVROW_SSSE3
117 #define HAS_RGBATOYROW_SSSE3
118 #define HAS_SETROW_ERMS
119 #define HAS_SETROW_X86
120 #define HAS_SPLITUVROW_SSE2
121 #define HAS_UYVYTOARGBROW_SSSE3
122 #define HAS_UYVYTOUV422ROW_SSE2
123 #define HAS_UYVYTOUVROW_SSE2
124 #define HAS_UYVYTOYROW_SSE2
125 #define HAS_YUY2TOARGBROW_SSSE3
126 #define HAS_YUY2TOUV422ROW_SSE2
127 #define HAS_YUY2TOUVROW_SSE2
128 #define HAS_YUY2TOYROW_SSE2
129 
130 // Effects:
131 #define HAS_ARGBADDROW_SSE2
132 #define HAS_ARGBAFFINEROW_SSE2
133 #define HAS_ARGBATTENUATEROW_SSSE3
134 #define HAS_ARGBBLENDROW_SSSE3
135 #define HAS_ARGBCOLORMATRIXROW_SSSE3
136 #define HAS_ARGBCOLORTABLEROW_X86
137 #define HAS_ARGBCOPYALPHAROW_SSE2
138 #define HAS_ARGBCOPYYTOALPHAROW_SSE2
139 #define HAS_ARGBGRAYROW_SSSE3
140 #define HAS_ARGBLUMACOLORTABLEROW_SSSE3
141 #define HAS_ARGBMIRRORROW_SSE2
142 #define HAS_ARGBMULTIPLYROW_SSE2
143 #define HAS_ARGBPOLYNOMIALROW_SSE2
144 #define HAS_ARGBQUANTIZEROW_SSE2
145 #define HAS_ARGBSEPIAROW_SSSE3
146 #define HAS_ARGBSHADEROW_SSE2
147 #define HAS_ARGBSUBTRACTROW_SSE2
148 #define HAS_ARGBUNATTENUATEROW_SSE2
149 #define HAS_COMPUTECUMULATIVESUMROW_SSE2
150 #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
151 #define HAS_INTERPOLATEROW_SSE2
152 #define HAS_INTERPOLATEROW_SSSE3
153 #define HAS_RGBCOLORTABLEROW_X86
154 #define HAS_SOBELROW_SSE2
155 #define HAS_SOBELTOPLANEROW_SSE2
156 #define HAS_SOBELXROW_SSE2
157 #define HAS_SOBELXYROW_SSE2
158 #define HAS_SOBELYROW_SSE2
159 #endif
160 
161 // The following are available on x64 Visual C and clangcl.
162 #if !defined(LIBYUV_DISABLE_X86) && defined (_M_X64) && \
163     (!defined(__clang__) || defined(__SSSE3__))
164 #define HAS_I422TOARGBROW_SSSE3
165 #endif
166 
167 // GCC >= 4.7.0 required for AVX2.
168 #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
169 #if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
170 #define GCC_HAS_AVX2 1
171 #endif  // GNUC >= 4.7
172 #endif  // __GNUC__
173 
174 // clang >= 3.4.0 required for AVX2.
175 #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
176 #if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4))
177 #define CLANG_HAS_AVX2 1
178 #endif  // clang >= 3.4
179 #endif  // __clang__
180 
181 // Visual C 2012 required for AVX2.
182 #if defined(_M_IX86) && !defined(__clang__) && \
183     defined(_MSC_VER) && _MSC_VER >= 1700
184 #define VISUALC_HAS_AVX2 1
185 #endif  // VisualStudio >= 2012
186 
187 // The following are available require VS2012.  Port to GCC.
188 #if !defined(LIBYUV_DISABLE_X86) && defined(VISUALC_HAS_AVX2)
189 #define HAS_ARGB1555TOARGBROW_AVX2
190 #define HAS_ARGB4444TOARGBROW_AVX2
191 #define HAS_ARGBTOARGB1555ROW_AVX2
192 #define HAS_ARGBTOARGB4444ROW_AVX2
193 #define HAS_ARGBTORGB565DITHERROW_AVX2
194 #define HAS_ARGBTORGB565DITHERROW_SSE2
195 #define HAS_ARGBTORGB565ROW_AVX2
196 #define HAS_I411TOARGBROW_AVX2
197 #define HAS_I422TOARGB1555ROW_AVX2
198 #define HAS_I422TOARGB4444ROW_AVX2
199 #define HAS_I422TORGB565ROW_AVX2
200 #define HAS_I444TOARGBROW_AVX2
201 #define HAS_J400TOARGBROW_AVX2
202 #define HAS_NV12TOARGBROW_AVX2
203 #define HAS_NV12TORGB565ROW_AVX2
204 #define HAS_NV21TOARGBROW_AVX2
205 #define HAS_NV21TORGB565ROW_AVX2
206 #define HAS_RGB565TOARGBROW_AVX2
207 #endif
208 
209 // The following are available on all x86 platforms, but
210 // require VS2012, clang 3.4 or gcc 4.7.
211 // The code supports NaCL but requires a new compiler and validator.
212 #if !defined(LIBYUV_DISABLE_X86) && (defined(VISUALC_HAS_AVX2) || \
213     defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2))
214 #define HAS_ARGBCOPYALPHAROW_AVX2
215 #define HAS_ARGBCOPYYTOALPHAROW_AVX2
216 #define HAS_ARGBMIRRORROW_AVX2
217 #define HAS_ARGBPOLYNOMIALROW_AVX2
218 #define HAS_ARGBSHUFFLEROW_AVX2
219 #define HAS_ARGBTOUVROW_AVX2
220 #define HAS_ARGBTOYJROW_AVX2
221 #define HAS_ARGBTOYROW_AVX2
222 #define HAS_COPYROW_AVX
223 #define HAS_I400TOARGBROW_AVX2
224 #define HAS_I422TOABGRROW_AVX2
225 #define HAS_I422TOARGBROW_AVX2
226 #define HAS_I422TOBGRAROW_AVX2
227 #define HAS_I422TORAWROW_AVX2
228 #define HAS_I422TORGB24ROW_AVX2
229 #define HAS_I422TORGBAROW_AVX2
230 #define HAS_INTERPOLATEROW_AVX2
231 #define HAS_J422TOARGBROW_AVX2
232 #define HAS_MERGEUVROW_AVX2
233 #define HAS_MIRRORROW_AVX2
234 #define HAS_SPLITUVROW_AVX2
235 #define HAS_UYVYTOARGBROW_AVX2
236 #define HAS_UYVYTOUV422ROW_AVX2
237 #define HAS_UYVYTOUVROW_AVX2
238 #define HAS_UYVYTOYROW_AVX2
239 #define HAS_YUY2TOARGBROW_AVX2
240 #define HAS_YUY2TOUV422ROW_AVX2
241 #define HAS_YUY2TOUVROW_AVX2
242 #define HAS_YUY2TOYROW_AVX2
243 
244 // Effects:
245 #define HAS_ARGBADDROW_AVX2
246 #define HAS_ARGBATTENUATEROW_AVX2
247 #define HAS_ARGBMULTIPLYROW_AVX2
248 #define HAS_ARGBSUBTRACTROW_AVX2
249 #define HAS_ARGBUNATTENUATEROW_AVX2
250 #endif
251 
252 // The following are disabled when SSSE3 is available:
253 #if !defined(LIBYUV_DISABLE_X86) && \
254     (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) && \
255     !defined(LIBYUV_SSSE3_ONLY)
256 #define HAS_ARGBATTENUATEROW_SSE2
257 #define HAS_ARGBBLENDROW_SSE2
258 #define HAS_MIRRORROW_SSE2
259 #endif
260 
261 // The following are available on Neon platforms:
262 #if !defined(LIBYUV_DISABLE_NEON) && \
263     (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
264 #define HAS_ABGRTOUVROW_NEON
265 #define HAS_ABGRTOYROW_NEON
266 #define HAS_ARGB1555TOARGBROW_NEON
267 #define HAS_ARGB1555TOUVROW_NEON
268 #define HAS_ARGB1555TOYROW_NEON
269 #define HAS_ARGB4444TOARGBROW_NEON
270 #define HAS_ARGB4444TOUVROW_NEON
271 #define HAS_ARGB4444TOYROW_NEON
272 #define HAS_ARGBTOARGB1555ROW_NEON
273 #define HAS_ARGBTOARGB4444ROW_NEON
274 #define HAS_ARGBTORAWROW_NEON
275 #define HAS_ARGBTORGB24ROW_NEON
276 #define HAS_ARGBTORGB565ROW_NEON
277 #define HAS_ARGBTOUV411ROW_NEON
278 #define HAS_ARGBTOUV422ROW_NEON
279 #define HAS_ARGBTOUV444ROW_NEON
280 #define HAS_ARGBTOUVJROW_NEON
281 #define HAS_ARGBTOUVROW_NEON
282 #define HAS_ARGBTOYJROW_NEON
283 #define HAS_ARGBTOYROW_NEON
284 #define HAS_BGRATOUVROW_NEON
285 #define HAS_BGRATOYROW_NEON
286 #define HAS_COPYROW_NEON
287 #define HAS_J400TOARGBROW_NEON
288 #define HAS_I411TOARGBROW_NEON
289 #define HAS_I422TOABGRROW_NEON
290 #define HAS_I422TOARGB1555ROW_NEON
291 #define HAS_I422TOARGB4444ROW_NEON
292 #define HAS_I422TOARGBROW_NEON
293 #define HAS_I422TOBGRAROW_NEON
294 #define HAS_I422TORAWROW_NEON
295 #define HAS_I422TORGB24ROW_NEON
296 #define HAS_I422TORGB565ROW_NEON
297 #define HAS_I422TORGBAROW_NEON
298 #define HAS_I422TOUYVYROW_NEON
299 #define HAS_I422TOYUY2ROW_NEON
300 #define HAS_I444TOARGBROW_NEON
301 #define HAS_MERGEUVROW_NEON
302 #define HAS_MIRRORROW_NEON
303 #define HAS_MIRRORUVROW_NEON
304 #define HAS_NV12TOARGBROW_NEON
305 #define HAS_NV12TORGB565ROW_NEON
306 #define HAS_NV21TOARGBROW_NEON
307 #define HAS_NV21TORGB565ROW_NEON
308 #define HAS_RAWTOARGBROW_NEON
309 #define HAS_RAWTOUVROW_NEON
310 #define HAS_RAWTOYROW_NEON
311 #define HAS_RGB24TOARGBROW_NEON
312 #define HAS_RGB24TOUVROW_NEON
313 #define HAS_RGB24TOYROW_NEON
314 #define HAS_RGB565TOARGBROW_NEON
315 #define HAS_RGB565TOUVROW_NEON
316 #define HAS_RGB565TOYROW_NEON
317 #define HAS_RGBATOUVROW_NEON
318 #define HAS_RGBATOYROW_NEON
319 #define HAS_SETROW_NEON
320 #define HAS_ARGBSETROW_NEON
321 #define HAS_SPLITUVROW_NEON
322 #define HAS_UYVYTOARGBROW_NEON
323 #define HAS_UYVYTOUV422ROW_NEON
324 #define HAS_UYVYTOUVROW_NEON
325 #define HAS_UYVYTOYROW_NEON
326 #define HAS_I400TOARGBROW_NEON
327 #define HAS_YUY2TOARGBROW_NEON
328 #define HAS_YUY2TOUV422ROW_NEON
329 #define HAS_YUY2TOUVROW_NEON
330 #define HAS_YUY2TOYROW_NEON
331 #define HAS_ARGBTORGB565DITHERROW_NEON
332 
333 // Effects:
334 #define HAS_ARGBADDROW_NEON
335 #define HAS_ARGBATTENUATEROW_NEON
336 #define HAS_ARGBBLENDROW_NEON
337 #define HAS_ARGBGRAYROW_NEON
338 #define HAS_ARGBMIRRORROW_NEON
339 #define HAS_ARGBMULTIPLYROW_NEON
340 #define HAS_ARGBQUANTIZEROW_NEON
341 #define HAS_ARGBSEPIAROW_NEON
342 #define HAS_ARGBSHADEROW_NEON
343 #define HAS_ARGBSUBTRACTROW_NEON
344 #define HAS_INTERPOLATEROW_NEON
345 #define HAS_SOBELROW_NEON
346 #define HAS_SOBELTOPLANEROW_NEON
347 #define HAS_SOBELXROW_NEON
348 #define HAS_SOBELXYROW_NEON
349 #define HAS_SOBELYROW_NEON
350 #define HAS_ARGBCOLORMATRIXROW_NEON
351 #define HAS_ARGBSHUFFLEROW_NEON
352 #endif
353 
354 // The following are available on Mips platforms:
355 #if !defined(LIBYUV_DISABLE_MIPS) && defined(__mips__) && \
356     (_MIPS_SIM == _MIPS_SIM_ABI32) && (__mips_isa_rev < 6)
357 #define HAS_COPYROW_MIPS
358 #if defined(__mips_dsp) && (__mips_dsp_rev >= 2)
359 #define HAS_I422TOABGRROW_MIPS_DSPR2
360 #define HAS_I422TOARGBROW_MIPS_DSPR2
361 #define HAS_I422TOBGRAROW_MIPS_DSPR2
362 #define HAS_INTERPOLATEROW_MIPS_DSPR2
363 #define HAS_MIRRORROW_MIPS_DSPR2
364 #define HAS_MIRRORUVROW_MIPS_DSPR2
365 #define HAS_SPLITUVROW_MIPS_DSPR2
366 #endif
367 #endif
368 
369 #if defined(_MSC_VER) && !defined(__CLR_VER)
370 #define SIMD_ALIGNED(var) __declspec(align(16)) var
371 #define SIMD_ALIGNED32(var) __declspec(align(64)) var
372 typedef __declspec(align(16)) int16 vec16[8];
373 typedef __declspec(align(16)) int32 vec32[4];
374 typedef __declspec(align(16)) int8 vec8[16];
375 typedef __declspec(align(16)) uint16 uvec16[8];
376 typedef __declspec(align(16)) uint32 uvec32[4];
377 typedef __declspec(align(16)) uint8 uvec8[16];
378 typedef __declspec(align(32)) int16 lvec16[16];
379 typedef __declspec(align(32)) int32 lvec32[8];
380 typedef __declspec(align(32)) int8 lvec8[32];
381 typedef __declspec(align(32)) uint16 ulvec16[16];
382 typedef __declspec(align(32)) uint32 ulvec32[8];
383 typedef __declspec(align(32)) uint8 ulvec8[32];
384 #elif defined(__GNUC__)
385 // Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
386 #define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
387 #define SIMD_ALIGNED32(var) var __attribute__((aligned(64)))
388 typedef int16 __attribute__((vector_size(16))) vec16;
389 typedef int32 __attribute__((vector_size(16))) vec32;
390 typedef int8 __attribute__((vector_size(16))) vec8;
391 typedef uint16 __attribute__((vector_size(16))) uvec16;
392 typedef uint32 __attribute__((vector_size(16))) uvec32;
393 typedef uint8 __attribute__((vector_size(16))) uvec8;
394 typedef int16 __attribute__((vector_size(32))) lvec16;
395 typedef int32 __attribute__((vector_size(32))) lvec32;
396 typedef int8 __attribute__((vector_size(32))) lvec8;
397 typedef uint16 __attribute__((vector_size(32))) ulvec16;
398 typedef uint32 __attribute__((vector_size(32))) ulvec32;
399 typedef uint8 __attribute__((vector_size(32))) ulvec8;
400 #else
401 #define SIMD_ALIGNED(var) var
402 #define SIMD_ALIGNED32(var) var
403 typedef int16 vec16[8];
404 typedef int32 vec32[4];
405 typedef int8 vec8[16];
406 typedef uint16 uvec16[8];
407 typedef uint32 uvec32[4];
408 typedef uint8 uvec8[16];
409 typedef int16 lvec16[16];
410 typedef int32 lvec32[8];
411 typedef int8 lvec8[32];
412 typedef uint16 ulvec16[16];
413 typedef uint32 ulvec32[8];
414 typedef uint8 ulvec8[32];
415 #endif
416 
417 #if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
418 #define OMITFP
419 #else
420 #define OMITFP __attribute__((optimize("omit-frame-pointer")))
421 #endif
422 
423 // NaCL macros for GCC x86 and x64.
424 #if defined(__native_client__)
425 #define LABELALIGN ".p2align 5\n"
426 #else
427 #define LABELALIGN
428 #endif
429 #if defined(__native_client__) && defined(__x86_64__)
430 // r14 is used for MEMOP macros.
431 #define NACL_R14 "r14",
432 #define BUNDLELOCK ".bundle_lock\n"
433 #define BUNDLEUNLOCK ".bundle_unlock\n"
434 #define MEMACCESS(base) "%%nacl:(%%r15,%q" #base ")"
435 #define MEMACCESS2(offset, base) "%%nacl:" #offset "(%%r15,%q" #base ")"
436 #define MEMLEA(offset, base) #offset "(%q" #base ")"
437 #define MEMLEA3(offset, index, scale) \
438     #offset "(,%q" #index "," #scale ")"
439 #define MEMLEA4(offset, base, index, scale) \
440     #offset "(%q" #base ",%q" #index "," #scale ")"
441 #define MEMMOVESTRING(s, d) "%%nacl:(%q" #s "),%%nacl:(%q" #d "), %%r15"
442 #define MEMSTORESTRING(reg, d) "%%" #reg ",%%nacl:(%q" #d "), %%r15"
443 #define MEMOPREG(opcode, offset, base, index, scale, reg) \
444     BUNDLELOCK \
445     "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
446     #opcode " (%%r15,%%r14),%%" #reg "\n" \
447     BUNDLEUNLOCK
448 #define MEMOPMEM(opcode, reg, offset, base, index, scale) \
449     BUNDLELOCK \
450     "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
451     #opcode " %%" #reg ",(%%r15,%%r14)\n" \
452     BUNDLEUNLOCK
453 #define MEMOPARG(opcode, offset, base, index, scale, arg) \
454     BUNDLELOCK \
455     "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
456     #opcode " (%%r15,%%r14),%" #arg "\n" \
457     BUNDLEUNLOCK
458 #define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2) \
459     BUNDLELOCK \
460     "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
461     #opcode " (%%r15,%%r14),%%" #reg1 ",%%" #reg2 "\n" \
462     BUNDLEUNLOCK
463 #define VEXTOPMEM(op, sel, reg, offset, base, index, scale) \
464     BUNDLELOCK \
465     "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
466     #op " $" #sel ",%%" #reg ",(%%r15,%%r14)\n" \
467     BUNDLEUNLOCK
468 #else  // defined(__native_client__) && defined(__x86_64__)
469 #define NACL_R14
470 #define BUNDLEALIGN
471 #define MEMACCESS(base) "(%" #base ")"
472 #define MEMACCESS2(offset, base) #offset "(%" #base ")"
473 #define MEMLEA(offset, base) #offset "(%" #base ")"
474 #define MEMLEA3(offset, index, scale) \
475     #offset "(,%" #index "," #scale ")"
476 #define MEMLEA4(offset, base, index, scale) \
477     #offset "(%" #base ",%" #index "," #scale ")"
478 #define MEMMOVESTRING(s, d)
479 #define MEMSTORESTRING(reg, d)
480 #define MEMOPREG(opcode, offset, base, index, scale, reg) \
481     #opcode " " #offset "(%" #base ",%" #index "," #scale "),%%" #reg "\n"
482 #define MEMOPMEM(opcode, reg, offset, base, index, scale) \
483     #opcode " %%" #reg ","#offset "(%" #base ",%" #index "," #scale ")\n"
484 #define MEMOPARG(opcode, offset, base, index, scale, arg) \
485     #opcode " " #offset "(%" #base ",%" #index "," #scale "),%" #arg "\n"
486 #define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2) \
487     #opcode " " #offset "(%" #base ",%" #index "," #scale "),%%" #reg1 ",%%" \
488     #reg2 "\n"
489 #define VEXTOPMEM(op, sel, reg, offset, base, index, scale) \
490     #op " $" #sel ",%%" #reg ","#offset "(%" #base ",%" #index "," #scale ")\n"
491 #endif  // defined(__native_client__) && defined(__x86_64__)
492 
493 #if defined(__arm__) || defined(__aarch64__)
494 #undef MEMACCESS
495 #if defined(__native_client__)
496 #define MEMACCESS(base) ".p2align 3\nbic %" #base ", #0xc0000000\n"
497 #else
498 #define MEMACCESS(base)
499 #endif
500 #endif
501 
502 void I444ToARGBRow_NEON(const uint8* src_y,
503                         const uint8* src_u,
504                         const uint8* src_v,
505                         uint8* dst_argb,
506                         int width);
507 void I422ToARGBRow_NEON(const uint8* src_y,
508                         const uint8* src_u,
509                         const uint8* src_v,
510                         uint8* dst_argb,
511                         int width);
512 void I411ToARGBRow_NEON(const uint8* src_y,
513                         const uint8* src_u,
514                         const uint8* src_v,
515                         uint8* dst_argb,
516                         int width);
517 void I422ToBGRARow_NEON(const uint8* src_y,
518                         const uint8* src_u,
519                         const uint8* src_v,
520                         uint8* dst_bgra,
521                         int width);
522 void I422ToABGRRow_NEON(const uint8* src_y,
523                         const uint8* src_u,
524                         const uint8* src_v,
525                         uint8* dst_abgr,
526                         int width);
527 void I422ToRGBARow_NEON(const uint8* src_y,
528                         const uint8* src_u,
529                         const uint8* src_v,
530                         uint8* dst_rgba,
531                         int width);
532 void I422ToRGB24Row_NEON(const uint8* src_y,
533                          const uint8* src_u,
534                          const uint8* src_v,
535                          uint8* dst_rgb24,
536                          int width);
537 void I422ToRAWRow_NEON(const uint8* src_y,
538                        const uint8* src_u,
539                        const uint8* src_v,
540                        uint8* dst_raw,
541                        int width);
542 void I422ToRGB565Row_NEON(const uint8* src_y,
543                           const uint8* src_u,
544                           const uint8* src_v,
545                           uint8* dst_rgb565,
546                           int width);
547 void I422ToARGB1555Row_NEON(const uint8* src_y,
548                             const uint8* src_u,
549                             const uint8* src_v,
550                             uint8* dst_argb1555,
551                             int width);
552 void I422ToARGB4444Row_NEON(const uint8* src_y,
553                             const uint8* src_u,
554                             const uint8* src_v,
555                             uint8* dst_argb4444,
556                             int width);
557 void NV12ToARGBRow_NEON(const uint8* src_y,
558                         const uint8* src_uv,
559                         uint8* dst_argb,
560                         int width);
561 void NV21ToARGBRow_NEON(const uint8* src_y,
562                         const uint8* src_vu,
563                         uint8* dst_argb,
564                         int width);
565 void NV12ToRGB565Row_NEON(const uint8* src_y,
566                           const uint8* src_uv,
567                           uint8* dst_rgb565,
568                           int width);
569 void NV21ToRGB565Row_NEON(const uint8* src_y,
570                           const uint8* src_vu,
571                           uint8* dst_rgb565,
572                           int width);
573 void YUY2ToARGBRow_NEON(const uint8* src_yuy2,
574                         uint8* dst_argb,
575                         int width);
576 void UYVYToARGBRow_NEON(const uint8* src_uyvy,
577                         uint8* dst_argb,
578                         int width);
579 
580 void ARGBToYRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
581 void ARGBToYRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
582 void ARGBToYRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
583 void ARGBToYJRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
584 void ARGBToYJRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
585 void ARGBToYJRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
586 void BGRAToYRow_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);
587 void ABGRToYRow_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);
588 void RGBAToYRow_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);
589 void RGB24ToYRow_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);
590 void RAWToYRow_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);
591 void ARGBToYRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);
592 void ARGBToYJRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);
593 void ARGBToUV444Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
594                          int pix);
595 void ARGBToUV422Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
596                          int pix);
597 void ARGBToUV411Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
598                          int pix);
599 void ARGBToUVRow_NEON(const uint8* src_argb, int src_stride_argb,
600                       uint8* dst_u, uint8* dst_v, int pix);
601 void ARGBToUVJRow_NEON(const uint8* src_argb, int src_stride_argb,
602                        uint8* dst_u, uint8* dst_v, int pix);
603 void BGRAToUVRow_NEON(const uint8* src_bgra, int src_stride_bgra,
604                       uint8* dst_u, uint8* dst_v, int pix);
605 void ABGRToUVRow_NEON(const uint8* src_abgr, int src_stride_abgr,
606                       uint8* dst_u, uint8* dst_v, int pix);
607 void RGBAToUVRow_NEON(const uint8* src_rgba, int src_stride_rgba,
608                       uint8* dst_u, uint8* dst_v, int pix);
609 void RGB24ToUVRow_NEON(const uint8* src_rgb24, int src_stride_rgb24,
610                        uint8* dst_u, uint8* dst_v, int pix);
611 void RAWToUVRow_NEON(const uint8* src_raw, int src_stride_raw,
612                      uint8* dst_u, uint8* dst_v, int pix);
613 void RGB565ToUVRow_NEON(const uint8* src_rgb565, int src_stride_rgb565,
614                         uint8* dst_u, uint8* dst_v, int pix);
615 void ARGB1555ToUVRow_NEON(const uint8* src_argb1555, int src_stride_argb1555,
616                           uint8* dst_u, uint8* dst_v, int pix);
617 void ARGB4444ToUVRow_NEON(const uint8* src_argb4444, int src_stride_argb4444,
618                           uint8* dst_u, uint8* dst_v, int pix);
619 void BGRAToYRow_NEON(const uint8* src_bgra, uint8* dst_y, int pix);
620 void ABGRToYRow_NEON(const uint8* src_abgr, uint8* dst_y, int pix);
621 void RGBAToYRow_NEON(const uint8* src_rgba, uint8* dst_y, int pix);
622 void RGB24ToYRow_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);
623 void RAWToYRow_NEON(const uint8* src_raw, uint8* dst_y, int pix);
624 void RGB565ToYRow_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);
625 void ARGB1555ToYRow_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);
626 void ARGB4444ToYRow_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);
627 void ARGBToYRow_C(const uint8* src_argb, uint8* dst_y, int pix);
628 void ARGBToYJRow_C(const uint8* src_argb, uint8* dst_y, int pix);
629 void BGRAToYRow_C(const uint8* src_bgra, uint8* dst_y, int pix);
630 void ABGRToYRow_C(const uint8* src_abgr, uint8* dst_y, int pix);
631 void RGBAToYRow_C(const uint8* src_rgba, uint8* dst_y, int pix);
632 void RGB24ToYRow_C(const uint8* src_rgb24, uint8* dst_y, int pix);
633 void RAWToYRow_C(const uint8* src_raw, uint8* dst_y, int pix);
634 void RGB565ToYRow_C(const uint8* src_rgb565, uint8* dst_y, int pix);
635 void ARGB1555ToYRow_C(const uint8* src_argb1555, uint8* dst_y, int pix);
636 void ARGB4444ToYRow_C(const uint8* src_argb4444, uint8* dst_y, int pix);
637 void ARGBToYRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
638 void ARGBToYJRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
639 void BGRAToYRow_Any_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);
640 void ABGRToYRow_Any_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);
641 void RGBAToYRow_Any_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);
642 void RGB24ToYRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);
643 void RAWToYRow_Any_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);
644 void ARGBToYRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);
645 void ARGBToYJRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);
646 void BGRAToYRow_Any_NEON(const uint8* src_bgra, uint8* dst_y, int pix);
647 void ABGRToYRow_Any_NEON(const uint8* src_abgr, uint8* dst_y, int pix);
648 void RGBAToYRow_Any_NEON(const uint8* src_rgba, uint8* dst_y, int pix);
649 void RGB24ToYRow_Any_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);
650 void RAWToYRow_Any_NEON(const uint8* src_raw, uint8* dst_y, int pix);
651 void RGB565ToYRow_Any_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);
652 void ARGB1555ToYRow_Any_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);
653 void ARGB4444ToYRow_Any_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);
654 
655 void ARGBToUVRow_AVX2(const uint8* src_argb, int src_stride_argb,
656                       uint8* dst_u, uint8* dst_v, int width);
657 void ARGBToUVRow_Any_AVX2(const uint8* src_argb, int src_stride_argb,
658                           uint8* dst_u, uint8* dst_v, int width);
659 void ARGBToUVRow_SSSE3(const uint8* src_argb, int src_stride_argb,
660                        uint8* dst_u, uint8* dst_v, int width);
661 void ARGBToUVJRow_SSSE3(const uint8* src_argb, int src_stride_argb,
662                         uint8* dst_u, uint8* dst_v, int width);
663 void BGRAToUVRow_SSSE3(const uint8* src_bgra, int src_stride_bgra,
664                        uint8* dst_u, uint8* dst_v, int width);
665 void ABGRToUVRow_SSSE3(const uint8* src_abgr, int src_stride_abgr,
666                        uint8* dst_u, uint8* dst_v, int width);
667 void RGBAToUVRow_SSSE3(const uint8* src_rgba, int src_stride_rgba,
668                        uint8* dst_u, uint8* dst_v, int width);
669 void ARGBToUVRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,
670                            uint8* dst_u, uint8* dst_v, int width);
671 void ARGBToUVJRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,
672                             uint8* dst_u, uint8* dst_v, int width);
673 void BGRAToUVRow_Any_SSSE3(const uint8* src_bgra, int src_stride_bgra,
674                            uint8* dst_u, uint8* dst_v, int width);
675 void ABGRToUVRow_Any_SSSE3(const uint8* src_abgr, int src_stride_abgr,
676                            uint8* dst_u, uint8* dst_v, int width);
677 void RGBAToUVRow_Any_SSSE3(const uint8* src_rgba, int src_stride_rgba,
678                            uint8* dst_u, uint8* dst_v, int width);
679 void ARGBToUV444Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
680                              int pix);
681 void ARGBToUV422Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
682                              int pix);
683 void ARGBToUV411Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
684                              int pix);
685 void ARGBToUVRow_Any_NEON(const uint8* src_argb, int src_stride_argb,
686                           uint8* dst_u, uint8* dst_v, int pix);
687 void ARGBToUVJRow_Any_NEON(const uint8* src_argb, int src_stride_argb,
688                            uint8* dst_u, uint8* dst_v, int pix);
689 void BGRAToUVRow_Any_NEON(const uint8* src_bgra, int src_stride_bgra,
690                           uint8* dst_u, uint8* dst_v, int pix);
691 void ABGRToUVRow_Any_NEON(const uint8* src_abgr, int src_stride_abgr,
692                           uint8* dst_u, uint8* dst_v, int pix);
693 void RGBAToUVRow_Any_NEON(const uint8* src_rgba, int src_stride_rgba,
694                           uint8* dst_u, uint8* dst_v, int pix);
695 void RGB24ToUVRow_Any_NEON(const uint8* src_rgb24, int src_stride_rgb24,
696                            uint8* dst_u, uint8* dst_v, int pix);
697 void RAWToUVRow_Any_NEON(const uint8* src_raw, int src_stride_raw,
698                          uint8* dst_u, uint8* dst_v, int pix);
699 void RGB565ToUVRow_Any_NEON(const uint8* src_rgb565, int src_stride_rgb565,
700                             uint8* dst_u, uint8* dst_v, int pix);
701 void ARGB1555ToUVRow_Any_NEON(const uint8* src_argb1555,
702                               int src_stride_argb1555,
703                               uint8* dst_u, uint8* dst_v, int pix);
704 void ARGB4444ToUVRow_Any_NEON(const uint8* src_argb4444,
705                               int src_stride_argb4444,
706                               uint8* dst_u, uint8* dst_v, int pix);
707 void ARGBToUVRow_C(const uint8* src_argb, int src_stride_argb,
708                    uint8* dst_u, uint8* dst_v, int width);
709 void ARGBToUVJRow_C(const uint8* src_argb, int src_stride_argb,
710                     uint8* dst_u, uint8* dst_v, int width);
711 void BGRAToUVRow_C(const uint8* src_bgra, int src_stride_bgra,
712                    uint8* dst_u, uint8* dst_v, int width);
713 void ABGRToUVRow_C(const uint8* src_abgr, int src_stride_abgr,
714                    uint8* dst_u, uint8* dst_v, int width);
715 void RGBAToUVRow_C(const uint8* src_rgba, int src_stride_rgba,
716                    uint8* dst_u, uint8* dst_v, int width);
717 void RGB24ToUVRow_C(const uint8* src_rgb24, int src_stride_rgb24,
718                     uint8* dst_u, uint8* dst_v, int width);
719 void RAWToUVRow_C(const uint8* src_raw, int src_stride_raw,
720                   uint8* dst_u, uint8* dst_v, int width);
721 void RGB565ToUVRow_C(const uint8* src_rgb565, int src_stride_rgb565,
722                      uint8* dst_u, uint8* dst_v, int width);
723 void ARGB1555ToUVRow_C(const uint8* src_argb1555, int src_stride_argb1555,
724                        uint8* dst_u, uint8* dst_v, int width);
725 void ARGB4444ToUVRow_C(const uint8* src_argb4444, int src_stride_argb4444,
726                        uint8* dst_u, uint8* dst_v, int width);
727 
728 void ARGBToUV444Row_SSSE3(const uint8* src_argb,
729                           uint8* dst_u, uint8* dst_v, int width);
730 void ARGBToUV444Row_Any_SSSE3(const uint8* src_argb,
731                               uint8* dst_u, uint8* dst_v, int width);
732 
733 void ARGBToUV422Row_SSSE3(const uint8* src_argb,
734                           uint8* dst_u, uint8* dst_v, int width);
735 void ARGBToUV422Row_Any_SSSE3(const uint8* src_argb,
736                               uint8* dst_u, uint8* dst_v, int width);
737 
738 void ARGBToUV444Row_C(const uint8* src_argb,
739                       uint8* dst_u, uint8* dst_v, int width);
740 void ARGBToUV422Row_C(const uint8* src_argb,
741                       uint8* dst_u, uint8* dst_v, int width);
742 void ARGBToUV411Row_C(const uint8* src_argb,
743                       uint8* dst_u, uint8* dst_v, int width);
744 void ARGBToUVJ422Row_C(const uint8* src_argb,
745                        uint8* dst_u, uint8* dst_v, int width);
746 
747 void MirrorRow_AVX2(const uint8* src, uint8* dst, int width);
748 void MirrorRow_SSSE3(const uint8* src, uint8* dst, int width);
749 void MirrorRow_SSE2(const uint8* src, uint8* dst, int width);
750 void MirrorRow_NEON(const uint8* src, uint8* dst, int width);
751 void MirrorRow_MIPS_DSPR2(const uint8* src, uint8* dst, int width);
752 void MirrorRow_C(const uint8* src, uint8* dst, int width);
753 void MirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);
754 void MirrorRow_Any_SSSE3(const uint8* src, uint8* dst, int width);
755 void MirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);
756 void MirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);
757 
758 void MirrorUVRow_SSSE3(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
759                        int width);
760 void MirrorUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
761                       int width);
762 void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
763                             int width);
764 void MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
765                    int width);
766 
767 void ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width);
768 void ARGBMirrorRow_SSE2(const uint8* src, uint8* dst, int width);
769 void ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width);
770 void ARGBMirrorRow_C(const uint8* src, uint8* dst, int width);
771 void ARGBMirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);
772 void ARGBMirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);
773 void ARGBMirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);
774 
775 void SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
776 void SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
777 void SplitUVRow_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
778 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
779 void SplitUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
780                            int pix);
781 void SplitUVRow_Any_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
782                          int pix);
783 void SplitUVRow_Any_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
784                          int pix);
785 void SplitUVRow_Any_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
786                          int pix);
787 void SplitUVRow_Any_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
788                                int pix);
789 
790 void MergeUVRow_C(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
791                   int width);
792 void MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
793                      int width);
794 void MergeUVRow_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
795                      int width);
796 void MergeUVRow_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
797                      int width);
798 void MergeUVRow_Any_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
799                          int width);
800 void MergeUVRow_Any_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
801                          int width);
802 void MergeUVRow_Any_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
803                          int width);
804 
805 void CopyRow_SSE2(const uint8* src, uint8* dst, int count);
806 void CopyRow_AVX(const uint8* src, uint8* dst, int count);
807 void CopyRow_ERMS(const uint8* src, uint8* dst, int count);
808 void CopyRow_NEON(const uint8* src, uint8* dst, int count);
809 void CopyRow_MIPS(const uint8* src, uint8* dst, int count);
810 void CopyRow_C(const uint8* src, uint8* dst, int count);
811 void CopyRow_Any_SSE2(const uint8* src, uint8* dst, int count);
812 void CopyRow_Any_AVX(const uint8* src, uint8* dst, int count);
813 void CopyRow_Any_NEON(const uint8* src, uint8* dst, int count);
814 
815 void CopyRow_16_C(const uint16* src, uint16* dst, int count);
816 
817 void ARGBCopyAlphaRow_C(const uint8* src_argb, uint8* dst_argb, int width);
818 void ARGBCopyAlphaRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
819 void ARGBCopyAlphaRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
820 
821 void ARGBCopyYToAlphaRow_C(const uint8* src_y, uint8* dst_argb, int width);
822 void ARGBCopyYToAlphaRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
823 void ARGBCopyYToAlphaRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
824 
825 void SetRow_C(uint8* dst, uint8 v8, int count);
826 void SetRow_X86(uint8* dst, uint8 v8, int count);
827 void SetRow_ERMS(uint8* dst, uint8 v8, int count);
828 void SetRow_NEON(uint8* dst, uint8 v8, int count);
829 void SetRow_Any_X86(uint8* dst, uint8 v8, int count);
830 void SetRow_Any_NEON(uint8* dst, uint8 v8, int count);
831 
832 void ARGBSetRow_C(uint8* dst_argb, uint32 v32, int count);
833 void ARGBSetRow_X86(uint8* dst_argb, uint32 v32, int count);
834 void ARGBSetRow_NEON(uint8* dst_argb, uint32 v32, int count);
835 void ARGBSetRow_Any_NEON(uint8* dst_argb, uint32 v32, int count);
836 
837 // ARGBShufflers for BGRAToARGB etc.
838 void ARGBShuffleRow_C(const uint8* src_argb, uint8* dst_argb,
839                       const uint8* shuffler, int pix);
840 void ARGBShuffleRow_SSE2(const uint8* src_argb, uint8* dst_argb,
841                          const uint8* shuffler, int pix);
842 void ARGBShuffleRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
843                           const uint8* shuffler, int pix);
844 void ARGBShuffleRow_AVX2(const uint8* src_argb, uint8* dst_argb,
845                          const uint8* shuffler, int pix);
846 void ARGBShuffleRow_NEON(const uint8* src_argb, uint8* dst_argb,
847                          const uint8* shuffler, int pix);
848 void ARGBShuffleRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
849                              const uint8* shuffler, int pix);
850 void ARGBShuffleRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,
851                               const uint8* shuffler, int pix);
852 void ARGBShuffleRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
853                              const uint8* shuffler, int pix);
854 void ARGBShuffleRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,
855                              const uint8* shuffler, int pix);
856 
857 void RGB24ToARGBRow_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);
858 void RAWToARGBRow_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);
859 void RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb, int pix);
860 void ARGB1555ToARGBRow_SSE2(const uint8* src_argb1555, uint8* dst_argb,
861                             int pix);
862 void ARGB4444ToARGBRow_SSE2(const uint8* src_argb4444, uint8* dst_argb,
863                             int pix);
864 void RGB565ToARGBRow_AVX2(const uint8* src_rgb565, uint8* dst_argb, int pix);
865 void ARGB1555ToARGBRow_AVX2(const uint8* src_argb1555, uint8* dst_argb,
866                             int pix);
867 void ARGB4444ToARGBRow_AVX2(const uint8* src_argb4444, uint8* dst_argb,
868                             int pix);
869 
870 void RGB24ToARGBRow_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);
871 void RAWToARGBRow_NEON(const uint8* src_raw, uint8* dst_argb, int pix);
872 void RGB565ToARGBRow_NEON(const uint8* src_rgb565, uint8* dst_argb, int pix);
873 void ARGB1555ToARGBRow_NEON(const uint8* src_argb1555, uint8* dst_argb,
874                             int pix);
875 void ARGB4444ToARGBRow_NEON(const uint8* src_argb4444, uint8* dst_argb,
876                             int pix);
877 void RGB24ToARGBRow_C(const uint8* src_rgb24, uint8* dst_argb, int pix);
878 void RAWToARGBRow_C(const uint8* src_raw, uint8* dst_argb, int pix);
879 void RGB565ToARGBRow_C(const uint8* src_rgb, uint8* dst_argb, int pix);
880 void ARGB1555ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);
881 void ARGB4444ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);
882 void RGB24ToARGBRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);
883 void RAWToARGBRow_Any_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);
884 
885 void RGB565ToARGBRow_Any_SSE2(const uint8* src_rgb565, uint8* dst_argb,
886                               int pix);
887 void ARGB1555ToARGBRow_Any_SSE2(const uint8* src_argb1555, uint8* dst_argb,
888                                 int pix);
889 void ARGB4444ToARGBRow_Any_SSE2(const uint8* src_argb4444, uint8* dst_argb,
890                                 int pix);
891 void RGB565ToARGBRow_Any_AVX2(const uint8* src_rgb565, uint8* dst_argb,
892                               int pix);
893 void ARGB1555ToARGBRow_Any_AVX2(const uint8* src_argb1555, uint8* dst_argb,
894                                 int pix);
895 void ARGB4444ToARGBRow_Any_AVX2(const uint8* src_argb4444, uint8* dst_argb,
896                                 int pix);
897 
898 void RGB24ToARGBRow_Any_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);
899 void RAWToARGBRow_Any_NEON(const uint8* src_raw, uint8* dst_argb, int pix);
900 void RGB565ToARGBRow_Any_NEON(const uint8* src_rgb565, uint8* dst_argb,
901                               int pix);
902 void ARGB1555ToARGBRow_Any_NEON(const uint8* src_argb1555, uint8* dst_argb,
903                                 int pix);
904 void ARGB4444ToARGBRow_Any_NEON(const uint8* src_argb4444, uint8* dst_argb,
905                                 int pix);
906 
907 void ARGBToRGB24Row_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
908 void ARGBToRAWRow_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
909 void ARGBToRGB565Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
910 void ARGBToARGB1555Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
911 void ARGBToARGB4444Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
912 
913 void ARGBToRGB565DitherRow_C(const uint8* src_argb, uint8* dst_rgb,
914                              const uint32 dither4, int pix);
915 void ARGBToRGB565DitherRow_SSE2(const uint8* src_argb, uint8* dst_rgb,
916                                 const uint32 dither4, int pix);
917 void ARGBToRGB565DitherRow_AVX2(const uint8* src_argb, uint8* dst_rgb,
918                                 const uint32 dither4, int pix);
919 
920 void ARGBToRGB565Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
921 void ARGBToARGB1555Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
922 void ARGBToARGB4444Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
923 
924 void ARGBToRGB24Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
925 void ARGBToRAWRow_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
926 void ARGBToRGB565Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
927 void ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
928 void ARGBToARGB4444Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
929 void ARGBToRGB565DitherRow_NEON(const uint8* src_argb, uint8* dst_rgb,
930                                 const uint32 dither4, int width);
931 
932 void ARGBToRGBARow_C(const uint8* src_argb, uint8* dst_rgb, int pix);
933 void ARGBToRGB24Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
934 void ARGBToRAWRow_C(const uint8* src_argb, uint8* dst_rgb, int pix);
935 void ARGBToRGB565Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
936 void ARGBToARGB1555Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
937 void ARGBToARGB4444Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
938 
939 void J400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int pix);
940 void J400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int pix);
941 void J400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int pix);
942 void J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int pix);
943 void J400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int pix);
944 void J400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int pix);
945 void J400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int pix);
946 
947 void I444ToARGBRow_C(const uint8* src_y,
948                      const uint8* src_u,
949                      const uint8* src_v,
950                      uint8* dst_argb,
951                      int width);
952 void I422ToARGBRow_C(const uint8* src_y,
953                      const uint8* src_u,
954                      const uint8* src_v,
955                      uint8* dst_argb,
956                      int width);
957 void I411ToARGBRow_C(const uint8* src_y,
958                      const uint8* src_u,
959                      const uint8* src_v,
960                      uint8* dst_argb,
961                      int width);
962 void NV12ToARGBRow_C(const uint8* src_y,
963                      const uint8* src_uv,
964                      uint8* dst_argb,
965                      int width);
966 void NV21ToRGB565Row_C(const uint8* src_y,
967                        const uint8* src_vu,
968                        uint8* dst_argb,
969                        int width);
970 void NV12ToRGB565Row_C(const uint8* src_y,
971                        const uint8* src_uv,
972                        uint8* dst_argb,
973                        int width);
974 void NV21ToARGBRow_C(const uint8* src_y,
975                      const uint8* src_vu,
976                      uint8* dst_argb,
977                      int width);
978 void YUY2ToARGBRow_C(const uint8* src_yuy2,
979                      uint8* dst_argb,
980                      int width);
981 void UYVYToARGBRow_C(const uint8* src_uyvy,
982                      uint8* dst_argb,
983                      int width);
984 void J422ToARGBRow_C(const uint8* src_y,
985                      const uint8* src_u,
986                      const uint8* src_v,
987                      uint8* dst_argb,
988                      int width);
989 void I422ToBGRARow_C(const uint8* src_y,
990                      const uint8* src_u,
991                      const uint8* src_v,
992                      uint8* dst_bgra,
993                      int width);
994 void I422ToABGRRow_C(const uint8* src_y,
995                      const uint8* src_u,
996                      const uint8* src_v,
997                      uint8* dst_abgr,
998                      int width);
999 void I422ToRGBARow_C(const uint8* src_y,
1000                      const uint8* src_u,
1001                      const uint8* src_v,
1002                      uint8* dst_rgba,
1003                      int width);
1004 void I422ToRGB24Row_C(const uint8* src_y,
1005                       const uint8* src_u,
1006                       const uint8* src_v,
1007                       uint8* dst_rgb24,
1008                       int width);
1009 void I422ToRAWRow_C(const uint8* src_y,
1010                     const uint8* src_u,
1011                     const uint8* src_v,
1012                     uint8* dst_raw,
1013                     int width);
1014 void I422ToARGB4444Row_C(const uint8* src_y,
1015                          const uint8* src_u,
1016                          const uint8* src_v,
1017                          uint8* dst_argb4444,
1018                          int width);
1019 void I422ToARGB1555Row_C(const uint8* src_y,
1020                          const uint8* src_u,
1021                          const uint8* src_v,
1022                          uint8* dst_argb4444,
1023                          int width);
1024 void I422ToRGB565Row_C(const uint8* src_y,
1025                        const uint8* src_u,
1026                        const uint8* src_v,
1027                        uint8* dst_rgb565,
1028                        int width);
1029 void I422ToARGBRow_AVX2(const uint8* src_y,
1030                         const uint8* src_u,
1031                         const uint8* src_v,
1032                         uint8* dst_argb,
1033                         int width);
1034 void I422ToBGRARow_AVX2(const uint8* src_y,
1035                         const uint8* src_u,
1036                         const uint8* src_v,
1037                         uint8* dst_argb,
1038                         int width);
1039 void I422ToRGBARow_AVX2(const uint8* src_y,
1040                         const uint8* src_u,
1041                         const uint8* src_v,
1042                         uint8* dst_argb,
1043                         int width);
1044 void I422ToABGRRow_AVX2(const uint8* src_y,
1045                         const uint8* src_u,
1046                         const uint8* src_v,
1047                         uint8* dst_argb,
1048                         int width);
1049 void I444ToARGBRow_SSSE3(const uint8* src_y,
1050                          const uint8* src_u,
1051                          const uint8* src_v,
1052                          uint8* dst_argb,
1053                          int width);
1054 void I444ToARGBRow_AVX2(const uint8* src_y,
1055                         const uint8* src_u,
1056                         const uint8* src_v,
1057                         uint8* dst_argb,
1058                         int width);
1059 void I422ToARGBRow_SSSE3(const uint8* src_y,
1060                          const uint8* src_u,
1061                          const uint8* src_v,
1062                          uint8* dst_argb,
1063                          int width);
1064 void I411ToARGBRow_SSSE3(const uint8* src_y,
1065                          const uint8* src_u,
1066                          const uint8* src_v,
1067                          uint8* dst_argb,
1068                          int width);
1069 void I411ToARGBRow_AVX2(const uint8* src_y,
1070                         const uint8* src_u,
1071                         const uint8* src_v,
1072                         uint8* dst_argb,
1073                         int width);
1074 void NV12ToARGBRow_SSSE3(const uint8* src_y,
1075                          const uint8* src_uv,
1076                          uint8* dst_argb,
1077                          int width);
1078 void NV21ToARGBRow_SSSE3(const uint8* src_y,
1079                          const uint8* src_vu,
1080                          uint8* dst_argb,
1081                          int width);
1082 void NV12ToARGBRow_AVX2(const uint8* src_y,
1083                         const uint8* src_uv,
1084                         uint8* dst_argb,
1085                         int width);
1086 void NV21ToARGBRow_AVX2(const uint8* src_y,
1087                         const uint8* src_vu,
1088                         uint8* dst_argb,
1089                         int width);
1090 void NV12ToRGB565Row_SSSE3(const uint8* src_y,
1091                            const uint8* src_uv,
1092                            uint8* dst_argb,
1093                            int width);
1094 void NV21ToRGB565Row_SSSE3(const uint8* src_y,
1095                            const uint8* src_vu,
1096                            uint8* dst_argb,
1097                            int width);
1098 void NV12ToRGB565Row_AVX2(const uint8* src_y,
1099                           const uint8* src_uv,
1100                           uint8* dst_argb,
1101                           int width);
1102 void NV21ToRGB565Row_AVX2(const uint8* src_y,
1103                           const uint8* src_vu,
1104                           uint8* dst_argb,
1105                           int width);
1106 void YUY2ToARGBRow_SSSE3(const uint8* src_yuy2,
1107                          uint8* dst_argb,
1108                          int width);
1109 void UYVYToARGBRow_SSSE3(const uint8* src_uyvy,
1110                          uint8* dst_argb,
1111                          int width);
1112 void YUY2ToARGBRow_AVX2(const uint8* src_yuy2,
1113                         uint8* dst_argb,
1114                         int width);
1115 void UYVYToARGBRow_AVX2(const uint8* src_uyvy,
1116                         uint8* dst_argb,
1117                         int width);
1118 void J422ToARGBRow_SSSE3(const uint8* src_y,
1119                          const uint8* src_u,
1120                          const uint8* src_v,
1121                          uint8* dst_argb,
1122                          int width);
1123 void J422ToARGBRow_AVX2(const uint8* src_y,
1124                         const uint8* src_u,
1125                         const uint8* src_v,
1126                         uint8* dst_argb,
1127                         int width);
1128 void I422ToBGRARow_SSSE3(const uint8* src_y,
1129                          const uint8* src_u,
1130                          const uint8* src_v,
1131                          uint8* dst_bgra,
1132                          int width);
1133 void I422ToABGRRow_SSSE3(const uint8* src_y,
1134                          const uint8* src_u,
1135                          const uint8* src_v,
1136                          uint8* dst_abgr,
1137                          int width);
1138 void I422ToRGBARow_SSSE3(const uint8* src_y,
1139                          const uint8* src_u,
1140                          const uint8* src_v,
1141                          uint8* dst_rgba,
1142                          int width);
1143 void I422ToARGB4444Row_SSSE3(const uint8* src_y,
1144                              const uint8* src_u,
1145                              const uint8* src_v,
1146                              uint8* dst_argb,
1147                              int width);
1148 void I422ToARGB4444Row_AVX2(const uint8* src_y,
1149                             const uint8* src_u,
1150                             const uint8* src_v,
1151                             uint8* dst_argb,
1152                             int width);
1153 void I422ToARGB1555Row_SSSE3(const uint8* src_y,
1154                              const uint8* src_u,
1155                              const uint8* src_v,
1156                              uint8* dst_argb,
1157                              int width);
1158 void I422ToARGB1555Row_AVX2(const uint8* src_y,
1159                             const uint8* src_u,
1160                             const uint8* src_v,
1161                             uint8* dst_argb,
1162                             int width);
1163 void I422ToRGB565Row_SSSE3(const uint8* src_y,
1164                            const uint8* src_u,
1165                            const uint8* src_v,
1166                            uint8* dst_argb,
1167                            int width);
1168 void I422ToRGB565Row_AVX2(const uint8* src_y,
1169                           const uint8* src_u,
1170                           const uint8* src_v,
1171                           uint8* dst_argb,
1172                           int width);
1173 void I422ToRGB24Row_SSSE3(const uint8* src_y,
1174                           const uint8* src_u,
1175                           const uint8* src_v,
1176                           uint8* dst_rgb24,
1177                           int width);
1178 void I422ToRGB24Row_AVX2(const uint8* src_y,
1179                          const uint8* src_u,
1180                          const uint8* src_v,
1181                          uint8* dst_rgb24,
1182                          int width);
1183 void I422ToRAWRow_SSSE3(const uint8* src_y,
1184                         const uint8* src_u,
1185                         const uint8* src_v,
1186                         uint8* dst_raw,
1187                         int width);
1188 void I422ToRAWRow_AVX2(const uint8* src_y,
1189                        const uint8* src_u,
1190                        const uint8* src_v,
1191                        uint8* dst_raw,
1192                        int width);
1193 void I422ToARGBRow_Any_AVX2(const uint8* src_y,
1194                             const uint8* src_u,
1195                             const uint8* src_v,
1196                             uint8* dst_argb,
1197                             int width);
1198 void I422ToBGRARow_Any_AVX2(const uint8* src_y,
1199                             const uint8* src_u,
1200                             const uint8* src_v,
1201                             uint8* dst_argb,
1202                             int width);
1203 void I422ToRGBARow_Any_AVX2(const uint8* src_y,
1204                             const uint8* src_u,
1205                             const uint8* src_v,
1206                             uint8* dst_argb,
1207                             int width);
1208 void I422ToABGRRow_Any_AVX2(const uint8* src_y,
1209                             const uint8* src_u,
1210                             const uint8* src_v,
1211                             uint8* dst_argb,
1212                             int width);
1213 void I444ToARGBRow_Any_SSSE3(const uint8* src_y,
1214                              const uint8* src_u,
1215                              const uint8* src_v,
1216                              uint8* dst_argb,
1217                              int width);
1218 void I444ToARGBRow_Any_AVX2(const uint8* src_y,
1219                             const uint8* src_u,
1220                             const uint8* src_v,
1221                             uint8* dst_argb,
1222                             int width);
1223 void I422ToARGBRow_Any_SSSE3(const uint8* src_y,
1224                              const uint8* src_u,
1225                              const uint8* src_v,
1226                              uint8* dst_argb,
1227                              int width);
1228 void I411ToARGBRow_Any_SSSE3(const uint8* src_y,
1229                              const uint8* src_u,
1230                              const uint8* src_v,
1231                              uint8* dst_argb,
1232                              int width);
1233 void I411ToARGBRow_Any_AVX2(const uint8* src_y,
1234                             const uint8* src_u,
1235                             const uint8* src_v,
1236                             uint8* dst_argb,
1237                             int width);
1238 void NV12ToARGBRow_Any_SSSE3(const uint8* src_y,
1239                              const uint8* src_uv,
1240                              uint8* dst_argb,
1241                              int width);
1242 void NV21ToARGBRow_Any_SSSE3(const uint8* src_y,
1243                              const uint8* src_vu,
1244                              uint8* dst_argb,
1245                              int width);
1246 void NV12ToARGBRow_Any_AVX2(const uint8* src_y,
1247                             const uint8* src_uv,
1248                             uint8* dst_argb,
1249                             int width);
1250 void NV21ToARGBRow_Any_AVX2(const uint8* src_y,
1251                             const uint8* src_vu,
1252                             uint8* dst_argb,
1253                             int width);
1254 void NV12ToRGB565Row_Any_SSSE3(const uint8* src_y,
1255                                const uint8* src_uv,
1256                                uint8* dst_argb,
1257                                int width);
1258 void NV21ToRGB565Row_Any_SSSE3(const uint8* src_y,
1259                                const uint8* src_vu,
1260                                uint8* dst_argb,
1261                                int width);
1262 void NV12ToRGB565Row_Any_AVX2(const uint8* src_y,
1263                               const uint8* src_uv,
1264                               uint8* dst_argb,
1265                               int width);
1266 void NV21ToRGB565Row_Any_AVX2(const uint8* src_y,
1267                               const uint8* src_vu,
1268                               uint8* dst_argb,
1269                               int width);
1270 void YUY2ToARGBRow_Any_SSSE3(const uint8* src_yuy2,
1271                              uint8* dst_argb,
1272                              int width);
1273 void UYVYToARGBRow_Any_SSSE3(const uint8* src_uyvy,
1274                              uint8* dst_argb,
1275                              int width);
1276 void YUY2ToARGBRow_Any_AVX2(const uint8* src_yuy2,
1277                             uint8* dst_argb,
1278                             int width);
1279 void UYVYToARGBRow_Any_AVX2(const uint8* src_uyvy,
1280                             uint8* dst_argb,
1281                             int width);
1282 void J422ToARGBRow_Any_SSSE3(const uint8* src_y,
1283                              const uint8* src_u,
1284                              const uint8* src_v,
1285                              uint8* dst_argb,
1286                              int width);
1287 void J422ToARGBRow_Any_AVX2(const uint8* src_y,
1288                             const uint8* src_u,
1289                             const uint8* src_v,
1290                             uint8* dst_argb,
1291                             int width);
1292 void I422ToBGRARow_Any_SSSE3(const uint8* src_y,
1293                              const uint8* src_u,
1294                              const uint8* src_v,
1295                              uint8* dst_bgra,
1296                              int width);
1297 void I422ToABGRRow_Any_SSSE3(const uint8* src_y,
1298                              const uint8* src_u,
1299                              const uint8* src_v,
1300                              uint8* dst_abgr,
1301                              int width);
1302 void I422ToRGBARow_Any_SSSE3(const uint8* src_y,
1303                              const uint8* src_u,
1304                              const uint8* src_v,
1305                              uint8* dst_rgba,
1306                              int width);
1307 void I422ToARGB4444Row_Any_SSSE3(const uint8* src_y,
1308                                  const uint8* src_u,
1309                                  const uint8* src_v,
1310                                  uint8* dst_rgba,
1311                                  int width);
1312 void I422ToARGB4444Row_Any_AVX2(const uint8* src_y,
1313                                 const uint8* src_u,
1314                                 const uint8* src_v,
1315                                 uint8* dst_rgba,
1316                                 int width);
1317 void I422ToARGB1555Row_Any_SSSE3(const uint8* src_y,
1318                                  const uint8* src_u,
1319                                  const uint8* src_v,
1320                                  uint8* dst_rgba,
1321                                  int width);
1322 void I422ToARGB1555Row_Any_AVX2(const uint8* src_y,
1323                                 const uint8* src_u,
1324                                 const uint8* src_v,
1325                                 uint8* dst_rgba,
1326                                 int width);
1327 void I422ToRGB565Row_Any_SSSE3(const uint8* src_y,
1328                                const uint8* src_u,
1329                                const uint8* src_v,
1330                                uint8* dst_rgba,
1331                                int width);
1332 void I422ToRGB565Row_Any_AVX2(const uint8* src_y,
1333                               const uint8* src_u,
1334                               const uint8* src_v,
1335                               uint8* dst_rgba,
1336                               int width);
1337 void I422ToRGB24Row_Any_SSSE3(const uint8* src_y,
1338                               const uint8* src_u,
1339                               const uint8* src_v,
1340                               uint8* dst_argb,
1341                               int width);
1342 void I422ToRGB24Row_Any_AVX2(const uint8* src_y,
1343                              const uint8* src_u,
1344                              const uint8* src_v,
1345                              uint8* dst_argb,
1346                              int width);
1347 void I422ToRAWRow_Any_SSSE3(const uint8* src_y,
1348                             const uint8* src_u,
1349                             const uint8* src_v,
1350                             uint8* dst_argb,
1351                             int width);
1352 void I422ToRAWRow_Any_AVX2(const uint8* src_y,
1353                            const uint8* src_u,
1354                            const uint8* src_v,
1355                            uint8* dst_argb,
1356                            int width);
1357 
1358 void I400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width);
1359 void I400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
1360 void I400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
1361 void I400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int width);
1362 void I400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int width);
1363 void I400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int width);
1364 void I400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int width);
1365 
1366 // ARGB preattenuated alpha blend.
1367 void ARGBBlendRow_SSSE3(const uint8* src_argb, const uint8* src_argb1,
1368                         uint8* dst_argb, int width);
1369 void ARGBBlendRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1370                        uint8* dst_argb, int width);
1371 void ARGBBlendRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1372                        uint8* dst_argb, int width);
1373 void ARGBBlendRow_C(const uint8* src_argb, const uint8* src_argb1,
1374                     uint8* dst_argb, int width);
1375 
1376 // ARGB multiply images. Same API as Blend, but these require
1377 // pointer and width alignment for SSE2.
1378 void ARGBMultiplyRow_C(const uint8* src_argb, const uint8* src_argb1,
1379                        uint8* dst_argb, int width);
1380 void ARGBMultiplyRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1381                           uint8* dst_argb, int width);
1382 void ARGBMultiplyRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1383                               uint8* dst_argb, int width);
1384 void ARGBMultiplyRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1385                           uint8* dst_argb, int width);
1386 void ARGBMultiplyRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1387                               uint8* dst_argb, int width);
1388 void ARGBMultiplyRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1389                           uint8* dst_argb, int width);
1390 void ARGBMultiplyRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1391                               uint8* dst_argb, int width);
1392 
1393 // ARGB add images.
1394 void ARGBAddRow_C(const uint8* src_argb, const uint8* src_argb1,
1395                   uint8* dst_argb, int width);
1396 void ARGBAddRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1397                      uint8* dst_argb, int width);
1398 void ARGBAddRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1399                          uint8* dst_argb, int width);
1400 void ARGBAddRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1401                      uint8* dst_argb, int width);
1402 void ARGBAddRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1403                          uint8* dst_argb, int width);
1404 void ARGBAddRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1405                      uint8* dst_argb, int width);
1406 void ARGBAddRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1407                          uint8* dst_argb, int width);
1408 
1409 // ARGB subtract images. Same API as Blend, but these require
1410 // pointer and width alignment for SSE2.
1411 void ARGBSubtractRow_C(const uint8* src_argb, const uint8* src_argb1,
1412                        uint8* dst_argb, int width);
1413 void ARGBSubtractRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1414                           uint8* dst_argb, int width);
1415 void ARGBSubtractRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1416                               uint8* dst_argb, int width);
1417 void ARGBSubtractRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1418                           uint8* dst_argb, int width);
1419 void ARGBSubtractRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1420                               uint8* dst_argb, int width);
1421 void ARGBSubtractRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1422                           uint8* dst_argb, int width);
1423 void ARGBSubtractRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1424                               uint8* dst_argb, int width);
1425 
1426 void ARGBToRGB24Row_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
1427 void ARGBToRAWRow_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
1428 void ARGBToRGB565Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1429 void ARGBToARGB1555Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1430 void ARGBToARGB4444Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1431 
1432 void ARGBToRGB565DitherRow_Any_SSE2(const uint8* src_argb, uint8* dst_rgb,
1433                                     const uint32 dither4, int pix);
1434 void ARGBToRGB565DitherRow_Any_AVX2(const uint8* src_argb, uint8* dst_rgb,
1435                                     const uint32 dither4, int pix);
1436 
1437 void ARGBToRGB565Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
1438 void ARGBToARGB1555Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
1439 void ARGBToARGB4444Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);
1440 
1441 void ARGBToRGB24Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1442 void ARGBToRAWRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1443 void ARGBToRGB565Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1444 void ARGBToARGB1555Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1445 void ARGBToARGB4444Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1446 void ARGBToRGB565DitherRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb,
1447                                     const uint32 dither4, int width);
1448 
1449 void I444ToARGBRow_Any_NEON(const uint8* src_y,
1450                             const uint8* src_u,
1451                             const uint8* src_v,
1452                             uint8* dst_argb,
1453                             int width);
1454 void I422ToARGBRow_Any_NEON(const uint8* src_y,
1455                             const uint8* src_u,
1456                             const uint8* src_v,
1457                             uint8* dst_argb,
1458                             int width);
1459 void I411ToARGBRow_Any_NEON(const uint8* src_y,
1460                             const uint8* src_u,
1461                             const uint8* src_v,
1462                             uint8* dst_argb,
1463                             int width);
1464 void I422ToBGRARow_Any_NEON(const uint8* src_y,
1465                             const uint8* src_u,
1466                             const uint8* src_v,
1467                             uint8* dst_argb,
1468                             int width);
1469 void I422ToABGRRow_Any_NEON(const uint8* src_y,
1470                             const uint8* src_u,
1471                             const uint8* src_v,
1472                             uint8* dst_argb,
1473                             int width);
1474 void I422ToRGBARow_Any_NEON(const uint8* src_y,
1475                             const uint8* src_u,
1476                             const uint8* src_v,
1477                             uint8* dst_argb,
1478                             int width);
1479 void I422ToRGB24Row_Any_NEON(const uint8* src_y,
1480                              const uint8* src_u,
1481                              const uint8* src_v,
1482                              uint8* dst_argb,
1483                              int width);
1484 void I422ToRAWRow_Any_NEON(const uint8* src_y,
1485                            const uint8* src_u,
1486                            const uint8* src_v,
1487                            uint8* dst_argb,
1488                            int width);
1489 void I422ToARGB4444Row_Any_NEON(const uint8* src_y,
1490                                 const uint8* src_u,
1491                                 const uint8* src_v,
1492                                 uint8* dst_argb,
1493                                 int width);
1494 void I422ToARGB1555Row_Any_NEON(const uint8* src_y,
1495                                 const uint8* src_u,
1496                                 const uint8* src_v,
1497                                 uint8* dst_argb,
1498                                 int width);
1499 void I422ToRGB565Row_Any_NEON(const uint8* src_y,
1500                               const uint8* src_u,
1501                               const uint8* src_v,
1502                               uint8* dst_argb,
1503                               int width);
1504 void NV12ToARGBRow_Any_NEON(const uint8* src_y,
1505                             const uint8* src_uv,
1506                             uint8* dst_argb,
1507                             int width);
1508 void NV21ToARGBRow_Any_NEON(const uint8* src_y,
1509                             const uint8* src_uv,
1510                             uint8* dst_argb,
1511                             int width);
1512 void NV12ToRGB565Row_Any_NEON(const uint8* src_y,
1513                               const uint8* src_uv,
1514                               uint8* dst_argb,
1515                               int width);
1516 void NV21ToRGB565Row_Any_NEON(const uint8* src_y,
1517                               const uint8* src_uv,
1518                               uint8* dst_argb,
1519                               int width);
1520 void YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2,
1521                             uint8* dst_argb,
1522                             int width);
1523 void UYVYToARGBRow_Any_NEON(const uint8* src_uyvy,
1524                             uint8* dst_argb,
1525                             int width);
1526 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,
1527                               const uint8* src_u,
1528                               const uint8* src_v,
1529                               uint8* dst_argb,
1530                               int width);
1531 void I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,
1532                               const uint8* src_u,
1533                               const uint8* src_v,
1534                               uint8* dst_argb,
1535                               int width);
1536 void I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,
1537                               const uint8* src_u,
1538                               const uint8* src_v,
1539                               uint8* dst_argb,
1540                               int width);
1541 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,
1542                               const uint8* src_u,
1543                               const uint8* src_v,
1544                               uint8* dst_argb,
1545                               int width);
1546 void I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,
1547                               const uint8* src_u,
1548                               const uint8* src_v,
1549                               uint8* dst_argb,
1550                               int width);
1551 void I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,
1552                               const uint8* src_u,
1553                               const uint8* src_v,
1554                               uint8* dst_argb,
1555                               int width);
1556 
1557 void YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);
1558 void YUY2ToUVRow_AVX2(const uint8* src_yuy2, int stride_yuy2,
1559                       uint8* dst_u, uint8* dst_v, int pix);
1560 void YUY2ToUV422Row_AVX2(const uint8* src_yuy2,
1561                          uint8* dst_u, uint8* dst_v, int pix);
1562 void YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);
1563 void YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2,
1564                       uint8* dst_u, uint8* dst_v, int pix);
1565 void YUY2ToUV422Row_SSE2(const uint8* src_yuy2,
1566                          uint8* dst_u, uint8* dst_v, int pix);
1567 void YUY2ToYRow_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);
1568 void YUY2ToUVRow_NEON(const uint8* src_yuy2, int stride_yuy2,
1569                       uint8* dst_u, uint8* dst_v, int pix);
1570 void YUY2ToUV422Row_NEON(const uint8* src_yuy2,
1571                          uint8* dst_u, uint8* dst_v, int pix);
1572 void YUY2ToYRow_C(const uint8* src_yuy2, uint8* dst_y, int pix);
1573 void YUY2ToUVRow_C(const uint8* src_yuy2, int stride_yuy2,
1574                    uint8* dst_u, uint8* dst_v, int pix);
1575 void YUY2ToUV422Row_C(const uint8* src_yuy2,
1576                       uint8* dst_u, uint8* dst_v, int pix);
1577 void YUY2ToYRow_Any_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);
1578 void YUY2ToUVRow_Any_AVX2(const uint8* src_yuy2, int stride_yuy2,
1579                           uint8* dst_u, uint8* dst_v, int pix);
1580 void YUY2ToUV422Row_Any_AVX2(const uint8* src_yuy2,
1581                              uint8* dst_u, uint8* dst_v, int pix);
1582 void YUY2ToYRow_Any_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);
1583 void YUY2ToUVRow_Any_SSE2(const uint8* src_yuy2, int stride_yuy2,
1584                           uint8* dst_u, uint8* dst_v, int pix);
1585 void YUY2ToUV422Row_Any_SSE2(const uint8* src_yuy2,
1586                              uint8* dst_u, uint8* dst_v, int pix);
1587 void YUY2ToYRow_Any_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);
1588 void YUY2ToUVRow_Any_NEON(const uint8* src_yuy2, int stride_yuy2,
1589                           uint8* dst_u, uint8* dst_v, int pix);
1590 void YUY2ToUV422Row_Any_NEON(const uint8* src_yuy2,
1591                              uint8* dst_u, uint8* dst_v, int pix);
1592 void UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1593 void UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,
1594                       uint8* dst_u, uint8* dst_v, int pix);
1595 void UYVYToUV422Row_AVX2(const uint8* src_uyvy,
1596                          uint8* dst_u, uint8* dst_v, int pix);
1597 void UYVYToYRow_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);
1598 void UYVYToUVRow_SSE2(const uint8* src_uyvy, int stride_uyvy,
1599                       uint8* dst_u, uint8* dst_v, int pix);
1600 void UYVYToUV422Row_SSE2(const uint8* src_uyvy,
1601                          uint8* dst_u, uint8* dst_v, int pix);
1602 void UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1603 void UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,
1604                       uint8* dst_u, uint8* dst_v, int pix);
1605 void UYVYToUV422Row_AVX2(const uint8* src_uyvy,
1606                          uint8* dst_u, uint8* dst_v, int pix);
1607 void UYVYToYRow_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);
1608 void UYVYToUVRow_NEON(const uint8* src_uyvy, int stride_uyvy,
1609                       uint8* dst_u, uint8* dst_v, int pix);
1610 void UYVYToUV422Row_NEON(const uint8* src_uyvy,
1611                          uint8* dst_u, uint8* dst_v, int pix);
1612 
1613 void UYVYToYRow_C(const uint8* src_uyvy, uint8* dst_y, int pix);
1614 void UYVYToUVRow_C(const uint8* src_uyvy, int stride_uyvy,
1615                    uint8* dst_u, uint8* dst_v, int pix);
1616 void UYVYToUV422Row_C(const uint8* src_uyvy,
1617                       uint8* dst_u, uint8* dst_v, int pix);
1618 void UYVYToYRow_Any_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1619 void UYVYToUVRow_Any_AVX2(const uint8* src_uyvy, int stride_uyvy,
1620                           uint8* dst_u, uint8* dst_v, int pix);
1621 void UYVYToUV422Row_Any_AVX2(const uint8* src_uyvy,
1622                              uint8* dst_u, uint8* dst_v, int pix);
1623 void UYVYToYRow_Any_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);
1624 void UYVYToUVRow_Any_SSE2(const uint8* src_uyvy, int stride_uyvy,
1625                           uint8* dst_u, uint8* dst_v, int pix);
1626 void UYVYToUV422Row_Any_SSE2(const uint8* src_uyvy,
1627                              uint8* dst_u, uint8* dst_v, int pix);
1628 void UYVYToYRow_Any_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);
1629 void UYVYToUVRow_Any_NEON(const uint8* src_uyvy, int stride_uyvy,
1630                           uint8* dst_u, uint8* dst_v, int pix);
1631 void UYVYToUV422Row_Any_NEON(const uint8* src_uyvy,
1632                              uint8* dst_u, uint8* dst_v, int pix);
1633 
1634 void I422ToYUY2Row_C(const uint8* src_y,
1635                      const uint8* src_u,
1636                      const uint8* src_v,
1637                      uint8* dst_yuy2, int width);
1638 void I422ToUYVYRow_C(const uint8* src_y,
1639                      const uint8* src_u,
1640                      const uint8* src_v,
1641                      uint8* dst_uyvy, int width);
1642 void I422ToYUY2Row_SSE2(const uint8* src_y,
1643                         const uint8* src_u,
1644                         const uint8* src_v,
1645                         uint8* dst_yuy2, int width);
1646 void I422ToUYVYRow_SSE2(const uint8* src_y,
1647                         const uint8* src_u,
1648                         const uint8* src_v,
1649                         uint8* dst_uyvy, int width);
1650 void I422ToYUY2Row_Any_SSE2(const uint8* src_y,
1651                             const uint8* src_u,
1652                             const uint8* src_v,
1653                             uint8* dst_yuy2, int width);
1654 void I422ToUYVYRow_Any_SSE2(const uint8* src_y,
1655                             const uint8* src_u,
1656                             const uint8* src_v,
1657                             uint8* dst_uyvy, int width);
1658 void I422ToYUY2Row_NEON(const uint8* src_y,
1659                         const uint8* src_u,
1660                         const uint8* src_v,
1661                         uint8* dst_yuy2, int width);
1662 void I422ToUYVYRow_NEON(const uint8* src_y,
1663                         const uint8* src_u,
1664                         const uint8* src_v,
1665                         uint8* dst_uyvy, int width);
1666 void I422ToYUY2Row_Any_NEON(const uint8* src_y,
1667                             const uint8* src_u,
1668                             const uint8* src_v,
1669                             uint8* dst_yuy2, int width);
1670 void I422ToUYVYRow_Any_NEON(const uint8* src_y,
1671                             const uint8* src_u,
1672                             const uint8* src_v,
1673                             uint8* dst_uyvy, int width);
1674 
1675 // Effects related row functions.
1676 void ARGBAttenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1677 void ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
1678 void ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
1679 void ARGBAttenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
1680 void ARGBAttenuateRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
1681 void ARGBAttenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
1682                                int width);
1683 void ARGBAttenuateRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,
1684                                 int width);
1685 void ARGBAttenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
1686                                int width);
1687 void ARGBAttenuateRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,
1688                                int width);
1689 
1690 // Inverse table for unattenuate, shared by C and SSE2.
1691 extern const uint32 fixed_invtbl8[256];
1692 void ARGBUnattenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1693 void ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
1694 void ARGBUnattenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
1695 void ARGBUnattenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
1696                                  int width);
1697 void ARGBUnattenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
1698                                  int width);
1699 
1700 void ARGBGrayRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1701 void ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
1702 void ARGBGrayRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
1703 
1704 void ARGBSepiaRow_C(uint8* dst_argb, int width);
1705 void ARGBSepiaRow_SSSE3(uint8* dst_argb, int width);
1706 void ARGBSepiaRow_NEON(uint8* dst_argb, int width);
1707 
1708 void ARGBColorMatrixRow_C(const uint8* src_argb, uint8* dst_argb,
1709                           const int8* matrix_argb, int width);
1710 void ARGBColorMatrixRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
1711                               const int8* matrix_argb, int width);
1712 void ARGBColorMatrixRow_NEON(const uint8* src_argb, uint8* dst_argb,
1713                              const int8* matrix_argb, int width);
1714 
1715 void ARGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
1716 void ARGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
1717 
1718 void RGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
1719 void RGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
1720 
1721 void ARGBQuantizeRow_C(uint8* dst_argb, int scale, int interval_size,
1722                        int interval_offset, int width);
1723 void ARGBQuantizeRow_SSE2(uint8* dst_argb, int scale, int interval_size,
1724                           int interval_offset, int width);
1725 void ARGBQuantizeRow_NEON(uint8* dst_argb, int scale, int interval_size,
1726                           int interval_offset, int width);
1727 
1728 void ARGBShadeRow_C(const uint8* src_argb, uint8* dst_argb, int width,
1729                     uint32 value);
1730 void ARGBShadeRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width,
1731                        uint32 value);
1732 void ARGBShadeRow_NEON(const uint8* src_argb, uint8* dst_argb, int width,
1733                        uint32 value);
1734 
1735 // Used for blur.
1736 void CumulativeSumToAverageRow_SSE2(const int32* topleft, const int32* botleft,
1737                                     int width, int area, uint8* dst, int count);
1738 void ComputeCumulativeSumRow_SSE2(const uint8* row, int32* cumsum,
1739                                   const int32* previous_cumsum, int width);
1740 
1741 void CumulativeSumToAverageRow_C(const int32* topleft, const int32* botleft,
1742                                  int width, int area, uint8* dst, int count);
1743 void ComputeCumulativeSumRow_C(const uint8* row, int32* cumsum,
1744                                const int32* previous_cumsum, int width);
1745 
1746 LIBYUV_API
1747 void ARGBAffineRow_C(const uint8* src_argb, int src_argb_stride,
1748                      uint8* dst_argb, const float* uv_dudv, int width);
1749 LIBYUV_API
1750 void ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,
1751                         uint8* dst_argb, const float* uv_dudv, int width);
1752 
1753 // Used for I420Scale, ARGBScale, and ARGBInterpolate.
1754 void InterpolateRow_C(uint8* dst_ptr, const uint8* src_ptr,
1755                       ptrdiff_t src_stride_ptr,
1756                       int width, int source_y_fraction);
1757 void InterpolateRow_SSE2(uint8* dst_ptr, const uint8* src_ptr,
1758                          ptrdiff_t src_stride_ptr, int width,
1759                          int source_y_fraction);
1760 void InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
1761                           ptrdiff_t src_stride_ptr, int width,
1762                           int source_y_fraction);
1763 void InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr,
1764                          ptrdiff_t src_stride_ptr, int width,
1765                          int source_y_fraction);
1766 void InterpolateRow_NEON(uint8* dst_ptr, const uint8* src_ptr,
1767                          ptrdiff_t src_stride_ptr, int width,
1768                          int source_y_fraction);
1769 void InterpolateRow_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,
1770                                ptrdiff_t src_stride_ptr, int width,
1771                                int source_y_fraction);
1772 void InterpolateRow_Any_NEON(uint8* dst_ptr, const uint8* src_ptr,
1773                              ptrdiff_t src_stride_ptr, int width,
1774                              int source_y_fraction);
1775 void InterpolateRow_Any_SSE2(uint8* dst_ptr, const uint8* src_ptr,
1776                              ptrdiff_t src_stride_ptr, int width,
1777                              int source_y_fraction);
1778 void InterpolateRow_Any_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
1779                               ptrdiff_t src_stride_ptr, int width,
1780                               int source_y_fraction);
1781 void InterpolateRow_Any_AVX2(uint8* dst_ptr, const uint8* src_ptr,
1782                              ptrdiff_t src_stride_ptr, int width,
1783                              int source_y_fraction);
1784 void InterpolateRow_Any_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,
1785                                    ptrdiff_t src_stride_ptr, int width,
1786                                    int source_y_fraction);
1787 
1788 void InterpolateRow_16_C(uint16* dst_ptr, const uint16* src_ptr,
1789                          ptrdiff_t src_stride_ptr,
1790                          int width, int source_y_fraction);
1791 
1792 // Sobel images.
1793 void SobelXRow_C(const uint8* src_y0, const uint8* src_y1, const uint8* src_y2,
1794                  uint8* dst_sobelx, int width);
1795 void SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1,
1796                     const uint8* src_y2, uint8* dst_sobelx, int width);
1797 void SobelXRow_NEON(const uint8* src_y0, const uint8* src_y1,
1798                     const uint8* src_y2, uint8* dst_sobelx, int width);
1799 void SobelYRow_C(const uint8* src_y0, const uint8* src_y1,
1800                  uint8* dst_sobely, int width);
1801 void SobelYRow_SSE2(const uint8* src_y0, const uint8* src_y1,
1802                     uint8* dst_sobely, int width);
1803 void SobelYRow_NEON(const uint8* src_y0, const uint8* src_y1,
1804                     uint8* dst_sobely, int width);
1805 void SobelRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1806                 uint8* dst_argb, int width);
1807 void SobelRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1808                    uint8* dst_argb, int width);
1809 void SobelRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1810                    uint8* dst_argb, int width);
1811 void SobelToPlaneRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1812                        uint8* dst_y, int width);
1813 void SobelToPlaneRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1814                           uint8* dst_y, int width);
1815 void SobelToPlaneRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1816                           uint8* dst_y, int width);
1817 void SobelXYRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1818                   uint8* dst_argb, int width);
1819 void SobelXYRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1820                      uint8* dst_argb, int width);
1821 void SobelXYRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1822                      uint8* dst_argb, int width);
1823 void SobelRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1824                        uint8* dst_argb, int width);
1825 void SobelRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1826                        uint8* dst_argb, int width);
1827 void SobelToPlaneRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1828                               uint8* dst_y, int width);
1829 void SobelToPlaneRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1830                               uint8* dst_y, int width);
1831 void SobelXYRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1832                          uint8* dst_argb, int width);
1833 void SobelXYRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1834                          uint8* dst_argb, int width);
1835 
1836 void ARGBPolynomialRow_C(const uint8* src_argb,
1837                          uint8* dst_argb, const float* poly,
1838                          int width);
1839 void ARGBPolynomialRow_SSE2(const uint8* src_argb,
1840                             uint8* dst_argb, const float* poly,
1841                             int width);
1842 void ARGBPolynomialRow_AVX2(const uint8* src_argb,
1843                             uint8* dst_argb, const float* poly,
1844                             int width);
1845 
1846 void ARGBLumaColorTableRow_C(const uint8* src_argb, uint8* dst_argb, int width,
1847                              const uint8* luma, uint32 lumacoeff);
1848 void ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
1849                                  int width,
1850                                  const uint8* luma, uint32 lumacoeff);
1851 
1852 #ifdef __cplusplus
1853 }  // extern "C"
1854 }  // namespace libyuv
1855 #endif
1856 
1857 #endif  // INCLUDE_LIBYUV_ROW_H_  NOLINT
1858