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