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