media/libyuv/include/libyuv/row.h

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

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

mercurial