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