Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
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 */
11 #ifndef INCLUDE_LIBYUV_ROW_H_ // NOLINT
12 #define INCLUDE_LIBYUV_ROW_H_
14 #include <stdlib.h> // For malloc.
16 #include "libyuv/basic_types.h"
18 #ifdef __cplusplus
19 namespace libyuv {
20 extern "C" {
21 #endif
23 #define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a) - 1)))
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
36 #define free_aligned_buffer_64(var) \
37 free(var##_mem); \
38 var = 0
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
49 // Enable for NaCL pepper 33 for bundle and AVX2 support.
50 // #define NEW_BINUTILS
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
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
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__
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__
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
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_AVX2) && !defined(LIBYUV_DISABLE_X86) && \
178 (defined(VISUALC_HAS_AVX2) || 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
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
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)
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
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
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
311 // Effects:
312 #define HAS_ARGBADDROW_NEON
313 #define HAS_ARGBATTENUATEROW_NEON
314 #define HAS_ARGBBLENDROW_NEON
315 #define HAS_ARGBCOLORMATRIXROW_NEON
316 #define HAS_ARGBGRAYROW_NEON
317 #define HAS_ARGBMIRRORROW_NEON
318 #define HAS_ARGBMULTIPLYROW_NEON
319 #define HAS_ARGBQUANTIZEROW_NEON
320 #define HAS_ARGBSEPIAROW_NEON
321 #define HAS_ARGBSHADEROW_NEON
322 #define HAS_ARGBSUBTRACTROW_NEON
323 #define HAS_SOBELROW_NEON
324 #define HAS_SOBELTOPLANEROW_NEON
325 #define HAS_SOBELXYROW_NEON
326 #define HAS_SOBELXROW_NEON
327 #define HAS_SOBELYROW_NEON
328 #define HAS_INTERPOLATEROW_NEON
329 #endif
331 // The following are available on Mips platforms:
332 #if !defined(LIBYUV_DISABLE_MIPS) && defined(__mips__)
333 #define HAS_COPYROW_MIPS
334 #if defined(__mips_dsp) && (__mips_dsp_rev >= 2)
335 #define HAS_I422TOABGRROW_MIPS_DSPR2
336 #define HAS_I422TOARGBROW_MIPS_DSPR2
337 #define HAS_I422TOBGRAROW_MIPS_DSPR2
338 #define HAS_INTERPOLATEROWS_MIPS_DSPR2
339 #define HAS_MIRRORROW_MIPS_DSPR2
340 #define HAS_MIRRORUVROW_MIPS_DSPR2
341 #define HAS_SPLITUVROW_MIPS_DSPR2
342 #endif
343 #endif
345 #if defined(_MSC_VER) && !defined(__CLR_VER)
346 #define SIMD_ALIGNED(var) __declspec(align(16)) var
347 typedef __declspec(align(16)) int16 vec16[8];
348 typedef __declspec(align(16)) int32 vec32[4];
349 typedef __declspec(align(16)) int8 vec8[16];
350 typedef __declspec(align(16)) uint16 uvec16[8];
351 typedef __declspec(align(16)) uint32 uvec32[4];
352 typedef __declspec(align(16)) uint8 uvec8[16];
353 typedef __declspec(align(32)) int16 lvec16[16];
354 typedef __declspec(align(32)) int32 lvec32[8];
355 typedef __declspec(align(32)) int8 lvec8[32];
356 typedef __declspec(align(32)) uint16 ulvec16[16];
357 typedef __declspec(align(32)) uint32 ulvec32[8];
358 typedef __declspec(align(32)) uint8 ulvec8[32];
360 #elif defined(__GNUC__)
361 // Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
362 #define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
363 typedef int16 __attribute__((vector_size(16))) vec16;
364 typedef int32 __attribute__((vector_size(16))) vec32;
365 typedef int8 __attribute__((vector_size(16))) vec8;
366 typedef uint16 __attribute__((vector_size(16))) uvec16;
367 typedef uint32 __attribute__((vector_size(16))) uvec32;
368 typedef uint8 __attribute__((vector_size(16))) uvec8;
369 #else
370 #define SIMD_ALIGNED(var) var
371 typedef int16 vec16[8];
372 typedef int32 vec32[4];
373 typedef int8 vec8[16];
374 typedef uint16 uvec16[8];
375 typedef uint32 uvec32[4];
376 typedef uint8 uvec8[16];
377 #endif
379 #if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
380 #define OMITFP
381 #else
382 #define OMITFP __attribute__((optimize("omit-frame-pointer")))
383 #endif
385 // NaCL macros for GCC x86 and x64.
387 // TODO(nfullagar): When pepper_33 toolchain is distributed, default to
388 // NEW_BINUTILS and remove all BUNDLEALIGN occurances.
389 #if defined(__native_client__)
390 #define LABELALIGN ".p2align 5\n"
391 #else
392 #define LABELALIGN ".p2align 2\n"
393 #endif
394 #if defined(__native_client__) && defined(__x86_64__)
395 #if defined(NEW_BINUTILS)
396 #define BUNDLELOCK ".bundle_lock\n"
397 #define BUNDLEUNLOCK ".bundle_unlock\n"
398 #define BUNDLEALIGN "\n"
399 #else
400 #define BUNDLELOCK "\n"
401 #define BUNDLEUNLOCK "\n"
402 #define BUNDLEALIGN ".p2align 5\n"
403 #endif
404 #define MEMACCESS(base) "%%nacl:(%%r15,%q" #base ")"
405 #define MEMACCESS2(offset, base) "%%nacl:" #offset "(%%r15,%q" #base ")"
406 #define MEMLEA(offset, base) #offset "(%q" #base ")"
407 #define MEMLEA3(offset, index, scale) \
408 #offset "(,%q" #index "," #scale ")"
409 #define MEMLEA4(offset, base, index, scale) \
410 #offset "(%q" #base ",%q" #index "," #scale ")"
411 #define MEMMOVESTRING(s, d) "%%nacl:(%q" #s "),%%nacl:(%q" #d "), %%r15"
412 #define MEMSTORESTRING(reg, d) "%%" #reg ",%%nacl:(%q" #d "), %%r15"
413 #define MEMOPREG(opcode, offset, base, index, scale, reg) \
414 BUNDLELOCK \
415 "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
416 #opcode " (%%r15,%%r14),%%" #reg "\n" \
417 BUNDLEUNLOCK
418 #define MEMOPMEM(opcode, reg, offset, base, index, scale) \
419 BUNDLELOCK \
420 "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
421 #opcode " %%" #reg ",(%%r15,%%r14)\n" \
422 BUNDLEUNLOCK
423 #define MEMOPARG(opcode, offset, base, index, scale, arg) \
424 BUNDLELOCK \
425 "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" \
426 #opcode " (%%r15,%%r14),%" #arg "\n" \
427 BUNDLEUNLOCK
428 #else
429 #define BUNDLEALIGN "\n"
430 #define MEMACCESS(base) "(%" #base ")"
431 #define MEMACCESS2(offset, base) #offset "(%" #base ")"
432 #define MEMLEA(offset, base) #offset "(%" #base ")"
433 #define MEMLEA3(offset, index, scale) \
434 #offset "(,%" #index "," #scale ")"
435 #define MEMLEA4(offset, base, index, scale) \
436 #offset "(%" #base ",%" #index "," #scale ")"
437 #define MEMMOVESTRING(s, d)
438 #define MEMSTORESTRING(reg, d)
439 #define MEMOPREG(opcode, offset, base, index, scale, reg) \
440 #opcode " " #offset "(%" #base ",%" #index "," #scale "),%%" #reg "\n"
441 #define MEMOPMEM(opcode, reg, offset, base, index, scale) \
442 #opcode " %%" #reg ","#offset "(%" #base ",%" #index "," #scale ")\n"
443 #define MEMOPARG(opcode, offset, base, index, scale, arg) \
444 #opcode " " #offset "(%" #base ",%" #index "," #scale "),%" #arg "\n"
445 #endif
447 void I444ToARGBRow_NEON(const uint8* src_y,
448 const uint8* src_u,
449 const uint8* src_v,
450 uint8* dst_argb,
451 int width);
452 void I422ToARGBRow_NEON(const uint8* src_y,
453 const uint8* src_u,
454 const uint8* src_v,
455 uint8* dst_argb,
456 int width);
457 void I411ToARGBRow_NEON(const uint8* src_y,
458 const uint8* src_u,
459 const uint8* src_v,
460 uint8* dst_argb,
461 int width);
462 void I422ToBGRARow_NEON(const uint8* src_y,
463 const uint8* src_u,
464 const uint8* src_v,
465 uint8* dst_bgra,
466 int width);
467 void I422ToABGRRow_NEON(const uint8* src_y,
468 const uint8* src_u,
469 const uint8* src_v,
470 uint8* dst_abgr,
471 int width);
472 void I422ToRGBARow_NEON(const uint8* src_y,
473 const uint8* src_u,
474 const uint8* src_v,
475 uint8* dst_rgba,
476 int width);
477 void I422ToRGB24Row_NEON(const uint8* src_y,
478 const uint8* src_u,
479 const uint8* src_v,
480 uint8* dst_rgb24,
481 int width);
482 void I422ToRAWRow_NEON(const uint8* src_y,
483 const uint8* src_u,
484 const uint8* src_v,
485 uint8* dst_raw,
486 int width);
487 void I422ToRGB565Row_NEON(const uint8* src_y,
488 const uint8* src_u,
489 const uint8* src_v,
490 uint8* dst_rgb565,
491 int width);
492 void I422ToARGB1555Row_NEON(const uint8* src_y,
493 const uint8* src_u,
494 const uint8* src_v,
495 uint8* dst_argb1555,
496 int width);
497 void I422ToARGB4444Row_NEON(const uint8* src_y,
498 const uint8* src_u,
499 const uint8* src_v,
500 uint8* dst_argb4444,
501 int width);
502 void NV12ToARGBRow_NEON(const uint8* src_y,
503 const uint8* src_uv,
504 uint8* dst_argb,
505 int width);
506 void NV21ToARGBRow_NEON(const uint8* src_y,
507 const uint8* src_vu,
508 uint8* dst_argb,
509 int width);
510 void NV12ToRGB565Row_NEON(const uint8* src_y,
511 const uint8* src_uv,
512 uint8* dst_rgb565,
513 int width);
514 void NV21ToRGB565Row_NEON(const uint8* src_y,
515 const uint8* src_vu,
516 uint8* dst_rgb565,
517 int width);
518 void YUY2ToARGBRow_NEON(const uint8* src_yuy2,
519 uint8* dst_argb,
520 int width);
521 void UYVYToARGBRow_NEON(const uint8* src_uyvy,
522 uint8* dst_argb,
523 int width);
525 void ARGBToYRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
526 void ARGBToYRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
527 void ARGBToYRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
528 void ARGBToYJRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
529 void ARGBToYJRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);
530 void ARGBToYJRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
531 void BGRAToYRow_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);
532 void ABGRToYRow_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);
533 void RGBAToYRow_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);
534 void RGB24ToYRow_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);
535 void RAWToYRow_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);
536 void ARGBToYRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
537 void ARGBToYJRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
538 void BGRAToYRow_Unaligned_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);
539 void ABGRToYRow_Unaligned_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);
540 void RGBAToYRow_Unaligned_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);
541 void RGB24ToYRow_Unaligned_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);
542 void RAWToYRow_Unaligned_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);
543 void ARGBToYRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);
544 void ARGBToYJRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);
545 void ARGBToUV444Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
546 int pix);
547 void ARGBToUV422Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
548 int pix);
549 void ARGBToUV411Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
550 int pix);
551 void ARGBToUVRow_NEON(const uint8* src_argb, int src_stride_argb,
552 uint8* dst_u, uint8* dst_v, int pix);
553 void ARGBToUVJRow_NEON(const uint8* src_argb, int src_stride_argb,
554 uint8* dst_u, uint8* dst_v, int pix);
555 void BGRAToUVRow_NEON(const uint8* src_bgra, int src_stride_bgra,
556 uint8* dst_u, uint8* dst_v, int pix);
557 void ABGRToUVRow_NEON(const uint8* src_abgr, int src_stride_abgr,
558 uint8* dst_u, uint8* dst_v, int pix);
559 void RGBAToUVRow_NEON(const uint8* src_rgba, int src_stride_rgba,
560 uint8* dst_u, uint8* dst_v, int pix);
561 void RGB24ToUVRow_NEON(const uint8* src_rgb24, int src_stride_rgb24,
562 uint8* dst_u, uint8* dst_v, int pix);
563 void RAWToUVRow_NEON(const uint8* src_raw, int src_stride_raw,
564 uint8* dst_u, uint8* dst_v, int pix);
565 void RGB565ToUVRow_NEON(const uint8* src_rgb565, int src_stride_rgb565,
566 uint8* dst_u, uint8* dst_v, int pix);
567 void ARGB1555ToUVRow_NEON(const uint8* src_argb1555, int src_stride_argb1555,
568 uint8* dst_u, uint8* dst_v, int pix);
569 void ARGB4444ToUVRow_NEON(const uint8* src_argb4444, int src_stride_argb4444,
570 uint8* dst_u, uint8* dst_v, int pix);
571 void BGRAToYRow_NEON(const uint8* src_bgra, uint8* dst_y, int pix);
572 void ABGRToYRow_NEON(const uint8* src_abgr, uint8* dst_y, int pix);
573 void RGBAToYRow_NEON(const uint8* src_rgba, uint8* dst_y, int pix);
574 void RGB24ToYRow_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);
575 void RAWToYRow_NEON(const uint8* src_raw, uint8* dst_y, int pix);
576 void RGB565ToYRow_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);
577 void ARGB1555ToYRow_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);
578 void ARGB4444ToYRow_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);
579 void ARGBToYRow_C(const uint8* src_argb, uint8* dst_y, int pix);
580 void ARGBToYJRow_C(const uint8* src_argb, uint8* dst_y, int pix);
581 void BGRAToYRow_C(const uint8* src_bgra, uint8* dst_y, int pix);
582 void ABGRToYRow_C(const uint8* src_abgr, uint8* dst_y, int pix);
583 void RGBAToYRow_C(const uint8* src_rgba, uint8* dst_y, int pix);
584 void RGB24ToYRow_C(const uint8* src_rgb24, uint8* dst_y, int pix);
585 void RAWToYRow_C(const uint8* src_raw, uint8* dst_y, int pix);
586 void RGB565ToYRow_C(const uint8* src_rgb565, uint8* dst_y, int pix);
587 void ARGB1555ToYRow_C(const uint8* src_argb1555, uint8* dst_y, int pix);
588 void ARGB4444ToYRow_C(const uint8* src_argb4444, uint8* dst_y, int pix);
589 void ARGBToYRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
590 void ARGBToYJRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);
591 void BGRAToYRow_Any_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);
592 void ABGRToYRow_Any_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);
593 void RGBAToYRow_Any_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);
594 void RGB24ToYRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);
595 void RAWToYRow_Any_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);
596 void ARGBToYRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);
597 void ARGBToYJRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);
598 void BGRAToYRow_Any_NEON(const uint8* src_bgra, uint8* dst_y, int pix);
599 void ABGRToYRow_Any_NEON(const uint8* src_abgr, uint8* dst_y, int pix);
600 void RGBAToYRow_Any_NEON(const uint8* src_rgba, uint8* dst_y, int pix);
601 void RGB24ToYRow_Any_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);
602 void RAWToYRow_Any_NEON(const uint8* src_raw, uint8* dst_y, int pix);
603 void RGB565ToYRow_Any_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);
604 void ARGB1555ToYRow_Any_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);
605 void ARGB4444ToYRow_Any_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);
607 void ARGBToUVRow_AVX2(const uint8* src_argb, int src_stride_argb,
608 uint8* dst_u, uint8* dst_v, int width);
609 void ARGBToUVRow_Any_AVX2(const uint8* src_argb, int src_stride_argb,
610 uint8* dst_u, uint8* dst_v, int width);
611 void ARGBToUVRow_SSSE3(const uint8* src_argb, int src_stride_argb,
612 uint8* dst_u, uint8* dst_v, int width);
613 void ARGBToUVJRow_SSSE3(const uint8* src_argb, int src_stride_argb,
614 uint8* dst_u, uint8* dst_v, int width);
615 void BGRAToUVRow_SSSE3(const uint8* src_bgra, int src_stride_bgra,
616 uint8* dst_u, uint8* dst_v, int width);
617 void ABGRToUVRow_SSSE3(const uint8* src_abgr, int src_stride_abgr,
618 uint8* dst_u, uint8* dst_v, int width);
619 void RGBAToUVRow_SSSE3(const uint8* src_rgba, int src_stride_rgba,
620 uint8* dst_u, uint8* dst_v, int width);
621 void ARGBToUVRow_Unaligned_SSSE3(const uint8* src_argb, int src_stride_argb,
622 uint8* dst_u, uint8* dst_v, int width);
623 void ARGBToUVJRow_Unaligned_SSSE3(const uint8* src_argb, int src_stride_argb,
624 uint8* dst_u, uint8* dst_v, int width);
625 void BGRAToUVRow_Unaligned_SSSE3(const uint8* src_bgra, int src_stride_bgra,
626 uint8* dst_u, uint8* dst_v, int width);
627 void ABGRToUVRow_Unaligned_SSSE3(const uint8* src_abgr, int src_stride_abgr,
628 uint8* dst_u, uint8* dst_v, int width);
629 void RGBAToUVRow_Unaligned_SSSE3(const uint8* src_rgba, int src_stride_rgba,
630 uint8* dst_u, uint8* dst_v, int width);
631 void ARGBToUVRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,
632 uint8* dst_u, uint8* dst_v, int width);
633 void ARGBToUVJRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,
634 uint8* dst_u, uint8* dst_v, int width);
635 void BGRAToUVRow_Any_SSSE3(const uint8* src_bgra, int src_stride_bgra,
636 uint8* dst_u, uint8* dst_v, int width);
637 void ABGRToUVRow_Any_SSSE3(const uint8* src_abgr, int src_stride_abgr,
638 uint8* dst_u, uint8* dst_v, int width);
639 void RGBAToUVRow_Any_SSSE3(const uint8* src_rgba, int src_stride_rgba,
640 uint8* dst_u, uint8* dst_v, int width);
641 void ARGBToUV444Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
642 int pix);
643 void ARGBToUV422Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
644 int pix);
645 void ARGBToUV411Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
646 int pix);
647 void ARGBToUVRow_Any_NEON(const uint8* src_argb, int src_stride_argb,
648 uint8* dst_u, uint8* dst_v, int pix);
649 void ARGBToUVJRow_Any_NEON(const uint8* src_argb, int src_stride_argb,
650 uint8* dst_u, uint8* dst_v, int pix);
651 void BGRAToUVRow_Any_NEON(const uint8* src_bgra, int src_stride_bgra,
652 uint8* dst_u, uint8* dst_v, int pix);
653 void ABGRToUVRow_Any_NEON(const uint8* src_abgr, int src_stride_abgr,
654 uint8* dst_u, uint8* dst_v, int pix);
655 void RGBAToUVRow_Any_NEON(const uint8* src_rgba, int src_stride_rgba,
656 uint8* dst_u, uint8* dst_v, int pix);
657 void RGB24ToUVRow_Any_NEON(const uint8* src_rgb24, int src_stride_rgb24,
658 uint8* dst_u, uint8* dst_v, int pix);
659 void RAWToUVRow_Any_NEON(const uint8* src_raw, int src_stride_raw,
660 uint8* dst_u, uint8* dst_v, int pix);
661 void RGB565ToUVRow_Any_NEON(const uint8* src_rgb565, int src_stride_rgb565,
662 uint8* dst_u, uint8* dst_v, int pix);
663 void ARGB1555ToUVRow_Any_NEON(const uint8* src_argb1555,
664 int src_stride_argb1555,
665 uint8* dst_u, uint8* dst_v, int pix);
666 void ARGB4444ToUVRow_Any_NEON(const uint8* src_argb4444,
667 int src_stride_argb4444,
668 uint8* dst_u, uint8* dst_v, int pix);
669 void ARGBToUVRow_C(const uint8* src_argb, int src_stride_argb,
670 uint8* dst_u, uint8* dst_v, int width);
671 void ARGBToUVJRow_C(const uint8* src_argb, int src_stride_argb,
672 uint8* dst_u, uint8* dst_v, int width);
673 void BGRAToUVRow_C(const uint8* src_bgra, int src_stride_bgra,
674 uint8* dst_u, uint8* dst_v, int width);
675 void ABGRToUVRow_C(const uint8* src_abgr, int src_stride_abgr,
676 uint8* dst_u, uint8* dst_v, int width);
677 void RGBAToUVRow_C(const uint8* src_rgba, int src_stride_rgba,
678 uint8* dst_u, uint8* dst_v, int width);
679 void RGB24ToUVRow_C(const uint8* src_rgb24, int src_stride_rgb24,
680 uint8* dst_u, uint8* dst_v, int width);
681 void RAWToUVRow_C(const uint8* src_raw, int src_stride_raw,
682 uint8* dst_u, uint8* dst_v, int width);
683 void RGB565ToUVRow_C(const uint8* src_rgb565, int src_stride_rgb565,
684 uint8* dst_u, uint8* dst_v, int width);
685 void ARGB1555ToUVRow_C(const uint8* src_argb1555, int src_stride_argb1555,
686 uint8* dst_u, uint8* dst_v, int width);
687 void ARGB4444ToUVRow_C(const uint8* src_argb4444, int src_stride_argb4444,
688 uint8* dst_u, uint8* dst_v, int width);
690 void ARGBToUV444Row_SSSE3(const uint8* src_argb,
691 uint8* dst_u, uint8* dst_v, int width);
692 void ARGBToUV444Row_Unaligned_SSSE3(const uint8* src_argb,
693 uint8* dst_u, uint8* dst_v, int width);
694 void ARGBToUV444Row_Any_SSSE3(const uint8* src_argb,
695 uint8* dst_u, uint8* dst_v, int width);
697 void ARGBToUV422Row_SSSE3(const uint8* src_argb,
698 uint8* dst_u, uint8* dst_v, int width);
699 void ARGBToUV422Row_Unaligned_SSSE3(const uint8* src_argb,
700 uint8* dst_u, uint8* dst_v, int width);
701 void ARGBToUV422Row_Any_SSSE3(const uint8* src_argb,
702 uint8* dst_u, uint8* dst_v, int width);
704 void ARGBToUV444Row_C(const uint8* src_argb,
705 uint8* dst_u, uint8* dst_v, int width);
706 void ARGBToUV422Row_C(const uint8* src_argb,
707 uint8* dst_u, uint8* dst_v, int width);
708 void ARGBToUV411Row_C(const uint8* src_argb,
709 uint8* dst_u, uint8* dst_v, int width);
711 void MirrorRow_AVX2(const uint8* src, uint8* dst, int width);
712 void MirrorRow_SSSE3(const uint8* src, uint8* dst, int width);
713 void MirrorRow_SSE2(const uint8* src, uint8* dst, int width);
714 void MirrorRow_NEON(const uint8* src, uint8* dst, int width);
715 void MirrorRow_MIPS_DSPR2(const uint8* src, uint8* dst, int width);
716 void MirrorRow_C(const uint8* src, uint8* dst, int width);
718 void MirrorUVRow_SSSE3(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
719 int width);
720 void MirrorUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
721 int width);
722 void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
723 int width);
724 void MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
725 int width);
727 void ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width);
728 void ARGBMirrorRow_SSSE3(const uint8* src, uint8* dst, int width);
729 void ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width);
730 void ARGBMirrorRow_C(const uint8* src, uint8* dst, int width);
732 void SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
733 void SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
734 void SplitUVRow_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
735 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);
736 void SplitUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
737 int pix);
738 void SplitUVRow_Unaligned_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
739 int pix);
740 void SplitUVRow_Unaligned_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u,
741 uint8* dst_v, int pix);
742 void SplitUVRow_Any_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
743 int pix);
744 void SplitUVRow_Any_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
745 int pix);
746 void SplitUVRow_Any_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
747 int pix);
748 void SplitUVRow_Any_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
749 int pix);
751 void MergeUVRow_C(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
752 int width);
753 void MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
754 int width);
755 void MergeUVRow_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
756 int width);
757 void MergeUVRow_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
758 int width);
759 void MergeUVRow_Unaligned_SSE2(const uint8* src_u, const uint8* src_v,
760 uint8* dst_uv, int width);
761 void MergeUVRow_Any_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
762 int width);
763 void MergeUVRow_Any_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
764 int width);
765 void MergeUVRow_Any_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
766 int width);
768 void CopyRow_SSE2(const uint8* src, uint8* dst, int count);
769 void CopyRow_ERMS(const uint8* src, uint8* dst, int count);
770 void CopyRow_X86(const uint8* src, uint8* dst, int count);
771 void CopyRow_NEON(const uint8* src, uint8* dst, int count);
772 void CopyRow_MIPS(const uint8* src, uint8* dst, int count);
773 void CopyRow_C(const uint8* src, uint8* dst, int count);
775 void ARGBCopyAlphaRow_C(const uint8* src_argb, uint8* dst_argb, int width);
776 void ARGBCopyAlphaRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
777 void ARGBCopyAlphaRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
779 void ARGBCopyYToAlphaRow_C(const uint8* src_y, uint8* dst_argb, int width);
780 void ARGBCopyYToAlphaRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
781 void ARGBCopyYToAlphaRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
783 void SetRow_X86(uint8* dst, uint32 v32, int count);
784 void ARGBSetRows_X86(uint8* dst, uint32 v32, int width,
785 int dst_stride, int height);
786 void SetRow_NEON(uint8* dst, uint32 v32, int count);
787 void ARGBSetRows_NEON(uint8* dst, uint32 v32, int width,
788 int dst_stride, int height);
789 void SetRow_C(uint8* dst, uint32 v32, int count);
790 void ARGBSetRows_C(uint8* dst, uint32 v32, int width, int dst_stride,
791 int height);
793 // ARGBShufflers for BGRAToARGB etc.
794 void ARGBShuffleRow_C(const uint8* src_argb, uint8* dst_argb,
795 const uint8* shuffler, int pix);
796 void ARGBShuffleRow_SSE2(const uint8* src_argb, uint8* dst_argb,
797 const uint8* shuffler, int pix);
798 void ARGBShuffleRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
799 const uint8* shuffler, int pix);
800 void ARGBShuffleRow_AVX2(const uint8* src_argb, uint8* dst_argb,
801 const uint8* shuffler, int pix);
802 void ARGBShuffleRow_NEON(const uint8* src_argb, uint8* dst_argb,
803 const uint8* shuffler, int pix);
804 void ARGBShuffleRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_argb,
805 const uint8* shuffler, int pix);
806 void ARGBShuffleRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
807 const uint8* shuffler, int pix);
808 void ARGBShuffleRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,
809 const uint8* shuffler, int pix);
810 void ARGBShuffleRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
811 const uint8* shuffler, int pix);
812 void ARGBShuffleRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,
813 const uint8* shuffler, int pix);
815 void RGB24ToARGBRow_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);
816 void RAWToARGBRow_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);
817 void RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb, int pix);
818 void ARGB1555ToARGBRow_SSE2(const uint8* src_argb1555, uint8* dst_argb,
819 int pix);
820 void ARGB4444ToARGBRow_SSE2(const uint8* src_argb4444, uint8* dst_argb,
821 int pix);
823 void RGB24ToARGBRow_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);
824 void RAWToARGBRow_NEON(const uint8* src_raw, uint8* dst_argb, int pix);
825 void RGB565ToARGBRow_NEON(const uint8* src_rgb565, uint8* dst_argb, int pix);
826 void ARGB1555ToARGBRow_NEON(const uint8* src_argb1555, uint8* dst_argb,
827 int pix);
828 void ARGB4444ToARGBRow_NEON(const uint8* src_argb4444, uint8* dst_argb,
829 int pix);
830 void RGB24ToARGBRow_C(const uint8* src_rgb24, uint8* dst_argb, int pix);
831 void RAWToARGBRow_C(const uint8* src_raw, uint8* dst_argb, int pix);
832 void RGB565ToARGBRow_C(const uint8* src_rgb, uint8* dst_argb, int pix);
833 void ARGB1555ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);
834 void ARGB4444ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);
835 void RGB24ToARGBRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);
836 void RAWToARGBRow_Any_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);
837 void RGB565ToARGBRow_Any_SSE2(const uint8* src_rgb565, uint8* dst_argb,
838 int pix);
839 void ARGB1555ToARGBRow_Any_SSE2(const uint8* src_argb1555, uint8* dst_argb,
840 int pix);
841 void ARGB4444ToARGBRow_Any_SSE2(const uint8* src_argb4444, uint8* dst_argb,
842 int pix);
843 void RGB24ToARGBRow_Any_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);
844 void RAWToARGBRow_Any_NEON(const uint8* src_raw, uint8* dst_argb, int pix);
845 void RGB565ToARGBRow_Any_NEON(const uint8* src_rgb565, uint8* dst_argb,
846 int pix);
847 void ARGB1555ToARGBRow_Any_NEON(const uint8* src_argb1555, uint8* dst_argb,
848 int pix);
849 void ARGB4444ToARGBRow_Any_NEON(const uint8* src_argb4444, uint8* dst_argb,
850 int pix);
852 void ARGBToRGB24Row_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
853 void ARGBToRAWRow_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
854 void ARGBToRGB565Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
855 void ARGBToARGB1555Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
856 void ARGBToARGB4444Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
858 void ARGBToRGB24Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
859 void ARGBToRAWRow_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
860 void ARGBToRGB565Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
861 void ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
862 void ARGBToARGB4444Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
864 void ARGBToRGBARow_C(const uint8* src_argb, uint8* dst_rgb, int pix);
865 void ARGBToRGB24Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
866 void ARGBToRAWRow_C(const uint8* src_argb, uint8* dst_rgb, int pix);
867 void ARGBToRGB565Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
868 void ARGBToARGB1555Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
869 void ARGBToARGB4444Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);
871 void I400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int pix);
872 void I400ToARGBRow_Unaligned_SSE2(const uint8* src_y, uint8* dst_argb, int pix);
873 void I400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int pix);
874 void I400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int pix);
875 void I400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int pix);
876 void I400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int pix);
878 void I444ToARGBRow_C(const uint8* src_y,
879 const uint8* src_u,
880 const uint8* src_v,
881 uint8* dst_argb,
882 int width);
883 void I422ToARGBRow_C(const uint8* src_y,
884 const uint8* src_u,
885 const uint8* src_v,
886 uint8* dst_argb,
887 int width);
888 void I411ToARGBRow_C(const uint8* src_y,
889 const uint8* src_u,
890 const uint8* src_v,
891 uint8* dst_argb,
892 int width);
893 void NV12ToARGBRow_C(const uint8* src_y,
894 const uint8* src_uv,
895 uint8* dst_argb,
896 int width);
897 void NV21ToRGB565Row_C(const uint8* src_y,
898 const uint8* src_vu,
899 uint8* dst_argb,
900 int width);
901 void NV12ToRGB565Row_C(const uint8* src_y,
902 const uint8* src_uv,
903 uint8* dst_argb,
904 int width);
905 void NV21ToARGBRow_C(const uint8* src_y,
906 const uint8* src_vu,
907 uint8* dst_argb,
908 int width);
909 void YUY2ToARGBRow_C(const uint8* src_yuy2,
910 uint8* dst_argb,
911 int width);
912 void UYVYToARGBRow_C(const uint8* src_uyvy,
913 uint8* dst_argb,
914 int width);
915 void I422ToBGRARow_C(const uint8* src_y,
916 const uint8* src_u,
917 const uint8* src_v,
918 uint8* dst_bgra,
919 int width);
920 void I422ToABGRRow_C(const uint8* src_y,
921 const uint8* src_u,
922 const uint8* src_v,
923 uint8* dst_abgr,
924 int width);
925 void I422ToRGBARow_C(const uint8* src_y,
926 const uint8* src_u,
927 const uint8* src_v,
928 uint8* dst_rgba,
929 int width);
930 void I422ToRGB24Row_C(const uint8* src_y,
931 const uint8* src_u,
932 const uint8* src_v,
933 uint8* dst_rgb24,
934 int width);
935 void I422ToRAWRow_C(const uint8* src_y,
936 const uint8* src_u,
937 const uint8* src_v,
938 uint8* dst_raw,
939 int width);
940 void I422ToARGB4444Row_C(const uint8* src_y,
941 const uint8* src_u,
942 const uint8* src_v,
943 uint8* dst_argb4444,
944 int width);
945 void I422ToARGB1555Row_C(const uint8* src_y,
946 const uint8* src_u,
947 const uint8* src_v,
948 uint8* dst_argb4444,
949 int width);
950 void I422ToRGB565Row_C(const uint8* src_y,
951 const uint8* src_u,
952 const uint8* src_v,
953 uint8* dst_rgb565,
954 int width);
955 void YToARGBRow_C(const uint8* src_y,
956 uint8* dst_argb,
957 int width);
958 void I422ToARGBRow_AVX2(const uint8* src_y,
959 const uint8* src_u,
960 const uint8* src_v,
961 uint8* dst_argb,
962 int width);
963 void I444ToARGBRow_SSSE3(const uint8* src_y,
964 const uint8* src_u,
965 const uint8* src_v,
966 uint8* dst_argb,
967 int width);
968 void I422ToARGBRow_SSSE3(const uint8* src_y,
969 const uint8* src_u,
970 const uint8* src_v,
971 uint8* dst_argb,
972 int width);
973 void I411ToARGBRow_SSSE3(const uint8* src_y,
974 const uint8* src_u,
975 const uint8* src_v,
976 uint8* dst_argb,
977 int width);
978 void NV12ToARGBRow_SSSE3(const uint8* src_y,
979 const uint8* src_uv,
980 uint8* dst_argb,
981 int width);
982 void NV21ToARGBRow_SSSE3(const uint8* src_y,
983 const uint8* src_vu,
984 uint8* dst_argb,
985 int width);
986 void NV12ToRGB565Row_SSSE3(const uint8* src_y,
987 const uint8* src_uv,
988 uint8* dst_argb,
989 int width);
990 void NV21ToRGB565Row_SSSE3(const uint8* src_y,
991 const uint8* src_vu,
992 uint8* dst_argb,
993 int width);
994 void YUY2ToARGBRow_SSSE3(const uint8* src_yuy2,
995 uint8* dst_argb,
996 int width);
997 void UYVYToARGBRow_SSSE3(const uint8* src_uyvy,
998 uint8* dst_argb,
999 int width);
1000 void I422ToBGRARow_SSSE3(const uint8* src_y,
1001 const uint8* src_u,
1002 const uint8* src_v,
1003 uint8* dst_bgra,
1004 int width);
1005 void I422ToABGRRow_SSSE3(const uint8* src_y,
1006 const uint8* src_u,
1007 const uint8* src_v,
1008 uint8* dst_abgr,
1009 int width);
1010 void I422ToRGBARow_SSSE3(const uint8* src_y,
1011 const uint8* src_u,
1012 const uint8* src_v,
1013 uint8* dst_rgba,
1014 int width);
1015 void I422ToARGB4444Row_SSSE3(const uint8* src_y,
1016 const uint8* src_u,
1017 const uint8* src_v,
1018 uint8* dst_argb,
1019 int width);
1020 void I422ToARGB1555Row_SSSE3(const uint8* src_y,
1021 const uint8* src_u,
1022 const uint8* src_v,
1023 uint8* dst_argb,
1024 int width);
1025 void I422ToRGB565Row_SSSE3(const uint8* src_y,
1026 const uint8* src_u,
1027 const uint8* src_v,
1028 uint8* dst_argb,
1029 int width);
1030 // RGB24/RAW are unaligned.
1031 void I422ToRGB24Row_SSSE3(const uint8* src_y,
1032 const uint8* src_u,
1033 const uint8* src_v,
1034 uint8* dst_rgb24,
1035 int width);
1036 void I422ToRAWRow_SSSE3(const uint8* src_y,
1037 const uint8* src_u,
1038 const uint8* src_v,
1039 uint8* dst_raw,
1040 int width);
1042 void I444ToARGBRow_Unaligned_SSSE3(const uint8* src_y,
1043 const uint8* src_u,
1044 const uint8* src_v,
1045 uint8* dst_argb,
1046 int width);
1047 void I422ToARGBRow_Unaligned_SSSE3(const uint8* src_y,
1048 const uint8* src_u,
1049 const uint8* src_v,
1050 uint8* dst_argb,
1051 int width);
1052 void I411ToARGBRow_Unaligned_SSSE3(const uint8* src_y,
1053 const uint8* src_u,
1054 const uint8* src_v,
1055 uint8* dst_argb,
1056 int width);
1057 void NV12ToARGBRow_Unaligned_SSSE3(const uint8* src_y,
1058 const uint8* src_uv,
1059 uint8* dst_argb,
1060 int width);
1061 void NV21ToARGBRow_Unaligned_SSSE3(const uint8* src_y,
1062 const uint8* src_vu,
1063 uint8* dst_argb,
1064 int width);
1065 void YUY2ToARGBRow_Unaligned_SSSE3(const uint8* src_yuy2,
1066 uint8* dst_argb,
1067 int width);
1068 void UYVYToARGBRow_Unaligned_SSSE3(const uint8* src_uyvy,
1069 uint8* dst_argb,
1070 int width);
1071 void I422ToBGRARow_Unaligned_SSSE3(const uint8* src_y,
1072 const uint8* src_u,
1073 const uint8* src_v,
1074 uint8* dst_bgra,
1075 int width);
1076 void I422ToABGRRow_Unaligned_SSSE3(const uint8* src_y,
1077 const uint8* src_u,
1078 const uint8* src_v,
1079 uint8* dst_abgr,
1080 int width);
1081 void I422ToRGBARow_Unaligned_SSSE3(const uint8* src_y,
1082 const uint8* src_u,
1083 const uint8* src_v,
1084 uint8* dst_rgba,
1085 int width);
1086 void I422ToARGBRow_Any_AVX2(const uint8* src_y,
1087 const uint8* src_u,
1088 const uint8* src_v,
1089 uint8* dst_argb,
1090 int width);
1091 void I444ToARGBRow_Any_SSSE3(const uint8* src_y,
1092 const uint8* src_u,
1093 const uint8* src_v,
1094 uint8* dst_argb,
1095 int width);
1096 void I422ToARGBRow_Any_SSSE3(const uint8* src_y,
1097 const uint8* src_u,
1098 const uint8* src_v,
1099 uint8* dst_argb,
1100 int width);
1101 void I411ToARGBRow_Any_SSSE3(const uint8* src_y,
1102 const uint8* src_u,
1103 const uint8* src_v,
1104 uint8* dst_argb,
1105 int width);
1106 void NV12ToARGBRow_Any_SSSE3(const uint8* src_y,
1107 const uint8* src_uv,
1108 uint8* dst_argb,
1109 int width);
1110 void NV21ToARGBRow_Any_SSSE3(const uint8* src_y,
1111 const uint8* src_vu,
1112 uint8* dst_argb,
1113 int width);
1114 void NV12ToRGB565Row_Any_SSSE3(const uint8* src_y,
1115 const uint8* src_uv,
1116 uint8* dst_argb,
1117 int width);
1118 void NV21ToRGB565Row_Any_SSSE3(const uint8* src_y,
1119 const uint8* src_vu,
1120 uint8* dst_argb,
1121 int width);
1122 void YUY2ToARGBRow_Any_SSSE3(const uint8* src_yuy2,
1123 uint8* dst_argb,
1124 int width);
1125 void UYVYToARGBRow_Any_SSSE3(const uint8* src_uyvy,
1126 uint8* dst_argb,
1127 int width);
1128 void I422ToBGRARow_Any_SSSE3(const uint8* src_y,
1129 const uint8* src_u,
1130 const uint8* src_v,
1131 uint8* dst_bgra,
1132 int width);
1133 void I422ToABGRRow_Any_SSSE3(const uint8* src_y,
1134 const uint8* src_u,
1135 const uint8* src_v,
1136 uint8* dst_abgr,
1137 int width);
1138 void I422ToRGBARow_Any_SSSE3(const uint8* src_y,
1139 const uint8* src_u,
1140 const uint8* src_v,
1141 uint8* dst_rgba,
1142 int width);
1143 void I422ToARGB4444Row_Any_SSSE3(const uint8* src_y,
1144 const uint8* src_u,
1145 const uint8* src_v,
1146 uint8* dst_rgba,
1147 int width);
1148 void I422ToARGB1555Row_Any_SSSE3(const uint8* src_y,
1149 const uint8* src_u,
1150 const uint8* src_v,
1151 uint8* dst_rgba,
1152 int width);
1153 void I422ToRGB565Row_Any_SSSE3(const uint8* src_y,
1154 const uint8* src_u,
1155 const uint8* src_v,
1156 uint8* dst_rgba,
1157 int width);
1158 // RGB24/RAW are unaligned.
1159 void I422ToRGB24Row_Any_SSSE3(const uint8* src_y,
1160 const uint8* src_u,
1161 const uint8* src_v,
1162 uint8* dst_argb,
1163 int width);
1164 void I422ToRAWRow_Any_SSSE3(const uint8* src_y,
1165 const uint8* src_u,
1166 const uint8* src_v,
1167 uint8* dst_argb,
1168 int width);
1169 void YToARGBRow_SSE2(const uint8* src_y,
1170 uint8* dst_argb,
1171 int width);
1172 void YToARGBRow_NEON(const uint8* src_y,
1173 uint8* dst_argb,
1174 int width);
1175 void YToARGBRow_Any_SSE2(const uint8* src_y,
1176 uint8* dst_argb,
1177 int width);
1178 void YToARGBRow_Any_NEON(const uint8* src_y,
1179 uint8* dst_argb,
1180 int width);
1182 // ARGB preattenuated alpha blend.
1183 void ARGBBlendRow_SSSE3(const uint8* src_argb, const uint8* src_argb1,
1184 uint8* dst_argb, int width);
1185 void ARGBBlendRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1186 uint8* dst_argb, int width);
1187 void ARGBBlendRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1188 uint8* dst_argb, int width);
1189 void ARGBBlendRow_C(const uint8* src_argb, const uint8* src_argb1,
1190 uint8* dst_argb, int width);
1192 // ARGB multiply images. Same API as Blend, but these require
1193 // pointer and width alignment for SSE2.
1194 void ARGBMultiplyRow_C(const uint8* src_argb, const uint8* src_argb1,
1195 uint8* dst_argb, int width);
1196 void ARGBMultiplyRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1197 uint8* dst_argb, int width);
1198 void ARGBMultiplyRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1199 uint8* dst_argb, int width);
1200 void ARGBMultiplyRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1201 uint8* dst_argb, int width);
1202 void ARGBMultiplyRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1203 uint8* dst_argb, int width);
1204 void ARGBMultiplyRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1205 uint8* dst_argb, int width);
1206 void ARGBMultiplyRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1207 uint8* dst_argb, int width);
1209 // ARGB add images.
1210 void ARGBAddRow_C(const uint8* src_argb, const uint8* src_argb1,
1211 uint8* dst_argb, int width);
1212 void ARGBAddRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1213 uint8* dst_argb, int width);
1214 void ARGBAddRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1215 uint8* dst_argb, int width);
1216 void ARGBAddRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1217 uint8* dst_argb, int width);
1218 void ARGBAddRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1219 uint8* dst_argb, int width);
1220 void ARGBAddRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1221 uint8* dst_argb, int width);
1222 void ARGBAddRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1223 uint8* dst_argb, int width);
1225 // ARGB subtract images. Same API as Blend, but these require
1226 // pointer and width alignment for SSE2.
1227 void ARGBSubtractRow_C(const uint8* src_argb, const uint8* src_argb1,
1228 uint8* dst_argb, int width);
1229 void ARGBSubtractRow_SSE2(const uint8* src_argb, const uint8* src_argb1,
1230 uint8* dst_argb, int width);
1231 void ARGBSubtractRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,
1232 uint8* dst_argb, int width);
1233 void ARGBSubtractRow_AVX2(const uint8* src_argb, const uint8* src_argb1,
1234 uint8* dst_argb, int width);
1235 void ARGBSubtractRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,
1236 uint8* dst_argb, int width);
1237 void ARGBSubtractRow_NEON(const uint8* src_argb, const uint8* src_argb1,
1238 uint8* dst_argb, int width);
1239 void ARGBSubtractRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,
1240 uint8* dst_argb, int width);
1242 void ARGBToRGB24Row_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
1243 void ARGBToRAWRow_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);
1244 void ARGBToRGB565Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1245 void ARGBToARGB1555Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1246 void ARGBToARGB4444Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);
1248 void ARGBToRGB24Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1249 void ARGBToRAWRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1250 void ARGBToRGB565Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1251 void ARGBToARGB1555Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1252 void ARGBToARGB4444Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);
1254 void I444ToARGBRow_Any_NEON(const uint8* src_y,
1255 const uint8* src_u,
1256 const uint8* src_v,
1257 uint8* dst_argb,
1258 int width);
1259 void I422ToARGBRow_Any_NEON(const uint8* src_y,
1260 const uint8* src_u,
1261 const uint8* src_v,
1262 uint8* dst_argb,
1263 int width);
1264 void I411ToARGBRow_Any_NEON(const uint8* src_y,
1265 const uint8* src_u,
1266 const uint8* src_v,
1267 uint8* dst_argb,
1268 int width);
1269 void I422ToBGRARow_Any_NEON(const uint8* src_y,
1270 const uint8* src_u,
1271 const uint8* src_v,
1272 uint8* dst_argb,
1273 int width);
1274 void I422ToABGRRow_Any_NEON(const uint8* src_y,
1275 const uint8* src_u,
1276 const uint8* src_v,
1277 uint8* dst_argb,
1278 int width);
1279 void I422ToRGBARow_Any_NEON(const uint8* src_y,
1280 const uint8* src_u,
1281 const uint8* src_v,
1282 uint8* dst_argb,
1283 int width);
1284 void I422ToRGB24Row_Any_NEON(const uint8* src_y,
1285 const uint8* src_u,
1286 const uint8* src_v,
1287 uint8* dst_argb,
1288 int width);
1289 void I422ToRAWRow_Any_NEON(const uint8* src_y,
1290 const uint8* src_u,
1291 const uint8* src_v,
1292 uint8* dst_argb,
1293 int width);
1294 void I422ToARGB4444Row_Any_NEON(const uint8* src_y,
1295 const uint8* src_u,
1296 const uint8* src_v,
1297 uint8* dst_argb,
1298 int width);
1299 void I422ToARGB1555Row_Any_NEON(const uint8* src_y,
1300 const uint8* src_u,
1301 const uint8* src_v,
1302 uint8* dst_argb,
1303 int width);
1304 void I422ToRGB565Row_Any_NEON(const uint8* src_y,
1305 const uint8* src_u,
1306 const uint8* src_v,
1307 uint8* dst_argb,
1308 int width);
1309 void NV12ToARGBRow_Any_NEON(const uint8* src_y,
1310 const uint8* src_uv,
1311 uint8* dst_argb,
1312 int width);
1313 void NV21ToARGBRow_Any_NEON(const uint8* src_y,
1314 const uint8* src_uv,
1315 uint8* dst_argb,
1316 int width);
1317 void NV12ToRGB565Row_Any_NEON(const uint8* src_y,
1318 const uint8* src_uv,
1319 uint8* dst_argb,
1320 int width);
1321 void NV21ToRGB565Row_Any_NEON(const uint8* src_y,
1322 const uint8* src_uv,
1323 uint8* dst_argb,
1324 int width);
1325 void YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2,
1326 uint8* dst_argb,
1327 int width);
1328 void UYVYToARGBRow_Any_NEON(const uint8* src_uyvy,
1329 uint8* dst_argb,
1330 int width);
1331 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,
1332 const uint8* src_u,
1333 const uint8* src_v,
1334 uint8* dst_argb,
1335 int width);
1336 void I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,
1337 const uint8* src_u,
1338 const uint8* src_v,
1339 uint8* dst_argb,
1340 int width);
1341 void I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,
1342 const uint8* src_u,
1343 const uint8* src_v,
1344 uint8* dst_argb,
1345 int width);
1346 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,
1347 const uint8* src_u,
1348 const uint8* src_v,
1349 uint8* dst_argb,
1350 int width);
1351 void I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,
1352 const uint8* src_u,
1353 const uint8* src_v,
1354 uint8* dst_argb,
1355 int width);
1356 void I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,
1357 const uint8* src_u,
1358 const uint8* src_v,
1359 uint8* dst_argb,
1360 int width);
1362 void YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);
1363 void YUY2ToUVRow_AVX2(const uint8* src_yuy2, int stride_yuy2,
1364 uint8* dst_u, uint8* dst_v, int pix);
1365 void YUY2ToUV422Row_AVX2(const uint8* src_yuy2,
1366 uint8* dst_u, uint8* dst_v, int pix);
1367 void YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);
1368 void YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2,
1369 uint8* dst_u, uint8* dst_v, int pix);
1370 void YUY2ToUV422Row_SSE2(const uint8* src_yuy2,
1371 uint8* dst_u, uint8* dst_v, int pix);
1372 void YUY2ToYRow_Unaligned_SSE2(const uint8* src_yuy2,
1373 uint8* dst_y, int pix);
1374 void YUY2ToUVRow_Unaligned_SSE2(const uint8* src_yuy2, int stride_yuy2,
1375 uint8* dst_u, uint8* dst_v, int pix);
1376 void YUY2ToUV422Row_Unaligned_SSE2(const uint8* src_yuy2,
1377 uint8* dst_u, uint8* dst_v, int pix);
1378 void YUY2ToYRow_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);
1379 void YUY2ToUVRow_NEON(const uint8* src_yuy2, int stride_yuy2,
1380 uint8* dst_u, uint8* dst_v, int pix);
1381 void YUY2ToUV422Row_NEON(const uint8* src_yuy2,
1382 uint8* dst_u, uint8* dst_v, int pix);
1383 void YUY2ToYRow_C(const uint8* src_yuy2, uint8* dst_y, int pix);
1384 void YUY2ToUVRow_C(const uint8* src_yuy2, int stride_yuy2,
1385 uint8* dst_u, uint8* dst_v, int pix);
1386 void YUY2ToUV422Row_C(const uint8* src_yuy2,
1387 uint8* dst_u, uint8* dst_v, int pix);
1388 void YUY2ToYRow_Any_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);
1389 void YUY2ToUVRow_Any_AVX2(const uint8* src_yuy2, int stride_yuy2,
1390 uint8* dst_u, uint8* dst_v, int pix);
1391 void YUY2ToUV422Row_Any_AVX2(const uint8* src_yuy2,
1392 uint8* dst_u, uint8* dst_v, int pix);
1393 void YUY2ToYRow_Any_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);
1394 void YUY2ToUVRow_Any_SSE2(const uint8* src_yuy2, int stride_yuy2,
1395 uint8* dst_u, uint8* dst_v, int pix);
1396 void YUY2ToUV422Row_Any_SSE2(const uint8* src_yuy2,
1397 uint8* dst_u, uint8* dst_v, int pix);
1398 void YUY2ToYRow_Any_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);
1399 void YUY2ToUVRow_Any_NEON(const uint8* src_yuy2, int stride_yuy2,
1400 uint8* dst_u, uint8* dst_v, int pix);
1401 void YUY2ToUV422Row_Any_NEON(const uint8* src_yuy2,
1402 uint8* dst_u, uint8* dst_v, int pix);
1403 void UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1404 void UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,
1405 uint8* dst_u, uint8* dst_v, int pix);
1406 void UYVYToUV422Row_AVX2(const uint8* src_uyvy,
1407 uint8* dst_u, uint8* dst_v, int pix);
1408 void UYVYToYRow_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);
1409 void UYVYToUVRow_SSE2(const uint8* src_uyvy, int stride_uyvy,
1410 uint8* dst_u, uint8* dst_v, int pix);
1411 void UYVYToUV422Row_SSE2(const uint8* src_uyvy,
1412 uint8* dst_u, uint8* dst_v, int pix);
1413 void UYVYToYRow_Unaligned_SSE2(const uint8* src_uyvy,
1414 uint8* dst_y, int pix);
1415 void UYVYToUVRow_Unaligned_SSE2(const uint8* src_uyvy, int stride_uyvy,
1416 uint8* dst_u, uint8* dst_v, int pix);
1417 void UYVYToUV422Row_Unaligned_SSE2(const uint8* src_uyvy,
1418 uint8* dst_u, uint8* dst_v, int pix);
1419 void UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1420 void UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,
1421 uint8* dst_u, uint8* dst_v, int pix);
1422 void UYVYToUV422Row_AVX2(const uint8* src_uyvy,
1423 uint8* dst_u, uint8* dst_v, int pix);
1424 void UYVYToYRow_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);
1425 void UYVYToUVRow_NEON(const uint8* src_uyvy, int stride_uyvy,
1426 uint8* dst_u, uint8* dst_v, int pix);
1427 void UYVYToUV422Row_NEON(const uint8* src_uyvy,
1428 uint8* dst_u, uint8* dst_v, int pix);
1430 void UYVYToYRow_C(const uint8* src_uyvy, uint8* dst_y, int pix);
1431 void UYVYToUVRow_C(const uint8* src_uyvy, int stride_uyvy,
1432 uint8* dst_u, uint8* dst_v, int pix);
1433 void UYVYToUV422Row_C(const uint8* src_uyvy,
1434 uint8* dst_u, uint8* dst_v, int pix);
1435 void UYVYToYRow_Any_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);
1436 void UYVYToUVRow_Any_AVX2(const uint8* src_uyvy, int stride_uyvy,
1437 uint8* dst_u, uint8* dst_v, int pix);
1438 void UYVYToUV422Row_Any_AVX2(const uint8* src_uyvy,
1439 uint8* dst_u, uint8* dst_v, int pix);
1440 void UYVYToYRow_Any_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);
1441 void UYVYToUVRow_Any_SSE2(const uint8* src_uyvy, int stride_uyvy,
1442 uint8* dst_u, uint8* dst_v, int pix);
1443 void UYVYToUV422Row_Any_SSE2(const uint8* src_uyvy,
1444 uint8* dst_u, uint8* dst_v, int pix);
1445 void UYVYToYRow_Any_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);
1446 void UYVYToUVRow_Any_NEON(const uint8* src_uyvy, int stride_uyvy,
1447 uint8* dst_u, uint8* dst_v, int pix);
1448 void UYVYToUV422Row_Any_NEON(const uint8* src_uyvy,
1449 uint8* dst_u, uint8* dst_v, int pix);
1451 void HalfRow_C(const uint8* src_uv, int src_uv_stride,
1452 uint8* dst_uv, int pix);
1453 void HalfRow_SSE2(const uint8* src_uv, int src_uv_stride,
1454 uint8* dst_uv, int pix);
1455 void HalfRow_AVX2(const uint8* src_uv, int src_uv_stride,
1456 uint8* dst_uv, int pix);
1457 void HalfRow_NEON(const uint8* src_uv, int src_uv_stride,
1458 uint8* dst_uv, int pix);
1460 void ARGBToBayerRow_C(const uint8* src_argb, uint8* dst_bayer,
1461 uint32 selector, int pix);
1462 void ARGBToBayerRow_SSSE3(const uint8* src_argb, uint8* dst_bayer,
1463 uint32 selector, int pix);
1464 void ARGBToBayerRow_NEON(const uint8* src_argb, uint8* dst_bayer,
1465 uint32 selector, int pix);
1466 void ARGBToBayerRow_Any_SSSE3(const uint8* src_argb, uint8* dst_bayer,
1467 uint32 selector, int pix);
1468 void ARGBToBayerRow_Any_NEON(const uint8* src_argb, uint8* dst_bayer,
1469 uint32 selector, int pix);
1470 void ARGBToBayerGGRow_C(const uint8* src_argb, uint8* dst_bayer,
1471 uint32 /* selector */, int pix);
1472 void ARGBToBayerGGRow_SSE2(const uint8* src_argb, uint8* dst_bayer,
1473 uint32 /* selector */, int pix);
1474 void ARGBToBayerGGRow_NEON(const uint8* src_argb, uint8* dst_bayer,
1475 uint32 /* selector */, int pix);
1476 void ARGBToBayerGGRow_Any_SSE2(const uint8* src_argb, uint8* dst_bayer,
1477 uint32 /* selector */, int pix);
1478 void ARGBToBayerGGRow_Any_NEON(const uint8* src_argb, uint8* dst_bayer,
1479 uint32 /* selector */, int pix);
1481 void I422ToYUY2Row_C(const uint8* src_y,
1482 const uint8* src_u,
1483 const uint8* src_v,
1484 uint8* dst_yuy2, int width);
1485 void I422ToUYVYRow_C(const uint8* src_y,
1486 const uint8* src_u,
1487 const uint8* src_v,
1488 uint8* dst_uyvy, int width);
1489 void I422ToYUY2Row_SSE2(const uint8* src_y,
1490 const uint8* src_u,
1491 const uint8* src_v,
1492 uint8* dst_yuy2, int width);
1493 void I422ToUYVYRow_SSE2(const uint8* src_y,
1494 const uint8* src_u,
1495 const uint8* src_v,
1496 uint8* dst_uyvy, int width);
1497 void I422ToYUY2Row_Any_SSE2(const uint8* src_y,
1498 const uint8* src_u,
1499 const uint8* src_v,
1500 uint8* dst_yuy2, int width);
1501 void I422ToUYVYRow_Any_SSE2(const uint8* src_y,
1502 const uint8* src_u,
1503 const uint8* src_v,
1504 uint8* dst_uyvy, int width);
1505 void I422ToYUY2Row_NEON(const uint8* src_y,
1506 const uint8* src_u,
1507 const uint8* src_v,
1508 uint8* dst_yuy2, int width);
1509 void I422ToUYVYRow_NEON(const uint8* src_y,
1510 const uint8* src_u,
1511 const uint8* src_v,
1512 uint8* dst_uyvy, int width);
1513 void I422ToYUY2Row_Any_NEON(const uint8* src_y,
1514 const uint8* src_u,
1515 const uint8* src_v,
1516 uint8* dst_yuy2, int width);
1517 void I422ToUYVYRow_Any_NEON(const uint8* src_y,
1518 const uint8* src_u,
1519 const uint8* src_v,
1520 uint8* dst_uyvy, int width);
1522 // Effects related row functions.
1523 void ARGBAttenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1524 void ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
1525 void ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
1526 void ARGBAttenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
1527 void ARGBAttenuateRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
1528 void ARGBAttenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
1529 int width);
1530 void ARGBAttenuateRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,
1531 int width);
1532 void ARGBAttenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
1533 int width);
1534 void ARGBAttenuateRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,
1535 int width);
1537 // Inverse table for unattenuate, shared by C and SSE2.
1538 extern const uint32 fixed_invtbl8[256];
1539 void ARGBUnattenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1540 void ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
1541 void ARGBUnattenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
1542 void ARGBUnattenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,
1543 int width);
1544 void ARGBUnattenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,
1545 int width);
1547 void ARGBGrayRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1548 void ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
1549 void ARGBGrayRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
1551 void ARGBSepiaRow_C(uint8* dst_argb, int width);
1552 void ARGBSepiaRow_SSSE3(uint8* dst_argb, int width);
1553 void ARGBSepiaRow_NEON(uint8* dst_argb, int width);
1555 void ARGBColorMatrixRow_C(const uint8* src_argb, uint8* dst_argb,
1556 const int8* matrix_argb, int width);
1557 void ARGBColorMatrixRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
1558 const int8* matrix_argb, int width);
1559 void ARGBColorMatrixRow_NEON(const uint8* src_argb, uint8* dst_argb,
1560 const int8* matrix_argb, int width);
1562 void ARGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
1563 void ARGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
1565 void RGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
1566 void RGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
1568 void ARGBQuantizeRow_C(uint8* dst_argb, int scale, int interval_size,
1569 int interval_offset, int width);
1570 void ARGBQuantizeRow_SSE2(uint8* dst_argb, int scale, int interval_size,
1571 int interval_offset, int width);
1572 void ARGBQuantizeRow_NEON(uint8* dst_argb, int scale, int interval_size,
1573 int interval_offset, int width);
1575 void ARGBShadeRow_C(const uint8* src_argb, uint8* dst_argb, int width,
1576 uint32 value);
1577 void ARGBShadeRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width,
1578 uint32 value);
1579 void ARGBShadeRow_NEON(const uint8* src_argb, uint8* dst_argb, int width,
1580 uint32 value);
1582 // Used for blur.
1583 void CumulativeSumToAverageRow_SSE2(const int32* topleft, const int32* botleft,
1584 int width, int area, uint8* dst, int count);
1585 void ComputeCumulativeSumRow_SSE2(const uint8* row, int32* cumsum,
1586 const int32* previous_cumsum, int width);
1588 void CumulativeSumToAverageRow_C(const int32* topleft, const int32* botleft,
1589 int width, int area, uint8* dst, int count);
1590 void ComputeCumulativeSumRow_C(const uint8* row, int32* cumsum,
1591 const int32* previous_cumsum, int width);
1593 LIBYUV_API
1594 void ARGBAffineRow_C(const uint8* src_argb, int src_argb_stride,
1595 uint8* dst_argb, const float* uv_dudv, int width);
1596 LIBYUV_API
1597 void ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,
1598 uint8* dst_argb, const float* uv_dudv, int width);
1600 // Used for I420Scale, ARGBScale, and ARGBInterpolate.
1601 void InterpolateRow_C(uint8* dst_ptr, const uint8* src_ptr,
1602 ptrdiff_t src_stride_ptr,
1603 int width, int source_y_fraction);
1604 void InterpolateRow_SSE2(uint8* dst_ptr, const uint8* src_ptr,
1605 ptrdiff_t src_stride_ptr, int width,
1606 int source_y_fraction);
1607 void InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
1608 ptrdiff_t src_stride_ptr, int width,
1609 int source_y_fraction);
1610 void InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr,
1611 ptrdiff_t src_stride_ptr, int width,
1612 int source_y_fraction);
1613 void InterpolateRow_NEON(uint8* dst_ptr, const uint8* src_ptr,
1614 ptrdiff_t src_stride_ptr, int width,
1615 int source_y_fraction);
1616 void InterpolateRows_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,
1617 ptrdiff_t src_stride_ptr, int width,
1618 int source_y_fraction);
1619 void InterpolateRow_Unaligned_SSE2(uint8* dst_ptr, const uint8* src_ptr,
1620 ptrdiff_t src_stride_ptr, int width,
1621 int source_y_fraction);
1622 void InterpolateRow_Unaligned_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
1623 ptrdiff_t src_stride_ptr, int width,
1624 int source_y_fraction);
1625 void InterpolateRow_Any_NEON(uint8* dst_ptr, const uint8* src_ptr,
1626 ptrdiff_t src_stride_ptr, int width,
1627 int source_y_fraction);
1628 void InterpolateRow_Any_SSE2(uint8* dst_ptr, const uint8* src_ptr,
1629 ptrdiff_t src_stride_ptr, int width,
1630 int source_y_fraction);
1631 void InterpolateRow_Any_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
1632 ptrdiff_t src_stride_ptr, int width,
1633 int source_y_fraction);
1634 void InterpolateRow_Any_AVX2(uint8* dst_ptr, const uint8* src_ptr,
1635 ptrdiff_t src_stride_ptr, int width,
1636 int source_y_fraction);
1637 void InterpolateRows_Any_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,
1638 ptrdiff_t src_stride_ptr, int width,
1639 int source_y_fraction);
1641 // Sobel images.
1642 void SobelXRow_C(const uint8* src_y0, const uint8* src_y1, const uint8* src_y2,
1643 uint8* dst_sobelx, int width);
1644 void SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1,
1645 const uint8* src_y2, uint8* dst_sobelx, int width);
1646 void SobelXRow_NEON(const uint8* src_y0, const uint8* src_y1,
1647 const uint8* src_y2, uint8* dst_sobelx, int width);
1648 void SobelYRow_C(const uint8* src_y0, const uint8* src_y1,
1649 uint8* dst_sobely, int width);
1650 void SobelYRow_SSE2(const uint8* src_y0, const uint8* src_y1,
1651 uint8* dst_sobely, int width);
1652 void SobelYRow_NEON(const uint8* src_y0, const uint8* src_y1,
1653 uint8* dst_sobely, int width);
1654 void SobelRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1655 uint8* dst_argb, int width);
1656 void SobelRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1657 uint8* dst_argb, int width);
1658 void SobelRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1659 uint8* dst_argb, int width);
1660 void SobelToPlaneRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1661 uint8* dst_y, int width);
1662 void SobelToPlaneRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1663 uint8* dst_y, int width);
1664 void SobelToPlaneRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1665 uint8* dst_y, int width);
1666 void SobelXYRow_C(const uint8* src_sobelx, const uint8* src_sobely,
1667 uint8* dst_argb, int width);
1668 void SobelXYRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
1669 uint8* dst_argb, int width);
1670 void SobelXYRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,
1671 uint8* dst_argb, int width);
1673 void ARGBPolynomialRow_C(const uint8* src_argb,
1674 uint8* dst_argb, const float* poly,
1675 int width);
1676 void ARGBPolynomialRow_SSE2(const uint8* src_argb,
1677 uint8* dst_argb, const float* poly,
1678 int width);
1679 void ARGBPolynomialRow_AVX2(const uint8* src_argb,
1680 uint8* dst_argb, const float* poly,
1681 int width);
1683 void ARGBLumaColorTableRow_C(const uint8* src_argb, uint8* dst_argb, int width,
1684 const uint8* luma, uint32 lumacoeff);
1685 void ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
1686 int width,
1687 const uint8* luma, uint32 lumacoeff);
1689 #ifdef __cplusplus
1690 } // extern "C"
1691 } // namespace libyuv
1692 #endif
1694 #endif // INCLUDE_LIBYUV_ROW_H_ NOLINT