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