133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp/*
233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *
433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Use of this source code is governed by a BSD-style license
533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  that can be found in the LICENSE file in the root of the source
633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  tree. An additional intellectual property rights grant can be found
7f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang *  in the file PATENTS. All contributing project authors may
833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  be found in the AUTHORS file in the root of the source tree.
933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp */
1033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
11b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#ifndef INCLUDE_LIBYUV_ROW_H_
1233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define INCLUDE_LIBYUV_ROW_H_
1333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
14f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#include <stdlib.h>  // For malloc.
15f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "libyuv/basic_types.h"
1733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus
1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampnamespace libyuv {
2033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampextern "C" {
2133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
2233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
23b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1)))
2433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
25b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define align_buffer_64(var, size)                                       \
26b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  uint8* var##_mem = (uint8*)(malloc((size) + 63));         /* NOLINT */ \
27b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */
28f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
29f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define free_aligned_buffer_64(var) \
30b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  free(var##_mem);                  \
31f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  var = 0
32f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
33f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__pnacl__) || defined(__CLR_VER) || \
34f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang    (defined(__i386__) && !defined(__SSE2__))
35f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LIBYUV_DISABLE_X86
36f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
37f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// MemorySanitizer does not support assembly code yet. http://crbug.com/344505
38f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__has_feature)
39f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if __has_feature(memory_sanitizer)
40f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LIBYUV_DISABLE_X86
41f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// True if compiling for SSSE3 as a requirement.
4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if defined(__SSSE3__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 3))
4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_SSSE3_ONLY
4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
4733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
48f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__native_client__)
49f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LIBYUV_DISABLE_NEON
50f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
51f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// clang >= 3.5.0 required for Arm64.
52f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON)
53f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5))
54f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LIBYUV_DISABLE_NEON
55f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // clang >= 3.5
56f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // __clang__
57f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
58f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// GCC >= 4.7.0 required for AVX2.
59f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
60f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
61f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define GCC_HAS_AVX2 1
62f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // GNUC >= 4.7
63f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // __GNUC__
64f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
65f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// clang >= 3.4.0 required for AVX2.
66f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
67f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4))
68f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define CLANG_HAS_AVX2 1
69f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // clang >= 3.4
70f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // __clang__
71f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
72f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Visual C 2012 required for AVX2.
73b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \
74b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    _MSC_VER >= 1700
75f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define VISUALC_HAS_AVX2 1
76f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // VisualStudio >= 2012
77f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
7833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// The following are available on all x86 platforms:
79f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if !defined(LIBYUV_DISABLE_X86) && \
8033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
81f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Conversions:
8233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ABGRTOUVROW_SSSE3
8333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ABGRTOYROW_SSSE3
8433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGB1555TOARGBROW_SSE2
8533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGB4444TOARGBROW_SSE2
86b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBEXTRACTALPHAROW_SSE2
87f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSETROW_X86
88f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHUFFLEROW_SSE2
89f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHUFFLEROW_SSSE3
9033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTOARGB1555ROW_SSE2
9133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTOARGB4444ROW_SSE2
9233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTORAWROW_SSSE3
9333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTORGB24ROW_SSSE3
94f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB565DITHERROW_SSE2
9533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTORGB565ROW_SSE2
96f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUV444ROW_SSSE3
97f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUVJROW_SSSE3
9833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTOUVROW_SSSE3
99f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOYJROW_SSSE3
10033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBTOYROW_SSSE3
10133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_BGRATOUVROW_SSSE3
10233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_BGRATOYROW_SSSE3
103f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_COPYROW_ERMS
10433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_COPYROW_SSE2
105f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_H422TOARGBROW_SSSE3
106b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_HALFFLOATROW_SSE2
10733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I400TOARGBROW_SSE2
108f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB1555ROW_SSSE3
109f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB4444ROW_SSSE3
11033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I422TOARGBROW_SSSE3
111f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGB24ROW_SSSE3
112f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGB565ROW_SSSE3
113f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGBAROW_SSSE3
114f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOUYVYROW_SSE2
115f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOYUY2ROW_SSE2
11633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I444TOARGBROW_SSSE3
117f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_J400TOARGBROW_SSE2
118f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_J422TOARGBROW_SSSE3
119f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MERGEUVROW_SSE2
12033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_MIRRORROW_SSSE3
121f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MIRRORUVROW_SSSE3
12233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_NV12TOARGBROW_SSSE3
123f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV12TORGB565ROW_SSSE3
12433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_NV21TOARGBROW_SSSE3
12533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_RAWTOARGBROW_SSSE3
126f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTORGB24ROW_SSSE3
127f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTOYROW_SSSE3
12833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_RGB24TOARGBROW_SSSE3
129f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB24TOYROW_SSSE3
13033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_RGB565TOARGBROW_SSE2
131f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGBATOUVROW_SSSE3
132f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGBATOYROW_SSSE3
133f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SETROW_ERMS
13433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_SETROW_X86
135f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SPLITUVROW_SSE2
136f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOARGBROW_SSSE3
13733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOUV422ROW_SSE2
13833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOUVROW_SSE2
13933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOYROW_SSE2
140f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOARGBROW_SSSE3
14133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOUV422ROW_SSE2
14233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOUVROW_SSE2
14333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOYROW_SSE2
14433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
145f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Effects:
146f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBADDROW_SSE2
14733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBAFFINEROW_SSE2
14833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBATTENUATEROW_SSSE3
14933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBBLENDROW_SSSE3
15033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBCOLORMATRIXROW_SSSE3
151f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOLORTABLEROW_X86
152f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOPYALPHAROW_SSE2
153f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOPYYTOALPHAROW_SSE2
15433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBGRAYROW_SSSE3
155f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBLUMACOLORTABLEROW_SSSE3
156f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMIRRORROW_SSE2
157f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMULTIPLYROW_SSE2
158f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBPOLYNOMIALROW_SSE2
15933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBQUANTIZEROW_SSE2
16033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBSEPIAROW_SSSE3
161f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHADEROW_SSE2
162f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSUBTRACTROW_SSE2
16333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_ARGBUNATTENUATEROW_SSE2
164f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_BLENDPLANEROW_SSSE3
16533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_COMPUTECUMULATIVESUMROW_SSE2
166f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
167f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_INTERPOLATEROW_SSSE3
168f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGBCOLORTABLEROW_X86
169f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELROW_SSE2
170f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELTOPLANEROW_SSE2
171f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELXROW_SSE2
172f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELXYROW_SSE2
173f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELYROW_SSE2
174f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
175f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following functions fail on gcc/clang 32 bit with fpic and framepointer.
176f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// caveat: clangcl uses row_win.cc which works.
177b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
178b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    defined(_MSC_VER)
179f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// TODO(fbarchard): fix build error on android_full_debug=1
180f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// https://code.google.com/p/libyuv/issues/detail?id=517
181f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422ALPHATOARGBROW_SSSE3
182f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
18333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
18433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
185f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following are available on all x86 platforms, but
186f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// require VS2012, clang 3.4 or gcc 4.7.
187f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The code supports NaCL but requires a new compiler and validator.
188b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if !defined(LIBYUV_DISABLE_X86) &&                          \
189b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \
190b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard     defined(GCC_HAS_AVX2))
191f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOPYALPHAROW_AVX2
192f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOPYYTOALPHAROW_AVX2
193b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBEXTRACTALPHAROW_AVX2
194f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMIRRORROW_AVX2
195f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBPOLYNOMIALROW_AVX2
196f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHUFFLEROW_AVX2
197f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB565DITHERROW_AVX2
198f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUVJROW_AVX2
199f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUVROW_AVX2
200f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOYJROW_AVX2
201f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOYROW_AVX2
202f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_COPYROW_AVX
203f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_H422TOARGBROW_AVX2
204b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_HALFFLOATROW_AVX2
205b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard//  #define HAS_HALFFLOATROW_F16C  // Enable to test halffloat cast
206f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I400TOARGBROW_AVX2
207f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB1555ROW_AVX2
208f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB4444ROW_AVX2
209f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGBROW_AVX2
210f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGB24ROW_AVX2
211f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGB565ROW_AVX2
212f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGBAROW_AVX2
213f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I444TOARGBROW_AVX2
214f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_INTERPOLATEROW_AVX2
215f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_J422TOARGBROW_AVX2
216f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MERGEUVROW_AVX2
217f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MIRRORROW_AVX2
218f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV12TOARGBROW_AVX2
219f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV12TORGB565ROW_AVX2
220f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV21TOARGBROW_AVX2
221f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SPLITUVROW_AVX2
222f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOARGBROW_AVX2
223f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOUV422ROW_AVX2
224f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOUVROW_AVX2
225f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOYROW_AVX2
226f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOARGBROW_AVX2
227f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOUV422ROW_AVX2
228f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOUVROW_AVX2
229f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOYROW_AVX2
230f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
231f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Effects:
232f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBADDROW_AVX2
233f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBATTENUATEROW_AVX2
234f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMULTIPLYROW_AVX2
235f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSUBTRACTROW_AVX2
236f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBUNATTENUATEROW_AVX2
237f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_BLENDPLANEROW_AVX2
238b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
239b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
240b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    defined(_MSC_VER)
241b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// TODO(fbarchard): fix build error on android_full_debug=1
242b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// https://code.google.com/p/libyuv/issues/detail?id=517
243b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422ALPHATOARGBROW_AVX2
244b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif
245f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
246f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
247f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following are available for AVX2 Visual C and clangcl 32 bit:
248f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// TODO(fbarchard): Port to gcc.
249f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && \
250f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang    (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2))
251f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB1555TOARGBROW_AVX2
252f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB4444TOARGBROW_AVX2
253f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOARGB1555ROW_AVX2
254f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOARGB4444ROW_AVX2
255f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB565ROW_AVX2
256f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_J400TOARGBROW_AVX2
257f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB565TOARGBROW_AVX2
25833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
25933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
260f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following are also available on x64 Visual C.
261f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \
262f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang    (!defined(__clang__) || defined(__SSSE3__))
263f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422ALPHATOARGBROW_SSSE3
264f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGBROW_SSSE3
26533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
26633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
267f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following are available on Neon platforms:
268f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if !defined(LIBYUV_DISABLE_NEON) && \
269f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang    (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
270f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ABGRTOUVROW_NEON
271f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ABGRTOYROW_NEON
272f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB1555TOARGBROW_NEON
273f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB1555TOUVROW_NEON
274f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB1555TOYROW_NEON
275f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB4444TOARGBROW_NEON
276f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB4444TOUVROW_NEON
277f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGB4444TOYROW_NEON
278b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBEXTRACTALPHAROW_NEON
279f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSETROW_NEON
280f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOARGB1555ROW_NEON
281f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOARGB4444ROW_NEON
282f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORAWROW_NEON
283f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB24ROW_NEON
284f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB565DITHERROW_NEON
285f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTORGB565ROW_NEON
286f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUV444ROW_NEON
287f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUVJROW_NEON
288f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOUVROW_NEON
289f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOYJROW_NEON
290f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBTOYROW_NEON
291f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_BGRATOUVROW_NEON
292f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_BGRATOYROW_NEON
29333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_COPYROW_NEON
294b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_HALFFLOATROW_NEON
295f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I400TOARGBROW_NEON
296f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422ALPHATOARGBROW_NEON
297f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB1555ROW_NEON
298f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGB4444ROW_NEON
29933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I422TOARGBROW_NEON
30033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I422TORGB24ROW_NEON
301f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TORGB565ROW_NEON
30233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_I422TORGBAROW_NEON
303f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOUYVYROW_NEON
304f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOYUY2ROW_NEON
305f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I444TOARGBROW_NEON
306f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_J400TOARGBROW_NEON
307f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MERGEUVROW_NEON
30833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_MIRRORROW_NEON
309f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MIRRORUVROW_NEON
310f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV12TOARGBROW_NEON
311f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV12TORGB565ROW_NEON
312f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_NV21TOARGBROW_NEON
313f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTOARGBROW_NEON
314f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTORGB24ROW_NEON
315f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTOUVROW_NEON
316f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RAWTOYROW_NEON
317f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB24TOARGBROW_NEON
318f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB24TOUVROW_NEON
319f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB24TOYROW_NEON
320f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB565TOARGBROW_NEON
321f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB565TOUVROW_NEON
322f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGB565TOYROW_NEON
323f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGBATOUVROW_NEON
324f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_RGBATOYROW_NEON
32533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_SETROW_NEON
326f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SPLITUVROW_NEON
327f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_UYVYTOARGBROW_NEON
32833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOUV422ROW_NEON
32933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOUVROW_NEON
33033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_UYVYTOYROW_NEON
331f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_YUY2TOARGBROW_NEON
33233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOUV422ROW_NEON
33333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOUVROW_NEON
33433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define HAS_YUY2TOYROW_NEON
33533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
336f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Effects:
337f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBADDROW_NEON
338f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBATTENUATEROW_NEON
339f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBBLENDROW_NEON
340f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBCOLORMATRIXROW_NEON
341f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBGRAYROW_NEON
342f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMIRRORROW_NEON
343f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBMULTIPLYROW_NEON
344f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBQUANTIZEROW_NEON
345f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSEPIAROW_NEON
346f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHADEROW_NEON
347f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSHUFFLEROW_NEON
348f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_ARGBSUBTRACTROW_NEON
349f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_INTERPOLATEROW_NEON
350f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELROW_NEON
351f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELTOPLANEROW_NEON
352f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELXROW_NEON
353f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELXYROW_NEON
354f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SOBELYROW_NEON
35533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
35633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
357f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// The following are available on Mips platforms:
358b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if !defined(LIBYUV_DISABLE_DSPR2) && defined(__mips__) && \
359f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang    (_MIPS_SIM == _MIPS_SIM_ABI32) && (__mips_isa_rev < 6)
360f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_COPYROW_MIPS
361f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__mips_dsp) && (__mips_dsp_rev >= 2)
362f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_I422TOARGBROW_DSPR2
363f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_INTERPOLATEROW_DSPR2
364f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MIRRORROW_DSPR2
365f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_MIRRORUVROW_DSPR2
366f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define HAS_SPLITUVROW_DSPR2
367b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB24TOARGBROW_DSPR2
368b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RAWTOARGBROW_DSPR2
369b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB565TOARGBROW_DSPR2
370b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB1555TOARGBROW_DSPR2
371b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB4444TOARGBROW_DSPR2
372b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I444TOARGBROW_DSPR2
373b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TOARGB4444ROW_DSPR2
374b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TOARGB1555ROW_DSPR2
375b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_NV12TOARGBROW_DSPR2
376b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_BGRATOUVROW_DSPR2
377b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_BGRATOYROW_DSPR2
378b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ABGRTOUVROW_DSPR2
379b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOYROW_DSPR2
380b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ABGRTOYROW_DSPR2
381b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGBATOUVROW_DSPR2
382b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGBATOYROW_DSPR2
383b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOUVROW_DSPR2
384f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
385f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
386f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
387b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa)
388b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBMIRRORROW_MSA
389b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TOUYVYROW_MSA
390b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TOYUY2ROW_MSA
391b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_MIRRORROW_MSA
392b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_UYVYTOUVROW_MSA
393b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_UYVYTOYROW_MSA
394b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_YUY2TOUV422ROW_MSA
395b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_YUY2TOUVROW_MSA
396b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_YUY2TOYROW_MSA
397b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB4444TOARGBROW_MSA
398b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOYROW_MSA
399b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOUVROW_MSA
400b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TOARGBROW_MSA
401b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TORGBAROW_MSA
402b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422ALPHATOARGBROW_MSA
403b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I422TORGB24ROW_MSA
404b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTORGB24ROW_MSA
405b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTORAWROW_MSA
406b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTORGB565ROW_MSA
407b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOARGB1555ROW_MSA
408b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOARGB4444ROW_MSA
409b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOUV444ROW_MSA
410b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBMULTIPLYROW_MSA
411b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBADDROW_MSA
412b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBSUBTRACTROW_MSA
413b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBATTENUATEROW_MSA
414b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTORGB565DITHERROW_MSA
415b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBSHUFFLEROW_MSA
416b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBSHADEROW_MSA
417b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBGRAYROW_MSA
418b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBSEPIAROW_MSA
419b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB1555TOARGBROW_MSA
420b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB565TOARGBROW_MSA
421b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB24TOARGBROW_MSA
422b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RAWTOARGBROW_MSA
423b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB1555TOYROW_MSA
424b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB565TOYROW_MSA
425b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB24TOYROW_MSA
426b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RAWTOYROW_MSA
427b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGB1555TOUVROW_MSA
428b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB565TOUVROW_MSA
429b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGB24TOUVROW_MSA
430b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RAWTOUVROW_MSA
431b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_NV12TOARGBROW_MSA
432b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_NV12TORGB565ROW_MSA
433b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_NV21TOARGBROW_MSA
434b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_SOBELROW_MSA
435b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_SOBELTOPLANEROW_MSA
436b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_SOBELXYROW_MSA
437b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOYJROW_MSA
438b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_BGRATOYROW_MSA
439b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ABGRTOYROW_MSA
440b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGBATOYROW_MSA
441b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBTOUVJROW_MSA
442b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_BGRATOUVROW_MSA
443b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ABGRTOUVROW_MSA
444b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RGBATOUVROW_MSA
445b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I444TOARGBROW_MSA
446b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_I400TOARGBROW_MSA
447b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_J400TOARGBROW_MSA
448b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_YUY2TOARGBROW_MSA
449b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_UYVYTOARGBROW_MSA
450b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_INTERPOLATEROW_MSA
451b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_ARGBSETROW_MSA
452b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_RAWTORGB24ROW_MSA
453b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define HAS_MERGEUVROW_MSA
454b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif
455b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
456f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__)
457b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(VISUALC_HAS_AVX2)
458b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define SIMD_ALIGNED(var) __declspec(align(32)) var
459b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#else
46033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define SIMD_ALIGNED(var) __declspec(align(16)) var
461b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif
46233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef __declspec(align(16)) int16 vec16[8];
46333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef __declspec(align(16)) int32 vec32[4];
464f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(16)) int8 vec8[16];
465f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(16)) uint16 uvec16[8];
46633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef __declspec(align(16)) uint32 uvec32[4];
467f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(16)) uint8 uvec8[16];
468f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) int16 lvec16[16];
469f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) int32 lvec32[8];
470f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) int8 lvec8[32];
471f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) uint16 ulvec16[16];
472f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) uint32 ulvec32[8];
473f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef __declspec(align(32)) uint8 ulvec8[32];
474f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__))
475f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
476b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)
477b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define SIMD_ALIGNED(var) var __attribute__((aligned(32)))
478b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#else
47933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
480b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif
48133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef int16 __attribute__((vector_size(16))) vec16;
48233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef int32 __attribute__((vector_size(16))) vec32;
483f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int8 __attribute__((vector_size(16))) vec8;
484f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint16 __attribute__((vector_size(16))) uvec16;
48533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef uint32 __attribute__((vector_size(16))) uvec32;
486f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint8 __attribute__((vector_size(16))) uvec8;
487f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int16 __attribute__((vector_size(32))) lvec16;
488f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int32 __attribute__((vector_size(32))) lvec32;
489f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int8 __attribute__((vector_size(32))) lvec8;
490f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint16 __attribute__((vector_size(32))) ulvec16;
491f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint32 __attribute__((vector_size(32))) ulvec32;
492f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint8 __attribute__((vector_size(32))) ulvec8;
49333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else
49433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define SIMD_ALIGNED(var) var
49533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef int16 vec16[8];
49633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef int32 vec32[4];
497f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int8 vec8[16];
498f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint16 uvec16[8];
49933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef uint32 uvec32[4];
500f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint8 uvec8[16];
501f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int16 lvec16[16];
502f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int32 lvec32[8];
503f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef int8 lvec8[32];
504f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint16 ulvec16[16];
505f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint32 ulvec32[8];
506f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangtypedef uint8 ulvec8[32];
507f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
508f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
509f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__aarch64__)
510f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// This struct is for Arm64 color conversion.
511f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangstruct YuvConstants {
512f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec16 kUVToRB;
513f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec16 kUVToRB2;
514f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec16 kUVToG;
515f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec16 kUVToG2;
516f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  vec16 kUVBiasBGR;
517f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  vec32 kYToRgb;
518f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang};
519f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#elif defined(__arm__)
520f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// This struct is for ArmV7 color conversion.
521f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangstruct YuvConstants {
522f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec8 kUVToRB;
523f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  uvec8 kUVToG;
524f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  vec16 kUVBiasBGR;
525f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang  vec32 kYToRgb;
526f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang};
527f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#else
528f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// This struct is for Intel color conversion.
529f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangstruct YuvConstants {
530b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int8 kUVToB[32];
531b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int8 kUVToG[32];
532b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int8 kUVToR[32];
533b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int16 kUVBiasB[16];
534b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int16 kUVBiasG[16];
535b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int16 kUVBiasR[16];
536b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  int16 kYToRgb[16];
537f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang};
538f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
539f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Offsets into YuvConstants structure
540b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define KUVTOB 0
541b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define KUVTOG 32
542b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define KUVTOR 64
543f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define KUVBIASB 96
544f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define KUVBIASG 128
545f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define KUVBIASR 160
546b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define KYTORGB 192
54733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
54833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
549f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Conversion matrix for YUV to RGB
550b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYuvI601Constants);  // BT.601
551b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYuvJPEGConstants);  // JPeg
552b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYuvH709Constants);  // BT.709
553f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
554f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Conversion matrix for YVU to BGR
555b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYvuI601Constants);  // BT.601
556b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYvuJPEGConstants);  // JPeg
557b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardextern const struct YuvConstants SIMD_ALIGNED(kYvuH709Constants);  // BT.709
558f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
55933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
56033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define OMITFP
56133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else
56233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define OMITFP __attribute__((optimize("omit-frame-pointer")))
56333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
56433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
565f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// NaCL macros for GCC x86 and x64.
566f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__native_client__)
567f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LABELALIGN ".p2align 5\n"
568f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#else
569f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define LABELALIGN
570f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
571f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__native_client__) && defined(__x86_64__)
572f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// r14 is used for MEMOP macros.
573f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define NACL_R14 "r14",
574f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define BUNDLELOCK ".bundle_lock\n"
575f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define BUNDLEUNLOCK ".bundle_unlock\n"
576f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS(base) "%%nacl:(%%r15,%q" #base ")"
577f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS2(offset, base) "%%nacl:" #offset "(%%r15,%q" #base ")"
578f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMLEA(offset, base) #offset "(%q" #base ")"
579b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define MEMLEA3(offset, index, scale) #offset "(,%q" #index "," #scale ")"
580f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMLEA4(offset, base, index, scale) \
581b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #offset "(%q" #base ",%q" #index "," #scale ")"
582f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMMOVESTRING(s, d) "%%nacl:(%q" #s "),%%nacl:(%q" #d "), %%r15"
583f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMSTORESTRING(reg, d) "%%" #reg ",%%nacl:(%q" #d "), %%r15"
584b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define MEMOPREG(opcode, offset, base, index, scale, reg)                 \
585b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  BUNDLELOCK                                                              \
586b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" #opcode \
587b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " (%%r15,%%r14),%%" #reg "\n" BUNDLEUNLOCK
588b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define MEMOPMEM(opcode, reg, offset, base, index, scale)                 \
589b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  BUNDLELOCK                                                              \
590b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" #opcode \
591b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " %%" #reg ",(%%r15,%%r14)\n" BUNDLEUNLOCK
592b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define MEMOPARG(opcode, offset, base, index, scale, arg)                 \
593b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  BUNDLELOCK                                                              \
594b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" #opcode \
595b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " (%%r15,%%r14),%" #arg "\n" BUNDLEUNLOCK
596b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2)         \
597b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  BUNDLELOCK                                                              \
598b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" #opcode \
599b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " (%%r15,%%r14),%%" #reg1 ",%%" #reg2 "\n" BUNDLEUNLOCK
600b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define VEXTOPMEM(op, sel, reg, offset, base, index, scale)           \
601b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  BUNDLELOCK                                                          \
602b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  "lea " #offset "(%q" #base ",%q" #index "," #scale "),%%r14d\n" #op \
603b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " $" #sel ",%%" #reg ",(%%r15,%%r14)\n" BUNDLEUNLOCK
604f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#else  // defined(__native_client__) && defined(__x86_64__)
605f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define NACL_R14
606f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define BUNDLEALIGN
607f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS(base) "(%" #base ")"
608f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS2(offset, base) #offset "(%" #base ")"
609f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMLEA(offset, base) #offset "(%" #base ")"
610b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define MEMLEA3(offset, index, scale) #offset "(,%" #index "," #scale ")"
611f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMLEA4(offset, base, index, scale) \
612b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #offset "(%" #base ",%" #index "," #scale ")"
613f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMMOVESTRING(s, d)
614f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMSTORESTRING(reg, d)
615f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMOPREG(opcode, offset, base, index, scale, reg) \
616b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #opcode " " #offset "(%" #base ",%" #index "," #scale "),%%" #reg "\n"
617f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMOPMEM(opcode, reg, offset, base, index, scale) \
618b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #opcode " %%" #reg "," #offset "(%" #base ",%" #index "," #scale ")\n"
619f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMOPARG(opcode, offset, base, index, scale, arg) \
620b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #opcode " " #offset "(%" #base ",%" #index "," #scale "),%" #arg "\n"
621b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2)    \
622b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #opcode " " #offset "(%" #base ",%" #index "," #scale "),%%" #reg1 \
623b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard          ",%%" #reg2 "\n"
624f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define VEXTOPMEM(op, sel, reg, offset, base, index, scale) \
625b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  #op " $" #sel ",%%" #reg "," #offset "(%" #base ",%" #index "," #scale ")\n"
626f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif  // defined(__native_client__) && defined(__x86_64__)
627f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
628f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__arm__) || defined(__aarch64__)
629f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#undef MEMACCESS
630f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#if defined(__native_client__)
631f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS(base) ".p2align 3\nbic %" #base ", #0xc0000000\n"
632f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#else
633f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#define MEMACCESS(base)
634f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
635f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang#endif
636f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
637b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// Intel Code Analizer markers.  Insert IACA_START IACA_END around code to be
638b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// measured and then run with iaca -64 libyuv_unittest.
639b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within
640b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// inline assembly blocks.
641b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// example of iaca:
642b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest
643b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
644b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#if defined(__x86_64__) || defined(__i386__)
645b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
646b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_ASM_START  \
647b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  ".byte 0x0F, 0x0B\n"  \
648b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " movl $111, %%ebx\n" \
649b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  ".byte 0x64, 0x67, 0x90\n"
650b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
651b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_ASM_END         \
652b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  " movl $222, %%ebx\n"      \
653b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  ".byte 0x64, 0x67, 0x90\n" \
654b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  ".byte 0x0F, 0x0B\n"
655b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
656b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_SSC_MARK(MARK_ID)                        \
657b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  __asm__ __volatile__("\n\t  movl $" #MARK_ID        \
658b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       ", %%ebx"                      \
659b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       "\n\t  .byte 0x64, 0x67, 0x90" \
660b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       :                              \
661b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       :                              \
662b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       : "memory");
663b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
664b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B");
665b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
666b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#else /* Visual C */
667b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_UD_BYTES \
668b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  { __asm _emit 0x0F __asm _emit 0x0B }
669b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
670b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_SSC_MARK(x) \
671b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 }
672b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
673b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_VC64_START __writegsbyte(111, 111);
674b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_VC64_END __writegsbyte(222, 222);
675b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif
676b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
677b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_START     \
678b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  {                    \
679b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    IACA_UD_BYTES      \
680b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    IACA_SSC_MARK(111) \
681b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  }
682b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#define IACA_END       \
683b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  {                    \
684b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    IACA_SSC_MARK(222) \
685b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard    IACA_UD_BYTES      \
686b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard  }
687b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
688f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_NEON(const uint8* src_y,
689f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
690f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
691f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
692f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
69333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                        int width);
694f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_NEON(const uint8* src_y,
695f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
696f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
697f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
698f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
69933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                        int width);
700f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_NEON(const uint8* y_buf,
701f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* u_buf,
702f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* v_buf,
703f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* a_buf,
704f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
705f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
706f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
707f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_NEON(const uint8* src_y,
708f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
709f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
710f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
711f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
71233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                        int width);
713f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_NEON(const uint8* src_y,
714f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
715f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
716f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_rgba,
717f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
718f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
719f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_NEON(const uint8* src_y,
720f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
721f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
722f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_rgb24,
723f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
72433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
725f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_NEON(const uint8* src_y,
726f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_u,
727f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_v,
728f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_rgb565,
729f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
730f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
731f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_NEON(const uint8* src_y,
732f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
733f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
734f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb1555,
735f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
736f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
737f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_NEON(const uint8* src_y,
738f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
739f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
740f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb4444,
741f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
742f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
743f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_NEON(const uint8* src_y,
744f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_uv,
745f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
746f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
747f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
748f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_NEON(const uint8* src_y,
749f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_uv,
750f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_rgb565,
751f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
752f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
753f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_NEON(const uint8* src_y,
754f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_vu,
755f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
756f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
757f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
758f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_NEON(const uint8* src_yuy2,
759f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
760f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
76133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                        int width);
762f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_NEON(const uint8* src_uyvy,
763f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
764f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
76533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                        int width);
766b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I444ToARGBRow_MSA(const uint8* src_y,
767b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_u,
768b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_v,
769b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
770b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
771b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
772b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I444ToARGBRow_DSPR2(const uint8* src_y,
773b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_u,
774b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_v,
775b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
776b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const struct YuvConstants* yuvconstants,
777b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
778b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB4444Row_DSPR2(const uint8* src_y,
779b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
780b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
781b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb4444,
782b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
783b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
784b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB1555Row_DSPR2(const uint8* src_y,
785b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
786b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
787b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb1555,
788b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
789b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
790b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToARGBRow_DSPR2(const uint8* src_y,
791b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_uv,
792b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
793b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const struct YuvConstants* yuvconstants,
794b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
795b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
796b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGBRow_MSA(const uint8* src_y,
797b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_u,
798b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_v,
799b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
800b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
801b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
802b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGBARow_MSA(const uint8* src_y,
803b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_u,
804b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_v,
805b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_rgba,
806b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
807b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
808b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422AlphaToARGBRow_MSA(const uint8* y_buf,
809b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* u_buf,
810b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* v_buf,
811b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* a_buf,
812b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
813b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const struct YuvConstants* yuvconstants,
814b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
815b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGB24Row_MSA(const uint8* src_y,
816b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_u,
817b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_v,
818b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_rgb24,
819b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const struct YuvConstants* yuvconstants,
820b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
821b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGB565Row_MSA(const uint8* src_y,
822b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_u,
823b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_v,
824b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_rgb565,
825b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const struct YuvConstants* yuvconstants,
826b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
827b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB4444Row_MSA(const uint8* src_y,
828b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
829b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
830b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb4444,
831b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
832b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
833b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB1555Row_MSA(const uint8* src_y,
834b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
835b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
836b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb1555,
837b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
838b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
839b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToARGBRow_MSA(const uint8* src_y,
840b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_uv,
841b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
842b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
843b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
844b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToRGB565Row_MSA(const uint8* src_y,
845b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_uv,
846b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_rgb565,
847b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const struct YuvConstants* yuvconstants,
848b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
849b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV21ToARGBRow_MSA(const uint8* src_y,
850b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_vu,
851b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
852b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
853b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
854b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToARGBRow_MSA(const uint8* src_yuy2,
855b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
856b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
857b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
858b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToARGBRow_MSA(const uint8* src_uyvy,
859b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
860b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const struct YuvConstants* yuvconstants,
861b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
86233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
863f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_AVX2(const uint8* src_argb, uint8* dst_y, int width);
864f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int width);
865f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_SSSE3(const uint8* src_argb, uint8* dst_y, int width);
866f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_AVX2(const uint8* src_argb, uint8* dst_y, int width);
867f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int width);
868f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_SSSE3(const uint8* src_argb, uint8* dst_y, int width);
869f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid BGRAToYRow_SSSE3(const uint8* src_bgra, uint8* dst_y, int width);
870f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ABGRToYRow_SSSE3(const uint8* src_abgr, uint8* dst_y, int width);
871f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBAToYRow_SSSE3(const uint8* src_rgba, uint8* dst_y, int width);
872f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToYRow_SSSE3(const uint8* src_rgb24, uint8* dst_y, int width);
873f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToYRow_SSSE3(const uint8* src_raw, uint8* dst_y, int width);
874f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_NEON(const uint8* src_argb, uint8* dst_y, int width);
875f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_NEON(const uint8* src_argb, uint8* dst_y, int width);
876b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYRow_MSA(const uint8* src_argb, uint8* dst_y, int width);
877b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYJRow_MSA(const uint8* src_argb, uint8* dst_y, int width);
878b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUV444Row_NEON(const uint8* src_argb,
879b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
880b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
881f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
882b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_NEON(const uint8* src_argb,
883b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_argb,
884b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
885b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
886b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
887b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUV444Row_MSA(const uint8* src_argb,
888b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
889b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
890b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
891b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_MSA(const uint8* src_argb,
892b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_argb,
893b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
894b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
895b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
896b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_NEON(const uint8* src_argb,
897b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb,
898b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
899b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
900b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
901b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_NEON(const uint8* src_bgra,
902b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_bgra,
903b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
904b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
905b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
906b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_NEON(const uint8* src_abgr,
907b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_abgr,
908b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
909b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
910b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
911b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_NEON(const uint8* src_rgba,
912b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_rgba,
913b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
914b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
915b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
916b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToUVRow_NEON(const uint8* src_rgb24,
917b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_rgb24,
918b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
919b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
920b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
921b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToUVRow_NEON(const uint8* src_raw,
922b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_raw,
923b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
924b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
925b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
926b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToUVRow_NEON(const uint8* src_rgb565,
927b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int src_stride_rgb565,
928b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
929b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
930b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
931b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToUVRow_NEON(const uint8* src_argb1555,
932b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_argb1555,
933b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
934b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
935b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
936b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToUVRow_NEON(const uint8* src_argb4444,
937b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_argb4444,
938b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
939b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
940b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
941b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_MSA(const uint8* src_argb,
942b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_argb,
943b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
944b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
945b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
946b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_MSA(const uint8* src_bgra,
947b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_bgra,
948b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
949b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
950b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
951b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_MSA(const uint8* src_abgr,
952b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_abgr,
953b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
954b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
955b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
956b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_MSA(const uint8* src_rgba,
957b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_rgba,
958b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
959b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
960b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
961b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToUVRow_MSA(const uint8* src_rgb24,
962b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_rgb24,
963b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
964b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
965b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
966b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToUVRow_MSA(const uint8* src_raw,
967b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int src_stride_raw,
968b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_u,
969b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_v,
970b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
971b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToUVRow_MSA(const uint8* src_rgb565,
972b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_rgb565,
973b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
974b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
975b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
976b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToUVRow_MSA(const uint8* src_argb1555,
977b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_argb1555,
978b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
979b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
980f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
981f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid BGRAToYRow_NEON(const uint8* src_bgra, uint8* dst_y, int width);
982f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ABGRToYRow_NEON(const uint8* src_abgr, uint8* dst_y, int width);
983f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBAToYRow_NEON(const uint8* src_rgba, uint8* dst_y, int width);
984f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToYRow_NEON(const uint8* src_rgb24, uint8* dst_y, int width);
985f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToYRow_NEON(const uint8* src_raw, uint8* dst_y, int width);
986f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToYRow_NEON(const uint8* src_rgb565, uint8* dst_y, int width);
987f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB1555ToYRow_NEON(const uint8* src_argb1555, uint8* dst_y, int width);
988f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB4444ToYRow_NEON(const uint8* src_argb4444, uint8* dst_y, int width);
989b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToYRow_MSA(const uint8* src_bgra, uint8* dst_y, int width);
990b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToYRow_MSA(const uint8* src_abgr, uint8* dst_y, int width);
991b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToYRow_MSA(const uint8* src_rgba, uint8* dst_y, int width);
992b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToYRow_MSA(const uint8* src_rgb24, uint8* dst_y, int width);
993b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToYRow_MSA(const uint8* src_raw, uint8* dst_y, int width);
994b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToYRow_MSA(const uint8* src_rgb565, uint8* dst_y, int width);
995b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToYRow_MSA(const uint8* src_argb1555, uint8* dst_y, int width);
996b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_DSPR2(const uint8* src_bgra,
997b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_bgra,
998b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
999b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1000b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1001b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToYRow_DSPR2(const uint8* src_bgra, uint8* dst_y, int width);
1002b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_DSPR2(const uint8* src_abgr,
1003b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_abgr,
1004b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1005b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1006b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1007b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYRow_DSPR2(const uint8* src_argb, uint8* dst_y, int width);
1008b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToYRow_DSPR2(const uint8* src_abgr, uint8* dst_y, int width);
1009b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_DSPR2(const uint8* src_rgba,
1010b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_rgba,
1011b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1012b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1013b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1014b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToYRow_DSPR2(const uint8* src_rgba, uint8* dst_y, int width);
1015b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_DSPR2(const uint8* src_argb,
1016b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb,
1017b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1018b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1019b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1020f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_C(const uint8* src_argb, uint8* dst_y, int width);
1021f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_C(const uint8* src_argb, uint8* dst_y, int width);
1022f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid BGRAToYRow_C(const uint8* src_bgra, uint8* dst_y, int width);
1023f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ABGRToYRow_C(const uint8* src_abgr, uint8* dst_y, int width);
1024f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBAToYRow_C(const uint8* src_rgba, uint8* dst_y, int width);
1025f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToYRow_C(const uint8* src_rgb24, uint8* dst_y, int width);
1026f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToYRow_C(const uint8* src_raw, uint8* dst_y, int width);
1027f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToYRow_C(const uint8* src_rgb565, uint8* dst_y, int width);
1028f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB1555ToYRow_C(const uint8* src_argb1555, uint8* dst_y, int width);
1029f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB4444ToYRow_C(const uint8* src_argb4444, uint8* dst_y, int width);
1030f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int width);
1031f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int width);
1032f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid BGRAToYRow_Any_SSSE3(const uint8* src_bgra, uint8* dst_y, int width);
1033f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ABGRToYRow_Any_SSSE3(const uint8* src_abgr, uint8* dst_y, int width);
1034f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBAToYRow_Any_SSSE3(const uint8* src_rgba, uint8* dst_y, int width);
1035f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToYRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_y, int width);
1036f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToYRow_Any_SSSE3(const uint8* src_raw, uint8* dst_y, int width);
1037f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int width);
1038f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToYJRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int width);
1039f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid BGRAToYRow_Any_NEON(const uint8* src_bgra, uint8* dst_y, int width);
1040f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ABGRToYRow_Any_NEON(const uint8* src_abgr, uint8* dst_y, int width);
1041f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBAToYRow_Any_NEON(const uint8* src_rgba, uint8* dst_y, int width);
1042f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToYRow_Any_NEON(const uint8* src_rgb24, uint8* dst_y, int width);
1043f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToYRow_Any_NEON(const uint8* src_raw, uint8* dst_y, int width);
1044f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToYRow_Any_NEON(const uint8* src_rgb565, uint8* dst_y, int width);
1045b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToYRow_Any_NEON(const uint8* src_argb1555,
1046b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_y,
1047f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
1048b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToYRow_Any_DSPR2(const uint8* src_bgra, uint8* dst_y, int width);
1049b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYRow_Any_DSPR2(const uint8* src_argb, uint8* dst_y, int width);
1050b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToYRow_Any_DSPR2(const uint8* src_abgr, uint8* dst_y, int width);
1051b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToYRow_Any_DSPR2(const uint8* src_rgba, uint8* dst_y, int width);
1052b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToYRow_Any_NEON(const uint8* src_argb4444,
1053b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_y,
1054f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
1055b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToYRow_Any_MSA(const uint8* src_bgra, uint8* dst_y, int width);
1056b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToYRow_Any_MSA(const uint8* src_abgr, uint8* dst_y, int width);
1057b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToYRow_Any_MSA(const uint8* src_rgba, uint8* dst_y, int width);
1058b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYJRow_Any_MSA(const uint8* src_argb, uint8* dst_y, int width);
1059b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToYRow_Any_MSA(const uint8* src_argb, uint8* dst_y, int width);
1060b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToYRow_Any_MSA(const uint8* src_rgb24, uint8* dst_y, int width);
1061b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToYRow_Any_MSA(const uint8* src_raw, uint8* dst_y, int width);
1062b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToYRow_Any_MSA(const uint8* src_rgb565, uint8* dst_y, int width);
1063b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToYRow_Any_MSA(const uint8* src_argb1555, uint8* dst_y, int width);
1064b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
1065b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_AVX2(const uint8* src_argb,
1066b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int src_stride_argb,
1067b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
1068b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
1069b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
1070b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_AVX2(const uint8* src_argb,
1071b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb,
1072b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1073b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1074b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1075b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_SSSE3(const uint8* src_argb,
1076b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb,
1077b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1078b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1079b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1080b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_SSSE3(const uint8* src_argb,
1081b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int src_stride_argb,
1082b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
1083b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
1084b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
1085b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_SSSE3(const uint8* src_bgra,
1086b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_bgra,
1087b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1088b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1089b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1090b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_SSSE3(const uint8* src_abgr,
1091b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_abgr,
1092b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1093b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1094b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1095b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_SSSE3(const uint8* src_rgba,
1096b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_rgba,
1097b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1098b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1099b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1100b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_Any_AVX2(const uint8* src_argb,
1101b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_argb,
1102b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1103b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1104b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1105b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_Any_AVX2(const uint8* src_argb,
1106b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_argb,
1107b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1108b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1109b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1110b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_Any_SSSE3(const uint8* src_argb,
1111b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_argb,
1112b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1113b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1114b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1115b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_Any_SSSE3(const uint8* src_argb,
1116b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int src_stride_argb,
1117b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_u,
1118b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_v,
1119b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
1120b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_Any_SSSE3(const uint8* src_bgra,
1121b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_bgra,
1122b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1123b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1124b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1125b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_Any_SSSE3(const uint8* src_abgr,
1126b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_abgr,
1127b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1128b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1129b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1130b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_Any_SSSE3(const uint8* src_rgba,
1131b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_rgba,
1132b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1133b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1134b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1135b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUV444Row_Any_NEON(const uint8* src_argb,
1136b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
1137b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
1138f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
1139b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_Any_NEON(const uint8* src_argb,
1140b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_argb,
1141b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1142b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1143b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1144b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUV444Row_Any_MSA(const uint8* src_argb,
1145b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_u,
1146b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_v,
1147b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
1148b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_Any_MSA(const uint8* src_argb,
1149b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_argb,
1150b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1151b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1152b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1153b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_Any_NEON(const uint8* src_argb,
1154b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_argb,
1155b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1156b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1157b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1158b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_Any_NEON(const uint8* src_bgra,
1159b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_bgra,
1160b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1161b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1162b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1163b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_Any_NEON(const uint8* src_abgr,
1164b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_abgr,
1165b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1166b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1167b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1168b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_Any_NEON(const uint8* src_rgba,
1169b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_rgba,
1170b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1171b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1172b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1173b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToUVRow_Any_NEON(const uint8* src_rgb24,
1174b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_rgb24,
1175b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1176b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1177b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1178b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToUVRow_Any_NEON(const uint8* src_raw,
1179b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_raw,
1180b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1181b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1182b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1183b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToUVRow_Any_NEON(const uint8* src_rgb565,
1184b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int src_stride_rgb565,
1185b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_u,
1186b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_v,
1187b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
1188f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB1555ToUVRow_Any_NEON(const uint8* src_argb1555,
1189f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int src_stride_argb1555,
1190b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_u,
1191b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_v,
1192b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
1193f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB4444ToUVRow_Any_NEON(const uint8* src_argb4444,
1194f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int src_stride_argb4444,
1195b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_u,
1196b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_v,
1197b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
1198b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_Any_MSA(const uint8* src_argb,
1199b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_argb,
1200b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1201b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1202b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1203b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_Any_MSA(const uint8* src_bgra,
1204b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_bgra,
1205b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1206b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1207b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1208b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_Any_MSA(const uint8* src_abgr,
1209b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_abgr,
1210b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1211b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1212b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1213b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_Any_MSA(const uint8* src_rgba,
1214b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int src_stride_rgba,
1215b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1216b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1217b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1218b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToUVRow_Any_MSA(const uint8* src_rgb24,
1219b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int src_stride_rgb24,
1220b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1221b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1222b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1223b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToUVRow_Any_MSA(const uint8* src_raw,
1224b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int src_stride_raw,
1225b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
1226b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
1227b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
1228b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToUVRow_Any_MSA(const uint8* src_rgb565,
1229b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_rgb565,
1230b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1231b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1232b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1233b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToUVRow_Any_MSA(const uint8* src_argb1555,
1234b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int src_stride_argb1555,
1235b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
1236b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
1237b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1238b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_Any_DSPR2(const uint8* src_bgra,
1239b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_bgra,
1240b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1241b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1242b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1243b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_Any_DSPR2(const uint8* src_abgr,
1244b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_abgr,
1245b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1246b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1247b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1248b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_Any_DSPR2(const uint8* src_rgba,
1249b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_rgba,
1250b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1251b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1252b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1253b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_Any_DSPR2(const uint8* src_argb,
1254b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int src_stride_argb,
1255b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_u,
1256b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_v,
1257b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1258b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_C(const uint8* src_argb,
1259b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int src_stride_argb,
1260b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
1261b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
1262b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
1263b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_C(const uint8* src_argb,
1264b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int src_stride_argb,
1265b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_u,
1266b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_v,
1267b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
1268b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVRow_C(const uint8* src_argb,
1269b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int src_stride_argb,
1270b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
1271b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
1272b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
1273b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToUVJRow_C(const uint8* src_argb,
1274b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int src_stride_argb,
1275b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_u,
1276b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_v,
1277b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
1278b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BGRAToUVRow_C(const uint8* src_bgra,
1279b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int src_stride_bgra,
1280b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
1281b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
1282b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
1283b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ABGRToUVRow_C(const uint8* src_abgr,
1284b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int src_stride_abgr,
1285b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
1286b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
1287b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
1288b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGBAToUVRow_C(const uint8* src_rgba,
1289b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int src_stride_rgba,
1290b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
1291b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
1292b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
1293b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToUVRow_C(const uint8* src_rgb24,
1294b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int src_stride_rgb24,
1295b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_u,
1296b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_v,
1297b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
1298b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToUVRow_C(const uint8* src_raw,
1299b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  int src_stride_raw,
1300b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_u,
1301b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_v,
1302b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  int width);
1303b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToUVRow_C(const uint8* src_rgb565,
1304b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_stride_rgb565,
1305b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
1306b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
1307b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
1308b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToUVRow_C(const uint8* src_argb1555,
1309b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb1555,
1310b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1311b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1312b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1313b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToUVRow_C(const uint8* src_argb4444,
1314b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int src_stride_argb4444,
1315b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1316b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1317b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
1318f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1319f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToUV444Row_SSSE3(const uint8* src_argb,
1320b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1321b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1322b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1323f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToUV444Row_Any_SSSE3(const uint8* src_argb,
1324b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_u,
1325b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_v,
1326b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
1327f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1328f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToUV444Row_C(const uint8* src_argb,
1329b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
1330b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
1331b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
133233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1333f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_AVX2(const uint8* src, uint8* dst, int width);
133433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid MirrorRow_SSSE3(const uint8* src, uint8* dst, int width);
133533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid MirrorRow_NEON(const uint8* src, uint8* dst, int width);
1336f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_DSPR2(const uint8* src, uint8* dst, int width);
1337b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MirrorRow_MSA(const uint8* src, uint8* dst, int width);
133833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid MirrorRow_C(const uint8* src, uint8* dst, int width);
1339f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);
1340f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_Any_SSSE3(const uint8* src, uint8* dst, int width);
1341f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);
1342f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);
1343b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MirrorRow_Any_MSA(const uint8* src, uint8* dst, int width);
134433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1345b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MirrorUVRow_SSSE3(const uint8* src_uv,
1346b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1347b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1348f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       int width);
1349b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MirrorUVRow_NEON(const uint8* src_uv,
1350b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
1351b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
1352f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      int width);
1353b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MirrorUVRow_DSPR2(const uint8* src_uv,
1354b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_u,
1355b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_v,
1356f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       int width);
1357f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int width);
135833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1359f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width);
1360f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_SSE2(const uint8* src, uint8* dst, int width);
1361f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width);
1362b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMirrorRow_MSA(const uint8* src, uint8* dst, int width);
136333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBMirrorRow_C(const uint8* src, uint8* dst, int width);
1364f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);
1365f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);
1366f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBMirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);
1367b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMirrorRow_Any_MSA(const uint8* src, uint8* dst, int width);
1368f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1369f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int width);
1370b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_SSE2(const uint8* src_uv,
1371b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
1372b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
1373f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1374b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_AVX2(const uint8* src_uv,
1375b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
1376b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
1377f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1378b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_NEON(const uint8* src_uv,
1379b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
1380b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
1381f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1382b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_DSPR2(const uint8* src_uv,
1383b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
1384b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
1385f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      int width);
1386b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_Any_SSE2(const uint8* src_uv,
1387b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1388b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1389f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1390b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_Any_AVX2(const uint8* src_uv,
1391b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1392b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1393f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1394b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_Any_NEON(const uint8* src_uv,
1395b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
1396b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
1397f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1398b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SplitUVRow_Any_DSPR2(const uint8* src_uv,
1399b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
1400b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
1401f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
140233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1403b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_C(const uint8* src_u,
1404b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  const uint8* src_v,
1405b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_uv,
1406f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                  int width);
1407b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_SSE2(const uint8* src_u,
1408b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_v,
1409b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_uv,
1410f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1411b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_AVX2(const uint8* src_u,
1412b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_v,
1413b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_uv,
1414f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1415b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_NEON(const uint8* src_u,
1416b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_v,
1417b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_uv,
1418f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1419b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_MSA(const uint8* src_u,
1420b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_v,
1421b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_uv,
1422b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
1423b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_Any_SSE2(const uint8* src_u,
1424b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_v,
1425b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_uv,
1426f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1427b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_Any_AVX2(const uint8* src_u,
1428b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_v,
1429b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_uv,
1430f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1431b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_Any_NEON(const uint8* src_u,
1432b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_v,
1433b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_uv,
1434f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1435b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid MergeUVRow_Any_MSA(const uint8* src_u,
1436b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_v,
1437b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_uv,
1438b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
143933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
144033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid CopyRow_SSE2(const uint8* src, uint8* dst, int count);
1441f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_AVX(const uint8* src, uint8* dst, int count);
1442f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_ERMS(const uint8* src, uint8* dst, int count);
144333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid CopyRow_NEON(const uint8* src, uint8* dst, int count);
1444f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_MIPS(const uint8* src, uint8* dst, int count);
144533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid CopyRow_C(const uint8* src, uint8* dst, int count);
1446f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_Any_SSE2(const uint8* src, uint8* dst, int count);
1447f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_Any_AVX(const uint8* src, uint8* dst, int count);
1448f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_Any_NEON(const uint8* src, uint8* dst, int count);
1449f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1450f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid CopyRow_16_C(const uint16* src, uint16* dst, int count);
1451f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1452f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyAlphaRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1453f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyAlphaRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
1454f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyAlphaRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
1455b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBCopyAlphaRow_Any_SSE2(const uint8* src_argb,
1456b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
1457f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
1458b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBCopyAlphaRow_Any_AVX2(const uint8* src_argb,
1459b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
1460f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
1461f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1462f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBExtractAlphaRow_C(const uint8* src_argb, uint8* dst_a, int width);
1463f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBExtractAlphaRow_SSE2(const uint8* src_argb, uint8* dst_a, int width);
1464b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBExtractAlphaRow_AVX2(const uint8* src_argb, uint8* dst_a, int width);
1465f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBExtractAlphaRow_NEON(const uint8* src_argb, uint8* dst_a, int width);
1466b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBExtractAlphaRow_Any_SSE2(const uint8* src_argb,
1467b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  uint8* dst_a,
1468f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  int width);
1469b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBExtractAlphaRow_Any_AVX2(const uint8* src_argb,
1470b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  uint8* dst_a,
1471b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  int width);
1472b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBExtractAlphaRow_Any_NEON(const uint8* src_argb,
1473b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  uint8* dst_a,
1474f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  int width);
1475f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1476f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyYToAlphaRow_C(const uint8* src_y, uint8* dst_argb, int width);
1477f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyYToAlphaRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
1478f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBCopyYToAlphaRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
1479b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBCopyYToAlphaRow_Any_SSE2(const uint8* src_y,
1480b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  uint8* dst_argb,
1481f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  int width);
1482b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBCopyYToAlphaRow_Any_AVX2(const uint8* src_y,
1483b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  uint8* dst_argb,
1484f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  int width);
1485f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1486f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_C(uint8* dst, uint8 v8, int count);
1487f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_X86(uint8* dst, uint8 v8, int count);
1488f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_ERMS(uint8* dst, uint8 v8, int count);
1489f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_NEON(uint8* dst, uint8 v8, int count);
1490f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_Any_X86(uint8* dst, uint8 v8, int count);
1491f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid SetRow_Any_NEON(uint8* dst, uint8 v8, int count);
1492f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1493f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBSetRow_C(uint8* dst_argb, uint32 v32, int count);
1494f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBSetRow_X86(uint8* dst_argb, uint32 v32, int count);
1495f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBSetRow_NEON(uint8* dst_argb, uint32 v32, int count);
1496f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBSetRow_Any_NEON(uint8* dst_argb, uint32 v32, int count);
1497b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSetRow_MSA(uint8* dst_argb, uint32 v32, int count);
1498b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSetRow_Any_MSA(uint8* dst_argb, uint32 v32, int count);
1499f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1500f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// ARGBShufflers for BGRAToARGB etc.
1501b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_C(const uint8* src_argb,
1502b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_argb,
1503b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      const uint8* shuffler,
1504b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
1505b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_SSE2(const uint8* src_argb,
1506b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
1507b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* shuffler,
1508b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1509b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_SSSE3(const uint8* src_argb,
1510b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
1511b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* shuffler,
1512b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
1513b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_AVX2(const uint8* src_argb,
1514b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
1515b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* shuffler,
1516b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1517b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_NEON(const uint8* src_argb,
1518b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
1519b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* shuffler,
1520b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
1521b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_MSA(const uint8* src_argb,
1522b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_argb,
1523b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* shuffler,
1524b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
1525b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_Any_SSE2(const uint8* src_argb,
1526b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1527b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* shuffler,
1528b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1529b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_Any_SSSE3(const uint8* src_argb,
1530b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1531b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* shuffler,
1532b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
1533b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_Any_AVX2(const uint8* src_argb,
1534b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1535b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* shuffler,
1536b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1537b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_Any_NEON(const uint8* src_argb,
1538b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1539b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* shuffler,
1540b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1541b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShuffleRow_Any_MSA(const uint8* src_argb,
1542b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1543b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* shuffler,
1544b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
1545f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1546f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToARGBRow_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int width);
1547f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToARGBRow_SSSE3(const uint8* src_raw, uint8* dst_argb, int width);
1548f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToRGB24Row_SSSE3(const uint8* src_raw, uint8* dst_rgb24, int width);
1549f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb, int width);
1550b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_SSE2(const uint8* src_argb1555,
1551b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1552f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1553b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_SSE2(const uint8* src_argb4444,
1554b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1555f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1556f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToARGBRow_AVX2(const uint8* src_rgb565, uint8* dst_argb, int width);
1557b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_AVX2(const uint8* src_argb1555,
1558b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1559f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1560b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_AVX2(const uint8* src_argb4444,
1561b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1562f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
156333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1564f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToARGBRow_NEON(const uint8* src_rgb24, uint8* dst_argb, int width);
1565b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_MSA(const uint8* src_rgb24, uint8* dst_argb, int width);
1566f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToARGBRow_NEON(const uint8* src_raw, uint8* dst_argb, int width);
1567b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToARGBRow_MSA(const uint8* src_raw, uint8* dst_argb, int width);
1568f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToRGB24Row_NEON(const uint8* src_raw, uint8* dst_rgb24, int width);
1569b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToRGB24Row_MSA(const uint8* src_raw, uint8* dst_rgb24, int width);
1570f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToARGBRow_NEON(const uint8* src_rgb565, uint8* dst_argb, int width);
1571b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_MSA(const uint8* src_rgb565, uint8* dst_argb, int width);
1572b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_NEON(const uint8* src_argb1555,
1573b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1574f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1575b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_MSA(const uint8* src_argb1555,
1576b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
1577b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1578b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_NEON(const uint8* src_argb4444,
1579b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
1580f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1581b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_DSPR2(const uint8* src_rgb24, uint8* dst_argb, int width);
1582b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToARGBRow_DSPR2(const uint8* src_raw, uint8* dst_argb, int width);
1583b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_DSPR2(const uint8* src_rgb565, uint8* dst_argb, int width);
1584b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_DSPR2(const uint8* src_argb1555,
1585b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1586b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1587b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_DSPR2(const uint8* src_argb4444,
1588b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1589b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1590b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_MSA(const uint8* src_argb4444,
1591b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
1592b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
1593f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB24ToARGBRow_C(const uint8* src_rgb24, uint8* dst_argb, int width);
1594f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToARGBRow_C(const uint8* src_raw, uint8* dst_argb, int width);
1595f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToRGB24Row_C(const uint8* src_raw, uint8* dst_rgb24, int width);
1596f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGB565ToARGBRow_C(const uint8* src_rgb, uint8* dst_argb, int width);
1597f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB1555ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1598f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGB4444ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int width);
1599b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_Any_SSSE3(const uint8* src_rgb24,
1600b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1601f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
1602f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToARGBRow_Any_SSSE3(const uint8* src_raw, uint8* dst_argb, int width);
1603f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToRGB24Row_Any_SSSE3(const uint8* src_raw, uint8* dst_rgb24, int width);
160433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1605b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_Any_SSE2(const uint8* src_rgb565,
1606b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1607f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
1608b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_Any_SSE2(const uint8* src_argb1555,
1609b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1610f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
1611b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_Any_SSE2(const uint8* src_argb4444,
1612b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1613f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
1614b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_Any_AVX2(const uint8* src_rgb565,
1615b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1616f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
1617b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_Any_AVX2(const uint8* src_argb1555,
1618b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1619f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
1620b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_Any_AVX2(const uint8* src_argb4444,
1621b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1622f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
162333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1624b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_Any_NEON(const uint8* src_rgb24,
1625b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1626f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
1627b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_Any_MSA(const uint8* src_rgb24, uint8* dst_argb, int width);
1628f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToARGBRow_Any_NEON(const uint8* src_raw, uint8* dst_argb, int width);
1629b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToARGBRow_Any_MSA(const uint8* src_raw, uint8* dst_argb, int width);
1630f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RAWToRGB24Row_Any_NEON(const uint8* src_raw, uint8* dst_rgb24, int width);
1631b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToRGB24Row_Any_MSA(const uint8* src_raw, uint8* dst_rgb24, int width);
1632b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_Any_NEON(const uint8* src_rgb565,
1633b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1634f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
1635b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_Any_MSA(const uint8* src_rgb565,
1636b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
1637b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1638b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_Any_NEON(const uint8* src_argb1555,
1639b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1640f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
1641b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_Any_MSA(const uint8* src_argb1555,
1642b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
1643b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
1644b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_Any_NEON(const uint8* src_argb4444,
1645b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
1646f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
1647b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB24ToARGBRow_Any_DSPR2(const uint8* src_rgb24,
1648b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
1649b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
1650b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RAWToARGBRow_Any_DSPR2(const uint8* src_raw, uint8* dst_argb, int width);
1651b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid RGB565ToARGBRow_Any_DSPR2(const uint8* src_rgb565,
1652b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
1653b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
1654b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB1555ToARGBRow_Any_DSPR2(const uint8* src_argb1555,
1655b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
1656b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int width);
1657b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_Any_DSPR2(const uint8* src_argb4444,
1658b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
1659b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int width);
1660b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
1661b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGB4444ToARGBRow_Any_MSA(const uint8* src_argb4444,
1662b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
1663b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
1664f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1665f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB24Row_SSSE3(const uint8* src_argb, uint8* dst_rgb, int width);
1666f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRAWRow_SSSE3(const uint8* src_argb, uint8* dst_rgb, int width);
1667f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int width);
1668f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB1555Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int width);
1669f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB4444Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int width);
1670f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1671b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_C(const uint8* src_argb,
1672b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_rgb,
1673b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint32 dither4,
1674b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
1675b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_SSE2(const uint8* src_argb,
1676b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
1677b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint32 dither4,
1678b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                int width);
1679b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_AVX2(const uint8* src_argb,
1680b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
1681b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint32 dither4,
1682b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                int width);
1683f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1684f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int width);
1685f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB1555Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int width);
1686f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB4444Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int width);
1687f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1688f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB24Row_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
1689f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRAWRow_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
1690f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
1691f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
1692f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB4444Row_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
1693b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_NEON(const uint8* src_argb,
1694b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
1695b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint32 dither4,
1696b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                int width);
1697b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB24Row_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
1698b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRAWRow_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
1699b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565Row_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
1700b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB1555Row_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
1701b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB4444Row_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
1702b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_MSA(const uint8* src_argb,
1703b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_rgb,
1704b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const uint32 dither4,
1705b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
1706b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
1707f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGBARow_C(const uint8* src_argb, uint8* dst_rgb, int width);
1708f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB24Row_C(const uint8* src_argb, uint8* dst_rgb, int width);
1709f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRAWRow_C(const uint8* src_argb, uint8* dst_rgb, int width);
1710f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_C(const uint8* src_argb, uint8* dst_rgb, int width);
1711f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB1555Row_C(const uint8* src_argb, uint8* dst_rgb, int width);
1712f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToARGB4444Row_C(const uint8* src_argb, uint8* dst_rgb, int width);
1713f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1714f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
1715f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
1716f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int width);
1717b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid J400ToARGBRow_MSA(const uint8* src_y, uint8* dst_argb, int width);
1718f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width);
1719f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int width);
1720f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int width);
1721f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid J400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int width);
1722b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid J400ToARGBRow_Any_MSA(const uint8* src_y, uint8* dst_argb, int width);
1723f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
1724f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_C(const uint8* src_y,
1725f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
1726f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
1727f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1728f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
172933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1730f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_C(const uint8* src_y,
1731f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
1732f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
1733f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1734f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
173533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1736f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_C(const uint8* src_y,
1737f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
1738f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
1739f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1740f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
174133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1742f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_C(const uint8* y_buf,
1743f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* u_buf,
1744f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* v_buf,
1745f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* a_buf,
1746f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_argb,
1747f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
1748f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
1749f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_C(const uint8* src_y,
1750f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_uv,
1751f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1752f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
175333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1754f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_C(const uint8* src_y,
1755f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       const uint8* src_uv,
1756f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       uint8* dst_argb,
1757f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       const struct YuvConstants* yuvconstants,
1758f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       int width);
1759f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_C(const uint8* src_y,
1760f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_uv,
1761f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1762f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
176333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1764f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_C(const uint8* src_yuy2,
1765f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1766f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
176733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                     int width);
1768f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_C(const uint8* src_uyvy,
1769f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_argb,
1770f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
1771f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1772f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_C(const uint8* src_y,
1773f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
1774f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
1775f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     uint8* dst_rgba,
1776f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const struct YuvConstants* yuvconstants,
1777f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     int width);
1778f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_C(const uint8* src_y,
1779f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      const uint8* src_u,
1780f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      const uint8* src_v,
1781f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      uint8* dst_rgb24,
1782f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      const struct YuvConstants* yuvconstants,
178333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                      int width);
1784f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_C(const uint8* src_y,
1785f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1786f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1787f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb4444,
1788f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
178933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1790f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_C(const uint8* src_y,
1791f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1792f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1793f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb4444,
1794f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
179533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1796f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_C(const uint8* src_y,
1797f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       const uint8* src_u,
1798f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       const uint8* src_v,
1799f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       uint8* dst_rgb565,
1800f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       const struct YuvConstants* yuvconstants,
1801f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       int width);
1802f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_AVX2(const uint8* src_y,
1803f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
1804f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
1805f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1806f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1807f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1808f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_AVX2(const uint8* src_y,
1809f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
1810f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
1811f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1812f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1813f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1814f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_AVX2(const uint8* src_y,
1815f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
1816f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
1817f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1818f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1819f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1820f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_SSSE3(const uint8* src_y,
1821f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1822f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1823f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1824f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
182533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1826f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_AVX2(const uint8* src_y,
1827f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
1828f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
1829f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1830f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1831f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1832f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_SSSE3(const uint8* src_y,
1833f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1834f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1835f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1836f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
183733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1838f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_AVX2(const uint8* src_y,
1839f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
1840f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
1841f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1842f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1843f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1844f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_SSSE3(const uint8* src_y,
1845f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1846f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1847f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1848f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
184933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1850f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_SSSE3(const uint8* y_buf,
1851f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* u_buf,
1852f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* v_buf,
1853f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* a_buf,
1854f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_argb,
1855f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
1856f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
1857f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_AVX2(const uint8* y_buf,
1858f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* u_buf,
1859f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* v_buf,
1860f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* a_buf,
1861f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
1862f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
1863f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
1864f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_SSSE3(const uint8* src_y,
1865f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1866f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1867f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1868f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
186933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1870f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_SSSE3(const uint8* src_y,
1871f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_uv,
1872f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1873f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
187433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                         int width);
1875f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_AVX2(const uint8* src_y,
1876f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_uv,
1877f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1878f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1879f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1880f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_SSSE3(const uint8* src_y,
1881f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           const uint8* src_uv,
1882f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           uint8* dst_argb,
1883f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           const struct YuvConstants* yuvconstants,
1884f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           int width);
1885f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_AVX2(const uint8* src_y,
1886f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_uv,
1887f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_argb,
1888f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
1889f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
1890f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_SSSE3(const uint8* src_y,
1891f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_uv,
1892f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1893f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
1894f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1895f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_AVX2(const uint8* src_y,
1896f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_uv,
1897f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1898f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1899f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1900f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_SSSE3(const uint8* src_yuy2,
1901f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1902f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
1903f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1904f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_SSSE3(const uint8* src_uyvy,
1905f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
1906f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
1907f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1908f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_AVX2(const uint8* src_yuy2,
1909f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1910f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1911f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1912f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_AVX2(const uint8* src_uyvy,
1913f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        uint8* dst_argb,
1914f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const struct YuvConstants* yuvconstants,
1915f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        int width);
1916f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_SSSE3(const uint8* src_y,
1917f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1918f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1919f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_rgba,
1920f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
1921f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1922f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_SSSE3(const uint8* src_y,
1923f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
1924f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
1925f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
1926f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
192733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
1928f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_AVX2(const uint8* src_y,
1929f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
1930f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
1931f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
1932f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
1933f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1934f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_SSSE3(const uint8* src_y,
1935f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
1936f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
1937f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
1938f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
193933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
1940f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_AVX2(const uint8* src_y,
1941f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
1942f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
1943f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
1944f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
1945f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1946f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_SSSE3(const uint8* src_y,
1947f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           const uint8* src_u,
1948f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           const uint8* src_v,
1949f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           uint8* dst_argb,
1950f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           const struct YuvConstants* yuvconstants,
1951f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                           int width);
1952f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_AVX2(const uint8* src_y,
1953f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_u,
1954f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_v,
1955f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_argb,
1956f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
1957f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
1958f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_SSSE3(const uint8* src_y,
1959f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_u,
1960f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const uint8* src_v,
1961f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          uint8* dst_rgb24,
1962f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          const struct YuvConstants* yuvconstants,
1963f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int width);
1964f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_AVX2(const uint8* src_y,
1965f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
1966f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
1967f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_rgb24,
1968f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
1969f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
1970f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_Any_AVX2(const uint8* src_y,
1971f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
1972f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
1973f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
1974f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
1975f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1976f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_Any_AVX2(const uint8* src_y,
1977f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
1978f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
1979f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
1980f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
1981f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1982f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_Any_SSSE3(const uint8* src_y,
1983f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
1984f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
1985f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
1986f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
198733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
1988f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_Any_AVX2(const uint8* src_y,
1989f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
1990f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
1991f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
1992f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
1993f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
1994f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_Any_SSSE3(const uint8* src_y,
1995f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
1996f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
1997f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
1998f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
199933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
2000f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_Any_SSSE3(const uint8* y_buf,
2001f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  const uint8* u_buf,
2002f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  const uint8* v_buf,
2003f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  const uint8* a_buf,
2004f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  uint8* dst_argb,
2005f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  const struct YuvConstants* yuvconstants,
2006f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                  int width);
2007f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_Any_AVX2(const uint8* y_buf,
2008f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* u_buf,
2009f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* v_buf,
2010f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* a_buf,
2011f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 uint8* dst_argb,
2012f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const struct YuvConstants* yuvconstants,
2013f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
2014f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_Any_SSSE3(const uint8* src_y,
2015f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_uv,
2016f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2017f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
201833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
2019f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_Any_AVX2(const uint8* src_y,
2020f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_uv,
2021f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2022f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2023f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2024f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_Any_SSSE3(const uint8* src_y,
2025f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_vu,
2026f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2027f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
202833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
2029f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_Any_AVX2(const uint8* src_y,
2030f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_vu,
2031f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2032f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2033f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2034f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_Any_SSSE3(const uint8* src_y,
2035f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               const uint8* src_uv,
2036f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               uint8* dst_argb,
2037f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               const struct YuvConstants* yuvconstants,
2038f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
2039f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_Any_AVX2(const uint8* src_y,
2040f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_uv,
2041f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_argb,
2042f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
2043f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
2044f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_Any_SSSE3(const uint8* src_yuy2,
2045f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2046f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
2047f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
2048f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_Any_SSSE3(const uint8* src_uyvy,
2049f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2050f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
2051f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
2052f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_Any_AVX2(const uint8* src_yuy2,
2053f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2054f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2055f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2056f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_Any_AVX2(const uint8* src_uyvy,
2057f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2058f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2059f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2060f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_Any_SSSE3(const uint8* src_y,
2061f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
2062f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
2063f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_rgba,
2064f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
2065f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int width);
2066f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_Any_SSSE3(const uint8* src_y,
2067f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_u,
2068f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_v,
2069f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 uint8* dst_rgba,
2070f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const struct YuvConstants* yuvconstants,
2071f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
2072f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_Any_AVX2(const uint8* src_y,
2073f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_u,
2074f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_v,
2075f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                uint8* dst_rgba,
2076f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const struct YuvConstants* yuvconstants,
2077f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2078f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_Any_SSSE3(const uint8* src_y,
2079f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_u,
2080f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_v,
2081f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 uint8* dst_rgba,
2082f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const struct YuvConstants* yuvconstants,
2083f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
2084f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_Any_AVX2(const uint8* src_y,
2085f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_u,
2086f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_v,
2087f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                uint8* dst_rgba,
2088f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const struct YuvConstants* yuvconstants,
2089f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2090f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_Any_SSSE3(const uint8* src_y,
2091f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               const uint8* src_u,
2092f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               const uint8* src_v,
2093f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               uint8* dst_rgba,
2094f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               const struct YuvConstants* yuvconstants,
2095f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
2096f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_Any_AVX2(const uint8* src_y,
2097f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_u,
2098f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_v,
2099f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_rgba,
2100f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
2101f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
2102f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_Any_SSSE3(const uint8* src_y,
2103f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_u,
2104f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_v,
2105f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_argb,
2106f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
2107f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
2108f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_Any_AVX2(const uint8* src_y,
2109f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
2110f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
2111f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2112f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
211333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
211433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2115f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width);
2116f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);
2117f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);
2118f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int width);
2119b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I400ToARGBRow_MSA(const uint8* src_y, uint8* dst_argb, int width);
2120f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int width);
2121f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int width);
2122f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int width);
2123b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I400ToARGBRow_Any_MSA(const uint8* src_y, uint8* dst_argb, int width);
212433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
212533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// ARGB preattenuated alpha blend.
2126b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBBlendRow_SSSE3(const uint8* src_argb,
2127b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_argb1,
2128b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_argb,
2129b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2130b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBBlendRow_NEON(const uint8* src_argb,
2131b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_argb1,
2132b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
2133b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2134b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBBlendRow_C(const uint8* src_argb,
2135b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_argb1,
2136b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_argb,
2137b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
213833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2139f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Unattenuated planar alpha blend.
2140b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BlendPlaneRow_SSSE3(const uint8* src0,
2141b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src1,
2142b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* alpha,
2143b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst,
2144b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2145b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BlendPlaneRow_Any_SSSE3(const uint8* src0,
2146b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src1,
2147b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* alpha,
2148b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst,
2149b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2150b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BlendPlaneRow_AVX2(const uint8* src0,
2151b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src1,
2152b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* alpha,
2153b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst,
2154b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2155b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BlendPlaneRow_Any_AVX2(const uint8* src0,
2156b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* src1,
2157b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* alpha,
2158b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst,
2159b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2160b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid BlendPlaneRow_C(const uint8* src0,
2161b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src1,
2162b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* alpha,
2163b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst,
2164b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2165f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2166f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// ARGB multiply images. Same API as Blend, but these require
2167f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// pointer and width alignment for SSE2.
2168b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_C(const uint8* src_argb,
2169b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_argb1,
2170b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
2171b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2172b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_SSE2(const uint8* src_argb,
2173b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2174b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2175b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2176b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_Any_SSE2(const uint8* src_argb,
2177b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2178b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2179b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2180b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_AVX2(const uint8* src_argb,
2181b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2182b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2183b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2184b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_Any_AVX2(const uint8* src_argb,
2185b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2186b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2187b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2188b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_NEON(const uint8* src_argb,
2189b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2190b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2191b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2192b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_Any_NEON(const uint8* src_argb,
2193b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2194b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2195b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2196b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_MSA(const uint8* src_argb,
2197b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_argb1,
2198b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
2199b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2200b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBMultiplyRow_Any_MSA(const uint8* src_argb,
2201b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_argb1,
2202b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2203b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2204f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2205f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// ARGB add images.
2206b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_C(const uint8* src_argb,
2207b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  const uint8* src_argb1,
2208b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_argb,
2209b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  int width);
2210b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_SSE2(const uint8* src_argb,
2211b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_argb1,
2212b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
2213b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2214b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_Any_SSE2(const uint8* src_argb,
2215b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_argb1,
2216b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
2217b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2218b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_AVX2(const uint8* src_argb,
2219b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_argb1,
2220b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
2221b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2222b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_Any_AVX2(const uint8* src_argb,
2223b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_argb1,
2224b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
2225b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2226b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_NEON(const uint8* src_argb,
2227b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_argb1,
2228b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
2229b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2230b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_Any_NEON(const uint8* src_argb,
2231b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_argb1,
2232b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
2233b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2234b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_MSA(const uint8* src_argb,
2235b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_argb1,
2236b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_argb,
2237b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
2238b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAddRow_Any_MSA(const uint8* src_argb,
2239b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_argb1,
2240b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_argb,
2241b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2242f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2243f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// ARGB subtract images. Same API as Blend, but these require
2244f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// pointer and width alignment for SSE2.
2245b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_C(const uint8* src_argb,
2246b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_argb1,
2247b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
2248b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2249b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_SSE2(const uint8* src_argb,
2250b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2251b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2252b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2253b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_Any_SSE2(const uint8* src_argb,
2254b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2255b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2256b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2257b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_AVX2(const uint8* src_argb,
2258b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2259b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2260b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2261b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_Any_AVX2(const uint8* src_argb,
2262b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2263b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2264b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2265b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_NEON(const uint8* src_argb,
2266b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_argb1,
2267b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2268b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2269b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_Any_NEON(const uint8* src_argb,
2270b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_argb1,
2271b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2272b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2273b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_MSA(const uint8* src_argb,
2274b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_argb1,
2275b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
2276b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2277b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSubtractRow_Any_MSA(const uint8* src_argb,
2278b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_argb1,
2279b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2280b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2281f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2282f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB24Row_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int width);
2283f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRAWRow_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int width);
2284f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int width);
2285b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB1555Row_Any_SSE2(const uint8* src_argb,
2286b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2287f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2288b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB4444Row_Any_SSE2(const uint8* src_argb,
2289b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2290f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2291f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2292b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_Any_SSE2(const uint8* src_argb,
2293b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    uint8* dst_rgb,
2294b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    const uint32 dither4,
2295b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int width);
2296b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_Any_AVX2(const uint8* src_argb,
2297b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    uint8* dst_rgb,
2298b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    const uint32 dither4,
2299b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int width);
2300f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2301f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int width);
2302b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB1555Row_Any_AVX2(const uint8* src_argb,
2303b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2304f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2305b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB4444Row_Any_AVX2(const uint8* src_argb,
2306b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2307f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2308f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2309f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB24Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
2310f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRAWRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
2311f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBToRGB565Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int width);
2312b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB1555Row_Any_NEON(const uint8* src_argb,
2313b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2314f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2315b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB4444Row_Any_NEON(const uint8* src_argb,
2316b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_rgb,
2317f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2318b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_Any_NEON(const uint8* src_argb,
2319b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    uint8* dst_rgb,
2320b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    const uint32 dither4,
2321b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int width);
2322b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB24Row_Any_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
2323b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRAWRow_Any_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
2324b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565Row_Any_MSA(const uint8* src_argb, uint8* dst_rgb, int width);
2325b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB1555Row_Any_MSA(const uint8* src_argb,
2326b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_rgb,
2327b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
2328b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToARGB4444Row_Any_MSA(const uint8* src_argb,
2329b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_rgb,
2330b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
2331b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBToRGB565DitherRow_Any_MSA(const uint8* src_argb,
2332b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                   uint8* dst_rgb,
2333b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                   const uint32 dither4,
2334b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                   int width);
2335f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2336f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I444ToARGBRow_Any_NEON(const uint8* src_y,
2337f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2338f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2339f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2340f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
234133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                            int width);
2342f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_Any_NEON(const uint8* src_y,
2343f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2344f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2345f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2346f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
234733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                            int width);
2348f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422AlphaToARGBRow_Any_NEON(const uint8* src_y,
2349f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_u,
2350f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_v,
2351f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const uint8* src_a,
2352f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 uint8* dst_argb,
2353f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 const struct YuvConstants* yuvconstants,
2354f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
2355f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGBARow_Any_NEON(const uint8* src_y,
2356f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2357f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2358f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2359f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
236033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                            int width);
2361f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB24Row_Any_NEON(const uint8* src_y,
2362f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_u,
2363f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const uint8* src_v,
2364f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             uint8* dst_argb,
2365f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             const struct YuvConstants* yuvconstants,
236633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                             int width);
2367f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB4444Row_Any_NEON(const uint8* src_y,
2368f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_u,
2369f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_v,
2370f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                uint8* dst_argb,
2371f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const struct YuvConstants* yuvconstants,
2372f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2373f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGB1555Row_Any_NEON(const uint8* src_y,
2374f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_u,
2375f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const uint8* src_v,
2376f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                uint8* dst_argb,
2377f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                const struct YuvConstants* yuvconstants,
2378f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2379f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToRGB565Row_Any_NEON(const uint8* src_y,
2380f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_u,
2381f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_v,
2382f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_argb,
2383f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
2384f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
2385f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToARGBRow_Any_NEON(const uint8* src_y,
2386f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_uv,
2387f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2388f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2389f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2390f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV21ToARGBRow_Any_NEON(const uint8* src_y,
2391f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_vu,
2392f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2393f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
2394f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
2395f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid NV12ToRGB565Row_Any_NEON(const uint8* src_y,
2396f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const uint8* src_uv,
2397f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              uint8* dst_argb,
2398f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              const struct YuvConstants* yuvconstants,
2399f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int width);
2400f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2,
2401f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2402f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
240333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                            int width);
2404f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToARGBRow_Any_NEON(const uint8* src_uyvy,
2405f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            uint8* dst_argb,
2406f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const struct YuvConstants* yuvconstants,
240733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                            int width);
2408b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I444ToARGBRow_Any_DSPR2(const uint8* src_y,
2409b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
2410b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
2411b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2412b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2413b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2414b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB4444Row_Any_DSPR2(const uint8* src_y,
2415b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const uint8* src_u,
2416b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const uint8* src_v,
2417b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
2418b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const struct YuvConstants* yuvconstants,
2419b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int width);
2420b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGBRow_Any_DSPR2(const uint8* src_y,
2421b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
2422b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
2423b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2424b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2425b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2426f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_DSPR2(const uint8* src_y,
2427f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
2428f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
2429f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
2430f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
2431f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
2432b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB1555Row_Any_DSPR2(const uint8* src_y,
2433b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const uint8* src_u,
2434b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const uint8* src_v,
2435b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
2436b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const struct YuvConstants* yuvconstants,
2437b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int width);
2438b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I411ToARGBRow_Any_DSPR2(const uint8* src_y,
2439b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
2440b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
2441b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2442b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2443b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2444b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToARGBRow_Any_DSPR2(const uint8* src_y,
2445b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_uv,
2446b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2447b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2448b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2449f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToARGBRow_DSPR2(const uint8* src_y,
2450f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_u,
2451f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const uint8* src_v,
2452f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         uint8* dst_argb,
2453f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         const struct YuvConstants* yuvconstants,
2454f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
2455b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I444ToARGBRow_Any_MSA(const uint8* src_y,
2456b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
2457b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
2458b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2459b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2460b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2461b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGBRow_Any_MSA(const uint8* src_y,
2462b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
2463b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
2464b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2465b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2466b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2467b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGBARow_Any_MSA(const uint8* src_y,
2468b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
2469b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
2470b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2471b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2472b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2473b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422AlphaToARGBRow_Any_MSA(const uint8* src_y,
2474b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint8* src_u,
2475b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint8* src_v,
2476b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const uint8* src_a,
2477b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
2478b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                const struct YuvConstants* yuvconstants,
2479b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                int width);
2480b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGB24Row_Any_MSA(const uint8* src_y,
2481b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* src_u,
2482b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* src_v,
2483b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_rgb24,
2484b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const struct YuvConstants* yuvconstants,
2485b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2486b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToRGB565Row_Any_MSA(const uint8* src_y,
2487b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_u,
2488b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_v,
2489b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_rgb565,
2490b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2491b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2492b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB4444Row_Any_MSA(const uint8* src_y,
2493b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const uint8* src_u,
2494b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const uint8* src_v,
2495b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb4444,
2496b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const struct YuvConstants* yuvconstants,
2497b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
2498b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToARGB1555Row_Any_MSA(const uint8* src_y,
2499b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const uint8* src_u,
2500b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const uint8* src_v,
2501b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb1555,
2502b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const struct YuvConstants* yuvconstants,
2503b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
2504b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToARGBRow_Any_MSA(const uint8* src_y,
2505b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_uv,
2506b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2507b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2508b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2509b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV12ToRGB565Row_Any_MSA(const uint8* src_y,
2510b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_uv,
2511b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2512b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const struct YuvConstants* yuvconstants,
2513b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2514b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid NV21ToARGBRow_Any_MSA(const uint8* src_y,
2515b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_vu,
2516b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2517b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2518b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2519b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToARGBRow_Any_MSA(const uint8* src_yuy2,
2520b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2521b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2522b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2523b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToARGBRow_Any_MSA(const uint8* src_uyvy,
2524b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_argb,
2525b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const struct YuvConstants* yuvconstants,
2526b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
252733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2528f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int width);
2529b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_AVX2(const uint8* src_yuy2,
2530b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_yuy2,
2531b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2532b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2533b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
2534f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToUV422Row_AVX2(const uint8* src_yuy2,
2535b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2536b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2537b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2538f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int width);
2539b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_SSE2(const uint8* src_yuy2,
2540b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_yuy2,
2541b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2542b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2543b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
254433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid YUY2ToUV422Row_SSE2(const uint8* src_yuy2,
2545b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2546b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2547b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2548f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_NEON(const uint8* src_yuy2, uint8* dst_y, int width);
2549b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_NEON(const uint8* src_yuy2,
2550b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_yuy2,
2551b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2552b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2553b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
255433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid YUY2ToUV422Row_NEON(const uint8* src_yuy2,
2555b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2556b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2557b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2558b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToYRow_MSA(const uint8* src_yuy2, uint8* dst_y, int width);
2559b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_MSA(const uint8* src_yuy2,
2560b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int stride_yuy2,
2561b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
2562b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
2563b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2564b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUV422Row_MSA(const uint8* src_yuy2,
2565b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
2566b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
2567b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2568f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_C(const uint8* src_yuy2, uint8* dst_y, int width);
2569b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_C(const uint8* src_yuy2,
2570b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int stride_yuy2,
2571b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
2572b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
2573b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
257433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid YUY2ToUV422Row_C(const uint8* src_yuy2,
2575b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2576b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2577b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
2578f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_Any_AVX2(const uint8* src_yuy2, uint8* dst_y, int width);
2579b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_Any_AVX2(const uint8* src_yuy2,
2580b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_yuy2,
2581b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2582b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2583b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2584f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToUV422Row_Any_AVX2(const uint8* src_yuy2,
2585b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2586b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2587b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2588f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_Any_SSE2(const uint8* src_yuy2, uint8* dst_y, int width);
2589b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_Any_SSE2(const uint8* src_yuy2,
2590b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_yuy2,
2591b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2592b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2593b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
259433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid YUY2ToUV422Row_Any_SSE2(const uint8* src_yuy2,
2595b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2596b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2597b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2598f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid YUY2ToYRow_Any_NEON(const uint8* src_yuy2, uint8* dst_y, int width);
2599b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_Any_NEON(const uint8* src_yuy2,
2600b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_yuy2,
2601b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2602b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2603b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
260433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid YUY2ToUV422Row_Any_NEON(const uint8* src_yuy2,
2605b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2606b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2607b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2608b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToYRow_Any_MSA(const uint8* src_yuy2, uint8* dst_y, int width);
2609b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUVRow_Any_MSA(const uint8* src_yuy2,
2610b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int stride_yuy2,
2611b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2612b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2613b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2614b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid YUY2ToUV422Row_Any_MSA(const uint8* src_yuy2,
2615b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_u,
2616b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_v,
2617b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2618f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int width);
2619b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_AVX2(const uint8* src_uyvy,
2620b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_uyvy,
2621b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2622b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2623b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
2624f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToUV422Row_AVX2(const uint8* src_uyvy,
2625b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2626b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2627b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2628f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_SSE2(const uint8* src_uyvy, uint8* dst_y, int width);
2629b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_SSE2(const uint8* src_uyvy,
2630b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_uyvy,
2631b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2632b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2633b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
263433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid UYVYToUV422Row_SSE2(const uint8* src_uyvy,
2635b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2636b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2637b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2638f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int width);
2639b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_AVX2(const uint8* src_uyvy,
2640b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_uyvy,
2641b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2642b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2643b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
2644f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToUV422Row_AVX2(const uint8* src_uyvy,
2645b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2646b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2647b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2648f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_NEON(const uint8* src_uyvy, uint8* dst_y, int width);
2649b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_NEON(const uint8* src_uyvy,
2650b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int stride_uyvy,
2651b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2652b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2653b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
265433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid UYVYToUV422Row_NEON(const uint8* src_uyvy,
2655b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2656b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2657b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2658b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToYRow_MSA(const uint8* src_uyvy, uint8* dst_y, int width);
2659b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_MSA(const uint8* src_uyvy,
2660b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int stride_uyvy,
2661b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_u,
2662b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_v,
2663b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2664b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUV422Row_MSA(const uint8* src_uyvy,
2665b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_u,
2666b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_v,
2667b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
266833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2669f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_C(const uint8* src_uyvy, uint8* dst_y, int width);
2670b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_C(const uint8* src_uyvy,
2671b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int stride_uyvy,
2672b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_u,
2673b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_v,
2674b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
267533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid UYVYToUV422Row_C(const uint8* src_uyvy,
2676b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_u,
2677b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_v,
2678b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
2679f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_Any_AVX2(const uint8* src_uyvy, uint8* dst_y, int width);
2680b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_Any_AVX2(const uint8* src_uyvy,
2681b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_uyvy,
2682b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2683b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2684b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2685f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToUV422Row_Any_AVX2(const uint8* src_uyvy,
2686b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2687b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2688b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2689f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_Any_SSE2(const uint8* src_uyvy, uint8* dst_y, int width);
2690b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_Any_SSE2(const uint8* src_uyvy,
2691b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_uyvy,
2692b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2693b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2694b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
269533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid UYVYToUV422Row_Any_SSE2(const uint8* src_uyvy,
2696b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2697b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2698b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2699f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid UYVYToYRow_Any_NEON(const uint8* src_uyvy, uint8* dst_y, int width);
2700b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_Any_NEON(const uint8* src_uyvy,
2701b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int stride_uyvy,
2702b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_u,
2703b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_v,
2704b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
270533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid UYVYToUV422Row_Any_NEON(const uint8* src_uyvy,
2706b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_u,
2707b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_v,
2708b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
2709b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToYRow_Any_MSA(const uint8* src_uyvy, uint8* dst_y, int width);
2710b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUVRow_Any_MSA(const uint8* src_uyvy,
2711b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int stride_uyvy,
2712b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_u,
2713b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_v,
2714b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
2715b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid UYVYToUV422Row_Any_MSA(const uint8* src_uyvy,
2716b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_u,
2717b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_v,
2718b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2719f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2720f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToYUY2Row_C(const uint8* src_y,
2721f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
2722f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
2723b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_yuy2,
2724b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2725f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToUYVYRow_C(const uint8* src_y,
2726f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_u,
2727f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                     const uint8* src_v,
2728b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_uyvy,
2729b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
2730f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToYUY2Row_SSE2(const uint8* src_y,
2731f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
2732f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
2733b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_yuy2,
2734b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2735f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToUYVYRow_SSE2(const uint8* src_y,
2736f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
2737f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
2738b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_uyvy,
2739b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2740f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToYUY2Row_Any_SSE2(const uint8* src_y,
2741f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2742f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2743b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_yuy2,
2744b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2745f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToUYVYRow_Any_SSE2(const uint8* src_y,
2746f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2747f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2748b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_uyvy,
2749b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2750f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToYUY2Row_NEON(const uint8* src_y,
2751f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
2752f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
2753b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_yuy2,
2754b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2755f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToUYVYRow_NEON(const uint8* src_y,
2756f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_u,
2757f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                        const uint8* src_v,
2758b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_uyvy,
2759b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
2760f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToYUY2Row_Any_NEON(const uint8* src_y,
2761f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2762f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2763b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_yuy2,
2764b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2765f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid I422ToUYVYRow_Any_NEON(const uint8* src_y,
2766f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_u,
2767f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            const uint8* src_v,
2768b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_uyvy,
2769b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
2770b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToYUY2Row_MSA(const uint8* src_y,
2771b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_u,
2772b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_v,
2773b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_yuy2,
2774b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2775b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToUYVYRow_MSA(const uint8* src_y,
2776b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_u,
2777b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_v,
2778b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_uyvy,
2779b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2780b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToYUY2Row_Any_MSA(const uint8* src_y,
2781b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
2782b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
2783b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_yuy2,
2784b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2785b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid I422ToUYVYRow_Any_MSA(const uint8* src_y,
2786b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_u,
2787b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           const uint8* src_v,
2788b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint8* dst_uyvy,
2789b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
2790f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2791f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Effects related row functions.
279233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBAttenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
279333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
2794f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBAttenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
2795f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBAttenuateRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
2796b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_MSA(const uint8* src_argb, uint8* dst_argb, int width);
2797b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_Any_SSE2(const uint8* src_argb,
2798b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
2799f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
2800b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_Any_SSSE3(const uint8* src_argb,
2801b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                uint8* dst_argb,
2802f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                int width);
2803b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_Any_AVX2(const uint8* src_argb,
2804b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
2805f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
2806b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_Any_NEON(const uint8* src_argb,
2807b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               uint8* dst_argb,
2808f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                               int width);
2809b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAttenuateRow_Any_MSA(const uint8* src_argb,
2810b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2811b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
281233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
281333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Inverse table for unattenuate, shared by C and SSE2.
2814f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangextern const uint32 fixed_invtbl8[256];
281533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBUnattenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);
281633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);
2817f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBUnattenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);
2818b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBUnattenuateRow_Any_SSE2(const uint8* src_argb,
2819b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
2820f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
2821b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBUnattenuateRow_Any_AVX2(const uint8* src_argb,
2822b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
2823f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width);
282433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
282533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBGrayRow_C(const uint8* src_argb, uint8* dst_argb, int width);
282633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);
2827f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBGrayRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);
2828b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBGrayRow_MSA(const uint8* src_argb, uint8* dst_argb, int width);
282933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
283033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBSepiaRow_C(uint8* dst_argb, int width);
283133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBSepiaRow_SSSE3(uint8* dst_argb, int width);
2832f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBSepiaRow_NEON(uint8* dst_argb, int width);
2833b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBSepiaRow_MSA(uint8* dst_argb, int width);
283433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2835b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBColorMatrixRow_C(const uint8* src_argb,
2836b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_argb,
2837b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const int8* matrix_argb,
2838b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2839b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBColorMatrixRow_SSSE3(const uint8* src_argb,
2840b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_argb,
2841b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const int8* matrix_argb,
2842b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
2843b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBColorMatrixRow_NEON(const uint8* src_argb,
2844b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
2845b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const int8* matrix_argb,
2846b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
284733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
284833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
284933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ARGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
285033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2851f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);
2852f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid RGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);
2853f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2854b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBQuantizeRow_C(uint8* dst_argb,
2855b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int scale,
2856b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int interval_size,
2857b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int interval_offset,
2858b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
2859b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBQuantizeRow_SSE2(uint8* dst_argb,
2860b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int scale,
2861b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int interval_size,
2862b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int interval_offset,
2863b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2864b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBQuantizeRow_NEON(uint8* dst_argb,
2865b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int scale,
2866b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int interval_size,
2867b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int interval_offset,
2868b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
2869f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2870b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShadeRow_C(const uint8* src_argb,
2871b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_argb,
2872b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width,
2873f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                    uint32 value);
2874b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShadeRow_SSE2(const uint8* src_argb,
2875b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
2876b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width,
2877f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       uint32 value);
2878b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShadeRow_NEON(const uint8* src_argb,
2879b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
2880b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width,
2881f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                       uint32 value);
2882b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBShadeRow_MSA(const uint8* src_argb,
2883b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_argb,
2884b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width,
2885b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint32 value);
288633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
288733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Used for blur.
2888b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid CumulativeSumToAverageRow_SSE2(const int32* topleft,
2889b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    const int32* botleft,
2890b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int width,
2891b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int area,
2892b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    uint8* dst,
2893b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                    int count);
2894b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ComputeCumulativeSumRow_SSE2(const uint8* row,
2895b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  int32* cumsum,
2896b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  const int32* previous_cumsum,
2897b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                  int width);
289833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2899b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid CumulativeSumToAverageRow_C(const int32* topleft,
2900b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const int32* botleft,
2901b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int width,
2902b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int area,
2903b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst,
2904b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 int count);
2905b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ComputeCumulativeSumRow_C(const uint8* row,
2906b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int32* cumsum,
2907b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               const int32* previous_cumsum,
2908b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                               int width);
290933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
291033cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
2911b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAffineRow_C(const uint8* src_argb,
2912b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int src_argb_stride,
2913b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
2914b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const float* uv_dudv,
2915b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
291633cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
2917b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBAffineRow_SSE2(const uint8* src_argb,
2918b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int src_argb_stride,
2919b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_argb,
2920b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const float* uv_dudv,
2921b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
292233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2923f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Used for I420Scale, ARGBScale, and ARGBInterpolate.
2924b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_C(uint8* dst_ptr,
2925b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      const uint8* src_ptr,
2926f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                      ptrdiff_t src_stride_ptr,
2927b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width,
2928b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int source_y_fraction);
2929b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_SSSE3(uint8* dst_ptr,
2930b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_ptr,
2931b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          ptrdiff_t src_stride_ptr,
2932b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width,
2933f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int source_y_fraction);
2934b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_AVX2(uint8* dst_ptr,
2935b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_ptr,
2936b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         ptrdiff_t src_stride_ptr,
2937b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width,
2938f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int source_y_fraction);
2939b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_NEON(uint8* dst_ptr,
2940b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_ptr,
2941b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         ptrdiff_t src_stride_ptr,
2942b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width,
2943f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int source_y_fraction);
2944b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_DSPR2(uint8* dst_ptr,
2945b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_ptr,
2946b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          ptrdiff_t src_stride_ptr,
2947b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width,
2948f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                          int source_y_fraction);
2949b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_MSA(uint8* dst_ptr,
2950b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_ptr,
2951b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        ptrdiff_t src_stride_ptr,
2952b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width,
2953b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int source_y_fraction);
2954b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_Any_NEON(uint8* dst_ptr,
2955b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_ptr,
2956b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             ptrdiff_t src_stride_ptr,
2957b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width,
2958f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int source_y_fraction);
2959b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_Any_SSSE3(uint8* dst_ptr,
2960b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_ptr,
2961b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              ptrdiff_t src_stride_ptr,
2962b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width,
2963f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                              int source_y_fraction);
2964b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_Any_AVX2(uint8* dst_ptr,
2965b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_ptr,
2966b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             ptrdiff_t src_stride_ptr,
2967b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width,
2968f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                             int source_y_fraction);
2969b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_Any_DSPR2(uint8* dst_ptr,
2970b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_ptr,
2971b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              ptrdiff_t src_stride_ptr,
2972b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width,
297333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                              int source_y_fraction);
2974b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_Any_MSA(uint8* dst_ptr,
2975b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const uint8* src_ptr,
2976b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            ptrdiff_t src_stride_ptr,
2977b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width,
2978b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int source_y_fraction);
2979b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
2980b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid InterpolateRow_16_C(uint16* dst_ptr,
2981b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint16* src_ptr,
2982f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         ptrdiff_t src_stride_ptr,
2983b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width,
2984b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int source_y_fraction);
2985f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
2986f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang// Sobel images.
2987b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXRow_C(const uint8* src_y0,
2988b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 const uint8* src_y1,
2989b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 const uint8* src_y2,
2990b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 uint8* dst_sobelx,
2991b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 int width);
2992b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXRow_SSE2(const uint8* src_y0,
2993b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y1,
2994b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y2,
2995b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_sobelx,
2996b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
2997b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXRow_NEON(const uint8* src_y0,
2998b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y1,
2999b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y2,
3000b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_sobelx,
3001b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
3002b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelYRow_C(const uint8* src_y0,
3003b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 const uint8* src_y1,
3004b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 uint8* dst_sobely,
3005b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                 int width);
3006b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelYRow_SSE2(const uint8* src_y0,
3007b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y1,
3008b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_sobely,
3009b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
3010b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelYRow_NEON(const uint8* src_y0,
3011b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_y1,
3012b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_sobely,
3013b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
3014b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_C(const uint8* src_sobelx,
3015b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                const uint8* src_sobely,
3016b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                uint8* dst_argb,
3017b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                int width);
3018b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_SSE2(const uint8* src_sobelx,
3019b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   const uint8* src_sobely,
3020b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_argb,
3021b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
3022b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_NEON(const uint8* src_sobelx,
3023b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   const uint8* src_sobely,
3024b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   uint8* dst_argb,
3025b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                   int width);
3026b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_MSA(const uint8* src_sobelx,
3027b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  const uint8* src_sobely,
3028b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_argb,
3029b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  int width);
3030b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_C(const uint8* src_sobelx,
3031b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_sobely,
3032b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_y,
3033b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
3034b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_SSE2(const uint8* src_sobelx,
3035b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_sobely,
3036b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_y,
3037b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
3038b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_NEON(const uint8* src_sobelx,
3039b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          const uint8* src_sobely,
3040b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          uint8* dst_y,
3041b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                          int width);
3042b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_MSA(const uint8* src_sobelx,
3043b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_sobely,
3044b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_y,
3045b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
3046b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_C(const uint8* src_sobelx,
3047b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  const uint8* src_sobely,
3048b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  uint8* dst_argb,
3049b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                  int width);
3050b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_SSE2(const uint8* src_sobelx,
3051b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_sobely,
3052b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
3053b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
3054b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_NEON(const uint8* src_sobelx,
3055b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     const uint8* src_sobely,
3056b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     uint8* dst_argb,
3057b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                     int width);
3058b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_MSA(const uint8* src_sobelx,
3059b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    const uint8* src_sobely,
3060b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    uint8* dst_argb,
3061b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                    int width);
3062b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_Any_SSE2(const uint8* src_sobelx,
3063b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_sobely,
3064b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
3065b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
3066b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_Any_NEON(const uint8* src_sobelx,
3067b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       const uint8* src_sobely,
3068b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       uint8* dst_argb,
3069b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                       int width);
3070b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelRow_Any_MSA(const uint8* src_sobelx,
3071b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      const uint8* src_sobely,
3072b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      uint8* dst_argb,
3073b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                      int width);
3074b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_Any_SSE2(const uint8* src_sobelx,
3075b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_sobely,
3076b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_y,
3077b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
3078b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_Any_NEON(const uint8* src_sobelx,
3079b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              const uint8* src_sobely,
3080b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              uint8* dst_y,
3081b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                              int width);
3082b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelToPlaneRow_Any_MSA(const uint8* src_sobelx,
3083b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* src_sobely,
3084b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_y,
3085b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width);
3086b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_Any_SSE2(const uint8* src_sobelx,
3087b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_sobely,
3088b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
3089b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
3090b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_Any_NEON(const uint8* src_sobelx,
3091b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const uint8* src_sobely,
3092b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
3093b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         int width);
3094b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid SobelXYRow_Any_MSA(const uint8* src_sobelx,
3095b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        const uint8* src_sobely,
3096b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        uint8* dst_argb,
3097b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                        int width);
3098f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
3099f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBPolynomialRow_C(const uint8* src_argb,
3100b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         uint8* dst_argb,
3101b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                         const float* poly,
3102f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                         int width);
3103f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBPolynomialRow_SSE2(const uint8* src_argb,
3104b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
3105b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const float* poly,
3106f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
3107f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuangvoid ARGBPolynomialRow_AVX2(const uint8* src_argb,
3108b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint8* dst_argb,
3109b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            const float* poly,
3110f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                            int width);
3111f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
3112b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard// Scale and convert to half float.
3113b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_C(const uint16* src, uint16* dst, float scale, int width);
3114b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_SSE2(const uint16* src, uint16* dst, float scale, int width);
3115b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_Any_SSE2(const uint16* src,
3116b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint16* dst,
3117b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           float scale,
3118b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
3119b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_AVX2(const uint16* src, uint16* dst, float scale, int width);
3120b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_Any_AVX2(const uint16* src,
3121b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint16* dst,
3122b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           float scale,
3123b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
3124b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_F16C(const uint16* src, uint16* dst, float scale, int width);
3125b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_Any_F16C(const uint16* src,
3126b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint16* dst,
3127b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           float scale,
3128b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
3129b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloat1Row_F16C(const uint16* src, uint16* dst, float scale, int width);
3130b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloat1Row_Any_F16C(const uint16* src,
3131b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint16* dst,
3132b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            float scale,
3133b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
3134b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_NEON(const uint16* src, uint16* dst, float scale, int width);
3135b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloatRow_Any_NEON(const uint16* src,
3136b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           uint16* dst,
3137b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           float scale,
3138b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                           int width);
3139b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloat1Row_NEON(const uint16* src, uint16* dst, float scale, int width);
3140b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid HalfFloat1Row_Any_NEON(const uint16* src,
3141b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            uint16* dst,
3142b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            float scale,
3143b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                            int width);
3144b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard
3145b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBLumaColorTableRow_C(const uint8* src_argb,
3146b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint8* dst_argb,
3147b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             int width,
3148b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             const uint8* luma,
3149b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                             uint32 lumacoeff);
3150b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchardvoid ARGBLumaColorTableRow_SSSE3(const uint8* src_argb,
3151b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint8* dst_argb,
3152f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang                                 int width,
3153b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 const uint8* luma,
3154b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard                                 uint32 lumacoeff);
3155f047e7ca6983218eed7703c7afd51fed7bd3b5c9Hangyu Kuang
315633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus
315733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}  // extern "C"
315833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}  // namespace libyuv
315933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
316033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
3161b83bb38f0a92bedeb52baa31e515220927ef53bbFrank Barchard#endif  // INCLUDE_LIBYUV_ROW_H_
3162