Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: source/libvpx/third_party/libyuv/include/libyuv/row.h

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

Powered by Google App Engine
This is Rietveld 408576698