1 /*
2  *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS. All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef INCLUDE_LIBYUV_ROW_H_
12 #define INCLUDE_LIBYUV_ROW_H_
13 
14 #include <stdlib.h>  // For malloc.
15 
16 #include "libyuv/basic_types.h"
17 
18 #ifdef __cplusplus
19 namespace libyuv {
20 extern "C" {
21 #endif
22 
23 #if defined(__pnacl__) || defined(__CLR_VER) ||            \
24     (defined(__native_client__) && defined(__x86_64__)) || \
25     (defined(__i386__) && !defined(__SSE__) && !defined(__clang__))
26 #define LIBYUV_DISABLE_X86
27 #endif
28 #if defined(__native_client__)
29 #define LIBYUV_DISABLE_NEON
30 #endif
31 // MemorySanitizer does not support assembly code yet. http://crbug.com/344505
32 #if defined(__has_feature)
33 #if __has_feature(memory_sanitizer)
34 #define LIBYUV_DISABLE_X86
35 #endif
36 #endif
37 // clang >= 3.5.0 required for Arm64.
38 #if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON)
39 #if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5))
40 #define LIBYUV_DISABLE_NEON
41 #endif  // clang >= 3.5
42 #endif  // __clang__
43 
44 // GCC >= 4.7.0 required for AVX2.
45 #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
46 #if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
47 #define GCC_HAS_AVX2 1
48 #endif  // GNUC >= 4.7
49 #endif  // __GNUC__
50 
51 // clang >= 3.4.0 required for AVX2.
52 #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
53 #if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4))
54 #define CLANG_HAS_AVX2 1
55 #endif  // clang >= 3.4
56 #endif  // __clang__
57 
58 // clang >= 6.0.0 required for AVX512.
59 #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
60 // clang in xcode follows a different versioning scheme.
61 // TODO(fbarchard): fix xcode 9 ios b/789.
62 #if (__clang_major__ >= 7) && !defined(__APPLE__)
63 #define CLANG_HAS_AVX512 1
64 #endif  // clang >= 7
65 #endif  // __clang__
66 
67 // Visual C 2012 required for AVX2.
68 #if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \
69     _MSC_VER >= 1700
70 #define VISUALC_HAS_AVX2 1
71 #endif  // VisualStudio >= 2012
72 
73 // The following are available on all x86 platforms:
74 #if !defined(LIBYUV_DISABLE_X86) && \
75     (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
76 // Conversions:
77 #define HAS_ABGRTOUVROW_SSSE3
78 #define HAS_ABGRTOYROW_SSSE3
79 #define HAS_ARGB1555TOARGBROW_SSE2
80 #define HAS_ARGB4444TOARGBROW_SSE2
81 #define HAS_ARGBEXTRACTALPHAROW_SSE2
82 #define HAS_ARGBSETROW_X86
83 #define HAS_ARGBSHUFFLEROW_SSSE3
84 #define HAS_ARGBTOARGB1555ROW_SSE2
85 #define HAS_ARGBTOARGB4444ROW_SSE2
86 #define HAS_ARGBTORAWROW_SSSE3
87 #define HAS_ARGBTORGB24ROW_SSSE3
88 #define HAS_ARGBTORGB565DITHERROW_SSE2
89 #define HAS_ARGBTORGB565ROW_SSE2
90 #define HAS_ARGBTOUV444ROW_SSSE3
91 #define HAS_ARGBTOUVJROW_SSSE3
92 #define HAS_ARGBTOUVROW_SSSE3
93 #define HAS_ARGBTOYJROW_SSSE3
94 #define HAS_ARGBTOYROW_SSSE3
95 #define HAS_BGRATOUVROW_SSSE3
96 #define HAS_BGRATOYROW_SSSE3
97 #define HAS_COPYROW_ERMS
98 #define HAS_COPYROW_SSE2
99 #define HAS_H422TOARGBROW_SSSE3
100 #define HAS_HALFFLOATROW_SSE2
101 #define HAS_I422TOARGB1555ROW_SSSE3
102 #define HAS_I422TOARGB4444ROW_SSSE3
103 #define HAS_I422TOARGBROW_SSSE3
104 #define HAS_I422TORGB24ROW_SSSE3
105 #define HAS_I422TORGB565ROW_SSSE3
106 #define HAS_I422TORGBAROW_SSSE3
107 #define HAS_I422TOUYVYROW_SSE2
108 #define HAS_I422TOYUY2ROW_SSE2
109 #define HAS_I444TOARGBROW_SSSE3
110 #define HAS_J400TOARGBROW_SSE2
111 #define HAS_J422TOARGBROW_SSSE3
112 #define HAS_MERGEUVROW_SSE2
113 #define HAS_MIRRORROW_SSSE3
114 #define HAS_MIRRORSPLITUVROW_SSSE3
115 #define HAS_NV12TOARGBROW_SSSE3
116 #define HAS_NV12TORGB24ROW_SSSE3
117 #define HAS_NV12TORGB565ROW_SSSE3
118 #define HAS_NV21TOARGBROW_SSSE3
119 #define HAS_NV21TORGB24ROW_SSSE3
120 #define HAS_RAWTOARGBROW_SSSE3
121 #define HAS_RAWTORGB24ROW_SSSE3
122 #define HAS_RAWTOYROW_SSSE3
123 #define HAS_RGB24TOARGBROW_SSSE3
124 #define HAS_RGB24TOYROW_SSSE3
125 #define HAS_RGB24TOYJROW_SSSE3
126 #define HAS_RAWTOYJROW_SSSE3
127 #define HAS_RGB565TOARGBROW_SSE2
128 #define HAS_RGBATOUVROW_SSSE3
129 #define HAS_RGBATOYROW_SSSE3
130 #define HAS_SETROW_ERMS
131 #define HAS_SETROW_X86
132 #define HAS_SPLITUVROW_SSE2
133 #define HAS_UYVYTOARGBROW_SSSE3
134 #define HAS_UYVYTOUV422ROW_SSE2
135 #define HAS_UYVYTOUVROW_SSE2
136 #define HAS_UYVYTOYROW_SSE2
137 #define HAS_YUY2TOARGBROW_SSSE3
138 #define HAS_YUY2TOUV422ROW_SSE2
139 #define HAS_YUY2TOUVROW_SSE2
140 #define HAS_YUY2TOYROW_SSE2
141 
142 // Effects:
143 #define HAS_ARGBADDROW_SSE2
144 #define HAS_ARGBAFFINEROW_SSE2
145 #define HAS_ARGBATTENUATEROW_SSSE3
146 #define HAS_ARGBBLENDROW_SSSE3
147 #define HAS_ARGBCOLORMATRIXROW_SSSE3
148 #define HAS_ARGBCOLORTABLEROW_X86
149 #define HAS_ARGBCOPYALPHAROW_SSE2
150 #define HAS_ARGBCOPYYTOALPHAROW_SSE2
151 #define HAS_ARGBGRAYROW_SSSE3
152 #define HAS_ARGBLUMACOLORTABLEROW_SSSE3
153 #define HAS_ARGBMIRRORROW_SSE2
154 #define HAS_ARGBMULTIPLYROW_SSE2
155 #define HAS_ARGBPOLYNOMIALROW_SSE2
156 #define HAS_ARGBQUANTIZEROW_SSE2
157 #define HAS_ARGBSEPIAROW_SSSE3
158 #define HAS_ARGBSHADEROW_SSE2
159 #define HAS_ARGBSUBTRACTROW_SSE2
160 #define HAS_ARGBUNATTENUATEROW_SSE2
161 #define HAS_BLENDPLANEROW_SSSE3
162 #define HAS_COMPUTECUMULATIVESUMROW_SSE2
163 #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
164 #define HAS_INTERPOLATEROW_SSSE3
165 #define HAS_RGBCOLORTABLEROW_X86
166 #define HAS_SOBELROW_SSE2
167 #define HAS_SOBELTOPLANEROW_SSE2
168 #define HAS_SOBELXROW_SSE2
169 #define HAS_SOBELXYROW_SSE2
170 #define HAS_SOBELYROW_SSE2
171 
172 // The following functions fail on gcc/clang 32 bit with fpic and framepointer.
173 // caveat: clangcl uses row_win.cc which works.
174 #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
175     defined(_MSC_VER)
176 // TODO(fbarchard): fix build error on android_full_debug=1
177 // https://code.google.com/p/libyuv/issues/detail?id=517
178 #define HAS_I422ALPHATOARGBROW_SSSE3
179 #endif
180 #endif
181 
182 // The following are available on all x86 platforms, but
183 // require VS2012, clang 3.4 or gcc 4.7.
184 #if !defined(LIBYUV_DISABLE_X86) &&                          \
185     (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \
186      defined(GCC_HAS_AVX2))
187 #define HAS_ARGBCOPYALPHAROW_AVX2
188 #define HAS_ARGBCOPYYTOALPHAROW_AVX2
189 #define HAS_ARGBEXTRACTALPHAROW_AVX2
190 #define HAS_ARGBMIRRORROW_AVX2
191 #define HAS_ARGBPOLYNOMIALROW_AVX2
192 #define HAS_ARGBSHUFFLEROW_AVX2
193 #define HAS_ARGBTORGB565DITHERROW_AVX2
194 #define HAS_ARGBTOUVJROW_AVX2
195 #define HAS_ARGBTOUVROW_AVX2
196 #define HAS_ARGBTOYJROW_AVX2
197 #define HAS_ARGBTOYROW_AVX2
198 #define HAS_RGB24TOYJROW_AVX2
199 #define HAS_RAWTOYJROW_AVX2
200 #define HAS_COPYROW_AVX
201 #define HAS_H422TOARGBROW_AVX2
202 #define HAS_HALFFLOATROW_AVX2
203 //  #define HAS_HALFFLOATROW_F16C  // Enable to test halffloat cast
204 #define HAS_I422TOARGB1555ROW_AVX2
205 #define HAS_I422TOARGB4444ROW_AVX2
206 #define HAS_I422TOARGBROW_AVX2
207 #define HAS_I422TORGB24ROW_AVX2
208 #define HAS_I422TORGB565ROW_AVX2
209 #define HAS_I422TORGBAROW_AVX2
210 #define HAS_I444TOARGBROW_AVX2
211 #define HAS_INTERPOLATEROW_AVX2
212 #define HAS_J422TOARGBROW_AVX2
213 #define HAS_MERGEUVROW_AVX2
214 #define HAS_MIRRORROW_AVX2
215 #define HAS_NV12TOARGBROW_AVX2
216 #define HAS_NV12TORGB24ROW_AVX2
217 #define HAS_NV12TORGB565ROW_AVX2
218 #define HAS_NV21TOARGBROW_AVX2
219 #define HAS_NV21TORGB24ROW_AVX2
220 #define HAS_SPLITUVROW_AVX2
221 #define HAS_UYVYTOARGBROW_AVX2
222 #define HAS_UYVYTOUV422ROW_AVX2
223 #define HAS_UYVYTOUVROW_AVX2
224 #define HAS_UYVYTOYROW_AVX2
225 #define HAS_YUY2TOARGBROW_AVX2
226 #define HAS_YUY2TOUV422ROW_AVX2
227 #define HAS_YUY2TOUVROW_AVX2
228 #define HAS_YUY2TOYROW_AVX2
229 
230 // Effects:
231 #define HAS_ARGBADDROW_AVX2
232 #define HAS_ARGBATTENUATEROW_AVX2
233 #define HAS_ARGBMULTIPLYROW_AVX2
234 #define HAS_ARGBSUBTRACTROW_AVX2
235 #define HAS_ARGBUNATTENUATEROW_AVX2
236 #define HAS_BLENDPLANEROW_AVX2
237 
238 #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
239     defined(_MSC_VER)
240 // TODO(fbarchard): fix build error on android_full_debug=1
241 // https://code.google.com/p/libyuv/issues/detail?id=517
242 #define HAS_I422ALPHATOARGBROW_AVX2
243 #endif
244 #endif
245 
246 // The following are available for AVX2 Visual C and clangcl 32 bit:
247 // TODO(fbarchard): Port to gcc.
248 #if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \
249     (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2))
250 #define HAS_ARGB1555TOARGBROW_AVX2
251 #define HAS_ARGB4444TOARGBROW_AVX2
252 #define HAS_ARGBTOARGB1555ROW_AVX2
253 #define HAS_ARGBTOARGB4444ROW_AVX2
254 #define HAS_ARGBTORGB565ROW_AVX2
255 #define HAS_J400TOARGBROW_AVX2
256 #define HAS_RGB565TOARGBROW_AVX2
257 #endif
258 
259 // The following are also available on x64 Visual C.
260 #if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \
261     (!defined(__clang__) || defined(__SSSE3__))
262 #define HAS_I422ALPHATOARGBROW_SSSE3
263 #define HAS_I422TOARGBROW_SSSE3
264 #endif
265 
266 // The following are available for gcc/clang x86 platforms:
267 // TODO(fbarchard): Port to Visual C
268 #if !defined(LIBYUV_DISABLE_X86) && \
269     (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER)))
270 #define HAS_ABGRTOAR30ROW_SSSE3
271 #define HAS_ARGBTOAR30ROW_SSSE3
272 #define HAS_CONVERT16TO8ROW_SSSE3
273 #define HAS_CONVERT8TO16ROW_SSE2
274 #define HAS_HALFMERGEUVROW_SSSE3
275 #define HAS_I210TOAR30ROW_SSSE3
276 #define HAS_I210TOARGBROW_SSSE3
277 #define HAS_I400TOARGBROW_SSE2
278 #define HAS_I422TOAR30ROW_SSSE3
279 #define HAS_MERGERGBROW_SSSE3
280 #define HAS_MIRRORUVROW_AVX2
281 #define HAS_MIRRORUVROW_SSSE3
282 #define HAS_RAWTORGBAROW_SSSE3
283 #define HAS_RGB24MIRRORROW_SSSE3
284 #define HAS_RGBATOYJROW_SSSE3
285 #define HAS_SPLITRGBROW_SSSE3
286 #define HAS_SWAPUVROW_SSSE3
287 #endif
288 
289 // The following are available for AVX2 gcc/clang x86 platforms:
290 // TODO(fbarchard): Port to Visual C
291 #if !defined(LIBYUV_DISABLE_X86) &&                                       \
292     (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \
293     (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2))
294 #define HAS_ABGRTOAR30ROW_AVX2
295 #define HAS_ABGRTOUVROW_AVX2
296 #define HAS_ABGRTOYROW_AVX2
297 #define HAS_ARGBTOAR30ROW_AVX2
298 #define HAS_ARGBTORAWROW_AVX2
299 #define HAS_ARGBTORGB24ROW_AVX2
300 #define HAS_CONVERT16TO8ROW_AVX2
301 #define HAS_CONVERT8TO16ROW_AVX2
302 #define HAS_HALFMERGEUVROW_AVX2
303 #define HAS_I210TOAR30ROW_AVX2
304 #define HAS_I210TOARGBROW_AVX2
305 #define HAS_I400TOARGBROW_AVX2
306 #define HAS_I422TOAR30ROW_AVX2
307 #define HAS_I422TOUYVYROW_AVX2
308 #define HAS_I422TOYUY2ROW_AVX2
309 #define HAS_MERGEUVROW_16_AVX2
310 #define HAS_MULTIPLYROW_16_AVX2
311 #define HAS_RGBATOYJROW_AVX2
312 #define HAS_SWAPUVROW_AVX2
313 // TODO(fbarchard): Fix AVX2 version of YUV24
314 // #define HAS_NV21TOYUV24ROW_AVX2
315 #endif
316 
317 // The following are available for AVX512 clang x86 platforms:
318 // TODO(fbarchard): Port to GCC and Visual C
319 // TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789
320 #if !defined(LIBYUV_DISABLE_X86) &&                                       \
321     (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \
322     (defined(CLANG_HAS_AVX512))
323 #define HAS_ARGBTORGB24ROW_AVX512VBMI
324 #endif
325 
326 // The following are available on Neon platforms:
327 #if !defined(LIBYUV_DISABLE_NEON) && \
328     (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
329 #define HAS_ABGRTOUVROW_NEON
330 #define HAS_ABGRTOYROW_NEON
331 #define HAS_ARGB1555TOARGBROW_NEON
332 #define HAS_ARGB1555TOUVROW_NEON
333 #define HAS_ARGB1555TOYROW_NEON
334 #define HAS_ARGB4444TOARGBROW_NEON
335 #define HAS_ARGB4444TOUVROW_NEON
336 #define HAS_ARGB4444TOYROW_NEON
337 #define HAS_ARGBEXTRACTALPHAROW_NEON
338 #define HAS_ARGBSETROW_NEON
339 #define HAS_ARGBTOARGB1555ROW_NEON
340 #define HAS_ARGBTOARGB4444ROW_NEON
341 #define HAS_ARGBTORAWROW_NEON
342 #define HAS_ARGBTORGB24ROW_NEON
343 #define HAS_ARGBTORGB565DITHERROW_NEON
344 #define HAS_ARGBTORGB565ROW_NEON
345 #define HAS_ARGBTOUV444ROW_NEON
346 #define HAS_ARGBTOUVJROW_NEON
347 #define HAS_ARGBTOUVROW_NEON
348 #define HAS_ARGBTOYJROW_NEON
349 #define HAS_ARGBTOYROW_NEON
350 #define HAS_AYUVTOUVROW_NEON
351 #define HAS_AYUVTOVUROW_NEON
352 #define HAS_AYUVTOYROW_NEON
353 #define HAS_BGRATOUVROW_NEON
354 #define HAS_BGRATOYROW_NEON
355 #define HAS_BYTETOFLOATROW_NEON
356 #define HAS_COPYROW_NEON
357 #define HAS_HALFFLOATROW_NEON
358 #define HAS_HALFMERGEUVROW_NEON
359 #define HAS_I400TOARGBROW_NEON
360 #define HAS_I422ALPHATOARGBROW_NEON
361 #define HAS_I422TOARGB1555ROW_NEON
362 #define HAS_I422TOARGB4444ROW_NEON
363 #define HAS_I422TOARGBROW_NEON
364 #define HAS_I422TORGB24ROW_NEON
365 #define HAS_I422TORGB565ROW_NEON
366 #define HAS_I422TORGBAROW_NEON
367 #define HAS_I422TOUYVYROW_NEON
368 #define HAS_I422TOYUY2ROW_NEON
369 #define HAS_I444TOARGBROW_NEON
370 #define HAS_J400TOARGBROW_NEON
371 #define HAS_MERGEUVROW_NEON
372 #define HAS_MIRRORROW_NEON
373 #define HAS_MIRRORUVROW_NEON
374 #define HAS_MIRRORSPLITUVROW_NEON
375 #define HAS_NV12TOARGBROW_NEON
376 #define HAS_NV12TORGB24ROW_NEON
377 #define HAS_NV12TORGB565ROW_NEON
378 #define HAS_NV21TOARGBROW_NEON
379 #define HAS_NV21TORGB24ROW_NEON
380 #define HAS_NV21TOYUV24ROW_NEON
381 #define HAS_RAWTOARGBROW_NEON
382 #define HAS_RAWTORGB24ROW_NEON
383 #define HAS_RAWTORGBAROW_NEON
384 #define HAS_RAWTOUVROW_NEON
385 #define HAS_RAWTOYJROW_NEON
386 #define HAS_RAWTOYROW_NEON
387 #define HAS_RGB24TOARGBROW_NEON
388 #define HAS_RGB24TOUVROW_NEON
389 #define HAS_RGB24TOYJROW_NEON
390 #define HAS_RGB24TOYROW_NEON
391 #define HAS_RGB565TOARGBROW_NEON
392 #define HAS_RGB565TOUVROW_NEON
393 #define HAS_RGB565TOYROW_NEON
394 #define HAS_RGBATOUVROW_NEON
395 #define HAS_RGBATOYJROW_NEON
396 #define HAS_RGBATOYROW_NEON
397 #define HAS_SETROW_NEON
398 #define HAS_SPLITRGBROW_NEON
399 #define HAS_SPLITUVROW_NEON
400 #define HAS_SWAPUVROW_NEON
401 #define HAS_UYVYTOARGBROW_NEON
402 #define HAS_UYVYTOUV422ROW_NEON
403 #define HAS_UYVYTOUVROW_NEON
404 #define HAS_UYVYTOYROW_NEON
405 #define HAS_YUY2TOARGBROW_NEON
406 #define HAS_YUY2TOUV422ROW_NEON
407 #define HAS_YUY2TOUVROW_NEON
408 #define HAS_YUY2TOYROW_NEON
409 
410 // Effects:
411 #define HAS_ARGBADDROW_NEON
412 #define HAS_ARGBATTENUATEROW_NEON
413 #define HAS_ARGBBLENDROW_NEON
414 #define HAS_ARGBCOLORMATRIXROW_NEON
415 #define HAS_ARGBGRAYROW_NEON
416 #define HAS_ARGBMIRRORROW_NEON
417 #define HAS_RGB24MIRRORROW_NEON
418 #define HAS_ARGBMULTIPLYROW_NEON
419 #define HAS_ARGBQUANTIZEROW_NEON
420 #define HAS_ARGBSEPIAROW_NEON
421 #define HAS_ARGBSHADEROW_NEON
422 #define HAS_ARGBSHUFFLEROW_NEON
423 #define HAS_ARGBSUBTRACTROW_NEON
424 #define HAS_INTERPOLATEROW_NEON
425 #define HAS_SOBELROW_NEON
426 #define HAS_SOBELTOPLANEROW_NEON
427 #define HAS_SOBELXROW_NEON
428 #define HAS_SOBELXYROW_NEON
429 #define HAS_SOBELYROW_NEON
430 #endif
431 
432 // The following are available on AArch64 platforms:
433 #if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
434 #define HAS_SCALESUMSAMPLES_NEON
435 #define HAS_GAUSSROW_F32_NEON
436 #define HAS_GAUSSCOL_F32_NEON
437 
438 #endif
439 #if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa)
440 #define HAS_ABGRTOUVROW_MSA
441 #define HAS_ABGRTOYROW_MSA
442 #define HAS_ARGB1555TOARGBROW_MSA
443 #define HAS_ARGB1555TOUVROW_MSA
444 #define HAS_ARGB1555TOYROW_MSA
445 #define HAS_ARGB4444TOARGBROW_MSA
446 #define HAS_ARGBADDROW_MSA
447 #define HAS_ARGBATTENUATEROW_MSA
448 #define HAS_ARGBBLENDROW_MSA
449 #define HAS_ARGBCOLORMATRIXROW_MSA
450 #define HAS_ARGBEXTRACTALPHAROW_MSA
451 #define HAS_ARGBGRAYROW_MSA
452 #define HAS_ARGBMIRRORROW_MSA
453 #define HAS_ARGBMULTIPLYROW_MSA
454 #define HAS_ARGBQUANTIZEROW_MSA
455 #define HAS_ARGBSEPIAROW_MSA
456 #define HAS_ARGBSETROW_MSA
457 #define HAS_ARGBSHADEROW_MSA
458 #define HAS_ARGBSHUFFLEROW_MSA
459 #define HAS_ARGBSUBTRACTROW_MSA
460 #define HAS_ARGBTOARGB1555ROW_MSA
461 #define HAS_ARGBTOARGB4444ROW_MSA
462 #define HAS_ARGBTORAWROW_MSA
463 #define HAS_ARGBTORGB24ROW_MSA
464 #define HAS_ARGBTORGB565DITHERROW_MSA
465 #define HAS_ARGBTORGB565ROW_MSA
466 #define HAS_ARGBTOUV444ROW_MSA
467 #define HAS_ARGBTOUVJROW_MSA
468 #define HAS_ARGBTOUVROW_MSA
469 #define HAS_ARGBTOYJROW_MSA
470 #define HAS_ARGBTOYROW_MSA
471 #define HAS_BGRATOUVROW_MSA
472 #define HAS_BGRATOYROW_MSA
473 #define HAS_HALFFLOATROW_MSA
474 #define HAS_I400TOARGBROW_MSA
475 #define HAS_I422ALPHATOARGBROW_MSA
476 #define HAS_I422TOARGBROW_MSA
477 #define HAS_I422TORGB24ROW_MSA
478 #define HAS_I422TORGBAROW_MSA
479 #define HAS_I422TOUYVYROW_MSA
480 #define HAS_I422TOYUY2ROW_MSA
481 #define HAS_I444TOARGBROW_MSA
482 #define HAS_I422TOARGB1555ROW_MSA
483 #define HAS_I422TORGB565ROW_MSA
484 #define HAS_INTERPOLATEROW_MSA
485 #define HAS_J400TOARGBROW_MSA
486 #define HAS_MERGEUVROW_MSA
487 #define HAS_MIRRORROW_MSA
488 #define HAS_MIRRORUVROW_MSA
489 #define HAS_MIRRORSPLITUVROW_MSA
490 #define HAS_NV12TOARGBROW_MSA
491 #define HAS_NV12TORGB565ROW_MSA
492 #define HAS_NV21TOARGBROW_MSA
493 #define HAS_RAWTOARGBROW_MSA
494 #define HAS_RAWTORGB24ROW_MSA
495 #define HAS_RAWTOUVROW_MSA
496 #define HAS_RAWTOYROW_MSA
497 #define HAS_RGB24TOARGBROW_MSA
498 #define HAS_RGB24TOUVROW_MSA
499 #define HAS_RGB24TOYROW_MSA
500 #define HAS_RGB565TOARGBROW_MSA
501 #define HAS_RGB565TOUVROW_MSA
502 #define HAS_RGB565TOYROW_MSA
503 #define HAS_RGBATOUVROW_MSA
504 #define HAS_RGBATOYROW_MSA
505 #define HAS_SETROW_MSA
506 #define HAS_SOBELROW_MSA
507 #define HAS_SOBELTOPLANEROW_MSA
508 #define HAS_SOBELXROW_MSA
509 #define HAS_SOBELXYROW_MSA
510 #define HAS_SOBELYROW_MSA
511 #define HAS_SPLITUVROW_MSA
512 #define HAS_UYVYTOARGBROW_MSA
513 #define HAS_UYVYTOUVROW_MSA
514 #define HAS_UYVYTOYROW_MSA
515 #define HAS_YUY2TOARGBROW_MSA
516 #define HAS_YUY2TOUV422ROW_MSA
517 #define HAS_YUY2TOUVROW_MSA
518 #define HAS_YUY2TOYROW_MSA
519 #endif
520 
521 #if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A)
522 #define HAS_ABGRTOUVROW_MMI
523 #define HAS_ABGRTOYROW_MMI
524 #define HAS_ARGB1555TOARGBROW_MMI
525 #define HAS_ARGB1555TOUVROW_MMI
526 #define HAS_ARGB1555TOYROW_MMI
527 #define HAS_ARGB4444TOARGBROW_MMI
528 #define HAS_ARGB4444TOUVROW_MMI
529 #define HAS_ARGB4444TOYROW_MMI
530 #define HAS_ARGBADDROW_MMI
531 #define HAS_ARGBATTENUATEROW_MMI
532 #define HAS_ARGBBLENDROW_MMI
533 #define HAS_ARGBCOLORMATRIXROW_MMI
534 #define HAS_ARGBCOPYALPHAROW_MMI
535 #define HAS_ARGBCOPYYTOALPHAROW_MMI
536 #define HAS_ARGBEXTRACTALPHAROW_MMI
537 #define HAS_ARGBGRAYROW_MMI
538 #define HAS_ARGBMIRRORROW_MMI
539 #define HAS_ARGBMULTIPLYROW_MMI
540 #define HAS_ARGBSEPIAROW_MMI
541 #define HAS_ARGBSETROW_MMI
542 #define HAS_ARGBSHADEROW_MMI
543 #define HAS_ARGBSHUFFLEROW_MMI
544 #define HAS_ARGBSUBTRACTROW_MMI
545 #define HAS_ARGBTOARGB1555ROW_MMI
546 #define HAS_ARGBTOARGB4444ROW_MMI
547 #define HAS_ARGBTORAWROW_MMI
548 #define HAS_ARGBTORGB24ROW_MMI
549 #define HAS_ARGBTORGB565DITHERROW_MMI
550 #define HAS_ARGBTORGB565ROW_MMI
551 #define HAS_ARGBTOUV444ROW_MMI
552 #define HAS_ARGBTOUVJROW_MMI
553 #define HAS_ARGBTOUVROW_MMI
554 #define HAS_ARGBTOYJROW_MMI
555 #define HAS_ARGBTOYROW_MMI
556 #define HAS_BGRATOUVROW_MMI
557 #define HAS_BGRATOYROW_MMI
558 #define HAS_BLENDPLANEROW_MMI
559 #define HAS_COMPUTECUMULATIVESUMROW_MMI
560 #define HAS_CUMULATIVESUMTOAVERAGEROW_MMI
561 #define HAS_HALFFLOATROW_MMI
562 #define HAS_I400TOARGBROW_MMI
563 #define HAS_I422TOUYVYROW_MMI
564 #define HAS_I422TOYUY2ROW_MMI
565 #define HAS_I422TOARGBROW_MMI
566 #define HAS_I444TOARGBROW_MMI
567 #define HAS_INTERPOLATEROW_MMI
568 #define HAS_J400TOARGBROW_MMI
569 #define HAS_MERGERGBROW_MMI
570 #define HAS_MERGEUVROW_MMI
571 #define HAS_MIRRORROW_MMI
572 #define HAS_MIRRORSPLITUVROW_MMI
573 #define HAS_RAWTOARGBROW_MMI
574 #define HAS_RAWTORGB24ROW_MMI
575 #define HAS_RAWTOUVROW_MMI
576 #define HAS_RAWTOYROW_MMI
577 #define HAS_RGB24TOARGBROW_MMI
578 #define HAS_RGB24TOUVROW_MMI
579 #define HAS_RGB24TOYROW_MMI
580 #define HAS_RGB565TOARGBROW_MMI
581 #define HAS_RGB565TOUVROW_MMI
582 #define HAS_RGB565TOYROW_MMI
583 #define HAS_RGBATOUVROW_MMI
584 #define HAS_RGBATOYROW_MMI
585 #define HAS_SOBELROW_MMI
586 #define HAS_SOBELTOPLANEROW_MMI
587 #define HAS_SOBELXROW_MMI
588 #define HAS_SOBELXYROW_MMI
589 #define HAS_SOBELYROW_MMI
590 #define HAS_SPLITRGBROW_MMI
591 #define HAS_SPLITUVROW_MMI
592 #define HAS_UYVYTOUVROW_MMI
593 #define HAS_UYVYTOYROW_MMI
594 #define HAS_YUY2TOUV422ROW_MMI
595 #define HAS_YUY2TOUVROW_MMI
596 #define HAS_YUY2TOYROW_MMI
597 #define HAS_I210TOARGBROW_MMI
598 #define HAS_I422TOARGB4444ROW_MMI
599 #define HAS_I422TOARGB1555ROW_MMI
600 #define HAS_I422TORGB565ROW_MMI
601 #define HAS_NV21TORGB24ROW_MMI
602 #define HAS_NV12TORGB24ROW_MMI
603 #define HAS_I422ALPHATOARGBROW_MMI
604 #define HAS_I422TORGB24ROW_MMI
605 #define HAS_NV12TOARGBROW_MMI
606 #define HAS_NV21TOARGBROW_MMI
607 #define HAS_NV12TORGB565ROW_MMI
608 #define HAS_YUY2TOARGBROW_MMI
609 #define HAS_UYVYTOARGBROW_MMI
610 #define HAS_I422TORGBAROW_MMI
611 #endif
612 
613 #if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__)
614 #if defined(VISUALC_HAS_AVX2)
615 #define SIMD_ALIGNED(var) __declspec(align(32)) var
616 #else
617 #define SIMD_ALIGNED(var) __declspec(align(16)) var
618 #endif
619 typedef __declspec(align(16)) int16_t vec16[8];
620 typedef __declspec(align(16)) int32_t vec32[4];
621 typedef __declspec(align(16)) float vecf32[4];
622 typedef __declspec(align(16)) int8_t vec8[16];
623 typedef __declspec(align(16)) uint16_t uvec16[8];
624 typedef __declspec(align(16)) uint32_t uvec32[4];
625 typedef __declspec(align(16)) uint8_t uvec8[16];
626 typedef __declspec(align(32)) int16_t lvec16[16];
627 typedef __declspec(align(32)) int32_t lvec32[8];
628 typedef __declspec(align(32)) int8_t lvec8[32];
629 typedef __declspec(align(32)) uint16_t ulvec16[16];
630 typedef __declspec(align(32)) uint32_t ulvec32[8];
631 typedef __declspec(align(32)) uint8_t ulvec8[32];
632 #elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__))
633 // Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
634 #if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)
635 #define SIMD_ALIGNED(var) var __attribute__((aligned(32)))
636 #else
637 #define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
638 #endif
639 typedef int16_t __attribute__((vector_size(16))) vec16;
640 typedef int32_t __attribute__((vector_size(16))) vec32;
641 typedef float __attribute__((vector_size(16))) vecf32;
642 typedef int8_t __attribute__((vector_size(16))) vec8;
643 typedef uint16_t __attribute__((vector_size(16))) uvec16;
644 typedef uint32_t __attribute__((vector_size(16))) uvec32;
645 typedef uint8_t __attribute__((vector_size(16))) uvec8;
646 typedef int16_t __attribute__((vector_size(32))) lvec16;
647 typedef int32_t __attribute__((vector_size(32))) lvec32;
648 typedef int8_t __attribute__((vector_size(32))) lvec8;
649 typedef uint16_t __attribute__((vector_size(32))) ulvec16;
650 typedef uint32_t __attribute__((vector_size(32))) ulvec32;
651 typedef uint8_t __attribute__((vector_size(32))) ulvec8;
652 #else
653 #define SIMD_ALIGNED(var) var
654 typedef int16_t vec16[8];
655 typedef int32_t vec32[4];
656 typedef float vecf32[4];
657 typedef int8_t vec8[16];
658 typedef uint16_t uvec16[8];
659 typedef uint32_t uvec32[4];
660 typedef uint8_t uvec8[16];
661 typedef int16_t lvec16[16];
662 typedef int32_t lvec32[8];
663 typedef int8_t lvec8[32];
664 typedef uint16_t ulvec16[16];
665 typedef uint32_t ulvec32[8];
666 typedef uint8_t ulvec8[32];
667 #endif
668 
669 #if defined(__aarch64__)
670 // This struct is for Arm64 color conversion.
671 struct YuvConstants {
672   uvec16 kUVToRB;
673   uvec16 kUVToRB2;
674   uvec16 kUVToG;
675   uvec16 kUVToG2;
676   vec16 kUVBiasBGR;
677   vec32 kYToRgb;
678 };
679 #elif defined(__arm__)
680 // This struct is for ArmV7 color conversion.
681 struct YuvConstants {
682   uvec8 kUVToRB;
683   uvec8 kUVToG;
684   vec16 kUVBiasBGR;
685   vec32 kYToRgb;
686 };
687 #else
688 // This struct is for Intel color conversion.
689 struct YuvConstants {
690   int8_t kUVToB[32];
691   int8_t kUVToG[32];
692   int8_t kUVToR[32];
693   int16_t kUVBiasB[16];
694   int16_t kUVBiasG[16];
695   int16_t kUVBiasR[16];
696   int16_t kYToRgb[16];
697   int16_t kYBiasToRgb[16];
698 };
699 
700 // Offsets into YuvConstants structure
701 #define KUVTOB 0
702 #define KUVTOG 32
703 #define KUVTOR 64
704 #define KUVBIASB 96
705 #define KUVBIASG 128
706 #define KUVBIASR 160
707 #define KYTORGB 192
708 #define KYBIASTORGB 224
709 
710 #endif
711 
712 #define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1)))
713 
714 #define align_buffer_64(var, size)                                           \
715   uint8_t* var##_mem = (uint8_t*)(malloc((size) + 63));         /* NOLINT */ \
716   uint8_t* var = (uint8_t*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */
717 
718 #define free_aligned_buffer_64(var) \
719   free(var##_mem);                  \
720   var = 0
721 
722 #if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
723 #define OMITFP
724 #else
725 #define OMITFP __attribute__((optimize("omit-frame-pointer")))
726 #endif
727 
728 // NaCL macros for GCC x86 and x64.
729 #if defined(__native_client__)
730 #define LABELALIGN ".p2align 5\n"
731 #else
732 #define LABELALIGN
733 #endif
734 
735 // Intel Code Analizer markers.  Insert IACA_START IACA_END around code to be
736 // measured and then run with iaca -64 libyuv_unittest.
737 // IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within
738 // inline assembly blocks.
739 // example of iaca:
740 // ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest
741 
742 #if defined(__x86_64__) || defined(__i386__)
743 
744 #define IACA_ASM_START  \
745   ".byte 0x0F, 0x0B\n"  \
746   " movl $111, %%ebx\n" \
747   ".byte 0x64, 0x67, 0x90\n"
748 
749 #define IACA_ASM_END         \
750   " movl $222, %%ebx\n"      \
751   ".byte 0x64, 0x67, 0x90\n" \
752   ".byte 0x0F, 0x0B\n"
753 
754 #define IACA_SSC_MARK(MARK_ID)                        \
755   __asm__ __volatile__("\n\t  movl $" #MARK_ID        \
756                        ", %%ebx"                      \
757                        "\n\t  .byte 0x64, 0x67, 0x90" \
758                        :                              \
759                        :                              \
760                        : "memory");
761 
762 #define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B");
763 
764 #else /* Visual C */
765 #define IACA_UD_BYTES \
766   { __asm _emit 0x0F __asm _emit 0x0B }
767 
768 #define IACA_SSC_MARK(x) \
769   { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 }
770 
771 #define IACA_VC64_START __writegsbyte(111, 111);
772 #define IACA_VC64_END __writegsbyte(222, 222);
773 #endif
774 
775 #define IACA_START     \
776   {                    \
777     IACA_UD_BYTES      \
778     IACA_SSC_MARK(111) \
779   }
780 #define IACA_END       \
781   {                    \
782     IACA_SSC_MARK(222) \
783     IACA_UD_BYTES      \
784   }
785 
786 void I444ToARGBRow_NEON(const uint8_t* src_y,
787                         const uint8_t* src_u,
788                         const uint8_t* src_v,
789                         uint8_t* dst_argb,
790                         const struct YuvConstants* yuvconstants,
791                         int width);
792 void I422ToARGBRow_NEON(const uint8_t* src_y,
793                         const uint8_t* src_u,
794                         const uint8_t* src_v,
795                         uint8_t* dst_argb,
796                         const struct YuvConstants* yuvconstants,
797                         int width);
798 void I422AlphaToARGBRow_NEON(const uint8_t* src_y,
799                              const uint8_t* src_u,
800                              const uint8_t* src_v,
801                              const uint8_t* src_a,
802                              uint8_t* dst_argb,
803                              const struct YuvConstants* yuvconstants,
804                              int width);
805 void I422ToARGBRow_NEON(const uint8_t* src_y,
806                         const uint8_t* src_u,
807                         const uint8_t* src_v,
808                         uint8_t* dst_argb,
809                         const struct YuvConstants* yuvconstants,
810                         int width);
811 void I422ToRGBARow_NEON(const uint8_t* src_y,
812                         const uint8_t* src_u,
813                         const uint8_t* src_v,
814                         uint8_t* dst_rgba,
815                         const struct YuvConstants* yuvconstants,
816                         int width);
817 void I422ToRGB24Row_NEON(const uint8_t* src_y,
818                          const uint8_t* src_u,
819                          const uint8_t* src_v,
820                          uint8_t* dst_rgb24,
821                          const struct YuvConstants* yuvconstants,
822                          int width);
823 void I422ToRGB565Row_NEON(const uint8_t* src_y,
824                           const uint8_t* src_u,
825                           const uint8_t* src_v,
826                           uint8_t* dst_rgb565,
827                           const struct YuvConstants* yuvconstants,
828                           int width);
829 void I422ToARGB1555Row_NEON(const uint8_t* src_y,
830                             const uint8_t* src_u,
831                             const uint8_t* src_v,
832                             uint8_t* dst_argb1555,
833                             const struct YuvConstants* yuvconstants,
834                             int width);
835 void I422ToARGB4444Row_NEON(const uint8_t* src_y,
836                             const uint8_t* src_u,
837                             const uint8_t* src_v,
838                             uint8_t* dst_argb4444,
839                             const struct YuvConstants* yuvconstants,
840                             int width);
841 void NV12ToARGBRow_NEON(const uint8_t* src_y,
842                         const uint8_t* src_uv,
843                         uint8_t* dst_argb,
844                         const struct YuvConstants* yuvconstants,
845                         int width);
846 void NV12ToRGB565Row_NEON(const uint8_t* src_y,
847                           const uint8_t* src_uv,
848                           uint8_t* dst_rgb565,
849                           const struct YuvConstants* yuvconstants,
850                           int width);
851 void NV21ToARGBRow_NEON(const uint8_t* src_y,
852                         const uint8_t* src_vu,
853                         uint8_t* dst_argb,
854                         const struct YuvConstants* yuvconstants,
855                         int width);
856 void NV12ToRGB24Row_NEON(const uint8_t* src_y,
857                          const uint8_t* src_uv,
858                          uint8_t* dst_rgb24,
859                          const struct YuvConstants* yuvconstants,
860                          int width);
861 void NV21ToRGB24Row_NEON(const uint8_t* src_y,
862                          const uint8_t* src_vu,
863                          uint8_t* dst_rgb24,
864                          const struct YuvConstants* yuvconstants,
865                          int width);
866 void NV21ToYUV24Row_NEON(const uint8_t* src_y,
867                          const uint8_t* src_vu,
868                          uint8_t* dst_yuv24,
869                          int width);
870 void YUY2ToARGBRow_NEON(const uint8_t* src_yuy2,
871                         uint8_t* dst_argb,
872                         const struct YuvConstants* yuvconstants,
873                         int width);
874 void UYVYToARGBRow_NEON(const uint8_t* src_uyvy,
875                         uint8_t* dst_argb,
876                         const struct YuvConstants* yuvconstants,
877                         int width);
878 void I444ToARGBRow_MSA(const uint8_t* src_y,
879                        const uint8_t* src_u,
880                        const uint8_t* src_v,
881                        uint8_t* dst_argb,
882                        const struct YuvConstants* yuvconstants,
883                        int width);
884 void I444ToARGBRow_MMI(const uint8_t* src_y,
885                        const uint8_t* src_u,
886                        const uint8_t* src_v,
887                        uint8_t* dst_argb,
888                        const struct YuvConstants* yuvconstants,
889                        int width);
890 
891 void I422ToARGBRow_MSA(const uint8_t* src_y,
892                        const uint8_t* src_u,
893                        const uint8_t* src_v,
894                        uint8_t* dst_argb,
895                        const struct YuvConstants* yuvconstants,
896                        int width);
897 void I422ToRGBARow_MSA(const uint8_t* src_y,
898                        const uint8_t* src_u,
899                        const uint8_t* src_v,
900                        uint8_t* dst_argb,
901                        const struct YuvConstants* yuvconstants,
902                        int width);
903 void I422ToARGBRow_MMI(const uint8_t* src_y,
904                        const uint8_t* src_u,
905                        const uint8_t* src_v,
906                        uint8_t* dst_argb,
907                        const struct YuvConstants* yuvconstants,
908                        int width);
909 void I422AlphaToARGBRow_MSA(const uint8_t* src_y,
910                             const uint8_t* src_u,
911                             const uint8_t* src_v,
912                             const uint8_t* src_a,
913                             uint8_t* dst_argb,
914                             const struct YuvConstants* yuvconstants,
915                             int width);
916 void I422ToRGB24Row_MSA(const uint8_t* src_y,
917                         const uint8_t* src_u,
918                         const uint8_t* src_v,
919                         uint8_t* dst_argb,
920                         const struct YuvConstants* yuvconstants,
921                         int width);
922 void I422ToRGB565Row_MSA(const uint8_t* src_y,
923                          const uint8_t* src_u,
924                          const uint8_t* src_v,
925                          uint8_t* dst_rgb565,
926                          const struct YuvConstants* yuvconstants,
927                          int width);
928 void I422ToARGB4444Row_MSA(const uint8_t* src_y,
929                            const uint8_t* src_u,
930                            const uint8_t* src_v,
931                            uint8_t* dst_argb4444,
932                            const struct YuvConstants* yuvconstants,
933                            int width);
934 void I422ToARGB1555Row_MSA(const uint8_t* src_y,
935                            const uint8_t* src_u,
936                            const uint8_t* src_v,
937                            uint8_t* dst_argb1555,
938                            const struct YuvConstants* yuvconstants,
939                            int width);
940 void NV12ToARGBRow_MSA(const uint8_t* src_y,
941                        const uint8_t* src_uv,
942                        uint8_t* dst_argb,
943                        const struct YuvConstants* yuvconstants,
944                        int width);
945 void NV12ToRGB565Row_MSA(const uint8_t* src_y,
946                          const uint8_t* src_uv,
947                          uint8_t* dst_rgb565,
948                          const struct YuvConstants* yuvconstants,
949                          int width);
950 void NV21ToARGBRow_MSA(const uint8_t* src_y,
951                        const uint8_t* src_vu,
952                        uint8_t* dst_argb,
953                        const struct YuvConstants* yuvconstants,
954                        int width);
955 void YUY2ToARGBRow_MSA(const uint8_t* src_yuy2,
956                        uint8_t* dst_argb,
957                        const struct YuvConstants* yuvconstants,
958                        int width);
959 void UYVYToARGBRow_MSA(const uint8_t* src_uyvy,
960                        uint8_t* dst_argb,
961                        const struct YuvConstants* yuvconstants,
962                        int width);
963 
964 void ARGBToYRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
965 void ARGBToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
966 void ABGRToYRow_AVX2(const uint8_t* src_abgr, uint8_t* dst_y, int width);
967 void ABGRToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
968 void ARGBToYRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
969 void ARGBToYJRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
970 void ARGBToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
971 void ARGBToYJRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
972 void RGBAToYJRow_AVX2(const uint8_t* src_rgba, uint8_t* dst_y, int width);
973 void RGBAToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
974 void RGBAToYJRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
975 void BGRAToYRow_SSSE3(const uint8_t* src_bgra, uint8_t* dst_y, int width);
976 void ABGRToYRow_SSSE3(const uint8_t* src_abgr, uint8_t* dst_y, int width);
977 void RGBAToYRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
978 void RGB24ToYRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
979 void RGB24ToYJRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
980 void RAWToYRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width);
981 void RAWToYJRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width);
982 void RGB24ToYJRow_AVX2(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
983 void RAWToYJRow_AVX2(const uint8_t* src_raw, uint8_t* dst_y, int width);
984 void ARGBToYRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
985 void ARGBToYJRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
986 void RGBAToYJRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
987 void ARGBToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
988 void ARGBToYJRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
989 void ARGBToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width);
990 void ARGBToYJRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width);
991 void ARGBToUV444Row_NEON(const uint8_t* src_argb,
992                          uint8_t* dst_u,
993                          uint8_t* dst_v,
994                          int width);
995 void ARGBToUVRow_NEON(const uint8_t* src_argb,
996                       int src_stride_argb,
997                       uint8_t* dst_u,
998                       uint8_t* dst_v,
999                       int width);
1000 void ARGBToUV444Row_MSA(const uint8_t* src_argb,
1001                         uint8_t* dst_u,
1002                         uint8_t* dst_v,
1003                         int width);
1004 void ARGBToUVRow_MSA(const uint8_t* src_argb,
1005                      int src_stride_argb,
1006                      uint8_t* dst_u,
1007                      uint8_t* dst_v,
1008                      int width);
1009 void ARGBToUV444Row_MMI(const uint8_t* src_argb,
1010                         uint8_t* dst_u,
1011                         uint8_t* dst_v,
1012                         int width);
1013 void ARGBToUVRow_MMI(const uint8_t* src_argb,
1014                      int src_stride_argb,
1015                      uint8_t* dst_u,
1016                      uint8_t* dst_v,
1017                      int width);
1018 void ARGBToUVJRow_NEON(const uint8_t* src_argb,
1019                        int src_stride_argb,
1020                        uint8_t* dst_u,
1021                        uint8_t* dst_v,
1022                        int width);
1023 void BGRAToUVRow_NEON(const uint8_t* src_bgra,
1024                       int src_stride_bgra,
1025                       uint8_t* dst_u,
1026                       uint8_t* dst_v,
1027                       int width);
1028 void ABGRToUVRow_NEON(const uint8_t* src_abgr,
1029                       int src_stride_abgr,
1030                       uint8_t* dst_u,
1031                       uint8_t* dst_v,
1032                       int width);
1033 void RGBAToUVRow_NEON(const uint8_t* src_rgba,
1034                       int src_stride_rgba,
1035                       uint8_t* dst_u,
1036                       uint8_t* dst_v,
1037                       int width);
1038 void RGB24ToUVRow_NEON(const uint8_t* src_rgb24,
1039                        int src_stride_rgb24,
1040                        uint8_t* dst_u,
1041                        uint8_t* dst_v,
1042                        int width);
1043 void RAWToUVRow_NEON(const uint8_t* src_raw,
1044                      int src_stride_raw,
1045                      uint8_t* dst_u,
1046                      uint8_t* dst_v,
1047                      int width);
1048 void RGB565ToUVRow_NEON(const uint8_t* src_rgb565,
1049                         int src_stride_rgb565,
1050                         uint8_t* dst_u,
1051                         uint8_t* dst_v,
1052                         int width);
1053 void ARGB1555ToUVRow_NEON(const uint8_t* src_argb1555,
1054                           int src_stride_argb1555,
1055                           uint8_t* dst_u,
1056                           uint8_t* dst_v,
1057                           int width);
1058 void ARGB4444ToUVRow_NEON(const uint8_t* src_argb4444,
1059                           int src_stride_argb4444,
1060                           uint8_t* dst_u,
1061                           uint8_t* dst_v,
1062                           int width);
1063 void ARGBToUVJRow_MSA(const uint8_t* src_rgb,
1064                       int src_stride_rgb,
1065                       uint8_t* dst_u,
1066                       uint8_t* dst_v,
1067                       int width);
1068 void BGRAToUVRow_MSA(const uint8_t* src_rgb,
1069                      int src_stride_rgb,
1070                      uint8_t* dst_u,
1071                      uint8_t* dst_v,
1072                      int width);
1073 void ABGRToUVRow_MSA(const uint8_t* src_rgb,
1074                      int src_stride_rgb,
1075                      uint8_t* dst_u,
1076                      uint8_t* dst_v,
1077                      int width);
1078 void RGBAToUVRow_MSA(const uint8_t* src_rgb,
1079                      int src_stride_rgb,
1080                      uint8_t* dst_u,
1081                      uint8_t* dst_v,
1082                      int width);
1083 void RGB24ToUVRow_MSA(const uint8_t* src_rgb,
1084                       int src_stride_rgb,
1085                       uint8_t* dst_u,
1086                       uint8_t* dst_v,
1087                       int width);
1088 void RAWToUVRow_MSA(const uint8_t* src_rgb,
1089                     int src_stride_rgb,
1090                     uint8_t* dst_u,
1091                     uint8_t* dst_v,
1092                     int width);
1093 void RGB565ToUVRow_MSA(const uint8_t* src_rgb565,
1094                        int src_stride_rgb565,
1095                        uint8_t* dst_u,
1096                        uint8_t* dst_v,
1097                        int width);
1098 void ARGB1555ToUVRow_MSA(const uint8_t* src_argb1555,
1099                          int src_stride_argb1555,
1100                          uint8_t* dst_u,
1101                          uint8_t* dst_v,
1102                          int width);
1103 void ARGBToUVJRow_MMI(const uint8_t* src_rgb,
1104                       int src_stride_rgb,
1105                       uint8_t* dst_u,
1106                       uint8_t* dst_v,
1107                       int width);
1108 void BGRAToUVRow_MMI(const uint8_t* src_rgb,
1109                      int src_stride_rgb,
1110                      uint8_t* dst_u,
1111                      uint8_t* dst_v,
1112                      int width);
1113 void ABGRToUVRow_MMI(const uint8_t* src_rgb,
1114                      int src_stride_rgb,
1115                      uint8_t* dst_u,
1116                      uint8_t* dst_v,
1117                      int width);
1118 void RGBAToUVRow_MMI(const uint8_t* src_rgb,
1119                      int src_stride_rgb,
1120                      uint8_t* dst_u,
1121                      uint8_t* dst_v,
1122                      int width);
1123 void RGB24ToUVRow_MMI(const uint8_t* src_rgb,
1124                       int src_stride_rgb,
1125                       uint8_t* dst_u,
1126                       uint8_t* dst_v,
1127                       int width);
1128 void RAWToUVRow_MMI(const uint8_t* src_rgb,
1129                     int src_stride_rgb,
1130                     uint8_t* dst_u,
1131                     uint8_t* dst_v,
1132                     int width);
1133 void RGB565ToUVRow_MMI(const uint8_t* src_rgb565,
1134                        int src_stride_rgb565,
1135                        uint8_t* dst_u,
1136                        uint8_t* dst_v,
1137                        int width);
1138 void ARGB1555ToUVRow_MMI(const uint8_t* src_argb1555,
1139                          int src_stride_argb1555,
1140                          uint8_t* dst_u,
1141                          uint8_t* dst_v,
1142                          int width);
1143 void ARGB4444ToUVRow_MMI(const uint8_t* src_argb4444,
1144                          int src_stride_argb4444,
1145                          uint8_t* dst_u,
1146                          uint8_t* dst_v,
1147                          int width);
1148 void BGRAToYRow_NEON(const uint8_t* src_bgra, uint8_t* dst_y, int width);
1149 void ABGRToYRow_NEON(const uint8_t* src_abgr, uint8_t* dst_y, int width);
1150 void RGBAToYRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1151 void RGB24ToYRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
1152 void RGB24ToYJRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_yj, int width);
1153 void RAWToYRow_NEON(const uint8_t* src_raw, uint8_t* dst_y, int width);
1154 void RAWToYJRow_NEON(const uint8_t* src_raw, uint8_t* dst_yj, int width);
1155 void RGB565ToYRow_NEON(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1156 void ARGB1555ToYRow_NEON(const uint8_t* src_argb1555,
1157                          uint8_t* dst_y,
1158                          int width);
1159 void ARGB4444ToYRow_NEON(const uint8_t* src_argb4444,
1160                          uint8_t* dst_y,
1161                          int width);
1162 void BGRAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1163 void ABGRToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1164 void RGBAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1165 void RGB24ToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1166 void RAWToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1167 void RGB565ToYRow_MSA(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1168 void ARGB1555ToYRow_MSA(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1169 void BGRAToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
1170 void ABGRToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
1171 void RGBAToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
1172 void RGB24ToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
1173 void RAWToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
1174 void RGB565ToYRow_MMI(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1175 void ARGB1555ToYRow_MMI(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1176 void ARGB4444ToYRow_MMI(const uint8_t* src_argb4444, uint8_t* dst_y, int width);
1177 
1178 void ARGBToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1179 void ARGBToYJRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1180 void RGBAToYJRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1181 void BGRAToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1182 void ABGRToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1183 void RGBAToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1184 void RGB24ToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1185 void RGB24ToYJRow_C(const uint8_t* src_argb, uint8_t* dst_yj, int width);
1186 void RAWToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
1187 void RAWToYJRow_C(const uint8_t* src_argb, uint8_t* dst_yj, int width);
1188 void RGB565ToYRow_C(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1189 void ARGB1555ToYRow_C(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1190 void ARGB4444ToYRow_C(const uint8_t* src_argb4444, uint8_t* dst_y, int width);
1191 void ARGBToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1192 void ARGBToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1193 void RGBAToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1194 void BGRAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1195 void ABGRToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1196 void RGBAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1197 void RGB24ToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1198 void RGB24ToYJRow_Any_SSSE3(const uint8_t* src_ptr,
1199                             uint8_t* dst_ptr,
1200                             int width);
1201 void RAWToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1202 void RAWToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1203 void RGB24ToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1204 void RAWToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1205 void ARGBToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1206 void ARGBToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1207 void RGBAToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1208 void BGRAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1209 void ABGRToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1210 void RGBAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1211 void RGB24ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1212 void RGB24ToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1213 void RAWToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1214 void RAWToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1215 void RGB565ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1216 void ARGB1555ToYRow_Any_NEON(const uint8_t* src_ptr,
1217                              uint8_t* dst_ptr,
1218                              int width);
1219 void ARGB4444ToYRow_Any_NEON(const uint8_t* src_ptr,
1220                              uint8_t* dst_ptr,
1221                              int width);
1222 void BGRAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1223 void ABGRToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1224 void RGBAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1225 void ARGBToYJRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1226 void ARGBToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1227 void RGB24ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1228 void RAWToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1229 void RGB565ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1230 void ARGB1555ToYRow_Any_MSA(const uint8_t* src_ptr,
1231                             uint8_t* dst_ptr,
1232                             int width);
1233 void BGRAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1234 void ABGRToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1235 void RGBAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1236 void ARGBToYJRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1237 void ARGBToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1238 void RGB24ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1239 void RAWToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1240 void RGB565ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1241 void ARGB1555ToYRow_Any_MMI(const uint8_t* src_ptr,
1242                             uint8_t* dst_ptr,
1243                             int width);
1244 void ARGB4444ToYRow_Any_MMI(const uint8_t* src_ptr,
1245                             uint8_t* dst_ptr,
1246                             int width);
1247 
1248 void ARGBToUVRow_AVX2(const uint8_t* src_argb,
1249                       int src_stride_argb,
1250                       uint8_t* dst_u,
1251                       uint8_t* dst_v,
1252                       int width);
1253 void ABGRToUVRow_AVX2(const uint8_t* src_abgr,
1254                       int src_stride_abgr,
1255                       uint8_t* dst_u,
1256                       uint8_t* dst_v,
1257                       int width);
1258 void ARGBToUVJRow_AVX2(const uint8_t* src_argb,
1259                        int src_stride_argb,
1260                        uint8_t* dst_u,
1261                        uint8_t* dst_v,
1262                        int width);
1263 void ARGBToUVRow_SSSE3(const uint8_t* src_argb,
1264                        int src_stride_argb,
1265                        uint8_t* dst_u,
1266                        uint8_t* dst_v,
1267                        int width);
1268 void ARGBToUVJRow_SSSE3(const uint8_t* src_argb,
1269                         int src_stride_argb,
1270                         uint8_t* dst_u,
1271                         uint8_t* dst_v,
1272                         int width);
1273 void BGRAToUVRow_SSSE3(const uint8_t* src_bgra,
1274                        int src_stride_bgra,
1275                        uint8_t* dst_u,
1276                        uint8_t* dst_v,
1277                        int width);
1278 void ABGRToUVRow_SSSE3(const uint8_t* src_abgr,
1279                        int src_stride_abgr,
1280                        uint8_t* dst_u,
1281                        uint8_t* dst_v,
1282                        int width);
1283 void RGBAToUVRow_SSSE3(const uint8_t* src_rgba,
1284                        int src_stride_rgba,
1285                        uint8_t* dst_u,
1286                        uint8_t* dst_v,
1287                        int width);
1288 void ARGBToUVRow_Any_AVX2(const uint8_t* src_ptr,
1289                           int src_stride_ptr,
1290                           uint8_t* dst_u,
1291                           uint8_t* dst_v,
1292                           int width);
1293 void ABGRToUVRow_Any_AVX2(const uint8_t* src_ptr,
1294                           int src_stride_ptr,
1295                           uint8_t* dst_u,
1296                           uint8_t* dst_v,
1297                           int width);
1298 void ARGBToUVJRow_Any_AVX2(const uint8_t* src_ptr,
1299                            int src_stride_ptr,
1300                            uint8_t* dst_u,
1301                            uint8_t* dst_v,
1302                            int width);
1303 void ARGBToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1304                            int src_stride_ptr,
1305                            uint8_t* dst_u,
1306                            uint8_t* dst_v,
1307                            int width);
1308 void ARGBToUVJRow_Any_SSSE3(const uint8_t* src_ptr,
1309                             int src_stride_ptr,
1310                             uint8_t* dst_u,
1311                             uint8_t* dst_v,
1312                             int width);
1313 void BGRAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1314                            int src_stride_ptr,
1315                            uint8_t* dst_u,
1316                            uint8_t* dst_v,
1317                            int width);
1318 void ABGRToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1319                            int src_stride_ptr,
1320                            uint8_t* dst_u,
1321                            uint8_t* dst_v,
1322                            int width);
1323 void RGBAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1324                            int src_stride_ptr,
1325                            uint8_t* dst_u,
1326                            uint8_t* dst_v,
1327                            int width);
1328 void ARGBToUV444Row_Any_NEON(const uint8_t* src_ptr,
1329                              uint8_t* dst_u,
1330                              uint8_t* dst_v,
1331                              int width);
1332 void ARGBToUVRow_Any_NEON(const uint8_t* src_ptr,
1333                           int src_stride_ptr,
1334                           uint8_t* dst_u,
1335                           uint8_t* dst_v,
1336                           int width);
1337 void ARGBToUV444Row_Any_MSA(const uint8_t* src_ptr,
1338                             uint8_t* dst_u,
1339                             uint8_t* dst_v,
1340                             int width);
1341 void ARGBToUVRow_Any_MSA(const uint8_t* src_ptr,
1342                          int src_stride_ptr,
1343                          uint8_t* dst_u,
1344                          uint8_t* dst_v,
1345                          int width);
1346 void ARGBToUV444Row_Any_MMI(const uint8_t* src_ptr,
1347                             uint8_t* dst_u,
1348                             uint8_t* dst_v,
1349                             int width);
1350 void ARGBToUVRow_Any_MMI(const uint8_t* src_ptr,
1351                          int src_stride_ptr,
1352                          uint8_t* dst_u,
1353                          uint8_t* dst_v,
1354                          int width);
1355 void ARGBToUVJRow_Any_NEON(const uint8_t* src_ptr,
1356                            int src_stride_ptr,
1357                            uint8_t* dst_u,
1358                            uint8_t* dst_v,
1359                            int width);
1360 void BGRAToUVRow_Any_NEON(const uint8_t* src_ptr,
1361                           int src_stride_ptr,
1362                           uint8_t* dst_u,
1363                           uint8_t* dst_v,
1364                           int width);
1365 void ABGRToUVRow_Any_NEON(const uint8_t* src_ptr,
1366                           int src_stride_ptr,
1367                           uint8_t* dst_u,
1368                           uint8_t* dst_v,
1369                           int width);
1370 void RGBAToUVRow_Any_NEON(const uint8_t* src_ptr,
1371                           int src_stride_ptr,
1372                           uint8_t* dst_u,
1373                           uint8_t* dst_v,
1374                           int width);
1375 void RGB24ToUVRow_Any_NEON(const uint8_t* src_ptr,
1376                            int src_stride_ptr,
1377                            uint8_t* dst_u,
1378                            uint8_t* dst_v,
1379                            int width);
1380 void RAWToUVRow_Any_NEON(const uint8_t* src_ptr,
1381                          int src_stride_ptr,
1382                          uint8_t* dst_u,
1383                          uint8_t* dst_v,
1384                          int width);
1385 void RGB565ToUVRow_Any_NEON(const uint8_t* src_ptr,
1386                             int src_stride_ptr,
1387                             uint8_t* dst_u,
1388                             uint8_t* dst_v,
1389                             int width);
1390 void ARGB1555ToUVRow_Any_NEON(const uint8_t* src_ptr,
1391                               int src_stride_ptr,
1392                               uint8_t* dst_u,
1393                               uint8_t* dst_v,
1394                               int width);
1395 void ARGB4444ToUVRow_Any_NEON(const uint8_t* src_ptr,
1396                               int src_stride_ptr,
1397                               uint8_t* dst_u,
1398                               uint8_t* dst_v,
1399                               int width);
1400 void ARGBToUVJRow_Any_MSA(const uint8_t* src_ptr,
1401                           int src_stride_ptr,
1402                           uint8_t* dst_u,
1403                           uint8_t* dst_v,
1404                           int width);
1405 void BGRAToUVRow_Any_MSA(const uint8_t* src_ptr,
1406                          int src_stride_ptr,
1407                          uint8_t* dst_u,
1408                          uint8_t* dst_v,
1409                          int width);
1410 void ABGRToUVRow_Any_MSA(const uint8_t* src_ptr,
1411                          int src_stride_ptr,
1412                          uint8_t* dst_u,
1413                          uint8_t* dst_v,
1414                          int width);
1415 void RGBAToUVRow_Any_MSA(const uint8_t* src_ptr,
1416                          int src_stride_ptr,
1417                          uint8_t* dst_u,
1418                          uint8_t* dst_v,
1419                          int width);
1420 void RGB24ToUVRow_Any_MSA(const uint8_t* src_ptr,
1421                           int src_stride_ptr,
1422                           uint8_t* dst_u,
1423                           uint8_t* dst_v,
1424                           int width);
1425 void RAWToUVRow_Any_MSA(const uint8_t* src_ptr,
1426                         int src_stride_ptr,
1427                         uint8_t* dst_u,
1428                         uint8_t* dst_v,
1429                         int width);
1430 void RGB565ToUVRow_Any_MSA(const uint8_t* src_ptr,
1431                            int src_stride_ptr,
1432                            uint8_t* dst_u,
1433                            uint8_t* dst_v,
1434                            int width);
1435 void ARGB1555ToUVRow_Any_MSA(const uint8_t* src_ptr,
1436                              int src_stride_ptr,
1437                              uint8_t* dst_u,
1438                              uint8_t* dst_v,
1439                              int width);
1440 void ARGBToUVJRow_Any_MMI(const uint8_t* src_ptr,
1441                           int src_stride_ptr,
1442                           uint8_t* dst_u,
1443                           uint8_t* dst_v,
1444                           int width);
1445 void BGRAToUVRow_Any_MMI(const uint8_t* src_ptr,
1446                          int src_stride_ptr,
1447                          uint8_t* dst_u,
1448                          uint8_t* dst_v,
1449                          int width);
1450 void ABGRToUVRow_Any_MMI(const uint8_t* src_ptr,
1451                          int src_stride_ptr,
1452                          uint8_t* dst_u,
1453                          uint8_t* dst_v,
1454                          int width);
1455 void RGBAToUVRow_Any_MMI(const uint8_t* src_ptr,
1456                          int src_stride_ptr,
1457                          uint8_t* dst_u,
1458                          uint8_t* dst_v,
1459                          int width);
1460 void RGB24ToUVRow_Any_MMI(const uint8_t* src_ptr,
1461                           int src_stride_ptr,
1462                           uint8_t* dst_u,
1463                           uint8_t* dst_v,
1464                           int width);
1465 void RAWToUVRow_Any_MMI(const uint8_t* src_ptr,
1466                         int src_stride_ptr,
1467                         uint8_t* dst_u,
1468                         uint8_t* dst_v,
1469                         int width);
1470 void RGB565ToUVRow_Any_MMI(const uint8_t* src_ptr,
1471                            int src_stride_ptr,
1472                            uint8_t* dst_u,
1473                            uint8_t* dst_v,
1474                            int width);
1475 void ARGB1555ToUVRow_Any_MMI(const uint8_t* src_ptr,
1476                              int src_stride_ptr,
1477                              uint8_t* dst_u,
1478                              uint8_t* dst_v,
1479                              int width);
1480 void ARGB4444ToUVRow_Any_MMI(const uint8_t* src_ptr,
1481                              int src_stride_ptr,
1482                              uint8_t* dst_u,
1483                              uint8_t* dst_v,
1484                              int width);
1485 void ARGBToUVRow_C(const uint8_t* src_rgb,
1486                    int src_stride_rgb,
1487                    uint8_t* dst_u,
1488                    uint8_t* dst_v,
1489                    int width);
1490 void ARGBToUVJRow_C(const uint8_t* src_rgb,
1491                     int src_stride_rgb,
1492                     uint8_t* dst_u,
1493                     uint8_t* dst_v,
1494                     int width);
1495 void ARGBToUVRow_C(const uint8_t* src_rgb,
1496                    int src_stride_rgb,
1497                    uint8_t* dst_u,
1498                    uint8_t* dst_v,
1499                    int width);
1500 void ARGBToUVJRow_C(const uint8_t* src_rgb,
1501                     int src_stride_rgb,
1502                     uint8_t* dst_u,
1503                     uint8_t* dst_v,
1504                     int width);
1505 void BGRAToUVRow_C(const uint8_t* src_rgb,
1506                    int src_stride_rgb,
1507                    uint8_t* dst_u,
1508                    uint8_t* dst_v,
1509                    int width);
1510 void ABGRToUVRow_C(const uint8_t* src_rgb,
1511                    int src_stride_rgb,
1512                    uint8_t* dst_u,
1513                    uint8_t* dst_v,
1514                    int width);
1515 void RGBAToUVRow_C(const uint8_t* src_rgb,
1516                    int src_stride_rgb,
1517                    uint8_t* dst_u,
1518                    uint8_t* dst_v,
1519                    int width);
1520 void RGB24ToUVRow_C(const uint8_t* src_rgb,
1521                     int src_stride_rgb,
1522                     uint8_t* dst_u,
1523                     uint8_t* dst_v,
1524                     int width);
1525 void RAWToUVRow_C(const uint8_t* src_rgb,
1526                   int src_stride_rgb,
1527                   uint8_t* dst_u,
1528                   uint8_t* dst_v,
1529                   int width);
1530 void RGB565ToUVRow_C(const uint8_t* src_rgb565,
1531                      int src_stride_rgb565,
1532                      uint8_t* dst_u,
1533                      uint8_t* dst_v,
1534                      int width);
1535 void ARGB1555ToUVRow_C(const uint8_t* src_argb1555,
1536                        int src_stride_argb1555,
1537                        uint8_t* dst_u,
1538                        uint8_t* dst_v,
1539                        int width);
1540 void ARGB4444ToUVRow_C(const uint8_t* src_argb4444,
1541                        int src_stride_argb4444,
1542                        uint8_t* dst_u,
1543                        uint8_t* dst_v,
1544                        int width);
1545 
1546 void ARGBToUV444Row_SSSE3(const uint8_t* src_argb,
1547                           uint8_t* dst_u,
1548                           uint8_t* dst_v,
1549                           int width);
1550 void ARGBToUV444Row_Any_SSSE3(const uint8_t* src_ptr,
1551                               uint8_t* dst_u,
1552                               uint8_t* dst_v,
1553                               int width);
1554 
1555 void ARGBToUV444Row_C(const uint8_t* src_argb,
1556                       uint8_t* dst_u,
1557                       uint8_t* dst_v,
1558                       int width);
1559 
1560 void MirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1561 void MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
1562 void MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
1563 void MirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
1564 void MirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width);
1565 void MirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
1566 void MirrorRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1567 void MirrorRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1568 void MirrorRow_Any_SSE2(const uint8_t* src, uint8_t* dst, int width);
1569 void MirrorRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1570 void MirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1571 void MirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1572 void MirrorUVRow_AVX2(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1573 void MirrorUVRow_SSSE3(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1574 void MirrorUVRow_NEON(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1575 void MirrorUVRow_MSA(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1576 void MirrorUVRow_C(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1577 void MirrorUVRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1578 void MirrorUVRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1579 void MirrorUVRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1580 void MirrorUVRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1581 
1582 void MirrorSplitUVRow_SSSE3(const uint8_t* src,
1583                             uint8_t* dst_u,
1584                             uint8_t* dst_v,
1585                             int width);
1586 void MirrorSplitUVRow_NEON(const uint8_t* src_uv,
1587                            uint8_t* dst_u,
1588                            uint8_t* dst_v,
1589                            int width);
1590 void MirrorSplitUVRow_MSA(const uint8_t* src_uv,
1591                           uint8_t* dst_u,
1592                           uint8_t* dst_v,
1593                           int width);
1594 void MirrorSplitUVRow_MMI(const uint8_t* src_uv,
1595                           uint8_t* dst_u,
1596                           uint8_t* dst_v,
1597                           int width);
1598 void MirrorSplitUVRow_C(const uint8_t* src_uv,
1599                         uint8_t* dst_u,
1600                         uint8_t* dst_v,
1601                         int width);
1602 
1603 void ARGBMirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1604 void ARGBMirrorRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
1605 void ARGBMirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
1606 void ARGBMirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
1607 void ARGBMirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width);
1608 void ARGBMirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
1609 void ARGBMirrorRow_Any_AVX2(const uint8_t* src_ptr,
1610                             uint8_t* dst_ptr,
1611                             int width);
1612 void ARGBMirrorRow_Any_SSE2(const uint8_t* src_ptr,
1613                             uint8_t* dst_ptr,
1614                             int width);
1615 void ARGBMirrorRow_Any_NEON(const uint8_t* src_ptr,
1616                             uint8_t* dst_ptr,
1617                             int width);
1618 void ARGBMirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1619 void ARGBMirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1620 
1621 void RGB24MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
1622 void RGB24MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
1623 void RGB24MirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
1624 void RGB24MirrorRow_Any_SSSE3(const uint8_t* src_ptr,
1625                               uint8_t* dst_ptr,
1626                               int width);
1627 void RGB24MirrorRow_Any_NEON(const uint8_t* src_ptr,
1628                              uint8_t* dst_ptr,
1629                              int width);
1630 
1631 void SplitUVRow_C(const uint8_t* src_uv,
1632                   uint8_t* dst_u,
1633                   uint8_t* dst_v,
1634                   int width);
1635 void SplitUVRow_SSE2(const uint8_t* src_uv,
1636                      uint8_t* dst_u,
1637                      uint8_t* dst_v,
1638                      int width);
1639 void SplitUVRow_AVX2(const uint8_t* src_uv,
1640                      uint8_t* dst_u,
1641                      uint8_t* dst_v,
1642                      int width);
1643 void SplitUVRow_NEON(const uint8_t* src_uv,
1644                      uint8_t* dst_u,
1645                      uint8_t* dst_v,
1646                      int width);
1647 void SplitUVRow_MSA(const uint8_t* src_uv,
1648                     uint8_t* dst_u,
1649                     uint8_t* dst_v,
1650                     int width);
1651 void SplitUVRow_MMI(const uint8_t* src_uv,
1652                     uint8_t* dst_u,
1653                     uint8_t* dst_v,
1654                     int width);
1655 void SplitUVRow_Any_SSE2(const uint8_t* src_ptr,
1656                          uint8_t* dst_u,
1657                          uint8_t* dst_v,
1658                          int width);
1659 void SplitUVRow_Any_AVX2(const uint8_t* src_ptr,
1660                          uint8_t* dst_u,
1661                          uint8_t* dst_v,
1662                          int width);
1663 void SplitUVRow_Any_NEON(const uint8_t* src_ptr,
1664                          uint8_t* dst_u,
1665                          uint8_t* dst_v,
1666                          int width);
1667 void SplitUVRow_Any_MSA(const uint8_t* src_ptr,
1668                         uint8_t* dst_u,
1669                         uint8_t* dst_v,
1670                         int width);
1671 void SplitUVRow_Any_MMI(const uint8_t* src_ptr,
1672                         uint8_t* dst_u,
1673                         uint8_t* dst_v,
1674                         int width);
1675 
1676 void MergeUVRow_C(const uint8_t* src_u,
1677                   const uint8_t* src_v,
1678                   uint8_t* dst_uv,
1679                   int width);
1680 void MergeUVRow_SSE2(const uint8_t* src_u,
1681                      const uint8_t* src_v,
1682                      uint8_t* dst_uv,
1683                      int width);
1684 void MergeUVRow_AVX2(const uint8_t* src_u,
1685                      const uint8_t* src_v,
1686                      uint8_t* dst_uv,
1687                      int width);
1688 void MergeUVRow_NEON(const uint8_t* src_u,
1689                      const uint8_t* src_v,
1690                      uint8_t* dst_uv,
1691                      int width);
1692 void MergeUVRow_MSA(const uint8_t* src_u,
1693                     const uint8_t* src_v,
1694                     uint8_t* dst_uv,
1695                     int width);
1696 void MergeUVRow_MMI(const uint8_t* src_u,
1697                     const uint8_t* src_v,
1698                     uint8_t* dst_uv,
1699                     int width);
1700 void MergeUVRow_Any_SSE2(const uint8_t* y_buf,
1701                          const uint8_t* uv_buf,
1702                          uint8_t* dst_ptr,
1703                          int width);
1704 void MergeUVRow_Any_AVX2(const uint8_t* y_buf,
1705                          const uint8_t* uv_buf,
1706                          uint8_t* dst_ptr,
1707                          int width);
1708 void MergeUVRow_Any_NEON(const uint8_t* y_buf,
1709                          const uint8_t* uv_buf,
1710                          uint8_t* dst_ptr,
1711                          int width);
1712 void MergeUVRow_Any_MSA(const uint8_t* y_buf,
1713                         const uint8_t* uv_buf,
1714                         uint8_t* dst_ptr,
1715                         int width);
1716 void MergeUVRow_Any_MMI(const uint8_t* y_buf,
1717                         const uint8_t* uv_buf,
1718                         uint8_t* dst_ptr,
1719                         int width);
1720 
1721 void HalfMergeUVRow_C(const uint8_t* src_u,
1722                       int src_stride_u,
1723                       const uint8_t* src_v,
1724                       int src_stride_v,
1725                       uint8_t* dst_uv,
1726                       int width);
1727 
1728 void HalfMergeUVRow_NEON(const uint8_t* src_u,
1729                          int src_stride_u,
1730                          const uint8_t* src_v,
1731                          int src_stride_v,
1732                          uint8_t* dst_uv,
1733                          int width);
1734 
1735 void HalfMergeUVRow_SSSE3(const uint8_t* src_u,
1736                           int src_stride_u,
1737                           const uint8_t* src_v,
1738                           int src_stride_v,
1739                           uint8_t* dst_uv,
1740                           int width);
1741 
1742 void HalfMergeUVRow_AVX2(const uint8_t* src_u,
1743                          int src_stride_u,
1744                          const uint8_t* src_v,
1745                          int src_stride_v,
1746                          uint8_t* dst_uv,
1747                          int width);
1748 
1749 void SplitRGBRow_C(const uint8_t* src_rgb,
1750                    uint8_t* dst_r,
1751                    uint8_t* dst_g,
1752                    uint8_t* dst_b,
1753                    int width);
1754 void SplitRGBRow_SSSE3(const uint8_t* src_rgb,
1755                        uint8_t* dst_r,
1756                        uint8_t* dst_g,
1757                        uint8_t* dst_b,
1758                        int width);
1759 void SplitRGBRow_NEON(const uint8_t* src_rgb,
1760                       uint8_t* dst_r,
1761                       uint8_t* dst_g,
1762                       uint8_t* dst_b,
1763                       int width);
1764 void SplitRGBRow_MMI(const uint8_t* src_rgb,
1765                      uint8_t* dst_r,
1766                      uint8_t* dst_g,
1767                      uint8_t* dst_b,
1768                      int width);
1769 void SplitRGBRow_Any_SSSE3(const uint8_t* src_ptr,
1770                            uint8_t* dst_r,
1771                            uint8_t* dst_g,
1772                            uint8_t* dst_b,
1773                            int width);
1774 void SplitRGBRow_Any_NEON(const uint8_t* src_ptr,
1775                           uint8_t* dst_r,
1776                           uint8_t* dst_g,
1777                           uint8_t* dst_b,
1778                           int width);
1779 void SplitRGBRow_Any_MMI(const uint8_t* src_ptr,
1780                          uint8_t* dst_r,
1781                          uint8_t* dst_g,
1782                          uint8_t* dst_b,
1783                          int width);
1784 
1785 void MergeRGBRow_C(const uint8_t* src_r,
1786                    const uint8_t* src_g,
1787                    const uint8_t* src_b,
1788                    uint8_t* dst_rgb,
1789                    int width);
1790 void MergeRGBRow_SSSE3(const uint8_t* src_r,
1791                        const uint8_t* src_g,
1792                        const uint8_t* src_b,
1793                        uint8_t* dst_rgb,
1794                        int width);
1795 void MergeRGBRow_NEON(const uint8_t* src_r,
1796                       const uint8_t* src_g,
1797                       const uint8_t* src_b,
1798                       uint8_t* dst_rgb,
1799                       int width);
1800 void MergeRGBRow_MMI(const uint8_t* src_r,
1801                      const uint8_t* src_g,
1802                      const uint8_t* src_b,
1803                      uint8_t* dst_rgb,
1804                      int width);
1805 void MergeRGBRow_Any_SSSE3(const uint8_t* y_buf,
1806                            const uint8_t* u_buf,
1807                            const uint8_t* v_buf,
1808                            uint8_t* dst_ptr,
1809                            int width);
1810 void MergeRGBRow_Any_NEON(const uint8_t* src_r,
1811                           const uint8_t* src_g,
1812                           const uint8_t* src_b,
1813                           uint8_t* dst_rgb,
1814                           int width);
1815 void MergeRGBRow_Any_MMI(const uint8_t* src_r,
1816                          const uint8_t* src_g,
1817                          const uint8_t* src_b,
1818                          uint8_t* dst_rgb,
1819                          int width);
1820 
1821 void MergeUVRow_16_C(const uint16_t* src_u,
1822                      const uint16_t* src_v,
1823                      uint16_t* dst_uv,
1824                      int scale, /* 64 for 10 bit */
1825                      int width);
1826 void MergeUVRow_16_AVX2(const uint16_t* src_u,
1827                         const uint16_t* src_v,
1828                         uint16_t* dst_uv,
1829                         int scale,
1830                         int width);
1831 
1832 void MultiplyRow_16_AVX2(const uint16_t* src_y,
1833                          uint16_t* dst_y,
1834                          int scale,
1835                          int width);
1836 void MultiplyRow_16_C(const uint16_t* src_y,
1837                       uint16_t* dst_y,
1838                       int scale,
1839                       int width);
1840 
1841 void Convert8To16Row_C(const uint8_t* src_y,
1842                        uint16_t* dst_y,
1843                        int scale,
1844                        int width);
1845 void Convert8To16Row_SSE2(const uint8_t* src_y,
1846                           uint16_t* dst_y,
1847                           int scale,
1848                           int width);
1849 void Convert8To16Row_AVX2(const uint8_t* src_y,
1850                           uint16_t* dst_y,
1851                           int scale,
1852                           int width);
1853 void Convert8To16Row_Any_SSE2(const uint8_t* src_ptr,
1854                               uint16_t* dst_ptr,
1855                               int scale,
1856                               int width);
1857 void Convert8To16Row_Any_AVX2(const uint8_t* src_ptr,
1858                               uint16_t* dst_ptr,
1859                               int scale,
1860                               int width);
1861 
1862 void Convert16To8Row_C(const uint16_t* src_y,
1863                        uint8_t* dst_y,
1864                        int scale,
1865                        int width);
1866 void Convert16To8Row_SSSE3(const uint16_t* src_y,
1867                            uint8_t* dst_y,
1868                            int scale,
1869                            int width);
1870 void Convert16To8Row_AVX2(const uint16_t* src_y,
1871                           uint8_t* dst_y,
1872                           int scale,
1873                           int width);
1874 void Convert16To8Row_Any_SSSE3(const uint16_t* src_ptr,
1875                                uint8_t* dst_ptr,
1876                                int scale,
1877                                int width);
1878 void Convert16To8Row_Any_AVX2(const uint16_t* src_ptr,
1879                               uint8_t* dst_ptr,
1880                               int scale,
1881                               int width);
1882 
1883 void CopyRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
1884 void CopyRow_AVX(const uint8_t* src, uint8_t* dst, int width);
1885 void CopyRow_ERMS(const uint8_t* src, uint8_t* dst, int width);
1886 void CopyRow_NEON(const uint8_t* src, uint8_t* dst, int width);
1887 void CopyRow_MIPS(const uint8_t* src, uint8_t* dst, int count);
1888 void CopyRow_C(const uint8_t* src, uint8_t* dst, int count);
1889 void CopyRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1890 void CopyRow_Any_AVX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1891 void CopyRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1892 
1893 void CopyRow_16_C(const uint16_t* src, uint16_t* dst, int count);
1894 
1895 void ARGBCopyAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
1896 void ARGBCopyAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
1897 void ARGBCopyAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1898 void ARGBCopyAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width);
1899 void ARGBCopyAlphaRow_Any_SSE2(const uint8_t* src_ptr,
1900                                uint8_t* dst_ptr,
1901                                int width);
1902 void ARGBCopyAlphaRow_Any_AVX2(const uint8_t* src_ptr,
1903                                uint8_t* dst_ptr,
1904                                int width);
1905 void ARGBCopyAlphaRow_Any_MMI(const uint8_t* src_ptr,
1906                               uint8_t* dst_ptr,
1907                               int width);
1908 
1909 void ARGBExtractAlphaRow_C(const uint8_t* src_argb, uint8_t* dst_a, int width);
1910 void ARGBExtractAlphaRow_SSE2(const uint8_t* src_argb,
1911                               uint8_t* dst_a,
1912                               int width);
1913 void ARGBExtractAlphaRow_AVX2(const uint8_t* src_argb,
1914                               uint8_t* dst_a,
1915                               int width);
1916 void ARGBExtractAlphaRow_NEON(const uint8_t* src_argb,
1917                               uint8_t* dst_a,
1918                               int width);
1919 void ARGBExtractAlphaRow_MSA(const uint8_t* src_argb,
1920                              uint8_t* dst_a,
1921                              int width);
1922 void ARGBExtractAlphaRow_MMI(const uint8_t* src_argb,
1923                              uint8_t* dst_a,
1924                              int width);
1925 void ARGBExtractAlphaRow_Any_SSE2(const uint8_t* src_ptr,
1926                                   uint8_t* dst_ptr,
1927                                   int width);
1928 void ARGBExtractAlphaRow_Any_AVX2(const uint8_t* src_ptr,
1929                                   uint8_t* dst_ptr,
1930                                   int width);
1931 void ARGBExtractAlphaRow_Any_NEON(const uint8_t* src_ptr,
1932                                   uint8_t* dst_ptr,
1933                                   int width);
1934 void ARGBExtractAlphaRow_Any_MSA(const uint8_t* src_ptr,
1935                                  uint8_t* dst_ptr,
1936                                  int width);
1937 void ARGBExtractAlphaRow_Any_MMI(const uint8_t* src_ptr,
1938                                  uint8_t* dst_ptr,
1939                                  int width);
1940 
1941 void ARGBCopyYToAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
1942 void ARGBCopyYToAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
1943 void ARGBCopyYToAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1944 void ARGBCopyYToAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width);
1945 void ARGBCopyYToAlphaRow_Any_SSE2(const uint8_t* src_ptr,
1946                                   uint8_t* dst_ptr,
1947                                   int width);
1948 void ARGBCopyYToAlphaRow_Any_AVX2(const uint8_t* src_ptr,
1949                                   uint8_t* dst_ptr,
1950                                   int width);
1951 void ARGBCopyYToAlphaRow_Any_MMI(const uint8_t* src_ptr,
1952                                  uint8_t* dst_ptr,
1953                                  int width);
1954 
1955 void SetRow_C(uint8_t* dst, uint8_t v8, int width);
1956 void SetRow_MSA(uint8_t* dst, uint8_t v8, int width);
1957 void SetRow_X86(uint8_t* dst, uint8_t v8, int width);
1958 void SetRow_ERMS(uint8_t* dst, uint8_t v8, int width);
1959 void SetRow_NEON(uint8_t* dst, uint8_t v8, int width);
1960 void SetRow_Any_X86(uint8_t* dst_ptr, uint8_t v32, int width);
1961 void SetRow_Any_NEON(uint8_t* dst_ptr, uint8_t v32, int width);
1962 
1963 void ARGBSetRow_C(uint8_t* dst_argb, uint32_t v32, int width);
1964 void ARGBSetRow_X86(uint8_t* dst_argb, uint32_t v32, int width);
1965 void ARGBSetRow_NEON(uint8_t* dst, uint32_t v32, int width);
1966 void ARGBSetRow_Any_NEON(uint8_t* dst_ptr, uint32_t v32, int width);
1967 void ARGBSetRow_MSA(uint8_t* dst_argb, uint32_t v32, int width);
1968 void ARGBSetRow_Any_MSA(uint8_t* dst_ptr, uint32_t v32, int width);
1969 void ARGBSetRow_MMI(uint8_t* dst_argb, uint32_t v32, int width);
1970 void ARGBSetRow_Any_MMI(uint8_t* dst_ptr, uint32_t v32, int width);
1971 
1972 // ARGBShufflers for BGRAToARGB etc.
1973 void ARGBShuffleRow_C(const uint8_t* src_argb,
1974                       uint8_t* dst_argb,
1975                       const uint8_t* shuffler,
1976                       int width);
1977 void ARGBShuffleRow_SSSE3(const uint8_t* src_argb,
1978                           uint8_t* dst_argb,
1979                           const uint8_t* shuffler,
1980                           int width);
1981 void ARGBShuffleRow_AVX2(const uint8_t* src_argb,
1982                          uint8_t* dst_argb,
1983                          const uint8_t* shuffler,
1984                          int width);
1985 void ARGBShuffleRow_NEON(const uint8_t* src_argb,
1986                          uint8_t* dst_argb,
1987                          const uint8_t* shuffler,
1988                          int width);
1989 void ARGBShuffleRow_MSA(const uint8_t* src_argb,
1990                         uint8_t* dst_argb,
1991                         const uint8_t* shuffler,
1992                         int width);
1993 void ARGBShuffleRow_MMI(const uint8_t* src_argb,
1994                         uint8_t* dst_argb,
1995                         const uint8_t* shuffler,
1996                         int width);
1997 void ARGBShuffleRow_Any_SSSE3(const uint8_t* src_ptr,
1998                               uint8_t* dst_ptr,
1999                               const uint8_t* param,
2000                               int width);
2001 void ARGBShuffleRow_Any_AVX2(const uint8_t* src_ptr,
2002                              uint8_t* dst_ptr,
2003                              const uint8_t* param,
2004                              int width);
2005 void ARGBShuffleRow_Any_NEON(const uint8_t* src_ptr,
2006                              uint8_t* dst_ptr,
2007                              const uint8_t* param,
2008                              int width);
2009 void ARGBShuffleRow_Any_MSA(const uint8_t* src_ptr,
2010                             uint8_t* dst_ptr,
2011                             const uint8_t* param,
2012                             int width);
2013 void ARGBShuffleRow_Any_MMI(const uint8_t* src_ptr,
2014                             uint8_t* dst_ptr,
2015                             const uint8_t* param,
2016                             int width);
2017 
2018 void RGB24ToARGBRow_SSSE3(const uint8_t* src_rgb24,
2019                           uint8_t* dst_argb,
2020                           int width);
2021 void RAWToARGBRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2022 void RAWToRGBARow_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2023 void RAWToRGB24Row_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2024 void RGB565ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2025 void ARGB1555ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2026 void ARGB4444ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2027 void RGB565ToARGBRow_AVX2(const uint8_t* src_rgb565,
2028                           uint8_t* dst_argb,
2029                           int width);
2030 void ARGB1555ToARGBRow_AVX2(const uint8_t* src_argb1555,
2031                             uint8_t* dst_argb,
2032                             int width);
2033 void ARGB4444ToARGBRow_AVX2(const uint8_t* src_argb4444,
2034                             uint8_t* dst_argb,
2035                             int width);
2036 
2037 void RGB24ToARGBRow_NEON(const uint8_t* src_rgb24,
2038                          uint8_t* dst_argb,
2039                          int width);
2040 void RGB24ToARGBRow_MSA(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2041 void RGB24ToARGBRow_MMI(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2042 void RAWToARGBRow_NEON(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2043 void RAWToRGBARow_NEON(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2044 void RAWToARGBRow_MSA(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2045 void RAWToARGBRow_MMI(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2046 void RAWToRGB24Row_NEON(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2047 void RAWToRGB24Row_MSA(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2048 void RAWToRGB24Row_MMI(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2049 void RGB565ToARGBRow_NEON(const uint8_t* src_rgb565,
2050                           uint8_t* dst_argb,
2051                           int width);
2052 void RGB565ToARGBRow_MSA(const uint8_t* src_rgb565,
2053                          uint8_t* dst_argb,
2054                          int width);
2055 void RGB565ToARGBRow_MMI(const uint8_t* src_rgb565,
2056                          uint8_t* dst_argb,
2057                          int width);
2058 void ARGB1555ToARGBRow_NEON(const uint8_t* src_argb1555,
2059                             uint8_t* dst_argb,
2060                             int width);
2061 void ARGB1555ToARGBRow_MSA(const uint8_t* src_argb1555,
2062                            uint8_t* dst_argb,
2063                            int width);
2064 void ARGB1555ToARGBRow_MMI(const uint8_t* src_argb1555,
2065                            uint8_t* dst_argb,
2066                            int width);
2067 void ARGB4444ToARGBRow_NEON(const uint8_t* src_argb4444,
2068                             uint8_t* dst_argb,
2069                             int width);
2070 void ARGB4444ToARGBRow_MSA(const uint8_t* src_argb4444,
2071                            uint8_t* dst_argb,
2072                            int width);
2073 void ARGB4444ToARGBRow_MMI(const uint8_t* src_argb4444,
2074                            uint8_t* dst_argb,
2075                            int width);
2076 void RGB24ToARGBRow_C(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2077 void RAWToARGBRow_C(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2078 void RAWToRGBARow_C(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2079 void RAWToRGB24Row_C(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2080 void RGB565ToARGBRow_C(const uint8_t* src_rgb565, uint8_t* dst_argb, int width);
2081 void ARGB1555ToARGBRow_C(const uint8_t* src_argb1555,
2082                          uint8_t* dst_argb,
2083                          int width);
2084 void ARGB4444ToARGBRow_C(const uint8_t* src_argb4444,
2085                          uint8_t* dst_argb,
2086                          int width);
2087 void AR30ToARGBRow_C(const uint8_t* src_ar30, uint8_t* dst_argb, int width);
2088 void AR30ToABGRRow_C(const uint8_t* src_ar30, uint8_t* dst_abgr, int width);
2089 void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
2090 void AR30ToAB30Row_C(const uint8_t* src_ar30, uint8_t* dst_ab30, int width);
2091 
2092 void RGB24ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2093                               uint8_t* dst_ptr,
2094                               int width);
2095 void RAWToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2096                             uint8_t* dst_ptr,
2097                             int width);
2098 void RAWToRGBARow_Any_SSSE3(const uint8_t* src_ptr,
2099                             uint8_t* dst_ptr,
2100                             int width);
2101 void RAWToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
2102                              uint8_t* dst_ptr,
2103                              int width);
2104 
2105 void RGB565ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2106                               uint8_t* dst_ptr,
2107                               int width);
2108 void ARGB1555ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2109                                 uint8_t* dst_ptr,
2110                                 int width);
2111 void ARGB4444ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2112                                 uint8_t* dst_ptr,
2113                                 int width);
2114 void RGB565ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2115                               uint8_t* dst_ptr,
2116                               int width);
2117 void ARGB1555ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2118                                 uint8_t* dst_ptr,
2119                                 int width);
2120 void ARGB4444ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2121                                 uint8_t* dst_ptr,
2122                                 int width);
2123 
2124 void RGB24ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2125                              uint8_t* dst_ptr,
2126                              int width);
2127 void RGB24ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2128                             uint8_t* dst_ptr,
2129                             int width);
2130 void RGB24ToARGBRow_Any_MMI(const uint8_t* src_ptr,
2131                             uint8_t* dst_ptr,
2132                             int width);
2133 void RAWToARGBRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2134 void RAWToRGBARow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2135 void RAWToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2136 void RAWToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2137 void RAWToRGB24Row_Any_NEON(const uint8_t* src_ptr,
2138                             uint8_t* dst_ptr,
2139                             int width);
2140 void RAWToRGB24Row_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2141 void RAWToRGB24Row_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2142 void RGB565ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2143                               uint8_t* dst_ptr,
2144                               int width);
2145 void RGB565ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2146                              uint8_t* dst_ptr,
2147                              int width);
2148 void RGB565ToARGBRow_Any_MMI(const uint8_t* src_ptr,
2149                              uint8_t* dst_ptr,
2150                              int width);
2151 void ARGB1555ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2152                                 uint8_t* dst_ptr,
2153                                 int width);
2154 void ARGB1555ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2155                                uint8_t* dst_ptr,
2156                                int width);
2157 void ARGB1555ToARGBRow_Any_MMI(const uint8_t* src_ptr,
2158                                uint8_t* dst_ptr,
2159                                int width);
2160 void ARGB4444ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2161                                 uint8_t* dst_ptr,
2162                                 int width);
2163 
2164 void ARGB4444ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2165                                uint8_t* dst_ptr,
2166                                int width);
2167 void ARGB4444ToARGBRow_Any_MMI(const uint8_t* src_ptr,
2168                                uint8_t* dst_ptr,
2169                                int width);
2170 
2171 void ARGBToRGB24Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2172 void ARGBToRAWRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2173 void ARGBToRGB565Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2174 void ARGBToARGB1555Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2175 void ARGBToARGB4444Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2176 void ABGRToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2177 void ARGBToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2178 
2179 void ARGBToRAWRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
2180 void ARGBToRGB24Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2181 
2182 void ARGBToRGB24Row_AVX512VBMI(const uint8_t* src, uint8_t* dst, int width);
2183 
2184 void ARGBToRGB565DitherRow_C(const uint8_t* src_argb,
2185                              uint8_t* dst_rgb,
2186                              const uint32_t dither4,
2187                              int width);
2188 void ARGBToRGB565DitherRow_SSE2(const uint8_t* src,
2189                                 uint8_t* dst,
2190                                 const uint32_t dither4,
2191                                 int width);
2192 void ARGBToRGB565DitherRow_AVX2(const uint8_t* src,
2193                                 uint8_t* dst,
2194                                 const uint32_t dither4,
2195                                 int width);
2196 
2197 void ARGBToRGB565Row_AVX2(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2198 void ARGBToARGB1555Row_AVX2(const uint8_t* src_argb,
2199                             uint8_t* dst_rgb,
2200                             int width);
2201 void ARGBToARGB4444Row_AVX2(const uint8_t* src_argb,
2202                             uint8_t* dst_rgb,
2203                             int width);
2204 void ABGRToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2205 void ARGBToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2206 
2207 void ARGBToRGB24Row_NEON(const uint8_t* src_argb,
2208                          uint8_t* dst_rgb24,
2209                          int width);
2210 void ARGBToRAWRow_NEON(const uint8_t* src_argb, uint8_t* dst_raw, int width);
2211 void ARGBToRGB565Row_NEON(const uint8_t* src_argb,
2212                           uint8_t* dst_rgb565,
2213                           int width);
2214 void ARGBToARGB1555Row_NEON(const uint8_t* src_argb,
2215                             uint8_t* dst_argb1555,
2216                             int width);
2217 void ARGBToARGB4444Row_NEON(const uint8_t* src_argb,
2218                             uint8_t* dst_argb4444,
2219                             int width);
2220 void ARGBToRGB565DitherRow_NEON(const uint8_t* src_argb,
2221                                 uint8_t* dst_rgb,
2222                                 const uint32_t dither4,
2223                                 int width);
2224 void ARGBToRGB24Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2225 void ARGBToRAWRow_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2226 void ARGBToRGB565Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2227 void ARGBToARGB1555Row_MSA(const uint8_t* src_argb,
2228                            uint8_t* dst_rgb,
2229                            int width);
2230 void ARGBToARGB4444Row_MSA(const uint8_t* src_argb,
2231                            uint8_t* dst_rgb,
2232                            int width);
2233 void ARGBToRGB565DitherRow_MSA(const uint8_t* src_argb,
2234                                uint8_t* dst_rgb,
2235                                const uint32_t dither4,
2236                                int width);
2237 
2238 void ARGBToRGB24Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2239 void ARGBToRAWRow_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2240 void ARGBToRGB565Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2241 void ARGBToARGB1555Row_MMI(const uint8_t* src_argb,
2242                            uint8_t* dst_rgb,
2243                            int width);
2244 void ARGBToARGB4444Row_MMI(const uint8_t* src_argb,
2245                            uint8_t* dst_rgb,
2246                            int width);
2247 void ARGBToRGB565DitherRow_MMI(const uint8_t* src_argb,
2248                                uint8_t* dst_rgb,
2249                                const uint32_t dither4,
2250                                int width);
2251 
2252 void ARGBToRGBARow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2253 void ARGBToRGB24Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2254 void ARGBToRAWRow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2255 void ARGBToRGB565Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2256 void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2257 void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2258 void ABGRToAR30Row_C(const uint8_t* src_abgr, uint8_t* dst_ar30, int width);
2259 void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
2260 
2261 void J400ToARGBRow_SSE2(const uint8_t* src_y, uint8_t* dst_argb, int width);
2262 void J400ToARGBRow_AVX2(const uint8_t* src_y, uint8_t* dst_argb, int width);
2263 void J400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width);
2264 void J400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width);
2265 void J400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width);
2266 void J400ToARGBRow_C(const uint8_t* src_y, uint8_t* dst_argb, int width);
2267 void J400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2268                             uint8_t* dst_ptr,
2269                             int width);
2270 void J400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2271                             uint8_t* dst_ptr,
2272                             int width);
2273 void J400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2274                             uint8_t* dst_ptr,
2275                             int width);
2276 void J400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2277 void J400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2278 
2279 void I444ToARGBRow_C(const uint8_t* src_y,
2280                      const uint8_t* src_u,
2281                      const uint8_t* src_v,
2282                      uint8_t* rgb_buf,
2283                      const struct YuvConstants* yuvconstants,
2284                      int width);
2285 void I422ToARGBRow_C(const uint8_t* src_y,
2286                      const uint8_t* src_u,
2287                      const uint8_t* src_v,
2288                      uint8_t* rgb_buf,
2289                      const struct YuvConstants* yuvconstants,
2290                      int width);
2291 void I422ToAR30Row_C(const uint8_t* src_y,
2292                      const uint8_t* src_u,
2293                      const uint8_t* src_v,
2294                      uint8_t* rgb_buf,
2295                      const struct YuvConstants* yuvconstants,
2296                      int width);
2297 void I210ToAR30Row_C(const uint16_t* src_y,
2298                      const uint16_t* src_u,
2299                      const uint16_t* src_v,
2300                      uint8_t* rgb_buf,
2301                      const struct YuvConstants* yuvconstants,
2302                      int width);
2303 void I210ToARGBRow_C(const uint16_t* src_y,
2304                      const uint16_t* src_u,
2305                      const uint16_t* src_v,
2306                      uint8_t* rgb_buf,
2307                      const struct YuvConstants* yuvconstants,
2308                      int width);
2309 void I422AlphaToARGBRow_C(const uint8_t* src_y,
2310                           const uint8_t* src_u,
2311                           const uint8_t* src_v,
2312                           const uint8_t* src_a,
2313                           uint8_t* rgb_buf,
2314                           const struct YuvConstants* yuvconstants,
2315                           int width);
2316 void NV12ToARGBRow_C(const uint8_t* src_y,
2317                      const uint8_t* src_uv,
2318                      uint8_t* rgb_buf,
2319                      const struct YuvConstants* yuvconstants,
2320                      int width);
2321 void NV12ToRGB565Row_C(const uint8_t* src_y,
2322                        const uint8_t* src_uv,
2323                        uint8_t* dst_rgb565,
2324                        const struct YuvConstants* yuvconstants,
2325                        int width);
2326 void NV21ToARGBRow_C(const uint8_t* src_y,
2327                      const uint8_t* src_vu,
2328                      uint8_t* rgb_buf,
2329                      const struct YuvConstants* yuvconstants,
2330                      int width);
2331 void NV12ToRGB24Row_C(const uint8_t* src_y,
2332                       const uint8_t* src_uv,
2333                       uint8_t* rgb_buf,
2334                       const struct YuvConstants* yuvconstants,
2335                       int width);
2336 void NV21ToRGB24Row_C(const uint8_t* src_y,
2337                       const uint8_t* src_vu,
2338                       uint8_t* rgb_buf,
2339                       const struct YuvConstants* yuvconstants,
2340                       int width);
2341 void NV21ToYUV24Row_C(const uint8_t* src_y,
2342                       const uint8_t* src_vu,
2343                       uint8_t* dst_yuv24,
2344                       int width);
2345 void YUY2ToARGBRow_C(const uint8_t* src_yuy2,
2346                      uint8_t* rgb_buf,
2347                      const struct YuvConstants* yuvconstants,
2348                      int width);
2349 void UYVYToARGBRow_C(const uint8_t* src_uyvy,
2350                      uint8_t* rgb_buf,
2351                      const struct YuvConstants* yuvconstants,
2352                      int width);
2353 void I422ToRGBARow_C(const uint8_t* src_y,
2354                      const uint8_t* src_u,
2355                      const uint8_t* src_v,
2356                      uint8_t* rgb_buf,
2357                      const struct YuvConstants* yuvconstants,
2358                      int width);
2359 void I422ToRGB24Row_C(const uint8_t* src_y,
2360                       const uint8_t* src_u,
2361                       const uint8_t* src_v,
2362                       uint8_t* rgb_buf,
2363                       const struct YuvConstants* yuvconstants,
2364                       int width);
2365 void I422ToARGB4444Row_C(const uint8_t* src_y,
2366                          const uint8_t* src_u,
2367                          const uint8_t* src_v,
2368                          uint8_t* dst_argb4444,
2369                          const struct YuvConstants* yuvconstants,
2370                          int width);
2371 void I422ToARGB1555Row_C(const uint8_t* src_y,
2372                          const uint8_t* src_u,
2373                          const uint8_t* src_v,
2374                          uint8_t* dst_argb1555,
2375                          const struct YuvConstants* yuvconstants,
2376                          int width);
2377 void I422ToRGB565Row_C(const uint8_t* src_y,
2378                        const uint8_t* src_u,
2379                        const uint8_t* src_v,
2380                        uint8_t* dst_rgb565,
2381                        const struct YuvConstants* yuvconstants,
2382                        int width);
2383 void I422ToARGBRow_AVX2(const uint8_t* y_buf,
2384                         const uint8_t* u_buf,
2385                         const uint8_t* v_buf,
2386                         uint8_t* dst_argb,
2387                         const struct YuvConstants* yuvconstants,
2388                         int width);
2389 void I422ToRGBARow_AVX2(const uint8_t* y_buf,
2390                         const uint8_t* u_buf,
2391                         const uint8_t* v_buf,
2392                         uint8_t* dst_argb,
2393                         const struct YuvConstants* yuvconstants,
2394                         int width);
2395 void I444ToARGBRow_SSSE3(const uint8_t* y_buf,
2396                          const uint8_t* u_buf,
2397                          const uint8_t* v_buf,
2398                          uint8_t* dst_argb,
2399                          const struct YuvConstants* yuvconstants,
2400                          int width);
2401 void I444ToARGBRow_AVX2(const uint8_t* y_buf,
2402                         const uint8_t* u_buf,
2403                         const uint8_t* v_buf,
2404                         uint8_t* dst_argb,
2405                         const struct YuvConstants* yuvconstants,
2406                         int width);
2407 void I444ToARGBRow_SSSE3(const uint8_t* y_buf,
2408                          const uint8_t* u_buf,
2409                          const uint8_t* v_buf,
2410                          uint8_t* dst_argb,
2411                          const struct YuvConstants* yuvconstants,
2412                          int width);
2413 void I444ToARGBRow_AVX2(const uint8_t* y_buf,
2414                         const uint8_t* u_buf,
2415                         const uint8_t* v_buf,
2416                         uint8_t* dst_argb,
2417                         const struct YuvConstants* yuvconstants,
2418                         int width);
2419 void I422ToARGBRow_SSSE3(const uint8_t* y_buf,
2420                          const uint8_t* u_buf,
2421                          const uint8_t* v_buf,
2422                          uint8_t* dst_argb,
2423                          const struct YuvConstants* yuvconstants,
2424                          int width);
2425 
2426 void I422ToAR30Row_SSSE3(const uint8_t* y_buf,
2427                          const uint8_t* u_buf,
2428                          const uint8_t* v_buf,
2429                          uint8_t* dst_ar30,
2430                          const struct YuvConstants* yuvconstants,
2431                          int width);
2432 void I210ToAR30Row_SSSE3(const uint16_t* y_buf,
2433                          const uint16_t* u_buf,
2434                          const uint16_t* v_buf,
2435                          uint8_t* dst_ar30,
2436                          const struct YuvConstants* yuvconstants,
2437                          int width);
2438 void I210ToARGBRow_SSSE3(const uint16_t* y_buf,
2439                          const uint16_t* u_buf,
2440                          const uint16_t* v_buf,
2441                          uint8_t* dst_argb,
2442                          const struct YuvConstants* yuvconstants,
2443                          int width);
2444 void I422ToAR30Row_AVX2(const uint8_t* y_buf,
2445                         const uint8_t* u_buf,
2446                         const uint8_t* v_buf,
2447                         uint8_t* dst_ar30,
2448                         const struct YuvConstants* yuvconstants,
2449                         int width);
2450 void I210ToARGBRow_AVX2(const uint16_t* y_buf,
2451                         const uint16_t* u_buf,
2452                         const uint16_t* v_buf,
2453                         uint8_t* dst_argb,
2454                         const struct YuvConstants* yuvconstants,
2455                         int width);
2456 void I210ToAR30Row_AVX2(const uint16_t* y_buf,
2457                         const uint16_t* u_buf,
2458                         const uint16_t* v_buf,
2459                         uint8_t* dst_ar30,
2460                         const struct YuvConstants* yuvconstants,
2461                         int width);
2462 void I422AlphaToARGBRow_SSSE3(const uint8_t* y_buf,
2463                               const uint8_t* u_buf,
2464                               const uint8_t* v_buf,
2465                               const uint8_t* a_buf,
2466                               uint8_t* dst_argb,
2467                               const struct YuvConstants* yuvconstants,
2468                               int width);
2469 void I422AlphaToARGBRow_AVX2(const uint8_t* y_buf,
2470                              const uint8_t* u_buf,
2471                              const uint8_t* v_buf,
2472                              const uint8_t* a_buf,
2473                              uint8_t* dst_argb,
2474                              const struct YuvConstants* yuvconstants,
2475                              int width);
2476 void NV12ToARGBRow_SSSE3(const uint8_t* y_buf,
2477                          const uint8_t* uv_buf,
2478                          uint8_t* dst_argb,
2479                          const struct YuvConstants* yuvconstants,
2480                          int width);
2481 void NV12ToARGBRow_AVX2(const uint8_t* y_buf,
2482                         const uint8_t* uv_buf,
2483                         uint8_t* dst_argb,
2484                         const struct YuvConstants* yuvconstants,
2485                         int width);
2486 void NV12ToRGB24Row_SSSE3(const uint8_t* src_y,
2487                           const uint8_t* src_uv,
2488                           uint8_t* dst_rgb24,
2489                           const struct YuvConstants* yuvconstants,
2490                           int width);
2491 void NV21ToRGB24Row_SSSE3(const uint8_t* src_y,
2492                           const uint8_t* src_vu,
2493                           uint8_t* dst_rgb24,
2494                           const struct YuvConstants* yuvconstants,
2495                           int width);
2496 void NV12ToRGB565Row_SSSE3(const uint8_t* src_y,
2497                            const uint8_t* src_uv,
2498                            uint8_t* dst_rgb565,
2499                            const struct YuvConstants* yuvconstants,
2500                            int width);
2501 void NV12ToRGB24Row_AVX2(const uint8_t* src_y,
2502                          const uint8_t* src_uv,
2503                          uint8_t* dst_rgb24,
2504                          const struct YuvConstants* yuvconstants,
2505                          int width);
2506 void NV21ToRGB24Row_AVX2(const uint8_t* src_y,
2507                          const uint8_t* src_vu,
2508                          uint8_t* dst_rgb24,
2509                          const struct YuvConstants* yuvconstants,
2510                          int width);
2511 void NV21ToYUV24Row_AVX2(const uint8_t* src_y,
2512                          const uint8_t* src_vu,
2513                          uint8_t* dst_yuv24,
2514                          int width);
2515 void NV12ToRGB565Row_AVX2(const uint8_t* src_y,
2516                           const uint8_t* src_uv,
2517                           uint8_t* dst_rgb565,
2518                           const struct YuvConstants* yuvconstants,
2519                           int width);
2520 void NV21ToARGBRow_SSSE3(const uint8_t* y_buf,
2521                          const uint8_t* vu_buf,
2522                          uint8_t* dst_argb,
2523                          const struct YuvConstants* yuvconstants,
2524                          int width);
2525 void NV21ToARGBRow_AVX2(const uint8_t* y_buf,
2526                         const uint8_t* vu_buf,
2527                         uint8_t* dst_argb,
2528                         const struct YuvConstants* yuvconstants,
2529                         int width);
2530 void YUY2ToARGBRow_SSSE3(const uint8_t* yuy2_buf,
2531                          uint8_t* dst_argb,
2532                          const struct YuvConstants* yuvconstants,
2533                          int width);
2534 void UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf,
2535                          uint8_t* dst_argb,
2536                          const struct YuvConstants* yuvconstants,
2537                          int width);
2538 void YUY2ToARGBRow_AVX2(const uint8_t* yuy2_buf,
2539                         uint8_t* dst_argb,
2540                         const struct YuvConstants* yuvconstants,
2541                         int width);
2542 void UYVYToARGBRow_AVX2(const uint8_t* uyvy_buf,
2543                         uint8_t* dst_argb,
2544                         const struct YuvConstants* yuvconstants,
2545                         int width);
2546 void I422ToRGBARow_SSSE3(const uint8_t* y_buf,
2547                          const uint8_t* u_buf,
2548                          const uint8_t* v_buf,
2549                          uint8_t* dst_rgba,
2550                          const struct YuvConstants* yuvconstants,
2551                          int width);
2552 void I422ToARGB4444Row_SSSE3(const uint8_t* src_y,
2553                              const uint8_t* src_u,
2554                              const uint8_t* src_v,
2555                              uint8_t* dst_argb4444,
2556                              const struct YuvConstants* yuvconstants,
2557                              int width);
2558 void I422ToARGB4444Row_AVX2(const uint8_t* src_y,
2559                             const uint8_t* src_u,
2560                             const uint8_t* src_v,
2561                             uint8_t* dst_argb4444,
2562                             const struct YuvConstants* yuvconstants,
2563                             int width);
2564 void I422ToARGB1555Row_SSSE3(const uint8_t* src_y,
2565                              const uint8_t* src_u,
2566                              const uint8_t* src_v,
2567                              uint8_t* dst_argb1555,
2568                              const struct YuvConstants* yuvconstants,
2569                              int width);
2570 void I422ToARGB1555Row_AVX2(const uint8_t* src_y,
2571                             const uint8_t* src_u,
2572                             const uint8_t* src_v,
2573                             uint8_t* dst_argb1555,
2574                             const struct YuvConstants* yuvconstants,
2575                             int width);
2576 void I422ToRGB565Row_SSSE3(const uint8_t* src_y,
2577                            const uint8_t* src_u,
2578                            const uint8_t* src_v,
2579                            uint8_t* dst_rgb565,
2580                            const struct YuvConstants* yuvconstants,
2581                            int width);
2582 void I422ToRGB565Row_AVX2(const uint8_t* src_y,
2583                           const uint8_t* src_u,
2584                           const uint8_t* src_v,
2585                           uint8_t* dst_rgb565,
2586                           const struct YuvConstants* yuvconstants,
2587                           int width);
2588 void I422ToRGB24Row_SSSE3(const uint8_t* y_buf,
2589                           const uint8_t* u_buf,
2590                           const uint8_t* v_buf,
2591                           uint8_t* dst_rgb24,
2592                           const struct YuvConstants* yuvconstants,
2593                           int width);
2594 void I422ToRGB24Row_AVX2(const uint8_t* src_y,
2595                          const uint8_t* src_u,
2596                          const uint8_t* src_v,
2597                          uint8_t* dst_rgb24,
2598                          const struct YuvConstants* yuvconstants,
2599                          int width);
2600 void I422ToARGBRow_Any_AVX2(const uint8_t* y_buf,
2601                             const uint8_t* u_buf,
2602                             const uint8_t* v_buf,
2603                             uint8_t* dst_ptr,
2604                             const struct YuvConstants* yuvconstants,
2605                             int width);
2606 void I422ToRGBARow_Any_AVX2(const uint8_t* y_buf,
2607                             const uint8_t* u_buf,
2608                             const uint8_t* v_buf,
2609                             uint8_t* dst_ptr,
2610                             const struct YuvConstants* yuvconstants,
2611                             int width);
2612 void I444ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
2613                              const uint8_t* u_buf,
2614                              const uint8_t* v_buf,
2615                              uint8_t* dst_ptr,
2616                              const struct YuvConstants* yuvconstants,
2617                              int width);
2618 void I444ToARGBRow_Any_AVX2(const uint8_t* y_buf,
2619                             const uint8_t* u_buf,
2620                             const uint8_t* v_buf,
2621                             uint8_t* dst_ptr,
2622                             const struct YuvConstants* yuvconstants,
2623                             int width);
2624 void I422ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
2625                              const uint8_t* u_buf,
2626                              const uint8_t* v_buf,
2627                              uint8_t* dst_ptr,
2628                              const struct YuvConstants* yuvconstants,
2629                              int width);
2630 void I422ToAR30Row_Any_SSSE3(const uint8_t* y_buf,
2631                              const uint8_t* u_buf,
2632                              const uint8_t* v_buf,
2633                              uint8_t* dst_ptr,
2634                              const struct YuvConstants* yuvconstants,
2635                              int width);
2636 void I210ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
2637                              const uint16_t* u_buf,
2638                              const uint16_t* v_buf,
2639                              uint8_t* dst_ptr,
2640                              const struct YuvConstants* yuvconstants,
2641                              int width);
2642 void I210ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
2643                              const uint16_t* u_buf,
2644                              const uint16_t* v_buf,
2645                              uint8_t* dst_ptr,
2646                              const struct YuvConstants* yuvconstants,
2647                              int width);
2648 void I422ToAR30Row_Any_AVX2(const uint8_t* y_buf,
2649                             const uint8_t* u_buf,
2650                             const uint8_t* v_buf,
2651                             uint8_t* dst_ptr,
2652                             const struct YuvConstants* yuvconstants,
2653                             int width);
2654 void I210ToARGBRow_Any_AVX2(const uint16_t* y_buf,
2655                             const uint16_t* u_buf,
2656                             const uint16_t* v_buf,
2657                             uint8_t* dst_ptr,
2658                             const struct YuvConstants* yuvconstants,
2659                             int width);
2660 void I210ToAR30Row_Any_AVX2(const uint16_t* y_buf,
2661                             const uint16_t* u_buf,
2662                             const uint16_t* v_buf,
2663                             uint8_t* dst_ptr,
2664                             const struct YuvConstants* yuvconstants,
2665                             int width);
2666 void I422AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf,
2667                                   const uint8_t* u_buf,
2668                                   const uint8_t* v_buf,
2669                                   const uint8_t* a_buf,
2670                                   uint8_t* dst_ptr,
2671                                   const struct YuvConstants* yuvconstants,
2672                                   int width);
2673 void I422AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf,
2674                                  const uint8_t* u_buf,
2675                                  const uint8_t* v_buf,
2676                                  const uint8_t* a_buf,
2677                                  uint8_t* dst_ptr,
2678                                  const struct YuvConstants* yuvconstants,
2679                                  int width);
2680 void NV12ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
2681                              const uint8_t* uv_buf,
2682                              uint8_t* dst_ptr,
2683                              const struct YuvConstants* yuvconstants,
2684                              int width);
2685 void NV12ToARGBRow_Any_AVX2(const uint8_t* y_buf,
2686                             const uint8_t* uv_buf,
2687                             uint8_t* dst_ptr,
2688                             const struct YuvConstants* yuvconstants,
2689                             int width);
2690 void NV21ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
2691                              const uint8_t* uv_buf,
2692                              uint8_t* dst_ptr,
2693                              const struct YuvConstants* yuvconstants,
2694                              int width);
2695 void NV21ToARGBRow_Any_AVX2(const uint8_t* y_buf,
2696                             const uint8_t* uv_buf,
2697                             uint8_t* dst_ptr,
2698                             const struct YuvConstants* yuvconstants,
2699                             int width);
2700 void NV12ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
2701                               const uint8_t* uv_buf,
2702                               uint8_t* dst_ptr,
2703                               const struct YuvConstants* yuvconstants,
2704                               int width);
2705 void NV21ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
2706                               const uint8_t* uv_buf,
2707                               uint8_t* dst_ptr,
2708                               const struct YuvConstants* yuvconstants,
2709                               int width);
2710 void NV12ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
2711                              const uint8_t* uv_buf,
2712                              uint8_t* dst_ptr,
2713                              const struct YuvConstants* yuvconstants,
2714                              int width);
2715 void NV21ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
2716                              const uint8_t* uv_buf,
2717                              uint8_t* dst_ptr,
2718                              const struct YuvConstants* yuvconstants,
2719                              int width);
2720 void NV21ToYUV24Row_Any_AVX2(const uint8_t* src_y,
2721                              const uint8_t* src_vu,
2722                              uint8_t* dst_yuv24,
2723                              int width);
2724 void NV12ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
2725                                const uint8_t* uv_buf,
2726                                uint8_t* dst_ptr,
2727                                const struct YuvConstants* yuvconstants,
2728                                int width);
2729 void NV12ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
2730                               const uint8_t* uv_buf,
2731                               uint8_t* dst_ptr,
2732                               const struct YuvConstants* yuvconstants,
2733                               int width);
2734 void YUY2ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2735                              uint8_t* dst_ptr,
2736                              const struct YuvConstants* yuvconstants,
2737                              int width);
2738 void UYVYToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2739                              uint8_t* dst_ptr,
2740                              const struct YuvConstants* yuvconstants,
2741                              int width);
2742 void YUY2ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2743                             uint8_t* dst_ptr,
2744                             const struct YuvConstants* yuvconstants,
2745                             int width);
2746 void UYVYToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2747                             uint8_t* dst_ptr,
2748                             const struct YuvConstants* yuvconstants,
2749                             int width);
2750 void I422ToRGBARow_Any_SSSE3(const uint8_t* y_buf,
2751                              const uint8_t* u_buf,
2752                              const uint8_t* v_buf,
2753                              uint8_t* dst_ptr,
2754                              const struct YuvConstants* yuvconstants,
2755                              int width);
2756 void I422ToARGB4444Row_Any_SSSE3(const uint8_t* y_buf,
2757                                  const uint8_t* u_buf,
2758                                  const uint8_t* v_buf,
2759                                  uint8_t* dst_ptr,
2760                                  const struct YuvConstants* yuvconstants,
2761                                  int width);
2762 void I422ToARGB4444Row_Any_AVX2(const uint8_t* y_buf,
2763                                 const uint8_t* u_buf,
2764                                 const uint8_t* v_buf,
2765                                 uint8_t* dst_ptr,
2766                                 const struct YuvConstants* yuvconstants,
2767                                 int width);
2768 void I422ToARGB1555Row_Any_SSSE3(const uint8_t* y_buf,
2769                                  const uint8_t* u_buf,
2770                                  const uint8_t* v_buf,
2771                                  uint8_t* dst_ptr,
2772                                  const struct YuvConstants* yuvconstants,
2773                                  int width);
2774 void I422ToARGB1555Row_Any_AVX2(const uint8_t* y_buf,
2775                                 const uint8_t* u_buf,
2776                                 const uint8_t* v_buf,
2777                                 uint8_t* dst_ptr,
2778                                 const struct YuvConstants* yuvconstants,
2779                                 int width);
2780 void I422ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
2781                                const uint8_t* u_buf,
2782                                const uint8_t* v_buf,
2783                                uint8_t* dst_ptr,
2784                                const struct YuvConstants* yuvconstants,
2785                                int width);
2786 void I422ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
2787                               const uint8_t* u_buf,
2788                               const uint8_t* v_buf,
2789                               uint8_t* dst_ptr,
2790                               const struct YuvConstants* yuvconstants,
2791                               int width);
2792 void I422ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
2793                               const uint8_t* u_buf,
2794                               const uint8_t* v_buf,
2795                               uint8_t* dst_ptr,
2796                               const struct YuvConstants* yuvconstants,
2797                               int width);
2798 void I422ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
2799                              const uint8_t* u_buf,
2800                              const uint8_t* v_buf,
2801                              uint8_t* dst_ptr,
2802                              const struct YuvConstants* yuvconstants,
2803                              int width);
2804 
2805 void I400ToARGBRow_C(const uint8_t* src_y,
2806                      uint8_t* rgb_buf,
2807                      const struct YuvConstants* yuvconstants,
2808                      int width);
2809 void I400ToARGBRow_SSE2(const uint8_t* y_buf,
2810                         uint8_t* dst_argb,
2811                         const struct YuvConstants* yuvconstants,
2812                         int width);
2813 void I400ToARGBRow_AVX2(const uint8_t* y_buf,
2814                         uint8_t* dst_argb,
2815                         const struct YuvConstants* yuvconstants,
2816                         int width);
2817 void I400ToARGBRow_NEON(const uint8_t* src_y,
2818                         uint8_t* dst_argb,
2819                         const struct YuvConstants* yuvconstants,
2820                         int width);
2821 void I400ToARGBRow_MSA(const uint8_t* src_y,
2822                        uint8_t* dst_argb,
2823                        const struct YuvConstants* yuvconstants,
2824                        int width);
2825 void I400ToARGBRow_MMI(const uint8_t* src_y,
2826                        uint8_t* dst_argb,
2827                        const struct YuvConstants* yuvconstants,
2828                        int width);
2829 void I400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2830                             uint8_t* dst_ptr,
2831                             const struct YuvConstants* yuvconstants,
2832                             int width);
2833 void I400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2834                             uint8_t* dst_ptr,
2835                             const struct YuvConstants* yuvconstants,
2836                             int width);
2837 void I400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2838                             uint8_t* dst_ptr,
2839                             const struct YuvConstants* yuvconstants,
2840                             int width);
2841 void I400ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2842                            uint8_t* dst_ptr,
2843                            const struct YuvConstants* yuvconstants,
2844                            int width);
2845 void I400ToARGBRow_Any_MMI(const uint8_t* src_ptr,
2846                            uint8_t* dst_ptr,
2847                            const struct YuvConstants* yuvconstants,
2848                            int width);
2849 
2850 // ARGB preattenuated alpha blend.
2851 void ARGBBlendRow_SSSE3(const uint8_t* src_argb0,
2852                         const uint8_t* src_argb1,
2853                         uint8_t* dst_argb,
2854                         int width);
2855 void ARGBBlendRow_NEON(const uint8_t* src_argb0,
2856                        const uint8_t* src_argb1,
2857                        uint8_t* dst_argb,
2858                        int width);
2859 void ARGBBlendRow_MSA(const uint8_t* src_argb0,
2860                       const uint8_t* src_argb1,
2861                       uint8_t* dst_argb,
2862                       int width);
2863 void ARGBBlendRow_MMI(const uint8_t* src_argb0,
2864                       const uint8_t* src_argb1,
2865                       uint8_t* dst_argb,
2866                       int width);
2867 void ARGBBlendRow_C(const uint8_t* src_argb0,
2868                     const uint8_t* src_argb1,
2869                     uint8_t* dst_argb,
2870                     int width);
2871 
2872 // Unattenuated planar alpha blend.
2873 void BlendPlaneRow_SSSE3(const uint8_t* src0,
2874                          const uint8_t* src1,
2875                          const uint8_t* alpha,
2876                          uint8_t* dst,
2877                          int width);
2878 void BlendPlaneRow_Any_SSSE3(const uint8_t* y_buf,
2879                              const uint8_t* u_buf,
2880                              const uint8_t* v_buf,
2881                              uint8_t* dst_ptr,
2882                              int width);
2883 void BlendPlaneRow_AVX2(const uint8_t* src0,
2884                         const uint8_t* src1,
2885                         const uint8_t* alpha,
2886                         uint8_t* dst,
2887                         int width);
2888 void BlendPlaneRow_Any_AVX2(const uint8_t* y_buf,
2889                             const uint8_t* u_buf,
2890                             const uint8_t* v_buf,
2891                             uint8_t* dst_ptr,
2892                             int width);
2893 void BlendPlaneRow_MMI(const uint8_t* src0,
2894                        const uint8_t* src1,
2895                        const uint8_t* alpha,
2896                        uint8_t* dst,
2897                        int width);
2898 void BlendPlaneRow_Any_MMI(const uint8_t* y_buf,
2899                            const uint8_t* u_buf,
2900                            const uint8_t* v_buf,
2901                            uint8_t* dst_ptr,
2902                            int width);
2903 void BlendPlaneRow_C(const uint8_t* src0,
2904                      const uint8_t* src1,
2905                      const uint8_t* alpha,
2906                      uint8_t* dst,
2907                      int width);
2908 
2909 // ARGB multiply images. Same API as Blend, but these require
2910 // pointer and width alignment for SSE2.
2911 void ARGBMultiplyRow_C(const uint8_t* src_argb0,
2912                        const uint8_t* src_argb1,
2913                        uint8_t* dst_argb,
2914                        int width);
2915 void ARGBMultiplyRow_SSE2(const uint8_t* src_argb0,
2916                           const uint8_t* src_argb1,
2917                           uint8_t* dst_argb,
2918                           int width);
2919 void ARGBMultiplyRow_Any_SSE2(const uint8_t* y_buf,
2920                               const uint8_t* uv_buf,
2921                               uint8_t* dst_ptr,
2922                               int width);
2923 void ARGBMultiplyRow_AVX2(const uint8_t* src_argb0,
2924                           const uint8_t* src_argb1,
2925                           uint8_t* dst_argb,
2926                           int width);
2927 void ARGBMultiplyRow_Any_AVX2(const uint8_t* y_buf,
2928                               const uint8_t* uv_buf,
2929                               uint8_t* dst_ptr,
2930                               int width);
2931 void ARGBMultiplyRow_NEON(const uint8_t* src_argb0,
2932                           const uint8_t* src_argb1,
2933                           uint8_t* dst_argb,
2934                           int width);
2935 void ARGBMultiplyRow_Any_NEON(const uint8_t* y_buf,
2936                               const uint8_t* uv_buf,
2937                               uint8_t* dst_ptr,
2938                               int width);
2939 void ARGBMultiplyRow_MSA(const uint8_t* src_argb0,
2940                          const uint8_t* src_argb1,
2941                          uint8_t* dst_argb,
2942                          int width);
2943 void ARGBMultiplyRow_Any_MSA(const uint8_t* y_buf,
2944                              const uint8_t* uv_buf,
2945                              uint8_t* dst_ptr,
2946                              int width);
2947 void ARGBMultiplyRow_MMI(const uint8_t* src_argb0,
2948                          const uint8_t* src_argb1,
2949                          uint8_t* dst_argb,
2950                          int width);
2951 void ARGBMultiplyRow_Any_MMI(const uint8_t* y_buf,
2952                              const uint8_t* uv_buf,
2953                              uint8_t* dst_ptr,
2954                              int width);
2955 
2956 // ARGB add images.
2957 void ARGBAddRow_C(const uint8_t* src_argb0,
2958                   const uint8_t* src_argb1,
2959                   uint8_t* dst_argb,
2960                   int width);
2961 void ARGBAddRow_SSE2(const uint8_t* src_argb0,
2962                      const uint8_t* src_argb1,
2963                      uint8_t* dst_argb,
2964                      int width);
2965 void ARGBAddRow_Any_SSE2(const uint8_t* y_buf,
2966                          const uint8_t* uv_buf,
2967                          uint8_t* dst_ptr,
2968                          int width);
2969 void ARGBAddRow_AVX2(const uint8_t* src_argb0,
2970                      const uint8_t* src_argb1,
2971                      uint8_t* dst_argb,
2972                      int width);
2973 void ARGBAddRow_Any_AVX2(const uint8_t* y_buf,
2974                          const uint8_t* uv_buf,
2975                          uint8_t* dst_ptr,
2976                          int width);
2977 void ARGBAddRow_NEON(const uint8_t* src_argb0,
2978                      const uint8_t* src_argb1,
2979                      uint8_t* dst_argb,
2980                      int width);
2981 void ARGBAddRow_Any_NEON(const uint8_t* y_buf,
2982                          const uint8_t* uv_buf,
2983                          uint8_t* dst_ptr,
2984                          int width);
2985 void ARGBAddRow_MSA(const uint8_t* src_argb0,
2986                     const uint8_t* src_argb1,
2987                     uint8_t* dst_argb,
2988                     int width);
2989 void ARGBAddRow_Any_MSA(const uint8_t* y_buf,
2990                         const uint8_t* uv_buf,
2991                         uint8_t* dst_ptr,
2992                         int width);
2993 void ARGBAddRow_MMI(const uint8_t* src_argb0,
2994                     const uint8_t* src_argb1,
2995                     uint8_t* dst_argb,
2996                     int width);
2997 void ARGBAddRow_Any_MMI(const uint8_t* y_buf,
2998                         const uint8_t* uv_buf,
2999                         uint8_t* dst_ptr,
3000                         int width);
3001 
3002 // ARGB subtract images. Same API as Blend, but these require
3003 // pointer and width alignment for SSE2.
3004 void ARGBSubtractRow_C(const uint8_t* src_argb0,
3005                        const uint8_t* src_argb1,
3006                        uint8_t* dst_argb,
3007                        int width);
3008 void ARGBSubtractRow_SSE2(const uint8_t* src_argb0,
3009                           const uint8_t* src_argb1,
3010                           uint8_t* dst_argb,
3011                           int width);
3012 void ARGBSubtractRow_Any_SSE2(const uint8_t* y_buf,
3013                               const uint8_t* uv_buf,
3014                               uint8_t* dst_ptr,
3015                               int width);
3016 void ARGBSubtractRow_AVX2(const uint8_t* src_argb0,
3017                           const uint8_t* src_argb1,
3018                           uint8_t* dst_argb,
3019                           int width);
3020 void ARGBSubtractRow_Any_AVX2(const uint8_t* y_buf,
3021                               const uint8_t* uv_buf,
3022                               uint8_t* dst_ptr,
3023                               int width);
3024 void ARGBSubtractRow_NEON(const uint8_t* src_argb0,
3025                           const uint8_t* src_argb1,
3026                           uint8_t* dst_argb,
3027                           int width);
3028 void ARGBSubtractRow_Any_NEON(const uint8_t* y_buf,
3029                               const uint8_t* uv_buf,
3030                               uint8_t* dst_ptr,
3031                               int width);
3032 void ARGBSubtractRow_MSA(const uint8_t* src_argb0,
3033                          const uint8_t* src_argb1,
3034                          uint8_t* dst_argb,
3035                          int width);
3036 void ARGBSubtractRow_Any_MSA(const uint8_t* y_buf,
3037                              const uint8_t* uv_buf,
3038                              uint8_t* dst_ptr,
3039                              int width);
3040 void ARGBSubtractRow_MMI(const uint8_t* src_argb0,
3041                          const uint8_t* src_argb1,
3042                          uint8_t* dst_argb,
3043                          int width);
3044 void ARGBSubtractRow_Any_MMI(const uint8_t* y_buf,
3045                              const uint8_t* uv_buf,
3046                              uint8_t* dst_ptr,
3047                              int width);
3048 
3049 void ARGBToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
3050                               uint8_t* dst_ptr,
3051                               int width);
3052 void ARGBToRAWRow_Any_SSSE3(const uint8_t* src_ptr,
3053                             uint8_t* dst_ptr,
3054                             int width);
3055 void ARGBToRGB565Row_Any_SSE2(const uint8_t* src_ptr,
3056                               uint8_t* dst_ptr,
3057                               int width);
3058 void ARGBToARGB1555Row_Any_SSE2(const uint8_t* src_ptr,
3059                                 uint8_t* dst_ptr,
3060                                 int width);
3061 void ARGBToARGB4444Row_Any_SSE2(const uint8_t* src_ptr,
3062                                 uint8_t* dst_ptr,
3063                                 int width);
3064 void ABGRToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
3065                              uint8_t* dst_ptr,
3066                              int width);
3067 void ARGBToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
3068                              uint8_t* dst_ptr,
3069                              int width);
3070 void ARGBToRAWRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3071 void ARGBToRGB24Row_Any_AVX2(const uint8_t* src_ptr,
3072                              uint8_t* dst_ptr,
3073                              int width);
3074 void ARGBToRGB24Row_Any_AVX512VBMI(const uint8_t* src_ptr,
3075                                    uint8_t* dst_ptr,
3076                                    int width);
3077 void ARGBToRGB565DitherRow_Any_SSE2(const uint8_t* src_ptr,
3078                                     uint8_t* dst_ptr,
3079                                     const uint32_t param,
3080                                     int width);
3081 void ARGBToRGB565DitherRow_Any_AVX2(const uint8_t* src_ptr,
3082                                     uint8_t* dst_ptr,
3083                                     const uint32_t param,
3084                                     int width);
3085 
3086 void ARGBToRGB565Row_Any_AVX2(const uint8_t* src_ptr,
3087                               uint8_t* dst_ptr,
3088                               int width);
3089 void ARGBToARGB1555Row_Any_AVX2(const uint8_t* src_ptr,
3090                                 uint8_t* dst_ptr,
3091                                 int width);
3092 void ARGBToARGB4444Row_Any_AVX2(const uint8_t* src_ptr,
3093                                 uint8_t* dst_ptr,
3094                                 int width);
3095 void ABGRToAR30Row_Any_AVX2(const uint8_t* src_ptr,
3096                             uint8_t* dst_ptr,
3097                             int width);
3098 void ARGBToAR30Row_Any_AVX2(const uint8_t* src_ptr,
3099                             uint8_t* dst_ptr,
3100                             int width);
3101 
3102 void ARGBToRGB24Row_Any_NEON(const uint8_t* src_ptr,
3103                              uint8_t* dst_ptr,
3104                              int width);
3105 void ARGBToRAWRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3106 void ARGBToRGB565Row_Any_NEON(const uint8_t* src_ptr,
3107                               uint8_t* dst_ptr,
3108                               int width);
3109 void ARGBToARGB1555Row_Any_NEON(const uint8_t* src_ptr,
3110                                 uint8_t* dst_ptr,
3111                                 int width);
3112 void ARGBToARGB4444Row_Any_NEON(const uint8_t* src_ptr,
3113                                 uint8_t* dst_ptr,
3114                                 int width);
3115 void ARGBToRGB565DitherRow_Any_NEON(const uint8_t* src_ptr,
3116                                     uint8_t* dst_ptr,
3117                                     const uint32_t param,
3118                                     int width);
3119 void ARGBToRGB24Row_Any_MSA(const uint8_t* src_ptr,
3120                             uint8_t* dst_ptr,
3121                             int width);
3122 void ARGBToRAWRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3123 void ARGBToRGB565Row_Any_MSA(const uint8_t* src_ptr,
3124                              uint8_t* dst_ptr,
3125                              int width);
3126 void ARGBToARGB1555Row_Any_MSA(const uint8_t* src_ptr,
3127                                uint8_t* dst_ptr,
3128                                int width);
3129 void ARGBToARGB4444Row_Any_MSA(const uint8_t* src_ptr,
3130                                uint8_t* dst_ptr,
3131                                int width);
3132 void ARGBToRGB565DitherRow_Any_MSA(const uint8_t* src_ptr,
3133                                    uint8_t* dst_ptr,
3134                                    const uint32_t param,
3135                                    int width);
3136 
3137 void ARGBToRGB24Row_Any_MMI(const uint8_t* src_ptr,
3138                             uint8_t* dst_ptr,
3139                             int width);
3140 void ARGBToRAWRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3141 void ARGBToRGB565Row_Any_MMI(const uint8_t* src_ptr,
3142                              uint8_t* dst_ptr,
3143                              int width);
3144 void ARGBToARGB1555Row_Any_MMI(const uint8_t* src_ptr,
3145                                uint8_t* dst_ptr,
3146                                int width);
3147 void ARGBToARGB4444Row_Any_MMI(const uint8_t* src_ptr,
3148                                uint8_t* dst_ptr,
3149                                int width);
3150 void ARGBToRGB565DitherRow_Any_MMI(const uint8_t* src_ptr,
3151                                    uint8_t* dst_ptr,
3152                                    const uint32_t param,
3153                                    int width);
3154 
3155 void I444ToARGBRow_Any_NEON(const uint8_t* y_buf,
3156                             const uint8_t* u_buf,
3157                             const uint8_t* v_buf,
3158                             uint8_t* dst_ptr,
3159                             const struct YuvConstants* yuvconstants,
3160                             int width);
3161 void I422ToARGBRow_Any_NEON(const uint8_t* y_buf,
3162                             const uint8_t* u_buf,
3163                             const uint8_t* v_buf,
3164                             uint8_t* dst_ptr,
3165                             const struct YuvConstants* yuvconstants,
3166                             int width);
3167 void I422AlphaToARGBRow_Any_NEON(const uint8_t* y_buf,
3168                                  const uint8_t* u_buf,
3169                                  const uint8_t* v_buf,
3170                                  const uint8_t* a_buf,
3171                                  uint8_t* dst_ptr,
3172                                  const struct YuvConstants* yuvconstants,
3173                                  int width);
3174 void I422ToRGBARow_Any_NEON(const uint8_t* y_buf,
3175                             const uint8_t* u_buf,
3176                             const uint8_t* v_buf,
3177                             uint8_t* dst_ptr,
3178                             const struct YuvConstants* yuvconstants,
3179                             int width);
3180 void I422ToRGB24Row_Any_NEON(const uint8_t* y_buf,
3181                              const uint8_t* u_buf,
3182                              const uint8_t* v_buf,
3183                              uint8_t* dst_ptr,
3184                              const struct YuvConstants* yuvconstants,
3185                              int width);
3186 void I422ToARGB4444Row_Any_NEON(const uint8_t* y_buf,
3187                                 const uint8_t* u_buf,
3188                                 const uint8_t* v_buf,
3189                                 uint8_t* dst_ptr,
3190                                 const struct YuvConstants* yuvconstants,
3191                                 int width);
3192 void I422ToARGB1555Row_Any_NEON(const uint8_t* y_buf,
3193                                 const uint8_t* u_buf,
3194                                 const uint8_t* v_buf,
3195                                 uint8_t* dst_ptr,
3196                                 const struct YuvConstants* yuvconstants,
3197                                 int width);
3198 void I422ToRGB565Row_Any_NEON(const uint8_t* y_buf,
3199                               const uint8_t* u_buf,
3200                               const uint8_t* v_buf,
3201                               uint8_t* dst_ptr,
3202                               const struct YuvConstants* yuvconstants,
3203                               int width);
3204 void NV12ToARGBRow_Any_NEON(const uint8_t* y_buf,
3205                             const uint8_t* uv_buf,
3206                             uint8_t* dst_ptr,
3207                             const struct YuvConstants* yuvconstants,
3208                             int width);
3209 void NV21ToARGBRow_Any_NEON(const uint8_t* y_buf,
3210                             const uint8_t* uv_buf,
3211                             uint8_t* dst_ptr,
3212                             const struct YuvConstants* yuvconstants,
3213                             int width);
3214 void NV12ToRGB24Row_Any_NEON(const uint8_t* y_buf,
3215                              const uint8_t* uv_buf,
3216                              uint8_t* dst_ptr,
3217                              const struct YuvConstants* yuvconstants,
3218                              int width);
3219 void NV21ToRGB24Row_Any_NEON(const uint8_t* y_buf,
3220                              const uint8_t* uv_buf,
3221                              uint8_t* dst_ptr,
3222                              const struct YuvConstants* yuvconstants,
3223                              int width);
3224 void NV21ToYUV24Row_Any_NEON(const uint8_t* src_y,
3225                              const uint8_t* src_vu,
3226                              uint8_t* dst_yuv24,
3227                              int width);
3228 void NV12ToRGB565Row_Any_NEON(const uint8_t* y_buf,
3229                               const uint8_t* uv_buf,
3230                               uint8_t* dst_ptr,
3231                               const struct YuvConstants* yuvconstants,
3232                               int width);
3233 void YUY2ToARGBRow_Any_NEON(const uint8_t* src_ptr,
3234                             uint8_t* dst_ptr,
3235                             const struct YuvConstants* yuvconstants,
3236                             int width);
3237 void UYVYToARGBRow_Any_NEON(const uint8_t* src_ptr,
3238                             uint8_t* dst_ptr,
3239                             const struct YuvConstants* yuvconstants,
3240                             int width);
3241 void I444ToARGBRow_Any_MSA(const uint8_t* y_buf,
3242                            const uint8_t* u_buf,
3243                            const uint8_t* v_buf,
3244                            uint8_t* dst_ptr,
3245                            const struct YuvConstants* yuvconstants,
3246                            int width);
3247 void I444ToARGBRow_Any_MMI(const uint8_t* y_buf,
3248                            const uint8_t* u_buf,
3249                            const uint8_t* v_buf,
3250                            uint8_t* dst_ptr,
3251                            const struct YuvConstants* yuvconstants,
3252                            int width);
3253 void I422ToARGBRow_Any_MSA(const uint8_t* y_buf,
3254                            const uint8_t* u_buf,
3255                            const uint8_t* v_buf,
3256                            uint8_t* dst_ptr,
3257                            const struct YuvConstants* yuvconstants,
3258                            int width);
3259 void I422ToARGBRow_Any_MMI(const uint8_t* y_buf,
3260                            const uint8_t* u_buf,
3261                            const uint8_t* v_buf,
3262                            uint8_t* dst_ptr,
3263                            const struct YuvConstants* yuvconstants,
3264                            int width);
3265 void I422ToRGBARow_Any_MSA(const uint8_t* y_buf,
3266                            const uint8_t* u_buf,
3267                            const uint8_t* v_buf,
3268                            uint8_t* dst_ptr,
3269                            const struct YuvConstants* yuvconstants,
3270                            int width);
3271 void I422AlphaToARGBRow_Any_MSA(const uint8_t* y_buf,
3272                                 const uint8_t* u_buf,
3273                                 const uint8_t* v_buf,
3274                                 const uint8_t* a_buf,
3275                                 uint8_t* dst_ptr,
3276                                 const struct YuvConstants* yuvconstants,
3277                                 int width);
3278 void I422ToRGB24Row_Any_MSA(const uint8_t* y_buf,
3279                             const uint8_t* u_buf,
3280                             const uint8_t* v_buf,
3281                             uint8_t* dst_ptr,
3282                             const struct YuvConstants* yuvconstants,
3283                             int width);
3284 void I422ToRGB565Row_Any_MSA(const uint8_t* y_buf,
3285                              const uint8_t* u_buf,
3286                              const uint8_t* v_buf,
3287                              uint8_t* dst_ptr,
3288                              const struct YuvConstants* yuvconstants,
3289                              int width);
3290 void I422ToARGB4444Row_Any_MSA(const uint8_t* y_buf,
3291                                const uint8_t* u_buf,
3292                                const uint8_t* v_buf,
3293                                uint8_t* dst_ptr,
3294                                const struct YuvConstants* yuvconstants,
3295                                int width);
3296 void I422ToARGB1555Row_Any_MSA(const uint8_t* y_buf,
3297                                const uint8_t* u_buf,
3298                                const uint8_t* v_buf,
3299                                uint8_t* dst_ptr,
3300                                const struct YuvConstants* yuvconstants,
3301                                int width);
3302 void NV12ToARGBRow_Any_MSA(const uint8_t* y_buf,
3303                            const uint8_t* uv_buf,
3304                            uint8_t* dst_ptr,
3305                            const struct YuvConstants* yuvconstants,
3306                            int width);
3307 void NV12ToRGB565Row_Any_MSA(const uint8_t* y_buf,
3308                              const uint8_t* uv_buf,
3309                              uint8_t* dst_ptr,
3310                              const struct YuvConstants* yuvconstants,
3311                              int width);
3312 void NV21ToARGBRow_Any_MSA(const uint8_t* y_buf,
3313                            const uint8_t* uv_buf,
3314                            uint8_t* dst_ptr,
3315                            const struct YuvConstants* yuvconstants,
3316                            int width);
3317 void YUY2ToARGBRow_Any_MSA(const uint8_t* src_ptr,
3318                            uint8_t* dst_ptr,
3319                            const struct YuvConstants* yuvconstants,
3320                            int width);
3321 void UYVYToARGBRow_Any_MSA(const uint8_t* src_ptr,
3322                            uint8_t* dst_ptr,
3323                            const struct YuvConstants* yuvconstants,
3324                            int width);
3325 
3326 void YUY2ToYRow_AVX2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3327 void YUY2ToUVRow_AVX2(const uint8_t* src_yuy2,
3328                       int stride_yuy2,
3329                       uint8_t* dst_u,
3330                       uint8_t* dst_v,
3331                       int width);
3332 void YUY2ToUV422Row_AVX2(const uint8_t* src_yuy2,
3333                          uint8_t* dst_u,
3334                          uint8_t* dst_v,
3335                          int width);
3336 void YUY2ToYRow_SSE2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3337 void YUY2ToUVRow_SSE2(const uint8_t* src_yuy2,
3338                       int stride_yuy2,
3339                       uint8_t* dst_u,
3340                       uint8_t* dst_v,
3341                       int width);
3342 void YUY2ToUV422Row_SSE2(const uint8_t* src_yuy2,
3343                          uint8_t* dst_u,
3344                          uint8_t* dst_v,
3345                          int width);
3346 void YUY2ToYRow_NEON(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3347 void YUY2ToUVRow_NEON(const uint8_t* src_yuy2,
3348                       int stride_yuy2,
3349                       uint8_t* dst_u,
3350                       uint8_t* dst_v,
3351                       int width);
3352 void YUY2ToUV422Row_NEON(const uint8_t* src_yuy2,
3353                          uint8_t* dst_u,
3354                          uint8_t* dst_v,
3355                          int width);
3356 void YUY2ToYRow_MSA(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3357 void YUY2ToYRow_MMI(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3358 void YUY2ToUVRow_MSA(const uint8_t* src_yuy2,
3359                      int src_stride_yuy2,
3360                      uint8_t* dst_u,
3361                      uint8_t* dst_v,
3362                      int width);
3363 void YUY2ToUVRow_MMI(const uint8_t* src_yuy2,
3364                      int src_stride_yuy2,
3365                      uint8_t* dst_u,
3366                      uint8_t* dst_v,
3367                      int width);
3368 void YUY2ToUV422Row_MSA(const uint8_t* src_yuy2,
3369                         uint8_t* dst_u,
3370                         uint8_t* dst_v,
3371                         int width);
3372 void YUY2ToUV422Row_MMI(const uint8_t* src_yuy2,
3373                         uint8_t* dst_u,
3374                         uint8_t* dst_v,
3375                         int width);
3376 void YUY2ToYRow_C(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
3377 void YUY2ToUVRow_C(const uint8_t* src_yuy2,
3378                    int src_stride_yuy2,
3379                    uint8_t* dst_u,
3380                    uint8_t* dst_v,
3381                    int width);
3382 void YUY2ToUV422Row_C(const uint8_t* src_yuy2,
3383                       uint8_t* dst_u,
3384                       uint8_t* dst_v,
3385                       int width);
3386 void YUY2ToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3387 void YUY2ToUVRow_Any_AVX2(const uint8_t* src_ptr,
3388                           int src_stride_ptr,
3389                           uint8_t* dst_u,
3390                           uint8_t* dst_v,
3391                           int width);
3392 void YUY2ToUV422Row_Any_AVX2(const uint8_t* src_ptr,
3393                              uint8_t* dst_u,
3394                              uint8_t* dst_v,
3395                              int width);
3396 void YUY2ToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3397 void YUY2ToUVRow_Any_SSE2(const uint8_t* src_ptr,
3398                           int src_stride_ptr,
3399                           uint8_t* dst_u,
3400                           uint8_t* dst_v,
3401                           int width);
3402 void YUY2ToUV422Row_Any_SSE2(const uint8_t* src_ptr,
3403                              uint8_t* dst_u,
3404                              uint8_t* dst_v,
3405                              int width);
3406 void YUY2ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3407 void YUY2ToUVRow_Any_NEON(const uint8_t* src_ptr,
3408                           int src_stride_ptr,
3409                           uint8_t* dst_u,
3410                           uint8_t* dst_v,
3411                           int width);
3412 void YUY2ToUV422Row_Any_NEON(const uint8_t* src_ptr,
3413                              uint8_t* dst_u,
3414                              uint8_t* dst_v,
3415                              int width);
3416 void YUY2ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3417 void YUY2ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3418 void YUY2ToUVRow_Any_MSA(const uint8_t* src_ptr,
3419                          int src_stride_ptr,
3420                          uint8_t* dst_u,
3421                          uint8_t* dst_v,
3422                          int width);
3423 void YUY2ToUVRow_Any_MMI(const uint8_t* src_ptr,
3424                          int src_stride_ptr,
3425                          uint8_t* dst_u,
3426                          uint8_t* dst_v,
3427                          int width);
3428 void YUY2ToUV422Row_Any_MSA(const uint8_t* src_ptr,
3429                             uint8_t* dst_u,
3430                             uint8_t* dst_v,
3431                             int width);
3432 void YUY2ToUV422Row_Any_MMI(const uint8_t* src_ptr,
3433                             uint8_t* dst_u,
3434                             uint8_t* dst_v,
3435                             int width);
3436 void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3437 void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
3438                       int stride_uyvy,
3439                       uint8_t* dst_u,
3440                       uint8_t* dst_v,
3441                       int width);
3442 void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
3443                          uint8_t* dst_u,
3444                          uint8_t* dst_v,
3445                          int width);
3446 void UYVYToYRow_SSE2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3447 void UYVYToUVRow_SSE2(const uint8_t* src_uyvy,
3448                       int stride_uyvy,
3449                       uint8_t* dst_u,
3450                       uint8_t* dst_v,
3451                       int width);
3452 void UYVYToUV422Row_SSE2(const uint8_t* src_uyvy,
3453                          uint8_t* dst_u,
3454                          uint8_t* dst_v,
3455                          int width);
3456 void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3457 void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
3458                       int stride_uyvy,
3459                       uint8_t* dst_u,
3460                       uint8_t* dst_v,
3461                       int width);
3462 void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
3463                          uint8_t* dst_u,
3464                          uint8_t* dst_v,
3465                          int width);
3466 void UYVYToYRow_NEON(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3467 void UYVYToUVRow_NEON(const uint8_t* src_uyvy,
3468                       int stride_uyvy,
3469                       uint8_t* dst_u,
3470                       uint8_t* dst_v,
3471                       int width);
3472 void UYVYToUV422Row_NEON(const uint8_t* src_uyvy,
3473                          uint8_t* dst_u,
3474                          uint8_t* dst_v,
3475                          int width);
3476 void UYVYToYRow_MSA(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3477 void UYVYToYRow_MMI(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3478 void UYVYToUVRow_MSA(const uint8_t* src_uyvy,
3479                      int src_stride_uyvy,
3480                      uint8_t* dst_u,
3481                      uint8_t* dst_v,
3482                      int width);
3483 void UYVYToUVRow_MMI(const uint8_t* src_uyvy,
3484                      int src_stride_uyvy,
3485                      uint8_t* dst_u,
3486                      uint8_t* dst_v,
3487                      int width);
3488 void UYVYToUV422Row_MSA(const uint8_t* src_uyvy,
3489                         uint8_t* dst_u,
3490                         uint8_t* dst_v,
3491                         int width);
3492 void UYVYToUV422Row_MMI(const uint8_t* src_uyvy,
3493                         uint8_t* dst_u,
3494                         uint8_t* dst_v,
3495                         int width);
3496 
3497 void UYVYToYRow_C(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
3498 void UYVYToUVRow_C(const uint8_t* src_uyvy,
3499                    int src_stride_uyvy,
3500                    uint8_t* dst_u,
3501                    uint8_t* dst_v,
3502                    int width);
3503 void UYVYToUV422Row_C(const uint8_t* src_uyvy,
3504                       uint8_t* dst_u,
3505                       uint8_t* dst_v,
3506                       int width);
3507 void UYVYToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3508 void UYVYToUVRow_Any_AVX2(const uint8_t* src_ptr,
3509                           int src_stride_ptr,
3510                           uint8_t* dst_u,
3511                           uint8_t* dst_v,
3512                           int width);
3513 void UYVYToUV422Row_Any_AVX2(const uint8_t* src_ptr,
3514                              uint8_t* dst_u,
3515                              uint8_t* dst_v,
3516                              int width);
3517 void UYVYToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3518 void UYVYToUVRow_Any_SSE2(const uint8_t* src_ptr,
3519                           int src_stride_ptr,
3520                           uint8_t* dst_u,
3521                           uint8_t* dst_v,
3522                           int width);
3523 void UYVYToUV422Row_Any_SSE2(const uint8_t* src_ptr,
3524                              uint8_t* dst_u,
3525                              uint8_t* dst_v,
3526                              int width);
3527 void UYVYToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3528 void UYVYToUVRow_Any_NEON(const uint8_t* src_ptr,
3529                           int src_stride_ptr,
3530                           uint8_t* dst_u,
3531                           uint8_t* dst_v,
3532                           int width);
3533 void UYVYToUV422Row_Any_NEON(const uint8_t* src_ptr,
3534                              uint8_t* dst_u,
3535                              uint8_t* dst_v,
3536                              int width);
3537 void UYVYToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3538 void UYVYToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3539 void UYVYToUVRow_Any_MSA(const uint8_t* src_ptr,
3540                          int src_stride_ptr,
3541                          uint8_t* dst_u,
3542                          uint8_t* dst_v,
3543                          int width);
3544 void UYVYToUVRow_Any_MMI(const uint8_t* src_ptr,
3545                          int src_stride_ptr,
3546                          uint8_t* dst_u,
3547                          uint8_t* dst_v,
3548                          int width);
3549 void UYVYToUV422Row_Any_MSA(const uint8_t* src_ptr,
3550                             uint8_t* dst_u,
3551                             uint8_t* dst_v,
3552                             int width);
3553 void UYVYToUV422Row_Any_MMI(const uint8_t* src_ptr,
3554                             uint8_t* dst_u,
3555                             uint8_t* dst_v,
3556                             int width);
3557 void SwapUVRow_C(const uint8_t* src_uv, uint8_t* dst_vu, int width);
3558 void SwapUVRow_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width);
3559 void SwapUVRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3560 void SwapUVRow_SSSE3(const uint8_t* src_uv, uint8_t* dst_vu, int width);
3561 void SwapUVRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3562 void SwapUVRow_AVX2(const uint8_t* src_uv, uint8_t* dst_vu, int width);
3563 void SwapUVRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3564 void AYUVToYRow_C(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
3565 void AYUVToUVRow_C(const uint8_t* src_ayuv,
3566                    int stride_ayuv,
3567                    uint8_t* dst_uv,
3568                    int width);
3569 void AYUVToVURow_C(const uint8_t* src_ayuv,
3570                    int stride_ayuv,
3571                    uint8_t* dst_vu,
3572                    int width);
3573 void AYUVToYRow_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
3574 void AYUVToUVRow_NEON(const uint8_t* src_ayuv,
3575                       int stride_ayuv,
3576                       uint8_t* dst_uv,
3577                       int width);
3578 void AYUVToVURow_NEON(const uint8_t* src_ayuv,
3579                       int stride_ayuv,
3580                       uint8_t* dst_vu,
3581                       int width);
3582 void AYUVToYRow_Any_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
3583 void AYUVToUVRow_Any_NEON(const uint8_t* src_ayuv,
3584                           int stride_ayuv,
3585                           uint8_t* dst_uv,
3586                           int width);
3587 void AYUVToVURow_Any_NEON(const uint8_t* src_ayuv,
3588                           int stride_ayuv,
3589                           uint8_t* dst_vu,
3590                           int width);
3591 
3592 void I422ToYUY2Row_C(const uint8_t* src_y,
3593                      const uint8_t* src_u,
3594                      const uint8_t* src_v,
3595                      uint8_t* dst_frame,
3596                      int width);
3597 void I422ToUYVYRow_C(const uint8_t* src_y,
3598                      const uint8_t* src_u,
3599                      const uint8_t* src_v,
3600                      uint8_t* dst_frame,
3601                      int width);
3602 void I422ToYUY2Row_SSE2(const uint8_t* src_y,
3603                         const uint8_t* src_u,
3604                         const uint8_t* src_v,
3605                         uint8_t* dst_yuy2,
3606                         int width);
3607 void I422ToUYVYRow_SSE2(const uint8_t* src_y,
3608                         const uint8_t* src_u,
3609                         const uint8_t* src_v,
3610                         uint8_t* dst_uyvy,
3611                         int width);
3612 void I422ToYUY2Row_Any_SSE2(const uint8_t* y_buf,
3613                             const uint8_t* u_buf,
3614                             const uint8_t* v_buf,
3615                             uint8_t* dst_ptr,
3616                             int width);
3617 void I422ToUYVYRow_Any_SSE2(const uint8_t* y_buf,
3618                             const uint8_t* u_buf,
3619                             const uint8_t* v_buf,
3620                             uint8_t* dst_ptr,
3621                             int width);
3622 void I422ToYUY2Row_AVX2(const uint8_t* src_y,
3623                         const uint8_t* src_u,
3624                         const uint8_t* src_v,
3625                         uint8_t* dst_yuy2,
3626                         int width);
3627 void I422ToUYVYRow_AVX2(const uint8_t* src_y,
3628                         const uint8_t* src_u,
3629                         const uint8_t* src_v,
3630                         uint8_t* dst_uyvy,
3631                         int width);
3632 void I422ToYUY2Row_Any_AVX2(const uint8_t* y_buf,
3633                             const uint8_t* u_buf,
3634                             const uint8_t* v_buf,
3635                             uint8_t* dst_ptr,
3636                             int width);
3637 void I422ToUYVYRow_Any_AVX2(const uint8_t* y_buf,
3638                             const uint8_t* u_buf,
3639                             const uint8_t* v_buf,
3640                             uint8_t* dst_ptr,
3641                             int width);
3642 void I422ToYUY2Row_NEON(const uint8_t* src_y,
3643                         const uint8_t* src_u,
3644                         const uint8_t* src_v,
3645                         uint8_t* dst_yuy2,
3646                         int width);
3647 void I422ToUYVYRow_NEON(const uint8_t* src_y,
3648                         const uint8_t* src_u,
3649                         const uint8_t* src_v,
3650                         uint8_t* dst_uyvy,
3651                         int width);
3652 void I422ToYUY2Row_Any_NEON(const uint8_t* y_buf,
3653                             const uint8_t* u_buf,
3654                             const uint8_t* v_buf,
3655                             uint8_t* dst_ptr,
3656                             int width);
3657 void I422ToUYVYRow_Any_NEON(const uint8_t* y_buf,
3658                             const uint8_t* u_buf,
3659                             const uint8_t* v_buf,
3660                             uint8_t* dst_ptr,
3661                             int width);
3662 void I422ToYUY2Row_MSA(const uint8_t* src_y,
3663                        const uint8_t* src_u,
3664                        const uint8_t* src_v,
3665                        uint8_t* dst_yuy2,
3666                        int width);
3667 void I422ToYUY2Row_MMI(const uint8_t* src_y,
3668                        const uint8_t* src_u,
3669                        const uint8_t* src_v,
3670                        uint8_t* dst_yuy2,
3671                        int width);
3672 void I422ToUYVYRow_MSA(const uint8_t* src_y,
3673                        const uint8_t* src_u,
3674                        const uint8_t* src_v,
3675                        uint8_t* dst_uyvy,
3676                        int width);
3677 void I422ToUYVYRow_MMI(const uint8_t* src_y,
3678                        const uint8_t* src_u,
3679                        const uint8_t* src_v,
3680                        uint8_t* dst_uyvy,
3681                        int width);
3682 void I422ToYUY2Row_Any_MSA(const uint8_t* y_buf,
3683                            const uint8_t* u_buf,
3684                            const uint8_t* v_buf,
3685                            uint8_t* dst_ptr,
3686                            int width);
3687 void I422ToYUY2Row_Any_MMI(const uint8_t* y_buf,
3688                            const uint8_t* u_buf,
3689                            const uint8_t* v_buf,
3690                            uint8_t* dst_ptr,
3691                            int width);
3692 void I422ToUYVYRow_Any_MSA(const uint8_t* y_buf,
3693                            const uint8_t* u_buf,
3694                            const uint8_t* v_buf,
3695                            uint8_t* dst_ptr,
3696                            int width);
3697 void I422ToUYVYRow_Any_MMI(const uint8_t* y_buf,
3698                            const uint8_t* u_buf,
3699                            const uint8_t* v_buf,
3700                            uint8_t* dst_ptr,
3701                            int width);
3702 
3703 // Effects related row functions.
3704 void ARGBAttenuateRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3705 void ARGBAttenuateRow_SSSE3(const uint8_t* src_argb,
3706                             uint8_t* dst_argb,
3707                             int width);
3708 void ARGBAttenuateRow_AVX2(const uint8_t* src_argb,
3709                            uint8_t* dst_argb,
3710                            int width);
3711 void ARGBAttenuateRow_NEON(const uint8_t* src_argb,
3712                            uint8_t* dst_argb,
3713                            int width);
3714 void ARGBAttenuateRow_MSA(const uint8_t* src_argb,
3715                           uint8_t* dst_argb,
3716                           int width);
3717 void ARGBAttenuateRow_MMI(const uint8_t* src_argb,
3718                           uint8_t* dst_argb,
3719                           int width);
3720 void ARGBAttenuateRow_Any_SSSE3(const uint8_t* src_ptr,
3721                                 uint8_t* dst_ptr,
3722                                 int width);
3723 void ARGBAttenuateRow_Any_AVX2(const uint8_t* src_ptr,
3724                                uint8_t* dst_ptr,
3725                                int width);
3726 void ARGBAttenuateRow_Any_NEON(const uint8_t* src_ptr,
3727                                uint8_t* dst_ptr,
3728                                int width);
3729 void ARGBAttenuateRow_Any_MSA(const uint8_t* src_ptr,
3730                               uint8_t* dst_ptr,
3731                               int width);
3732 void ARGBAttenuateRow_Any_MMI(const uint8_t* src_ptr,
3733                               uint8_t* dst_ptr,
3734                               int width);
3735 
3736 // Inverse table for unattenuate, shared by C and SSE2.
3737 extern const uint32_t fixed_invtbl8[256];
3738 void ARGBUnattenuateRow_C(const uint8_t* src_argb,
3739                           uint8_t* dst_argb,
3740                           int width);
3741 void ARGBUnattenuateRow_SSE2(const uint8_t* src_argb,
3742                              uint8_t* dst_argb,
3743                              int width);
3744 void ARGBUnattenuateRow_AVX2(const uint8_t* src_argb,
3745                              uint8_t* dst_argb,
3746                              int width);
3747 void ARGBUnattenuateRow_Any_SSE2(const uint8_t* src_ptr,
3748                                  uint8_t* dst_ptr,
3749                                  int width);
3750 void ARGBUnattenuateRow_Any_AVX2(const uint8_t* src_ptr,
3751                                  uint8_t* dst_ptr,
3752                                  int width);
3753 
3754 void ARGBGrayRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3755 void ARGBGrayRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3756 void ARGBGrayRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3757 void ARGBGrayRow_MSA(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3758 void ARGBGrayRow_MMI(const uint8_t* src_argb, uint8_t* dst_argb, int width);
3759 
3760 void ARGBSepiaRow_C(uint8_t* dst_argb, int width);
3761 void ARGBSepiaRow_SSSE3(uint8_t* dst_argb, int width);
3762 void ARGBSepiaRow_NEON(uint8_t* dst_argb, int width);
3763 void ARGBSepiaRow_MSA(uint8_t* dst_argb, int width);
3764 void ARGBSepiaRow_MMI(uint8_t* dst_argb, int width);
3765 
3766 void ARGBColorMatrixRow_C(const uint8_t* src_argb,
3767                           uint8_t* dst_argb,
3768                           const int8_t* matrix_argb,
3769                           int width);
3770 void ARGBColorMatrixRow_SSSE3(const uint8_t* src_argb,
3771                               uint8_t* dst_argb,
3772                               const int8_t* matrix_argb,
3773                               int width);
3774 void ARGBColorMatrixRow_NEON(const uint8_t* src_argb,
3775                              uint8_t* dst_argb,
3776                              const int8_t* matrix_argb,
3777                              int width);
3778 void ARGBColorMatrixRow_MSA(const uint8_t* src_argb,
3779                             uint8_t* dst_argb,
3780                             const int8_t* matrix_argb,
3781                             int width);
3782 void ARGBColorMatrixRow_MMI(const uint8_t* src_argb,
3783                             uint8_t* dst_argb,
3784                             const int8_t* matrix_argb,
3785                             int width);
3786 
3787 void ARGBColorTableRow_C(uint8_t* dst_argb,
3788                          const uint8_t* table_argb,
3789                          int width);
3790 void ARGBColorTableRow_X86(uint8_t* dst_argb,
3791                            const uint8_t* table_argb,
3792                            int width);
3793 
3794 void RGBColorTableRow_C(uint8_t* dst_argb,
3795                         const uint8_t* table_argb,
3796                         int width);
3797 void RGBColorTableRow_X86(uint8_t* dst_argb,
3798                           const uint8_t* table_argb,
3799                           int width);
3800 
3801 void ARGBQuantizeRow_C(uint8_t* dst_argb,
3802                        int scale,
3803                        int interval_size,
3804                        int interval_offset,
3805                        int width);
3806 void ARGBQuantizeRow_SSE2(uint8_t* dst_argb,
3807                           int scale,
3808                           int interval_size,
3809                           int interval_offset,
3810                           int width);
3811 void ARGBQuantizeRow_NEON(uint8_t* dst_argb,
3812                           int scale,
3813                           int interval_size,
3814                           int interval_offset,
3815                           int width);
3816 void ARGBQuantizeRow_MSA(uint8_t* dst_argb,
3817                          int scale,
3818                          int interval_size,
3819                          int interval_offset,
3820                          int width);
3821 
3822 void ARGBShadeRow_C(const uint8_t* src_argb,
3823                     uint8_t* dst_argb,
3824                     int width,
3825                     uint32_t value);
3826 void ARGBShadeRow_SSE2(const uint8_t* src_argb,
3827                        uint8_t* dst_argb,
3828                        int width,
3829                        uint32_t value);
3830 void ARGBShadeRow_NEON(const uint8_t* src_argb,
3831                        uint8_t* dst_argb,
3832                        int width,
3833                        uint32_t value);
3834 void ARGBShadeRow_MSA(const uint8_t* src_argb,
3835                       uint8_t* dst_argb,
3836                       int width,
3837                       uint32_t value);
3838 void ARGBShadeRow_MMI(const uint8_t* src_argb,
3839                       uint8_t* dst_argb,
3840                       int width,
3841                       uint32_t value);
3842 
3843 // Used for blur.
3844 void CumulativeSumToAverageRow_SSE2(const int32_t* topleft,
3845                                     const int32_t* botleft,
3846                                     int width,
3847                                     int area,
3848                                     uint8_t* dst,
3849                                     int count);
3850 void ComputeCumulativeSumRow_SSE2(const uint8_t* row,
3851                                   int32_t* cumsum,
3852                                   const int32_t* previous_cumsum,
3853                                   int width);
3854 
3855 void ComputeCumulativeSumRow_MMI(const uint8_t* row,
3856                                  int32_t* cumsum,
3857                                  const int32_t* previous_cumsum,
3858                                  int width);
3859 
3860 void CumulativeSumToAverageRow_C(const int32_t* tl,
3861                                  const int32_t* bl,
3862                                  int w,
3863                                  int area,
3864                                  uint8_t* dst,
3865                                  int count);
3866 void ComputeCumulativeSumRow_C(const uint8_t* row,
3867                                int32_t* cumsum,
3868                                const int32_t* previous_cumsum,
3869                                int width);
3870 
3871 LIBYUV_API
3872 void ARGBAffineRow_C(const uint8_t* src_argb,
3873                      int src_argb_stride,
3874                      uint8_t* dst_argb,
3875                      const float* uv_dudv,
3876                      int width);
3877 LIBYUV_API
3878 void ARGBAffineRow_SSE2(const uint8_t* src_argb,
3879                         int src_argb_stride,
3880                         uint8_t* dst_argb,
3881                         const float* src_dudv,
3882                         int width);
3883 
3884 // Used for I420Scale, ARGBScale, and ARGBInterpolate.
3885 void InterpolateRow_C(uint8_t* dst_ptr,
3886                       const uint8_t* src_ptr,
3887                       ptrdiff_t src_stride,
3888                       int width,
3889                       int source_y_fraction);
3890 void InterpolateRow_SSSE3(uint8_t* dst_ptr,
3891                           const uint8_t* src_ptr,
3892                           ptrdiff_t src_stride,
3893                           int dst_width,
3894                           int source_y_fraction);
3895 void InterpolateRow_AVX2(uint8_t* dst_ptr,
3896                          const uint8_t* src_ptr,
3897                          ptrdiff_t src_stride,
3898                          int dst_width,
3899                          int source_y_fraction);
3900 void InterpolateRow_NEON(uint8_t* dst_ptr,
3901                          const uint8_t* src_ptr,
3902                          ptrdiff_t src_stride,
3903                          int dst_width,
3904                          int source_y_fraction);
3905 void InterpolateRow_MSA(uint8_t* dst_ptr,
3906                         const uint8_t* src_ptr,
3907                         ptrdiff_t src_stride,
3908                         int width,
3909                         int source_y_fraction);
3910 void InterpolateRow_MMI(uint8_t* dst_ptr,
3911                         const uint8_t* src_ptr,
3912                         ptrdiff_t src_stride,
3913                         int width,
3914                         int source_y_fraction);
3915 void InterpolateRow_Any_NEON(uint8_t* dst_ptr,
3916                              const uint8_t* src_ptr,
3917                              ptrdiff_t src_stride_ptr,
3918                              int width,
3919                              int source_y_fraction);
3920 void InterpolateRow_Any_SSSE3(uint8_t* dst_ptr,
3921                               const uint8_t* src_ptr,
3922                               ptrdiff_t src_stride_ptr,
3923                               int width,
3924                               int source_y_fraction);
3925 void InterpolateRow_Any_AVX2(uint8_t* dst_ptr,
3926                              const uint8_t* src_ptr,
3927                              ptrdiff_t src_stride_ptr,
3928                              int width,
3929                              int source_y_fraction);
3930 void InterpolateRow_Any_MSA(uint8_t* dst_ptr,
3931                             const uint8_t* src_ptr,
3932                             ptrdiff_t src_stride_ptr,
3933                             int width,
3934                             int source_y_fraction);
3935 void InterpolateRow_Any_MMI(uint8_t* dst_ptr,
3936                             const uint8_t* src_ptr,
3937                             ptrdiff_t src_stride_ptr,
3938                             int width,
3939                             int source_y_fraction);
3940 
3941 void InterpolateRow_16_C(uint16_t* dst_ptr,
3942                          const uint16_t* src_ptr,
3943                          ptrdiff_t src_stride,
3944                          int width,
3945                          int source_y_fraction);
3946 
3947 // Sobel images.
3948 void SobelXRow_C(const uint8_t* src_y0,
3949                  const uint8_t* src_y1,
3950                  const uint8_t* src_y2,
3951                  uint8_t* dst_sobelx,
3952                  int width);
3953 void SobelXRow_SSE2(const uint8_t* src_y0,
3954                     const uint8_t* src_y1,
3955                     const uint8_t* src_y2,
3956                     uint8_t* dst_sobelx,
3957                     int width);
3958 void SobelXRow_NEON(const uint8_t* src_y0,
3959                     const uint8_t* src_y1,
3960                     const uint8_t* src_y2,
3961                     uint8_t* dst_sobelx,
3962                     int width);
3963 void SobelXRow_MSA(const uint8_t* src_y0,
3964                    const uint8_t* src_y1,
3965                    const uint8_t* src_y2,
3966                    uint8_t* dst_sobelx,
3967                    int width);
3968 void SobelXRow_MMI(const uint8_t* src_y0,
3969                    const uint8_t* src_y1,
3970                    const uint8_t* src_y2,
3971                    uint8_t* dst_sobelx,
3972                    int width);
3973 void SobelYRow_C(const uint8_t* src_y0,
3974                  const uint8_t* src_y1,
3975                  uint8_t* dst_sobely,
3976                  int width);
3977 void SobelYRow_SSE2(const uint8_t* src_y0,
3978                     const uint8_t* src_y1,
3979                     uint8_t* dst_sobely,
3980                     int width);
3981 void SobelYRow_NEON(const uint8_t* src_y0,
3982                     const uint8_t* src_y1,
3983                     uint8_t* dst_sobely,
3984                     int width);
3985 void SobelYRow_MSA(const uint8_t* src_y0,
3986                    const uint8_t* src_y1,
3987                    uint8_t* dst_sobely,
3988                    int width);
3989 void SobelYRow_MMI(const uint8_t* src_y0,
3990                    const uint8_t* src_y1,
3991                    uint8_t* dst_sobely,
3992                    int width);
3993 void SobelRow_C(const uint8_t* src_sobelx,
3994                 const uint8_t* src_sobely,
3995                 uint8_t* dst_argb,
3996                 int width);
3997 void SobelRow_SSE2(const uint8_t* src_sobelx,
3998                    const uint8_t* src_sobely,
3999                    uint8_t* dst_argb,
4000                    int width);
4001 void SobelRow_NEON(const uint8_t* src_sobelx,
4002                    const uint8_t* src_sobely,
4003                    uint8_t* dst_argb,
4004                    int width);
4005 void SobelRow_MSA(const uint8_t* src_sobelx,
4006                   const uint8_t* src_sobely,
4007                   uint8_t* dst_argb,
4008                   int width);
4009 void SobelRow_MMI(const uint8_t* src_sobelx,
4010                   const uint8_t* src_sobely,
4011                   uint8_t* dst_argb,
4012                   int width);
4013 void SobelToPlaneRow_C(const uint8_t* src_sobelx,
4014                        const uint8_t* src_sobely,
4015                        uint8_t* dst_y,
4016                        int width);
4017 void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx,
4018                           const uint8_t* src_sobely,
4019                           uint8_t* dst_y,
4020                           int width);
4021 void SobelToPlaneRow_NEON(const uint8_t* src_sobelx,
4022                           const uint8_t* src_sobely,
4023                           uint8_t* dst_y,
4024                           int width);
4025 void SobelToPlaneRow_MSA(const uint8_t* src_sobelx,
4026                          const uint8_t* src_sobely,
4027                          uint8_t* dst_y,
4028                          int width);
4029 void SobelToPlaneRow_MMI(const uint8_t* src_sobelx,
4030                          const uint8_t* src_sobely,
4031                          uint8_t* dst_y,
4032                          int width);
4033 void SobelXYRow_C(const uint8_t* src_sobelx,
4034                   const uint8_t* src_sobely,
4035                   uint8_t* dst_argb,
4036                   int width);
4037 void SobelXYRow_SSE2(const uint8_t* src_sobelx,
4038                      const uint8_t* src_sobely,
4039                      uint8_t* dst_argb,
4040                      int width);
4041 void SobelXYRow_NEON(const uint8_t* src_sobelx,
4042                      const uint8_t* src_sobely,
4043                      uint8_t* dst_argb,
4044                      int width);
4045 void SobelXYRow_MSA(const uint8_t* src_sobelx,
4046                     const uint8_t* src_sobely,
4047                     uint8_t* dst_argb,
4048                     int width);
4049 void SobelXYRow_MMI(const uint8_t* src_sobelx,
4050                     const uint8_t* src_sobely,
4051                     uint8_t* dst_argb,
4052                     int width);
4053 void SobelRow_Any_SSE2(const uint8_t* y_buf,
4054                        const uint8_t* uv_buf,
4055                        uint8_t* dst_ptr,
4056                        int width);
4057 void SobelRow_Any_NEON(const uint8_t* y_buf,
4058                        const uint8_t* uv_buf,
4059                        uint8_t* dst_ptr,
4060                        int width);
4061 void SobelRow_Any_MSA(const uint8_t* y_buf,
4062                       const uint8_t* uv_buf,
4063                       uint8_t* dst_ptr,
4064                       int width);
4065 void SobelRow_Any_MMI(const uint8_t* y_buf,
4066                       const uint8_t* uv_buf,
4067                       uint8_t* dst_ptr,
4068                       int width);
4069 void SobelToPlaneRow_Any_SSE2(const uint8_t* y_buf,
4070                               const uint8_t* uv_buf,
4071                               uint8_t* dst_ptr,
4072                               int width);
4073 void SobelToPlaneRow_Any_NEON(const uint8_t* y_buf,
4074                               const uint8_t* uv_buf,
4075                               uint8_t* dst_ptr,
4076                               int width);
4077 void SobelToPlaneRow_Any_MSA(const uint8_t* y_buf,
4078                              const uint8_t* uv_buf,
4079                              uint8_t* dst_ptr,
4080                              int width);
4081 void SobelToPlaneRow_Any_MMI(const uint8_t* y_buf,
4082                              const uint8_t* uv_buf,
4083                              uint8_t* dst_ptr,
4084                              int width);
4085 void SobelXYRow_Any_SSE2(const uint8_t* y_buf,
4086                          const uint8_t* uv_buf,
4087                          uint8_t* dst_ptr,
4088                          int width);
4089 void SobelXYRow_Any_NEON(const uint8_t* y_buf,
4090                          const uint8_t* uv_buf,
4091                          uint8_t* dst_ptr,
4092                          int width);
4093 void SobelXYRow_Any_MSA(const uint8_t* y_buf,
4094                         const uint8_t* uv_buf,
4095                         uint8_t* dst_ptr,
4096                         int width);
4097 void SobelXYRow_Any_MMI(const uint8_t* y_buf,
4098                         const uint8_t* uv_buf,
4099                         uint8_t* dst_ptr,
4100                         int width);
4101 
4102 void ARGBPolynomialRow_C(const uint8_t* src_argb,
4103                          uint8_t* dst_argb,
4104                          const float* poly,
4105                          int width);
4106 void ARGBPolynomialRow_SSE2(const uint8_t* src_argb,
4107                             uint8_t* dst_argb,
4108                             const float* poly,
4109                             int width);
4110 void ARGBPolynomialRow_AVX2(const uint8_t* src_argb,
4111                             uint8_t* dst_argb,
4112                             const float* poly,
4113                             int width);
4114 
4115 // Scale and convert to half float.
4116 void HalfFloatRow_C(const uint16_t* src, uint16_t* dst, float scale, int width);
4117 void HalfFloatRow_SSE2(const uint16_t* src,
4118                        uint16_t* dst,
4119                        float scale,
4120                        int width);
4121 void HalfFloatRow_Any_SSE2(const uint16_t* src_ptr,
4122                            uint16_t* dst_ptr,
4123                            float param,
4124                            int width);
4125 void HalfFloatRow_AVX2(const uint16_t* src,
4126                        uint16_t* dst,
4127                        float scale,
4128                        int width);
4129 void HalfFloatRow_Any_AVX2(const uint16_t* src_ptr,
4130                            uint16_t* dst_ptr,
4131                            float param,
4132                            int width);
4133 void HalfFloatRow_F16C(const uint16_t* src,
4134                        uint16_t* dst,
4135                        float scale,
4136                        int width);
4137 void HalfFloatRow_Any_F16C(const uint16_t* src,
4138                            uint16_t* dst,
4139                            float scale,
4140                            int width);
4141 void HalfFloat1Row_F16C(const uint16_t* src,
4142                         uint16_t* dst,
4143                         float scale,
4144                         int width);
4145 void HalfFloat1Row_Any_F16C(const uint16_t* src,
4146                             uint16_t* dst,
4147                             float scale,
4148                             int width);
4149 void HalfFloatRow_NEON(const uint16_t* src,
4150                        uint16_t* dst,
4151                        float scale,
4152                        int width);
4153 void HalfFloatRow_Any_NEON(const uint16_t* src_ptr,
4154                            uint16_t* dst_ptr,
4155                            float param,
4156                            int width);
4157 void HalfFloat1Row_NEON(const uint16_t* src,
4158                         uint16_t* dst,
4159                         float scale,
4160                         int width);
4161 void HalfFloat1Row_Any_NEON(const uint16_t* src_ptr,
4162                             uint16_t* dst_ptr,
4163                             float param,
4164                             int width);
4165 void HalfFloatRow_MSA(const uint16_t* src,
4166                       uint16_t* dst,
4167                       float scale,
4168                       int width);
4169 void HalfFloatRow_Any_MSA(const uint16_t* src_ptr,
4170                           uint16_t* dst_ptr,
4171                           float param,
4172                           int width);
4173 void ByteToFloatRow_C(const uint8_t* src, float* dst, float scale, int width);
4174 void ByteToFloatRow_NEON(const uint8_t* src,
4175                          float* dst,
4176                          float scale,
4177                          int width);
4178 void ByteToFloatRow_Any_NEON(const uint8_t* src_ptr,
4179                              float* dst_ptr,
4180                              float param,
4181                              int width);
4182 
4183 void ARGBLumaColorTableRow_C(const uint8_t* src_argb,
4184                              uint8_t* dst_argb,
4185                              int width,
4186                              const uint8_t* luma,
4187                              uint32_t lumacoeff);
4188 void ARGBLumaColorTableRow_SSSE3(const uint8_t* src_argb,
4189                                  uint8_t* dst_argb,
4190                                  int width,
4191                                  const uint8_t* luma,
4192                                  uint32_t lumacoeff);
4193 
4194 float ScaleMaxSamples_C(const float* src, float* dst, float scale, int width);
4195 float ScaleMaxSamples_NEON(const float* src,
4196                            float* dst,
4197                            float scale,
4198                            int width);
4199 float ScaleSumSamples_C(const float* src, float* dst, float scale, int width);
4200 float ScaleSumSamples_NEON(const float* src,
4201                            float* dst,
4202                            float scale,
4203                            int width);
4204 void ScaleSamples_C(const float* src, float* dst, float scale, int width);
4205 void ScaleSamples_NEON(const float* src, float* dst, float scale, int width);
4206 
4207 void I210ToARGBRow_MMI(const uint16_t* src_y,
4208                        const uint16_t* src_u,
4209                        const uint16_t* src_v,
4210                        uint8_t* rgb_buf,
4211                        const struct YuvConstants* yuvconstants,
4212                        int width);
4213 void I422ToRGBARow_MMI(const uint8_t* src_y,
4214                        const uint8_t* src_u,
4215                        const uint8_t* src_v,
4216                        uint8_t* dst_argb,
4217                        const struct YuvConstants* yuvconstants,
4218                        int width);
4219 void I422AlphaToARGBRow_MMI(const uint8_t* src_y,
4220                             const uint8_t* src_u,
4221                             const uint8_t* src_v,
4222                             const uint8_t* src_a,
4223                             uint8_t* dst_argb,
4224                             const struct YuvConstants* yuvconstants,
4225                             int width);
4226 void I422ToRGB24Row_MMI(const uint8_t* src_y,
4227                         const uint8_t* src_u,
4228                         const uint8_t* src_v,
4229                         uint8_t* dst_argb,
4230                         const struct YuvConstants* yuvconstants,
4231                         int width);
4232 void I422ToRGB565Row_MMI(const uint8_t* src_y,
4233                          const uint8_t* src_u,
4234                          const uint8_t* src_v,
4235                          uint8_t* dst_rgb565,
4236                          const struct YuvConstants* yuvconstants,
4237                          int width);
4238 void I422ToARGB4444Row_MMI(const uint8_t* src_y,
4239                            const uint8_t* src_u,
4240                            const uint8_t* src_v,
4241                            uint8_t* dst_argb4444,
4242                            const struct YuvConstants* yuvconstants,
4243                            int width);
4244 void I422ToARGB1555Row_MMI(const uint8_t* src_y,
4245                            const uint8_t* src_u,
4246                            const uint8_t* src_v,
4247                            uint8_t* dst_argb1555,
4248                            const struct YuvConstants* yuvconstants,
4249                            int width);
4250 void NV12ToARGBRow_MMI(const uint8_t* src_y,
4251                        const uint8_t* src_uv,
4252                        uint8_t* dst_argb,
4253                        const struct YuvConstants* yuvconstants,
4254                        int width);
4255 void NV12ToRGB565Row_MMI(const uint8_t* src_y,
4256                          const uint8_t* src_uv,
4257                          uint8_t* dst_rgb565,
4258                          const struct YuvConstants* yuvconstants,
4259                          int width);
4260 void NV21ToARGBRow_MMI(const uint8_t* src_y,
4261                        const uint8_t* src_vu,
4262                        uint8_t* dst_argb,
4263                        const struct YuvConstants* yuvconstants,
4264                        int width);
4265 void NV12ToRGB24Row_MMI(const uint8_t* src_y,
4266                         const uint8_t* src_uv,
4267                         uint8_t* dst_rgb24,
4268                         const struct YuvConstants* yuvconstants,
4269                         int width);
4270 void NV21ToRGB24Row_MMI(const uint8_t* src_y,
4271                         const uint8_t* src_vu,
4272                         uint8_t* dst_rgb24,
4273                         const struct YuvConstants* yuvconstants,
4274                         int width);
4275 void YUY2ToARGBRow_MMI(const uint8_t* src_yuy2,
4276                        uint8_t* dst_argb,
4277                        const struct YuvConstants* yuvconstants,
4278                        int width);
4279 void UYVYToARGBRow_MMI(const uint8_t* src_uyvy,
4280                        uint8_t* dst_argb,
4281                        const struct YuvConstants* yuvconstants,
4282                        int width);
4283 void I210ToARGBRow_Any_MMI(const uint16_t* y_buf,
4284                            const uint16_t* u_buf,
4285                            const uint16_t* v_buf,
4286                            uint8_t* dst_ptr,
4287                            const struct YuvConstants* yuvconstants,
4288                            int width);
4289 void I422ToRGBARow_Any_MMI(const uint8_t* y_buf,
4290                            const uint8_t* u_buf,
4291                            const uint8_t* v_buf,
4292                            uint8_t* dst_ptr,
4293                            const struct YuvConstants* yuvconstants,
4294                            int width);
4295 void I422AlphaToARGBRow_Any_MMI(const uint8_t* y_buf,
4296                                 const uint8_t* u_buf,
4297                                 const uint8_t* v_buf,
4298                                 const uint8_t* a_buf,
4299                                 uint8_t* dst_ptr,
4300                                 const struct YuvConstants* yuvconstants,
4301                                 int width);
4302 void I422ToRGB24Row_Any_MMI(const uint8_t* y_buf,
4303                             const uint8_t* u_buf,
4304                             const uint8_t* v_buf,
4305                             uint8_t* dst_ptr,
4306                             const struct YuvConstants* yuvconstants,
4307                             int width);
4308 void I422ToRGB565Row_Any_MMI(const uint8_t* y_buf,
4309                              const uint8_t* u_buf,
4310                              const uint8_t* v_buf,
4311                              uint8_t* dst_ptr,
4312                              const struct YuvConstants* yuvconstants,
4313                              int width);
4314 void I422ToARGB4444Row_Any_MMI(const uint8_t* y_buf,
4315                                const uint8_t* u_buf,
4316                                const uint8_t* v_buf,
4317                                uint8_t* dst_ptr,
4318                                const struct YuvConstants* yuvconstants,
4319                                int width);
4320 void I422ToARGB1555Row_Any_MMI(const uint8_t* y_buf,
4321                                const uint8_t* u_buf,
4322                                const uint8_t* v_buf,
4323                                uint8_t* dst_ptr,
4324                                const struct YuvConstants* yuvconstants,
4325                                int width);
4326 void NV12ToARGBRow_Any_MMI(const uint8_t* y_buf,
4327                            const uint8_t* uv_buf,
4328                            uint8_t* dst_ptr,
4329                            const struct YuvConstants* yuvconstants,
4330                            int width);
4331 void NV12ToRGB565Row_Any_MMI(const uint8_t* y_buf,
4332                              const uint8_t* uv_buf,
4333                              uint8_t* dst_ptr,
4334                              const struct YuvConstants* yuvconstants,
4335                              int width);
4336 void NV21ToARGBRow_Any_MMI(const uint8_t* y_buf,
4337                            const uint8_t* uv_buf,
4338                            uint8_t* dst_ptr,
4339                            const struct YuvConstants* yuvconstants,
4340                            int width);
4341 void NV12ToRGB24Row_Any_MMI(const uint8_t* y_buf,
4342                             const uint8_t* uv_buf,
4343                             uint8_t* dst_ptr,
4344                             const struct YuvConstants* yuvconstants,
4345                             int width);
4346 void NV21ToRGB24Row_Any_MMI(const uint8_t* y_buf,
4347                             const uint8_t* uv_buf,
4348                             uint8_t* dst_ptr,
4349                             const struct YuvConstants* yuvconstants,
4350                             int width);
4351 void YUY2ToARGBRow_Any_MMI(const uint8_t* src_ptr,
4352                            uint8_t* dst_ptr,
4353                            const struct YuvConstants* yuvconstants,
4354                            int width);
4355 void UYVYToARGBRow_Any_MMI(const uint8_t* src_ptr,
4356                            uint8_t* dst_ptr,
4357                            const struct YuvConstants* yuvconstants,
4358                            int width);
4359 
4360 void GaussRow_F32_NEON(const float* src, float* dst, int width);
4361 void GaussRow_F32_C(const float* src, float* dst, int width);
4362 
4363 void GaussCol_F32_NEON(const float* src0,
4364                        const float* src1,
4365                        const float* src2,
4366                        const float* src3,
4367                        const float* src4,
4368                        float* dst,
4369                        int width);
4370 
4371 void GaussCol_F32_C(const float* src0,
4372                     const float* src1,
4373                     const float* src2,
4374                     const float* src3,
4375                     const float* src4,
4376                     float* dst,
4377                     int width);
4378 
4379 #ifdef __cplusplus
4380 }  // extern "C"
4381 }  // namespace libyuv
4382 #endif
4383 
4384 #endif  // INCLUDE_LIBYUV_ROW_H_
4385