• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ABGRTOYROW_SSSE3
78 #if !defined(LIBYUV_BIT_EXACT)
79 #define HAS_ABGRTOUVROW_SSSE3
80 #endif
81 #define HAS_ARGB1555TOARGBROW_SSE2
82 #define HAS_ARGB4444TOARGBROW_SSE2
83 #define HAS_ARGBEXTRACTALPHAROW_SSE2
84 #define HAS_ARGBSETROW_X86
85 #define HAS_ARGBSHUFFLEROW_SSSE3
86 #define HAS_ARGBTOARGB1555ROW_SSE2
87 #define HAS_ARGBTOARGB4444ROW_SSE2
88 #define HAS_ARGBTORAWROW_SSSE3
89 #define HAS_ARGBTORGB24ROW_SSSE3
90 #define HAS_ARGBTORGB565DITHERROW_SSE2
91 #define HAS_ARGBTORGB565ROW_SSE2
92 #define HAS_ARGBTOYJROW_SSSE3
93 #define HAS_ARGBTOYROW_SSSE3
94 #define HAS_BGRATOYROW_SSSE3
95 #if !defined(LIBYUV_BIT_EXACT)
96 #define HAS_ARGBTOUV444ROW_SSSE3
97 #define HAS_ARGBTOUVJROW_SSSE3
98 #define HAS_ARGBTOUVROW_SSSE3
99 #define HAS_BGRATOUVROW_SSSE3
100 #endif
101 #define HAS_COPYROW_ERMS
102 #define HAS_COPYROW_SSE2
103 #define HAS_H422TOARGBROW_SSSE3
104 #define HAS_HALFFLOATROW_SSE2
105 #define HAS_I422TOARGB1555ROW_SSSE3
106 #define HAS_I422TOARGB4444ROW_SSSE3
107 #define HAS_I422TOARGBROW_SSSE3
108 #define HAS_I422TORGB24ROW_SSSE3
109 #define HAS_I422TORGB565ROW_SSSE3
110 #define HAS_I422TORGBAROW_SSSE3
111 #define HAS_I422TOUYVYROW_SSE2
112 #define HAS_I422TOYUY2ROW_SSE2
113 #define HAS_I444TOARGBROW_SSSE3
114 #define HAS_INTERPOLATEROW_SSSE3
115 #define HAS_J400TOARGBROW_SSE2
116 #define HAS_J422TOARGBROW_SSSE3
117 #define HAS_MERGEUVROW_SSE2
118 #define HAS_MIRRORROW_SSSE3
119 #define HAS_MIRRORSPLITUVROW_SSSE3
120 #define HAS_NV12TOARGBROW_SSSE3
121 #define HAS_NV12TORGB24ROW_SSSE3
122 #define HAS_NV12TORGB565ROW_SSSE3
123 #define HAS_NV21TOARGBROW_SSSE3
124 #define HAS_NV21TORGB24ROW_SSSE3
125 #define HAS_RAWTOARGBROW_SSSE3
126 #define HAS_RAWTORGB24ROW_SSSE3
127 #define HAS_RAWTOYROW_SSSE3
128 #define HAS_RGB24TOARGBROW_SSSE3
129 #define HAS_RGB24TOYROW_SSSE3
130 #define HAS_RGB565TOARGBROW_SSE2
131 #define HAS_RGBATOYROW_SSSE3
132 #if !defined(LIBYUV_BIT_EXACT)
133 #define HAS_RGB24TOYJROW_SSSE3
134 #define HAS_RAWTOYJROW_SSSE3
135 #define HAS_RGBATOUVROW_SSSE3
136 #endif
137 #define HAS_SETROW_ERMS
138 #define HAS_SETROW_X86
139 #define HAS_SPLITUVROW_SSE2
140 #define HAS_UYVYTOARGBROW_SSSE3
141 #define HAS_UYVYTOUV422ROW_SSE2
142 #define HAS_UYVYTOUVROW_SSE2
143 #define HAS_UYVYTOYROW_SSE2
144 #define HAS_YUY2TOARGBROW_SSSE3
145 #define HAS_YUY2TOUV422ROW_SSE2
146 #define HAS_YUY2TOUVROW_SSE2
147 #define HAS_YUY2TOYROW_SSE2
148 
149 // Effects:
150 #define HAS_ARGBADDROW_SSE2
151 #define HAS_ARGBAFFINEROW_SSE2
152 #if !defined(LIBYUV_BIT_EXACT)
153 #define HAS_ARGBATTENUATEROW_SSSE3
154 #endif
155 #define HAS_ARGBBLENDROW_SSSE3
156 #define HAS_ARGBCOLORMATRIXROW_SSSE3
157 #define HAS_ARGBCOLORTABLEROW_X86
158 #define HAS_ARGBCOPYALPHAROW_SSE2
159 #define HAS_ARGBCOPYYTOALPHAROW_SSE2
160 #define HAS_ARGBGRAYROW_SSSE3
161 #define HAS_ARGBLUMACOLORTABLEROW_SSSE3
162 #define HAS_ARGBMIRRORROW_SSE2
163 #define HAS_ARGBMULTIPLYROW_SSE2
164 #define HAS_ARGBPOLYNOMIALROW_SSE2
165 #define HAS_ARGBQUANTIZEROW_SSE2
166 #define HAS_ARGBSEPIAROW_SSSE3
167 #define HAS_ARGBSHADEROW_SSE2
168 #define HAS_ARGBSUBTRACTROW_SSE2
169 #define HAS_ARGBUNATTENUATEROW_SSE2
170 #define HAS_BLENDPLANEROW_SSSE3
171 #define HAS_COMPUTECUMULATIVESUMROW_SSE2
172 #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
173 #define HAS_RGBCOLORTABLEROW_X86
174 #define HAS_SOBELROW_SSE2
175 #define HAS_SOBELTOPLANEROW_SSE2
176 #define HAS_SOBELXROW_SSE2
177 #define HAS_SOBELXYROW_SSE2
178 #define HAS_SOBELYROW_SSE2
179 
180 // The following functions fail on gcc/clang 32 bit with fpic and framepointer.
181 // caveat: clangcl uses row_win.cc which works.
182 #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
183     defined(_MSC_VER)
184 // TODO(fbarchard): fix build error on android_full_debug=1
185 // https://code.google.com/p/libyuv/issues/detail?id=517
186 #define HAS_I422ALPHATOARGBROW_SSSE3
187 #define HAS_I444ALPHATOARGBROW_SSSE3
188 #endif
189 #endif
190 
191 // The following are available on all x86 platforms, but
192 // require VS2012, clang 3.4 or gcc 4.7.
193 #if !defined(LIBYUV_DISABLE_X86) &&                          \
194     (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \
195      defined(GCC_HAS_AVX2))
196 #define HAS_ARGBCOPYALPHAROW_AVX2
197 #define HAS_ARGBCOPYYTOALPHAROW_AVX2
198 #define HAS_ARGBEXTRACTALPHAROW_AVX2
199 #define HAS_ARGBMIRRORROW_AVX2
200 #define HAS_ARGBPOLYNOMIALROW_AVX2
201 #define HAS_ARGBSHUFFLEROW_AVX2
202 #define HAS_ARGBTORGB565DITHERROW_AVX2
203 #define HAS_ARGBTOYJROW_AVX2
204 #define HAS_RAWTOYJROW_AVX2
205 #define HAS_RGB24TOYJROW_AVX2
206 #define HAS_ARGBTOYROW_AVX2
207 #if !defined(LIBYUV_BIT_EXACT)
208 #define HAS_ARGBTOUVJROW_AVX2
209 #define HAS_ARGBTOUVROW_AVX2
210 #endif
211 #define HAS_COPYROW_AVX
212 #define HAS_H422TOARGBROW_AVX2
213 #define HAS_HALFFLOATROW_AVX2
214 //  #define HAS_HALFFLOATROW_F16C  // Enable to test halffloat cast
215 #define HAS_I422TOARGB1555ROW_AVX2
216 #define HAS_I422TOARGB4444ROW_AVX2
217 #define HAS_I422TOARGBROW_AVX2
218 #define HAS_I422TORGB24ROW_AVX2
219 #define HAS_I422TORGB565ROW_AVX2
220 #define HAS_I422TORGBAROW_AVX2
221 #define HAS_I444TOARGBROW_AVX2
222 #define HAS_INTERPOLATEROW_AVX2
223 #define HAS_J422TOARGBROW_AVX2
224 #define HAS_MERGEUVROW_AVX2
225 #define HAS_MIRRORROW_AVX2
226 #define HAS_NV12TOARGBROW_AVX2
227 #define HAS_NV12TORGB24ROW_AVX2
228 #define HAS_NV12TORGB565ROW_AVX2
229 #define HAS_NV21TOARGBROW_AVX2
230 #define HAS_NV21TORGB24ROW_AVX2
231 #define HAS_SPLITUVROW_AVX2
232 #define HAS_UYVYTOARGBROW_AVX2
233 #define HAS_UYVYTOUV422ROW_AVX2
234 #define HAS_UYVYTOUVROW_AVX2
235 #define HAS_UYVYTOYROW_AVX2
236 #define HAS_YUY2TOARGBROW_AVX2
237 #define HAS_YUY2TOUV422ROW_AVX2
238 #define HAS_YUY2TOUVROW_AVX2
239 #define HAS_YUY2TOYROW_AVX2
240 
241 // Effects:
242 #define HAS_ARGBADDROW_AVX2
243 #if !defined(LIBYUV_BIT_EXACT)
244 #define HAS_ARGBATTENUATEROW_AVX2
245 #endif
246 #define HAS_ARGBMULTIPLYROW_AVX2
247 #define HAS_ARGBSUBTRACTROW_AVX2
248 #define HAS_ARGBUNATTENUATEROW_AVX2
249 #define HAS_BLENDPLANEROW_AVX2
250 
251 #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
252     defined(_MSC_VER)
253 // TODO(fbarchard): fix build error on android_full_debug=1
254 // https://code.google.com/p/libyuv/issues/detail?id=517
255 #define HAS_I422ALPHATOARGBROW_AVX2
256 #define HAS_I444ALPHATOARGBROW_AVX2
257 #endif
258 #endif
259 
260 // The following are available for AVX2 Visual C 32 bit:
261 // TODO(fbarchard): Port to gcc.
262 #if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \
263     !defined(__clang__) && defined(VISUALC_HAS_AVX2)
264 #define HAS_ARGB1555TOARGBROW_AVX2
265 #define HAS_ARGB4444TOARGBROW_AVX2
266 #define HAS_ARGBTOARGB1555ROW_AVX2
267 #define HAS_ARGBTOARGB4444ROW_AVX2
268 #define HAS_ARGBTORGB565ROW_AVX2
269 #define HAS_J400TOARGBROW_AVX2
270 #define HAS_RGB565TOARGBROW_AVX2
271 #endif
272 
273 // The following are also available on x64 Visual C.
274 #if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \
275     (!defined(__clang__) || defined(__SSSE3__))
276 #define HAS_I444ALPHATOARGBROW_SSSE3
277 #define HAS_I444TOARGBROW_SSSE3
278 #define HAS_I422ALPHATOARGBROW_SSSE3
279 #define HAS_I422TOARGBROW_SSSE3
280 #endif
281 
282 // The following are available for gcc/clang x86 platforms:
283 // TODO(fbarchard): Port to Visual C
284 #if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
285 #define HAS_ABGRTOAR30ROW_SSSE3
286 #define HAS_ARGBTOAR30ROW_SSSE3
287 #define HAS_ARGBTOAR64ROW_SSSE3
288 #define HAS_ARGBTOAB64ROW_SSSE3
289 #define HAS_AR64TOARGBROW_SSSE3
290 #define HAS_AB64TOARGBROW_SSSE3
291 #define HAS_CONVERT16TO8ROW_SSSE3
292 #define HAS_CONVERT8TO16ROW_SSE2
293 #define HAS_DETILEROW_SSE2
294 #define HAS_DETILESPLITUVROW_SSSE3
295 #define HAS_HALFMERGEUVROW_SSSE3
296 #define HAS_I210TOAR30ROW_SSSE3
297 #define HAS_I210TOARGBROW_SSSE3
298 #define HAS_I212TOAR30ROW_SSSE3
299 #define HAS_I212TOARGBROW_SSSE3
300 #define HAS_I400TOARGBROW_SSE2
301 #define HAS_I422TOAR30ROW_SSSE3
302 #define HAS_I410TOAR30ROW_SSSE3
303 #define HAS_I410TOARGBROW_SSSE3
304 #define HAS_MERGEARGBROW_SSE2
305 #define HAS_MERGEXRGBROW_SSE2
306 #define HAS_MERGERGBROW_SSSE3
307 #define HAS_MIRRORUVROW_SSSE3
308 #define HAS_NV21TOYUV24ROW_SSSE3
309 #define HAS_P210TOAR30ROW_SSSE3
310 #define HAS_P210TOARGBROW_SSSE3
311 #define HAS_P410TOAR30ROW_SSSE3
312 #define HAS_P410TOARGBROW_SSSE3
313 #define HAS_RAWTORGBAROW_SSSE3
314 #define HAS_RGB24MIRRORROW_SSSE3
315 #if !defined(LIBYUV_BIT_EXACT)
316 #define HAS_RGBATOYJROW_SSSE3
317 #endif
318 #define HAS_SPLITARGBROW_SSE2
319 #define HAS_SPLITARGBROW_SSSE3
320 #define HAS_SPLITXRGBROW_SSE2
321 #define HAS_SPLITXRGBROW_SSSE3
322 #define HAS_SPLITRGBROW_SSSE3
323 #define HAS_SWAPUVROW_SSSE3
324 
325 #if defined(__x86_64__) || !defined(__pic__)
326 // TODO(fbarchard): fix build error on android_full_debug=1
327 // https://code.google.com/p/libyuv/issues/detail?id=517
328 #define HAS_I210ALPHATOARGBROW_SSSE3
329 #define HAS_I410ALPHATOARGBROW_SSSE3
330 #endif
331 #endif
332 
333 // The following are available for AVX2 gcc/clang x86 platforms:
334 // TODO(fbarchard): Port to Visual C
335 #if !defined(LIBYUV_DISABLE_X86) &&               \
336     (defined(__x86_64__) || defined(__i386__)) && \
337     (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2))
338 #define HAS_ABGRTOAR30ROW_AVX2
339 #if !defined(LIBYUV_BIT_EXACT)
340 #define HAS_ABGRTOUVROW_AVX2
341 #define HAS_ABGRTOYROW_AVX2
342 #endif
343 #define HAS_ARGBTOAR30ROW_AVX2
344 #define HAS_ARGBTORAWROW_AVX2
345 #define HAS_ARGBTORGB24ROW_AVX2
346 #define HAS_ARGBTOAR64ROW_AVX2
347 #define HAS_ARGBTOAB64ROW_AVX2
348 #define HAS_AR64TOARGBROW_AVX2
349 #define HAS_AB64TOARGBROW_AVX2
350 #define HAS_CONVERT16TO8ROW_AVX2
351 #define HAS_INTERPOLATEROW_16TO8_AVX2
352 #define HAS_CONVERT8TO16ROW_AVX2
353 #define HAS_DIVIDEROW_16_AVX2
354 #define HAS_HALFMERGEUVROW_AVX2
355 #define HAS_MERGEAR64ROW_AVX2
356 #define HAS_MERGEARGB16TO8ROW_AVX2
357 #define HAS_MERGEARGBROW_AVX2
358 #define HAS_MERGEXR30ROW_AVX2
359 #define HAS_MERGEXR64ROW_AVX2
360 #define HAS_MERGEXRGB16TO8ROW_AVX2
361 #define HAS_MERGEXRGBROW_AVX2
362 #define HAS_NV21TOYUV24ROW_AVX2
363 #define HAS_I210TOAR30ROW_AVX2
364 #define HAS_I210TOARGBROW_AVX2
365 #define HAS_I212TOAR30ROW_AVX2
366 #define HAS_I212TOARGBROW_AVX2
367 #define HAS_I400TOARGBROW_AVX2
368 #define HAS_I410TOAR30ROW_AVX2
369 #define HAS_I410TOARGBROW_AVX2
370 #define HAS_P210TOAR30ROW_AVX2
371 #define HAS_P210TOARGBROW_AVX2
372 #define HAS_P410TOAR30ROW_AVX2
373 #define HAS_P410TOARGBROW_AVX2
374 #define HAS_I422TOAR30ROW_AVX2
375 #define HAS_I422TOUYVYROW_AVX2
376 #define HAS_I422TOYUY2ROW_AVX2
377 #define HAS_MERGEUVROW_16_AVX2
378 #define HAS_MIRRORUVROW_AVX2
379 #define HAS_MULTIPLYROW_16_AVX2
380 #if !defined(LIBYUV_BIT_EXACT)
381 #define HAS_RGBATOYJROW_AVX2
382 #endif
383 #define HAS_SPLITARGBROW_AVX2
384 #define HAS_SPLITXRGBROW_AVX2
385 #define HAS_SPLITUVROW_16_AVX2
386 #define HAS_SWAPUVROW_AVX2
387 
388 #if defined(__x86_64__) || !defined(__pic__)
389 // TODO(fbarchard): fix build error on android_full_debug=1
390 // https://code.google.com/p/libyuv/issues/detail?id=517
391 #define HAS_I210ALPHATOARGBROW_AVX2
392 #define HAS_I410ALPHATOARGBROW_AVX2
393 #endif
394 #endif
395 
396 // The following are available for AVX512 clang x86 platforms:
397 // TODO(fbarchard): Port to GCC and Visual C
398 // TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789
399 #if !defined(LIBYUV_DISABLE_X86) && \
400     (defined(__x86_64__) || defined(__i386__)) && (defined(CLANG_HAS_AVX512))
401 #define HAS_ARGBTORGB24ROW_AVX512VBMI
402 #endif
403 
404 // The following are available for AVX512 clang x64 platforms:
405 // TODO(fbarchard): Port to x86
406 #if !defined(LIBYUV_DISABLE_X86) && defined(__x86_64__) && \
407     (defined(CLANG_HAS_AVX512))
408 #define HAS_I422TOARGBROW_AVX512BW
409 #endif
410 
411 // The following are available on Neon platforms:
412 #if !defined(LIBYUV_DISABLE_NEON) && \
413     (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
414 #define HAS_AB64TOARGBROW_NEON
415 #define HAS_ABGRTOUVROW_NEON
416 #define HAS_ABGRTOYROW_NEON
417 #define HAS_AR64TOARGBROW_NEON
418 #define HAS_ARGB1555TOARGBROW_NEON
419 #define HAS_ARGB1555TOUVROW_NEON
420 #define HAS_ARGB1555TOYROW_NEON
421 #define HAS_ARGB4444TOARGBROW_NEON
422 #define HAS_ARGB4444TOUVROW_NEON
423 #define HAS_ARGB4444TOYROW_NEON
424 #define HAS_ARGBEXTRACTALPHAROW_NEON
425 #define HAS_ARGBSETROW_NEON
426 #define HAS_ARGBTOAB64ROW_NEON
427 #define HAS_ARGBTOAR64ROW_NEON
428 #define HAS_ARGBTOARGB1555ROW_NEON
429 #define HAS_ARGBTOARGB4444ROW_NEON
430 #define HAS_ARGBTORAWROW_NEON
431 #define HAS_ARGBTORGB24ROW_NEON
432 #define HAS_ARGBTORGB565DITHERROW_NEON
433 #define HAS_ARGBTORGB565ROW_NEON
434 #define HAS_ARGBTOUV444ROW_NEON
435 #define HAS_ARGBTOUVJROW_NEON
436 #define HAS_ARGBTOUVROW_NEON
437 #define HAS_ARGBTOYJROW_NEON
438 #define HAS_ARGBTOYROW_NEON
439 #define HAS_AYUVTOUVROW_NEON
440 #define HAS_AYUVTOVUROW_NEON
441 #define HAS_AYUVTOYROW_NEON
442 #define HAS_BGRATOUVROW_NEON
443 #define HAS_BGRATOYROW_NEON
444 #define HAS_BYTETOFLOATROW_NEON
445 #define HAS_CONVERT16TO8ROW_NEON
446 #define HAS_COPYROW_NEON
447 #define HAS_DETILEROW_NEON
448 #define HAS_DETILESPLITUVROW_NEON
449 #define HAS_DIVIDEROW_16_NEON
450 #define HAS_HALFFLOATROW_NEON
451 #define HAS_HALFMERGEUVROW_NEON
452 #define HAS_I400TOARGBROW_NEON
453 #define HAS_I422ALPHATOARGBROW_NEON
454 #define HAS_I422TOARGB1555ROW_NEON
455 #define HAS_I422TOARGB4444ROW_NEON
456 #define HAS_I422TOARGBROW_NEON
457 #define HAS_I422TORGB24ROW_NEON
458 #define HAS_I422TORGB565ROW_NEON
459 #define HAS_I422TORGBAROW_NEON
460 #define HAS_I422TOUYVYROW_NEON
461 #define HAS_I422TOYUY2ROW_NEON
462 #define HAS_I444ALPHATOARGBROW_NEON
463 #define HAS_I444TOARGBROW_NEON
464 #define HAS_INTERPOLATEROW_16_NEON
465 #define HAS_INTERPOLATEROW_NEON
466 #define HAS_J400TOARGBROW_NEON
467 #define HAS_MERGEAR64ROW_NEON
468 #define HAS_MERGEARGB16TO8ROW_NEON
469 #define HAS_MERGEARGBROW_NEON
470 #define HAS_MERGEUVROW_16_NEON
471 #define HAS_MERGEUVROW_NEON
472 #define HAS_MERGEXR30ROW_NEON
473 #define HAS_MERGEXR64ROW_NEON
474 #define HAS_MERGEXRGB16TO8ROW_NEON
475 #define HAS_MERGEXRGBROW_NEON
476 #define HAS_MIRRORROW_NEON
477 #define HAS_MIRRORSPLITUVROW_NEON
478 #define HAS_MIRRORUVROW_NEON
479 #define HAS_MULTIPLYROW_16_NEON
480 #define HAS_NV12TOARGBROW_NEON
481 #define HAS_NV12TORGB24ROW_NEON
482 #define HAS_NV12TORGB565ROW_NEON
483 #define HAS_NV21TOARGBROW_NEON
484 #define HAS_NV21TORGB24ROW_NEON
485 #define HAS_NV21TOYUV24ROW_NEON
486 #define HAS_RAWTOARGBROW_NEON
487 #define HAS_RAWTORGB24ROW_NEON
488 #define HAS_RAWTORGBAROW_NEON
489 #define HAS_RAWTOUVJROW_NEON
490 #define HAS_RAWTOUVROW_NEON
491 #define HAS_RAWTOYJROW_NEON
492 #define HAS_RAWTOYROW_NEON
493 #define HAS_RGB24TOARGBROW_NEON
494 #define HAS_RGB24TOUVJROW_NEON
495 #define HAS_RGB24TOUVROW_NEON
496 #define HAS_RGB24TOYJROW_NEON
497 #define HAS_RGB24TOYROW_NEON
498 #define HAS_RGB565TOARGBROW_NEON
499 #define HAS_RGB565TOUVROW_NEON
500 #define HAS_RGB565TOYROW_NEON
501 #define HAS_RGBATOUVROW_NEON
502 #define HAS_RGBATOYJROW_NEON
503 #define HAS_RGBATOYROW_NEON
504 #define HAS_SETROW_NEON
505 #define HAS_SPLITARGBROW_NEON
506 #define HAS_SPLITRGBROW_NEON
507 #define HAS_SPLITUVROW_16_NEON
508 #define HAS_SPLITUVROW_NEON
509 #define HAS_SPLITXRGBROW_NEON
510 #define HAS_SWAPUVROW_NEON
511 #define HAS_UYVYTOARGBROW_NEON
512 #define HAS_UYVYTOUV422ROW_NEON
513 #define HAS_UYVYTOUVROW_NEON
514 #define HAS_UYVYTOYROW_NEON
515 #define HAS_YUY2TOARGBROW_NEON
516 #define HAS_YUY2TOUV422ROW_NEON
517 #define HAS_YUY2TOUVROW_NEON
518 #define HAS_YUY2TOYROW_NEON
519 
520 // Effects:
521 #define HAS_ARGBADDROW_NEON
522 #define HAS_ARGBATTENUATEROW_NEON
523 #define HAS_ARGBBLENDROW_NEON
524 #define HAS_ARGBCOLORMATRIXROW_NEON
525 #define HAS_ARGBGRAYROW_NEON
526 #define HAS_ARGBMIRRORROW_NEON
527 #define HAS_RGB24MIRRORROW_NEON
528 #define HAS_ARGBMULTIPLYROW_NEON
529 #define HAS_ARGBQUANTIZEROW_NEON
530 #define HAS_ARGBSEPIAROW_NEON
531 #define HAS_ARGBSHADEROW_NEON
532 #define HAS_ARGBSHUFFLEROW_NEON
533 #define HAS_ARGBSUBTRACTROW_NEON
534 #define HAS_SOBELROW_NEON
535 #define HAS_SOBELTOPLANEROW_NEON
536 #define HAS_SOBELXROW_NEON
537 #define HAS_SOBELXYROW_NEON
538 #define HAS_SOBELYROW_NEON
539 #endif
540 
541 // The following are available on AArch64 platforms:
542 #if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
543 #define HAS_INTERPOLATEROW_16TO8_NEON
544 #define HAS_SCALESUMSAMPLES_NEON
545 #define HAS_GAUSSROW_F32_NEON
546 #define HAS_GAUSSCOL_F32_NEON
547 #endif
548 #if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa)
549 #define HAS_ABGRTOUVROW_MSA
550 #define HAS_ABGRTOYROW_MSA
551 #define HAS_ARGB1555TOARGBROW_MSA
552 #define HAS_ARGB1555TOUVROW_MSA
553 #define HAS_ARGB1555TOYROW_MSA
554 #define HAS_ARGB4444TOARGBROW_MSA
555 #define HAS_ARGBADDROW_MSA
556 #define HAS_ARGBATTENUATEROW_MSA
557 #define HAS_ARGBBLENDROW_MSA
558 #define HAS_ARGBCOLORMATRIXROW_MSA
559 #define HAS_ARGBEXTRACTALPHAROW_MSA
560 #define HAS_ARGBGRAYROW_MSA
561 #define HAS_ARGBMIRRORROW_MSA
562 #define HAS_ARGBMULTIPLYROW_MSA
563 #define HAS_ARGBQUANTIZEROW_MSA
564 #define HAS_ARGBSEPIAROW_MSA
565 #define HAS_ARGBSETROW_MSA
566 #define HAS_ARGBSHADEROW_MSA
567 #define HAS_ARGBSHUFFLEROW_MSA
568 #define HAS_ARGBSUBTRACTROW_MSA
569 #define HAS_ARGBTOARGB1555ROW_MSA
570 #define HAS_ARGBTOARGB4444ROW_MSA
571 #define HAS_ARGBTORAWROW_MSA
572 #define HAS_ARGBTORGB24ROW_MSA
573 #define HAS_ARGBTORGB565DITHERROW_MSA
574 #define HAS_ARGBTORGB565ROW_MSA
575 #define HAS_ARGBTOUV444ROW_MSA
576 #define HAS_ARGBTOUVJROW_MSA
577 #define HAS_ARGBTOUVROW_MSA
578 #define HAS_ARGBTOYJROW_MSA
579 #define HAS_ARGBTOYROW_MSA
580 #define HAS_BGRATOUVROW_MSA
581 #define HAS_BGRATOYROW_MSA
582 #define HAS_HALFFLOATROW_MSA
583 #define HAS_I400TOARGBROW_MSA
584 #define HAS_I422TOUYVYROW_MSA
585 #define HAS_I422TOYUY2ROW_MSA
586 #define HAS_I422TOARGBROW_MSA
587 #define HAS_I422TORGBAROW_MSA
588 #define HAS_I422ALPHATOARGBROW_MSA
589 #define HAS_I422TORGB24ROW_MSA
590 #define HAS_I422TORGB565ROW_MSA
591 #define HAS_I422TOARGB4444ROW_MSA
592 #define HAS_I422TOARGB1555ROW_MSA
593 #define HAS_NV12TOARGBROW_MSA
594 #define HAS_NV12TORGB565ROW_MSA
595 #define HAS_NV21TOARGBROW_MSA
596 #define HAS_YUY2TOARGBROW_MSA
597 #define HAS_UYVYTOARGBROW_MSA
598 #define HAS_I444TOARGBROW_MSA
599 #define HAS_INTERPOLATEROW_MSA
600 #define HAS_J400TOARGBROW_MSA
601 #define HAS_MERGEUVROW_MSA
602 #define HAS_MIRRORROW_MSA
603 #define HAS_MIRRORUVROW_MSA
604 #define HAS_MIRRORSPLITUVROW_MSA
605 #define HAS_RAWTOARGBROW_MSA
606 #define HAS_RAWTORGB24ROW_MSA
607 #define HAS_RAWTOUVROW_MSA
608 #define HAS_RAWTOYROW_MSA
609 #define HAS_RGB24TOARGBROW_MSA
610 #define HAS_RGB24TOUVROW_MSA
611 #define HAS_RGB24TOYROW_MSA
612 #define HAS_RGB565TOARGBROW_MSA
613 #define HAS_RGB565TOUVROW_MSA
614 #define HAS_RGB565TOYROW_MSA
615 #define HAS_RGBATOUVROW_MSA
616 #define HAS_RGBATOYROW_MSA
617 #define HAS_SETROW_MSA
618 #define HAS_SOBELROW_MSA
619 #define HAS_SOBELTOPLANEROW_MSA
620 #define HAS_SOBELXROW_MSA
621 #define HAS_SOBELXYROW_MSA
622 #define HAS_SOBELYROW_MSA
623 #define HAS_SPLITUVROW_MSA
624 #define HAS_UYVYTOUVROW_MSA
625 #define HAS_UYVYTOYROW_MSA
626 #define HAS_YUY2TOUV422ROW_MSA
627 #define HAS_YUY2TOUVROW_MSA
628 #define HAS_YUY2TOYROW_MSA
629 #endif
630 
631 #if !defined(LIBYUV_DISABLE_LSX) && defined(__loongarch_sx)
632 #define HAS_ARGB4444TOARGBROW_LSX
633 #define HAS_ARGB1555TOARGBROW_LSX
634 #define HAS_RGB565TOARGBROW_LSX
635 #define HAS_RGB24TOARGBROW_LSX
636 #define HAS_RAWTOARGBROW_LSX
637 #define HAS_ARGB1555TOYROW_LSX
638 #define HAS_ARGB1555TOUVROW_LSX
639 #define HAS_RGB565TOYROW_LSX
640 #define HAS_RGB565TOUVROW_LSX
641 #define HAS_RGB24TOYROW_LSX
642 #define HAS_RGB24TOUVROW_LSX
643 #define HAS_RAWTOYROW_LSX
644 #define HAS_RAWTOUVROW_LSX
645 #define HAS_NV12TOARGBROW_LSX
646 #define HAS_NV12TORGB565ROW_LSX
647 #define HAS_NV21TOARGBROW_LSX
648 #define HAS_SOBELROW_LSX
649 #define HAS_SOBELTOPLANEROW_LSX
650 #define HAS_SOBELXYROW_LSX
651 #define HAS_ARGBTOYJROW_LSX
652 #define HAS_BGRATOYROW_LSX
653 #define HAS_BGRATOUVROW_LSX
654 #define HAS_ABGRTOYROW_LSX
655 #define HAS_ABGRTOUVROW_LSX
656 #define HAS_RGBATOYROW_LSX
657 #define HAS_RGBATOUVROW_LSX
658 #define HAS_ARGBTOUVJROW_LSX
659 #define HAS_I444TOARGBROW_LSX
660 #define HAS_I400TOARGBROW_LSX
661 #define HAS_J400TOARGBROW_LSX
662 #define HAS_YUY2TOARGBROW_LSX
663 #define HAS_UYVYTOARGBROW_LSX
664 #define HAS_INTERPOLATEROW_LSX
665 #define HAS_ARGBSETROW_LSX
666 #define HAS_RAWTORGB24ROW_LSX
667 #define HAS_MERGEUVROW_LSX
668 #define HAS_ARGBEXTRACTALPHAROW_LSX
669 #define HAS_ARGBBLENDROW_LSX
670 #define HAS_ARGBQUANTIZEROW_LSX
671 #define HAS_ARGBCOLORMATRIXROW_LSX
672 #define HAS_SPLITUVROW_LSX
673 #define HAS_SETROW_LSX
674 #define HAS_MIRRORSPLITUVROW_LSX
675 #endif
676 
677 #if !defined(LIBYUV_DISABLE_LASX) && defined(__loongarch_asx)
678 #define HAS_I422TOARGBROW_LASX
679 #define HAS_I422TORGBAROW_LASX
680 #define HAS_I422ALPHATOARGBROW_LASX
681 #define HAS_I422TOYUY2ROW_LASX
682 #define HAS_I422TOUYVYROW_LASX
683 #define HAS_MIRRORROW_LASX
684 #define HAS_MIRRORUVROW_LASX
685 #define HAS_ARGBMIRRORROW_LASX
686 #define HAS_I422TORGB24ROW_LASX
687 #define HAS_I422TORGB565ROW_LASX
688 #define HAS_I422TOARGB4444ROW_LASX
689 #define HAS_I422TOARGB1555ROW_LASX
690 #define HAS_YUY2TOUVROW_LASX
691 #define HAS_YUY2TOYROW_LASX
692 #define HAS_YUY2TOUV422ROW_LASX
693 #define HAS_UYVYTOYROW_LASX
694 #define HAS_UYVYTOUVROW_LASX
695 #define HAS_UYVYTOUV422ROW_LASX
696 #define HAS_ARGBTOYROW_LASX
697 #define HAS_ARGBTOUVROW_LASX
698 #define HAS_ARGBTORGB24ROW_LASX
699 #define HAS_ARGBTORAWROW_LASX
700 #define HAS_ARGBTORGB565ROW_LASX
701 #define HAS_ARGBTOARGB1555ROW_LASX
702 #define HAS_ARGBTOARGB4444ROW_LASX
703 #define HAS_ARGBTOUV444ROW_LASX
704 #define HAS_ARGBMULTIPLYROW_LASX
705 #define HAS_ARGBADDROW_LASX
706 #define HAS_ARGBSUBTRACTROW_LASX
707 #define HAS_ARGBATTENUATEROW_LASX
708 #define HAS_ARGBTORGB565DITHERROW_LASX
709 #define HAS_ARGBSHUFFLEROW_LASX
710 #define HAS_ARGBSHADEROW_LASX
711 #define HAS_ARGBGRAYROW_LASX
712 #define HAS_ARGBSEPIAROW_LASX
713 #define HAS_ARGB4444TOARGBROW_LASX
714 #define HAS_ARGB1555TOARGBROW_LASX
715 #define HAS_RGB565TOARGBROW_LASX
716 #define HAS_RGB24TOARGBROW_LASX
717 #define HAS_RAWTOARGBROW_LASX
718 #define HAS_ARGB1555TOYROW_LASX
719 #define HAS_ARGB1555TOUVROW_LASX
720 #define HAS_RGB565TOYROW_LASX
721 #define HAS_RGB565TOUVROW_LASX
722 #define HAS_RGB24TOYROW_LASX
723 #define HAS_RGB24TOUVROW_LASX
724 #define HAS_RAWTOYROW_LASX
725 #define HAS_RAWTOUVROW_LASX
726 #define HAS_NV12TOARGBROW_LASX
727 #define HAS_NV12TORGB565ROW_LASX
728 #define HAS_NV21TOARGBROW_LASX
729 #define HAS_ARGBTOYJROW_LASX
730 #define HAS_ARGBTOUVJROW_LASX
731 #endif
732 
733 #if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__)
734 #if defined(VISUALC_HAS_AVX2)
735 #define SIMD_ALIGNED(var) __declspec(align(32)) var
736 #else
737 #define SIMD_ALIGNED(var) __declspec(align(16)) var
738 #endif
739 #define LIBYUV_NOINLINE __declspec(noinline)
740 typedef __declspec(align(16)) int16_t vec16[8];
741 typedef __declspec(align(16)) int32_t vec32[4];
742 typedef __declspec(align(16)) float vecf32[4];
743 typedef __declspec(align(16)) int8_t vec8[16];
744 typedef __declspec(align(16)) uint16_t uvec16[8];
745 typedef __declspec(align(16)) uint32_t uvec32[4];
746 typedef __declspec(align(16)) uint8_t uvec8[16];
747 typedef __declspec(align(32)) int16_t lvec16[16];
748 typedef __declspec(align(32)) int32_t lvec32[8];
749 typedef __declspec(align(32)) int8_t lvec8[32];
750 typedef __declspec(align(32)) uint16_t ulvec16[16];
751 typedef __declspec(align(32)) uint32_t ulvec32[8];
752 typedef __declspec(align(32)) uint8_t ulvec8[32];
753 #elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__))
754 // Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
755 #if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)
756 #define SIMD_ALIGNED(var) var __attribute__((aligned(32)))
757 #else
758 #define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
759 #endif
760 #define LIBYUV_NOINLINE __attribute__((noinline))
761 typedef int16_t __attribute__((vector_size(16))) vec16;
762 typedef int32_t __attribute__((vector_size(16))) vec32;
763 typedef float __attribute__((vector_size(16))) vecf32;
764 typedef int8_t __attribute__((vector_size(16))) vec8;
765 typedef uint16_t __attribute__((vector_size(16))) uvec16;
766 typedef uint32_t __attribute__((vector_size(16))) uvec32;
767 typedef uint8_t __attribute__((vector_size(16))) uvec8;
768 typedef int16_t __attribute__((vector_size(32))) lvec16;
769 typedef int32_t __attribute__((vector_size(32))) lvec32;
770 typedef int8_t __attribute__((vector_size(32))) lvec8;
771 typedef uint16_t __attribute__((vector_size(32))) ulvec16;
772 typedef uint32_t __attribute__((vector_size(32))) ulvec32;
773 typedef uint8_t __attribute__((vector_size(32))) ulvec8;
774 #else
775 #define SIMD_ALIGNED(var) var
776 #define LIBYUV_NOINLINE
777 typedef int16_t vec16[8];
778 typedef int32_t vec32[4];
779 typedef float vecf32[4];
780 typedef int8_t vec8[16];
781 typedef uint16_t uvec16[8];
782 typedef uint32_t uvec32[4];
783 typedef uint8_t uvec8[16];
784 typedef int16_t lvec16[16];
785 typedef int32_t lvec32[8];
786 typedef int8_t lvec8[32];
787 typedef uint16_t ulvec16[16];
788 typedef uint32_t ulvec32[8];
789 typedef uint8_t ulvec8[32];
790 #endif
791 
792 #if defined(__aarch64__) || defined(__arm__)
793 // This struct is for ARM color conversion.
794 struct YuvConstants {
795   uvec8 kUVCoeff;
796   vec16 kRGBCoeffBias;
797 };
798 #else
799 // This struct is for Intel color conversion.
800 struct YuvConstants {
801   uint8_t kUVToB[32];
802   uint8_t kUVToG[32];
803   uint8_t kUVToR[32];
804   int16_t kYToRgb[16];
805   int16_t kYBiasToRgb[16];
806 };
807 
808 // Offsets into YuvConstants structure
809 #define KUVTOB 0
810 #define KUVTOG 32
811 #define KUVTOR 64
812 #define KYTORGB 96
813 #define KYBIASTORGB 128
814 
815 #endif
816 
817 #define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1)))
818 
819 #define align_buffer_64(var, size)                                           \
820   uint8_t* var##_mem = (uint8_t*)(malloc((size) + 63));         /* NOLINT */ \
821   uint8_t* var = (uint8_t*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */
822 
823 #define free_aligned_buffer_64(var) \
824   free(var##_mem);                  \
825   var = 0
826 
827 #if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
828 #define OMITFP
829 #else
830 #define OMITFP __attribute__((optimize("omit-frame-pointer")))
831 #endif
832 
833 // NaCL macros for GCC x86 and x64.
834 #if defined(__native_client__)
835 #define LABELALIGN ".p2align 5\n"
836 #else
837 #define LABELALIGN
838 #endif
839 
840 // Intel Code Analizer markers.  Insert IACA_START IACA_END around code to be
841 // measured and then run with iaca -64 libyuv_unittest.
842 // IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within
843 // inline assembly blocks.
844 // example of iaca:
845 // ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest
846 
847 #if defined(__x86_64__) || defined(__i386__)
848 
849 #define IACA_ASM_START  \
850   ".byte 0x0F, 0x0B\n"  \
851   " movl $111, %%ebx\n" \
852   ".byte 0x64, 0x67, 0x90\n"
853 
854 #define IACA_ASM_END         \
855   " movl $222, %%ebx\n"      \
856   ".byte 0x64, 0x67, 0x90\n" \
857   ".byte 0x0F, 0x0B\n"
858 
859 #define IACA_SSC_MARK(MARK_ID)                        \
860   __asm__ __volatile__("\n\t  movl $" #MARK_ID        \
861                        ", %%ebx"                      \
862                        "\n\t  .byte 0x64, 0x67, 0x90" \
863                        :                              \
864                        :                              \
865                        : "memory");
866 
867 #define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B");
868 
869 #else /* Visual C */
870 #define IACA_UD_BYTES \
871   { __asm _emit 0x0F __asm _emit 0x0B }
872 
873 #define IACA_SSC_MARK(x) \
874   { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 }
875 
876 #define IACA_VC64_START __writegsbyte(111, 111);
877 #define IACA_VC64_END __writegsbyte(222, 222);
878 #endif
879 
880 #define IACA_START     \
881   {                    \
882     IACA_UD_BYTES      \
883     IACA_SSC_MARK(111) \
884   }
885 #define IACA_END       \
886   {                    \
887     IACA_SSC_MARK(222) \
888     IACA_UD_BYTES      \
889   }
890 
891 void I444ToARGBRow_NEON(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 I422ToARGBRow_NEON(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 I444AlphaToARGBRow_NEON(const uint8_t* src_y,
904                              const uint8_t* src_u,
905                              const uint8_t* src_v,
906                              const uint8_t* src_a,
907                              uint8_t* dst_argb,
908                              const struct YuvConstants* yuvconstants,
909                              int width);
910 void I422AlphaToARGBRow_NEON(const uint8_t* src_y,
911                              const uint8_t* src_u,
912                              const uint8_t* src_v,
913                              const uint8_t* src_a,
914                              uint8_t* dst_argb,
915                              const struct YuvConstants* yuvconstants,
916                              int width);
917 void I422ToRGBARow_NEON(const uint8_t* src_y,
918                         const uint8_t* src_u,
919                         const uint8_t* src_v,
920                         uint8_t* dst_rgba,
921                         const struct YuvConstants* yuvconstants,
922                         int width);
923 void I422ToRGB24Row_NEON(const uint8_t* src_y,
924                          const uint8_t* src_u,
925                          const uint8_t* src_v,
926                          uint8_t* dst_rgb24,
927                          const struct YuvConstants* yuvconstants,
928                          int width);
929 void I422ToRGB565Row_NEON(const uint8_t* src_y,
930                           const uint8_t* src_u,
931                           const uint8_t* src_v,
932                           uint8_t* dst_rgb565,
933                           const struct YuvConstants* yuvconstants,
934                           int width);
935 void I422ToARGB1555Row_NEON(const uint8_t* src_y,
936                             const uint8_t* src_u,
937                             const uint8_t* src_v,
938                             uint8_t* dst_argb1555,
939                             const struct YuvConstants* yuvconstants,
940                             int width);
941 void I422ToARGB4444Row_NEON(const uint8_t* src_y,
942                             const uint8_t* src_u,
943                             const uint8_t* src_v,
944                             uint8_t* dst_argb4444,
945                             const struct YuvConstants* yuvconstants,
946                             int width);
947 void NV12ToARGBRow_NEON(const uint8_t* src_y,
948                         const uint8_t* src_uv,
949                         uint8_t* dst_argb,
950                         const struct YuvConstants* yuvconstants,
951                         int width);
952 void NV12ToRGB565Row_NEON(const uint8_t* src_y,
953                           const uint8_t* src_uv,
954                           uint8_t* dst_rgb565,
955                           const struct YuvConstants* yuvconstants,
956                           int width);
957 void NV21ToARGBRow_NEON(const uint8_t* src_y,
958                         const uint8_t* src_vu,
959                         uint8_t* dst_argb,
960                         const struct YuvConstants* yuvconstants,
961                         int width);
962 void NV12ToRGB24Row_NEON(const uint8_t* src_y,
963                          const uint8_t* src_uv,
964                          uint8_t* dst_rgb24,
965                          const struct YuvConstants* yuvconstants,
966                          int width);
967 void NV21ToRGB24Row_NEON(const uint8_t* src_y,
968                          const uint8_t* src_vu,
969                          uint8_t* dst_rgb24,
970                          const struct YuvConstants* yuvconstants,
971                          int width);
972 void NV21ToYUV24Row_NEON(const uint8_t* src_y,
973                          const uint8_t* src_vu,
974                          uint8_t* dst_yuv24,
975                          int width);
976 void YUY2ToARGBRow_NEON(const uint8_t* src_yuy2,
977                         uint8_t* dst_argb,
978                         const struct YuvConstants* yuvconstants,
979                         int width);
980 void UYVYToARGBRow_NEON(const uint8_t* src_uyvy,
981                         uint8_t* dst_argb,
982                         const struct YuvConstants* yuvconstants,
983                         int width);
984 void I444ToARGBRow_MSA(const uint8_t* src_y,
985                        const uint8_t* src_u,
986                        const uint8_t* src_v,
987                        uint8_t* dst_argb,
988                        const struct YuvConstants* yuvconstants,
989                        int width);
990 void I444ToARGBRow_LSX(const uint8_t* src_y,
991                        const uint8_t* src_u,
992                        const uint8_t* src_v,
993                        uint8_t* dst_argb,
994                        const struct YuvConstants* yuvconstants,
995                        int width);
996 
997 void I422ToARGBRow_MSA(const uint8_t* src_y,
998                        const uint8_t* src_u,
999                        const uint8_t* src_v,
1000                        uint8_t* dst_argb,
1001                        const struct YuvConstants* yuvconstants,
1002                        int width);
1003 void I422ToARGBRow_LASX(const uint8_t* src_y,
1004                         const uint8_t* src_u,
1005                         const uint8_t* src_v,
1006                         uint8_t* dst_argb,
1007                         const struct YuvConstants* yuvconstants,
1008                         int width);
1009 void I422ToRGBARow_MSA(const uint8_t* src_y,
1010                        const uint8_t* src_u,
1011                        const uint8_t* src_v,
1012                        uint8_t* dst_argb,
1013                        const struct YuvConstants* yuvconstants,
1014                        int width);
1015 void I422ToRGBARow_LASX(const uint8_t* src_y,
1016                         const uint8_t* src_u,
1017                         const uint8_t* src_v,
1018                         uint8_t* dst_argb,
1019                         const struct YuvConstants* yuvconstants,
1020                         int width);
1021 void I422AlphaToARGBRow_MSA(const uint8_t* src_y,
1022                             const uint8_t* src_u,
1023                             const uint8_t* src_v,
1024                             const uint8_t* src_a,
1025                             uint8_t* dst_argb,
1026                             const struct YuvConstants* yuvconstants,
1027                             int width);
1028 void I422AlphaToARGBRow_LASX(const uint8_t* src_y,
1029                              const uint8_t* src_u,
1030                              const uint8_t* src_v,
1031                              const uint8_t* src_a,
1032                              uint8_t* dst_argb,
1033                              const struct YuvConstants* yuvconstants,
1034                              int width);
1035 void I422ToRGB24Row_MSA(const uint8_t* src_y,
1036                         const uint8_t* src_u,
1037                         const uint8_t* src_v,
1038                         uint8_t* dst_argb,
1039                         const struct YuvConstants* yuvconstants,
1040                         int width);
1041 void I422ToRGB24Row_LASX(const uint8_t* src_y,
1042                          const uint8_t* src_u,
1043                          const uint8_t* src_v,
1044                          uint8_t* dst_argb,
1045                          const struct YuvConstants* yuvconstants,
1046                          int width);
1047 void I422ToRGB565Row_MSA(const uint8_t* src_y,
1048                          const uint8_t* src_u,
1049                          const uint8_t* src_v,
1050                          uint8_t* dst_rgb565,
1051                          const struct YuvConstants* yuvconstants,
1052                          int width);
1053 void I422ToRGB565Row_LASX(const uint8_t* src_y,
1054                           const uint8_t* src_u,
1055                           const uint8_t* src_v,
1056                           uint8_t* dst_rgb565,
1057                           const struct YuvConstants* yuvconstants,
1058                           int width);
1059 void I422ToARGB4444Row_MSA(const uint8_t* src_y,
1060                            const uint8_t* src_u,
1061                            const uint8_t* src_v,
1062                            uint8_t* dst_argb4444,
1063                            const struct YuvConstants* yuvconstants,
1064                            int width);
1065 void I422ToARGB4444Row_LASX(const uint8_t* src_y,
1066                             const uint8_t* src_u,
1067                             const uint8_t* src_v,
1068                             uint8_t* dst_argb4444,
1069                             const struct YuvConstants* yuvconstants,
1070                             int width);
1071 void I422ToARGB1555Row_MSA(const uint8_t* src_y,
1072                            const uint8_t* src_u,
1073                            const uint8_t* src_v,
1074                            uint8_t* dst_argb1555,
1075                            const struct YuvConstants* yuvconstants,
1076                            int width);
1077 void I422ToARGB1555Row_LASX(const uint8_t* src_y,
1078                             const uint8_t* src_u,
1079                             const uint8_t* src_v,
1080                             uint8_t* dst_argb1555,
1081                             const struct YuvConstants* yuvconstants,
1082                             int width);
1083 void NV12ToARGBRow_MSA(const uint8_t* src_y,
1084                        const uint8_t* src_uv,
1085                        uint8_t* dst_argb,
1086                        const struct YuvConstants* yuvconstants,
1087                        int width);
1088 void NV12ToRGB565Row_MSA(const uint8_t* src_y,
1089                          const uint8_t* src_uv,
1090                          uint8_t* dst_rgb565,
1091                          const struct YuvConstants* yuvconstants,
1092                          int width);
1093 void NV21ToARGBRow_MSA(const uint8_t* src_y,
1094                        const uint8_t* src_vu,
1095                        uint8_t* dst_argb,
1096                        const struct YuvConstants* yuvconstants,
1097                        int width);
1098 void YUY2ToARGBRow_MSA(const uint8_t* src_yuy2,
1099                        uint8_t* dst_argb,
1100                        const struct YuvConstants* yuvconstants,
1101                        int width);
1102 void UYVYToARGBRow_MSA(const uint8_t* src_uyvy,
1103                        uint8_t* dst_argb,
1104                        const struct YuvConstants* yuvconstants,
1105                        int width);
1106 
1107 void NV12ToARGBRow_LSX(const uint8_t* src_y,
1108                        const uint8_t* src_uv,
1109                        uint8_t* dst_argb,
1110                        const struct YuvConstants* yuvconstants,
1111                        int width);
1112 void NV12ToARGBRow_LASX(const uint8_t* src_y,
1113                         const uint8_t* src_uv,
1114                         uint8_t* dst_argb,
1115                         const struct YuvConstants* yuvconstants,
1116                         int width);
1117 void NV12ToRGB565Row_LSX(const uint8_t* src_y,
1118                          const uint8_t* src_uv,
1119                          uint8_t* dst_rgb565,
1120                          const struct YuvConstants* yuvconstants,
1121                          int width);
1122 void NV12ToRGB565Row_LASX(const uint8_t* src_y,
1123                           const uint8_t* src_uv,
1124                           uint8_t* dst_rgb565,
1125                           const struct YuvConstants* yuvconstants,
1126                           int width);
1127 void NV21ToARGBRow_LSX(const uint8_t* src_y,
1128                        const uint8_t* src_vu,
1129                        uint8_t* dst_argb,
1130                        const struct YuvConstants* yuvconstants,
1131                        int width);
1132 void NV21ToARGBRow_LASX(const uint8_t* src_y,
1133                         const uint8_t* src_vu,
1134                         uint8_t* dst_argb,
1135                         const struct YuvConstants* yuvconstants,
1136                         int width);
1137 void YUY2ToARGBRow_LSX(const uint8_t* src_yuy2,
1138                        uint8_t* dst_argb,
1139                        const struct YuvConstants* yuvconstants,
1140                        int width);
1141 void UYVYToARGBRow_LSX(const uint8_t* src_uyvy,
1142                        uint8_t* dst_argb,
1143                        const struct YuvConstants* yuvconstants,
1144                        int width);
1145 
1146 void ARGBToYRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
1147 void ARGBToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1148 void ABGRToYRow_AVX2(const uint8_t* src_abgr, uint8_t* dst_y, int width);
1149 void ABGRToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1150 void ARGBToYRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
1151 void ARGBToYJRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
1152 void ARGBToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1153 void ARGBToYJRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
1154 void RGBAToYJRow_AVX2(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1155 void RGBAToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1156 void RGBAToYJRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1157 void BGRAToYRow_SSSE3(const uint8_t* src_bgra, uint8_t* dst_y, int width);
1158 void ABGRToYRow_SSSE3(const uint8_t* src_abgr, uint8_t* dst_y, int width);
1159 void RGBAToYRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1160 void RGB24ToYRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
1161 void RGB24ToYJRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_yj, int width);
1162 void RAWToYRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width);
1163 void RAWToYJRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_yj, int width);
1164 void RGB24ToYJRow_AVX2(const uint8_t* src_rgb24, uint8_t* dst_yj, int width);
1165 void RAWToYJRow_AVX2(const uint8_t* src_raw, uint8_t* dst_yj, int width);
1166 void ARGBToYRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
1167 void ARGBToYJRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
1168 void RGBAToYJRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1169 void ARGBToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1170 void ARGBToYJRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1171 void ARGBToYRow_LASX(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1172 void ARGBToYJRow_LSX(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1173 void ARGBToYJRow_LASX(const uint8_t* src_argb0, uint8_t* dst_y, int width);
1174 void ARGBToUV444Row_NEON(const uint8_t* src_argb,
1175                          uint8_t* dst_u,
1176                          uint8_t* dst_v,
1177                          int width);
1178 void ARGBToUVRow_NEON(const uint8_t* src_argb,
1179                       int src_stride_argb,
1180                       uint8_t* dst_u,
1181                       uint8_t* dst_v,
1182                       int width);
1183 void ARGBToUV444Row_MSA(const uint8_t* src_argb,
1184                         uint8_t* dst_u,
1185                         uint8_t* dst_v,
1186                         int width);
1187 void ARGBToUVRow_MSA(const uint8_t* src_argb,
1188                      int src_stride_argb,
1189                      uint8_t* dst_u,
1190                      uint8_t* dst_v,
1191                      int width);
1192 void ARGBToUVRow_LASX(const uint8_t* src_argb,
1193                       int src_stride_argb,
1194                       uint8_t* dst_u,
1195                       uint8_t* dst_v,
1196                       int width);
1197 void ARGBToUV444Row_LASX(const uint8_t* src_argb,
1198                          uint8_t* dst_u,
1199                          uint8_t* dst_v,
1200                          int width);
1201 void ARGBToUVJRow_NEON(const uint8_t* src_argb,
1202                        int src_stride_argb,
1203                        uint8_t* dst_u,
1204                        uint8_t* dst_v,
1205                        int width);
1206 void BGRAToUVRow_NEON(const uint8_t* src_bgra,
1207                       int src_stride_bgra,
1208                       uint8_t* dst_u,
1209                       uint8_t* dst_v,
1210                       int width);
1211 void ABGRToUVRow_NEON(const uint8_t* src_abgr,
1212                       int src_stride_abgr,
1213                       uint8_t* dst_u,
1214                       uint8_t* dst_v,
1215                       int width);
1216 void RGBAToUVRow_NEON(const uint8_t* src_rgba,
1217                       int src_stride_rgba,
1218                       uint8_t* dst_u,
1219                       uint8_t* dst_v,
1220                       int width);
1221 void RGB24ToUVRow_NEON(const uint8_t* src_rgb24,
1222                        int src_stride_rgb24,
1223                        uint8_t* dst_u,
1224                        uint8_t* dst_v,
1225                        int width);
1226 void RAWToUVRow_NEON(const uint8_t* src_raw,
1227                      int src_stride_raw,
1228                      uint8_t* dst_u,
1229                      uint8_t* dst_v,
1230                      int width);
1231 void RGB24ToUVJRow_NEON(const uint8_t* src_rgb24,
1232                         int src_stride_rgb24,
1233                         uint8_t* dst_u,
1234                         uint8_t* dst_v,
1235                         int width);
1236 void RAWToUVJRow_NEON(const uint8_t* src_raw,
1237                       int src_stride_raw,
1238                       uint8_t* dst_u,
1239                       uint8_t* dst_v,
1240                       int width);
1241 void RGB565ToUVRow_NEON(const uint8_t* src_rgb565,
1242                         int src_stride_rgb565,
1243                         uint8_t* dst_u,
1244                         uint8_t* dst_v,
1245                         int width);
1246 void ARGB1555ToUVRow_NEON(const uint8_t* src_argb1555,
1247                           int src_stride_argb1555,
1248                           uint8_t* dst_u,
1249                           uint8_t* dst_v,
1250                           int width);
1251 void ARGB4444ToUVRow_NEON(const uint8_t* src_argb4444,
1252                           int src_stride_argb4444,
1253                           uint8_t* dst_u,
1254                           uint8_t* dst_v,
1255                           int width);
1256 void ARGBToUVJRow_MSA(const uint8_t* src_rgb,
1257                       int src_stride_rgb,
1258                       uint8_t* dst_u,
1259                       uint8_t* dst_v,
1260                       int width);
1261 void BGRAToUVRow_MSA(const uint8_t* src_rgb,
1262                      int src_stride_rgb,
1263                      uint8_t* dst_u,
1264                      uint8_t* dst_v,
1265                      int width);
1266 void ABGRToUVRow_MSA(const uint8_t* src_rgb,
1267                      int src_stride_rgb,
1268                      uint8_t* dst_u,
1269                      uint8_t* dst_v,
1270                      int width);
1271 void RGBAToUVRow_MSA(const uint8_t* src_rgb,
1272                      int src_stride_rgb,
1273                      uint8_t* dst_u,
1274                      uint8_t* dst_v,
1275                      int width);
1276 void RGB24ToUVRow_MSA(const uint8_t* src_rgb,
1277                       int src_stride_rgb,
1278                       uint8_t* dst_u,
1279                       uint8_t* dst_v,
1280                       int width);
1281 void RAWToUVRow_MSA(const uint8_t* src_rgb,
1282                     int src_stride_rgb,
1283                     uint8_t* dst_u,
1284                     uint8_t* dst_v,
1285                     int width);
1286 void RGB565ToUVRow_MSA(const uint8_t* src_rgb565,
1287                        int src_stride_rgb565,
1288                        uint8_t* dst_u,
1289                        uint8_t* dst_v,
1290                        int width);
1291 void ARGB1555ToUVRow_MSA(const uint8_t* src_argb1555,
1292                          int src_stride_argb1555,
1293                          uint8_t* dst_u,
1294                          uint8_t* dst_v,
1295                          int width);
1296 void BGRAToUVRow_LSX(const uint8_t* src_bgra,
1297                      int src_stride_bgra,
1298                      uint8_t* dst_u,
1299                      uint8_t* dst_v,
1300                      int width);
1301 void ABGRToUVRow_LSX(const uint8_t* src_abgr,
1302                      int src_stride_abgr,
1303                      uint8_t* dst_u,
1304                      uint8_t* dst_v,
1305                      int width);
1306 void RGBAToUVRow_LSX(const uint8_t* src_rgba,
1307                      int src_stride_rgba,
1308                      uint8_t* dst_u,
1309                      uint8_t* dst_v,
1310                      int width);
1311 void ARGBToUVJRow_LSX(const uint8_t* src_argb,
1312                       int src_stride_argb,
1313                       uint8_t* dst_u,
1314                       uint8_t* dst_v,
1315                       int width);
1316 void ARGBToUVJRow_LASX(const uint8_t* src_argb,
1317                        int src_stride_argb,
1318                        uint8_t* dst_u,
1319                        uint8_t* dst_v,
1320                        int width);
1321 void ARGB1555ToUVRow_LSX(const uint8_t* src_argb1555,
1322                          int src_stride_argb1555,
1323                          uint8_t* dst_u,
1324                          uint8_t* dst_v,
1325                          int width);
1326 void ARGB1555ToUVRow_LASX(const uint8_t* src_argb1555,
1327                           int src_stride_argb1555,
1328                           uint8_t* dst_u,
1329                           uint8_t* dst_v,
1330                           int width);
1331 void RGB565ToUVRow_LSX(const uint8_t* src_rgb565,
1332                        int src_stride_rgb565,
1333                        uint8_t* dst_u,
1334                        uint8_t* dst_v,
1335                        int width);
1336 void RGB565ToUVRow_LASX(const uint8_t* src_rgb565,
1337                         int src_stride_rgb565,
1338                         uint8_t* dst_u,
1339                         uint8_t* dst_v,
1340                         int width);
1341 void RGB24ToUVRow_LSX(const uint8_t* src_rgb24,
1342                       int src_stride_rgb24,
1343                       uint8_t* dst_u,
1344                       uint8_t* dst_v,
1345                       int width);
1346 void RGB24ToUVRow_LASX(const uint8_t* src_rgb24,
1347                        int src_stride_rgb24,
1348                        uint8_t* dst_u,
1349                        uint8_t* dst_v,
1350                        int width);
1351 void RAWToUVRow_LSX(const uint8_t* src_raw,
1352                     int src_stride_raw,
1353                     uint8_t* dst_u,
1354                     uint8_t* dst_v,
1355                     int width);
1356 void RAWToUVRow_LASX(const uint8_t* src_raw,
1357                      int src_stride_raw,
1358                      uint8_t* dst_u,
1359                      uint8_t* dst_v,
1360                      int width);
1361 void BGRAToYRow_NEON(const uint8_t* src_bgra, uint8_t* dst_y, int width);
1362 void ABGRToYRow_NEON(const uint8_t* src_abgr, uint8_t* dst_y, int width);
1363 void RGBAToYRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1364 void RGB24ToYRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
1365 void RGB24ToYJRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_yj, int width);
1366 void RAWToYRow_NEON(const uint8_t* src_raw, uint8_t* dst_y, int width);
1367 void RAWToYJRow_NEON(const uint8_t* src_raw, uint8_t* dst_yj, int width);
1368 void RGB565ToYRow_NEON(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1369 void ARGB1555ToYRow_NEON(const uint8_t* src_argb1555,
1370                          uint8_t* dst_y,
1371                          int width);
1372 void ARGB4444ToYRow_NEON(const uint8_t* src_argb4444,
1373                          uint8_t* dst_y,
1374                          int width);
1375 void BGRAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1376 void ABGRToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1377 void RGBAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1378 void RGB24ToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1379 void RAWToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
1380 void RGB565ToYRow_MSA(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1381 void ARGB1555ToYRow_MSA(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1382 
1383 void BGRAToYRow_LSX(const uint8_t* src_bgra, uint8_t* dst_y, int width);
1384 void ABGRToYRow_LSX(const uint8_t* src_abgr, uint8_t* dst_y, int width);
1385 void RGBAToYRow_LSX(const uint8_t* src_rgba, uint8_t* dst_y, int width);
1386 void ARGB1555ToYRow_LSX(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1387 void ARGB1555ToYRow_LASX(const uint8_t* src_argb1555,
1388                          uint8_t* dst_y,
1389                          int width);
1390 void RGB565ToYRow_LSX(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1391 void RGB565ToYRow_LASX(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1392 void RGB24ToYRow_LSX(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
1393 void RGB24ToYRow_LASX(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
1394 void RAWToYRow_LSX(const uint8_t* src_raw, uint8_t* dst_y, int width);
1395 void RAWToYRow_LASX(const uint8_t* src_raw, uint8_t* dst_y, int width);
1396 
1397 void ARGBToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1398 void ARGBToYJRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1399 void RGBAToYJRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1400 void BGRAToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1401 void ABGRToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1402 void RGBAToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1403 void RGB24ToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1404 void RGB24ToYJRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1405 void RAWToYRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1406 void RAWToYJRow_C(const uint8_t* src_rgb, uint8_t* dst_y, int width);
1407 void RGB565ToYRow_C(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
1408 void ARGB1555ToYRow_C(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
1409 void ARGB4444ToYRow_C(const uint8_t* src_argb4444, uint8_t* dst_y, int width);
1410 void ARGBToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1411 void ARGBToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1412 void RGBAToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1413 void BGRAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1414 void ABGRToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1415 void RGBAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1416 void RGB24ToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1417 void RGB24ToYJRow_Any_SSSE3(const uint8_t* src_ptr,
1418                             uint8_t* dst_ptr,
1419                             int width);
1420 void RAWToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1421 void RAWToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1422 void RGB24ToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1423 void RAWToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1424 void ARGBToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1425 void ARGBToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1426 void RGBAToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1427 void BGRAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1428 void ABGRToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1429 void RGBAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1430 void RGB24ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1431 void RGB24ToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1432 void RAWToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1433 void RAWToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1434 void RGB565ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1435 void ARGB1555ToYRow_Any_NEON(const uint8_t* src_ptr,
1436                              uint8_t* dst_ptr,
1437                              int width);
1438 void ARGB4444ToYRow_Any_NEON(const uint8_t* src_ptr,
1439                              uint8_t* dst_ptr,
1440                              int width);
1441 void BGRAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1442 void ABGRToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1443 void RGBAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1444 void ARGBToYJRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1445 void ARGBToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1446 void RGB24ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1447 void RAWToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1448 void RGB565ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1449 void ARGB1555ToYRow_Any_MSA(const uint8_t* src_ptr,
1450                             uint8_t* dst_ptr,
1451                             int width);
1452 
1453 void BGRAToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1454 void ABGRToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1455 void RGBAToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1456 void ARGBToYJRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1457 void RGB24ToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1458 void RGB565ToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1459 void RAWToYRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1460 void ARGB1555ToYRow_Any_LSX(const uint8_t* src_ptr,
1461                             uint8_t* dst_ptr,
1462                             int width);
1463 
1464 void RGB565ToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1465 void RGB24ToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1466 void ARGBToYJRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1467 void ARGBToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1468 void RAWToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1469 void ARGB1555ToYRow_Any_LASX(const uint8_t* src_ptr,
1470                              uint8_t* dst_ptr,
1471                              int width);
1472 
1473 void ARGBToUVRow_AVX2(const uint8_t* src_argb,
1474                       int src_stride_argb,
1475                       uint8_t* dst_u,
1476                       uint8_t* dst_v,
1477                       int width);
1478 void ABGRToUVRow_AVX2(const uint8_t* src_abgr,
1479                       int src_stride_abgr,
1480                       uint8_t* dst_u,
1481                       uint8_t* dst_v,
1482                       int width);
1483 void ARGBToUVJRow_AVX2(const uint8_t* src_argb,
1484                        int src_stride_argb,
1485                        uint8_t* dst_u,
1486                        uint8_t* dst_v,
1487                        int width);
1488 void ARGBToUVRow_SSSE3(const uint8_t* src_argb,
1489                        int src_stride_argb,
1490                        uint8_t* dst_u,
1491                        uint8_t* dst_v,
1492                        int width);
1493 void ARGBToUVJRow_SSSE3(const uint8_t* src_argb,
1494                         int src_stride_argb,
1495                         uint8_t* dst_u,
1496                         uint8_t* dst_v,
1497                         int width);
1498 void BGRAToUVRow_SSSE3(const uint8_t* src_bgra,
1499                        int src_stride_bgra,
1500                        uint8_t* dst_u,
1501                        uint8_t* dst_v,
1502                        int width);
1503 void ABGRToUVRow_SSSE3(const uint8_t* src_abgr,
1504                        int src_stride_abgr,
1505                        uint8_t* dst_u,
1506                        uint8_t* dst_v,
1507                        int width);
1508 void RGBAToUVRow_SSSE3(const uint8_t* src_rgba,
1509                        int src_stride_rgba,
1510                        uint8_t* dst_u,
1511                        uint8_t* dst_v,
1512                        int width);
1513 void ARGBToUVRow_Any_AVX2(const uint8_t* src_ptr,
1514                           int src_stride,
1515                           uint8_t* dst_u,
1516                           uint8_t* dst_v,
1517                           int width);
1518 void ABGRToUVRow_Any_AVX2(const uint8_t* src_ptr,
1519                           int src_stride,
1520                           uint8_t* dst_u,
1521                           uint8_t* dst_v,
1522                           int width);
1523 void ARGBToUVJRow_Any_AVX2(const uint8_t* src_ptr,
1524                            int src_stride,
1525                            uint8_t* dst_u,
1526                            uint8_t* dst_v,
1527                            int width);
1528 void ARGBToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1529                            int src_stride,
1530                            uint8_t* dst_u,
1531                            uint8_t* dst_v,
1532                            int width);
1533 void ARGBToUVJRow_Any_SSSE3(const uint8_t* src_ptr,
1534                             int src_stride,
1535                             uint8_t* dst_u,
1536                             uint8_t* dst_v,
1537                             int width);
1538 void BGRAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1539                            int src_stride,
1540                            uint8_t* dst_u,
1541                            uint8_t* dst_v,
1542                            int width);
1543 void ABGRToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1544                            int src_stride,
1545                            uint8_t* dst_u,
1546                            uint8_t* dst_v,
1547                            int width);
1548 void RGBAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
1549                            int src_stride,
1550                            uint8_t* dst_u,
1551                            uint8_t* dst_v,
1552                            int width);
1553 void ARGBToUV444Row_Any_NEON(const uint8_t* src_ptr,
1554                              uint8_t* dst_u,
1555                              uint8_t* dst_v,
1556                              int width);
1557 void ARGBToUVRow_Any_NEON(const uint8_t* src_ptr,
1558                           int src_stride,
1559                           uint8_t* dst_u,
1560                           uint8_t* dst_v,
1561                           int width);
1562 void ARGBToUV444Row_Any_MSA(const uint8_t* src_ptr,
1563                             uint8_t* dst_u,
1564                             uint8_t* dst_v,
1565                             int width);
1566 void ARGBToUVRow_Any_MSA(const uint8_t* src_ptr,
1567                          int src_stride_ptr,
1568                          uint8_t* dst_u,
1569                          uint8_t* dst_v,
1570                          int width);
1571 void ARGBToUVRow_Any_LASX(const uint8_t* src_ptr,
1572                           int src_stride_ptr,
1573                           uint8_t* dst_u,
1574                           uint8_t* dst_v,
1575                           int width);
1576 void ARGBToUV444Row_Any_LASX(const uint8_t* src_ptr,
1577                              uint8_t* dst_u,
1578                              uint8_t* dst_v,
1579                              int width);
1580 void ARGBToUVJRow_Any_NEON(const uint8_t* src_ptr,
1581                            int src_stride,
1582                            uint8_t* dst_u,
1583                            uint8_t* dst_v,
1584                            int width);
1585 void BGRAToUVRow_Any_NEON(const uint8_t* src_ptr,
1586                           int src_stride,
1587                           uint8_t* dst_u,
1588                           uint8_t* dst_v,
1589                           int width);
1590 void ABGRToUVRow_Any_NEON(const uint8_t* src_ptr,
1591                           int src_stride,
1592                           uint8_t* dst_u,
1593                           uint8_t* dst_v,
1594                           int width);
1595 void RGBAToUVRow_Any_NEON(const uint8_t* src_ptr,
1596                           int src_stride,
1597                           uint8_t* dst_u,
1598                           uint8_t* dst_v,
1599                           int width);
1600 void RGB24ToUVRow_Any_NEON(const uint8_t* src_ptr,
1601                            int src_stride,
1602                            uint8_t* dst_u,
1603                            uint8_t* dst_v,
1604                            int width);
1605 void RAWToUVRow_Any_NEON(const uint8_t* src_ptr,
1606                          int src_stride,
1607                          uint8_t* dst_u,
1608                          uint8_t* dst_v,
1609                          int width);
1610 void RGB24ToUVJRow_Any_NEON(const uint8_t* src_ptr,
1611                             int src_stride,
1612                             uint8_t* dst_u,
1613                             uint8_t* dst_v,
1614                             int width);
1615 void RAWToUVJRow_Any_NEON(const uint8_t* src_ptr,
1616                           int src_stride,
1617                           uint8_t* dst_u,
1618                           uint8_t* dst_v,
1619                           int width);
1620 void RGB565ToUVRow_Any_NEON(const uint8_t* src_ptr,
1621                             int src_stride,
1622                             uint8_t* dst_u,
1623                             uint8_t* dst_v,
1624                             int width);
1625 void ARGB1555ToUVRow_Any_NEON(const uint8_t* src_ptr,
1626                               int src_stride,
1627                               uint8_t* dst_u,
1628                               uint8_t* dst_v,
1629                               int width);
1630 void ARGB4444ToUVRow_Any_NEON(const uint8_t* src_ptr,
1631                               int src_stride,
1632                               uint8_t* dst_u,
1633                               uint8_t* dst_v,
1634                               int width);
1635 void ARGBToUVJRow_Any_MSA(const uint8_t* src_ptr,
1636                           int src_stride_ptr,
1637                           uint8_t* dst_u,
1638                           uint8_t* dst_v,
1639                           int width);
1640 void BGRAToUVRow_Any_MSA(const uint8_t* src_ptr,
1641                          int src_stride_ptr,
1642                          uint8_t* dst_u,
1643                          uint8_t* dst_v,
1644                          int width);
1645 void ABGRToUVRow_Any_MSA(const uint8_t* src_ptr,
1646                          int src_stride_ptr,
1647                          uint8_t* dst_u,
1648                          uint8_t* dst_v,
1649                          int width);
1650 void RGBAToUVRow_Any_MSA(const uint8_t* src_ptr,
1651                          int src_stride_ptr,
1652                          uint8_t* dst_u,
1653                          uint8_t* dst_v,
1654                          int width);
1655 void RGB24ToUVRow_Any_MSA(const uint8_t* src_ptr,
1656                           int src_stride_ptr,
1657                           uint8_t* dst_u,
1658                           uint8_t* dst_v,
1659                           int width);
1660 void RAWToUVRow_Any_MSA(const uint8_t* src_ptr,
1661                         int src_stride_ptr,
1662                         uint8_t* dst_u,
1663                         uint8_t* dst_v,
1664                         int width);
1665 void RGB565ToUVRow_Any_MSA(const uint8_t* src_ptr,
1666                            int src_stride_ptr,
1667                            uint8_t* dst_u,
1668                            uint8_t* dst_v,
1669                            int width);
1670 void ARGB1555ToUVRow_Any_MSA(const uint8_t* src_ptr,
1671                              int src_stride_ptr,
1672                              uint8_t* dst_u,
1673                              uint8_t* dst_v,
1674                              int width);
1675 void ABGRToUVRow_Any_LSX(const uint8_t* src_ptr,
1676                          int src_stride_ptr,
1677                          uint8_t* dst_u,
1678                          uint8_t* dst_v,
1679                          int width);
1680 void BGRAToUVRow_Any_LSX(const uint8_t* src_ptr,
1681                          int src_stride_ptr,
1682                          uint8_t* dst_u,
1683                          uint8_t* dst_v,
1684                          int width);
1685 void RGBAToUVRow_Any_LSX(const uint8_t* src_ptr,
1686                          int src_stride_ptr,
1687                          uint8_t* dst_u,
1688                          uint8_t* dst_v,
1689                          int width);
1690 void ARGBToUVJRow_Any_LSX(const uint8_t* src_ptr,
1691                           int src_stride_ptr,
1692                           uint8_t* dst_u,
1693                           uint8_t* dst_v,
1694                           int width);
1695 void ARGBToUVJRow_Any_LASX(const uint8_t* src_ptr,
1696                            int src_stride_ptr,
1697                            uint8_t* dst_u,
1698                            uint8_t* dst_v,
1699                            int width);
1700 void ARGB1555ToUVRow_Any_LSX(const uint8_t* src_ptr,
1701                              int src_stride_ptr,
1702                              uint8_t* dst_u,
1703                              uint8_t* dst_v,
1704                              int width);
1705 void ARGB1555ToUVRow_Any_LASX(const uint8_t* src_ptr,
1706                               int src_stride_ptr,
1707                               uint8_t* dst_u,
1708                               uint8_t* dst_v,
1709                               int width);
1710 void RGB565ToUVRow_Any_LSX(const uint8_t* src_ptr,
1711                            int src_stride_ptr,
1712                            uint8_t* dst_u,
1713                            uint8_t* dst_v,
1714                            int width);
1715 void RGB565ToUVRow_Any_LASX(const uint8_t* src_ptr,
1716                             int src_stride_ptr,
1717                             uint8_t* dst_u,
1718                             uint8_t* dst_v,
1719                             int width);
1720 void RGB24ToUVRow_Any_LSX(const uint8_t* src_ptr,
1721                           int src_stride_ptr,
1722                           uint8_t* dst_u,
1723                           uint8_t* dst_v,
1724                           int width);
1725 void RGB24ToUVRow_Any_LASX(const uint8_t* src_ptr,
1726                            int src_stride_ptr,
1727                            uint8_t* dst_u,
1728                            uint8_t* dst_v,
1729                            int width);
1730 void RAWToUVRow_Any_LSX(const uint8_t* src_ptr,
1731                         int src_stride_ptr,
1732                         uint8_t* dst_u,
1733                         uint8_t* dst_v,
1734                         int width);
1735 void RAWToUVRow_Any_LASX(const uint8_t* src_ptr,
1736                          int src_stride_ptr,
1737                          uint8_t* dst_u,
1738                          uint8_t* dst_v,
1739                          int width);
1740 void ARGBToUVRow_C(const uint8_t* src_rgb,
1741                    int src_stride_rgb,
1742                    uint8_t* dst_u,
1743                    uint8_t* dst_v,
1744                    int width);
1745 void ARGBToUVJRow_C(const uint8_t* src_rgb,
1746                     int src_stride_rgb,
1747                     uint8_t* dst_u,
1748                     uint8_t* dst_v,
1749                     int width);
1750 void ARGBToUVRow_C(const uint8_t* src_rgb,
1751                    int src_stride_rgb,
1752                    uint8_t* dst_u,
1753                    uint8_t* dst_v,
1754                    int width);
1755 void ARGBToUVJRow_C(const uint8_t* src_rgb,
1756                     int src_stride_rgb,
1757                     uint8_t* dst_u,
1758                     uint8_t* dst_v,
1759                     int width);
1760 void BGRAToUVRow_C(const uint8_t* src_rgb,
1761                    int src_stride_rgb,
1762                    uint8_t* dst_u,
1763                    uint8_t* dst_v,
1764                    int width);
1765 void ABGRToUVRow_C(const uint8_t* src_rgb,
1766                    int src_stride_rgb,
1767                    uint8_t* dst_u,
1768                    uint8_t* dst_v,
1769                    int width);
1770 void RGBAToUVRow_C(const uint8_t* src_rgb,
1771                    int src_stride_rgb,
1772                    uint8_t* dst_u,
1773                    uint8_t* dst_v,
1774                    int width);
1775 void RGB24ToUVRow_C(const uint8_t* src_rgb,
1776                     int src_stride_rgb,
1777                     uint8_t* dst_u,
1778                     uint8_t* dst_v,
1779                     int width);
1780 void RAWToUVRow_C(const uint8_t* src_rgb,
1781                   int src_stride_rgb,
1782                   uint8_t* dst_u,
1783                   uint8_t* dst_v,
1784                   int width);
1785 void RGB24ToUVJRow_C(const uint8_t* src_rgb,
1786                      int src_stride_rgb,
1787                      uint8_t* dst_u,
1788                      uint8_t* dst_v,
1789                      int width);
1790 void RAWToUVJRow_C(const uint8_t* src_rgb,
1791                    int src_stride_rgb,
1792                    uint8_t* dst_u,
1793                    uint8_t* dst_v,
1794                    int width);
1795 void RGB565ToUVRow_C(const uint8_t* src_rgb565,
1796                      int src_stride_rgb565,
1797                      uint8_t* dst_u,
1798                      uint8_t* dst_v,
1799                      int width);
1800 void ARGB1555ToUVRow_C(const uint8_t* src_argb1555,
1801                        int src_stride_argb1555,
1802                        uint8_t* dst_u,
1803                        uint8_t* dst_v,
1804                        int width);
1805 void ARGB4444ToUVRow_C(const uint8_t* src_argb4444,
1806                        int src_stride_argb4444,
1807                        uint8_t* dst_u,
1808                        uint8_t* dst_v,
1809                        int width);
1810 
1811 void ARGBToUV444Row_SSSE3(const uint8_t* src_argb,
1812                           uint8_t* dst_u,
1813                           uint8_t* dst_v,
1814                           int width);
1815 void ARGBToUV444Row_Any_SSSE3(const uint8_t* src_ptr,
1816                               uint8_t* dst_u,
1817                               uint8_t* dst_v,
1818                               int width);
1819 
1820 void ARGBToUV444Row_C(const uint8_t* src_argb,
1821                       uint8_t* dst_u,
1822                       uint8_t* dst_v,
1823                       int width);
1824 
1825 void MirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1826 void MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
1827 void MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
1828 void MirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
1829 void MirrorRow_LASX(const uint8_t* src, uint8_t* dst, int width);
1830 void MirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
1831 void MirrorRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1832 void MirrorRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1833 void MirrorRow_Any_SSE2(const uint8_t* src, uint8_t* dst, int width);
1834 void MirrorRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1835 void MirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1836 void MirrorRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1837 void MirrorUVRow_AVX2(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1838 void MirrorUVRow_SSSE3(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1839 void MirrorUVRow_NEON(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1840 void MirrorUVRow_MSA(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1841 void MirrorUVRow_LASX(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1842 void MirrorUVRow_C(const uint8_t* src_uv, uint8_t* dst_uv, int width);
1843 void MirrorUVRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1844 void MirrorUVRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1845 void MirrorUVRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1846 void MirrorUVRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1847 void MirrorUVRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1848 
1849 void MirrorSplitUVRow_SSSE3(const uint8_t* src,
1850                             uint8_t* dst_u,
1851                             uint8_t* dst_v,
1852                             int width);
1853 void MirrorSplitUVRow_NEON(const uint8_t* src_uv,
1854                            uint8_t* dst_u,
1855                            uint8_t* dst_v,
1856                            int width);
1857 void MirrorSplitUVRow_MSA(const uint8_t* src_uv,
1858                           uint8_t* dst_u,
1859                           uint8_t* dst_v,
1860                           int width);
1861 void MirrorSplitUVRow_LSX(const uint8_t* src_uv,
1862                           uint8_t* dst_u,
1863                           uint8_t* dst_v,
1864                           int width);
1865 void MirrorSplitUVRow_C(const uint8_t* src_uv,
1866                         uint8_t* dst_u,
1867                         uint8_t* dst_v,
1868                         int width);
1869 
1870 void ARGBMirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
1871 void ARGBMirrorRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
1872 void ARGBMirrorRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width);
1873 void ARGBMirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
1874 void ARGBMirrorRow_LASX(const uint8_t* src, uint8_t* dst, int width);
1875 void ARGBMirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
1876 void ARGBMirrorRow_Any_AVX2(const uint8_t* src_ptr,
1877                             uint8_t* dst_ptr,
1878                             int width);
1879 void ARGBMirrorRow_Any_SSE2(const uint8_t* src_ptr,
1880                             uint8_t* dst_ptr,
1881                             int width);
1882 void ARGBMirrorRow_Any_NEON(const uint8_t* src_ptr,
1883                             uint8_t* dst_ptr,
1884                             int width);
1885 void ARGBMirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
1886 void ARGBMirrorRow_Any_LASX(const uint8_t* src_ptr,
1887                             uint8_t* dst_ptr,
1888                             int width);
1889 
1890 void RGB24MirrorRow_SSSE3(const uint8_t* src_rgb24,
1891                           uint8_t* dst_rgb24,
1892                           int width);
1893 void RGB24MirrorRow_NEON(const uint8_t* src_rgb24,
1894                          uint8_t* dst_rgb24,
1895                          int width);
1896 void RGB24MirrorRow_C(const uint8_t* src_rgb24, uint8_t* dst_rgb24, int width);
1897 void RGB24MirrorRow_Any_SSSE3(const uint8_t* src_ptr,
1898                               uint8_t* dst_ptr,
1899                               int width);
1900 void RGB24MirrorRow_Any_NEON(const uint8_t* src_ptr,
1901                              uint8_t* dst_ptr,
1902                              int width);
1903 
1904 void SplitUVRow_C(const uint8_t* src_uv,
1905                   uint8_t* dst_u,
1906                   uint8_t* dst_v,
1907                   int width);
1908 void SplitUVRow_SSE2(const uint8_t* src_uv,
1909                      uint8_t* dst_u,
1910                      uint8_t* dst_v,
1911                      int width);
1912 void SplitUVRow_AVX2(const uint8_t* src_uv,
1913                      uint8_t* dst_u,
1914                      uint8_t* dst_v,
1915                      int width);
1916 void SplitUVRow_NEON(const uint8_t* src_uv,
1917                      uint8_t* dst_u,
1918                      uint8_t* dst_v,
1919                      int width);
1920 void SplitUVRow_MSA(const uint8_t* src_uv,
1921                     uint8_t* dst_u,
1922                     uint8_t* dst_v,
1923                     int width);
1924 void SplitUVRow_LSX(const uint8_t* src_uv,
1925                     uint8_t* dst_u,
1926                     uint8_t* dst_v,
1927                     int width);
1928 void SplitUVRow_Any_SSE2(const uint8_t* src_ptr,
1929                          uint8_t* dst_u,
1930                          uint8_t* dst_v,
1931                          int width);
1932 void SplitUVRow_Any_AVX2(const uint8_t* src_ptr,
1933                          uint8_t* dst_u,
1934                          uint8_t* dst_v,
1935                          int width);
1936 void SplitUVRow_Any_NEON(const uint8_t* src_ptr,
1937                          uint8_t* dst_u,
1938                          uint8_t* dst_v,
1939                          int width);
1940 void SplitUVRow_Any_MSA(const uint8_t* src_ptr,
1941                         uint8_t* dst_u,
1942                         uint8_t* dst_v,
1943                         int width);
1944 void SplitUVRow_Any_LSX(const uint8_t* src_ptr,
1945                         uint8_t* dst_u,
1946                         uint8_t* dst_v,
1947                         int width);
1948 void DetileRow_C(const uint8_t* src,
1949                  ptrdiff_t src_tile_stride,
1950                  uint8_t* dst,
1951                  int width);
1952 
1953 void DetileRow_NEON(const uint8_t* src,
1954                     ptrdiff_t src_tile_stride,
1955                     uint8_t* dst,
1956                     int width);
1957 void DetileRow_Any_NEON(const uint8_t* src,
1958                         ptrdiff_t src_tile_stride,
1959                         uint8_t* dst,
1960                         int width);
1961 void DetileRow_SSE2(const uint8_t* src,
1962                     ptrdiff_t src_tile_stride,
1963                     uint8_t* dst,
1964                     int width);
1965 void DetileRow_Any_SSE2(const uint8_t* src,
1966                         ptrdiff_t src_tile_stride,
1967                         uint8_t* dst,
1968                         int width);
1969 void DetileSplitUVRow_C(const uint8_t* src_uv,
1970                         ptrdiff_t src_tile_stride,
1971                         uint8_t* dst_u,
1972                         uint8_t* dst_v,
1973                         int width);
1974 void DetileSplitUVRow_SSSE3(const uint8_t* src_uv,
1975                             ptrdiff_t src_tile_stride,
1976                             uint8_t* dst_u,
1977                             uint8_t* dst_v,
1978                             int width);
1979 void DetileSplitUVRow_Any_SSSE3(const uint8_t* src_uv,
1980                                 ptrdiff_t src_tile_stride,
1981                                 uint8_t* dst_u,
1982                                 uint8_t* dst_v,
1983                                 int width);
1984 void DetileSplitUVRow_NEON(const uint8_t* src_uv,
1985                            ptrdiff_t src_tile_stride,
1986                            uint8_t* dst_u,
1987                            uint8_t* dst_v,
1988                            int width);
1989 void DetileSplitUVRow_Any_NEON(const uint8_t* src_uv,
1990                                ptrdiff_t src_tile_stride,
1991                                uint8_t* dst_u,
1992                                uint8_t* dst_v,
1993                                int width);
1994 void MergeUVRow_C(const uint8_t* src_u,
1995                   const uint8_t* src_v,
1996                   uint8_t* dst_uv,
1997                   int width);
1998 void MergeUVRow_SSE2(const uint8_t* src_u,
1999                      const uint8_t* src_v,
2000                      uint8_t* dst_uv,
2001                      int width);
2002 void MergeUVRow_AVX2(const uint8_t* src_u,
2003                      const uint8_t* src_v,
2004                      uint8_t* dst_uv,
2005                      int width);
2006 void MergeUVRow_NEON(const uint8_t* src_u,
2007                      const uint8_t* src_v,
2008                      uint8_t* dst_uv,
2009                      int width);
2010 void MergeUVRow_MSA(const uint8_t* src_u,
2011                     const uint8_t* src_v,
2012                     uint8_t* dst_uv,
2013                     int width);
2014 void MergeUVRow_LSX(const uint8_t* src_u,
2015                     const uint8_t* src_v,
2016                     uint8_t* dst_uv,
2017                     int width);
2018 void MergeUVRow_Any_SSE2(const uint8_t* y_buf,
2019                          const uint8_t* uv_buf,
2020                          uint8_t* dst_ptr,
2021                          int width);
2022 void MergeUVRow_Any_AVX2(const uint8_t* y_buf,
2023                          const uint8_t* uv_buf,
2024                          uint8_t* dst_ptr,
2025                          int width);
2026 void MergeUVRow_Any_NEON(const uint8_t* y_buf,
2027                          const uint8_t* uv_buf,
2028                          uint8_t* dst_ptr,
2029                          int width);
2030 void MergeUVRow_Any_MSA(const uint8_t* y_buf,
2031                         const uint8_t* uv_buf,
2032                         uint8_t* dst_ptr,
2033                         int width);
2034 void MergeUVRow_Any_LSX(const uint8_t* y_buf,
2035                         const uint8_t* uv_buf,
2036                         uint8_t* dst_ptr,
2037                         int width);
2038 
2039 void HalfMergeUVRow_C(const uint8_t* src_u,
2040                       int src_stride_u,
2041                       const uint8_t* src_v,
2042                       int src_stride_v,
2043                       uint8_t* dst_uv,
2044                       int width);
2045 
2046 void HalfMergeUVRow_NEON(const uint8_t* src_u,
2047                          int src_stride_u,
2048                          const uint8_t* src_v,
2049                          int src_stride_v,
2050                          uint8_t* dst_uv,
2051                          int width);
2052 
2053 void HalfMergeUVRow_SSSE3(const uint8_t* src_u,
2054                           int src_stride_u,
2055                           const uint8_t* src_v,
2056                           int src_stride_v,
2057                           uint8_t* dst_uv,
2058                           int width);
2059 
2060 void HalfMergeUVRow_AVX2(const uint8_t* src_u,
2061                          int src_stride_u,
2062                          const uint8_t* src_v,
2063                          int src_stride_v,
2064                          uint8_t* dst_uv,
2065                          int width);
2066 
2067 void SplitRGBRow_C(const uint8_t* src_rgb,
2068                    uint8_t* dst_r,
2069                    uint8_t* dst_g,
2070                    uint8_t* dst_b,
2071                    int width);
2072 void SplitRGBRow_SSSE3(const uint8_t* src_rgb,
2073                        uint8_t* dst_r,
2074                        uint8_t* dst_g,
2075                        uint8_t* dst_b,
2076                        int width);
2077 void SplitRGBRow_NEON(const uint8_t* src_rgb,
2078                       uint8_t* dst_r,
2079                       uint8_t* dst_g,
2080                       uint8_t* dst_b,
2081                       int width);
2082 void SplitRGBRow_Any_SSSE3(const uint8_t* src_ptr,
2083                            uint8_t* dst_r,
2084                            uint8_t* dst_g,
2085                            uint8_t* dst_b,
2086                            int width);
2087 void SplitRGBRow_Any_NEON(const uint8_t* src_ptr,
2088                           uint8_t* dst_r,
2089                           uint8_t* dst_g,
2090                           uint8_t* dst_b,
2091                           int width);
2092 
2093 void MergeRGBRow_C(const uint8_t* src_r,
2094                    const uint8_t* src_g,
2095                    const uint8_t* src_b,
2096                    uint8_t* dst_rgb,
2097                    int width);
2098 void MergeRGBRow_SSSE3(const uint8_t* src_r,
2099                        const uint8_t* src_g,
2100                        const uint8_t* src_b,
2101                        uint8_t* dst_rgb,
2102                        int width);
2103 void MergeRGBRow_NEON(const uint8_t* src_r,
2104                       const uint8_t* src_g,
2105                       const uint8_t* src_b,
2106                       uint8_t* dst_rgb,
2107                       int width);
2108 void MergeRGBRow_Any_SSSE3(const uint8_t* y_buf,
2109                            const uint8_t* u_buf,
2110                            const uint8_t* v_buf,
2111                            uint8_t* dst_ptr,
2112                            int width);
2113 void MergeRGBRow_Any_NEON(const uint8_t* src_r,
2114                           const uint8_t* src_g,
2115                           const uint8_t* src_b,
2116                           uint8_t* dst_rgb,
2117                           int width);
2118 void MergeARGBRow_C(const uint8_t* src_r,
2119                     const uint8_t* src_g,
2120                     const uint8_t* src_b,
2121                     const uint8_t* src_a,
2122                     uint8_t* dst_argb,
2123                     int width);
2124 void MergeARGBRow_SSE2(const uint8_t* src_r,
2125                        const uint8_t* src_g,
2126                        const uint8_t* src_b,
2127                        const uint8_t* src_a,
2128                        uint8_t* dst_argb,
2129                        int width);
2130 void MergeARGBRow_AVX2(const uint8_t* src_r,
2131                        const uint8_t* src_g,
2132                        const uint8_t* src_b,
2133                        const uint8_t* src_a,
2134                        uint8_t* dst_argb,
2135                        int width);
2136 void MergeARGBRow_NEON(const uint8_t* src_r,
2137                        const uint8_t* src_g,
2138                        const uint8_t* src_b,
2139                        const uint8_t* src_a,
2140                        uint8_t* dst_argb,
2141                        int width);
2142 void MergeARGBRow_Any_SSE2(const uint8_t* y_buf,
2143                            const uint8_t* u_buf,
2144                            const uint8_t* v_buf,
2145                            const uint8_t* a_buf,
2146                            uint8_t* dst_ptr,
2147                            int width);
2148 void MergeARGBRow_Any_AVX2(const uint8_t* y_buf,
2149                            const uint8_t* u_buf,
2150                            const uint8_t* v_buf,
2151                            const uint8_t* a_buf,
2152                            uint8_t* dst_ptr,
2153                            int width);
2154 void MergeARGBRow_Any_NEON(const uint8_t* y_buf,
2155                            const uint8_t* u_buf,
2156                            const uint8_t* v_buf,
2157                            const uint8_t* a_buf,
2158                            uint8_t* dst_ptr,
2159                            int width);
2160 void SplitARGBRow_C(const uint8_t* src_argb,
2161                     uint8_t* dst_r,
2162                     uint8_t* dst_g,
2163                     uint8_t* dst_b,
2164                     uint8_t* dst_a,
2165                     int width);
2166 void SplitARGBRow_SSE2(const uint8_t* src_argb,
2167                        uint8_t* dst_r,
2168                        uint8_t* dst_g,
2169                        uint8_t* dst_b,
2170                        uint8_t* dst_a,
2171                        int width);
2172 void SplitARGBRow_SSSE3(const uint8_t* src_argb,
2173                         uint8_t* dst_r,
2174                         uint8_t* dst_g,
2175                         uint8_t* dst_b,
2176                         uint8_t* dst_a,
2177                         int width);
2178 void SplitARGBRow_AVX2(const uint8_t* src_argb,
2179                        uint8_t* dst_r,
2180                        uint8_t* dst_g,
2181                        uint8_t* dst_b,
2182                        uint8_t* dst_a,
2183                        int width);
2184 void SplitARGBRow_NEON(const uint8_t* src_rgba,
2185                        uint8_t* dst_r,
2186                        uint8_t* dst_g,
2187                        uint8_t* dst_b,
2188                        uint8_t* dst_a,
2189                        int width);
2190 void SplitARGBRow_Any_SSE2(const uint8_t* src_ptr,
2191                            uint8_t* dst_r,
2192                            uint8_t* dst_g,
2193                            uint8_t* dst_b,
2194                            uint8_t* dst_a,
2195                            int width);
2196 void SplitARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2197                             uint8_t* dst_r,
2198                             uint8_t* dst_g,
2199                             uint8_t* dst_b,
2200                             uint8_t* dst_a,
2201                             int width);
2202 void SplitARGBRow_Any_AVX2(const uint8_t* src_ptr,
2203                            uint8_t* dst_r,
2204                            uint8_t* dst_g,
2205                            uint8_t* dst_b,
2206                            uint8_t* dst_a,
2207                            int width);
2208 void SplitARGBRow_Any_NEON(const uint8_t* src_ptr,
2209                            uint8_t* dst_r,
2210                            uint8_t* dst_g,
2211                            uint8_t* dst_b,
2212                            uint8_t* dst_a,
2213                            int width);
2214 void MergeXRGBRow_C(const uint8_t* src_r,
2215                     const uint8_t* src_g,
2216                     const uint8_t* src_b,
2217                     uint8_t* dst_argb,
2218                     int width);
2219 void MergeXRGBRow_SSE2(const uint8_t* src_r,
2220                        const uint8_t* src_g,
2221                        const uint8_t* src_b,
2222                        uint8_t* dst_argb,
2223                        int width);
2224 void MergeXRGBRow_AVX2(const uint8_t* src_r,
2225                        const uint8_t* src_g,
2226                        const uint8_t* src_b,
2227                        uint8_t* dst_argb,
2228                        int width);
2229 void MergeXRGBRow_NEON(const uint8_t* src_r,
2230                        const uint8_t* src_g,
2231                        const uint8_t* src_b,
2232                        uint8_t* dst_argb,
2233                        int width);
2234 void MergeXRGBRow_Any_SSE2(const uint8_t* y_buf,
2235                            const uint8_t* u_buf,
2236                            const uint8_t* v_buf,
2237                            uint8_t* dst_ptr,
2238                            int width);
2239 void MergeXRGBRow_Any_AVX2(const uint8_t* y_buf,
2240                            const uint8_t* u_buf,
2241                            const uint8_t* v_buf,
2242                            uint8_t* dst_ptr,
2243                            int width);
2244 void MergeXRGBRow_Any_NEON(const uint8_t* y_buf,
2245                            const uint8_t* u_buf,
2246                            const uint8_t* v_buf,
2247                            uint8_t* dst_ptr,
2248                            int width);
2249 void SplitXRGBRow_C(const uint8_t* src_argb,
2250                     uint8_t* dst_r,
2251                     uint8_t* dst_g,
2252                     uint8_t* dst_b,
2253                     int width);
2254 void SplitXRGBRow_SSE2(const uint8_t* src_argb,
2255                        uint8_t* dst_r,
2256                        uint8_t* dst_g,
2257                        uint8_t* dst_b,
2258                        int width);
2259 void SplitXRGBRow_SSSE3(const uint8_t* src_argb,
2260                         uint8_t* dst_r,
2261                         uint8_t* dst_g,
2262                         uint8_t* dst_b,
2263                         int width);
2264 void SplitXRGBRow_AVX2(const uint8_t* src_argb,
2265                        uint8_t* dst_r,
2266                        uint8_t* dst_g,
2267                        uint8_t* dst_b,
2268                        int width);
2269 void SplitXRGBRow_NEON(const uint8_t* src_rgba,
2270                        uint8_t* dst_r,
2271                        uint8_t* dst_g,
2272                        uint8_t* dst_b,
2273                        int width);
2274 void SplitXRGBRow_Any_SSE2(const uint8_t* src_ptr,
2275                            uint8_t* dst_r,
2276                            uint8_t* dst_g,
2277                            uint8_t* dst_b,
2278                            int width);
2279 void SplitXRGBRow_Any_SSSE3(const uint8_t* src_ptr,
2280                             uint8_t* dst_r,
2281                             uint8_t* dst_g,
2282                             uint8_t* dst_b,
2283                             int width);
2284 void SplitXRGBRow_Any_AVX2(const uint8_t* src_ptr,
2285                            uint8_t* dst_r,
2286                            uint8_t* dst_g,
2287                            uint8_t* dst_b,
2288                            int width);
2289 void SplitXRGBRow_Any_NEON(const uint8_t* src_ptr,
2290                            uint8_t* dst_r,
2291                            uint8_t* dst_g,
2292                            uint8_t* dst_b,
2293                            int width);
2294 
2295 void MergeXR30Row_C(const uint16_t* src_r,
2296                     const uint16_t* src_g,
2297                     const uint16_t* src_b,
2298                     uint8_t* dst_ar30,
2299                     int depth,
2300                     int width);
2301 void MergeAR64Row_C(const uint16_t* src_r,
2302                     const uint16_t* src_g,
2303                     const uint16_t* src_b,
2304                     const uint16_t* src_a,
2305                     uint16_t* dst_ar64,
2306                     int depth,
2307                     int width);
2308 void MergeARGB16To8Row_C(const uint16_t* src_r,
2309                          const uint16_t* src_g,
2310                          const uint16_t* src_b,
2311                          const uint16_t* src_a,
2312                          uint8_t* dst_argb,
2313                          int depth,
2314                          int width);
2315 void MergeXR64Row_C(const uint16_t* src_r,
2316                     const uint16_t* src_g,
2317                     const uint16_t* src_b,
2318                     uint16_t* dst_ar64,
2319                     int depth,
2320                     int width);
2321 void MergeXRGB16To8Row_C(const uint16_t* src_r,
2322                          const uint16_t* src_g,
2323                          const uint16_t* src_b,
2324                          uint8_t* dst_argb,
2325                          int depth,
2326                          int width);
2327 void MergeXR30Row_AVX2(const uint16_t* src_r,
2328                        const uint16_t* src_g,
2329                        const uint16_t* src_b,
2330                        uint8_t* dst_ar30,
2331                        int depth,
2332                        int width);
2333 void MergeAR64Row_AVX2(const uint16_t* src_r,
2334                        const uint16_t* src_g,
2335                        const uint16_t* src_b,
2336                        const uint16_t* src_a,
2337                        uint16_t* dst_ar64,
2338                        int depth,
2339                        int width);
2340 void MergeARGB16To8Row_AVX2(const uint16_t* src_r,
2341                             const uint16_t* src_g,
2342                             const uint16_t* src_b,
2343                             const uint16_t* src_a,
2344                             uint8_t* dst_argb,
2345                             int depth,
2346                             int width);
2347 void MergeXR64Row_AVX2(const uint16_t* src_r,
2348                        const uint16_t* src_g,
2349                        const uint16_t* src_b,
2350                        uint16_t* dst_ar64,
2351                        int depth,
2352                        int width);
2353 void MergeXRGB16To8Row_AVX2(const uint16_t* src_r,
2354                             const uint16_t* src_g,
2355                             const uint16_t* src_b,
2356                             uint8_t* dst_argb,
2357                             int depth,
2358                             int width);
2359 void MergeXR30Row_NEON(const uint16_t* src_r,
2360                        const uint16_t* src_g,
2361                        const uint16_t* src_b,
2362                        uint8_t* dst_ar30,
2363                        int depth,
2364                        int width);
2365 void MergeXR30Row_10_NEON(const uint16_t* src_r,
2366                           const uint16_t* src_g,
2367                           const uint16_t* src_b,
2368                           uint8_t* dst_ar30,
2369                           int /* depth */,
2370                           int width);
2371 void MergeAR64Row_NEON(const uint16_t* src_r,
2372                        const uint16_t* src_g,
2373                        const uint16_t* src_b,
2374                        const uint16_t* src_a,
2375                        uint16_t* dst_ar64,
2376                        int depth,
2377                        int width);
2378 void MergeARGB16To8Row_NEON(const uint16_t* src_r,
2379                             const uint16_t* src_g,
2380                             const uint16_t* src_b,
2381                             const uint16_t* src_a,
2382                             uint8_t* dst_argb,
2383                             int depth,
2384                             int width);
2385 void MergeXR64Row_NEON(const uint16_t* src_r,
2386                        const uint16_t* src_g,
2387                        const uint16_t* src_b,
2388                        uint16_t* dst_ar64,
2389                        int depth,
2390                        int width);
2391 void MergeXRGB16To8Row_NEON(const uint16_t* src_r,
2392                             const uint16_t* src_g,
2393                             const uint16_t* src_b,
2394                             uint8_t* dst_argb,
2395                             int depth,
2396                             int width);
2397 void MergeXR30Row_Any_AVX2(const uint16_t* r_buf,
2398                            const uint16_t* g_buf,
2399                            const uint16_t* b_buf,
2400                            uint8_t* dst_ptr,
2401                            int depth,
2402                            int width);
2403 void MergeAR64Row_Any_AVX2(const uint16_t* r_buf,
2404                            const uint16_t* g_buf,
2405                            const uint16_t* b_buf,
2406                            const uint16_t* a_buf,
2407                            uint16_t* dst_ptr,
2408                            int depth,
2409                            int width);
2410 void MergeXR64Row_Any_AVX2(const uint16_t* r_buf,
2411                            const uint16_t* g_buf,
2412                            const uint16_t* b_buf,
2413                            uint16_t* dst_ptr,
2414                            int depth,
2415                            int width);
2416 void MergeARGB16To8Row_Any_AVX2(const uint16_t* r_buf,
2417                                 const uint16_t* g_buf,
2418                                 const uint16_t* b_buf,
2419                                 const uint16_t* a_buf,
2420                                 uint8_t* dst_ptr,
2421                                 int depth,
2422                                 int width);
2423 void MergeXRGB16To8Row_Any_AVX2(const uint16_t* r_buf,
2424                                 const uint16_t* g_buf,
2425                                 const uint16_t* b_buf,
2426                                 uint8_t* dst_ptr,
2427                                 int depth,
2428                                 int width);
2429 void MergeXR30Row_Any_NEON(const uint16_t* r_buf,
2430                            const uint16_t* g_buf,
2431                            const uint16_t* b_buf,
2432                            uint8_t* dst_ptr,
2433                            int depth,
2434                            int width);
2435 void MergeXR30Row_10_Any_NEON(const uint16_t* r_buf,
2436                               const uint16_t* g_buf,
2437                               const uint16_t* b_buf,
2438                               uint8_t* dst_ptr,
2439                               int depth,
2440                               int width);
2441 void MergeAR64Row_Any_NEON(const uint16_t* r_buf,
2442                            const uint16_t* g_buf,
2443                            const uint16_t* b_buf,
2444                            const uint16_t* a_buf,
2445                            uint16_t* dst_ptr,
2446                            int depth,
2447                            int width);
2448 void MergeARGB16To8Row_Any_NEON(const uint16_t* r_buf,
2449                                 const uint16_t* g_buf,
2450                                 const uint16_t* b_buf,
2451                                 const uint16_t* a_buf,
2452                                 uint8_t* dst_ptr,
2453                                 int depth,
2454                                 int width);
2455 void MergeXR64Row_Any_NEON(const uint16_t* r_buf,
2456                            const uint16_t* g_buf,
2457                            const uint16_t* b_buf,
2458                            uint16_t* dst_ptr,
2459                            int depth,
2460                            int width);
2461 void MergeXRGB16To8Row_Any_NEON(const uint16_t* r_buf,
2462                                 const uint16_t* g_buf,
2463                                 const uint16_t* b_buf,
2464                                 uint8_t* dst_ptr,
2465                                 int depth,
2466                                 int width);
2467 
2468 void MergeUVRow_16_C(const uint16_t* src_u,
2469                      const uint16_t* src_v,
2470                      uint16_t* dst_uv,
2471                      int depth,
2472                      int width);
2473 void MergeUVRow_16_AVX2(const uint16_t* src_u,
2474                         const uint16_t* src_v,
2475                         uint16_t* dst_uv,
2476                         int depth,
2477                         int width);
2478 void MergeUVRow_16_Any_AVX2(const uint16_t* src_u,
2479                             const uint16_t* src_v,
2480                             uint16_t* dst_uv,
2481                             int depth,
2482                             int width);
2483 void MergeUVRow_16_NEON(const uint16_t* src_u,
2484                         const uint16_t* src_v,
2485                         uint16_t* dst_uv,
2486                         int depth,
2487                         int width);
2488 void MergeUVRow_16_Any_NEON(const uint16_t* src_u,
2489                             const uint16_t* src_v,
2490                             uint16_t* dst_uv,
2491                             int depth,
2492                             int width);
2493 
2494 void SplitUVRow_16_C(const uint16_t* src_uv,
2495                      uint16_t* dst_u,
2496                      uint16_t* dst_v,
2497                      int depth,
2498                      int width);
2499 void SplitUVRow_16_AVX2(const uint16_t* src_uv,
2500                         uint16_t* dst_u,
2501                         uint16_t* dst_v,
2502                         int depth,
2503                         int width);
2504 void SplitUVRow_16_Any_AVX2(const uint16_t* src_uv,
2505                             uint16_t* dst_u,
2506                             uint16_t* dst_v,
2507                             int depth,
2508                             int width);
2509 void SplitUVRow_16_NEON(const uint16_t* src_uv,
2510                         uint16_t* dst_u,
2511                         uint16_t* dst_v,
2512                         int depth,
2513                         int width);
2514 void SplitUVRow_16_Any_NEON(const uint16_t* src_uv,
2515                             uint16_t* dst_u,
2516                             uint16_t* dst_v,
2517                             int depth,
2518                             int width);
2519 
2520 void MultiplyRow_16_C(const uint16_t* src_y,
2521                       uint16_t* dst_y,
2522                       int scale,
2523                       int width);
2524 void MultiplyRow_16_AVX2(const uint16_t* src_y,
2525                          uint16_t* dst_y,
2526                          int scale,
2527                          int width);
2528 void MultiplyRow_16_Any_AVX2(const uint16_t* src_ptr,
2529                              uint16_t* dst_ptr,
2530                              int scale,
2531                              int width);
2532 void MultiplyRow_16_NEON(const uint16_t* src_y,
2533                          uint16_t* dst_y,
2534                          int scale,
2535                          int width);
2536 void MultiplyRow_16_Any_NEON(const uint16_t* src_ptr,
2537                              uint16_t* dst_ptr,
2538                              int scale,
2539                              int width);
2540 
2541 void DivideRow_16_C(const uint16_t* src_y,
2542                     uint16_t* dst_y,
2543                     int scale,
2544                     int width);
2545 void DivideRow_16_AVX2(const uint16_t* src_y,
2546                        uint16_t* dst_y,
2547                        int scale,
2548                        int width);
2549 void DivideRow_16_Any_AVX2(const uint16_t* src_ptr,
2550                            uint16_t* dst_ptr,
2551                            int scale,
2552                            int width);
2553 void DivideRow_16_NEON(const uint16_t* src_y,
2554                        uint16_t* dst_y,
2555                        int scale,
2556                        int width);
2557 void DivideRow_16_Any_NEON(const uint16_t* src_ptr,
2558                            uint16_t* dst_ptr,
2559                            int scale,
2560                            int width);
2561 
2562 void Convert8To16Row_C(const uint8_t* src_y,
2563                        uint16_t* dst_y,
2564                        int scale,
2565                        int width);
2566 void Convert8To16Row_SSE2(const uint8_t* src_y,
2567                           uint16_t* dst_y,
2568                           int scale,
2569                           int width);
2570 void Convert8To16Row_AVX2(const uint8_t* src_y,
2571                           uint16_t* dst_y,
2572                           int scale,
2573                           int width);
2574 void Convert8To16Row_Any_SSE2(const uint8_t* src_ptr,
2575                               uint16_t* dst_ptr,
2576                               int scale,
2577                               int width);
2578 void Convert8To16Row_Any_AVX2(const uint8_t* src_ptr,
2579                               uint16_t* dst_ptr,
2580                               int scale,
2581                               int width);
2582 
2583 void Convert16To8Row_C(const uint16_t* src_y,
2584                        uint8_t* dst_y,
2585                        int scale,
2586                        int width);
2587 void Convert16To8Row_SSSE3(const uint16_t* src_y,
2588                            uint8_t* dst_y,
2589                            int scale,
2590                            int width);
2591 void Convert16To8Row_AVX2(const uint16_t* src_y,
2592                           uint8_t* dst_y,
2593                           int scale,
2594                           int width);
2595 void Convert16To8Row_Any_SSSE3(const uint16_t* src_ptr,
2596                                uint8_t* dst_ptr,
2597                                int scale,
2598                                int width);
2599 void Convert16To8Row_Any_AVX2(const uint16_t* src_ptr,
2600                               uint8_t* dst_ptr,
2601                               int scale,
2602                               int width);
2603 void Convert16To8Row_NEON(const uint16_t* src_y,
2604                           uint8_t* dst_y,
2605                           int scale,
2606                           int width);
2607 void Convert16To8Row_Any_NEON(const uint16_t* src_y,
2608                               uint8_t* dst_y,
2609                               int scale,
2610                               int width);
2611 
2612 void CopyRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2613 void CopyRow_AVX(const uint8_t* src, uint8_t* dst, int width);
2614 void CopyRow_ERMS(const uint8_t* src, uint8_t* dst, int width);
2615 void CopyRow_NEON(const uint8_t* src, uint8_t* dst, int width);
2616 void CopyRow_MIPS(const uint8_t* src, uint8_t* dst, int count);
2617 void CopyRow_C(const uint8_t* src, uint8_t* dst, int count);
2618 void CopyRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2619 void CopyRow_Any_AVX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2620 void CopyRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2621 
2622 void CopyRow_16_C(const uint16_t* src, uint16_t* dst, int count);
2623 
2624 void ARGBCopyAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
2625 void ARGBCopyAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2626 void ARGBCopyAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
2627 void ARGBCopyAlphaRow_Any_SSE2(const uint8_t* src_ptr,
2628                                uint8_t* dst_ptr,
2629                                int width);
2630 void ARGBCopyAlphaRow_Any_AVX2(const uint8_t* src_ptr,
2631                                uint8_t* dst_ptr,
2632                                int width);
2633 
2634 void ARGBExtractAlphaRow_C(const uint8_t* src_argb, uint8_t* dst_a, int width);
2635 void ARGBExtractAlphaRow_SSE2(const uint8_t* src_argb,
2636                               uint8_t* dst_a,
2637                               int width);
2638 void ARGBExtractAlphaRow_AVX2(const uint8_t* src_argb,
2639                               uint8_t* dst_a,
2640                               int width);
2641 void ARGBExtractAlphaRow_NEON(const uint8_t* src_argb,
2642                               uint8_t* dst_a,
2643                               int width);
2644 void ARGBExtractAlphaRow_MSA(const uint8_t* src_argb,
2645                              uint8_t* dst_a,
2646                              int width);
2647 void ARGBExtractAlphaRow_LSX(const uint8_t* src_argb,
2648                              uint8_t* dst_a,
2649                              int width);
2650 void ARGBExtractAlphaRow_Any_SSE2(const uint8_t* src_ptr,
2651                                   uint8_t* dst_ptr,
2652                                   int width);
2653 void ARGBExtractAlphaRow_Any_AVX2(const uint8_t* src_ptr,
2654                                   uint8_t* dst_ptr,
2655                                   int width);
2656 void ARGBExtractAlphaRow_Any_NEON(const uint8_t* src_ptr,
2657                                   uint8_t* dst_ptr,
2658                                   int width);
2659 void ARGBExtractAlphaRow_Any_MSA(const uint8_t* src_ptr,
2660                                  uint8_t* dst_ptr,
2661                                  int width);
2662 void ARGBExtractAlphaRow_Any_LSX(const uint8_t* src_ptr,
2663                                  uint8_t* dst_ptr,
2664                                  int width);
2665 
2666 void ARGBCopyYToAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
2667 void ARGBCopyYToAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2668 void ARGBCopyYToAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
2669 void ARGBCopyYToAlphaRow_Any_SSE2(const uint8_t* src_ptr,
2670                                   uint8_t* dst_ptr,
2671                                   int width);
2672 void ARGBCopyYToAlphaRow_Any_AVX2(const uint8_t* src_ptr,
2673                                   uint8_t* dst_ptr,
2674                                   int width);
2675 
2676 void SetRow_C(uint8_t* dst, uint8_t v8, int width);
2677 void SetRow_MSA(uint8_t* dst, uint8_t v8, int width);
2678 void SetRow_X86(uint8_t* dst, uint8_t v8, int width);
2679 void SetRow_ERMS(uint8_t* dst, uint8_t v8, int width);
2680 void SetRow_NEON(uint8_t* dst, uint8_t v8, int width);
2681 void SetRow_LSX(uint8_t* dst, uint8_t v8, int width);
2682 void SetRow_Any_X86(uint8_t* dst_ptr, uint8_t v32, int width);
2683 void SetRow_Any_NEON(uint8_t* dst_ptr, uint8_t v32, int width);
2684 void SetRow_Any_LSX(uint8_t* dst_ptr, uint8_t v32, int width);
2685 
2686 void ARGBSetRow_C(uint8_t* dst_argb, uint32_t v32, int width);
2687 void ARGBSetRow_X86(uint8_t* dst_argb, uint32_t v32, int width);
2688 void ARGBSetRow_NEON(uint8_t* dst, uint32_t v32, int width);
2689 void ARGBSetRow_Any_NEON(uint8_t* dst_ptr, uint32_t v32, int width);
2690 void ARGBSetRow_MSA(uint8_t* dst_argb, uint32_t v32, int width);
2691 void ARGBSetRow_Any_MSA(uint8_t* dst_ptr, uint32_t v32, int width);
2692 void ARGBSetRow_LSX(uint8_t* dst_argb, uint32_t v32, int width);
2693 void ARGBSetRow_Any_LSX(uint8_t* dst_ptr, uint32_t v32, int width);
2694 
2695 // ARGBShufflers for BGRAToARGB etc.
2696 void ARGBShuffleRow_C(const uint8_t* src_argb,
2697                       uint8_t* dst_argb,
2698                       const uint8_t* shuffler,
2699                       int width);
2700 void ARGBShuffleRow_SSSE3(const uint8_t* src_argb,
2701                           uint8_t* dst_argb,
2702                           const uint8_t* shuffler,
2703                           int width);
2704 void ARGBShuffleRow_AVX2(const uint8_t* src_argb,
2705                          uint8_t* dst_argb,
2706                          const uint8_t* shuffler,
2707                          int width);
2708 void ARGBShuffleRow_NEON(const uint8_t* src_argb,
2709                          uint8_t* dst_argb,
2710                          const uint8_t* shuffler,
2711                          int width);
2712 void ARGBShuffleRow_MSA(const uint8_t* src_argb,
2713                         uint8_t* dst_argb,
2714                         const uint8_t* shuffler,
2715                         int width);
2716 void ARGBShuffleRow_LASX(const uint8_t* src_argb,
2717                          uint8_t* dst_argb,
2718                          const uint8_t* shuffler,
2719                          int width);
2720 void ARGBShuffleRow_Any_SSSE3(const uint8_t* src_ptr,
2721                               uint8_t* dst_ptr,
2722                               const uint8_t* param,
2723                               int width);
2724 void ARGBShuffleRow_Any_AVX2(const uint8_t* src_ptr,
2725                              uint8_t* dst_ptr,
2726                              const uint8_t* param,
2727                              int width);
2728 void ARGBShuffleRow_Any_NEON(const uint8_t* src_ptr,
2729                              uint8_t* dst_ptr,
2730                              const uint8_t* param,
2731                              int width);
2732 void ARGBShuffleRow_Any_MSA(const uint8_t* src_ptr,
2733                             uint8_t* dst_ptr,
2734                             const uint8_t* param,
2735                             int width);
2736 void ARGBShuffleRow_Any_LASX(const uint8_t* src_ptr,
2737                              uint8_t* dst_ptr,
2738                              const uint8_t* param,
2739                              int width);
2740 
2741 void RGB24ToARGBRow_SSSE3(const uint8_t* src_rgb24,
2742                           uint8_t* dst_argb,
2743                           int width);
2744 void RAWToARGBRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2745 void RAWToRGBARow_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2746 void RAWToRGB24Row_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2747 void RGB565ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2748 void ARGB1555ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2749 void ARGB4444ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
2750 void RGB565ToARGBRow_AVX2(const uint8_t* src_rgb565,
2751                           uint8_t* dst_argb,
2752                           int width);
2753 void ARGB1555ToARGBRow_AVX2(const uint8_t* src_argb1555,
2754                             uint8_t* dst_argb,
2755                             int width);
2756 void ARGB4444ToARGBRow_AVX2(const uint8_t* src_argb4444,
2757                             uint8_t* dst_argb,
2758                             int width);
2759 
2760 void RGB24ToARGBRow_NEON(const uint8_t* src_rgb24,
2761                          uint8_t* dst_argb,
2762                          int width);
2763 void RGB24ToARGBRow_MSA(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2764 void RGB24ToARGBRow_LSX(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2765 void RGB24ToARGBRow_LASX(const uint8_t* src_rgb24,
2766                          uint8_t* dst_argb,
2767                          int width);
2768 void RAWToARGBRow_NEON(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2769 void RAWToRGBARow_NEON(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2770 void RAWToARGBRow_MSA(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2771 void RAWToARGBRow_LSX(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2772 void RAWToARGBRow_LASX(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2773 void RAWToRGB24Row_NEON(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2774 void RAWToRGB24Row_MSA(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2775 void RAWToRGB24Row_LSX(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2776 void RGB565ToARGBRow_NEON(const uint8_t* src_rgb565,
2777                           uint8_t* dst_argb,
2778                           int width);
2779 void RGB565ToARGBRow_MSA(const uint8_t* src_rgb565,
2780                          uint8_t* dst_argb,
2781                          int width);
2782 void RGB565ToARGBRow_LSX(const uint8_t* src_rgb565,
2783                          uint8_t* dst_argb,
2784                          int width);
2785 void RGB565ToARGBRow_LASX(const uint8_t* src_rgb565,
2786                           uint8_t* dst_argb,
2787                           int width);
2788 void ARGB1555ToARGBRow_NEON(const uint8_t* src_argb1555,
2789                             uint8_t* dst_argb,
2790                             int width);
2791 void ARGB1555ToARGBRow_MSA(const uint8_t* src_argb1555,
2792                            uint8_t* dst_argb,
2793                            int width);
2794 void ARGB1555ToARGBRow_LSX(const uint8_t* src_argb1555,
2795                            uint8_t* dst_argb,
2796                            int width);
2797 void ARGB1555ToARGBRow_LASX(const uint8_t* src_argb1555,
2798                             uint8_t* dst_argb,
2799                             int width);
2800 void ARGB4444ToARGBRow_NEON(const uint8_t* src_argb4444,
2801                             uint8_t* dst_argb,
2802                             int width);
2803 void ARGB4444ToARGBRow_MSA(const uint8_t* src_argb4444,
2804                            uint8_t* dst_argb,
2805                            int width);
2806 void ARGB4444ToARGBRow_LSX(const uint8_t* src_argb4444,
2807                            uint8_t* dst_argb,
2808                            int width);
2809 void ARGB4444ToARGBRow_LASX(const uint8_t* src_argb4444,
2810                             uint8_t* dst_argb,
2811                             int width);
2812 void RGB24ToARGBRow_C(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
2813 void RAWToARGBRow_C(const uint8_t* src_raw, uint8_t* dst_argb, int width);
2814 void RAWToRGBARow_C(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
2815 void RAWToRGB24Row_C(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
2816 void RGB565ToARGBRow_C(const uint8_t* src_rgb565, uint8_t* dst_argb, int width);
2817 void ARGB1555ToARGBRow_C(const uint8_t* src_argb1555,
2818                          uint8_t* dst_argb,
2819                          int width);
2820 void ARGB4444ToARGBRow_C(const uint8_t* src_argb4444,
2821                          uint8_t* dst_argb,
2822                          int width);
2823 void AR30ToARGBRow_C(const uint8_t* src_ar30, uint8_t* dst_argb, int width);
2824 void AR30ToABGRRow_C(const uint8_t* src_ar30, uint8_t* dst_abgr, int width);
2825 void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
2826 void AR30ToAB30Row_C(const uint8_t* src_ar30, uint8_t* dst_ab30, int width);
2827 
2828 void RGB24ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2829                               uint8_t* dst_ptr,
2830                               int width);
2831 void RAWToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
2832                             uint8_t* dst_ptr,
2833                             int width);
2834 void RAWToRGBARow_Any_SSSE3(const uint8_t* src_ptr,
2835                             uint8_t* dst_ptr,
2836                             int width);
2837 void RAWToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
2838                              uint8_t* dst_ptr,
2839                              int width);
2840 
2841 void RGB565ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2842                               uint8_t* dst_ptr,
2843                               int width);
2844 void ARGB1555ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2845                                 uint8_t* dst_ptr,
2846                                 int width);
2847 void ARGB4444ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
2848                                 uint8_t* dst_ptr,
2849                                 int width);
2850 void RGB565ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2851                               uint8_t* dst_ptr,
2852                               int width);
2853 void ARGB1555ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2854                                 uint8_t* dst_ptr,
2855                                 int width);
2856 void ARGB4444ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
2857                                 uint8_t* dst_ptr,
2858                                 int width);
2859 
2860 void RGB24ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2861                              uint8_t* dst_ptr,
2862                              int width);
2863 void RGB24ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2864                             uint8_t* dst_ptr,
2865                             int width);
2866 void RGB24ToARGBRow_Any_LSX(const uint8_t* src_ptr,
2867                             uint8_t* dst_ptr,
2868                             int width);
2869 void RGB24ToARGBRow_Any_LASX(const uint8_t* src_ptr,
2870                              uint8_t* dst_ptr,
2871                              int width);
2872 void RAWToARGBRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2873 void RAWToRGBARow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2874 void RAWToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2875 void RAWToARGBRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2876 void RAWToARGBRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2877 void RAWToRGB24Row_Any_NEON(const uint8_t* src_ptr,
2878                             uint8_t* dst_ptr,
2879                             int width);
2880 void RAWToRGB24Row_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2881 void RAWToRGB24Row_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
2882 void RGB565ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2883                               uint8_t* dst_ptr,
2884                               int width);
2885 void RGB565ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2886                              uint8_t* dst_ptr,
2887                              int width);
2888 void RGB565ToARGBRow_Any_LSX(const uint8_t* src_ptr,
2889                              uint8_t* dst_ptr,
2890                              int width);
2891 void RGB565ToARGBRow_Any_LASX(const uint8_t* src_ptr,
2892                               uint8_t* dst_ptr,
2893                               int width);
2894 void ARGB1555ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2895                                 uint8_t* dst_ptr,
2896                                 int width);
2897 void ARGB1555ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2898                                uint8_t* dst_ptr,
2899                                int width);
2900 void ARGB4444ToARGBRow_Any_NEON(const uint8_t* src_ptr,
2901                                 uint8_t* dst_ptr,
2902                                 int width);
2903 void ARGB1555ToARGBRow_Any_LSX(const uint8_t* src_ptr,
2904                                uint8_t* dst_ptr,
2905                                int width);
2906 void ARGB1555ToARGBRow_Any_LASX(const uint8_t* src_ptr,
2907                                 uint8_t* dst_ptr,
2908                                 int width);
2909 
2910 void ARGB4444ToARGBRow_Any_MSA(const uint8_t* src_ptr,
2911                                uint8_t* dst_ptr,
2912                                int width);
2913 void ARGB4444ToARGBRow_Any_LSX(const uint8_t* src_ptr,
2914                                uint8_t* dst_ptr,
2915                                int width);
2916 void ARGB4444ToARGBRow_Any_LASX(const uint8_t* src_ptr,
2917                                 uint8_t* dst_ptr,
2918                                 int width);
2919 
2920 void ARGBToRGB24Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2921 void ARGBToRAWRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2922 void ARGBToRGB565Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2923 void ARGBToARGB1555Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2924 void ARGBToARGB4444Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
2925 void ABGRToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2926 void ARGBToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
2927 
2928 void ARGBToRAWRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
2929 void ARGBToRGB24Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2930 
2931 void ARGBToRGB24Row_AVX512VBMI(const uint8_t* src, uint8_t* dst, int width);
2932 
2933 void ARGBToRGB565DitherRow_C(const uint8_t* src_argb,
2934                              uint8_t* dst_rgb,
2935                              const uint32_t dither4,
2936                              int width);
2937 void ARGBToRGB565DitherRow_SSE2(const uint8_t* src,
2938                                 uint8_t* dst,
2939                                 const uint32_t dither4,
2940                                 int width);
2941 void ARGBToRGB565DitherRow_AVX2(const uint8_t* src,
2942                                 uint8_t* dst,
2943                                 const uint32_t dither4,
2944                                 int width);
2945 
2946 void ARGBToRGB565Row_AVX2(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2947 void ARGBToARGB1555Row_AVX2(const uint8_t* src_argb,
2948                             uint8_t* dst_rgb,
2949                             int width);
2950 void ARGBToARGB4444Row_AVX2(const uint8_t* src_argb,
2951                             uint8_t* dst_rgb,
2952                             int width);
2953 void ABGRToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2954 void ARGBToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
2955 
2956 void ARGBToRGB24Row_NEON(const uint8_t* src_argb,
2957                          uint8_t* dst_rgb24,
2958                          int width);
2959 void ARGBToRAWRow_NEON(const uint8_t* src_argb, uint8_t* dst_raw, int width);
2960 void ARGBToRGB565Row_NEON(const uint8_t* src_argb,
2961                           uint8_t* dst_rgb565,
2962                           int width);
2963 void ARGBToARGB1555Row_NEON(const uint8_t* src_argb,
2964                             uint8_t* dst_argb1555,
2965                             int width);
2966 void ARGBToARGB4444Row_NEON(const uint8_t* src_argb,
2967                             uint8_t* dst_argb4444,
2968                             int width);
2969 void ARGBToRGB565DitherRow_NEON(const uint8_t* src_argb,
2970                                 uint8_t* dst_rgb,
2971                                 const uint32_t dither4,
2972                                 int width);
2973 void ARGBToRGB24Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2974 void ARGBToRAWRow_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2975 void ARGBToRGB565Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2976 void ARGBToARGB1555Row_MSA(const uint8_t* src_argb,
2977                            uint8_t* dst_rgb,
2978                            int width);
2979 void ARGBToARGB4444Row_MSA(const uint8_t* src_argb,
2980                            uint8_t* dst_rgb,
2981                            int width);
2982 void ARGBToRGB565DitherRow_MSA(const uint8_t* src_argb,
2983                                uint8_t* dst_rgb,
2984                                const uint32_t dither4,
2985                                int width);
2986 void ARGBToRGB565DitherRow_LASX(const uint8_t* src_argb,
2987                                 uint8_t* dst_rgb,
2988                                 const uint32_t dither4,
2989                                 int width);
2990 
2991 void ARGBToRGB24Row_LASX(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2992 void ARGBToRAWRow_LASX(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2993 void ARGBToRGB565Row_LASX(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
2994 void ARGBToARGB1555Row_LASX(const uint8_t* src_argb,
2995                             uint8_t* dst_rgb,
2996                             int width);
2997 void ARGBToARGB4444Row_LASX(const uint8_t* src_argb,
2998                             uint8_t* dst_rgb,
2999                             int width);
3000 
3001 void ARGBToRGBARow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3002 void ARGBToRGB24Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3003 void ARGBToRAWRow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3004 void ARGBToRGB565Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3005 void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3006 void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
3007 void ABGRToAR30Row_C(const uint8_t* src_abgr, uint8_t* dst_ar30, int width);
3008 void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
3009 
3010 void ARGBToAR64Row_C(const uint8_t* src_argb, uint16_t* dst_ar64, int width);
3011 void ARGBToAB64Row_C(const uint8_t* src_argb, uint16_t* dst_ab64, int width);
3012 void AR64ToARGBRow_C(const uint16_t* src_ar64, uint8_t* dst_argb, int width);
3013 void AB64ToARGBRow_C(const uint16_t* src_ab64, uint8_t* dst_argb, int width);
3014 void AR64ShuffleRow_C(const uint8_t* src_ar64,
3015                       uint8_t* dst_ar64,
3016                       const uint8_t* shuffler,
3017                       int width);
3018 void ARGBToAR64Row_SSSE3(const uint8_t* src_argb,
3019                          uint16_t* dst_ar64,
3020                          int width);
3021 void ARGBToAB64Row_SSSE3(const uint8_t* src_argb,
3022                          uint16_t* dst_ab64,
3023                          int width);
3024 void AR64ToARGBRow_SSSE3(const uint16_t* src_ar64,
3025                          uint8_t* dst_argb,
3026                          int width);
3027 void AB64ToARGBRow_SSSE3(const uint16_t* src_ab64,
3028                          uint8_t* dst_argb,
3029                          int width);
3030 void ARGBToAR64Row_AVX2(const uint8_t* src_argb, uint16_t* dst_ar64, int width);
3031 void ARGBToAB64Row_AVX2(const uint8_t* src_argb, uint16_t* dst_ab64, int width);
3032 void AR64ToARGBRow_AVX2(const uint16_t* src_ar64, uint8_t* dst_argb, int width);
3033 void AB64ToARGBRow_AVX2(const uint16_t* src_ab64, uint8_t* dst_argb, int width);
3034 void ARGBToAR64Row_NEON(const uint8_t* src_argb, uint16_t* dst_ar64, int width);
3035 void ARGBToAB64Row_NEON(const uint8_t* src_argb, uint16_t* dst_ab64, int width);
3036 void AR64ToARGBRow_NEON(const uint16_t* src_ar64, uint8_t* dst_argb, int width);
3037 void AB64ToARGBRow_NEON(const uint16_t* src_ab64, uint8_t* dst_argb, int width);
3038 void ARGBToAR64Row_Any_SSSE3(const uint8_t* src_ptr,
3039                              uint16_t* dst_ptr,
3040                              int width);
3041 void ARGBToAB64Row_Any_SSSE3(const uint8_t* src_ptr,
3042                              uint16_t* dst_ptr,
3043                              int width);
3044 void AR64ToARGBRow_Any_SSSE3(const uint16_t* src_ptr,
3045                              uint8_t* dst_ptr,
3046                              int width);
3047 void AB64ToARGBRow_Any_SSSE3(const uint16_t* src_ptr,
3048                              uint8_t* dst_ptr,
3049                              int width);
3050 void ARGBToAR64Row_Any_AVX2(const uint8_t* src_ptr,
3051                             uint16_t* dst_ptr,
3052                             int width);
3053 void ARGBToAB64Row_Any_AVX2(const uint8_t* src_ptr,
3054                             uint16_t* dst_ptr,
3055                             int width);
3056 void AR64ToARGBRow_Any_AVX2(const uint16_t* src_ptr,
3057                             uint8_t* dst_ptr,
3058                             int width);
3059 void AB64ToARGBRow_Any_AVX2(const uint16_t* src_ptr,
3060                             uint8_t* dst_ptr,
3061                             int width);
3062 void ARGBToAR64Row_Any_NEON(const uint8_t* src_ptr,
3063                             uint16_t* dst_ptr,
3064                             int width);
3065 void ARGBToAB64Row_Any_NEON(const uint8_t* src_ptr,
3066                             uint16_t* dst_ptr,
3067                             int width);
3068 void AR64ToARGBRow_Any_NEON(const uint16_t* src_ptr,
3069                             uint8_t* dst_ptr,
3070                             int width);
3071 void AB64ToARGBRow_Any_NEON(const uint16_t* src_ptr,
3072                             uint8_t* dst_ptr,
3073                             int width);
3074 
3075 void J400ToARGBRow_SSE2(const uint8_t* src_y, uint8_t* dst_argb, int width);
3076 void J400ToARGBRow_AVX2(const uint8_t* src_y, uint8_t* dst_argb, int width);
3077 void J400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width);
3078 void J400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width);
3079 void J400ToARGBRow_LSX(const uint8_t* src_y, uint8_t* dst_argb, int width);
3080 void J400ToARGBRow_C(const uint8_t* src_y, uint8_t* dst_argb, int width);
3081 void J400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
3082                             uint8_t* dst_ptr,
3083                             int width);
3084 void J400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
3085                             uint8_t* dst_ptr,
3086                             int width);
3087 void J400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
3088                             uint8_t* dst_ptr,
3089                             int width);
3090 void J400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3091 void J400ToARGBRow_Any_LSX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
3092 
3093 void I444ToARGBRow_C(const uint8_t* src_y,
3094                      const uint8_t* src_u,
3095                      const uint8_t* src_v,
3096                      uint8_t* rgb_buf,
3097                      const struct YuvConstants* yuvconstants,
3098                      int width);
3099 void I422ToARGBRow_C(const uint8_t* src_y,
3100                      const uint8_t* src_u,
3101                      const uint8_t* src_v,
3102                      uint8_t* rgb_buf,
3103                      const struct YuvConstants* yuvconstants,
3104                      int width);
3105 void I422ToAR30Row_C(const uint8_t* src_y,
3106                      const uint8_t* src_u,
3107                      const uint8_t* src_v,
3108                      uint8_t* rgb_buf,
3109                      const struct YuvConstants* yuvconstants,
3110                      int width);
3111 void I210ToAR30Row_C(const uint16_t* src_y,
3112                      const uint16_t* src_u,
3113                      const uint16_t* src_v,
3114                      uint8_t* rgb_buf,
3115                      const struct YuvConstants* yuvconstants,
3116                      int width);
3117 void I210ToARGBRow_C(const uint16_t* src_y,
3118                      const uint16_t* src_u,
3119                      const uint16_t* src_v,
3120                      uint8_t* rgb_buf,
3121                      const struct YuvConstants* yuvconstants,
3122                      int width);
3123 void I212ToAR30Row_C(const uint16_t* src_y,
3124                      const uint16_t* src_u,
3125                      const uint16_t* src_v,
3126                      uint8_t* rgb_buf,
3127                      const struct YuvConstants* yuvconstants,
3128                      int width);
3129 void I212ToARGBRow_C(const uint16_t* src_y,
3130                      const uint16_t* src_u,
3131                      const uint16_t* src_v,
3132                      uint8_t* rgb_buf,
3133                      const struct YuvConstants* yuvconstants,
3134                      int width);
3135 void I410ToAR30Row_C(const uint16_t* src_y,
3136                      const uint16_t* src_u,
3137                      const uint16_t* src_v,
3138                      uint8_t* rgb_buf,
3139                      const struct YuvConstants* yuvconstants,
3140                      int width);
3141 void I410ToARGBRow_C(const uint16_t* src_y,
3142                      const uint16_t* src_u,
3143                      const uint16_t* src_v,
3144                      uint8_t* rgb_buf,
3145                      const struct YuvConstants* yuvconstants,
3146                      int width);
3147 void I210AlphaToARGBRow_C(const uint16_t* src_y,
3148                           const uint16_t* src_u,
3149                           const uint16_t* src_v,
3150                           const uint16_t* src_a,
3151                           uint8_t* rgb_buf,
3152                           const struct YuvConstants* yuvconstants,
3153                           int width);
3154 void I410AlphaToARGBRow_C(const uint16_t* src_y,
3155                           const uint16_t* src_u,
3156                           const uint16_t* src_v,
3157                           const uint16_t* src_a,
3158                           uint8_t* rgb_buf,
3159                           const struct YuvConstants* yuvconstants,
3160                           int width);
3161 void I444AlphaToARGBRow_C(const uint8_t* src_y,
3162                           const uint8_t* src_u,
3163                           const uint8_t* src_v,
3164                           const uint8_t* src_a,
3165                           uint8_t* rgb_buf,
3166                           const struct YuvConstants* yuvconstants,
3167                           int width);
3168 void I422AlphaToARGBRow_C(const uint8_t* src_y,
3169                           const uint8_t* src_u,
3170                           const uint8_t* src_v,
3171                           const uint8_t* src_a,
3172                           uint8_t* rgb_buf,
3173                           const struct YuvConstants* yuvconstants,
3174                           int width);
3175 void NV12ToARGBRow_C(const uint8_t* src_y,
3176                      const uint8_t* src_uv,
3177                      uint8_t* rgb_buf,
3178                      const struct YuvConstants* yuvconstants,
3179                      int width);
3180 void NV12ToRGB565Row_C(const uint8_t* src_y,
3181                        const uint8_t* src_uv,
3182                        uint8_t* dst_rgb565,
3183                        const struct YuvConstants* yuvconstants,
3184                        int width);
3185 void NV21ToARGBRow_C(const uint8_t* src_y,
3186                      const uint8_t* src_vu,
3187                      uint8_t* rgb_buf,
3188                      const struct YuvConstants* yuvconstants,
3189                      int width);
3190 void NV12ToRGB24Row_C(const uint8_t* src_y,
3191                       const uint8_t* src_uv,
3192                       uint8_t* rgb_buf,
3193                       const struct YuvConstants* yuvconstants,
3194                       int width);
3195 void NV21ToRGB24Row_C(const uint8_t* src_y,
3196                       const uint8_t* src_vu,
3197                       uint8_t* rgb_buf,
3198                       const struct YuvConstants* yuvconstants,
3199                       int width);
3200 void NV21ToYUV24Row_C(const uint8_t* src_y,
3201                       const uint8_t* src_vu,
3202                       uint8_t* dst_yuv24,
3203                       int width);
3204 void YUY2ToARGBRow_C(const uint8_t* src_yuy2,
3205                      uint8_t* rgb_buf,
3206                      const struct YuvConstants* yuvconstants,
3207                      int width);
3208 void UYVYToARGBRow_C(const uint8_t* src_uyvy,
3209                      uint8_t* rgb_buf,
3210                      const struct YuvConstants* yuvconstants,
3211                      int width);
3212 void P210ToARGBRow_C(const uint16_t* src_y,
3213                      const uint16_t* src_uv,
3214                      uint8_t* dst_argb,
3215                      const struct YuvConstants* yuvconstants,
3216                      int width);
3217 void P410ToARGBRow_C(const uint16_t* src_y,
3218                      const uint16_t* src_uv,
3219                      uint8_t* dst_argb,
3220                      const struct YuvConstants* yuvconstants,
3221                      int width);
3222 void P210ToAR30Row_C(const uint16_t* src_y,
3223                      const uint16_t* src_uv,
3224                      uint8_t* dst_ar30,
3225                      const struct YuvConstants* yuvconstants,
3226                      int width);
3227 void P410ToAR30Row_C(const uint16_t* src_y,
3228                      const uint16_t* src_uv,
3229                      uint8_t* dst_ar30,
3230                      const struct YuvConstants* yuvconstants,
3231                      int width);
3232 
3233 void I422ToRGBARow_C(const uint8_t* src_y,
3234                      const uint8_t* src_u,
3235                      const uint8_t* src_v,
3236                      uint8_t* rgb_buf,
3237                      const struct YuvConstants* yuvconstants,
3238                      int width);
3239 void I422ToRGB24Row_C(const uint8_t* src_y,
3240                       const uint8_t* src_u,
3241                       const uint8_t* src_v,
3242                       uint8_t* rgb_buf,
3243                       const struct YuvConstants* yuvconstants,
3244                       int width);
3245 void I422ToARGB4444Row_C(const uint8_t* src_y,
3246                          const uint8_t* src_u,
3247                          const uint8_t* src_v,
3248                          uint8_t* dst_argb4444,
3249                          const struct YuvConstants* yuvconstants,
3250                          int width);
3251 void I422ToARGB1555Row_C(const uint8_t* src_y,
3252                          const uint8_t* src_u,
3253                          const uint8_t* src_v,
3254                          uint8_t* dst_argb1555,
3255                          const struct YuvConstants* yuvconstants,
3256                          int width);
3257 void I422ToRGB565Row_C(const uint8_t* src_y,
3258                        const uint8_t* src_u,
3259                        const uint8_t* src_v,
3260                        uint8_t* dst_rgb565,
3261                        const struct YuvConstants* yuvconstants,
3262                        int width);
3263 void I422ToARGBRow_AVX2(const uint8_t* y_buf,
3264                         const uint8_t* u_buf,
3265                         const uint8_t* v_buf,
3266                         uint8_t* dst_argb,
3267                         const struct YuvConstants* yuvconstants,
3268                         int width);
3269 void I422ToARGBRow_AVX512BW(const uint8_t* y_buf,
3270                             const uint8_t* u_buf,
3271                             const uint8_t* v_buf,
3272                             uint8_t* dst_argb,
3273                             const struct YuvConstants* yuvconstants,
3274                             int width);
3275 void I422ToRGBARow_AVX2(const uint8_t* y_buf,
3276                         const uint8_t* u_buf,
3277                         const uint8_t* v_buf,
3278                         uint8_t* dst_argb,
3279                         const struct YuvConstants* yuvconstants,
3280                         int width);
3281 void I444ToARGBRow_SSSE3(const uint8_t* y_buf,
3282                          const uint8_t* u_buf,
3283                          const uint8_t* v_buf,
3284                          uint8_t* dst_argb,
3285                          const struct YuvConstants* yuvconstants,
3286                          int width);
3287 void I444ToARGBRow_AVX2(const uint8_t* y_buf,
3288                         const uint8_t* u_buf,
3289                         const uint8_t* v_buf,
3290                         uint8_t* dst_argb,
3291                         const struct YuvConstants* yuvconstants,
3292                         int width);
3293 void I422ToARGBRow_SSSE3(const uint8_t* y_buf,
3294                          const uint8_t* u_buf,
3295                          const uint8_t* v_buf,
3296                          uint8_t* dst_argb,
3297                          const struct YuvConstants* yuvconstants,
3298                          int width);
3299 
3300 void I422ToAR30Row_SSSE3(const uint8_t* y_buf,
3301                          const uint8_t* u_buf,
3302                          const uint8_t* v_buf,
3303                          uint8_t* dst_ar30,
3304                          const struct YuvConstants* yuvconstants,
3305                          int width);
3306 void I210ToAR30Row_SSSE3(const uint16_t* y_buf,
3307                          const uint16_t* u_buf,
3308                          const uint16_t* v_buf,
3309                          uint8_t* dst_ar30,
3310                          const struct YuvConstants* yuvconstants,
3311                          int width);
3312 void I210ToARGBRow_SSSE3(const uint16_t* y_buf,
3313                          const uint16_t* u_buf,
3314                          const uint16_t* v_buf,
3315                          uint8_t* dst_argb,
3316                          const struct YuvConstants* yuvconstants,
3317                          int width);
3318 void I212ToAR30Row_SSSE3(const uint16_t* y_buf,
3319                          const uint16_t* u_buf,
3320                          const uint16_t* v_buf,
3321                          uint8_t* dst_ar30,
3322                          const struct YuvConstants* yuvconstants,
3323                          int width);
3324 void I212ToARGBRow_SSSE3(const uint16_t* y_buf,
3325                          const uint16_t* u_buf,
3326                          const uint16_t* v_buf,
3327                          uint8_t* dst_argb,
3328                          const struct YuvConstants* yuvconstants,
3329                          int width);
3330 void I410ToAR30Row_SSSE3(const uint16_t* y_buf,
3331                          const uint16_t* u_buf,
3332                          const uint16_t* v_buf,
3333                          uint8_t* dst_ar30,
3334                          const struct YuvConstants* yuvconstants,
3335                          int width);
3336 void I410ToARGBRow_SSSE3(const uint16_t* y_buf,
3337                          const uint16_t* u_buf,
3338                          const uint16_t* v_buf,
3339                          uint8_t* dst_argb,
3340                          const struct YuvConstants* yuvconstants,
3341                          int width);
3342 void I210AlphaToARGBRow_SSSE3(const uint16_t* y_buf,
3343                               const uint16_t* u_buf,
3344                               const uint16_t* v_buf,
3345                               const uint16_t* a_buf,
3346                               uint8_t* dst_argb,
3347                               const struct YuvConstants* yuvconstants,
3348                               int width);
3349 void I410AlphaToARGBRow_SSSE3(const uint16_t* y_buf,
3350                               const uint16_t* u_buf,
3351                               const uint16_t* v_buf,
3352                               const uint16_t* a_buf,
3353                               uint8_t* dst_argb,
3354                               const struct YuvConstants* yuvconstants,
3355                               int width);
3356 void I422ToAR30Row_AVX2(const uint8_t* y_buf,
3357                         const uint8_t* u_buf,
3358                         const uint8_t* v_buf,
3359                         uint8_t* dst_ar30,
3360                         const struct YuvConstants* yuvconstants,
3361                         int width);
3362 void I210ToARGBRow_AVX2(const uint16_t* y_buf,
3363                         const uint16_t* u_buf,
3364                         const uint16_t* v_buf,
3365                         uint8_t* dst_argb,
3366                         const struct YuvConstants* yuvconstants,
3367                         int width);
3368 void I210ToAR30Row_AVX2(const uint16_t* y_buf,
3369                         const uint16_t* u_buf,
3370                         const uint16_t* v_buf,
3371                         uint8_t* dst_ar30,
3372                         const struct YuvConstants* yuvconstants,
3373                         int width);
3374 void I212ToARGBRow_AVX2(const uint16_t* y_buf,
3375                         const uint16_t* u_buf,
3376                         const uint16_t* v_buf,
3377                         uint8_t* dst_argb,
3378                         const struct YuvConstants* yuvconstants,
3379                         int width);
3380 void I212ToAR30Row_AVX2(const uint16_t* y_buf,
3381                         const uint16_t* u_buf,
3382                         const uint16_t* v_buf,
3383                         uint8_t* dst_ar30,
3384                         const struct YuvConstants* yuvconstants,
3385                         int width);
3386 void I410ToAR30Row_AVX2(const uint16_t* y_buf,
3387                         const uint16_t* u_buf,
3388                         const uint16_t* v_buf,
3389                         uint8_t* dst_ar30,
3390                         const struct YuvConstants* yuvconstants,
3391                         int width);
3392 void I410ToARGBRow_AVX2(const uint16_t* y_buf,
3393                         const uint16_t* u_buf,
3394                         const uint16_t* v_buf,
3395                         uint8_t* dst_argb,
3396                         const struct YuvConstants* yuvconstants,
3397                         int width);
3398 void I210AlphaToARGBRow_AVX2(const uint16_t* y_buf,
3399                              const uint16_t* u_buf,
3400                              const uint16_t* v_buf,
3401                              const uint16_t* a_buf,
3402                              uint8_t* dst_argb,
3403                              const struct YuvConstants* yuvconstants,
3404                              int width);
3405 void I410AlphaToARGBRow_AVX2(const uint16_t* y_buf,
3406                              const uint16_t* u_buf,
3407                              const uint16_t* v_buf,
3408                              const uint16_t* a_buf,
3409                              uint8_t* dst_argb,
3410                              const struct YuvConstants* yuvconstants,
3411                              int width);
3412 void I444AlphaToARGBRow_SSSE3(const uint8_t* y_buf,
3413                               const uint8_t* u_buf,
3414                               const uint8_t* v_buf,
3415                               const uint8_t* a_buf,
3416                               uint8_t* dst_argb,
3417                               const struct YuvConstants* yuvconstants,
3418                               int width);
3419 void I444AlphaToARGBRow_AVX2(const uint8_t* y_buf,
3420                              const uint8_t* u_buf,
3421                              const uint8_t* v_buf,
3422                              const uint8_t* a_buf,
3423                              uint8_t* dst_argb,
3424                              const struct YuvConstants* yuvconstants,
3425                              int width);
3426 void I422AlphaToARGBRow_SSSE3(const uint8_t* y_buf,
3427                               const uint8_t* u_buf,
3428                               const uint8_t* v_buf,
3429                               const uint8_t* a_buf,
3430                               uint8_t* dst_argb,
3431                               const struct YuvConstants* yuvconstants,
3432                               int width);
3433 void I422AlphaToARGBRow_AVX2(const uint8_t* y_buf,
3434                              const uint8_t* u_buf,
3435                              const uint8_t* v_buf,
3436                              const uint8_t* a_buf,
3437                              uint8_t* dst_argb,
3438                              const struct YuvConstants* yuvconstants,
3439                              int width);
3440 void NV12ToARGBRow_SSSE3(const uint8_t* y_buf,
3441                          const uint8_t* uv_buf,
3442                          uint8_t* dst_argb,
3443                          const struct YuvConstants* yuvconstants,
3444                          int width);
3445 void NV12ToARGBRow_AVX2(const uint8_t* y_buf,
3446                         const uint8_t* uv_buf,
3447                         uint8_t* dst_argb,
3448                         const struct YuvConstants* yuvconstants,
3449                         int width);
3450 void NV12ToRGB24Row_SSSE3(const uint8_t* src_y,
3451                           const uint8_t* src_uv,
3452                           uint8_t* dst_rgb24,
3453                           const struct YuvConstants* yuvconstants,
3454                           int width);
3455 void NV21ToRGB24Row_SSSE3(const uint8_t* src_y,
3456                           const uint8_t* src_vu,
3457                           uint8_t* dst_rgb24,
3458                           const struct YuvConstants* yuvconstants,
3459                           int width);
3460 void NV12ToRGB565Row_SSSE3(const uint8_t* src_y,
3461                            const uint8_t* src_uv,
3462                            uint8_t* dst_rgb565,
3463                            const struct YuvConstants* yuvconstants,
3464                            int width);
3465 void NV12ToRGB24Row_AVX2(const uint8_t* src_y,
3466                          const uint8_t* src_uv,
3467                          uint8_t* dst_rgb24,
3468                          const struct YuvConstants* yuvconstants,
3469                          int width);
3470 void NV21ToRGB24Row_AVX2(const uint8_t* src_y,
3471                          const uint8_t* src_vu,
3472                          uint8_t* dst_rgb24,
3473                          const struct YuvConstants* yuvconstants,
3474                          int width);
3475 void NV21ToYUV24Row_SSSE3(const uint8_t* src_y,
3476                           const uint8_t* src_vu,
3477                           uint8_t* dst_yuv24,
3478                           int width);
3479 void NV21ToYUV24Row_AVX2(const uint8_t* src_y,
3480                          const uint8_t* src_vu,
3481                          uint8_t* dst_yuv24,
3482                          int width);
3483 void NV12ToRGB565Row_AVX2(const uint8_t* src_y,
3484                           const uint8_t* src_uv,
3485                           uint8_t* dst_rgb565,
3486                           const struct YuvConstants* yuvconstants,
3487                           int width);
3488 void NV21ToARGBRow_SSSE3(const uint8_t* y_buf,
3489                          const uint8_t* vu_buf,
3490                          uint8_t* dst_argb,
3491                          const struct YuvConstants* yuvconstants,
3492                          int width);
3493 void NV21ToARGBRow_AVX2(const uint8_t* y_buf,
3494                         const uint8_t* vu_buf,
3495                         uint8_t* dst_argb,
3496                         const struct YuvConstants* yuvconstants,
3497                         int width);
3498 void YUY2ToARGBRow_SSSE3(const uint8_t* yuy2_buf,
3499                          uint8_t* dst_argb,
3500                          const struct YuvConstants* yuvconstants,
3501                          int width);
3502 void UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf,
3503                          uint8_t* dst_argb,
3504                          const struct YuvConstants* yuvconstants,
3505                          int width);
3506 void YUY2ToARGBRow_AVX2(const uint8_t* yuy2_buf,
3507                         uint8_t* dst_argb,
3508                         const struct YuvConstants* yuvconstants,
3509                         int width);
3510 void UYVYToARGBRow_AVX2(const uint8_t* uyvy_buf,
3511                         uint8_t* dst_argb,
3512                         const struct YuvConstants* yuvconstants,
3513                         int width);
3514 
3515 void P210ToARGBRow_SSSE3(const uint16_t* y_buf,
3516                          const uint16_t* uv_buf,
3517                          uint8_t* dst_argb,
3518                          const struct YuvConstants* yuvconstants,
3519                          int width);
3520 void P410ToARGBRow_SSSE3(const uint16_t* y_buf,
3521                          const uint16_t* uv_buf,
3522                          uint8_t* dst_argb,
3523                          const struct YuvConstants* yuvconstants,
3524                          int width);
3525 void P210ToAR30Row_SSSE3(const uint16_t* y_buf,
3526                          const uint16_t* uv_buf,
3527                          uint8_t* dst_ar30,
3528                          const struct YuvConstants* yuvconstants,
3529                          int width);
3530 void P410ToAR30Row_SSSE3(const uint16_t* y_buf,
3531                          const uint16_t* uv_buf,
3532                          uint8_t* dst_ar30,
3533                          const struct YuvConstants* yuvconstants,
3534                          int width);
3535 void P210ToARGBRow_AVX2(const uint16_t* y_buf,
3536                         const uint16_t* uv_buf,
3537                         uint8_t* dst_argb,
3538                         const struct YuvConstants* yuvconstants,
3539                         int width);
3540 void P410ToARGBRow_AVX2(const uint16_t* y_buf,
3541                         const uint16_t* uv_buf,
3542                         uint8_t* dst_argb,
3543                         const struct YuvConstants* yuvconstants,
3544                         int width);
3545 void P210ToAR30Row_AVX2(const uint16_t* y_buf,
3546                         const uint16_t* uv_buf,
3547                         uint8_t* dst_ar30,
3548                         const struct YuvConstants* yuvconstants,
3549                         int width);
3550 void P410ToAR30Row_AVX2(const uint16_t* y_buf,
3551                         const uint16_t* uv_buf,
3552                         uint8_t* dst_ar30,
3553                         const struct YuvConstants* yuvconstants,
3554                         int width);
3555 
3556 void I422ToRGBARow_SSSE3(const uint8_t* y_buf,
3557                          const uint8_t* u_buf,
3558                          const uint8_t* v_buf,
3559                          uint8_t* dst_rgba,
3560                          const struct YuvConstants* yuvconstants,
3561                          int width);
3562 void I422ToARGB4444Row_SSSE3(const uint8_t* src_y,
3563                              const uint8_t* src_u,
3564                              const uint8_t* src_v,
3565                              uint8_t* dst_argb4444,
3566                              const struct YuvConstants* yuvconstants,
3567                              int width);
3568 void I422ToARGB4444Row_AVX2(const uint8_t* src_y,
3569                             const uint8_t* src_u,
3570                             const uint8_t* src_v,
3571                             uint8_t* dst_argb4444,
3572                             const struct YuvConstants* yuvconstants,
3573                             int width);
3574 void I422ToARGB1555Row_SSSE3(const uint8_t* src_y,
3575                              const uint8_t* src_u,
3576                              const uint8_t* src_v,
3577                              uint8_t* dst_argb1555,
3578                              const struct YuvConstants* yuvconstants,
3579                              int width);
3580 void I422ToARGB1555Row_AVX2(const uint8_t* src_y,
3581                             const uint8_t* src_u,
3582                             const uint8_t* src_v,
3583                             uint8_t* dst_argb1555,
3584                             const struct YuvConstants* yuvconstants,
3585                             int width);
3586 void I422ToRGB565Row_SSSE3(const uint8_t* src_y,
3587                            const uint8_t* src_u,
3588                            const uint8_t* src_v,
3589                            uint8_t* dst_rgb565,
3590                            const struct YuvConstants* yuvconstants,
3591                            int width);
3592 void I422ToRGB565Row_AVX2(const uint8_t* src_y,
3593                           const uint8_t* src_u,
3594                           const uint8_t* src_v,
3595                           uint8_t* dst_rgb565,
3596                           const struct YuvConstants* yuvconstants,
3597                           int width);
3598 void I422ToRGB24Row_SSSE3(const uint8_t* y_buf,
3599                           const uint8_t* u_buf,
3600                           const uint8_t* v_buf,
3601                           uint8_t* dst_rgb24,
3602                           const struct YuvConstants* yuvconstants,
3603                           int width);
3604 void I422ToRGB24Row_AVX2(const uint8_t* src_y,
3605                          const uint8_t* src_u,
3606                          const uint8_t* src_v,
3607                          uint8_t* dst_rgb24,
3608                          const struct YuvConstants* yuvconstants,
3609                          int width);
3610 void I422ToARGBRow_Any_AVX2(const uint8_t* y_buf,
3611                             const uint8_t* u_buf,
3612                             const uint8_t* v_buf,
3613                             uint8_t* dst_ptr,
3614                             const struct YuvConstants* yuvconstants,
3615                             int width);
3616 void I422ToARGBRow_Any_AVX512BW(const uint8_t* y_buf,
3617                                 const uint8_t* u_buf,
3618                                 const uint8_t* v_buf,
3619                                 uint8_t* dst_ptr,
3620                                 const struct YuvConstants* yuvconstants,
3621                                 int width);
3622 void I422ToRGBARow_Any_AVX2(const uint8_t* y_buf,
3623                             const uint8_t* u_buf,
3624                             const uint8_t* v_buf,
3625                             uint8_t* dst_ptr,
3626                             const struct YuvConstants* yuvconstants,
3627                             int width);
3628 void I444ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3629                              const uint8_t* u_buf,
3630                              const uint8_t* v_buf,
3631                              uint8_t* dst_ptr,
3632                              const struct YuvConstants* yuvconstants,
3633                              int width);
3634 void I444ToARGBRow_Any_AVX2(const uint8_t* y_buf,
3635                             const uint8_t* u_buf,
3636                             const uint8_t* v_buf,
3637                             uint8_t* dst_ptr,
3638                             const struct YuvConstants* yuvconstants,
3639                             int width);
3640 void I422ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3641                              const uint8_t* u_buf,
3642                              const uint8_t* v_buf,
3643                              uint8_t* dst_ptr,
3644                              const struct YuvConstants* yuvconstants,
3645                              int width);
3646 void I422ToAR30Row_Any_SSSE3(const uint8_t* y_buf,
3647                              const uint8_t* u_buf,
3648                              const uint8_t* v_buf,
3649                              uint8_t* dst_ptr,
3650                              const struct YuvConstants* yuvconstants,
3651                              int width);
3652 void I210ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
3653                              const uint16_t* u_buf,
3654                              const uint16_t* v_buf,
3655                              uint8_t* dst_ptr,
3656                              const struct YuvConstants* yuvconstants,
3657                              int width);
3658 void I210ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3659                              const uint16_t* u_buf,
3660                              const uint16_t* v_buf,
3661                              uint8_t* dst_ptr,
3662                              const struct YuvConstants* yuvconstants,
3663                              int width);
3664 void I212ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
3665                              const uint16_t* u_buf,
3666                              const uint16_t* v_buf,
3667                              uint8_t* dst_ptr,
3668                              const struct YuvConstants* yuvconstants,
3669                              int width);
3670 void I212ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3671                              const uint16_t* u_buf,
3672                              const uint16_t* v_buf,
3673                              uint8_t* dst_ptr,
3674                              const struct YuvConstants* yuvconstants,
3675                              int width);
3676 void I410ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
3677                              const uint16_t* u_buf,
3678                              const uint16_t* v_buf,
3679                              uint8_t* dst_ptr,
3680                              const struct YuvConstants* yuvconstants,
3681                              int width);
3682 void I410ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3683                              const uint16_t* u_buf,
3684                              const uint16_t* v_buf,
3685                              uint8_t* dst_ptr,
3686                              const struct YuvConstants* yuvconstants,
3687                              int width);
3688 void I210AlphaToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3689                                   const uint16_t* u_buf,
3690                                   const uint16_t* v_buf,
3691                                   const uint16_t* a_buf,
3692                                   uint8_t* dst_ptr,
3693                                   const struct YuvConstants* yuvconstants,
3694                                   int width);
3695 void I410AlphaToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3696                                   const uint16_t* u_buf,
3697                                   const uint16_t* v_buf,
3698                                   const uint16_t* a_buf,
3699                                   uint8_t* dst_ptr,
3700                                   const struct YuvConstants* yuvconstants,
3701                                   int width);
3702 void I422ToAR30Row_Any_AVX2(const uint8_t* y_buf,
3703                             const uint8_t* u_buf,
3704                             const uint8_t* v_buf,
3705                             uint8_t* dst_ptr,
3706                             const struct YuvConstants* yuvconstants,
3707                             int width);
3708 void I210ToARGBRow_Any_AVX2(const uint16_t* y_buf,
3709                             const uint16_t* u_buf,
3710                             const uint16_t* v_buf,
3711                             uint8_t* dst_ptr,
3712                             const struct YuvConstants* yuvconstants,
3713                             int width);
3714 void I210ToAR30Row_Any_AVX2(const uint16_t* y_buf,
3715                             const uint16_t* u_buf,
3716                             const uint16_t* v_buf,
3717                             uint8_t* dst_ptr,
3718                             const struct YuvConstants* yuvconstants,
3719                             int width);
3720 void I212ToARGBRow_Any_AVX2(const uint16_t* y_buf,
3721                             const uint16_t* u_buf,
3722                             const uint16_t* v_buf,
3723                             uint8_t* dst_ptr,
3724                             const struct YuvConstants* yuvconstants,
3725                             int width);
3726 void I212ToAR30Row_Any_AVX2(const uint16_t* y_buf,
3727                             const uint16_t* u_buf,
3728                             const uint16_t* v_buf,
3729                             uint8_t* dst_ptr,
3730                             const struct YuvConstants* yuvconstants,
3731                             int width);
3732 void I410ToAR30Row_Any_AVX2(const uint16_t* y_buf,
3733                             const uint16_t* u_buf,
3734                             const uint16_t* v_buf,
3735                             uint8_t* dst_ptr,
3736                             const struct YuvConstants* yuvconstants,
3737                             int width);
3738 void I410ToARGBRow_Any_AVX2(const uint16_t* y_buf,
3739                             const uint16_t* u_buf,
3740                             const uint16_t* v_buf,
3741                             uint8_t* dst_ptr,
3742                             const struct YuvConstants* yuvconstants,
3743                             int width);
3744 void I210AlphaToARGBRow_Any_AVX2(const uint16_t* y_buf,
3745                                  const uint16_t* u_buf,
3746                                  const uint16_t* v_buf,
3747                                  const uint16_t* a_buf,
3748                                  uint8_t* dst_ptr,
3749                                  const struct YuvConstants* yuvconstants,
3750                                  int width);
3751 void I410AlphaToARGBRow_Any_AVX2(const uint16_t* y_buf,
3752                                  const uint16_t* u_buf,
3753                                  const uint16_t* v_buf,
3754                                  const uint16_t* a_buf,
3755                                  uint8_t* dst_ptr,
3756                                  const struct YuvConstants* yuvconstants,
3757                                  int width);
3758 void I444AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3759                                   const uint8_t* u_buf,
3760                                   const uint8_t* v_buf,
3761                                   const uint8_t* a_buf,
3762                                   uint8_t* dst_ptr,
3763                                   const struct YuvConstants* yuvconstants,
3764                                   int width);
3765 void I444AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf,
3766                                  const uint8_t* u_buf,
3767                                  const uint8_t* v_buf,
3768                                  const uint8_t* a_buf,
3769                                  uint8_t* dst_ptr,
3770                                  const struct YuvConstants* yuvconstants,
3771                                  int width);
3772 void I422AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3773                                   const uint8_t* u_buf,
3774                                   const uint8_t* v_buf,
3775                                   const uint8_t* a_buf,
3776                                   uint8_t* dst_ptr,
3777                                   const struct YuvConstants* yuvconstants,
3778                                   int width);
3779 void I422AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf,
3780                                  const uint8_t* u_buf,
3781                                  const uint8_t* v_buf,
3782                                  const uint8_t* a_buf,
3783                                  uint8_t* dst_ptr,
3784                                  const struct YuvConstants* yuvconstants,
3785                                  int width);
3786 void NV12ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3787                              const uint8_t* uv_buf,
3788                              uint8_t* dst_ptr,
3789                              const struct YuvConstants* yuvconstants,
3790                              int width);
3791 void NV12ToARGBRow_Any_AVX2(const uint8_t* y_buf,
3792                             const uint8_t* uv_buf,
3793                             uint8_t* dst_ptr,
3794                             const struct YuvConstants* yuvconstants,
3795                             int width);
3796 void NV21ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
3797                              const uint8_t* uv_buf,
3798                              uint8_t* dst_ptr,
3799                              const struct YuvConstants* yuvconstants,
3800                              int width);
3801 void NV21ToARGBRow_Any_AVX2(const uint8_t* y_buf,
3802                             const uint8_t* uv_buf,
3803                             uint8_t* dst_ptr,
3804                             const struct YuvConstants* yuvconstants,
3805                             int width);
3806 void NV12ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
3807                               const uint8_t* uv_buf,
3808                               uint8_t* dst_ptr,
3809                               const struct YuvConstants* yuvconstants,
3810                               int width);
3811 void NV21ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
3812                               const uint8_t* uv_buf,
3813                               uint8_t* dst_ptr,
3814                               const struct YuvConstants* yuvconstants,
3815                               int width);
3816 void NV12ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
3817                              const uint8_t* uv_buf,
3818                              uint8_t* dst_ptr,
3819                              const struct YuvConstants* yuvconstants,
3820                              int width);
3821 void NV21ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
3822                              const uint8_t* uv_buf,
3823                              uint8_t* dst_ptr,
3824                              const struct YuvConstants* yuvconstants,
3825                              int width);
3826 void NV21ToYUV24Row_Any_SSSE3(const uint8_t* src_y,
3827                               const uint8_t* src_vu,
3828                               uint8_t* dst_yuv24,
3829                               int width);
3830 void NV21ToYUV24Row_Any_AVX2(const uint8_t* src_y,
3831                              const uint8_t* src_vu,
3832                              uint8_t* dst_yuv24,
3833                              int width);
3834 void NV12ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
3835                                const uint8_t* uv_buf,
3836                                uint8_t* dst_ptr,
3837                                const struct YuvConstants* yuvconstants,
3838                                int width);
3839 void NV12ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
3840                               const uint8_t* uv_buf,
3841                               uint8_t* dst_ptr,
3842                               const struct YuvConstants* yuvconstants,
3843                               int width);
3844 void YUY2ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
3845                              uint8_t* dst_ptr,
3846                              const struct YuvConstants* yuvconstants,
3847                              int width);
3848 void UYVYToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
3849                              uint8_t* dst_ptr,
3850                              const struct YuvConstants* yuvconstants,
3851                              int width);
3852 void YUY2ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
3853                             uint8_t* dst_ptr,
3854                             const struct YuvConstants* yuvconstants,
3855                             int width);
3856 void UYVYToARGBRow_Any_AVX2(const uint8_t* src_ptr,
3857                             uint8_t* dst_ptr,
3858                             const struct YuvConstants* yuvconstants,
3859                             int width);
3860 void P210ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3861                              const uint16_t* uv_buf,
3862                              uint8_t* dst_ptr,
3863                              const struct YuvConstants* yuvconstants,
3864                              int width);
3865 void P410ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
3866                              const uint16_t* uv_buf,
3867                              uint8_t* dst_ptr,
3868                              const struct YuvConstants* yuvconstants,
3869                              int width);
3870 void P210ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
3871                              const uint16_t* uv_buf,
3872                              uint8_t* dst_ptr,
3873                              const struct YuvConstants* yuvconstants,
3874                              int width);
3875 void P410ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
3876                              const uint16_t* uv_buf,
3877                              uint8_t* dst_ptr,
3878                              const struct YuvConstants* yuvconstants,
3879                              int width);
3880 void P210ToARGBRow_Any_AVX2(const uint16_t* y_buf,
3881                             const uint16_t* uv_buf,
3882                             uint8_t* dst_ptr,
3883                             const struct YuvConstants* yuvconstants,
3884                             int width);
3885 void P410ToARGBRow_Any_AVX2(const uint16_t* y_buf,
3886                             const uint16_t* uv_buf,
3887                             uint8_t* dst_ptr,
3888                             const struct YuvConstants* yuvconstants,
3889                             int width);
3890 void P210ToAR30Row_Any_AVX2(const uint16_t* y_buf,
3891                             const uint16_t* uv_buf,
3892                             uint8_t* dst_ptr,
3893                             const struct YuvConstants* yuvconstants,
3894                             int width);
3895 void P410ToAR30Row_Any_AVX2(const uint16_t* y_buf,
3896                             const uint16_t* uv_buf,
3897                             uint8_t* dst_ptr,
3898                             const struct YuvConstants* yuvconstants,
3899                             int width);
3900 void I422ToRGBARow_Any_SSSE3(const uint8_t* y_buf,
3901                              const uint8_t* u_buf,
3902                              const uint8_t* v_buf,
3903                              uint8_t* dst_ptr,
3904                              const struct YuvConstants* yuvconstants,
3905                              int width);
3906 void I422ToARGB4444Row_Any_SSSE3(const uint8_t* y_buf,
3907                                  const uint8_t* u_buf,
3908                                  const uint8_t* v_buf,
3909                                  uint8_t* dst_ptr,
3910                                  const struct YuvConstants* yuvconstants,
3911                                  int width);
3912 void I422ToARGB4444Row_Any_AVX2(const uint8_t* y_buf,
3913                                 const uint8_t* u_buf,
3914                                 const uint8_t* v_buf,
3915                                 uint8_t* dst_ptr,
3916                                 const struct YuvConstants* yuvconstants,
3917                                 int width);
3918 void I422ToARGB1555Row_Any_SSSE3(const uint8_t* y_buf,
3919                                  const uint8_t* u_buf,
3920                                  const uint8_t* v_buf,
3921                                  uint8_t* dst_ptr,
3922                                  const struct YuvConstants* yuvconstants,
3923                                  int width);
3924 void I422ToARGB1555Row_Any_AVX2(const uint8_t* y_buf,
3925                                 const uint8_t* u_buf,
3926                                 const uint8_t* v_buf,
3927                                 uint8_t* dst_ptr,
3928                                 const struct YuvConstants* yuvconstants,
3929                                 int width);
3930 void I422ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
3931                                const uint8_t* u_buf,
3932                                const uint8_t* v_buf,
3933                                uint8_t* dst_ptr,
3934                                const struct YuvConstants* yuvconstants,
3935                                int width);
3936 void I422ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
3937                               const uint8_t* u_buf,
3938                               const uint8_t* v_buf,
3939                               uint8_t* dst_ptr,
3940                               const struct YuvConstants* yuvconstants,
3941                               int width);
3942 void I422ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
3943                               const uint8_t* u_buf,
3944                               const uint8_t* v_buf,
3945                               uint8_t* dst_ptr,
3946                               const struct YuvConstants* yuvconstants,
3947                               int width);
3948 void I422ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
3949                              const uint8_t* u_buf,
3950                              const uint8_t* v_buf,
3951                              uint8_t* dst_ptr,
3952                              const struct YuvConstants* yuvconstants,
3953                              int width);
3954 
3955 void I400ToARGBRow_C(const uint8_t* src_y,
3956                      uint8_t* rgb_buf,
3957                      const struct YuvConstants* yuvconstants,
3958                      int width);
3959 void I400ToARGBRow_SSE2(const uint8_t* y_buf,
3960                         uint8_t* dst_argb,
3961                         const struct YuvConstants* yuvconstants,
3962                         int width);
3963 void I400ToARGBRow_AVX2(const uint8_t* y_buf,
3964                         uint8_t* dst_argb,
3965                         const struct YuvConstants* yuvconstants,
3966                         int width);
3967 void I400ToARGBRow_NEON(const uint8_t* src_y,
3968                         uint8_t* dst_argb,
3969                         const struct YuvConstants* yuvconstants,
3970                         int width);
3971 void I400ToARGBRow_MSA(const uint8_t* src_y,
3972                        uint8_t* dst_argb,
3973                        const struct YuvConstants* yuvconstants,
3974                        int width);
3975 void I400ToARGBRow_LSX(const uint8_t* src_y,
3976                        uint8_t* dst_argb,
3977                        const struct YuvConstants* yuvconstants,
3978                        int width);
3979 void I400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
3980                             uint8_t* dst_ptr,
3981                             const struct YuvConstants* param,
3982                             int width);
3983 void I400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
3984                             uint8_t* dst_ptr,
3985                             const struct YuvConstants* param,
3986                             int width);
3987 void I400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
3988                             uint8_t* dst_ptr,
3989                             const struct YuvConstants* param,
3990                             int width);
3991 void I400ToARGBRow_Any_MSA(const uint8_t* src_ptr,
3992                            uint8_t* dst_ptr,
3993                            const struct YuvConstants* yuvconstants,
3994                            int width);
3995 void I400ToARGBRow_Any_LSX(const uint8_t* src_ptr,
3996                            uint8_t* dst_ptr,
3997                            const struct YuvConstants* yuvconstants,
3998                            int width);
3999 
4000 // ARGB preattenuated alpha blend.
4001 void ARGBBlendRow_SSSE3(const uint8_t* src_argb,
4002                         const uint8_t* src_argb1,
4003                         uint8_t* dst_argb,
4004                         int width);
4005 void ARGBBlendRow_NEON(const uint8_t* src_argb,
4006                        const uint8_t* src_argb1,
4007                        uint8_t* dst_argb,
4008                        int width);
4009 void ARGBBlendRow_MSA(const uint8_t* src_argb0,
4010                       const uint8_t* src_argb1,
4011                       uint8_t* dst_argb,
4012                       int width);
4013 void ARGBBlendRow_LSX(const uint8_t* src_argb0,
4014                       const uint8_t* src_argb1,
4015                       uint8_t* dst_argb,
4016                       int width);
4017 void ARGBBlendRow_C(const uint8_t* src_argb,
4018                     const uint8_t* src_argb1,
4019                     uint8_t* dst_argb,
4020                     int width);
4021 
4022 // Unattenuated planar alpha blend.
4023 void BlendPlaneRow_SSSE3(const uint8_t* src0,
4024                          const uint8_t* src1,
4025                          const uint8_t* alpha,
4026                          uint8_t* dst,
4027                          int width);
4028 void BlendPlaneRow_Any_SSSE3(const uint8_t* y_buf,
4029                              const uint8_t* u_buf,
4030                              const uint8_t* v_buf,
4031                              uint8_t* dst_ptr,
4032                              int width);
4033 void BlendPlaneRow_AVX2(const uint8_t* src0,
4034                         const uint8_t* src1,
4035                         const uint8_t* alpha,
4036                         uint8_t* dst,
4037                         int width);
4038 void BlendPlaneRow_Any_AVX2(const uint8_t* y_buf,
4039                             const uint8_t* u_buf,
4040                             const uint8_t* v_buf,
4041                             uint8_t* dst_ptr,
4042                             int width);
4043 void BlendPlaneRow_C(const uint8_t* src0,
4044                      const uint8_t* src1,
4045                      const uint8_t* alpha,
4046                      uint8_t* dst,
4047                      int width);
4048 
4049 // ARGB multiply images. Same API as Blend, but these require
4050 // pointer and width alignment for SSE2.
4051 void ARGBMultiplyRow_C(const uint8_t* src_argb,
4052                        const uint8_t* src_argb1,
4053                        uint8_t* dst_argb,
4054                        int width);
4055 void ARGBMultiplyRow_SSE2(const uint8_t* src_argb,
4056                           const uint8_t* src_argb1,
4057                           uint8_t* dst_argb,
4058                           int width);
4059 void ARGBMultiplyRow_Any_SSE2(const uint8_t* y_buf,
4060                               const uint8_t* uv_buf,
4061                               uint8_t* dst_ptr,
4062                               int width);
4063 void ARGBMultiplyRow_AVX2(const uint8_t* src_argb,
4064                           const uint8_t* src_argb1,
4065                           uint8_t* dst_argb,
4066                           int width);
4067 void ARGBMultiplyRow_Any_AVX2(const uint8_t* y_buf,
4068                               const uint8_t* uv_buf,
4069                               uint8_t* dst_ptr,
4070                               int width);
4071 void ARGBMultiplyRow_NEON(const uint8_t* src_argb,
4072                           const uint8_t* src_argb1,
4073                           uint8_t* dst_argb,
4074                           int width);
4075 void ARGBMultiplyRow_Any_NEON(const uint8_t* y_buf,
4076                               const uint8_t* uv_buf,
4077                               uint8_t* dst_ptr,
4078                               int width);
4079 void ARGBMultiplyRow_MSA(const uint8_t* src_argb0,
4080                          const uint8_t* src_argb1,
4081                          uint8_t* dst_argb,
4082                          int width);
4083 void ARGBMultiplyRow_Any_MSA(const uint8_t* y_buf,
4084                              const uint8_t* uv_buf,
4085                              uint8_t* dst_ptr,
4086                              int width);
4087 void ARGBMultiplyRow_LASX(const uint8_t* src_argb0,
4088                           const uint8_t* src_argb1,
4089                           uint8_t* dst_argb,
4090                           int width);
4091 void ARGBMultiplyRow_Any_LASX(const uint8_t* y_buf,
4092                               const uint8_t* uv_buf,
4093                               uint8_t* dst_ptr,
4094                               int width);
4095 
4096 // ARGB add images.
4097 void ARGBAddRow_C(const uint8_t* src_argb,
4098                   const uint8_t* src_argb1,
4099                   uint8_t* dst_argb,
4100                   int width);
4101 void ARGBAddRow_SSE2(const uint8_t* src_argb,
4102                      const uint8_t* src_argb1,
4103                      uint8_t* dst_argb,
4104                      int width);
4105 void ARGBAddRow_Any_SSE2(const uint8_t* y_buf,
4106                          const uint8_t* uv_buf,
4107                          uint8_t* dst_ptr,
4108                          int width);
4109 void ARGBAddRow_AVX2(const uint8_t* src_argb,
4110                      const uint8_t* src_argb1,
4111                      uint8_t* dst_argb,
4112                      int width);
4113 void ARGBAddRow_Any_AVX2(const uint8_t* y_buf,
4114                          const uint8_t* uv_buf,
4115                          uint8_t* dst_ptr,
4116                          int width);
4117 void ARGBAddRow_NEON(const uint8_t* src_argb,
4118                      const uint8_t* src_argb1,
4119                      uint8_t* dst_argb,
4120                      int width);
4121 void ARGBAddRow_Any_NEON(const uint8_t* y_buf,
4122                          const uint8_t* uv_buf,
4123                          uint8_t* dst_ptr,
4124                          int width);
4125 void ARGBAddRow_MSA(const uint8_t* src_argb0,
4126                     const uint8_t* src_argb1,
4127                     uint8_t* dst_argb,
4128                     int width);
4129 void ARGBAddRow_Any_MSA(const uint8_t* y_buf,
4130                         const uint8_t* uv_buf,
4131                         uint8_t* dst_ptr,
4132                         int width);
4133 void ARGBAddRow_LASX(const uint8_t* src_argb0,
4134                      const uint8_t* src_argb1,
4135                      uint8_t* dst_argb,
4136                      int width);
4137 void ARGBAddRow_Any_LASX(const uint8_t* y_buf,
4138                          const uint8_t* uv_buf,
4139                          uint8_t* dst_ptr,
4140                          int width);
4141 
4142 // ARGB subtract images. Same API as Blend, but these require
4143 // pointer and width alignment for SSE2.
4144 void ARGBSubtractRow_C(const uint8_t* src_argb,
4145                        const uint8_t* src_argb1,
4146                        uint8_t* dst_argb,
4147                        int width);
4148 void ARGBSubtractRow_SSE2(const uint8_t* src_argb,
4149                           const uint8_t* src_argb1,
4150                           uint8_t* dst_argb,
4151                           int width);
4152 void ARGBSubtractRow_Any_SSE2(const uint8_t* y_buf,
4153                               const uint8_t* uv_buf,
4154                               uint8_t* dst_ptr,
4155                               int width);
4156 void ARGBSubtractRow_AVX2(const uint8_t* src_argb,
4157                           const uint8_t* src_argb1,
4158                           uint8_t* dst_argb,
4159                           int width);
4160 void ARGBSubtractRow_Any_AVX2(const uint8_t* y_buf,
4161                               const uint8_t* uv_buf,
4162                               uint8_t* dst_ptr,
4163                               int width);
4164 void ARGBSubtractRow_NEON(const uint8_t* src_argb,
4165                           const uint8_t* src_argb1,
4166                           uint8_t* dst_argb,
4167                           int width);
4168 void ARGBSubtractRow_Any_NEON(const uint8_t* y_buf,
4169                               const uint8_t* uv_buf,
4170                               uint8_t* dst_ptr,
4171                               int width);
4172 void ARGBSubtractRow_MSA(const uint8_t* src_argb0,
4173                          const uint8_t* src_argb1,
4174                          uint8_t* dst_argb,
4175                          int width);
4176 void ARGBSubtractRow_Any_MSA(const uint8_t* y_buf,
4177                              const uint8_t* uv_buf,
4178                              uint8_t* dst_ptr,
4179                              int width);
4180 void ARGBSubtractRow_LASX(const uint8_t* src_argb0,
4181                           const uint8_t* src_argb1,
4182                           uint8_t* dst_argb,
4183                           int width);
4184 void ARGBSubtractRow_Any_LASX(const uint8_t* y_buf,
4185                               const uint8_t* uv_buf,
4186                               uint8_t* dst_ptr,
4187                               int width);
4188 
4189 void ARGBToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
4190                               uint8_t* dst_ptr,
4191                               int width);
4192 void ARGBToRAWRow_Any_SSSE3(const uint8_t* src_ptr,
4193                             uint8_t* dst_ptr,
4194                             int width);
4195 void ARGBToRGB565Row_Any_SSE2(const uint8_t* src_ptr,
4196                               uint8_t* dst_ptr,
4197                               int width);
4198 void ARGBToARGB1555Row_Any_SSE2(const uint8_t* src_ptr,
4199                                 uint8_t* dst_ptr,
4200                                 int width);
4201 void ARGBToARGB4444Row_Any_SSE2(const uint8_t* src_ptr,
4202                                 uint8_t* dst_ptr,
4203                                 int width);
4204 void ABGRToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
4205                              uint8_t* dst_ptr,
4206                              int width);
4207 void ARGBToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
4208                              uint8_t* dst_ptr,
4209                              int width);
4210 void ARGBToRAWRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4211 void ARGBToRGB24Row_Any_AVX2(const uint8_t* src_ptr,
4212                              uint8_t* dst_ptr,
4213                              int width);
4214 void ARGBToRGB24Row_Any_AVX512VBMI(const uint8_t* src_ptr,
4215                                    uint8_t* dst_ptr,
4216                                    int width);
4217 void ARGBToRGB565DitherRow_Any_SSE2(const uint8_t* src_ptr,
4218                                     uint8_t* dst_ptr,
4219                                     const uint32_t param,
4220                                     int width);
4221 void ARGBToRGB565DitherRow_Any_AVX2(const uint8_t* src_ptr,
4222                                     uint8_t* dst_ptr,
4223                                     const uint32_t param,
4224                                     int width);
4225 
4226 void ARGBToRGB565Row_Any_AVX2(const uint8_t* src_ptr,
4227                               uint8_t* dst_ptr,
4228                               int width);
4229 void ARGBToARGB1555Row_Any_AVX2(const uint8_t* src_ptr,
4230                                 uint8_t* dst_ptr,
4231                                 int width);
4232 void ARGBToARGB4444Row_Any_AVX2(const uint8_t* src_ptr,
4233                                 uint8_t* dst_ptr,
4234                                 int width);
4235 void ABGRToAR30Row_Any_AVX2(const uint8_t* src_ptr,
4236                             uint8_t* dst_ptr,
4237                             int width);
4238 void ARGBToAR30Row_Any_AVX2(const uint8_t* src_ptr,
4239                             uint8_t* dst_ptr,
4240                             int width);
4241 
4242 void ARGBToRGB24Row_Any_NEON(const uint8_t* src_ptr,
4243                              uint8_t* dst_ptr,
4244                              int width);
4245 void ARGBToRAWRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4246 void ARGBToRGB565Row_Any_NEON(const uint8_t* src_ptr,
4247                               uint8_t* dst_ptr,
4248                               int width);
4249 void ARGBToARGB1555Row_Any_NEON(const uint8_t* src_ptr,
4250                                 uint8_t* dst_ptr,
4251                                 int width);
4252 void ARGBToARGB4444Row_Any_NEON(const uint8_t* src_ptr,
4253                                 uint8_t* dst_ptr,
4254                                 int width);
4255 void ARGBToRGB565DitherRow_Any_NEON(const uint8_t* src_ptr,
4256                                     uint8_t* dst_ptr,
4257                                     const uint32_t param,
4258                                     int width);
4259 void ARGBToRGB24Row_Any_MSA(const uint8_t* src_ptr,
4260                             uint8_t* dst_ptr,
4261                             int width);
4262 void ARGBToRAWRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4263 void ARGBToRGB565Row_Any_MSA(const uint8_t* src_ptr,
4264                              uint8_t* dst_ptr,
4265                              int width);
4266 void ARGBToARGB1555Row_Any_MSA(const uint8_t* src_ptr,
4267                                uint8_t* dst_ptr,
4268                                int width);
4269 void ARGBToARGB4444Row_Any_MSA(const uint8_t* src_ptr,
4270                                uint8_t* dst_ptr,
4271                                int width);
4272 void ARGBToRGB565DitherRow_Any_MSA(const uint8_t* src_ptr,
4273                                    uint8_t* dst_ptr,
4274                                    const uint32_t param,
4275                                    int width);
4276 void ARGBToRGB565DitherRow_Any_LASX(const uint8_t* src_ptr,
4277                                     uint8_t* dst_ptr,
4278                                     const uint32_t param,
4279                                     int width);
4280 
4281 void ARGBToRGB24Row_Any_LASX(const uint8_t* src_ptr,
4282                              uint8_t* dst_ptr,
4283                              int width);
4284 void ARGBToRAWRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4285 void ARGBToRGB565Row_Any_LASX(const uint8_t* src_ptr,
4286                               uint8_t* dst_ptr,
4287                               int width);
4288 void ARGBToARGB1555Row_Any_LASX(const uint8_t* src_ptr,
4289                                 uint8_t* dst_ptr,
4290                                 int width);
4291 void ARGBToARGB4444Row_Any_LASX(const uint8_t* src_ptr,
4292                                 uint8_t* dst_ptr,
4293                                 int width);
4294 
4295 void I444ToARGBRow_Any_NEON(const uint8_t* y_buf,
4296                             const uint8_t* u_buf,
4297                             const uint8_t* v_buf,
4298                             uint8_t* dst_ptr,
4299                             const struct YuvConstants* yuvconstants,
4300                             int width);
4301 void I422ToARGBRow_Any_NEON(const uint8_t* y_buf,
4302                             const uint8_t* u_buf,
4303                             const uint8_t* v_buf,
4304                             uint8_t* dst_ptr,
4305                             const struct YuvConstants* yuvconstants,
4306                             int width);
4307 void I444AlphaToARGBRow_Any_NEON(const uint8_t* y_buf,
4308                                  const uint8_t* u_buf,
4309                                  const uint8_t* v_buf,
4310                                  const uint8_t* a_buf,
4311                                  uint8_t* dst_ptr,
4312                                  const struct YuvConstants* yuvconstants,
4313                                  int width);
4314 void I422AlphaToARGBRow_Any_NEON(const uint8_t* y_buf,
4315                                  const uint8_t* u_buf,
4316                                  const uint8_t* v_buf,
4317                                  const uint8_t* a_buf,
4318                                  uint8_t* dst_ptr,
4319                                  const struct YuvConstants* yuvconstants,
4320                                  int width);
4321 void I422ToRGBARow_Any_NEON(const uint8_t* y_buf,
4322                             const uint8_t* u_buf,
4323                             const uint8_t* v_buf,
4324                             uint8_t* dst_ptr,
4325                             const struct YuvConstants* yuvconstants,
4326                             int width);
4327 void I422ToRGB24Row_Any_NEON(const uint8_t* y_buf,
4328                              const uint8_t* u_buf,
4329                              const uint8_t* v_buf,
4330                              uint8_t* dst_ptr,
4331                              const struct YuvConstants* yuvconstants,
4332                              int width);
4333 void I422ToARGB4444Row_Any_NEON(const uint8_t* y_buf,
4334                                 const uint8_t* u_buf,
4335                                 const uint8_t* v_buf,
4336                                 uint8_t* dst_ptr,
4337                                 const struct YuvConstants* yuvconstants,
4338                                 int width);
4339 void I422ToARGB1555Row_Any_NEON(const uint8_t* y_buf,
4340                                 const uint8_t* u_buf,
4341                                 const uint8_t* v_buf,
4342                                 uint8_t* dst_ptr,
4343                                 const struct YuvConstants* yuvconstants,
4344                                 int width);
4345 void I422ToRGB565Row_Any_NEON(const uint8_t* y_buf,
4346                               const uint8_t* u_buf,
4347                               const uint8_t* v_buf,
4348                               uint8_t* dst_ptr,
4349                               const struct YuvConstants* yuvconstants,
4350                               int width);
4351 void NV12ToARGBRow_Any_NEON(const uint8_t* y_buf,
4352                             const uint8_t* uv_buf,
4353                             uint8_t* dst_ptr,
4354                             const struct YuvConstants* yuvconstants,
4355                             int width);
4356 void NV21ToARGBRow_Any_NEON(const uint8_t* y_buf,
4357                             const uint8_t* uv_buf,
4358                             uint8_t* dst_ptr,
4359                             const struct YuvConstants* yuvconstants,
4360                             int width);
4361 void NV12ToRGB24Row_Any_NEON(const uint8_t* y_buf,
4362                              const uint8_t* uv_buf,
4363                              uint8_t* dst_ptr,
4364                              const struct YuvConstants* yuvconstants,
4365                              int width);
4366 void NV21ToRGB24Row_Any_NEON(const uint8_t* y_buf,
4367                              const uint8_t* uv_buf,
4368                              uint8_t* dst_ptr,
4369                              const struct YuvConstants* yuvconstants,
4370                              int width);
4371 void NV21ToYUV24Row_Any_NEON(const uint8_t* y_buf,
4372                              const uint8_t* uv_buf,
4373                              uint8_t* dst_ptr,
4374                              int width);
4375 void NV12ToRGB565Row_Any_NEON(const uint8_t* y_buf,
4376                               const uint8_t* uv_buf,
4377                               uint8_t* dst_ptr,
4378                               const struct YuvConstants* yuvconstants,
4379                               int width);
4380 void YUY2ToARGBRow_Any_NEON(const uint8_t* src_ptr,
4381                             uint8_t* dst_ptr,
4382                             const struct YuvConstants* yuvconstants,
4383                             int width);
4384 void UYVYToARGBRow_Any_NEON(const uint8_t* src_ptr,
4385                             uint8_t* dst_ptr,
4386                             const struct YuvConstants* yuvconstants,
4387                             int width);
4388 void P210ToARGBRow_NEON(const uint16_t* y_buf,
4389                         const uint16_t* uv_buf,
4390                         uint8_t* dst_argb,
4391                         const struct YuvConstants* yuvconstants,
4392                         int width);
4393 void P410ToARGBRow_NEON(const uint16_t* y_buf,
4394                         const uint16_t* uv_buf,
4395                         uint8_t* dst_argb,
4396                         const struct YuvConstants* yuvconstants,
4397                         int width);
4398 void P210ToAR30Row_NEON(const uint16_t* y_buf,
4399                         const uint16_t* uv_buf,
4400                         uint8_t* dst_ar30,
4401                         const struct YuvConstants* yuvconstants,
4402                         int width);
4403 void P410ToAR30Row_NEON(const uint16_t* y_buf,
4404                         const uint16_t* uv_buf,
4405                         uint8_t* dst_ar30,
4406                         const struct YuvConstants* yuvconstants,
4407                         int width);
4408 void P210ToARGBRow_Any_NEON(const uint16_t* y_buf,
4409                             const uint16_t* uv_buf,
4410                             uint8_t* dst_argb,
4411                             const struct YuvConstants* yuvconstants,
4412                             int width);
4413 void P410ToARGBRow_Any_NEON(const uint16_t* y_buf,
4414                             const uint16_t* uv_buf,
4415                             uint8_t* dst_argb,
4416                             const struct YuvConstants* yuvconstants,
4417                             int width);
4418 void P210ToAR30Row_Any_NEON(const uint16_t* y_buf,
4419                             const uint16_t* uv_buf,
4420                             uint8_t* dst_ar30,
4421                             const struct YuvConstants* yuvconstants,
4422                             int width);
4423 void P410ToAR30Row_Any_NEON(const uint16_t* y_buf,
4424                             const uint16_t* uv_buf,
4425                             uint8_t* dst_ar30,
4426                             const struct YuvConstants* yuvconstants,
4427                             int width);
4428 void I444ToARGBRow_Any_MSA(const uint8_t* y_buf,
4429                            const uint8_t* u_buf,
4430                            const uint8_t* v_buf,
4431                            uint8_t* dst_ptr,
4432                            const struct YuvConstants* yuvconstants,
4433                            int width);
4434 void I444ToARGBRow_Any_LSX(const uint8_t* y_buf,
4435                            const uint8_t* u_buf,
4436                            const uint8_t* v_buf,
4437                            uint8_t* dst_ptr,
4438                            const struct YuvConstants* yuvconstants,
4439                            int width);
4440 void I422ToARGBRow_Any_MSA(const uint8_t* y_buf,
4441                            const uint8_t* u_buf,
4442                            const uint8_t* v_buf,
4443                            uint8_t* dst_ptr,
4444                            const struct YuvConstants* yuvconstants,
4445                            int width);
4446 void I422ToARGBRow_Any_LASX(const uint8_t* y_buf,
4447                             const uint8_t* u_buf,
4448                             const uint8_t* v_buf,
4449                             uint8_t* dst_ptr,
4450                             const struct YuvConstants* yuvconstants,
4451                             int width);
4452 void I422ToRGBARow_Any_MSA(const uint8_t* y_buf,
4453                            const uint8_t* u_buf,
4454                            const uint8_t* v_buf,
4455                            uint8_t* dst_ptr,
4456                            const struct YuvConstants* yuvconstants,
4457                            int width);
4458 void I422ToRGBARow_Any_LASX(const uint8_t* y_buf,
4459                             const uint8_t* u_buf,
4460                             const uint8_t* v_buf,
4461                             uint8_t* dst_ptr,
4462                             const struct YuvConstants* yuvconstants,
4463                             int width);
4464 void I422AlphaToARGBRow_Any_MSA(const uint8_t* y_buf,
4465                                 const uint8_t* u_buf,
4466                                 const uint8_t* v_buf,
4467                                 const uint8_t* a_buf,
4468                                 uint8_t* dst_ptr,
4469                                 const struct YuvConstants* yuvconstants,
4470                                 int width);
4471 void I422AlphaToARGBRow_Any_LASX(const uint8_t* y_buf,
4472                                  const uint8_t* u_buf,
4473                                  const uint8_t* v_buf,
4474                                  const uint8_t* a_buf,
4475                                  uint8_t* dst_ptr,
4476                                  const struct YuvConstants* yuvconstants,
4477                                  int width);
4478 void I422ToRGB24Row_Any_MSA(const uint8_t* y_buf,
4479                             const uint8_t* u_buf,
4480                             const uint8_t* v_buf,
4481                             uint8_t* dst_ptr,
4482                             const struct YuvConstants* yuvconstants,
4483                             int width);
4484 void I422ToRGB24Row_Any_LASX(const uint8_t* y_buf,
4485                              const uint8_t* u_buf,
4486                              const uint8_t* v_buf,
4487                              uint8_t* dst_ptr,
4488                              const struct YuvConstants* yuvconstants,
4489                              int width);
4490 void I422ToRGB565Row_Any_MSA(const uint8_t* y_buf,
4491                              const uint8_t* u_buf,
4492                              const uint8_t* v_buf,
4493                              uint8_t* dst_ptr,
4494                              const struct YuvConstants* yuvconstants,
4495                              int width);
4496 void I422ToRGB565Row_Any_LASX(const uint8_t* y_buf,
4497                               const uint8_t* u_buf,
4498                               const uint8_t* v_buf,
4499                               uint8_t* dst_ptr,
4500                               const struct YuvConstants* yuvconstants,
4501                               int width);
4502 void I422ToARGB4444Row_Any_MSA(const uint8_t* y_buf,
4503                                const uint8_t* u_buf,
4504                                const uint8_t* v_buf,
4505                                uint8_t* dst_ptr,
4506                                const struct YuvConstants* yuvconstants,
4507                                int width);
4508 void I422ToARGB4444Row_Any_LASX(const uint8_t* y_buf,
4509                                 const uint8_t* u_buf,
4510                                 const uint8_t* v_buf,
4511                                 uint8_t* dst_ptr,
4512                                 const struct YuvConstants* yuvconstants,
4513                                 int width);
4514 void I422ToARGB1555Row_Any_MSA(const uint8_t* y_buf,
4515                                const uint8_t* u_buf,
4516                                const uint8_t* v_buf,
4517                                uint8_t* dst_ptr,
4518                                const struct YuvConstants* yuvconstants,
4519                                int width);
4520 void I422ToARGB1555Row_Any_LASX(const uint8_t* y_buf,
4521                                 const uint8_t* u_buf,
4522                                 const uint8_t* v_buf,
4523                                 uint8_t* dst_ptr,
4524                                 const struct YuvConstants* yuvconstants,
4525                                 int width);
4526 void NV12ToARGBRow_Any_MSA(const uint8_t* y_buf,
4527                            const uint8_t* uv_buf,
4528                            uint8_t* dst_ptr,
4529                            const struct YuvConstants* yuvconstants,
4530                            int width);
4531 void NV12ToRGB565Row_Any_MSA(const uint8_t* y_buf,
4532                              const uint8_t* uv_buf,
4533                              uint8_t* dst_ptr,
4534                              const struct YuvConstants* yuvconstants,
4535                              int width);
4536 void NV21ToARGBRow_Any_MSA(const uint8_t* y_buf,
4537                            const uint8_t* uv_buf,
4538                            uint8_t* dst_ptr,
4539                            const struct YuvConstants* yuvconstants,
4540                            int width);
4541 void YUY2ToARGBRow_Any_MSA(const uint8_t* src_ptr,
4542                            uint8_t* dst_ptr,
4543                            const struct YuvConstants* yuvconstants,
4544                            int width);
4545 void UYVYToARGBRow_Any_MSA(const uint8_t* src_ptr,
4546                            uint8_t* dst_ptr,
4547                            const struct YuvConstants* yuvconstants,
4548                            int width);
4549 
4550 void NV12ToARGBRow_Any_LSX(const uint8_t* y_buf,
4551                            const uint8_t* uv_buf,
4552                            uint8_t* dst_ptr,
4553                            const struct YuvConstants* yuvconstants,
4554                            int width);
4555 void NV12ToARGBRow_Any_LASX(const uint8_t* y_buf,
4556                             const uint8_t* uv_buf,
4557                             uint8_t* dst_ptr,
4558                             const struct YuvConstants* yuvconstants,
4559                             int width);
4560 void NV12ToRGB565Row_Any_LSX(const uint8_t* y_buf,
4561                              const uint8_t* uv_buf,
4562                              uint8_t* dst_ptr,
4563                              const struct YuvConstants* yuvconstants,
4564                              int width);
4565 void NV12ToRGB565Row_Any_LASX(const uint8_t* y_buf,
4566                               const uint8_t* uv_buf,
4567                               uint8_t* dst_ptr,
4568                               const struct YuvConstants* yuvconstants,
4569                               int width);
4570 void NV21ToARGBRow_Any_LSX(const uint8_t* y_buf,
4571                            const uint8_t* uv_buf,
4572                            uint8_t* dst_ptr,
4573                            const struct YuvConstants* yuvconstants,
4574                            int width);
4575 void NV21ToARGBRow_Any_LASX(const uint8_t* y_buf,
4576                             const uint8_t* uv_buf,
4577                             uint8_t* dst_ptr,
4578                             const struct YuvConstants* yuvconstants,
4579                             int width);
4580 void YUY2ToARGBRow_Any_LSX(const uint8_t* src_ptr,
4581                            uint8_t* dst_ptr,
4582                            const struct YuvConstants* yuvconstants,
4583                            int width);
4584 void UYVYToARGBRow_Any_LSX(const uint8_t* src_ptr,
4585                            uint8_t* dst_ptr,
4586                            const struct YuvConstants* yuvconstants,
4587                            int width);
4588 
4589 void YUY2ToYRow_AVX2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4590 void YUY2ToUVRow_AVX2(const uint8_t* src_yuy2,
4591                       int stride_yuy2,
4592                       uint8_t* dst_u,
4593                       uint8_t* dst_v,
4594                       int width);
4595 void YUY2ToUV422Row_AVX2(const uint8_t* src_yuy2,
4596                          uint8_t* dst_u,
4597                          uint8_t* dst_v,
4598                          int width);
4599 void YUY2ToYRow_SSE2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4600 void YUY2ToUVRow_SSE2(const uint8_t* src_yuy2,
4601                       int stride_yuy2,
4602                       uint8_t* dst_u,
4603                       uint8_t* dst_v,
4604                       int width);
4605 void YUY2ToUV422Row_SSE2(const uint8_t* src_yuy2,
4606                          uint8_t* dst_u,
4607                          uint8_t* dst_v,
4608                          int width);
4609 void YUY2ToYRow_NEON(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4610 void YUY2ToUVRow_NEON(const uint8_t* src_yuy2,
4611                       int stride_yuy2,
4612                       uint8_t* dst_u,
4613                       uint8_t* dst_v,
4614                       int width);
4615 void YUY2ToUV422Row_NEON(const uint8_t* src_yuy2,
4616                          uint8_t* dst_u,
4617                          uint8_t* dst_v,
4618                          int width);
4619 void YUY2ToYRow_MSA(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4620 void YUY2ToYRow_LASX(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4621 void YUY2ToUVRow_MSA(const uint8_t* src_yuy2,
4622                      int src_stride_yuy2,
4623                      uint8_t* dst_u,
4624                      uint8_t* dst_v,
4625                      int width);
4626 void YUY2ToUVRow_LASX(const uint8_t* src_yuy2,
4627                       int src_stride_yuy2,
4628                       uint8_t* dst_u,
4629                       uint8_t* dst_v,
4630                       int width);
4631 void YUY2ToUV422Row_MSA(const uint8_t* src_yuy2,
4632                         uint8_t* dst_u,
4633                         uint8_t* dst_v,
4634                         int width);
4635 void YUY2ToUV422Row_LASX(const uint8_t* src_yuy2,
4636                          uint8_t* dst_u,
4637                          uint8_t* dst_v,
4638                          int width);
4639 void YUY2ToYRow_C(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
4640 void YUY2ToUVRow_C(const uint8_t* src_yuy2,
4641                    int src_stride_yuy2,
4642                    uint8_t* dst_u,
4643                    uint8_t* dst_v,
4644                    int width);
4645 void YUY2ToUV422Row_C(const uint8_t* src_yuy2,
4646                       uint8_t* dst_u,
4647                       uint8_t* dst_v,
4648                       int width);
4649 void YUY2ToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4650 void YUY2ToUVRow_Any_AVX2(const uint8_t* src_ptr,
4651                           int src_stride,
4652                           uint8_t* dst_u,
4653                           uint8_t* dst_v,
4654                           int width);
4655 void YUY2ToUV422Row_Any_AVX2(const uint8_t* src_ptr,
4656                              uint8_t* dst_u,
4657                              uint8_t* dst_v,
4658                              int width);
4659 void YUY2ToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4660 void YUY2ToUVRow_Any_SSE2(const uint8_t* src_ptr,
4661                           int src_stride,
4662                           uint8_t* dst_u,
4663                           uint8_t* dst_v,
4664                           int width);
4665 void YUY2ToUV422Row_Any_SSE2(const uint8_t* src_ptr,
4666                              uint8_t* dst_u,
4667                              uint8_t* dst_v,
4668                              int width);
4669 void YUY2ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4670 void YUY2ToUVRow_Any_NEON(const uint8_t* src_ptr,
4671                           int src_stride,
4672                           uint8_t* dst_u,
4673                           uint8_t* dst_v,
4674                           int width);
4675 void YUY2ToUV422Row_Any_NEON(const uint8_t* src_ptr,
4676                              uint8_t* dst_u,
4677                              uint8_t* dst_v,
4678                              int width);
4679 void YUY2ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4680 void YUY2ToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4681 void YUY2ToUVRow_Any_MSA(const uint8_t* src_ptr,
4682                          int src_stride_ptr,
4683                          uint8_t* dst_u,
4684                          uint8_t* dst_v,
4685                          int width);
4686 void YUY2ToUVRow_Any_LASX(const uint8_t* src_ptr,
4687                           int src_stride_ptr,
4688                           uint8_t* dst_u,
4689                           uint8_t* dst_v,
4690                           int width);
4691 void YUY2ToUV422Row_Any_MSA(const uint8_t* src_ptr,
4692                             uint8_t* dst_u,
4693                             uint8_t* dst_v,
4694                             int width);
4695 void YUY2ToUV422Row_Any_LASX(const uint8_t* src_ptr,
4696                              uint8_t* dst_u,
4697                              uint8_t* dst_v,
4698                              int width);
4699 void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4700 void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
4701                       int stride_uyvy,
4702                       uint8_t* dst_u,
4703                       uint8_t* dst_v,
4704                       int width);
4705 void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
4706                          uint8_t* dst_u,
4707                          uint8_t* dst_v,
4708                          int width);
4709 void UYVYToYRow_SSE2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4710 void UYVYToUVRow_SSE2(const uint8_t* src_uyvy,
4711                       int stride_uyvy,
4712                       uint8_t* dst_u,
4713                       uint8_t* dst_v,
4714                       int width);
4715 void UYVYToUV422Row_SSE2(const uint8_t* src_uyvy,
4716                          uint8_t* dst_u,
4717                          uint8_t* dst_v,
4718                          int width);
4719 void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4720 void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
4721                       int stride_uyvy,
4722                       uint8_t* dst_u,
4723                       uint8_t* dst_v,
4724                       int width);
4725 void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
4726                          uint8_t* dst_u,
4727                          uint8_t* dst_v,
4728                          int width);
4729 void UYVYToYRow_NEON(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4730 void UYVYToUVRow_NEON(const uint8_t* src_uyvy,
4731                       int stride_uyvy,
4732                       uint8_t* dst_u,
4733                       uint8_t* dst_v,
4734                       int width);
4735 void UYVYToUV422Row_NEON(const uint8_t* src_uyvy,
4736                          uint8_t* dst_u,
4737                          uint8_t* dst_v,
4738                          int width);
4739 void UYVYToYRow_MSA(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4740 void UYVYToYRow_LASX(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4741 void UYVYToUVRow_MSA(const uint8_t* src_uyvy,
4742                      int src_stride_uyvy,
4743                      uint8_t* dst_u,
4744                      uint8_t* dst_v,
4745                      int width);
4746 void UYVYToUVRow_LASX(const uint8_t* src_uyvy,
4747                       int src_stride_uyvy,
4748                       uint8_t* dst_u,
4749                       uint8_t* dst_v,
4750                       int width);
4751 void UYVYToUV422Row_MSA(const uint8_t* src_uyvy,
4752                         uint8_t* dst_u,
4753                         uint8_t* dst_v,
4754                         int width);
4755 void UYVYToUV422Row_LASX(const uint8_t* src_uyvy,
4756                          uint8_t* dst_u,
4757                          uint8_t* dst_v,
4758                          int width);
4759 
4760 void UYVYToYRow_C(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
4761 void UYVYToUVRow_C(const uint8_t* src_uyvy,
4762                    int src_stride_uyvy,
4763                    uint8_t* dst_u,
4764                    uint8_t* dst_v,
4765                    int width);
4766 void UYVYToUV422Row_C(const uint8_t* src_uyvy,
4767                       uint8_t* dst_u,
4768                       uint8_t* dst_v,
4769                       int width);
4770 void UYVYToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4771 void UYVYToUVRow_Any_AVX2(const uint8_t* src_ptr,
4772                           int src_stride,
4773                           uint8_t* dst_u,
4774                           uint8_t* dst_v,
4775                           int width);
4776 void UYVYToUV422Row_Any_AVX2(const uint8_t* src_ptr,
4777                              uint8_t* dst_u,
4778                              uint8_t* dst_v,
4779                              int width);
4780 void UYVYToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4781 void UYVYToUVRow_Any_SSE2(const uint8_t* src_ptr,
4782                           int src_stride,
4783                           uint8_t* dst_u,
4784                           uint8_t* dst_v,
4785                           int width);
4786 void UYVYToUV422Row_Any_SSE2(const uint8_t* src_ptr,
4787                              uint8_t* dst_u,
4788                              uint8_t* dst_v,
4789                              int width);
4790 void UYVYToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4791 void UYVYToUVRow_Any_NEON(const uint8_t* src_ptr,
4792                           int src_stride,
4793                           uint8_t* dst_u,
4794                           uint8_t* dst_v,
4795                           int width);
4796 void UYVYToUV422Row_Any_NEON(const uint8_t* src_ptr,
4797                              uint8_t* dst_u,
4798                              uint8_t* dst_v,
4799                              int width);
4800 void UYVYToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4801 void UYVYToYRow_Any_LASX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4802 void UYVYToUVRow_Any_MSA(const uint8_t* src_ptr,
4803                          int src_stride_ptr,
4804                          uint8_t* dst_u,
4805                          uint8_t* dst_v,
4806                          int width);
4807 void UYVYToUVRow_Any_LASX(const uint8_t* src_ptr,
4808                           int src_stride_ptr,
4809                           uint8_t* dst_u,
4810                           uint8_t* dst_v,
4811                           int width);
4812 void UYVYToUV422Row_Any_MSA(const uint8_t* src_ptr,
4813                             uint8_t* dst_u,
4814                             uint8_t* dst_v,
4815                             int width);
4816 void UYVYToUV422Row_Any_LASX(const uint8_t* src_ptr,
4817                              uint8_t* dst_u,
4818                              uint8_t* dst_v,
4819                              int width);
4820 void SwapUVRow_C(const uint8_t* src_uv, uint8_t* dst_vu, int width);
4821 void SwapUVRow_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width);
4822 void SwapUVRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4823 void SwapUVRow_SSSE3(const uint8_t* src_uv, uint8_t* dst_vu, int width);
4824 void SwapUVRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4825 void SwapUVRow_AVX2(const uint8_t* src_uv, uint8_t* dst_vu, int width);
4826 void SwapUVRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4827 void AYUVToYRow_C(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
4828 void AYUVToUVRow_C(const uint8_t* src_ayuv,
4829                    int src_stride_ayuv,
4830                    uint8_t* dst_uv,
4831                    int width);
4832 void AYUVToVURow_C(const uint8_t* src_ayuv,
4833                    int src_stride_ayuv,
4834                    uint8_t* dst_vu,
4835                    int width);
4836 void AYUVToYRow_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
4837 void AYUVToUVRow_NEON(const uint8_t* src_ayuv,
4838                       int src_stride_ayuv,
4839                       uint8_t* dst_uv,
4840                       int width);
4841 void AYUVToVURow_NEON(const uint8_t* src_ayuv,
4842                       int src_stride_ayuv,
4843                       uint8_t* dst_vu,
4844                       int width);
4845 void AYUVToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
4846 void AYUVToUVRow_Any_NEON(const uint8_t* src_ptr,
4847                           int src_stride,
4848                           uint8_t* dst_vu,
4849                           int width);
4850 void AYUVToVURow_Any_NEON(const uint8_t* src_ptr,
4851                           int src_stride,
4852                           uint8_t* dst_vu,
4853                           int width);
4854 
4855 void I422ToYUY2Row_C(const uint8_t* src_y,
4856                      const uint8_t* src_u,
4857                      const uint8_t* src_v,
4858                      uint8_t* dst_frame,
4859                      int width);
4860 void I422ToUYVYRow_C(const uint8_t* src_y,
4861                      const uint8_t* src_u,
4862                      const uint8_t* src_v,
4863                      uint8_t* dst_frame,
4864                      int width);
4865 void I422ToYUY2Row_SSE2(const uint8_t* src_y,
4866                         const uint8_t* src_u,
4867                         const uint8_t* src_v,
4868                         uint8_t* dst_yuy2,
4869                         int width);
4870 void I422ToUYVYRow_SSE2(const uint8_t* src_y,
4871                         const uint8_t* src_u,
4872                         const uint8_t* src_v,
4873                         uint8_t* dst_uyvy,
4874                         int width);
4875 void I422ToYUY2Row_Any_SSE2(const uint8_t* y_buf,
4876                             const uint8_t* u_buf,
4877                             const uint8_t* v_buf,
4878                             uint8_t* dst_ptr,
4879                             int width);
4880 void I422ToUYVYRow_Any_SSE2(const uint8_t* y_buf,
4881                             const uint8_t* u_buf,
4882                             const uint8_t* v_buf,
4883                             uint8_t* dst_ptr,
4884                             int width);
4885 void I422ToYUY2Row_AVX2(const uint8_t* src_y,
4886                         const uint8_t* src_u,
4887                         const uint8_t* src_v,
4888                         uint8_t* dst_yuy2,
4889                         int width);
4890 void I422ToUYVYRow_AVX2(const uint8_t* src_y,
4891                         const uint8_t* src_u,
4892                         const uint8_t* src_v,
4893                         uint8_t* dst_uyvy,
4894                         int width);
4895 void I422ToYUY2Row_Any_AVX2(const uint8_t* y_buf,
4896                             const uint8_t* u_buf,
4897                             const uint8_t* v_buf,
4898                             uint8_t* dst_ptr,
4899                             int width);
4900 void I422ToUYVYRow_Any_AVX2(const uint8_t* y_buf,
4901                             const uint8_t* u_buf,
4902                             const uint8_t* v_buf,
4903                             uint8_t* dst_ptr,
4904                             int width);
4905 void I422ToYUY2Row_NEON(const uint8_t* src_y,
4906                         const uint8_t* src_u,
4907                         const uint8_t* src_v,
4908                         uint8_t* dst_yuy2,
4909                         int width);
4910 void I422ToUYVYRow_NEON(const uint8_t* src_y,
4911                         const uint8_t* src_u,
4912                         const uint8_t* src_v,
4913                         uint8_t* dst_uyvy,
4914                         int width);
4915 void I422ToYUY2Row_Any_NEON(const uint8_t* y_buf,
4916                             const uint8_t* u_buf,
4917                             const uint8_t* v_buf,
4918                             uint8_t* dst_ptr,
4919                             int width);
4920 void I422ToUYVYRow_Any_NEON(const uint8_t* y_buf,
4921                             const uint8_t* u_buf,
4922                             const uint8_t* v_buf,
4923                             uint8_t* dst_ptr,
4924                             int width);
4925 void I422ToYUY2Row_MSA(const uint8_t* src_y,
4926                        const uint8_t* src_u,
4927                        const uint8_t* src_v,
4928                        uint8_t* dst_yuy2,
4929                        int width);
4930 void I422ToYUY2Row_LASX(const uint8_t* src_y,
4931                         const uint8_t* src_u,
4932                         const uint8_t* src_v,
4933                         uint8_t* dst_yuy2,
4934                         int width);
4935 void I422ToUYVYRow_MSA(const uint8_t* src_y,
4936                        const uint8_t* src_u,
4937                        const uint8_t* src_v,
4938                        uint8_t* dst_uyvy,
4939                        int width);
4940 void I422ToUYVYRow_LASX(const uint8_t* src_y,
4941                         const uint8_t* src_u,
4942                         const uint8_t* src_v,
4943                         uint8_t* dst_uyvy,
4944                         int width);
4945 void I422ToYUY2Row_Any_MSA(const uint8_t* y_buf,
4946                            const uint8_t* u_buf,
4947                            const uint8_t* v_buf,
4948                            uint8_t* dst_ptr,
4949                            int width);
4950 void I422ToYUY2Row_Any_LASX(const uint8_t* y_buf,
4951                             const uint8_t* u_buf,
4952                             const uint8_t* v_buf,
4953                             uint8_t* dst_ptr,
4954                             int width);
4955 void I422ToUYVYRow_Any_MSA(const uint8_t* y_buf,
4956                            const uint8_t* u_buf,
4957                            const uint8_t* v_buf,
4958                            uint8_t* dst_ptr,
4959                            int width);
4960 void I422ToUYVYRow_Any_LASX(const uint8_t* y_buf,
4961                             const uint8_t* u_buf,
4962                             const uint8_t* v_buf,
4963                             uint8_t* dst_ptr,
4964                             int width);
4965 
4966 // Effects related row functions.
4967 void ARGBAttenuateRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
4968 void ARGBAttenuateRow_SSSE3(const uint8_t* src_argb,
4969                             uint8_t* dst_argb,
4970                             int width);
4971 void ARGBAttenuateRow_AVX2(const uint8_t* src_argb,
4972                            uint8_t* dst_argb,
4973                            int width);
4974 void ARGBAttenuateRow_NEON(const uint8_t* src_argb,
4975                            uint8_t* dst_argb,
4976                            int width);
4977 void ARGBAttenuateRow_MSA(const uint8_t* src_argb,
4978                           uint8_t* dst_argb,
4979                           int width);
4980 void ARGBAttenuateRow_LASX(const uint8_t* src_argb,
4981                            uint8_t* dst_argb,
4982                            int width);
4983 void ARGBAttenuateRow_Any_SSSE3(const uint8_t* src_ptr,
4984                                 uint8_t* dst_ptr,
4985                                 int width);
4986 void ARGBAttenuateRow_Any_AVX2(const uint8_t* src_ptr,
4987                                uint8_t* dst_ptr,
4988                                int width);
4989 void ARGBAttenuateRow_Any_NEON(const uint8_t* src_ptr,
4990                                uint8_t* dst_ptr,
4991                                int width);
4992 void ARGBAttenuateRow_Any_MSA(const uint8_t* src_ptr,
4993                               uint8_t* dst_ptr,
4994                               int width);
4995 void ARGBAttenuateRow_Any_LASX(const uint8_t* src_ptr,
4996                                uint8_t* dst_ptr,
4997                                int width);
4998 
4999 // Inverse table for unattenuate, shared by C and SSE2.
5000 extern const uint32_t fixed_invtbl8[256];
5001 void ARGBUnattenuateRow_C(const uint8_t* src_argb,
5002                           uint8_t* dst_argb,
5003                           int width);
5004 void ARGBUnattenuateRow_SSE2(const uint8_t* src_argb,
5005                              uint8_t* dst_argb,
5006                              int width);
5007 void ARGBUnattenuateRow_AVX2(const uint8_t* src_argb,
5008                              uint8_t* dst_argb,
5009                              int width);
5010 void ARGBUnattenuateRow_Any_SSE2(const uint8_t* src_ptr,
5011                                  uint8_t* dst_ptr,
5012                                  int width);
5013 void ARGBUnattenuateRow_Any_AVX2(const uint8_t* src_ptr,
5014                                  uint8_t* dst_ptr,
5015                                  int width);
5016 
5017 void ARGBGrayRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
5018 void ARGBGrayRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_argb, int width);
5019 void ARGBGrayRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width);
5020 void ARGBGrayRow_MSA(const uint8_t* src_argb, uint8_t* dst_argb, int width);
5021 void ARGBGrayRow_LASX(const uint8_t* src_argb, uint8_t* dst_argb, int width);
5022 
5023 void ARGBSepiaRow_C(uint8_t* dst_argb, int width);
5024 void ARGBSepiaRow_SSSE3(uint8_t* dst_argb, int width);
5025 void ARGBSepiaRow_NEON(uint8_t* dst_argb, int width);
5026 void ARGBSepiaRow_MSA(uint8_t* dst_argb, int width);
5027 void ARGBSepiaRow_LASX(uint8_t* dst_argb, int width);
5028 
5029 void ARGBColorMatrixRow_C(const uint8_t* src_argb,
5030                           uint8_t* dst_argb,
5031                           const int8_t* matrix_argb,
5032                           int width);
5033 void ARGBColorMatrixRow_SSSE3(const uint8_t* src_argb,
5034                               uint8_t* dst_argb,
5035                               const int8_t* matrix_argb,
5036                               int width);
5037 void ARGBColorMatrixRow_NEON(const uint8_t* src_argb,
5038                              uint8_t* dst_argb,
5039                              const int8_t* matrix_argb,
5040                              int width);
5041 void ARGBColorMatrixRow_MSA(const uint8_t* src_argb,
5042                             uint8_t* dst_argb,
5043                             const int8_t* matrix_argb,
5044                             int width);
5045 void ARGBColorMatrixRow_LSX(const uint8_t* src_argb,
5046                             uint8_t* dst_argb,
5047                             const int8_t* matrix_argb,
5048                             int width);
5049 
5050 void ARGBColorTableRow_C(uint8_t* dst_argb,
5051                          const uint8_t* table_argb,
5052                          int width);
5053 void ARGBColorTableRow_X86(uint8_t* dst_argb,
5054                            const uint8_t* table_argb,
5055                            int width);
5056 
5057 void RGBColorTableRow_C(uint8_t* dst_argb,
5058                         const uint8_t* table_argb,
5059                         int width);
5060 void RGBColorTableRow_X86(uint8_t* dst_argb,
5061                           const uint8_t* table_argb,
5062                           int width);
5063 
5064 void ARGBQuantizeRow_C(uint8_t* dst_argb,
5065                        int scale,
5066                        int interval_size,
5067                        int interval_offset,
5068                        int width);
5069 void ARGBQuantizeRow_SSE2(uint8_t* dst_argb,
5070                           int scale,
5071                           int interval_size,
5072                           int interval_offset,
5073                           int width);
5074 void ARGBQuantizeRow_NEON(uint8_t* dst_argb,
5075                           int scale,
5076                           int interval_size,
5077                           int interval_offset,
5078                           int width);
5079 void ARGBQuantizeRow_MSA(uint8_t* dst_argb,
5080                          int scale,
5081                          int interval_size,
5082                          int interval_offset,
5083                          int width);
5084 void ARGBQuantizeRow_LSX(uint8_t* dst_argb,
5085                          int scale,
5086                          int interval_size,
5087                          int interval_offset,
5088                          int width);
5089 
5090 void ARGBShadeRow_C(const uint8_t* src_argb,
5091                     uint8_t* dst_argb,
5092                     int width,
5093                     uint32_t value);
5094 void ARGBShadeRow_SSE2(const uint8_t* src_argb,
5095                        uint8_t* dst_argb,
5096                        int width,
5097                        uint32_t value);
5098 void ARGBShadeRow_NEON(const uint8_t* src_argb,
5099                        uint8_t* dst_argb,
5100                        int width,
5101                        uint32_t value);
5102 void ARGBShadeRow_MSA(const uint8_t* src_argb,
5103                       uint8_t* dst_argb,
5104                       int width,
5105                       uint32_t value);
5106 void ARGBShadeRow_LASX(const uint8_t* src_argb,
5107                        uint8_t* dst_argb,
5108                        int width,
5109                        uint32_t value);
5110 
5111 // Used for blur.
5112 void CumulativeSumToAverageRow_SSE2(const int32_t* topleft,
5113                                     const int32_t* botleft,
5114                                     int width,
5115                                     int area,
5116                                     uint8_t* dst,
5117                                     int count);
5118 void ComputeCumulativeSumRow_SSE2(const uint8_t* row,
5119                                   int32_t* cumsum,
5120                                   const int32_t* previous_cumsum,
5121                                   int width);
5122 
5123 void CumulativeSumToAverageRow_C(const int32_t* tl,
5124                                  const int32_t* bl,
5125                                  int w,
5126                                  int area,
5127                                  uint8_t* dst,
5128                                  int count);
5129 void ComputeCumulativeSumRow_C(const uint8_t* row,
5130                                int32_t* cumsum,
5131                                const int32_t* previous_cumsum,
5132                                int width);
5133 
5134 LIBYUV_API
5135 void ARGBAffineRow_C(const uint8_t* src_argb,
5136                      int src_argb_stride,
5137                      uint8_t* dst_argb,
5138                      const float* uv_dudv,
5139                      int width);
5140 LIBYUV_API
5141 void ARGBAffineRow_SSE2(const uint8_t* src_argb,
5142                         int src_argb_stride,
5143                         uint8_t* dst_argb,
5144                         const float* src_dudv,
5145                         int width);
5146 
5147 // Used for I420Scale, ARGBScale, and ARGBInterpolate.
5148 void InterpolateRow_C(uint8_t* dst_ptr,
5149                       const uint8_t* src_ptr,
5150                       ptrdiff_t src_stride,
5151                       int width,
5152                       int source_y_fraction);
5153 void InterpolateRow_SSSE3(uint8_t* dst_ptr,
5154                           const uint8_t* src_ptr,
5155                           ptrdiff_t src_stride,
5156                           int dst_width,
5157                           int source_y_fraction);
5158 void InterpolateRow_AVX2(uint8_t* dst_ptr,
5159                          const uint8_t* src_ptr,
5160                          ptrdiff_t src_stride,
5161                          int dst_width,
5162                          int source_y_fraction);
5163 void InterpolateRow_NEON(uint8_t* dst_ptr,
5164                          const uint8_t* src_ptr,
5165                          ptrdiff_t src_stride,
5166                          int dst_width,
5167                          int source_y_fraction);
5168 void InterpolateRow_MSA(uint8_t* dst_ptr,
5169                         const uint8_t* src_ptr,
5170                         ptrdiff_t src_stride,
5171                         int width,
5172                         int source_y_fraction);
5173 void InterpolateRow_LSX(uint8_t* dst_ptr,
5174                         const uint8_t* src_ptr,
5175                         ptrdiff_t src_stride,
5176                         int width,
5177                         int source_y_fraction);
5178 void InterpolateRow_Any_NEON(uint8_t* dst_ptr,
5179                              const uint8_t* src_ptr,
5180                              ptrdiff_t src_stride_ptr,
5181                              int width,
5182                              int source_y_fraction);
5183 void InterpolateRow_Any_SSSE3(uint8_t* dst_ptr,
5184                               const uint8_t* src_ptr,
5185                               ptrdiff_t src_stride_ptr,
5186                               int width,
5187                               int source_y_fraction);
5188 void InterpolateRow_Any_AVX2(uint8_t* dst_ptr,
5189                              const uint8_t* src_ptr,
5190                              ptrdiff_t src_stride_ptr,
5191                              int width,
5192                              int source_y_fraction);
5193 void InterpolateRow_Any_MSA(uint8_t* dst_ptr,
5194                             const uint8_t* src_ptr,
5195                             ptrdiff_t src_stride_ptr,
5196                             int width,
5197                             int source_y_fraction);
5198 void InterpolateRow_Any_LSX(uint8_t* dst_ptr,
5199                             const uint8_t* src_ptr,
5200                             ptrdiff_t src_stride_ptr,
5201                             int width,
5202                             int source_y_fraction);
5203 
5204 void InterpolateRow_16_C(uint16_t* dst_ptr,
5205                          const uint16_t* src_ptr,
5206                          ptrdiff_t src_stride,
5207                          int width,
5208                          int source_y_fraction);
5209 void InterpolateRow_16_NEON(uint16_t* dst_ptr,
5210                             const uint16_t* src_ptr,
5211                             ptrdiff_t src_stride,
5212                             int width,
5213                             int source_y_fraction);
5214 void InterpolateRow_16_Any_NEON(uint16_t* dst_ptr,
5215                                 const uint16_t* src_ptr,
5216                                 ptrdiff_t src_stride,
5217                                 int width,
5218                                 int source_y_fraction);
5219 
5220 void InterpolateRow_16To8_C(uint8_t* dst_ptr,
5221                             const uint16_t* src_ptr,
5222                             ptrdiff_t src_stride,
5223                             int scale,
5224                             int width,
5225                             int source_y_fraction);
5226 void InterpolateRow_16To8_NEON(uint8_t* dst_ptr,
5227                                const uint16_t* src_ptr,
5228                                ptrdiff_t src_stride,
5229                                int scale,
5230                                int width,
5231                                int source_y_fraction);
5232 void InterpolateRow_16To8_Any_NEON(uint8_t* dst_ptr,
5233                                    const uint16_t* src_ptr,
5234                                    ptrdiff_t src_stride,
5235                                    int scale,
5236                                    int width,
5237                                    int source_y_fraction);
5238 void InterpolateRow_16To8_AVX2(uint8_t* dst_ptr,
5239                                const uint16_t* src_ptr,
5240                                ptrdiff_t src_stride,
5241                                int scale,
5242                                int width,
5243                                int source_y_fraction);
5244 void InterpolateRow_16To8_Any_AVX2(uint8_t* dst_ptr,
5245                                    const uint16_t* src_ptr,
5246                                    ptrdiff_t src_stride,
5247                                    int scale,
5248                                    int width,
5249                                    int source_y_fraction);
5250 
5251 // Sobel images.
5252 void SobelXRow_C(const uint8_t* src_y0,
5253                  const uint8_t* src_y1,
5254                  const uint8_t* src_y2,
5255                  uint8_t* dst_sobelx,
5256                  int width);
5257 void SobelXRow_SSE2(const uint8_t* src_y0,
5258                     const uint8_t* src_y1,
5259                     const uint8_t* src_y2,
5260                     uint8_t* dst_sobelx,
5261                     int width);
5262 void SobelXRow_NEON(const uint8_t* src_y0,
5263                     const uint8_t* src_y1,
5264                     const uint8_t* src_y2,
5265                     uint8_t* dst_sobelx,
5266                     int width);
5267 void SobelXRow_MSA(const uint8_t* src_y0,
5268                    const uint8_t* src_y1,
5269                    const uint8_t* src_y2,
5270                    uint8_t* dst_sobelx,
5271                    int width);
5272 void SobelYRow_C(const uint8_t* src_y0,
5273                  const uint8_t* src_y1,
5274                  uint8_t* dst_sobely,
5275                  int width);
5276 void SobelYRow_SSE2(const uint8_t* src_y0,
5277                     const uint8_t* src_y1,
5278                     uint8_t* dst_sobely,
5279                     int width);
5280 void SobelYRow_NEON(const uint8_t* src_y0,
5281                     const uint8_t* src_y1,
5282                     uint8_t* dst_sobely,
5283                     int width);
5284 void SobelYRow_MSA(const uint8_t* src_y0,
5285                    const uint8_t* src_y1,
5286                    uint8_t* dst_sobely,
5287                    int width);
5288 void SobelRow_C(const uint8_t* src_sobelx,
5289                 const uint8_t* src_sobely,
5290                 uint8_t* dst_argb,
5291                 int width);
5292 void SobelRow_SSE2(const uint8_t* src_sobelx,
5293                    const uint8_t* src_sobely,
5294                    uint8_t* dst_argb,
5295                    int width);
5296 void SobelRow_NEON(const uint8_t* src_sobelx,
5297                    const uint8_t* src_sobely,
5298                    uint8_t* dst_argb,
5299                    int width);
5300 void SobelRow_MSA(const uint8_t* src_sobelx,
5301                   const uint8_t* src_sobely,
5302                   uint8_t* dst_argb,
5303                   int width);
5304 void SobelRow_LSX(const uint8_t* src_sobelx,
5305                   const uint8_t* src_sobely,
5306                   uint8_t* dst_argb,
5307                   int width);
5308 void SobelToPlaneRow_C(const uint8_t* src_sobelx,
5309                        const uint8_t* src_sobely,
5310                        uint8_t* dst_y,
5311                        int width);
5312 void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx,
5313                           const uint8_t* src_sobely,
5314                           uint8_t* dst_y,
5315                           int width);
5316 void SobelToPlaneRow_NEON(const uint8_t* src_sobelx,
5317                           const uint8_t* src_sobely,
5318                           uint8_t* dst_y,
5319                           int width);
5320 void SobelToPlaneRow_MSA(const uint8_t* src_sobelx,
5321                          const uint8_t* src_sobely,
5322                          uint8_t* dst_y,
5323                          int width);
5324 void SobelToPlaneRow_LSX(const uint8_t* src_sobelx,
5325                          const uint8_t* src_sobely,
5326                          uint8_t* dst_y,
5327                          int width);
5328 void SobelXYRow_C(const uint8_t* src_sobelx,
5329                   const uint8_t* src_sobely,
5330                   uint8_t* dst_argb,
5331                   int width);
5332 void SobelXYRow_SSE2(const uint8_t* src_sobelx,
5333                      const uint8_t* src_sobely,
5334                      uint8_t* dst_argb,
5335                      int width);
5336 void SobelXYRow_NEON(const uint8_t* src_sobelx,
5337                      const uint8_t* src_sobely,
5338                      uint8_t* dst_argb,
5339                      int width);
5340 void SobelXYRow_MSA(const uint8_t* src_sobelx,
5341                     const uint8_t* src_sobely,
5342                     uint8_t* dst_argb,
5343                     int width);
5344 void SobelXYRow_LSX(const uint8_t* src_sobelx,
5345                     const uint8_t* src_sobely,
5346                     uint8_t* dst_argb,
5347                     int width);
5348 void SobelRow_Any_SSE2(const uint8_t* y_buf,
5349                        const uint8_t* uv_buf,
5350                        uint8_t* dst_ptr,
5351                        int width);
5352 void SobelRow_Any_NEON(const uint8_t* y_buf,
5353                        const uint8_t* uv_buf,
5354                        uint8_t* dst_ptr,
5355                        int width);
5356 void SobelRow_Any_MSA(const uint8_t* y_buf,
5357                       const uint8_t* uv_buf,
5358                       uint8_t* dst_ptr,
5359                       int width);
5360 void SobelRow_Any_LSX(const uint8_t* y_buf,
5361                       const uint8_t* uv_buf,
5362                       uint8_t* dst_ptr,
5363                       int width);
5364 void SobelToPlaneRow_Any_SSE2(const uint8_t* y_buf,
5365                               const uint8_t* uv_buf,
5366                               uint8_t* dst_ptr,
5367                               int width);
5368 void SobelToPlaneRow_Any_NEON(const uint8_t* y_buf,
5369                               const uint8_t* uv_buf,
5370                               uint8_t* dst_ptr,
5371                               int width);
5372 void SobelToPlaneRow_Any_MSA(const uint8_t* y_buf,
5373                              const uint8_t* uv_buf,
5374                              uint8_t* dst_ptr,
5375                              int width);
5376 void SobelToPlaneRow_Any_LSX(const uint8_t* y_buf,
5377                              const uint8_t* uv_buf,
5378                              uint8_t* dst_ptr,
5379                              int width);
5380 void SobelXYRow_Any_SSE2(const uint8_t* y_buf,
5381                          const uint8_t* uv_buf,
5382                          uint8_t* dst_ptr,
5383                          int width);
5384 void SobelXYRow_Any_NEON(const uint8_t* y_buf,
5385                          const uint8_t* uv_buf,
5386                          uint8_t* dst_ptr,
5387                          int width);
5388 void SobelXYRow_Any_MSA(const uint8_t* y_buf,
5389                         const uint8_t* uv_buf,
5390                         uint8_t* dst_ptr,
5391                         int width);
5392 void SobelXYRow_Any_LSX(const uint8_t* y_buf,
5393                         const uint8_t* uv_buf,
5394                         uint8_t* dst_ptr,
5395                         int width);
5396 
5397 void ARGBPolynomialRow_C(const uint8_t* src_argb,
5398                          uint8_t* dst_argb,
5399                          const float* poly,
5400                          int width);
5401 void ARGBPolynomialRow_SSE2(const uint8_t* src_argb,
5402                             uint8_t* dst_argb,
5403                             const float* poly,
5404                             int width);
5405 void ARGBPolynomialRow_AVX2(const uint8_t* src_argb,
5406                             uint8_t* dst_argb,
5407                             const float* poly,
5408                             int width);
5409 
5410 // Scale and convert to half float.
5411 void HalfFloatRow_C(const uint16_t* src, uint16_t* dst, float scale, int width);
5412 void HalfFloatRow_SSE2(const uint16_t* src,
5413                        uint16_t* dst,
5414                        float scale,
5415                        int width);
5416 void HalfFloatRow_Any_SSE2(const uint16_t* src_ptr,
5417                            uint16_t* dst_ptr,
5418                            float param,
5419                            int width);
5420 void HalfFloatRow_AVX2(const uint16_t* src,
5421                        uint16_t* dst,
5422                        float scale,
5423                        int width);
5424 void HalfFloatRow_Any_AVX2(const uint16_t* src_ptr,
5425                            uint16_t* dst_ptr,
5426                            float param,
5427                            int width);
5428 void HalfFloatRow_F16C(const uint16_t* src,
5429                        uint16_t* dst,
5430                        float scale,
5431                        int width);
5432 void HalfFloatRow_Any_F16C(const uint16_t* src,
5433                            uint16_t* dst,
5434                            float scale,
5435                            int width);
5436 void HalfFloat1Row_F16C(const uint16_t* src,
5437                         uint16_t* dst,
5438                         float scale,
5439                         int width);
5440 void HalfFloat1Row_Any_F16C(const uint16_t* src,
5441                             uint16_t* dst,
5442                             float scale,
5443                             int width);
5444 void HalfFloatRow_NEON(const uint16_t* src,
5445                        uint16_t* dst,
5446                        float scale,
5447                        int width);
5448 void HalfFloatRow_Any_NEON(const uint16_t* src_ptr,
5449                            uint16_t* dst_ptr,
5450                            float param,
5451                            int width);
5452 void HalfFloat1Row_NEON(const uint16_t* src,
5453                         uint16_t* dst,
5454                         float scale,
5455                         int width);
5456 void HalfFloat1Row_Any_NEON(const uint16_t* src_ptr,
5457                             uint16_t* dst_ptr,
5458                             float param,
5459                             int width);
5460 void HalfFloatRow_MSA(const uint16_t* src,
5461                       uint16_t* dst,
5462                       float scale,
5463                       int width);
5464 void HalfFloatRow_Any_MSA(const uint16_t* src_ptr,
5465                           uint16_t* dst_ptr,
5466                           float param,
5467                           int width);
5468 void HalfFloatRow_LSX(const uint16_t* src,
5469                       uint16_t* dst,
5470                       float scale,
5471                       int width);
5472 void HalfFloatRow_Any_LSX(const uint16_t* src_ptr,
5473                           uint16_t* dst_ptr,
5474                           float param,
5475                           int width);
5476 void ByteToFloatRow_C(const uint8_t* src, float* dst, float scale, int width);
5477 void ByteToFloatRow_NEON(const uint8_t* src,
5478                          float* dst,
5479                          float scale,
5480                          int width);
5481 void ByteToFloatRow_Any_NEON(const uint8_t* src_ptr,
5482                              float* dst_ptr,
5483                              float param,
5484                              int width);
5485 
5486 void ARGBLumaColorTableRow_C(const uint8_t* src_argb,
5487                              uint8_t* dst_argb,
5488                              int width,
5489                              const uint8_t* luma,
5490                              uint32_t lumacoeff);
5491 void ARGBLumaColorTableRow_SSSE3(const uint8_t* src_argb,
5492                                  uint8_t* dst_argb,
5493                                  int width,
5494                                  const uint8_t* luma,
5495                                  uint32_t lumacoeff);
5496 
5497 float ScaleMaxSamples_C(const float* src, float* dst, float scale, int width);
5498 float ScaleMaxSamples_NEON(const float* src,
5499                            float* dst,
5500                            float scale,
5501                            int width);
5502 float ScaleSumSamples_C(const float* src, float* dst, float scale, int width);
5503 float ScaleSumSamples_NEON(const float* src,
5504                            float* dst,
5505                            float scale,
5506                            int width);
5507 void ScaleSamples_C(const float* src, float* dst, float scale, int width);
5508 void ScaleSamples_NEON(const float* src, float* dst, float scale, int width);
5509 
5510 void GaussRow_F32_NEON(const float* src, float* dst, int width);
5511 void GaussRow_F32_C(const float* src, float* dst, int width);
5512 
5513 void GaussCol_F32_NEON(const float* src0,
5514                        const float* src1,
5515                        const float* src2,
5516                        const float* src3,
5517                        const float* src4,
5518                        float* dst,
5519                        int width);
5520 
5521 void GaussCol_F32_C(const float* src0,
5522                     const float* src1,
5523                     const float* src2,
5524                     const float* src3,
5525                     const float* src4,
5526                     float* dst,
5527                     int width);
5528 
5529 #ifdef __cplusplus
5530 }  // extern "C"
5531 }  // namespace libyuv
5532 #endif
5533 
5534 #endif  // INCLUDE_LIBYUV_ROW_H_
5535