react-native-vision-camera-spoof-detector 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (857) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +220 -0
  3. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  4. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  5. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  6. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/cache-v2-701700ba4bb2215c1ccd.json +1599 -0
  7. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-9189be15e8b04df8f258.json +857 -0
  8. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-073369af1c5eb367d160.json +185 -0
  9. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  10. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/directory-libyuv-Debug-68bb497e958fc902f93a.json +100 -0
  11. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/index-2025-11-18T09-41-06-0926.json +92 -0
  12. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-cpuid-Debug-5af24d55c9649a4c3a3f.json +136 -0
  13. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-faceantispoof-Debug-aa45fddb87a8ac2074bb.json +181 -0
  14. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-fastyuv-Debug-4dd5b049ce28a8e070d1.json +182 -0
  15. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv-Debug-b8d5ee3e10a1f31a29fe.json +433 -0
  16. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  17. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_neon64-Debug-2ab157e6b75bcb340b03.json +137 -0
  18. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_shared-Debug-2aecda61b70017f775b5.json +455 -0
  19. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_sme-Debug-73d1e6cc8ef043b4e243.json +126 -0
  20. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_sve-Debug-9d95a17080a7480f85a6.json +104 -0
  21. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuvconstants-Debug-31b06c1ed2b225cf2443.json +136 -0
  22. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuvconvert-Debug-2231dac0a591237abb04.json +157 -0
  23. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.ninja_deps +0 -0
  24. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.ninja_log +63 -0
  25. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeCache.txt +465 -0
  26. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  27. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  28. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  29. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  30. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  31. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  32. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  33. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  34. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  35. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/CMakeOutput.log +276 -0
  36. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/TargetDirectories.txt +27 -0
  37. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/cmake.check_cache +1 -0
  38. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/faceantispoof.dir/48ddb531beec5c42d2f7a5f3aa0b5968/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  39. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  40. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  41. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  42. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/rules.ninja +198 -0
  43. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CPackConfig.cmake +71 -0
  44. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CPackSourceConfig.cmake +79 -0
  45. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/additional_project_files.txt +48 -0
  46. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/android_gradle_build.json +106 -0
  47. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/android_gradle_build_mini.json +87 -0
  48. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/build.ninja +1071 -0
  49. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/build_file_index.txt +3 -0
  50. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/cmake_install.cmake +59 -0
  51. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/compile_commands.json +277 -0
  52. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/compile_commands.json.bin +0 -0
  53. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/configure_fingerprint.bin +29 -0
  54. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  55. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  56. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  57. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  58. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  59. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  60. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  61. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  62. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  63. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  64. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  65. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  66. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  67. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  68. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  69. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  70. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  71. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  72. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  73. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  74. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  75. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  76. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  77. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  78. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  79. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  80. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  81. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  82. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  83. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  84. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  85. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  86. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  87. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  88. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  89. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  90. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  91. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  92. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  93. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  94. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  95. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/compare_neon64.cc.o +0 -0
  96. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/rotate_neon64.cc.o +0 -0
  97. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/row_neon64.cc.o +0 -0
  98. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/scale_neon64.cc.o +0 -0
  99. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/rotate_sme.cc.o +0 -0
  100. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/row_sme.cc.o +0 -0
  101. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/scale_sme.cc.o +0 -0
  102. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sve.dir/source/row_sve.cc.o +0 -0
  103. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  104. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  105. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/cmake_install.cmake +87 -0
  106. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/libyuv.a +0 -0
  107. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/metadata_generation_command.txt +19 -0
  108. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/prefab_config.json +4 -0
  109. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/symbol_folder_index.txt +1 -0
  110. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  111. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  112. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  113. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/cache-v2-3c91c5cee78e3e904960.json +1587 -0
  114. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-7cc7148edcc0267ae184.json +857 -0
  115. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-3db6484795577cf354b3.json +167 -0
  116. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  117. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/directory-libyuv-Debug-063ed54195fe25617bc7.json +100 -0
  118. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/index-2025-11-18T09-41-44-0186.json +92 -0
  119. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-cpuid-Debug-a3f2884614434f8f188a.json +150 -0
  120. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-faceantispoof-Debug-c905db8d2a36c2f49235.json +181 -0
  121. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-fastyuv-Debug-e08fb9fb89a090bfee1a.json +190 -0
  122. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv-Debug-4b1ffa979fbf6ac68418.json +406 -0
  123. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_common_objects-Debug-245e248f528e11e2d34d.json +536 -0
  124. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_neon-Debug-2ea21009709c7febf67d.json +151 -0
  125. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_shared-Debug-e387ee44aace33b18140.json +428 -0
  126. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuvconstants-Debug-14fbb0c58620d35bb155.json +150 -0
  127. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuvconvert-Debug-c40ecea0358b0e737802.json +171 -0
  128. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.ninja_deps +0 -0
  129. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.ninja_log +59 -0
  130. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeCache.txt +463 -0
  131. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  132. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  133. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  134. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  135. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  136. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  137. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  138. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  139. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  140. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/CMakeOutput.log +268 -0
  141. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/TargetDirectories.txt +25 -0
  142. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/cmake.check_cache +1 -0
  143. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/faceantispoof.dir/48ddb531beec5c42d2f7a5f3aa0b5968/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  144. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  145. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  146. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  147. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/rules.ninja +178 -0
  148. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CPackConfig.cmake +71 -0
  149. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CPackSourceConfig.cmake +79 -0
  150. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/additional_project_files.txt +44 -0
  151. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/android_gradle_build.json +96 -0
  152. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/android_gradle_build_mini.json +77 -0
  153. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/build.ninja +1046 -0
  154. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/build_file_index.txt +3 -0
  155. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/cmake_install.cmake +59 -0
  156. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/compile_commands.json +257 -0
  157. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/compile_commands.json.bin +0 -0
  158. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/configure_fingerprint.bin +29 -0
  159. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  160. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  161. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  162. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  163. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  164. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  165. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  166. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  167. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  168. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  169. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  170. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  171. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  172. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  173. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  174. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  175. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  176. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  177. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  178. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  179. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  180. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  181. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  182. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  183. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  184. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  185. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  186. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  187. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  188. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  189. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  190. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  191. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  192. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  193. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  194. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  195. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  196. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  197. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  198. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  199. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  200. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/compare_neon.cc.o +0 -0
  201. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/rotate_neon.cc.o +0 -0
  202. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/row_neon.cc.o +0 -0
  203. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/scale_neon.cc.o +0 -0
  204. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  205. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  206. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/cmake_install.cmake +87 -0
  207. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/libyuv.a +0 -0
  208. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/metadata_generation_command.txt +19 -0
  209. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/prefab_config.json +4 -0
  210. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/symbol_folder_index.txt +1 -0
  211. package/android/.cxx/Debug/2a3w6u3n/hash_key.txt +26 -0
  212. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  213. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  214. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  215. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/cache-v2-2fe46b6519c8341b1982.json +1587 -0
  216. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/cmakeFiles-v1-a03e763d0c6effec9f6f.json +857 -0
  217. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/codemodel-v2-2412bbfc0c74a0dc613a.json +158 -0
  218. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  219. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/directory-libyuv-Debug-7cf182a5e476bc9b5f34.json +100 -0
  220. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/index-2025-11-18T09-41-52-0585.json +92 -0
  221. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-cpuid-Debug-931d089bced0b77c5070.json +136 -0
  222. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-faceantispoof-Debug-7b58f88faeacc46f961d.json +181 -0
  223. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-fastyuv-Debug-9283b76b8a94ba273122.json +157 -0
  224. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv-Debug-c270d4a92a15ef45f650.json +368 -0
  225. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  226. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv_shared-Debug-42c6196dd1672984dcd7.json +390 -0
  227. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuvconstants-Debug-7e8432d4753ee3bd592d.json +136 -0
  228. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuvconvert-Debug-2cc934aa605d443ac9a1.json +157 -0
  229. package/android/.cxx/Debug/2a3w6u3n/x86/.ninja_deps +0 -0
  230. package/android/.cxx/Debug/2a3w6u3n/x86/.ninja_log +55 -0
  231. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeCache.txt +463 -0
  232. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  233. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  234. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  235. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  236. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  237. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  238. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  239. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  240. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  241. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/CMakeOutput.log +258 -0
  242. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/TargetDirectories.txt +24 -0
  243. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/cmake.check_cache +1 -0
  244. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  245. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/faceantispoof.dir/c9fdc8b0d027394fa06b64ba7ac7706f/react-native/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  246. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  247. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  248. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/rules.ninja +168 -0
  249. package/android/.cxx/Debug/2a3w6u3n/x86/CPackConfig.cmake +71 -0
  250. package/android/.cxx/Debug/2a3w6u3n/x86/CPackSourceConfig.cmake +79 -0
  251. package/android/.cxx/Debug/2a3w6u3n/x86/additional_project_files.txt +40 -0
  252. package/android/.cxx/Debug/2a3w6u3n/x86/android_gradle_build.json +91 -0
  253. package/android/.cxx/Debug/2a3w6u3n/x86/android_gradle_build_mini.json +72 -0
  254. package/android/.cxx/Debug/2a3w6u3n/x86/build.ninja +945 -0
  255. package/android/.cxx/Debug/2a3w6u3n/x86/build_file_index.txt +3 -0
  256. package/android/.cxx/Debug/2a3w6u3n/x86/cmake_install.cmake +59 -0
  257. package/android/.cxx/Debug/2a3w6u3n/x86/compile_commands.json +237 -0
  258. package/android/.cxx/Debug/2a3w6u3n/x86/compile_commands.json.bin +0 -0
  259. package/android/.cxx/Debug/2a3w6u3n/x86/configure_fingerprint.bin +29 -0
  260. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  261. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  262. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  263. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  264. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  265. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  266. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  267. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  268. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  269. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  270. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  271. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  272. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  273. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  274. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  275. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  276. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  277. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  278. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  279. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  280. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  281. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  282. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  283. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  284. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  285. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  286. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  287. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  288. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  289. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  290. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  291. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  292. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  293. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  294. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  295. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  296. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  297. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  298. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  299. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  300. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  301. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  302. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  303. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/cmake_install.cmake +87 -0
  304. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/libyuv.a +0 -0
  305. package/android/.cxx/Debug/2a3w6u3n/x86/metadata_generation_command.txt +19 -0
  306. package/android/.cxx/Debug/2a3w6u3n/x86/prefab_config.json +4 -0
  307. package/android/.cxx/Debug/2a3w6u3n/x86/symbol_folder_index.txt +1 -0
  308. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  309. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  310. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  311. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/cache-v2-5ca7fb88a80849964189.json +1587 -0
  312. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-9871675aa6610f6180ca.json +857 -0
  313. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/codemodel-v2-deb41c72c38c1ff57431.json +158 -0
  314. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  315. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/directory-libyuv-Debug-edf355e979425c71897d.json +100 -0
  316. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/index-2025-11-18T09-42-00-0374.json +92 -0
  317. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-cpuid-Debug-264b6f675c69e42e8113.json +136 -0
  318. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-faceantispoof-Debug-c95714fd9c4cd04d4222.json +181 -0
  319. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-fastyuv-Debug-80c6b1b5d8e35770dde3.json +157 -0
  320. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv-Debug-6d3d5c5dcc6bffc18ce6.json +368 -0
  321. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  322. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv_shared-Debug-6e364a075e5b9b47274e.json +390 -0
  323. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuvconstants-Debug-f6a29384c5629faf75f4.json +136 -0
  324. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuvconvert-Debug-dca5f1cf9af89281fc95.json +157 -0
  325. package/android/.cxx/Debug/2a3w6u3n/x86_64/.ninja_deps +0 -0
  326. package/android/.cxx/Debug/2a3w6u3n/x86_64/.ninja_log +55 -0
  327. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeCache.txt +463 -0
  328. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  329. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  330. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  331. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  332. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  333. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  334. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  335. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  336. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  337. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/CMakeOutput.log +258 -0
  338. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/TargetDirectories.txt +24 -0
  339. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/cmake.check_cache +1 -0
  340. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  341. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/faceantispoof.dir/c9fdc8b0d027394fa06b64ba7ac7706f/react-native/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  342. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  343. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  344. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/rules.ninja +168 -0
  345. package/android/.cxx/Debug/2a3w6u3n/x86_64/CPackConfig.cmake +71 -0
  346. package/android/.cxx/Debug/2a3w6u3n/x86_64/CPackSourceConfig.cmake +79 -0
  347. package/android/.cxx/Debug/2a3w6u3n/x86_64/additional_project_files.txt +40 -0
  348. package/android/.cxx/Debug/2a3w6u3n/x86_64/android_gradle_build.json +91 -0
  349. package/android/.cxx/Debug/2a3w6u3n/x86_64/android_gradle_build_mini.json +72 -0
  350. package/android/.cxx/Debug/2a3w6u3n/x86_64/build.ninja +945 -0
  351. package/android/.cxx/Debug/2a3w6u3n/x86_64/build_file_index.txt +3 -0
  352. package/android/.cxx/Debug/2a3w6u3n/x86_64/cmake_install.cmake +59 -0
  353. package/android/.cxx/Debug/2a3w6u3n/x86_64/compile_commands.json +237 -0
  354. package/android/.cxx/Debug/2a3w6u3n/x86_64/compile_commands.json.bin +0 -0
  355. package/android/.cxx/Debug/2a3w6u3n/x86_64/configure_fingerprint.bin +29 -0
  356. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  357. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  358. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  359. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  360. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  361. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  362. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  363. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  364. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  365. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  366. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  367. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  368. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  369. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  370. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  371. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  372. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  373. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  374. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  375. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  376. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  377. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  378. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  379. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  380. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  381. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  382. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  383. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  384. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  385. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  386. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  387. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  388. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  389. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  390. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  391. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  392. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  393. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  394. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  395. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  396. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  397. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  398. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  399. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/cmake_install.cmake +87 -0
  400. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/libyuv.a +0 -0
  401. package/android/.cxx/Debug/2a3w6u3n/x86_64/metadata_generation_command.txt +19 -0
  402. package/android/.cxx/Debug/2a3w6u3n/x86_64/prefab_config.json +4 -0
  403. package/android/.cxx/Debug/2a3w6u3n/x86_64/symbol_folder_index.txt +1 -0
  404. package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +277 -0
  405. package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +257 -0
  406. package/android/.cxx/tools/debug/x86/compile_commands.json +237 -0
  407. package/android/.cxx/tools/debug/x86_64/compile_commands.json +237 -0
  408. package/android/build/.transforms/477a48f41cbd60a6044ae2b6659edb2d/results.bin +1 -0
  409. package/android/build/.transforms/477a48f41cbd60a6044ae2b6659edb2d/transformed/classes/classes_dex/classes.dex +0 -0
  410. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/results.bin +1 -0
  411. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/AcceleratorConfig.dex +0 -0
  412. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/AntiSpoofingResult.dex +0 -0
  413. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/BuildConfig.dex +0 -0
  414. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofFrameProcessor.dex +0 -0
  415. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofModule$Companion.dex +0 -0
  416. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofModule.dex +0 -0
  417. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofPackage.dex +0 -0
  418. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.dex +0 -0
  419. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofingAdvanced.dex +0 -0
  420. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FastYuv.dex +0 -0
  421. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/YuvToFloatArrayConverter.dex +0 -0
  422. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/YuvToRgbConverter.dex +0 -0
  423. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  424. package/android/build/generated/source/buildConfig/debug/com/faceantispoof/BuildConfig.java +14 -0
  425. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +13 -0
  426. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +18 -0
  427. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +6 -0
  428. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +1 -0
  429. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  430. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  431. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +1 -0
  432. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_command_targets.bat +10 -0
  433. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_model.json +199 -0
  434. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_stderr_targets.txt +0 -0
  435. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_stdout_targets.txt +63 -0
  436. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_command.bat +19 -0
  437. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_stderr.txt +0 -0
  438. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_stdout.txt +21 -0
  439. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/generate_cxx_metadata_8656_timing.txt +9 -0
  440. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/metadata_generation_record.json +158 -0
  441. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_command_targets.bat +10 -0
  442. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_model.json +199 -0
  443. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_stderr_targets.txt +0 -0
  444. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_stdout_targets.txt +59 -0
  445. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_command.bat +19 -0
  446. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_stderr.txt +1 -0
  447. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_stdout.txt +19 -0
  448. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/generate_cxx_metadata_8659_timing.txt +9 -0
  449. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/metadata_generation_record.json +158 -0
  450. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_command_targets.bat +10 -0
  451. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_model.json +199 -0
  452. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_stderr_targets.txt +0 -0
  453. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_stdout_targets.txt +55 -0
  454. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_command.bat +19 -0
  455. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_stderr.txt +0 -0
  456. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_stdout.txt +19 -0
  457. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/generate_cxx_metadata_8659_timing.txt +9 -0
  458. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/metadata_generation_record.json +158 -0
  459. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_command_targets.bat +10 -0
  460. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_model.json +199 -0
  461. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_stderr_targets.txt +0 -0
  462. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_stdout_targets.txt +55 -0
  463. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_command.bat +19 -0
  464. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_stderr.txt +0 -0
  465. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_stdout.txt +19 -0
  466. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/generate_cxx_metadata_8659_timing.txt +9 -0
  467. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/metadata_generation_record.json +158 -0
  468. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/cpuid +0 -0
  469. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libfaceantispoof.so +0 -0
  470. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libfastyuv.so +0 -0
  471. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libyuv.so +0 -0
  472. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/yuvconstants +0 -0
  473. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/yuvconvert +0 -0
  474. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/cpuid +0 -0
  475. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libfaceantispoof.so +0 -0
  476. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libfastyuv.so +0 -0
  477. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libyuv.so +0 -0
  478. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/yuvconstants +0 -0
  479. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/yuvconvert +0 -0
  480. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/cpuid +0 -0
  481. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libfaceantispoof.so +0 -0
  482. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libfastyuv.so +0 -0
  483. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libyuv.so +0 -0
  484. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/yuvconstants +0 -0
  485. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/yuvconvert +0 -0
  486. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/cpuid +0 -0
  487. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libfaceantispoof.so +0 -0
  488. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libfastyuv.so +0 -0
  489. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libyuv.so +0 -0
  490. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/yuvconstants +0 -0
  491. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/yuvconvert +0 -0
  492. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  493. package/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +4 -0
  494. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  495. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  496. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  497. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  498. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  499. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/faceantispoof/BuildConfig.class +0 -0
  500. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/FaceAntiSpoofing.tflite +0 -0
  501. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/spoof_model_scale_2_7.tflite +0 -0
  502. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/spoof_model_scale_4_0.tflite +0 -0
  503. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libfaceantispoof.so +0 -0
  504. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libfastyuv.so +0 -0
  505. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libyuv.so +0 -0
  506. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libfaceantispoof.so +0 -0
  507. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libfastyuv.so +0 -0
  508. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libyuv.so +0 -0
  509. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libfaceantispoof.so +0 -0
  510. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libfastyuv.so +0 -0
  511. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libyuv.so +0 -0
  512. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libfaceantispoof.so +0 -0
  513. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libfastyuv.so +0 -0
  514. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libyuv.so +0 -0
  515. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +3 -0
  516. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +17 -0
  517. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +13 -0
  518. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libfaceantispoof.so +0 -0
  519. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libfastyuv.so +0 -0
  520. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libyuv.so +0 -0
  521. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libfaceantispoof.so +0 -0
  522. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libfastyuv.so +0 -0
  523. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libyuv.so +0 -0
  524. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libfaceantispoof.so +0 -0
  525. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libfastyuv.so +0 -0
  526. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libyuv.so +0 -0
  527. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libfaceantispoof.so +0 -0
  528. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libfastyuv.so +0 -0
  529. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libyuv.so +0 -0
  530. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +1 -0
  531. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
  532. package/android/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml +4 -0
  533. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  534. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/AcceleratorConfig.class +0 -0
  535. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/AntiSpoofingResult.class +0 -0
  536. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/BuildConfig.class +0 -0
  537. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofFrameProcessor.class +0 -0
  538. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofModule$Companion.class +0 -0
  539. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofModule.class +0 -0
  540. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofPackage.class +0 -0
  541. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.class +0 -0
  542. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofingAdvanced.class +0 -0
  543. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FastYuv.class +0 -0
  544. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/YuvToFloatArrayConverter.class +0 -0
  545. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/YuvToRgbConverter.class +0 -0
  546. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  547. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +2 -0
  548. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  549. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  550. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  551. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  552. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  553. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  554. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  555. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  556. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  557. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  558. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  559. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  560. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  561. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  562. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  563. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  564. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  565. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  566. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  567. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  568. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  569. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  570. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  571. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  572. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  573. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  574. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  575. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  576. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  577. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  578. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  579. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  580. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  581. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  582. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  583. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  584. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  585. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  586. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  587. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  588. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  589. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  590. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  591. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  592. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  593. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  594. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  595. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  596. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  597. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  598. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  599. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  600. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  601. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  602. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  603. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  604. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  605. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  606. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  607. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  608. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  609. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  610. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  611. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +2 -0
  612. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  613. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  614. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  615. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  616. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  617. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  618. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  619. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  620. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  621. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  622. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  623. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  624. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  625. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  626. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  627. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  628. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  629. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  630. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  631. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  632. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  633. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  634. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  635. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  636. package/android/build/outputs/logs/manifest-merger-debug-report.txt +25 -0
  637. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  638. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  639. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/AcceleratorConfig.class +0 -0
  640. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/AntiSpoofingResult.class +0 -0
  641. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofFrameProcessor.class +0 -0
  642. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofModule$Companion.class +0 -0
  643. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofModule.class +0 -0
  644. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofPackage.class +0 -0
  645. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.class +0 -0
  646. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofingAdvanced.class +0 -0
  647. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FastYuv.class +0 -0
  648. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/YuvToFloatArrayConverter.class +0 -0
  649. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/YuvToRgbConverter.class +0 -0
  650. package/android/build.gradle +128 -0
  651. package/android/src/main/AndroidManifest.xml +9 -0
  652. package/android/src/main/assets/FaceAntiSpoofing.tflite +0 -0
  653. package/android/src/main/assets/spoof_model_scale_2_7.tflite +0 -0
  654. package/android/src/main/assets/spoof_model_scale_4_0.tflite +0 -0
  655. package/android/src/main/cpp/CMakeLists.txt +94 -0
  656. package/android/src/main/cpp/FaceAntiSpoofJSI.cpp +68 -0
  657. package/android/src/main/cpp/FastYuvJni.cpp +111 -0
  658. package/android/src/main/cpp/fast_yuv.cpp +332 -0
  659. package/android/src/main/cpp/fast_yuv.h +23 -0
  660. package/android/src/main/cpp/libyuv/.clang-format +6 -0
  661. package/android/src/main/cpp/libyuv/.gn +40 -0
  662. package/android/src/main/cpp/libyuv/.vpython3 +410 -0
  663. package/android/src/main/cpp/libyuv/AUTHORS +7 -0
  664. package/android/src/main/cpp/libyuv/Android.bp +202 -0
  665. package/android/src/main/cpp/libyuv/Android.mk +106 -0
  666. package/android/src/main/cpp/libyuv/BUILD.gn +490 -0
  667. package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +70 -0
  668. package/android/src/main/cpp/libyuv/CMakeLists.txt +252 -0
  669. package/android/src/main/cpp/libyuv/DEPS +935 -0
  670. package/android/src/main/cpp/libyuv/DIR_METADATA +3 -0
  671. package/android/src/main/cpp/libyuv/LICENSE +29 -0
  672. package/android/src/main/cpp/libyuv/OWNERS +11 -0
  673. package/android/src/main/cpp/libyuv/PATENTS +24 -0
  674. package/android/src/main/cpp/libyuv/PRESUBMIT.py +65 -0
  675. package/android/src/main/cpp/libyuv/README.chromium +11 -0
  676. package/android/src/main/cpp/libyuv/README.md +19 -0
  677. package/android/src/main/cpp/libyuv/build_overrides/build.gni +60 -0
  678. package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +19 -0
  679. package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +17 -0
  680. package/android/src/main/cpp/libyuv/codereview.settings +5 -0
  681. package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +409 -0
  682. package/android/src/main/cpp/libyuv/docs/environment_variables.md +64 -0
  683. package/android/src/main/cpp/libyuv/docs/feature_detection.md +108 -0
  684. package/android/src/main/cpp/libyuv/docs/filtering.md +196 -0
  685. package/android/src/main/cpp/libyuv/docs/formats.md +208 -0
  686. package/android/src/main/cpp/libyuv/docs/getting_started.md +296 -0
  687. package/android/src/main/cpp/libyuv/docs/rotation.md +107 -0
  688. package/android/src/main/cpp/libyuv/download_vs_toolchain.py +29 -0
  689. package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +68 -0
  690. package/android/src/main/cpp/libyuv/include/libyuv/compare.h +111 -0
  691. package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +112 -0
  692. package/android/src/main/cpp/libyuv/include/libyuv/convert.h +1117 -0
  693. package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +2335 -0
  694. package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +203 -0
  695. package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +394 -0
  696. package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +147 -0
  697. package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +99 -0
  698. package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +1949 -0
  699. package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +195 -0
  700. package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +1131 -0
  701. package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +296 -0
  702. package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +37 -0
  703. package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +265 -0
  704. package/android/src/main/cpp/libyuv/include/libyuv/row.h +6738 -0
  705. package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +2154 -0
  706. package/android/src/main/cpp/libyuv/include/libyuv/scale.h +336 -0
  707. package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +76 -0
  708. package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +42 -0
  709. package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +1726 -0
  710. package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +51 -0
  711. package/android/src/main/cpp/libyuv/include/libyuv/version.h +16 -0
  712. package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +222 -0
  713. package/android/src/main/cpp/libyuv/include/libyuv.h +33 -0
  714. package/android/src/main/cpp/libyuv/infra/config/OWNERS +3 -0
  715. package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +17 -0
  716. package/android/src/main/cpp/libyuv/infra/config/README.md +2 -0
  717. package/android/src/main/cpp/libyuv/infra/config/codereview.settings +6 -0
  718. package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +144 -0
  719. package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +1185 -0
  720. package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +9 -0
  721. package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +246 -0
  722. package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +385 -0
  723. package/android/src/main/cpp/libyuv/infra/config/main.star +402 -0
  724. package/android/src/main/cpp/libyuv/infra/config/project.cfg +16 -0
  725. package/android/src/main/cpp/libyuv/infra/config/realms.cfg +111 -0
  726. package/android/src/main/cpp/libyuv/libyuv.gni +34 -0
  727. package/android/src/main/cpp/libyuv/libyuv.gyp +149 -0
  728. package/android/src/main/cpp/libyuv/libyuv.gypi +87 -0
  729. package/android/src/main/cpp/libyuv/linux.mk +96 -0
  730. package/android/src/main/cpp/libyuv/public.mk +13 -0
  731. package/android/src/main/cpp/libyuv/pylintrc +49 -0
  732. package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +74 -0
  733. package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +56 -0
  734. package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +15 -0
  735. package/android/src/main/cpp/libyuv/source/compare.cc +435 -0
  736. package/android/src/main/cpp/libyuv/source/compare_common.cc +74 -0
  737. package/android/src/main/cpp/libyuv/source/compare_gcc.cc +362 -0
  738. package/android/src/main/cpp/libyuv/source/compare_neon.cc +96 -0
  739. package/android/src/main/cpp/libyuv/source/compare_neon64.cc +223 -0
  740. package/android/src/main/cpp/libyuv/source/compare_win.cc +241 -0
  741. package/android/src/main/cpp/libyuv/source/convert.cc +4746 -0
  742. package/android/src/main/cpp/libyuv/source/convert_argb.cc +9179 -0
  743. package/android/src/main/cpp/libyuv/source/convert_from.cc +866 -0
  744. package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +3671 -0
  745. package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +602 -0
  746. package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +391 -0
  747. package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +288 -0
  748. package/android/src/main/cpp/libyuv/source/cpu_id.cc +496 -0
  749. package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +580 -0
  750. package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +71 -0
  751. package/android/src/main/cpp/libyuv/source/planar_functions.cc +5663 -0
  752. package/android/src/main/cpp/libyuv/source/rotate.cc +1241 -0
  753. package/android/src/main/cpp/libyuv/source/rotate_any.cc +76 -0
  754. package/android/src/main/cpp/libyuv/source/rotate_argb.cc +259 -0
  755. package/android/src/main/cpp/libyuv/source/rotate_common.cc +208 -0
  756. package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +505 -0
  757. package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +233 -0
  758. package/android/src/main/cpp/libyuv/source/rotate_neon.cc +219 -0
  759. package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +273 -0
  760. package/android/src/main/cpp/libyuv/source/rotate_sme.cc +174 -0
  761. package/android/src/main/cpp/libyuv/source/rotate_win.cc +253 -0
  762. package/android/src/main/cpp/libyuv/source/row_any.cc +2519 -0
  763. package/android/src/main/cpp/libyuv/source/row_common.cc +4461 -0
  764. package/android/src/main/cpp/libyuv/source/row_gcc.cc +9570 -0
  765. package/android/src/main/cpp/libyuv/source/row_lasx.cc +2343 -0
  766. package/android/src/main/cpp/libyuv/source/row_lsx.cc +3030 -0
  767. package/android/src/main/cpp/libyuv/source/row_neon.cc +4026 -0
  768. package/android/src/main/cpp/libyuv/source/row_neon64.cc +5617 -0
  769. package/android/src/main/cpp/libyuv/source/row_rvv.cc +2599 -0
  770. package/android/src/main/cpp/libyuv/source/row_sme.cc +1183 -0
  771. package/android/src/main/cpp/libyuv/source/row_sve.cc +1088 -0
  772. package/android/src/main/cpp/libyuv/source/row_win.cc +6453 -0
  773. package/android/src/main/cpp/libyuv/source/scale.cc +2710 -0
  774. package/android/src/main/cpp/libyuv/source/scale_any.cc +991 -0
  775. package/android/src/main/cpp/libyuv/source/scale_argb.cc +1158 -0
  776. package/android/src/main/cpp/libyuv/source/scale_common.cc +1977 -0
  777. package/android/src/main/cpp/libyuv/source/scale_gcc.cc +2947 -0
  778. package/android/src/main/cpp/libyuv/source/scale_lsx.cc +739 -0
  779. package/android/src/main/cpp/libyuv/source/scale_neon.cc +1449 -0
  780. package/android/src/main/cpp/libyuv/source/scale_neon64.cc +1552 -0
  781. package/android/src/main/cpp/libyuv/source/scale_rgb.cc +82 -0
  782. package/android/src/main/cpp/libyuv/source/scale_rvv.cc +1971 -0
  783. package/android/src/main/cpp/libyuv/source/scale_sme.cc +555 -0
  784. package/android/src/main/cpp/libyuv/source/scale_uv.cc +1159 -0
  785. package/android/src/main/cpp/libyuv/source/scale_win.cc +1392 -0
  786. package/android/src/main/cpp/libyuv/source/test.sh +35 -0
  787. package/android/src/main/cpp/libyuv/source/video_common.cc +62 -0
  788. package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +4 -0
  789. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +931 -0
  790. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +164 -0
  791. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +21 -0
  792. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +13 -0
  793. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +13 -0
  794. package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +38 -0
  795. package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +3 -0
  796. package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +9 -0
  797. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +3 -0
  798. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +15 -0
  799. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +25 -0
  800. package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +43 -0
  801. package/android/src/main/cpp/libyuv/unit_test/color_test.cc +848 -0
  802. package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +739 -0
  803. package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +2867 -0
  804. package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +2133 -0
  805. package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +427 -0
  806. package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +63 -0
  807. package/android/src/main/cpp/libyuv/unit_test/math_test.cc +160 -0
  808. package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +4731 -0
  809. package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +334 -0
  810. package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +962 -0
  811. package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +590 -0
  812. package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +465 -0
  813. package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +280 -0
  814. package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +1135 -0
  815. package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +249 -0
  816. package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +12 -0
  817. package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +7 -0
  818. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +5 -0
  819. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +10 -0
  820. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +7 -0
  821. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +4 -0
  822. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +4 -0
  823. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +4 -0
  824. package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +23 -0
  825. package/android/src/main/cpp/libyuv/unit_test/testdata/test0.jpg +0 -0
  826. package/android/src/main/cpp/libyuv/unit_test/testdata/test1.jpg +0 -0
  827. package/android/src/main/cpp/libyuv/unit_test/testdata/test2.jpg +0 -0
  828. package/android/src/main/cpp/libyuv/unit_test/testdata/test3.jpg +0 -0
  829. package/android/src/main/cpp/libyuv/unit_test/testdata/test4.jpg +0 -0
  830. package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +581 -0
  831. package/android/src/main/cpp/libyuv/unit_test/unit_test.h +232 -0
  832. package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +112 -0
  833. package/android/src/main/cpp/libyuv/util/Makefile +9 -0
  834. package/android/src/main/cpp/libyuv/util/color.cc +120 -0
  835. package/android/src/main/cpp/libyuv/util/compare.cc +67 -0
  836. package/android/src/main/cpp/libyuv/util/cpuid.c +211 -0
  837. package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +28 -0
  838. package/android/src/main/cpp/libyuv/util/psnr.cc +291 -0
  839. package/android/src/main/cpp/libyuv/util/psnr.h +47 -0
  840. package/android/src/main/cpp/libyuv/util/psnr_main.cc +620 -0
  841. package/android/src/main/cpp/libyuv/util/ssim.cc +364 -0
  842. package/android/src/main/cpp/libyuv/util/ssim.h +38 -0
  843. package/android/src/main/cpp/libyuv/util/yuvconstants.c +114 -0
  844. package/android/src/main/cpp/libyuv/util/yuvconvert.cc +367 -0
  845. package/android/src/main/cpp/libyuv/winarm.mk +47 -0
  846. package/android/src/main/java/com/faceantispoof/AcceleratorConfig.kt +49 -0
  847. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofFrameProcessor.kt +145 -0
  848. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofModule.kt +170 -0
  849. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofPackage.kt +38 -0
  850. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofingAdvanced.kt +288 -0
  851. package/android/src/main/java/com/faceantispoof/FastYuv.kt +51 -0
  852. package/android/src/main/java/com/faceantispoof/YuvToFloatArrayConverter.kt +198 -0
  853. package/android/src/main/java/com/faceantispoof/YuvToRgbConverter.kt +73 -0
  854. package/android/src/main/res/values/strings.xml +3 -0
  855. package/index.d.ts +84 -0
  856. package/index.js +47 -0
  857. package/package.json +73 -0
@@ -0,0 +1,3671 @@
1
+ /*
2
+ * Copyright 2012 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
+ #include "libyuv/convert_from_argb.h"
12
+
13
+ #include "libyuv/basic_types.h"
14
+ #include "libyuv/cpu_id.h"
15
+ #include "libyuv/planar_functions.h"
16
+ #include "libyuv/row.h"
17
+
18
+ #ifdef __cplusplus
19
+ namespace libyuv {
20
+ extern "C" {
21
+ #endif
22
+
23
+ // ARGB little endian (bgra in memory) to I444
24
+ LIBYUV_API
25
+ int ARGBToI444(const uint8_t* src_argb,
26
+ int src_stride_argb,
27
+ uint8_t* dst_y,
28
+ int dst_stride_y,
29
+ uint8_t* dst_u,
30
+ int dst_stride_u,
31
+ uint8_t* dst_v,
32
+ int dst_stride_v,
33
+ int width,
34
+ int height) {
35
+ int y;
36
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
37
+ ARGBToYRow_C;
38
+ void (*ARGBToUV444Row)(const uint8_t* src_argb, uint8_t* dst_u,
39
+ uint8_t* dst_v, int width) = ARGBToUV444Row_C;
40
+ if (!src_argb || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
41
+ return -1;
42
+ }
43
+ if (height < 0) {
44
+ height = -height;
45
+ src_argb = src_argb + (height - 1) * src_stride_argb;
46
+ src_stride_argb = -src_stride_argb;
47
+ }
48
+ // Coalesce rows.
49
+ if (src_stride_argb == width * 4 && dst_stride_y == width &&
50
+ dst_stride_u == width && dst_stride_v == width) {
51
+ width *= height;
52
+ height = 1;
53
+ src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
54
+ }
55
+ #if defined(HAS_ARGBTOUV444ROW_SSSE3)
56
+ if (TestCpuFlag(kCpuHasSSSE3)) {
57
+ ARGBToUV444Row = ARGBToUV444Row_Any_SSSE3;
58
+ if (IS_ALIGNED(width, 16)) {
59
+ ARGBToUV444Row = ARGBToUV444Row_SSSE3;
60
+ }
61
+ }
62
+ #endif
63
+ #if defined(HAS_ARGBTOUV444ROW_AVX2)
64
+ if (TestCpuFlag(kCpuHasAVX2)) {
65
+ ARGBToUV444Row = ARGBToUV444Row_Any_AVX2;
66
+ if (IS_ALIGNED(width, 32)) {
67
+ ARGBToUV444Row = ARGBToUV444Row_AVX2;
68
+ }
69
+ }
70
+ #endif
71
+ #if defined(HAS_ARGBTOUV444ROW_NEON)
72
+ if (TestCpuFlag(kCpuHasNEON)) {
73
+ ARGBToUV444Row = ARGBToUV444Row_Any_NEON;
74
+ if (IS_ALIGNED(width, 8)) {
75
+ ARGBToUV444Row = ARGBToUV444Row_NEON;
76
+ }
77
+ }
78
+ #endif
79
+ #if defined(HAS_ARGBTOUV444ROW_NEON_I8MM)
80
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
81
+ ARGBToUV444Row = ARGBToUV444Row_Any_NEON_I8MM;
82
+ if (IS_ALIGNED(width, 8)) {
83
+ ARGBToUV444Row = ARGBToUV444Row_NEON_I8MM;
84
+ }
85
+ }
86
+ #endif
87
+ #if defined(HAS_ARGBTOUV444ROW_LSX)
88
+ if (TestCpuFlag(kCpuHasLSX)) {
89
+ ARGBToUV444Row = ARGBToUV444Row_Any_LSX;
90
+ if (IS_ALIGNED(width, 16)) {
91
+ ARGBToUV444Row = ARGBToUV444Row_LSX;
92
+ }
93
+ }
94
+ #endif
95
+ #if defined(HAS_ARGBTOUV444ROW_LASX)
96
+ if (TestCpuFlag(kCpuHasLASX)) {
97
+ ARGBToUV444Row = ARGBToUV444Row_Any_LASX;
98
+ if (IS_ALIGNED(width, 32)) {
99
+ ARGBToUV444Row = ARGBToUV444Row_LASX;
100
+ }
101
+ }
102
+ #endif
103
+ #if defined(HAS_ARGBTOYROW_SSSE3)
104
+ if (TestCpuFlag(kCpuHasSSSE3)) {
105
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
106
+ if (IS_ALIGNED(width, 16)) {
107
+ ARGBToYRow = ARGBToYRow_SSSE3;
108
+ }
109
+ }
110
+ #endif
111
+ #if defined(HAS_ARGBTOYROW_AVX2)
112
+ if (TestCpuFlag(kCpuHasAVX2)) {
113
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
114
+ if (IS_ALIGNED(width, 32)) {
115
+ ARGBToYRow = ARGBToYRow_AVX2;
116
+ }
117
+ }
118
+ #endif
119
+ #if defined(HAS_ARGBTOYROW_NEON)
120
+ if (TestCpuFlag(kCpuHasNEON)) {
121
+ ARGBToYRow = ARGBToYRow_Any_NEON;
122
+ if (IS_ALIGNED(width, 16)) {
123
+ ARGBToYRow = ARGBToYRow_NEON;
124
+ }
125
+ }
126
+ #endif
127
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
128
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
129
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
130
+ if (IS_ALIGNED(width, 16)) {
131
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
132
+ }
133
+ }
134
+ #endif
135
+ #if defined(HAS_ARGBTOYROW_LSX)
136
+ if (TestCpuFlag(kCpuHasLSX)) {
137
+ ARGBToYRow = ARGBToYRow_Any_LSX;
138
+ if (IS_ALIGNED(width, 16)) {
139
+ ARGBToYRow = ARGBToYRow_LSX;
140
+ }
141
+ }
142
+ #endif
143
+ #if defined(HAS_ARGBTOYROW_LASX)
144
+ if (TestCpuFlag(kCpuHasLASX)) {
145
+ ARGBToYRow = ARGBToYRow_Any_LASX;
146
+ if (IS_ALIGNED(width, 32)) {
147
+ ARGBToYRow = ARGBToYRow_LASX;
148
+ }
149
+ }
150
+ #endif
151
+ #if defined(HAS_ARGBTOYROW_RVV)
152
+ if (TestCpuFlag(kCpuHasRVV)) {
153
+ ARGBToYRow = ARGBToYRow_RVV;
154
+ }
155
+ #endif
156
+
157
+ for (y = 0; y < height; ++y) {
158
+ ARGBToUV444Row(src_argb, dst_u, dst_v, width);
159
+ ARGBToYRow(src_argb, dst_y, width);
160
+ src_argb += src_stride_argb;
161
+ dst_y += dst_stride_y;
162
+ dst_u += dst_stride_u;
163
+ dst_v += dst_stride_v;
164
+ }
165
+ return 0;
166
+ }
167
+
168
+ // ARGB little endian (bgra in memory) to I422
169
+ LIBYUV_API
170
+ int ARGBToI422(const uint8_t* src_argb,
171
+ int src_stride_argb,
172
+ uint8_t* dst_y,
173
+ int dst_stride_y,
174
+ uint8_t* dst_u,
175
+ int dst_stride_u,
176
+ uint8_t* dst_v,
177
+ int dst_stride_v,
178
+ int width,
179
+ int height) {
180
+ int y;
181
+ void (*ARGBToUVRow)(const uint8_t* src_argb0, int src_stride_argb,
182
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
183
+ ARGBToUVRow_C;
184
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
185
+ ARGBToYRow_C;
186
+ if (!src_argb || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
187
+ return -1;
188
+ }
189
+ // Negative height means invert the image.
190
+ if (height < 0) {
191
+ height = -height;
192
+ src_argb = src_argb + (height - 1) * src_stride_argb;
193
+ src_stride_argb = -src_stride_argb;
194
+ }
195
+ // Coalesce rows.
196
+ if (src_stride_argb == width * 4 && dst_stride_y == width &&
197
+ dst_stride_u * 2 == width && dst_stride_v * 2 == width) {
198
+ width *= height;
199
+ height = 1;
200
+ src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
201
+ }
202
+ #if defined(HAS_ARGBTOYROW_SSSE3)
203
+ if (TestCpuFlag(kCpuHasSSSE3)) {
204
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
205
+ if (IS_ALIGNED(width, 16)) {
206
+ ARGBToYRow = ARGBToYRow_SSSE3;
207
+ }
208
+ }
209
+ #endif
210
+ #if defined(HAS_ARGBTOUVROW_SSSE3)
211
+ if (TestCpuFlag(kCpuHasSSSE3)) {
212
+ ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
213
+ if (IS_ALIGNED(width, 16)) {
214
+ ARGBToUVRow = ARGBToUVRow_SSSE3;
215
+ }
216
+ }
217
+ #endif
218
+ #if defined(HAS_ARGBTOYROW_AVX2)
219
+ if (TestCpuFlag(kCpuHasAVX2)) {
220
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
221
+ if (IS_ALIGNED(width, 32)) {
222
+ ARGBToYRow = ARGBToYRow_AVX2;
223
+ }
224
+ }
225
+ #endif
226
+ #if defined(HAS_ARGBTOUVROW_AVX2)
227
+ if (TestCpuFlag(kCpuHasAVX2)) {
228
+ ARGBToUVRow = ARGBToUVRow_Any_AVX2;
229
+ if (IS_ALIGNED(width, 32)) {
230
+ ARGBToUVRow = ARGBToUVRow_AVX2;
231
+ }
232
+ }
233
+ #endif
234
+ #if defined(HAS_ARGBTOYROW_NEON)
235
+ if (TestCpuFlag(kCpuHasNEON)) {
236
+ ARGBToYRow = ARGBToYRow_Any_NEON;
237
+ if (IS_ALIGNED(width, 16)) {
238
+ ARGBToYRow = ARGBToYRow_NEON;
239
+ }
240
+ }
241
+ #endif
242
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
243
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
244
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
245
+ if (IS_ALIGNED(width, 16)) {
246
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
247
+ }
248
+ }
249
+ #endif
250
+ #if defined(HAS_ARGBTOUVROW_NEON)
251
+ if (TestCpuFlag(kCpuHasNEON)) {
252
+ ARGBToUVRow = ARGBToUVRow_Any_NEON;
253
+ if (IS_ALIGNED(width, 16)) {
254
+ ARGBToUVRow = ARGBToUVRow_NEON;
255
+ }
256
+ }
257
+ #endif
258
+ #if defined(HAS_ARGBTOUVROW_NEON_I8MM)
259
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
260
+ ARGBToUVRow = ARGBToUVRow_Any_NEON_I8MM;
261
+ if (IS_ALIGNED(width, 16)) {
262
+ ARGBToUVRow = ARGBToUVRow_NEON_I8MM;
263
+ }
264
+ }
265
+ #endif
266
+ #if defined(HAS_ARGBTOUVROW_SVE2)
267
+ if (TestCpuFlag(kCpuHasSVE2)) {
268
+ ARGBToUVRow = ARGBToUVRow_Any_SVE2;
269
+ if (IS_ALIGNED(width, 2)) {
270
+ ARGBToUVRow = ARGBToUVRow_SVE2;
271
+ }
272
+ }
273
+ #endif
274
+ #if defined(HAS_ARGBTOUVROW_SME)
275
+ if (TestCpuFlag(kCpuHasSME)) {
276
+ ARGBToUVRow = ARGBToUVRow_Any_SME;
277
+ if (IS_ALIGNED(width, 2)) {
278
+ ARGBToUVRow = ARGBToUVRow_SME;
279
+ }
280
+ }
281
+ #endif
282
+ #if defined(HAS_ARGBTOYROW_LSX)
283
+ if (TestCpuFlag(kCpuHasLSX)) {
284
+ ARGBToYRow = ARGBToYRow_Any_LSX;
285
+ if (IS_ALIGNED(width, 16)) {
286
+ ARGBToYRow = ARGBToYRow_LSX;
287
+ }
288
+ }
289
+ #endif
290
+ #if defined(HAS_ARGBTOYROW_LSX) && defined(HAS_ARGBTOUVROW_LSX)
291
+ if (TestCpuFlag(kCpuHasLSX)) {
292
+ ARGBToYRow = ARGBToYRow_Any_LSX;
293
+ ARGBToUVRow = ARGBToUVRow_Any_LSX;
294
+ if (IS_ALIGNED(width, 16)) {
295
+ ARGBToYRow = ARGBToYRow_LSX;
296
+ ARGBToUVRow = ARGBToUVRow_LSX;
297
+ }
298
+ }
299
+ #endif
300
+ #if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
301
+ if (TestCpuFlag(kCpuHasLASX)) {
302
+ ARGBToYRow = ARGBToYRow_Any_LASX;
303
+ ARGBToUVRow = ARGBToUVRow_Any_LASX;
304
+ if (IS_ALIGNED(width, 32)) {
305
+ ARGBToYRow = ARGBToYRow_LASX;
306
+ ARGBToUVRow = ARGBToUVRow_LASX;
307
+ }
308
+ }
309
+ #endif
310
+ #if defined(HAS_ARGBTOYROW_RVV)
311
+ if (TestCpuFlag(kCpuHasRVV)) {
312
+ ARGBToYRow = ARGBToYRow_RVV;
313
+ }
314
+ #endif
315
+
316
+ for (y = 0; y < height; ++y) {
317
+ ARGBToUVRow(src_argb, 0, dst_u, dst_v, width);
318
+ ARGBToYRow(src_argb, dst_y, width);
319
+ src_argb += src_stride_argb;
320
+ dst_y += dst_stride_y;
321
+ dst_u += dst_stride_u;
322
+ dst_v += dst_stride_v;
323
+ }
324
+ return 0;
325
+ }
326
+
327
+ LIBYUV_API
328
+ int ARGBToNV12(const uint8_t* src_argb,
329
+ int src_stride_argb,
330
+ uint8_t* dst_y,
331
+ int dst_stride_y,
332
+ uint8_t* dst_uv,
333
+ int dst_stride_uv,
334
+ int width,
335
+ int height) {
336
+ int y;
337
+ int halfwidth = (width + 1) >> 1;
338
+ void (*ARGBToUVRow)(const uint8_t* src_argb0, int src_stride_argb,
339
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
340
+ ARGBToUVRow_C;
341
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
342
+ ARGBToYRow_C;
343
+ void (*MergeUVRow_)(const uint8_t* src_u, const uint8_t* src_v,
344
+ uint8_t* dst_uv, int width) = MergeUVRow_C;
345
+ if (!src_argb || !dst_y || !dst_uv || width <= 0 || height == 0) {
346
+ return -1;
347
+ }
348
+ // Negative height means invert the image.
349
+ if (height < 0) {
350
+ height = -height;
351
+ src_argb = src_argb + (height - 1) * src_stride_argb;
352
+ src_stride_argb = -src_stride_argb;
353
+ }
354
+ #if defined(HAS_ARGBTOYROW_NEON)
355
+ if (TestCpuFlag(kCpuHasNEON)) {
356
+ ARGBToYRow = ARGBToYRow_Any_NEON;
357
+ if (IS_ALIGNED(width, 16)) {
358
+ ARGBToYRow = ARGBToYRow_NEON;
359
+ }
360
+ }
361
+ #endif
362
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
363
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
364
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
365
+ if (IS_ALIGNED(width, 16)) {
366
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
367
+ }
368
+ }
369
+ #endif
370
+ #if defined(HAS_ARGBTOUVROW_NEON)
371
+ if (TestCpuFlag(kCpuHasNEON)) {
372
+ ARGBToUVRow = ARGBToUVRow_Any_NEON;
373
+ if (IS_ALIGNED(width, 16)) {
374
+ ARGBToUVRow = ARGBToUVRow_NEON;
375
+ }
376
+ }
377
+ #endif
378
+ #if defined(HAS_ARGBTOUVROW_NEON_I8MM)
379
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
380
+ ARGBToUVRow = ARGBToUVRow_Any_NEON_I8MM;
381
+ if (IS_ALIGNED(width, 16)) {
382
+ ARGBToUVRow = ARGBToUVRow_NEON_I8MM;
383
+ }
384
+ }
385
+ #endif
386
+ #if defined(HAS_ARGBTOUVROW_SVE2)
387
+ if (TestCpuFlag(kCpuHasSVE2)) {
388
+ ARGBToUVRow = ARGBToUVRow_Any_SVE2;
389
+ if (IS_ALIGNED(width, 2)) {
390
+ ARGBToUVRow = ARGBToUVRow_SVE2;
391
+ }
392
+ }
393
+ #endif
394
+ #if defined(HAS_ARGBTOUVROW_SME)
395
+ if (TestCpuFlag(kCpuHasSME)) {
396
+ ARGBToUVRow = ARGBToUVRow_Any_SME;
397
+ if (IS_ALIGNED(width, 2)) {
398
+ ARGBToUVRow = ARGBToUVRow_SME;
399
+ }
400
+ }
401
+ #endif
402
+ #if defined(HAS_ARGBTOYROW_SSSE3)
403
+ if (TestCpuFlag(kCpuHasSSSE3)) {
404
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
405
+ if (IS_ALIGNED(width, 16)) {
406
+ ARGBToYRow = ARGBToYRow_SSSE3;
407
+ }
408
+ }
409
+ #endif
410
+ #if defined(HAS_ARGBTOUVROW_SSSE3)
411
+ if (TestCpuFlag(kCpuHasSSSE3)) {
412
+ ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
413
+ if (IS_ALIGNED(width, 16)) {
414
+ ARGBToUVRow = ARGBToUVRow_SSSE3;
415
+ }
416
+ }
417
+ #endif
418
+ #if defined(HAS_ARGBTOYROW_AVX2)
419
+ if (TestCpuFlag(kCpuHasAVX2)) {
420
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
421
+ if (IS_ALIGNED(width, 32)) {
422
+ ARGBToYRow = ARGBToYRow_AVX2;
423
+ }
424
+ }
425
+ #endif
426
+ #if defined(HAS_ARGBTOUVROW_AVX2)
427
+ if (TestCpuFlag(kCpuHasAVX2)) {
428
+ ARGBToUVRow = ARGBToUVRow_Any_AVX2;
429
+ if (IS_ALIGNED(width, 32)) {
430
+ ARGBToUVRow = ARGBToUVRow_AVX2;
431
+ }
432
+ }
433
+ #endif
434
+ #if defined(HAS_ARGBTOYROW_LSX)
435
+ if (TestCpuFlag(kCpuHasLSX)) {
436
+ ARGBToYRow = ARGBToYRow_Any_LSX;
437
+ if (IS_ALIGNED(width, 16)) {
438
+ ARGBToYRow = ARGBToYRow_LSX;
439
+ }
440
+ }
441
+ #endif
442
+ #if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
443
+ if (TestCpuFlag(kCpuHasLASX)) {
444
+ ARGBToYRow = ARGBToYRow_Any_LASX;
445
+ ARGBToUVRow = ARGBToUVRow_Any_LASX;
446
+ if (IS_ALIGNED(width, 32)) {
447
+ ARGBToYRow = ARGBToYRow_LASX;
448
+ ARGBToUVRow = ARGBToUVRow_LASX;
449
+ }
450
+ }
451
+ #endif
452
+ #if defined(HAS_ARGBTOYROW_RVV)
453
+ if (TestCpuFlag(kCpuHasRVV)) {
454
+ ARGBToYRow = ARGBToYRow_RVV;
455
+ }
456
+ #endif
457
+ #if defined(HAS_MERGEUVROW_SSE2)
458
+ if (TestCpuFlag(kCpuHasSSE2)) {
459
+ MergeUVRow_ = MergeUVRow_Any_SSE2;
460
+ if (IS_ALIGNED(halfwidth, 16)) {
461
+ MergeUVRow_ = MergeUVRow_SSE2;
462
+ }
463
+ }
464
+ #endif
465
+ #if defined(HAS_MERGEUVROW_AVX2)
466
+ if (TestCpuFlag(kCpuHasAVX2)) {
467
+ MergeUVRow_ = MergeUVRow_Any_AVX2;
468
+ if (IS_ALIGNED(halfwidth, 16)) {
469
+ MergeUVRow_ = MergeUVRow_AVX2;
470
+ }
471
+ }
472
+ #endif
473
+ #if defined(HAS_MERGEUVROW_AVX512BW)
474
+ if (TestCpuFlag(kCpuHasAVX512BW)) {
475
+ MergeUVRow_ = MergeUVRow_Any_AVX512BW;
476
+ if (IS_ALIGNED(halfwidth, 32)) {
477
+ MergeUVRow_ = MergeUVRow_AVX512BW;
478
+ }
479
+ }
480
+ #endif
481
+ #if defined(HAS_MERGEUVROW_NEON)
482
+ if (TestCpuFlag(kCpuHasNEON)) {
483
+ MergeUVRow_ = MergeUVRow_Any_NEON;
484
+ if (IS_ALIGNED(halfwidth, 16)) {
485
+ MergeUVRow_ = MergeUVRow_NEON;
486
+ }
487
+ }
488
+ #endif
489
+ #if defined(HAS_MERGEUVROW_SME)
490
+ if (TestCpuFlag(kCpuHasSME)) {
491
+ MergeUVRow_ = MergeUVRow_SME;
492
+ }
493
+ #endif
494
+ #if defined(HAS_MERGEUVROW_LSX)
495
+ if (TestCpuFlag(kCpuHasLSX)) {
496
+ MergeUVRow_ = MergeUVRow_Any_LSX;
497
+ if (IS_ALIGNED(halfwidth, 16)) {
498
+ MergeUVRow_ = MergeUVRow_LSX;
499
+ }
500
+ }
501
+ #endif
502
+ #if defined(HAS_MERGEUVROW_RVV)
503
+ if (TestCpuFlag(kCpuHasRVV)) {
504
+ MergeUVRow_ = MergeUVRow_RVV;
505
+ }
506
+ #endif
507
+ {
508
+ // Allocate a rows of uv.
509
+ align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2);
510
+ uint8_t* row_v = row_u + ((halfwidth + 31) & ~31);
511
+ if (!row_u)
512
+ return 1;
513
+
514
+ for (y = 0; y < height - 1; y += 2) {
515
+ ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width);
516
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth);
517
+ ARGBToYRow(src_argb, dst_y, width);
518
+ ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width);
519
+ src_argb += src_stride_argb * 2;
520
+ dst_y += dst_stride_y * 2;
521
+ dst_uv += dst_stride_uv;
522
+ }
523
+ if (height & 1) {
524
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width);
525
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth);
526
+ ARGBToYRow(src_argb, dst_y, width);
527
+ }
528
+ free_aligned_buffer_64(row_u);
529
+ }
530
+ return 0;
531
+ }
532
+
533
+ // Same as NV12 but U and V swapped.
534
+ LIBYUV_API
535
+ int ARGBToNV21(const uint8_t* src_argb,
536
+ int src_stride_argb,
537
+ uint8_t* dst_y,
538
+ int dst_stride_y,
539
+ uint8_t* dst_vu,
540
+ int dst_stride_vu,
541
+ int width,
542
+ int height) {
543
+ int y;
544
+ int halfwidth = (width + 1) >> 1;
545
+ void (*ARGBToUVRow)(const uint8_t* src_argb0, int src_stride_argb,
546
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
547
+ ARGBToUVRow_C;
548
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
549
+ ARGBToYRow_C;
550
+ void (*MergeUVRow_)(const uint8_t* src_u, const uint8_t* src_v,
551
+ uint8_t* dst_vu, int width) = MergeUVRow_C;
552
+ if (!src_argb || !dst_y || !dst_vu || width <= 0 || height == 0) {
553
+ return -1;
554
+ }
555
+ // Negative height means invert the image.
556
+ if (height < 0) {
557
+ height = -height;
558
+ src_argb = src_argb + (height - 1) * src_stride_argb;
559
+ src_stride_argb = -src_stride_argb;
560
+ }
561
+ #if defined(HAS_ARGBTOYROW_SSSE3)
562
+ if (TestCpuFlag(kCpuHasSSSE3)) {
563
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
564
+ if (IS_ALIGNED(width, 16)) {
565
+ ARGBToYRow = ARGBToYRow_SSSE3;
566
+ }
567
+ }
568
+ #endif
569
+ #if defined(HAS_ARGBTOUVROW_SSSE3)
570
+ if (TestCpuFlag(kCpuHasSSSE3)) {
571
+ ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
572
+ if (IS_ALIGNED(width, 16)) {
573
+ ARGBToUVRow = ARGBToUVRow_SSSE3;
574
+ }
575
+ }
576
+ #endif
577
+ #if defined(HAS_ARGBTOYROW_AVX2)
578
+ if (TestCpuFlag(kCpuHasAVX2)) {
579
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
580
+ if (IS_ALIGNED(width, 32)) {
581
+ ARGBToYRow = ARGBToYRow_AVX2;
582
+ }
583
+ }
584
+ #endif
585
+ #if defined(HAS_ARGBTOUVROW_AVX2)
586
+ if (TestCpuFlag(kCpuHasAVX2)) {
587
+ ARGBToUVRow = ARGBToUVRow_Any_AVX2;
588
+ if (IS_ALIGNED(width, 32)) {
589
+ ARGBToUVRow = ARGBToUVRow_AVX2;
590
+ }
591
+ }
592
+ #endif
593
+ #if defined(HAS_ARGBTOYROW_NEON)
594
+ if (TestCpuFlag(kCpuHasNEON)) {
595
+ ARGBToYRow = ARGBToYRow_Any_NEON;
596
+ if (IS_ALIGNED(width, 16)) {
597
+ ARGBToYRow = ARGBToYRow_NEON;
598
+ }
599
+ }
600
+ #endif
601
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
602
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
603
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
604
+ if (IS_ALIGNED(width, 16)) {
605
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
606
+ }
607
+ }
608
+ #endif
609
+ #if defined(HAS_ARGBTOUVROW_NEON)
610
+ if (TestCpuFlag(kCpuHasNEON)) {
611
+ ARGBToUVRow = ARGBToUVRow_Any_NEON;
612
+ if (IS_ALIGNED(width, 16)) {
613
+ ARGBToUVRow = ARGBToUVRow_NEON;
614
+ }
615
+ }
616
+ #endif
617
+ #if defined(HAS_ARGBTOUVROW_NEON_I8MM)
618
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
619
+ ARGBToUVRow = ARGBToUVRow_Any_NEON_I8MM;
620
+ if (IS_ALIGNED(width, 16)) {
621
+ ARGBToUVRow = ARGBToUVRow_NEON_I8MM;
622
+ }
623
+ }
624
+ #endif
625
+ #if defined(HAS_ARGBTOUVROW_SVE2)
626
+ if (TestCpuFlag(kCpuHasSVE2)) {
627
+ ARGBToUVRow = ARGBToUVRow_Any_SVE2;
628
+ if (IS_ALIGNED(width, 2)) {
629
+ ARGBToUVRow = ARGBToUVRow_SVE2;
630
+ }
631
+ }
632
+ #endif
633
+ #if defined(HAS_ARGBTOUVROW_SME)
634
+ if (TestCpuFlag(kCpuHasSME)) {
635
+ ARGBToUVRow = ARGBToUVRow_Any_SME;
636
+ if (IS_ALIGNED(width, 2)) {
637
+ ARGBToUVRow = ARGBToUVRow_SME;
638
+ }
639
+ }
640
+ #endif
641
+ #if defined(HAS_ARGBTOYROW_LSX)
642
+ if (TestCpuFlag(kCpuHasLSX)) {
643
+ ARGBToYRow = ARGBToYRow_Any_LSX;
644
+ if (IS_ALIGNED(width, 16)) {
645
+ ARGBToYRow = ARGBToYRow_LSX;
646
+ }
647
+ }
648
+ #endif
649
+ #if defined(HAS_ARGBTOYROW_LSX) && defined(HAS_ARGBTOUVROW_LSX)
650
+ if (TestCpuFlag(kCpuHasLSX)) {
651
+ ARGBToYRow = ARGBToYRow_Any_LSX;
652
+ ARGBToUVRow = ARGBToUVRow_Any_LSX;
653
+ if (IS_ALIGNED(width, 16)) {
654
+ ARGBToYRow = ARGBToYRow_LSX;
655
+ ARGBToUVRow = ARGBToUVRow_LSX;
656
+ }
657
+ }
658
+ #endif
659
+ #if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
660
+ if (TestCpuFlag(kCpuHasLASX)) {
661
+ ARGBToYRow = ARGBToYRow_Any_LASX;
662
+ ARGBToUVRow = ARGBToUVRow_Any_LASX;
663
+ if (IS_ALIGNED(width, 32)) {
664
+ ARGBToYRow = ARGBToYRow_LASX;
665
+ ARGBToUVRow = ARGBToUVRow_LASX;
666
+ }
667
+ }
668
+ #endif
669
+ #if defined(HAS_ARGBTOYROW_RVV)
670
+ if (TestCpuFlag(kCpuHasRVV)) {
671
+ ARGBToYRow = ARGBToYRow_RVV;
672
+ }
673
+ #endif
674
+ #if defined(HAS_MERGEUVROW_SSE2)
675
+ if (TestCpuFlag(kCpuHasSSE2)) {
676
+ MergeUVRow_ = MergeUVRow_Any_SSE2;
677
+ if (IS_ALIGNED(halfwidth, 16)) {
678
+ MergeUVRow_ = MergeUVRow_SSE2;
679
+ }
680
+ }
681
+ #endif
682
+ #if defined(HAS_MERGEUVROW_AVX2)
683
+ if (TestCpuFlag(kCpuHasAVX2)) {
684
+ MergeUVRow_ = MergeUVRow_Any_AVX2;
685
+ if (IS_ALIGNED(halfwidth, 16)) {
686
+ MergeUVRow_ = MergeUVRow_AVX2;
687
+ }
688
+ }
689
+ #endif
690
+ #if defined(HAS_MERGEUVROW_AVX512BW)
691
+ if (TestCpuFlag(kCpuHasAVX512BW)) {
692
+ MergeUVRow_ = MergeUVRow_Any_AVX512BW;
693
+ if (IS_ALIGNED(halfwidth, 64)) {
694
+ MergeUVRow_ = MergeUVRow_AVX512BW;
695
+ }
696
+ }
697
+ #endif
698
+ #if defined(HAS_MERGEUVROW_NEON)
699
+ if (TestCpuFlag(kCpuHasNEON)) {
700
+ MergeUVRow_ = MergeUVRow_Any_NEON;
701
+ if (IS_ALIGNED(halfwidth, 16)) {
702
+ MergeUVRow_ = MergeUVRow_NEON;
703
+ }
704
+ }
705
+ #endif
706
+ #if defined(HAS_MERGEUVROW_SME)
707
+ if (TestCpuFlag(kCpuHasSME)) {
708
+ MergeUVRow_ = MergeUVRow_SME;
709
+ }
710
+ #endif
711
+ #if defined(HAS_MERGEUVROW_LSX)
712
+ if (TestCpuFlag(kCpuHasLSX)) {
713
+ MergeUVRow_ = MergeUVRow_Any_LSX;
714
+ if (IS_ALIGNED(halfwidth, 16)) {
715
+ MergeUVRow_ = MergeUVRow_LSX;
716
+ }
717
+ }
718
+ #endif
719
+ #if defined(HAS_MERGEUVROW_RVV)
720
+ if (TestCpuFlag(kCpuHasRVV)) {
721
+ MergeUVRow_ = MergeUVRow_RVV;
722
+ }
723
+ #endif
724
+ {
725
+ // Allocate a rows of uv.
726
+ align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2);
727
+ uint8_t* row_v = row_u + ((halfwidth + 31) & ~31);
728
+ if (!row_u)
729
+ return 1;
730
+
731
+ for (y = 0; y < height - 1; y += 2) {
732
+ ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width);
733
+ MergeUVRow_(row_v, row_u, dst_vu, halfwidth);
734
+ ARGBToYRow(src_argb, dst_y, width);
735
+ ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width);
736
+ src_argb += src_stride_argb * 2;
737
+ dst_y += dst_stride_y * 2;
738
+ dst_vu += dst_stride_vu;
739
+ }
740
+ if (height & 1) {
741
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width);
742
+ MergeUVRow_(row_v, row_u, dst_vu, halfwidth);
743
+ ARGBToYRow(src_argb, dst_y, width);
744
+ }
745
+ free_aligned_buffer_64(row_u);
746
+ }
747
+ return 0;
748
+ }
749
+
750
+ LIBYUV_API
751
+ int ABGRToNV12(const uint8_t* src_abgr,
752
+ int src_stride_abgr,
753
+ uint8_t* dst_y,
754
+ int dst_stride_y,
755
+ uint8_t* dst_uv,
756
+ int dst_stride_uv,
757
+ int width,
758
+ int height) {
759
+ int y;
760
+ int halfwidth = (width + 1) >> 1;
761
+ void (*ABGRToUVRow)(const uint8_t* src_abgr0, int src_stride_abgr,
762
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
763
+ ABGRToUVRow_C;
764
+ void (*ABGRToYRow)(const uint8_t* src_abgr, uint8_t* dst_y, int width) =
765
+ ABGRToYRow_C;
766
+ void (*MergeUVRow_)(const uint8_t* src_u, const uint8_t* src_v,
767
+ uint8_t* dst_uv, int width) = MergeUVRow_C;
768
+ if (!src_abgr || !dst_y || !dst_uv || width <= 0 || height == 0) {
769
+ return -1;
770
+ }
771
+ // Negative height means invert the image.
772
+ if (height < 0) {
773
+ height = -height;
774
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
775
+ src_stride_abgr = -src_stride_abgr;
776
+ }
777
+ #if defined(HAS_ABGRTOYROW_SSSE3)
778
+ if (TestCpuFlag(kCpuHasSSSE3)) {
779
+ ABGRToYRow = ABGRToYRow_Any_SSSE3;
780
+ if (IS_ALIGNED(width, 16)) {
781
+ ABGRToYRow = ABGRToYRow_SSSE3;
782
+ }
783
+ }
784
+ #endif
785
+ #if defined(HAS_ABGRTOUVROW_SSSE3)
786
+ if (TestCpuFlag(kCpuHasSSSE3)) {
787
+ ABGRToUVRow = ABGRToUVRow_Any_SSSE3;
788
+ if (IS_ALIGNED(width, 16)) {
789
+ ABGRToUVRow = ABGRToUVRow_SSSE3;
790
+ }
791
+ }
792
+ #endif
793
+ #if defined(HAS_ABGRTOYROW_AVX2)
794
+ if (TestCpuFlag(kCpuHasAVX2)) {
795
+ ABGRToYRow = ABGRToYRow_Any_AVX2;
796
+ if (IS_ALIGNED(width, 32)) {
797
+ ABGRToYRow = ABGRToYRow_AVX2;
798
+ }
799
+ }
800
+ #endif
801
+ #if defined(HAS_ABGRTOUVROW_AVX2)
802
+ if (TestCpuFlag(kCpuHasAVX2)) {
803
+ ABGRToUVRow = ABGRToUVRow_Any_AVX2;
804
+ if (IS_ALIGNED(width, 32)) {
805
+ ABGRToUVRow = ABGRToUVRow_AVX2;
806
+ }
807
+ }
808
+ #endif
809
+ #if defined(HAS_ABGRTOYROW_NEON)
810
+ if (TestCpuFlag(kCpuHasNEON)) {
811
+ ABGRToYRow = ABGRToYRow_Any_NEON;
812
+ if (IS_ALIGNED(width, 16)) {
813
+ ABGRToYRow = ABGRToYRow_NEON;
814
+ }
815
+ }
816
+ #endif
817
+ #if defined(HAS_ABGRTOYROW_NEON_DOTPROD)
818
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
819
+ ABGRToYRow = ABGRToYRow_Any_NEON_DotProd;
820
+ if (IS_ALIGNED(width, 16)) {
821
+ ABGRToYRow = ABGRToYRow_NEON_DotProd;
822
+ }
823
+ }
824
+ #endif
825
+ #if defined(HAS_ABGRTOUVROW_NEON)
826
+ if (TestCpuFlag(kCpuHasNEON)) {
827
+ ABGRToUVRow = ABGRToUVRow_Any_NEON;
828
+ if (IS_ALIGNED(width, 16)) {
829
+ ABGRToUVRow = ABGRToUVRow_NEON;
830
+ }
831
+ }
832
+ #endif
833
+ #if defined(HAS_ABGRTOUVROW_NEON_I8MM)
834
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
835
+ ABGRToUVRow = ABGRToUVRow_Any_NEON_I8MM;
836
+ if (IS_ALIGNED(width, 16)) {
837
+ ABGRToUVRow = ABGRToUVRow_NEON_I8MM;
838
+ }
839
+ }
840
+ #endif
841
+ #if defined(HAS_ABGRTOUVROW_SVE2)
842
+ if (TestCpuFlag(kCpuHasSVE2)) {
843
+ ABGRToUVRow = ABGRToUVRow_Any_SVE2;
844
+ if (IS_ALIGNED(width, 2)) {
845
+ ABGRToUVRow = ABGRToUVRow_SVE2;
846
+ }
847
+ }
848
+ #endif
849
+ #if defined(HAS_ABGRTOUVROW_SME)
850
+ if (TestCpuFlag(kCpuHasSME)) {
851
+ ABGRToUVRow = ABGRToUVRow_Any_SME;
852
+ if (IS_ALIGNED(width, 2)) {
853
+ ABGRToUVRow = ABGRToUVRow_SME;
854
+ }
855
+ }
856
+ #endif
857
+ #if defined(HAS_ABGRTOYROW_LSX)
858
+ if (TestCpuFlag(kCpuHasLSX)) {
859
+ ABGRToYRow = ABGRToYRow_Any_LSX;
860
+ if (IS_ALIGNED(width, 16)) {
861
+ ABGRToYRow = ABGRToYRow_LSX;
862
+ }
863
+ }
864
+ #endif
865
+ #if defined(HAS_ABGRTOYROW_LASX)
866
+ if (TestCpuFlag(kCpuHasLASX)) {
867
+ ABGRToYRow = ABGRToYRow_Any_LASX;
868
+ if (IS_ALIGNED(width, 32)) {
869
+ ABGRToYRow = ABGRToYRow_LASX;
870
+ }
871
+ }
872
+ #endif
873
+ #if defined(HAS_ABGRTOYROW_RVV)
874
+ if (TestCpuFlag(kCpuHasRVV)) {
875
+ ABGRToYRow = ABGRToYRow_RVV;
876
+ }
877
+ #endif
878
+ #if defined(HAS_MERGEUVROW_SSE2)
879
+ if (TestCpuFlag(kCpuHasSSE2)) {
880
+ MergeUVRow_ = MergeUVRow_Any_SSE2;
881
+ if (IS_ALIGNED(halfwidth, 16)) {
882
+ MergeUVRow_ = MergeUVRow_SSE2;
883
+ }
884
+ }
885
+ #endif
886
+ #if defined(HAS_MERGEUVROW_AVX2)
887
+ if (TestCpuFlag(kCpuHasAVX2)) {
888
+ MergeUVRow_ = MergeUVRow_Any_AVX2;
889
+ if (IS_ALIGNED(halfwidth, 16)) {
890
+ MergeUVRow_ = MergeUVRow_AVX2;
891
+ }
892
+ }
893
+ #endif
894
+ #if defined(HAS_MERGEUVROW_AVX512BW)
895
+ if (TestCpuFlag(kCpuHasAVX512BW)) {
896
+ MergeUVRow_ = MergeUVRow_Any_AVX512BW;
897
+ if (IS_ALIGNED(halfwidth, 64)) {
898
+ MergeUVRow_ = MergeUVRow_AVX512BW;
899
+ }
900
+ }
901
+ #endif
902
+ #if defined(HAS_MERGEUVROW_NEON)
903
+ if (TestCpuFlag(kCpuHasNEON)) {
904
+ MergeUVRow_ = MergeUVRow_Any_NEON;
905
+ if (IS_ALIGNED(halfwidth, 16)) {
906
+ MergeUVRow_ = MergeUVRow_NEON;
907
+ }
908
+ }
909
+ #endif
910
+ #if defined(HAS_MERGEUVROW_SME)
911
+ if (TestCpuFlag(kCpuHasSME)) {
912
+ MergeUVRow_ = MergeUVRow_SME;
913
+ }
914
+ #endif
915
+ #if defined(HAS_MERGEUVROW_LSX)
916
+ if (TestCpuFlag(kCpuHasLSX)) {
917
+ MergeUVRow_ = MergeUVRow_Any_LSX;
918
+ if (IS_ALIGNED(halfwidth, 16)) {
919
+ MergeUVRow_ = MergeUVRow_LSX;
920
+ }
921
+ }
922
+ #endif
923
+ #if defined(HAS_MERGEUVROW_RVV)
924
+ if (TestCpuFlag(kCpuHasRVV)) {
925
+ MergeUVRow_ = MergeUVRow_RVV;
926
+ }
927
+ #endif
928
+ {
929
+ // Allocate a rows of uv.
930
+ align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2);
931
+ uint8_t* row_v = row_u + ((halfwidth + 31) & ~31);
932
+ if (!row_u)
933
+ return 1;
934
+
935
+ for (y = 0; y < height - 1; y += 2) {
936
+ ABGRToUVRow(src_abgr, src_stride_abgr, row_u, row_v, width);
937
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth);
938
+ ABGRToYRow(src_abgr, dst_y, width);
939
+ ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width);
940
+ src_abgr += src_stride_abgr * 2;
941
+ dst_y += dst_stride_y * 2;
942
+ dst_uv += dst_stride_uv;
943
+ }
944
+ if (height & 1) {
945
+ ABGRToUVRow(src_abgr, 0, row_u, row_v, width);
946
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth);
947
+ ABGRToYRow(src_abgr, dst_y, width);
948
+ }
949
+ free_aligned_buffer_64(row_u);
950
+ }
951
+ return 0;
952
+ }
953
+
954
+ // Same as NV12 but U and V swapped.
955
+ LIBYUV_API
956
+ int ABGRToNV21(const uint8_t* src_abgr,
957
+ int src_stride_abgr,
958
+ uint8_t* dst_y,
959
+ int dst_stride_y,
960
+ uint8_t* dst_vu,
961
+ int dst_stride_vu,
962
+ int width,
963
+ int height) {
964
+ int y;
965
+ int halfwidth = (width + 1) >> 1;
966
+ void (*ABGRToUVRow)(const uint8_t* src_abgr0, int src_stride_abgr,
967
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
968
+ ABGRToUVRow_C;
969
+ void (*ABGRToYRow)(const uint8_t* src_abgr, uint8_t* dst_y, int width) =
970
+ ABGRToYRow_C;
971
+ void (*MergeUVRow_)(const uint8_t* src_u, const uint8_t* src_v,
972
+ uint8_t* dst_vu, int width) = MergeUVRow_C;
973
+ if (!src_abgr || !dst_y || !dst_vu || width <= 0 || height == 0) {
974
+ return -1;
975
+ }
976
+ // Negative height means invert the image.
977
+ if (height < 0) {
978
+ height = -height;
979
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
980
+ src_stride_abgr = -src_stride_abgr;
981
+ }
982
+ #if defined(HAS_ABGRTOYROW_SSSE3)
983
+ if (TestCpuFlag(kCpuHasSSSE3)) {
984
+ ABGRToYRow = ABGRToYRow_Any_SSSE3;
985
+ if (IS_ALIGNED(width, 16)) {
986
+ ABGRToYRow = ABGRToYRow_SSSE3;
987
+ }
988
+ }
989
+ #endif
990
+ #if defined(HAS_ABGRTOUVROW_SSSE3)
991
+ if (TestCpuFlag(kCpuHasSSSE3)) {
992
+ ABGRToUVRow = ABGRToUVRow_Any_SSSE3;
993
+ if (IS_ALIGNED(width, 16)) {
994
+ ABGRToUVRow = ABGRToUVRow_SSSE3;
995
+ }
996
+ }
997
+ #endif
998
+ #if defined(HAS_ABGRTOYROW_AVX2)
999
+ if (TestCpuFlag(kCpuHasAVX2)) {
1000
+ ABGRToYRow = ABGRToYRow_Any_AVX2;
1001
+ if (IS_ALIGNED(width, 32)) {
1002
+ ABGRToYRow = ABGRToYRow_AVX2;
1003
+ }
1004
+ }
1005
+ #endif
1006
+ #if defined(HAS_ABGRTOUVROW_AVX2)
1007
+ if (TestCpuFlag(kCpuHasAVX2)) {
1008
+ ABGRToUVRow = ABGRToUVRow_Any_AVX2;
1009
+ if (IS_ALIGNED(width, 32)) {
1010
+ ABGRToUVRow = ABGRToUVRow_AVX2;
1011
+ }
1012
+ }
1013
+ #endif
1014
+ #if defined(HAS_ABGRTOYROW_NEON)
1015
+ if (TestCpuFlag(kCpuHasNEON)) {
1016
+ ABGRToYRow = ABGRToYRow_Any_NEON;
1017
+ if (IS_ALIGNED(width, 16)) {
1018
+ ABGRToYRow = ABGRToYRow_NEON;
1019
+ }
1020
+ }
1021
+ #endif
1022
+ #if defined(HAS_ABGRTOYROW_NEON_DOTPROD)
1023
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
1024
+ ABGRToYRow = ABGRToYRow_Any_NEON_DotProd;
1025
+ if (IS_ALIGNED(width, 16)) {
1026
+ ABGRToYRow = ABGRToYRow_NEON_DotProd;
1027
+ }
1028
+ }
1029
+ #endif
1030
+ #if defined(HAS_ABGRTOUVROW_NEON)
1031
+ if (TestCpuFlag(kCpuHasNEON)) {
1032
+ ABGRToUVRow = ABGRToUVRow_Any_NEON;
1033
+ if (IS_ALIGNED(width, 16)) {
1034
+ ABGRToUVRow = ABGRToUVRow_NEON;
1035
+ }
1036
+ }
1037
+ #endif
1038
+ #if defined(HAS_ABGRTOUVROW_NEON_I8MM)
1039
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
1040
+ ABGRToUVRow = ABGRToUVRow_Any_NEON_I8MM;
1041
+ if (IS_ALIGNED(width, 16)) {
1042
+ ABGRToUVRow = ABGRToUVRow_NEON_I8MM;
1043
+ }
1044
+ }
1045
+ #endif
1046
+ #if defined(HAS_ABGRTOUVROW_SVE2)
1047
+ if (TestCpuFlag(kCpuHasSVE2)) {
1048
+ ABGRToUVRow = ABGRToUVRow_Any_SVE2;
1049
+ if (IS_ALIGNED(width, 2)) {
1050
+ ABGRToUVRow = ABGRToUVRow_SVE2;
1051
+ }
1052
+ }
1053
+ #endif
1054
+ #if defined(HAS_ABGRTOUVROW_SME)
1055
+ if (TestCpuFlag(kCpuHasSME)) {
1056
+ ABGRToUVRow = ABGRToUVRow_Any_SME;
1057
+ if (IS_ALIGNED(width, 2)) {
1058
+ ABGRToUVRow = ABGRToUVRow_SME;
1059
+ }
1060
+ }
1061
+ #endif
1062
+ #if defined(HAS_ABGRTOYROW_LSX)
1063
+ if (TestCpuFlag(kCpuHasLSX)) {
1064
+ ABGRToYRow = ABGRToYRow_Any_LSX;
1065
+ if (IS_ALIGNED(width, 16)) {
1066
+ ABGRToYRow = ABGRToYRow_LSX;
1067
+ }
1068
+ }
1069
+ #endif
1070
+ #if defined(HAS_ABGRTOYROW_LASX)
1071
+ if (TestCpuFlag(kCpuHasLASX)) {
1072
+ ABGRToYRow = ABGRToYRow_Any_LASX;
1073
+ if (IS_ALIGNED(width, 32)) {
1074
+ ABGRToYRow = ABGRToYRow_LASX;
1075
+ }
1076
+ }
1077
+ #endif
1078
+ #if defined(HAS_ABGRTOYROW_RVV)
1079
+ if (TestCpuFlag(kCpuHasRVV)) {
1080
+ ABGRToYRow = ABGRToYRow_RVV;
1081
+ }
1082
+ #endif
1083
+ #if defined(HAS_MERGEUVROW_SSE2)
1084
+ if (TestCpuFlag(kCpuHasSSE2)) {
1085
+ MergeUVRow_ = MergeUVRow_Any_SSE2;
1086
+ if (IS_ALIGNED(halfwidth, 16)) {
1087
+ MergeUVRow_ = MergeUVRow_SSE2;
1088
+ }
1089
+ }
1090
+ #endif
1091
+ #if defined(HAS_MERGEUVROW_AVX2)
1092
+ if (TestCpuFlag(kCpuHasAVX2)) {
1093
+ MergeUVRow_ = MergeUVRow_Any_AVX2;
1094
+ if (IS_ALIGNED(halfwidth, 16)) {
1095
+ MergeUVRow_ = MergeUVRow_AVX2;
1096
+ }
1097
+ }
1098
+ #endif
1099
+ #if defined(HAS_MERGEUVROW_AVX512BW)
1100
+ if (TestCpuFlag(kCpuHasAVX512BW)) {
1101
+ MergeUVRow_ = MergeUVRow_Any_AVX512BW;
1102
+ if (IS_ALIGNED(halfwidth, 64)) {
1103
+ MergeUVRow_ = MergeUVRow_AVX512BW;
1104
+ }
1105
+ }
1106
+ #endif
1107
+ #if defined(HAS_MERGEUVROW_NEON)
1108
+ if (TestCpuFlag(kCpuHasNEON)) {
1109
+ MergeUVRow_ = MergeUVRow_Any_NEON;
1110
+ if (IS_ALIGNED(halfwidth, 16)) {
1111
+ MergeUVRow_ = MergeUVRow_NEON;
1112
+ }
1113
+ }
1114
+ #endif
1115
+ #if defined(HAS_MERGEUVROW_SME)
1116
+ if (TestCpuFlag(kCpuHasSME)) {
1117
+ MergeUVRow_ = MergeUVRow_SME;
1118
+ }
1119
+ #endif
1120
+ #if defined(HAS_MERGEUVROW_LSX)
1121
+ if (TestCpuFlag(kCpuHasLSX)) {
1122
+ MergeUVRow_ = MergeUVRow_Any_LSX;
1123
+ if (IS_ALIGNED(halfwidth, 16)) {
1124
+ MergeUVRow_ = MergeUVRow_LSX;
1125
+ }
1126
+ }
1127
+ #endif
1128
+ #if defined(HAS_MERGEUVROW_RVV)
1129
+ if (TestCpuFlag(kCpuHasRVV)) {
1130
+ MergeUVRow_ = MergeUVRow_RVV;
1131
+ }
1132
+ #endif
1133
+ {
1134
+ // Allocate a rows of uv.
1135
+ align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2);
1136
+ uint8_t* row_v = row_u + ((halfwidth + 31) & ~31);
1137
+ if (!row_u)
1138
+ return 1;
1139
+
1140
+ for (y = 0; y < height - 1; y += 2) {
1141
+ ABGRToUVRow(src_abgr, src_stride_abgr, row_u, row_v, width);
1142
+ MergeUVRow_(row_v, row_u, dst_vu, halfwidth);
1143
+ ABGRToYRow(src_abgr, dst_y, width);
1144
+ ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width);
1145
+ src_abgr += src_stride_abgr * 2;
1146
+ dst_y += dst_stride_y * 2;
1147
+ dst_vu += dst_stride_vu;
1148
+ }
1149
+ if (height & 1) {
1150
+ ABGRToUVRow(src_abgr, 0, row_u, row_v, width);
1151
+ MergeUVRow_(row_v, row_u, dst_vu, halfwidth);
1152
+ ABGRToYRow(src_abgr, dst_y, width);
1153
+ }
1154
+ free_aligned_buffer_64(row_u);
1155
+ }
1156
+ return 0;
1157
+ }
1158
+
1159
+ // Convert ARGB to YUY2.
1160
+ LIBYUV_API
1161
+ int ARGBToYUY2(const uint8_t* src_argb,
1162
+ int src_stride_argb,
1163
+ uint8_t* dst_yuy2,
1164
+ int dst_stride_yuy2,
1165
+ int width,
1166
+ int height) {
1167
+ int y;
1168
+ void (*ARGBToUVRow)(const uint8_t* src_argb, int src_stride_argb,
1169
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
1170
+ ARGBToUVRow_C;
1171
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
1172
+ ARGBToYRow_C;
1173
+ void (*I422ToYUY2Row)(const uint8_t* src_y, const uint8_t* src_u,
1174
+ const uint8_t* src_v, uint8_t* dst_yuy2, int width) =
1175
+ I422ToYUY2Row_C;
1176
+
1177
+ if (!src_argb || !dst_yuy2 || width <= 0 || height == 0) {
1178
+ return -1;
1179
+ }
1180
+ // Negative height means invert the image.
1181
+ if (height < 0) {
1182
+ height = -height;
1183
+ dst_yuy2 = dst_yuy2 + (height - 1) * dst_stride_yuy2;
1184
+ dst_stride_yuy2 = -dst_stride_yuy2;
1185
+ }
1186
+ // Coalesce rows.
1187
+ if (src_stride_argb == width * 4 && dst_stride_yuy2 == width * 2) {
1188
+ width *= height;
1189
+ height = 1;
1190
+ src_stride_argb = dst_stride_yuy2 = 0;
1191
+ }
1192
+ #if defined(HAS_ARGBTOYROW_SSSE3)
1193
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1194
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
1195
+ if (IS_ALIGNED(width, 16)) {
1196
+ ARGBToYRow = ARGBToYRow_SSSE3;
1197
+ }
1198
+ }
1199
+ #endif
1200
+ #if defined(HAS_ARGBTOUVROW_SSSE3)
1201
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1202
+ ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
1203
+ if (IS_ALIGNED(width, 16)) {
1204
+ ARGBToUVRow = ARGBToUVRow_SSSE3;
1205
+ }
1206
+ }
1207
+ #endif
1208
+ #if defined(HAS_ARGBTOYROW_AVX2)
1209
+ if (TestCpuFlag(kCpuHasAVX2)) {
1210
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
1211
+ if (IS_ALIGNED(width, 32)) {
1212
+ ARGBToYRow = ARGBToYRow_AVX2;
1213
+ }
1214
+ }
1215
+ #endif
1216
+ #if defined(HAS_ARGBTOUVROW_AVX2)
1217
+ if (TestCpuFlag(kCpuHasAVX2)) {
1218
+ ARGBToUVRow = ARGBToUVRow_Any_AVX2;
1219
+ if (IS_ALIGNED(width, 32)) {
1220
+ ARGBToUVRow = ARGBToUVRow_AVX2;
1221
+ }
1222
+ }
1223
+ #endif
1224
+ #if defined(HAS_ARGBTOYROW_NEON)
1225
+ if (TestCpuFlag(kCpuHasNEON)) {
1226
+ ARGBToYRow = ARGBToYRow_Any_NEON;
1227
+ if (IS_ALIGNED(width, 16)) {
1228
+ ARGBToYRow = ARGBToYRow_NEON;
1229
+ }
1230
+ }
1231
+ #endif
1232
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
1233
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
1234
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
1235
+ if (IS_ALIGNED(width, 16)) {
1236
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
1237
+ }
1238
+ }
1239
+ #endif
1240
+ #if defined(HAS_ARGBTOUVROW_NEON)
1241
+ if (TestCpuFlag(kCpuHasNEON)) {
1242
+ ARGBToUVRow = ARGBToUVRow_Any_NEON;
1243
+ if (IS_ALIGNED(width, 16)) {
1244
+ ARGBToUVRow = ARGBToUVRow_NEON;
1245
+ }
1246
+ }
1247
+ #endif
1248
+ #if defined(HAS_ARGBTOUVROW_NEON_I8MM)
1249
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
1250
+ ARGBToUVRow = ARGBToUVRow_Any_NEON_I8MM;
1251
+ if (IS_ALIGNED(width, 16)) {
1252
+ ARGBToUVRow = ARGBToUVRow_NEON_I8MM;
1253
+ }
1254
+ }
1255
+ #endif
1256
+ #if defined(HAS_ARGBTOUVROW_SVE2)
1257
+ if (TestCpuFlag(kCpuHasSVE2)) {
1258
+ ARGBToUVRow = ARGBToUVRow_Any_SVE2;
1259
+ if (IS_ALIGNED(width, 2)) {
1260
+ ARGBToUVRow = ARGBToUVRow_SVE2;
1261
+ }
1262
+ }
1263
+ #endif
1264
+ #if defined(HAS_ARGBTOUVROW_SME)
1265
+ if (TestCpuFlag(kCpuHasSME)) {
1266
+ ARGBToUVRow = ARGBToUVRow_Any_SME;
1267
+ if (IS_ALIGNED(width, 2)) {
1268
+ ARGBToUVRow = ARGBToUVRow_SME;
1269
+ }
1270
+ }
1271
+ #endif
1272
+ #if defined(HAS_ARGBTOYROW_LSX)
1273
+ if (TestCpuFlag(kCpuHasLSX)) {
1274
+ ARGBToYRow = ARGBToYRow_Any_LSX;
1275
+ if (IS_ALIGNED(width, 16)) {
1276
+ ARGBToYRow = ARGBToYRow_LSX;
1277
+ }
1278
+ }
1279
+ #endif
1280
+ #if defined(HAS_ARGBTOYROW_LSX) && defined(HAS_ARGBTOUVROW_LSX)
1281
+ if (TestCpuFlag(kCpuHasLSX)) {
1282
+ ARGBToYRow = ARGBToYRow_Any_LSX;
1283
+ ARGBToUVRow = ARGBToUVRow_Any_LSX;
1284
+ if (IS_ALIGNED(width, 16)) {
1285
+ ARGBToYRow = ARGBToYRow_LSX;
1286
+ ARGBToUVRow = ARGBToUVRow_LSX;
1287
+ }
1288
+ }
1289
+ #endif
1290
+ #if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
1291
+ if (TestCpuFlag(kCpuHasLASX)) {
1292
+ ARGBToYRow = ARGBToYRow_Any_LASX;
1293
+ ARGBToUVRow = ARGBToUVRow_Any_LASX;
1294
+ if (IS_ALIGNED(width, 32)) {
1295
+ ARGBToYRow = ARGBToYRow_LASX;
1296
+ ARGBToUVRow = ARGBToUVRow_LASX;
1297
+ }
1298
+ }
1299
+ #endif
1300
+ #if defined(HAS_ARGBTOYROW_RVV)
1301
+ if (TestCpuFlag(kCpuHasRVV)) {
1302
+ ARGBToYRow = ARGBToYRow_RVV;
1303
+ }
1304
+ #endif
1305
+ #if defined(HAS_I422TOYUY2ROW_SSE2)
1306
+ if (TestCpuFlag(kCpuHasSSE2)) {
1307
+ I422ToYUY2Row = I422ToYUY2Row_Any_SSE2;
1308
+ if (IS_ALIGNED(width, 16)) {
1309
+ I422ToYUY2Row = I422ToYUY2Row_SSE2;
1310
+ }
1311
+ }
1312
+ #endif
1313
+ #if defined(HAS_I422TOYUY2ROW_AVX2)
1314
+ if (TestCpuFlag(kCpuHasAVX2)) {
1315
+ I422ToYUY2Row = I422ToYUY2Row_Any_AVX2;
1316
+ if (IS_ALIGNED(width, 32)) {
1317
+ I422ToYUY2Row = I422ToYUY2Row_AVX2;
1318
+ }
1319
+ }
1320
+ #endif
1321
+ #if defined(HAS_I422TOYUY2ROW_NEON)
1322
+ if (TestCpuFlag(kCpuHasNEON)) {
1323
+ I422ToYUY2Row = I422ToYUY2Row_Any_NEON;
1324
+ if (IS_ALIGNED(width, 16)) {
1325
+ I422ToYUY2Row = I422ToYUY2Row_NEON;
1326
+ }
1327
+ }
1328
+ #endif
1329
+ #if defined(HAS_I422TOYUY2ROW_LSX)
1330
+ if (TestCpuFlag(kCpuHasLSX)) {
1331
+ I422ToYUY2Row = I422ToYUY2Row_Any_LSX;
1332
+ if (IS_ALIGNED(width, 16)) {
1333
+ I422ToYUY2Row = I422ToYUY2Row_LSX;
1334
+ }
1335
+ }
1336
+ #endif
1337
+ #if defined(HAS_I422TOYUY2ROW_LASX)
1338
+ if (TestCpuFlag(kCpuHasLASX)) {
1339
+ I422ToYUY2Row = I422ToYUY2Row_Any_LASX;
1340
+ if (IS_ALIGNED(width, 32)) {
1341
+ I422ToYUY2Row = I422ToYUY2Row_LASX;
1342
+ }
1343
+ }
1344
+ #endif
1345
+
1346
+ {
1347
+ // Allocate a rows of yuv.
1348
+ align_buffer_64(row_y, ((width + 63) & ~63) * 2);
1349
+ uint8_t* row_u = row_y + ((width + 63) & ~63);
1350
+ uint8_t* row_v = row_u + ((width + 63) & ~63) / 2;
1351
+ if (!row_y)
1352
+ return 1;
1353
+
1354
+ for (y = 0; y < height; ++y) {
1355
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width);
1356
+ ARGBToYRow(src_argb, row_y, width);
1357
+ I422ToYUY2Row(row_y, row_u, row_v, dst_yuy2, width);
1358
+ src_argb += src_stride_argb;
1359
+ dst_yuy2 += dst_stride_yuy2;
1360
+ }
1361
+
1362
+ free_aligned_buffer_64(row_y);
1363
+ }
1364
+ return 0;
1365
+ }
1366
+
1367
+ // Convert ARGB to UYVY.
1368
+ LIBYUV_API
1369
+ int ARGBToUYVY(const uint8_t* src_argb,
1370
+ int src_stride_argb,
1371
+ uint8_t* dst_uyvy,
1372
+ int dst_stride_uyvy,
1373
+ int width,
1374
+ int height) {
1375
+ int y;
1376
+ void (*ARGBToUVRow)(const uint8_t* src_argb, int src_stride_argb,
1377
+ uint8_t* dst_u, uint8_t* dst_v, int width) =
1378
+ ARGBToUVRow_C;
1379
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
1380
+ ARGBToYRow_C;
1381
+ void (*I422ToUYVYRow)(const uint8_t* src_y, const uint8_t* src_u,
1382
+ const uint8_t* src_v, uint8_t* dst_uyvy, int width) =
1383
+ I422ToUYVYRow_C;
1384
+
1385
+ if (!src_argb || !dst_uyvy || width <= 0 || height == 0) {
1386
+ return -1;
1387
+ }
1388
+ // Negative height means invert the image.
1389
+ if (height < 0) {
1390
+ height = -height;
1391
+ dst_uyvy = dst_uyvy + (height - 1) * dst_stride_uyvy;
1392
+ dst_stride_uyvy = -dst_stride_uyvy;
1393
+ }
1394
+ // Coalesce rows.
1395
+ if (src_stride_argb == width * 4 && dst_stride_uyvy == width * 2) {
1396
+ width *= height;
1397
+ height = 1;
1398
+ src_stride_argb = dst_stride_uyvy = 0;
1399
+ }
1400
+ #if defined(HAS_ARGBTOYROW_SSSE3)
1401
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1402
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
1403
+ if (IS_ALIGNED(width, 16)) {
1404
+ ARGBToYRow = ARGBToYRow_SSSE3;
1405
+ }
1406
+ }
1407
+ #endif
1408
+ #if defined(HAS_ARGBTOUVROW_SSSE3)
1409
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1410
+ ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
1411
+ if (IS_ALIGNED(width, 16)) {
1412
+ ARGBToUVRow = ARGBToUVRow_SSSE3;
1413
+ }
1414
+ }
1415
+ #endif
1416
+ #if defined(HAS_ARGBTOYROW_AVX2)
1417
+ if (TestCpuFlag(kCpuHasAVX2)) {
1418
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
1419
+ if (IS_ALIGNED(width, 32)) {
1420
+ ARGBToYRow = ARGBToYRow_AVX2;
1421
+ }
1422
+ }
1423
+ #endif
1424
+ #if defined(HAS_ARGBTOUVROW_AVX2)
1425
+ if (TestCpuFlag(kCpuHasAVX2)) {
1426
+ ARGBToUVRow = ARGBToUVRow_Any_AVX2;
1427
+ if (IS_ALIGNED(width, 32)) {
1428
+ ARGBToUVRow = ARGBToUVRow_AVX2;
1429
+ }
1430
+ }
1431
+ #endif
1432
+ #if defined(HAS_ARGBTOYROW_NEON)
1433
+ if (TestCpuFlag(kCpuHasNEON)) {
1434
+ ARGBToYRow = ARGBToYRow_Any_NEON;
1435
+ if (IS_ALIGNED(width, 16)) {
1436
+ ARGBToYRow = ARGBToYRow_NEON;
1437
+ }
1438
+ }
1439
+ #endif
1440
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
1441
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
1442
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
1443
+ if (IS_ALIGNED(width, 16)) {
1444
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
1445
+ }
1446
+ }
1447
+ #endif
1448
+ #if defined(HAS_ARGBTOUVROW_NEON)
1449
+ if (TestCpuFlag(kCpuHasNEON)) {
1450
+ ARGBToUVRow = ARGBToUVRow_Any_NEON;
1451
+ if (IS_ALIGNED(width, 16)) {
1452
+ ARGBToUVRow = ARGBToUVRow_NEON;
1453
+ }
1454
+ }
1455
+ #endif
1456
+ #if defined(HAS_ARGBTOUVROW_NEON_I8MM)
1457
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
1458
+ ARGBToUVRow = ARGBToUVRow_Any_NEON_I8MM;
1459
+ if (IS_ALIGNED(width, 16)) {
1460
+ ARGBToUVRow = ARGBToUVRow_NEON_I8MM;
1461
+ }
1462
+ }
1463
+ #endif
1464
+ #if defined(HAS_ARGBTOUVROW_SVE2)
1465
+ if (TestCpuFlag(kCpuHasSVE2)) {
1466
+ ARGBToUVRow = ARGBToUVRow_Any_SVE2;
1467
+ if (IS_ALIGNED(width, 2)) {
1468
+ ARGBToUVRow = ARGBToUVRow_SVE2;
1469
+ }
1470
+ }
1471
+ #endif
1472
+ #if defined(HAS_ARGBTOUVROW_SME)
1473
+ if (TestCpuFlag(kCpuHasSME)) {
1474
+ ARGBToUVRow = ARGBToUVRow_Any_SME;
1475
+ if (IS_ALIGNED(width, 2)) {
1476
+ ARGBToUVRow = ARGBToUVRow_SME;
1477
+ }
1478
+ }
1479
+ #endif
1480
+ #if defined(HAS_ARGBTOYROW_LSX)
1481
+ if (TestCpuFlag(kCpuHasLSX)) {
1482
+ ARGBToYRow = ARGBToYRow_Any_LSX;
1483
+ if (IS_ALIGNED(width, 16)) {
1484
+ ARGBToYRow = ARGBToYRow_LSX;
1485
+ }
1486
+ }
1487
+ #endif
1488
+ #if defined(HAS_ARGBTOYROW_LSX) && defined(HAS_ARGBTOUVROW_LSX)
1489
+ if (TestCpuFlag(kCpuHasLSX)) {
1490
+ ARGBToYRow = ARGBToYRow_Any_LSX;
1491
+ ARGBToUVRow = ARGBToUVRow_Any_LSX;
1492
+ if (IS_ALIGNED(width, 16)) {
1493
+ ARGBToYRow = ARGBToYRow_LSX;
1494
+ ARGBToUVRow = ARGBToUVRow_LSX;
1495
+ }
1496
+ }
1497
+ #endif
1498
+ #if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
1499
+ if (TestCpuFlag(kCpuHasLASX)) {
1500
+ ARGBToYRow = ARGBToYRow_Any_LASX;
1501
+ ARGBToUVRow = ARGBToUVRow_Any_LASX;
1502
+ if (IS_ALIGNED(width, 32)) {
1503
+ ARGBToYRow = ARGBToYRow_LASX;
1504
+ ARGBToUVRow = ARGBToUVRow_LASX;
1505
+ }
1506
+ }
1507
+ #endif
1508
+ #if defined(HAS_ARGBTOYROW_RVV)
1509
+ if (TestCpuFlag(kCpuHasRVV)) {
1510
+ ARGBToYRow = ARGBToYRow_RVV;
1511
+ }
1512
+ #endif
1513
+ #if defined(HAS_I422TOUYVYROW_SSE2)
1514
+ if (TestCpuFlag(kCpuHasSSE2)) {
1515
+ I422ToUYVYRow = I422ToUYVYRow_Any_SSE2;
1516
+ if (IS_ALIGNED(width, 16)) {
1517
+ I422ToUYVYRow = I422ToUYVYRow_SSE2;
1518
+ }
1519
+ }
1520
+ #endif
1521
+ #if defined(HAS_I422TOUYVYROW_AVX2)
1522
+ if (TestCpuFlag(kCpuHasAVX2)) {
1523
+ I422ToUYVYRow = I422ToUYVYRow_Any_AVX2;
1524
+ if (IS_ALIGNED(width, 32)) {
1525
+ I422ToUYVYRow = I422ToUYVYRow_AVX2;
1526
+ }
1527
+ }
1528
+ #endif
1529
+ #if defined(HAS_I422TOUYVYROW_NEON)
1530
+ if (TestCpuFlag(kCpuHasNEON)) {
1531
+ I422ToUYVYRow = I422ToUYVYRow_Any_NEON;
1532
+ if (IS_ALIGNED(width, 16)) {
1533
+ I422ToUYVYRow = I422ToUYVYRow_NEON;
1534
+ }
1535
+ }
1536
+ #endif
1537
+ #if defined(HAS_I422TOUYVYROW_LSX)
1538
+ if (TestCpuFlag(kCpuHasLSX)) {
1539
+ I422ToUYVYRow = I422ToUYVYRow_Any_LSX;
1540
+ if (IS_ALIGNED(width, 16)) {
1541
+ I422ToUYVYRow = I422ToUYVYRow_LSX;
1542
+ }
1543
+ }
1544
+ #endif
1545
+ #if defined(HAS_I422TOUYVYROW_LASX)
1546
+ if (TestCpuFlag(kCpuHasLASX)) {
1547
+ I422ToUYVYRow = I422ToUYVYRow_Any_LASX;
1548
+ if (IS_ALIGNED(width, 32)) {
1549
+ I422ToUYVYRow = I422ToUYVYRow_LASX;
1550
+ }
1551
+ }
1552
+ #endif
1553
+
1554
+ {
1555
+ // Allocate a rows of yuv.
1556
+ align_buffer_64(row_y, ((width + 63) & ~63) * 2);
1557
+ uint8_t* row_u = row_y + ((width + 63) & ~63);
1558
+ uint8_t* row_v = row_u + ((width + 63) & ~63) / 2;
1559
+ if (!row_y)
1560
+ return 1;
1561
+
1562
+ for (y = 0; y < height; ++y) {
1563
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width);
1564
+ ARGBToYRow(src_argb, row_y, width);
1565
+ I422ToUYVYRow(row_y, row_u, row_v, dst_uyvy, width);
1566
+ src_argb += src_stride_argb;
1567
+ dst_uyvy += dst_stride_uyvy;
1568
+ }
1569
+
1570
+ free_aligned_buffer_64(row_y);
1571
+ }
1572
+ return 0;
1573
+ }
1574
+
1575
+ // Convert ARGB to I400.
1576
+ LIBYUV_API
1577
+ int ARGBToI400(const uint8_t* src_argb,
1578
+ int src_stride_argb,
1579
+ uint8_t* dst_y,
1580
+ int dst_stride_y,
1581
+ int width,
1582
+ int height) {
1583
+ int y;
1584
+ void (*ARGBToYRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
1585
+ ARGBToYRow_C;
1586
+ if (!src_argb || !dst_y || width <= 0 || height == 0) {
1587
+ return -1;
1588
+ }
1589
+ if (height < 0) {
1590
+ height = -height;
1591
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1592
+ src_stride_argb = -src_stride_argb;
1593
+ }
1594
+ // Coalesce rows.
1595
+ if (src_stride_argb == width * 4 && dst_stride_y == width) {
1596
+ width *= height;
1597
+ height = 1;
1598
+ src_stride_argb = dst_stride_y = 0;
1599
+ }
1600
+ #if defined(HAS_ARGBTOYROW_SSSE3)
1601
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1602
+ ARGBToYRow = ARGBToYRow_Any_SSSE3;
1603
+ if (IS_ALIGNED(width, 16)) {
1604
+ ARGBToYRow = ARGBToYRow_SSSE3;
1605
+ }
1606
+ }
1607
+ #endif
1608
+ #if defined(HAS_ARGBTOYROW_AVX2)
1609
+ if (TestCpuFlag(kCpuHasAVX2)) {
1610
+ ARGBToYRow = ARGBToYRow_Any_AVX2;
1611
+ if (IS_ALIGNED(width, 32)) {
1612
+ ARGBToYRow = ARGBToYRow_AVX2;
1613
+ }
1614
+ }
1615
+ #endif
1616
+ #if defined(HAS_ARGBTOYROW_NEON)
1617
+ if (TestCpuFlag(kCpuHasNEON)) {
1618
+ ARGBToYRow = ARGBToYRow_Any_NEON;
1619
+ if (IS_ALIGNED(width, 16)) {
1620
+ ARGBToYRow = ARGBToYRow_NEON;
1621
+ }
1622
+ }
1623
+ #endif
1624
+ #if defined(HAS_ARGBTOYROW_NEON_DOTPROD)
1625
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
1626
+ ARGBToYRow = ARGBToYRow_Any_NEON_DotProd;
1627
+ if (IS_ALIGNED(width, 16)) {
1628
+ ARGBToYRow = ARGBToYRow_NEON_DotProd;
1629
+ }
1630
+ }
1631
+ #endif
1632
+ #if defined(HAS_ARGBTOYROW_LSX)
1633
+ if (TestCpuFlag(kCpuHasLSX)) {
1634
+ ARGBToYRow = ARGBToYRow_Any_LSX;
1635
+ if (IS_ALIGNED(width, 16)) {
1636
+ ARGBToYRow = ARGBToYRow_LSX;
1637
+ }
1638
+ }
1639
+ #endif
1640
+ #if defined(HAS_ARGBTOYROW_LASX)
1641
+ if (TestCpuFlag(kCpuHasLASX)) {
1642
+ ARGBToYRow = ARGBToYRow_Any_LASX;
1643
+ if (IS_ALIGNED(width, 32)) {
1644
+ ARGBToYRow = ARGBToYRow_LASX;
1645
+ }
1646
+ }
1647
+ #endif
1648
+ #if defined(HAS_ARGBTOYROW_RVV)
1649
+ if (TestCpuFlag(kCpuHasRVV)) {
1650
+ ARGBToYRow = ARGBToYRow_RVV;
1651
+ }
1652
+ #endif
1653
+
1654
+ for (y = 0; y < height; ++y) {
1655
+ ARGBToYRow(src_argb, dst_y, width);
1656
+ src_argb += src_stride_argb;
1657
+ dst_y += dst_stride_y;
1658
+ }
1659
+ return 0;
1660
+ }
1661
+
1662
+ #ifndef __riscv
1663
+ // Shuffle table for converting ARGB to RGBA.
1664
+ static const uvec8 kShuffleMaskARGBToRGBA = {
1665
+ 3u, 0u, 1u, 2u, 7u, 4u, 5u, 6u, 11u, 8u, 9u, 10u, 15u, 12u, 13u, 14u};
1666
+
1667
+ // Convert ARGB to RGBA.
1668
+ LIBYUV_API
1669
+ int ARGBToRGBA(const uint8_t* src_argb,
1670
+ int src_stride_argb,
1671
+ uint8_t* dst_rgba,
1672
+ int dst_stride_rgba,
1673
+ int width,
1674
+ int height) {
1675
+ return ARGBShuffle(src_argb, src_stride_argb, dst_rgba, dst_stride_rgba,
1676
+ (const uint8_t*)(&kShuffleMaskARGBToRGBA), width, height);
1677
+ }
1678
+ #else
1679
+ // Convert ARGB to RGBA.
1680
+ LIBYUV_API
1681
+ int ARGBToRGBA(const uint8_t* src_argb,
1682
+ int src_stride_argb,
1683
+ uint8_t* dst_rgba,
1684
+ int dst_stride_rgba,
1685
+ int width,
1686
+ int height) {
1687
+ int y;
1688
+ void (*ARGBToRGBARow)(const uint8_t* src_argb, uint8_t* dst_rgba, int width) =
1689
+ ARGBToRGBARow_C;
1690
+ if (!src_argb || !dst_rgba || width <= 0 || height == 0) {
1691
+ return -1;
1692
+ }
1693
+ if (height < 0) {
1694
+ height = -height;
1695
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1696
+ src_stride_argb = -src_stride_argb;
1697
+ }
1698
+ // Coalesce rows.
1699
+ if (src_stride_argb == width * 4 && dst_stride_rgba == width * 4) {
1700
+ width *= height;
1701
+ height = 1;
1702
+ src_stride_argb = dst_stride_rgba = 0;
1703
+ }
1704
+
1705
+ #if defined(HAS_ARGBTORGBAROW_RVV)
1706
+ if (TestCpuFlag(kCpuHasRVV)) {
1707
+ ARGBToRGBARow = ARGBToRGBARow_RVV;
1708
+ }
1709
+ #endif
1710
+
1711
+ for (y = 0; y < height; ++y) {
1712
+ ARGBToRGBARow(src_argb, dst_rgba, width);
1713
+ src_argb += src_stride_argb;
1714
+ dst_rgba += dst_stride_rgba;
1715
+ }
1716
+ return 0;
1717
+ }
1718
+ #endif
1719
+
1720
+ // Convert ARGB To RGB24.
1721
+ LIBYUV_API
1722
+ int ARGBToRGB24(const uint8_t* src_argb,
1723
+ int src_stride_argb,
1724
+ uint8_t* dst_rgb24,
1725
+ int dst_stride_rgb24,
1726
+ int width,
1727
+ int height) {
1728
+ int y;
1729
+ void (*ARGBToRGB24Row)(const uint8_t* src_argb, uint8_t* dst_rgb, int width) =
1730
+ ARGBToRGB24Row_C;
1731
+ if (!src_argb || !dst_rgb24 || width <= 0 || height == 0) {
1732
+ return -1;
1733
+ }
1734
+ if (height < 0) {
1735
+ height = -height;
1736
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1737
+ src_stride_argb = -src_stride_argb;
1738
+ }
1739
+ // Coalesce rows.
1740
+ if (src_stride_argb == width * 4 && dst_stride_rgb24 == width * 3) {
1741
+ width *= height;
1742
+ height = 1;
1743
+ src_stride_argb = dst_stride_rgb24 = 0;
1744
+ }
1745
+ #if defined(HAS_ARGBTORGB24ROW_SSSE3)
1746
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1747
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_SSSE3;
1748
+ if (IS_ALIGNED(width, 16)) {
1749
+ ARGBToRGB24Row = ARGBToRGB24Row_SSSE3;
1750
+ }
1751
+ }
1752
+ #endif
1753
+ #if defined(HAS_ARGBTORGB24ROW_AVX2)
1754
+ if (TestCpuFlag(kCpuHasAVX2)) {
1755
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_AVX2;
1756
+ if (IS_ALIGNED(width, 32)) {
1757
+ ARGBToRGB24Row = ARGBToRGB24Row_AVX2;
1758
+ }
1759
+ }
1760
+ #endif
1761
+ #if defined(HAS_ARGBTORGB24ROW_AVX512VBMI)
1762
+ if (TestCpuFlag(kCpuHasAVX512VBMI)) {
1763
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_AVX512VBMI;
1764
+ if (IS_ALIGNED(width, 32)) {
1765
+ ARGBToRGB24Row = ARGBToRGB24Row_AVX512VBMI;
1766
+ }
1767
+ }
1768
+ #endif
1769
+ #if defined(HAS_ARGBTORGB24ROW_NEON)
1770
+ if (TestCpuFlag(kCpuHasNEON)) {
1771
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_NEON;
1772
+ if (IS_ALIGNED(width, 16)) {
1773
+ ARGBToRGB24Row = ARGBToRGB24Row_NEON;
1774
+ }
1775
+ }
1776
+ #endif
1777
+ #if defined(HAS_ARGBTORGB24ROW_SVE2)
1778
+ if (TestCpuFlag(kCpuHasSVE2)) {
1779
+ ARGBToRGB24Row = ARGBToRGB24Row_SVE2;
1780
+ }
1781
+ #endif
1782
+ #if defined(HAS_ARGBTORGB24ROW_LSX)
1783
+ if (TestCpuFlag(kCpuHasLSX)) {
1784
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_LSX;
1785
+ if (IS_ALIGNED(width, 16)) {
1786
+ ARGBToRGB24Row = ARGBToRGB24Row_LSX;
1787
+ }
1788
+ }
1789
+ #endif
1790
+ #if defined(HAS_ARGBTORGB24ROW_LASX)
1791
+ if (TestCpuFlag(kCpuHasLASX)) {
1792
+ ARGBToRGB24Row = ARGBToRGB24Row_Any_LASX;
1793
+ if (IS_ALIGNED(width, 32)) {
1794
+ ARGBToRGB24Row = ARGBToRGB24Row_LASX;
1795
+ }
1796
+ }
1797
+ #endif
1798
+ #if defined(HAS_ARGBTORGB24ROW_RVV)
1799
+ if (TestCpuFlag(kCpuHasRVV)) {
1800
+ ARGBToRGB24Row = ARGBToRGB24Row_RVV;
1801
+ }
1802
+ #endif
1803
+
1804
+ for (y = 0; y < height; ++y) {
1805
+ ARGBToRGB24Row(src_argb, dst_rgb24, width);
1806
+ src_argb += src_stride_argb;
1807
+ dst_rgb24 += dst_stride_rgb24;
1808
+ }
1809
+ return 0;
1810
+ }
1811
+
1812
+ // Convert ARGB To RAW.
1813
+ LIBYUV_API
1814
+ int ARGBToRAW(const uint8_t* src_argb,
1815
+ int src_stride_argb,
1816
+ uint8_t* dst_raw,
1817
+ int dst_stride_raw,
1818
+ int width,
1819
+ int height) {
1820
+ int y;
1821
+ void (*ARGBToRAWRow)(const uint8_t* src_argb, uint8_t* dst_rgb, int width) =
1822
+ ARGBToRAWRow_C;
1823
+ if (!src_argb || !dst_raw || width <= 0 || height == 0) {
1824
+ return -1;
1825
+ }
1826
+ if (height < 0) {
1827
+ height = -height;
1828
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1829
+ src_stride_argb = -src_stride_argb;
1830
+ }
1831
+ // Coalesce rows.
1832
+ if (src_stride_argb == width * 4 && dst_stride_raw == width * 3) {
1833
+ width *= height;
1834
+ height = 1;
1835
+ src_stride_argb = dst_stride_raw = 0;
1836
+ }
1837
+ #if defined(HAS_ARGBTORAWROW_SSSE3)
1838
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1839
+ ARGBToRAWRow = ARGBToRAWRow_Any_SSSE3;
1840
+ if (IS_ALIGNED(width, 16)) {
1841
+ ARGBToRAWRow = ARGBToRAWRow_SSSE3;
1842
+ }
1843
+ }
1844
+ #endif
1845
+ #if defined(HAS_ARGBTORAWROW_AVX2)
1846
+ if (TestCpuFlag(kCpuHasAVX2)) {
1847
+ ARGBToRAWRow = ARGBToRAWRow_Any_AVX2;
1848
+ if (IS_ALIGNED(width, 32)) {
1849
+ ARGBToRAWRow = ARGBToRAWRow_AVX2;
1850
+ }
1851
+ }
1852
+ #endif
1853
+ #if defined(HAS_ARGBTORAWROW_NEON)
1854
+ if (TestCpuFlag(kCpuHasNEON)) {
1855
+ ARGBToRAWRow = ARGBToRAWRow_Any_NEON;
1856
+ if (IS_ALIGNED(width, 8)) {
1857
+ ARGBToRAWRow = ARGBToRAWRow_NEON;
1858
+ }
1859
+ }
1860
+ #endif
1861
+ #if defined(HAS_ARGBTORAWROW_SVE2)
1862
+ if (TestCpuFlag(kCpuHasSVE2)) {
1863
+ ARGBToRAWRow = ARGBToRAWRow_SVE2;
1864
+ }
1865
+ #endif
1866
+ #if defined(HAS_ARGBTORAWROW_LSX)
1867
+ if (TestCpuFlag(kCpuHasLSX)) {
1868
+ ARGBToRAWRow = ARGBToRAWRow_Any_LSX;
1869
+ if (IS_ALIGNED(width, 16)) {
1870
+ ARGBToRAWRow = ARGBToRAWRow_LSX;
1871
+ }
1872
+ }
1873
+ #endif
1874
+ #if defined(HAS_ARGBTORAWROW_LASX)
1875
+ if (TestCpuFlag(kCpuHasLASX)) {
1876
+ ARGBToRAWRow = ARGBToRAWRow_Any_LASX;
1877
+ if (IS_ALIGNED(width, 32)) {
1878
+ ARGBToRAWRow = ARGBToRAWRow_LASX;
1879
+ }
1880
+ }
1881
+ #endif
1882
+ #if defined(HAS_ARGBTORAWROW_RVV)
1883
+ if (TestCpuFlag(kCpuHasRVV)) {
1884
+ ARGBToRAWRow = ARGBToRAWRow_RVV;
1885
+ }
1886
+ #endif
1887
+
1888
+ for (y = 0; y < height; ++y) {
1889
+ ARGBToRAWRow(src_argb, dst_raw, width);
1890
+ src_argb += src_stride_argb;
1891
+ dst_raw += dst_stride_raw;
1892
+ }
1893
+ return 0;
1894
+ }
1895
+
1896
+ // Ordered 8x8 dither for 888 to 565. Values from 0 to 7.
1897
+ static const uint8_t kDither565_4x4[16] = {
1898
+ 0, 4, 1, 5, 6, 2, 7, 3, 1, 5, 0, 4, 7, 3, 6, 2,
1899
+ };
1900
+
1901
+ // Convert ARGB To RGB565 with 4x4 dither matrix (16 bytes).
1902
+ LIBYUV_API
1903
+ int ARGBToRGB565Dither(const uint8_t* src_argb,
1904
+ int src_stride_argb,
1905
+ uint8_t* dst_rgb565,
1906
+ int dst_stride_rgb565,
1907
+ const uint8_t* dither4x4,
1908
+ int width,
1909
+ int height) {
1910
+ int y;
1911
+ void (*ARGBToRGB565DitherRow)(const uint8_t* src_argb, uint8_t* dst_rgb,
1912
+ uint32_t dither4, int width) =
1913
+ ARGBToRGB565DitherRow_C;
1914
+ if (!src_argb || !dst_rgb565 || width <= 0 || height == 0) {
1915
+ return -1;
1916
+ }
1917
+ if (height < 0) {
1918
+ height = -height;
1919
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1920
+ src_stride_argb = -src_stride_argb;
1921
+ }
1922
+ if (!dither4x4) {
1923
+ dither4x4 = kDither565_4x4;
1924
+ }
1925
+ #if defined(HAS_ARGBTORGB565DITHERROW_SSE2)
1926
+ if (TestCpuFlag(kCpuHasSSE2)) {
1927
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_SSE2;
1928
+ if (IS_ALIGNED(width, 4)) {
1929
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_SSE2;
1930
+ }
1931
+ }
1932
+ #endif
1933
+ #if defined(HAS_ARGBTORGB565DITHERROW_AVX2)
1934
+ if (TestCpuFlag(kCpuHasAVX2)) {
1935
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_AVX2;
1936
+ if (IS_ALIGNED(width, 8)) {
1937
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_AVX2;
1938
+ }
1939
+ }
1940
+ #endif
1941
+ #if defined(HAS_ARGBTORGB565DITHERROW_NEON)
1942
+ if (TestCpuFlag(kCpuHasNEON)) {
1943
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_NEON;
1944
+ if (IS_ALIGNED(width, 8)) {
1945
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_NEON;
1946
+ }
1947
+ }
1948
+ #endif
1949
+ #if defined(HAS_ARGBTORGB565DITHERROW_SVE2)
1950
+ if (TestCpuFlag(kCpuHasSVE2)) {
1951
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_SVE2;
1952
+ }
1953
+ #endif
1954
+ #if defined(HAS_ARGBTORGB565DITHERROW_LSX)
1955
+ if (TestCpuFlag(kCpuHasLSX)) {
1956
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_LSX;
1957
+ if (IS_ALIGNED(width, 8)) {
1958
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_LSX;
1959
+ }
1960
+ }
1961
+ #endif
1962
+ #if defined(HAS_ARGBTORGB565DITHERROW_LASX)
1963
+ if (TestCpuFlag(kCpuHasLASX)) {
1964
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_LASX;
1965
+ if (IS_ALIGNED(width, 16)) {
1966
+ ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_LASX;
1967
+ }
1968
+ }
1969
+ #endif
1970
+
1971
+ for (y = 0; y < height; ++y) {
1972
+ ARGBToRGB565DitherRow(src_argb, dst_rgb565,
1973
+ *(const uint32_t*)(dither4x4 + ((y & 3) << 2)),
1974
+ width);
1975
+ src_argb += src_stride_argb;
1976
+ dst_rgb565 += dst_stride_rgb565;
1977
+ }
1978
+ return 0;
1979
+ }
1980
+
1981
+ // Convert ARGB To RGB565.
1982
+ // TODO(fbarchard): Consider using dither function low level with zeros.
1983
+ LIBYUV_API
1984
+ int ARGBToRGB565(const uint8_t* src_argb,
1985
+ int src_stride_argb,
1986
+ uint8_t* dst_rgb565,
1987
+ int dst_stride_rgb565,
1988
+ int width,
1989
+ int height) {
1990
+ int y;
1991
+ void (*ARGBToRGB565Row)(const uint8_t* src_argb, uint8_t* dst_rgb,
1992
+ int width) = ARGBToRGB565Row_C;
1993
+ if (!src_argb || !dst_rgb565 || width <= 0 || height == 0) {
1994
+ return -1;
1995
+ }
1996
+ if (height < 0) {
1997
+ height = -height;
1998
+ src_argb = src_argb + (height - 1) * src_stride_argb;
1999
+ src_stride_argb = -src_stride_argb;
2000
+ }
2001
+ // Coalesce rows.
2002
+ if (src_stride_argb == width * 4 && dst_stride_rgb565 == width * 2) {
2003
+ width *= height;
2004
+ height = 1;
2005
+ src_stride_argb = dst_stride_rgb565 = 0;
2006
+ }
2007
+ #if defined(HAS_ARGBTORGB565ROW_SSE2)
2008
+ if (TestCpuFlag(kCpuHasSSE2)) {
2009
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_SSE2;
2010
+ if (IS_ALIGNED(width, 4)) {
2011
+ ARGBToRGB565Row = ARGBToRGB565Row_SSE2;
2012
+ }
2013
+ }
2014
+ #endif
2015
+ #if defined(HAS_ARGBTORGB565ROW_AVX2)
2016
+ if (TestCpuFlag(kCpuHasAVX2)) {
2017
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_AVX2;
2018
+ if (IS_ALIGNED(width, 8)) {
2019
+ ARGBToRGB565Row = ARGBToRGB565Row_AVX2;
2020
+ }
2021
+ }
2022
+ #endif
2023
+ #if defined(HAS_ARGBTORGB565ROW_NEON)
2024
+ if (TestCpuFlag(kCpuHasNEON)) {
2025
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_NEON;
2026
+ if (IS_ALIGNED(width, 8)) {
2027
+ ARGBToRGB565Row = ARGBToRGB565Row_NEON;
2028
+ }
2029
+ }
2030
+ #endif
2031
+ #if defined(HAS_ARGBTORGB565ROW_SVE2)
2032
+ if (TestCpuFlag(kCpuHasSVE2)) {
2033
+ ARGBToRGB565Row = ARGBToRGB565Row_SVE2;
2034
+ }
2035
+ #endif
2036
+ #if defined(HAS_ARGBTORGB565ROW_LSX)
2037
+ if (TestCpuFlag(kCpuHasLSX)) {
2038
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_LSX;
2039
+ if (IS_ALIGNED(width, 8)) {
2040
+ ARGBToRGB565Row = ARGBToRGB565Row_LSX;
2041
+ }
2042
+ }
2043
+ #endif
2044
+
2045
+ #if defined(HAS_ARGBTORGB565ROW_LASX)
2046
+ if (TestCpuFlag(kCpuHasLASX)) {
2047
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_LASX;
2048
+ if (IS_ALIGNED(width, 16)) {
2049
+ ARGBToRGB565Row = ARGBToRGB565Row_LASX;
2050
+ }
2051
+ }
2052
+ #endif
2053
+
2054
+ for (y = 0; y < height; ++y) {
2055
+ ARGBToRGB565Row(src_argb, dst_rgb565, width);
2056
+ src_argb += src_stride_argb;
2057
+ dst_rgb565 += dst_stride_rgb565;
2058
+ }
2059
+ return 0;
2060
+ }
2061
+
2062
+ // Convert ARGB To ARGB1555.
2063
+ LIBYUV_API
2064
+ int ARGBToARGB1555(const uint8_t* src_argb,
2065
+ int src_stride_argb,
2066
+ uint8_t* dst_argb1555,
2067
+ int dst_stride_argb1555,
2068
+ int width,
2069
+ int height) {
2070
+ int y;
2071
+ void (*ARGBToARGB1555Row)(const uint8_t* src_argb, uint8_t* dst_rgb,
2072
+ int width) = ARGBToARGB1555Row_C;
2073
+ if (!src_argb || !dst_argb1555 || width <= 0 || height == 0) {
2074
+ return -1;
2075
+ }
2076
+ if (height < 0) {
2077
+ height = -height;
2078
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2079
+ src_stride_argb = -src_stride_argb;
2080
+ }
2081
+ // Coalesce rows.
2082
+ if (src_stride_argb == width * 4 && dst_stride_argb1555 == width * 2) {
2083
+ width *= height;
2084
+ height = 1;
2085
+ src_stride_argb = dst_stride_argb1555 = 0;
2086
+ }
2087
+ #if defined(HAS_ARGBTOARGB1555ROW_SSE2)
2088
+ if (TestCpuFlag(kCpuHasSSE2)) {
2089
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_SSE2;
2090
+ if (IS_ALIGNED(width, 4)) {
2091
+ ARGBToARGB1555Row = ARGBToARGB1555Row_SSE2;
2092
+ }
2093
+ }
2094
+ #endif
2095
+ #if defined(HAS_ARGBTOARGB1555ROW_AVX2)
2096
+ if (TestCpuFlag(kCpuHasAVX2)) {
2097
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_AVX2;
2098
+ if (IS_ALIGNED(width, 8)) {
2099
+ ARGBToARGB1555Row = ARGBToARGB1555Row_AVX2;
2100
+ }
2101
+ }
2102
+ #endif
2103
+ #if defined(HAS_ARGBTOARGB1555ROW_NEON)
2104
+ if (TestCpuFlag(kCpuHasNEON)) {
2105
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_NEON;
2106
+ if (IS_ALIGNED(width, 8)) {
2107
+ ARGBToARGB1555Row = ARGBToARGB1555Row_NEON;
2108
+ }
2109
+ }
2110
+ #endif
2111
+ #if defined(HAS_ARGBTOARGB1555ROW_LSX)
2112
+ if (TestCpuFlag(kCpuHasLSX)) {
2113
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_LSX;
2114
+ if (IS_ALIGNED(width, 8)) {
2115
+ ARGBToARGB1555Row = ARGBToARGB1555Row_LSX;
2116
+ }
2117
+ }
2118
+ #endif
2119
+ #if defined(HAS_ARGBTOARGB1555ROW_LASX)
2120
+ if (TestCpuFlag(kCpuHasLASX)) {
2121
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_LASX;
2122
+ if (IS_ALIGNED(width, 16)) {
2123
+ ARGBToARGB1555Row = ARGBToARGB1555Row_LASX;
2124
+ }
2125
+ }
2126
+ #endif
2127
+
2128
+ for (y = 0; y < height; ++y) {
2129
+ ARGBToARGB1555Row(src_argb, dst_argb1555, width);
2130
+ src_argb += src_stride_argb;
2131
+ dst_argb1555 += dst_stride_argb1555;
2132
+ }
2133
+ return 0;
2134
+ }
2135
+
2136
+ // Convert ARGB To ARGB4444.
2137
+ LIBYUV_API
2138
+ int ARGBToARGB4444(const uint8_t* src_argb,
2139
+ int src_stride_argb,
2140
+ uint8_t* dst_argb4444,
2141
+ int dst_stride_argb4444,
2142
+ int width,
2143
+ int height) {
2144
+ int y;
2145
+ void (*ARGBToARGB4444Row)(const uint8_t* src_argb, uint8_t* dst_rgb,
2146
+ int width) = ARGBToARGB4444Row_C;
2147
+ if (!src_argb || !dst_argb4444 || width <= 0 || height == 0) {
2148
+ return -1;
2149
+ }
2150
+ if (height < 0) {
2151
+ height = -height;
2152
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2153
+ src_stride_argb = -src_stride_argb;
2154
+ }
2155
+ // Coalesce rows.
2156
+ if (src_stride_argb == width * 4 && dst_stride_argb4444 == width * 2) {
2157
+ width *= height;
2158
+ height = 1;
2159
+ src_stride_argb = dst_stride_argb4444 = 0;
2160
+ }
2161
+ #if defined(HAS_ARGBTOARGB4444ROW_SSE2)
2162
+ if (TestCpuFlag(kCpuHasSSE2)) {
2163
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_SSE2;
2164
+ if (IS_ALIGNED(width, 4)) {
2165
+ ARGBToARGB4444Row = ARGBToARGB4444Row_SSE2;
2166
+ }
2167
+ }
2168
+ #endif
2169
+ #if defined(HAS_ARGBTOARGB4444ROW_AVX2)
2170
+ if (TestCpuFlag(kCpuHasAVX2)) {
2171
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_AVX2;
2172
+ if (IS_ALIGNED(width, 8)) {
2173
+ ARGBToARGB4444Row = ARGBToARGB4444Row_AVX2;
2174
+ }
2175
+ }
2176
+ #endif
2177
+ #if defined(HAS_ARGBTOARGB4444ROW_NEON)
2178
+ if (TestCpuFlag(kCpuHasNEON)) {
2179
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_NEON;
2180
+ if (IS_ALIGNED(width, 8)) {
2181
+ ARGBToARGB4444Row = ARGBToARGB4444Row_NEON;
2182
+ }
2183
+ }
2184
+ #endif
2185
+ #if defined(HAS_ARGBTOARGB4444ROW_LSX)
2186
+ if (TestCpuFlag(kCpuHasLSX)) {
2187
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_LSX;
2188
+ if (IS_ALIGNED(width, 8)) {
2189
+ ARGBToARGB4444Row = ARGBToARGB4444Row_LSX;
2190
+ }
2191
+ }
2192
+ #endif
2193
+ #if defined(HAS_ARGBTOARGB4444ROW_LASX)
2194
+ if (TestCpuFlag(kCpuHasLASX)) {
2195
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_LASX;
2196
+ if (IS_ALIGNED(width, 16)) {
2197
+ ARGBToARGB4444Row = ARGBToARGB4444Row_LASX;
2198
+ }
2199
+ }
2200
+ #endif
2201
+
2202
+ for (y = 0; y < height; ++y) {
2203
+ ARGBToARGB4444Row(src_argb, dst_argb4444, width);
2204
+ src_argb += src_stride_argb;
2205
+ dst_argb4444 += dst_stride_argb4444;
2206
+ }
2207
+ return 0;
2208
+ }
2209
+
2210
+ // Convert ABGR To AR30.
2211
+ LIBYUV_API
2212
+ int ABGRToAR30(const uint8_t* src_abgr,
2213
+ int src_stride_abgr,
2214
+ uint8_t* dst_ar30,
2215
+ int dst_stride_ar30,
2216
+ int width,
2217
+ int height) {
2218
+ int y;
2219
+ void (*ABGRToAR30Row)(const uint8_t* src_abgr, uint8_t* dst_rgb, int width) =
2220
+ ABGRToAR30Row_C;
2221
+ if (!src_abgr || !dst_ar30 || width <= 0 || height == 0) {
2222
+ return -1;
2223
+ }
2224
+ if (height < 0) {
2225
+ height = -height;
2226
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
2227
+ src_stride_abgr = -src_stride_abgr;
2228
+ }
2229
+ // Coalesce rows.
2230
+ if (src_stride_abgr == width * 4 && dst_stride_ar30 == width * 4) {
2231
+ width *= height;
2232
+ height = 1;
2233
+ src_stride_abgr = dst_stride_ar30 = 0;
2234
+ }
2235
+ #if defined(HAS_ABGRTOAR30ROW_NEON)
2236
+ if (TestCpuFlag(kCpuHasNEON)) {
2237
+ ABGRToAR30Row = ABGRToAR30Row_Any_NEON;
2238
+ if (IS_ALIGNED(width, 8)) {
2239
+ ABGRToAR30Row = ABGRToAR30Row_NEON;
2240
+ }
2241
+ }
2242
+ #endif
2243
+ #if defined(HAS_ABGRTOAR30ROW_SSSE3)
2244
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2245
+ ABGRToAR30Row = ABGRToAR30Row_Any_SSSE3;
2246
+ if (IS_ALIGNED(width, 4)) {
2247
+ ABGRToAR30Row = ABGRToAR30Row_SSSE3;
2248
+ }
2249
+ }
2250
+ #endif
2251
+ #if defined(HAS_ABGRTOAR30ROW_AVX2)
2252
+ if (TestCpuFlag(kCpuHasAVX2)) {
2253
+ ABGRToAR30Row = ABGRToAR30Row_Any_AVX2;
2254
+ if (IS_ALIGNED(width, 8)) {
2255
+ ABGRToAR30Row = ABGRToAR30Row_AVX2;
2256
+ }
2257
+ }
2258
+ #endif
2259
+ for (y = 0; y < height; ++y) {
2260
+ ABGRToAR30Row(src_abgr, dst_ar30, width);
2261
+ src_abgr += src_stride_abgr;
2262
+ dst_ar30 += dst_stride_ar30;
2263
+ }
2264
+ return 0;
2265
+ }
2266
+
2267
+ // Convert ARGB To AR30.
2268
+ LIBYUV_API
2269
+ int ARGBToAR30(const uint8_t* src_argb,
2270
+ int src_stride_argb,
2271
+ uint8_t* dst_ar30,
2272
+ int dst_stride_ar30,
2273
+ int width,
2274
+ int height) {
2275
+ int y;
2276
+ void (*ARGBToAR30Row)(const uint8_t* src_argb, uint8_t* dst_rgb, int width) =
2277
+ ARGBToAR30Row_C;
2278
+ if (!src_argb || !dst_ar30 || width <= 0 || height == 0) {
2279
+ return -1;
2280
+ }
2281
+ if (height < 0) {
2282
+ height = -height;
2283
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2284
+ src_stride_argb = -src_stride_argb;
2285
+ }
2286
+ // Coalesce rows.
2287
+ if (src_stride_argb == width * 4 && dst_stride_ar30 == width * 4) {
2288
+ width *= height;
2289
+ height = 1;
2290
+ src_stride_argb = dst_stride_ar30 = 0;
2291
+ }
2292
+ #if defined(HAS_ARGBTOAR30ROW_NEON)
2293
+ if (TestCpuFlag(kCpuHasNEON)) {
2294
+ ARGBToAR30Row = ARGBToAR30Row_Any_NEON;
2295
+ if (IS_ALIGNED(width, 8)) {
2296
+ ARGBToAR30Row = ARGBToAR30Row_NEON;
2297
+ }
2298
+ }
2299
+ #endif
2300
+ #if defined(HAS_ARGBTOAR30ROW_SSSE3)
2301
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2302
+ ARGBToAR30Row = ARGBToAR30Row_Any_SSSE3;
2303
+ if (IS_ALIGNED(width, 4)) {
2304
+ ARGBToAR30Row = ARGBToAR30Row_SSSE3;
2305
+ }
2306
+ }
2307
+ #endif
2308
+ #if defined(HAS_ARGBTOAR30ROW_AVX2)
2309
+ if (TestCpuFlag(kCpuHasAVX2)) {
2310
+ ARGBToAR30Row = ARGBToAR30Row_Any_AVX2;
2311
+ if (IS_ALIGNED(width, 8)) {
2312
+ ARGBToAR30Row = ARGBToAR30Row_AVX2;
2313
+ }
2314
+ }
2315
+ #endif
2316
+ for (y = 0; y < height; ++y) {
2317
+ ARGBToAR30Row(src_argb, dst_ar30, width);
2318
+ src_argb += src_stride_argb;
2319
+ dst_ar30 += dst_stride_ar30;
2320
+ }
2321
+ return 0;
2322
+ }
2323
+
2324
+ // ARGB little endian (bgra in memory) to J444
2325
+ LIBYUV_API
2326
+ int ARGBToJ444(const uint8_t* src_argb,
2327
+ int src_stride_argb,
2328
+ uint8_t* dst_y,
2329
+ int dst_stride_y,
2330
+ uint8_t* dst_u,
2331
+ int dst_stride_u,
2332
+ uint8_t* dst_v,
2333
+ int dst_stride_v,
2334
+ int width,
2335
+ int height) {
2336
+ int y;
2337
+ void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
2338
+ ARGBToYJRow_C;
2339
+ void (*ARGBToUVJ444Row)(const uint8_t* src_argb, uint8_t* dst_u,
2340
+ uint8_t* dst_v, int width) = ARGBToUVJ444Row_C;
2341
+ if (!src_argb || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
2342
+ return -1;
2343
+ }
2344
+ if (height < 0) {
2345
+ height = -height;
2346
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2347
+ src_stride_argb = -src_stride_argb;
2348
+ }
2349
+ // Coalesce rows.
2350
+ if (src_stride_argb == width * 4 && dst_stride_y == width &&
2351
+ dst_stride_u == width && dst_stride_v == width) {
2352
+ width *= height;
2353
+ height = 1;
2354
+ src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
2355
+ }
2356
+ #if defined(HAS_ARGBTOUVJ444ROW_SSSE3)
2357
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2358
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_SSSE3;
2359
+ if (IS_ALIGNED(width, 16)) {
2360
+ ARGBToUVJ444Row = ARGBToUVJ444Row_SSSE3;
2361
+ }
2362
+ }
2363
+ #endif
2364
+ #if defined(HAS_ARGBTOUVJ444ROW_AVX2)
2365
+ if (TestCpuFlag(kCpuHasAVX2)) {
2366
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_AVX2;
2367
+ if (IS_ALIGNED(width, 32)) {
2368
+ ARGBToUVJ444Row = ARGBToUVJ444Row_AVX2;
2369
+ }
2370
+ }
2371
+ #endif
2372
+ #if defined(HAS_ARGBTOUVJ444ROW_NEON)
2373
+ if (TestCpuFlag(kCpuHasNEON)) {
2374
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_NEON;
2375
+ if (IS_ALIGNED(width, 8)) {
2376
+ ARGBToUVJ444Row = ARGBToUVJ444Row_NEON;
2377
+ }
2378
+ }
2379
+ #endif
2380
+ #if defined(HAS_ARGBTOUVJ444ROW_NEON_I8MM)
2381
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
2382
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_NEON_I8MM;
2383
+ if (IS_ALIGNED(width, 8)) {
2384
+ ARGBToUVJ444Row = ARGBToUVJ444Row_NEON_I8MM;
2385
+ }
2386
+ }
2387
+ #endif
2388
+ #if defined(HAS_ARGBTOUVJ444ROW_LSX)
2389
+ if (TestCpuFlag(kCpuHasLSX)) {
2390
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_LSX;
2391
+ if (IS_ALIGNED(width, 16)) {
2392
+ ARGBToUVJ444Row = ARGBToUVJ444Row_LSX;
2393
+ }
2394
+ }
2395
+ #endif
2396
+ #if defined(HAS_ARGBTOUVJ444ROW_LASX)
2397
+ if (TestCpuFlag(kCpuHasLASX)) {
2398
+ ARGBToUVJ444Row = ARGBToUVJ444Row_Any_LASX;
2399
+ if (IS_ALIGNED(width, 32)) {
2400
+ ARGBToUVJ444Row = ARGBToUVJ444Row_LASX;
2401
+ }
2402
+ }
2403
+ #endif
2404
+ #if defined(HAS_ARGBTOYJROW_SSSE3)
2405
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2406
+ ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
2407
+ if (IS_ALIGNED(width, 16)) {
2408
+ ARGBToYJRow = ARGBToYJRow_SSSE3;
2409
+ }
2410
+ }
2411
+ #endif
2412
+ #if defined(HAS_ARGBTOYJROW_AVX2)
2413
+ if (TestCpuFlag(kCpuHasAVX2)) {
2414
+ ARGBToYJRow = ARGBToYJRow_Any_AVX2;
2415
+ if (IS_ALIGNED(width, 32)) {
2416
+ ARGBToYJRow = ARGBToYJRow_AVX2;
2417
+ }
2418
+ }
2419
+ #endif
2420
+ #if defined(HAS_ARGBTOYJROW_NEON)
2421
+ if (TestCpuFlag(kCpuHasNEON)) {
2422
+ ARGBToYJRow = ARGBToYJRow_Any_NEON;
2423
+ if (IS_ALIGNED(width, 16)) {
2424
+ ARGBToYJRow = ARGBToYJRow_NEON;
2425
+ }
2426
+ }
2427
+ #endif
2428
+ #if defined(HAS_ARGBTOYJROW_NEON_DOTPROD)
2429
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2430
+ ARGBToYJRow = ARGBToYJRow_Any_NEON_DotProd;
2431
+ if (IS_ALIGNED(width, 16)) {
2432
+ ARGBToYJRow = ARGBToYJRow_NEON_DotProd;
2433
+ }
2434
+ }
2435
+ #endif
2436
+ #if defined(HAS_ARGBTOYJROW_LSX)
2437
+ if (TestCpuFlag(kCpuHasLSX)) {
2438
+ ARGBToYJRow = ARGBToYJRow_Any_LSX;
2439
+ if (IS_ALIGNED(width, 16)) {
2440
+ ARGBToYJRow = ARGBToYJRow_LSX;
2441
+ }
2442
+ }
2443
+ #endif
2444
+ #if defined(HAS_ARGBTOYJROW_LASX)
2445
+ if (TestCpuFlag(kCpuHasLASX)) {
2446
+ ARGBToYJRow = ARGBToYJRow_Any_LASX;
2447
+ if (IS_ALIGNED(width, 32)) {
2448
+ ARGBToYJRow = ARGBToYJRow_LASX;
2449
+ }
2450
+ }
2451
+ #endif
2452
+ #if defined(HAS_ARGBTOYJROW_RVV)
2453
+ if (TestCpuFlag(kCpuHasRVV)) {
2454
+ ARGBToYJRow = ARGBToYJRow_RVV;
2455
+ }
2456
+ #endif
2457
+
2458
+ for (y = 0; y < height; ++y) {
2459
+ ARGBToUVJ444Row(src_argb, dst_u, dst_v, width);
2460
+ ARGBToYJRow(src_argb, dst_y, width);
2461
+ src_argb += src_stride_argb;
2462
+ dst_y += dst_stride_y;
2463
+ dst_u += dst_stride_u;
2464
+ dst_v += dst_stride_v;
2465
+ }
2466
+ return 0;
2467
+ }
2468
+
2469
+ // Convert ARGB to J420. (JPeg full range I420).
2470
+ LIBYUV_API
2471
+ int ARGBToJ420(const uint8_t* src_argb,
2472
+ int src_stride_argb,
2473
+ uint8_t* dst_yj,
2474
+ int dst_stride_yj,
2475
+ uint8_t* dst_uj,
2476
+ int dst_stride_uj,
2477
+ uint8_t* dst_vj,
2478
+ int dst_stride_vj,
2479
+ int width,
2480
+ int height) {
2481
+ int y;
2482
+ void (*ARGBToUVJRow)(const uint8_t* src_argb0, int src_stride_argb,
2483
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
2484
+ ARGBToUVJRow_C;
2485
+ void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_yj, int width) =
2486
+ ARGBToYJRow_C;
2487
+ if (!src_argb || !dst_yj || !dst_uj || !dst_vj || width <= 0 || height == 0) {
2488
+ return -1;
2489
+ }
2490
+ // Negative height means invert the image.
2491
+ if (height < 0) {
2492
+ height = -height;
2493
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2494
+ src_stride_argb = -src_stride_argb;
2495
+ }
2496
+ #if defined(HAS_ARGBTOYJROW_NEON)
2497
+ if (TestCpuFlag(kCpuHasNEON)) {
2498
+ ARGBToYJRow = ARGBToYJRow_Any_NEON;
2499
+ if (IS_ALIGNED(width, 16)) {
2500
+ ARGBToYJRow = ARGBToYJRow_NEON;
2501
+ }
2502
+ }
2503
+ #endif
2504
+ #if defined(HAS_ARGBTOYJROW_NEON_DOTPROD)
2505
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2506
+ ARGBToYJRow = ARGBToYJRow_Any_NEON_DotProd;
2507
+ if (IS_ALIGNED(width, 16)) {
2508
+ ARGBToYJRow = ARGBToYJRow_NEON_DotProd;
2509
+ }
2510
+ }
2511
+ #endif
2512
+ #if defined(HAS_ARGBTOUVJROW_NEON)
2513
+ if (TestCpuFlag(kCpuHasNEON)) {
2514
+ ARGBToUVJRow = ARGBToUVJRow_Any_NEON;
2515
+ if (IS_ALIGNED(width, 16)) {
2516
+ ARGBToUVJRow = ARGBToUVJRow_NEON;
2517
+ }
2518
+ }
2519
+ #endif
2520
+ #if defined(HAS_ARGBTOUVJROW_NEON_I8MM)
2521
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
2522
+ ARGBToUVJRow = ARGBToUVJRow_Any_NEON_I8MM;
2523
+ if (IS_ALIGNED(width, 16)) {
2524
+ ARGBToUVJRow = ARGBToUVJRow_NEON_I8MM;
2525
+ }
2526
+ }
2527
+ #endif
2528
+ #if defined(HAS_ARGBTOUVJROW_SVE2)
2529
+ if (TestCpuFlag(kCpuHasSVE2)) {
2530
+ ARGBToUVJRow = ARGBToUVJRow_Any_SVE2;
2531
+ if (IS_ALIGNED(width, 2)) {
2532
+ ARGBToUVJRow = ARGBToUVJRow_SVE2;
2533
+ }
2534
+ }
2535
+ #endif
2536
+ #if defined(HAS_ARGBTOUVJROW_SME)
2537
+ if (TestCpuFlag(kCpuHasSME)) {
2538
+ ARGBToUVJRow = ARGBToUVJRow_Any_SME;
2539
+ if (IS_ALIGNED(width, 2)) {
2540
+ ARGBToUVJRow = ARGBToUVJRow_SME;
2541
+ }
2542
+ }
2543
+ #endif
2544
+ #if defined(HAS_ARGBTOYJROW_SSSE3)
2545
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2546
+ ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
2547
+ if (IS_ALIGNED(width, 16)) {
2548
+ ARGBToYJRow = ARGBToYJRow_SSSE3;
2549
+ }
2550
+ }
2551
+ #endif
2552
+ #if defined(HAS_ARGBTOUVJROW_SSSE3)
2553
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2554
+ ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
2555
+ if (IS_ALIGNED(width, 16)) {
2556
+ ARGBToUVJRow = ARGBToUVJRow_SSSE3;
2557
+ }
2558
+ }
2559
+ #endif
2560
+ #if defined(HAS_ARGBTOYJROW_AVX2)
2561
+ if (TestCpuFlag(kCpuHasAVX2)) {
2562
+ ARGBToYJRow = ARGBToYJRow_Any_AVX2;
2563
+ if (IS_ALIGNED(width, 32)) {
2564
+ ARGBToYJRow = ARGBToYJRow_AVX2;
2565
+ }
2566
+ }
2567
+ #endif
2568
+ #if defined(HAS_ARGBTOUVJROW_AVX2)
2569
+ if (TestCpuFlag(kCpuHasAVX2)) {
2570
+ ARGBToUVJRow = ARGBToUVJRow_Any_AVX2;
2571
+ if (IS_ALIGNED(width, 32)) {
2572
+ ARGBToUVJRow = ARGBToUVJRow_AVX2;
2573
+ }
2574
+ }
2575
+ #endif
2576
+ #if defined(HAS_ARGBTOYJROW_LSX) && defined(HAS_ARGBTOUVJROW_LSX)
2577
+ if (TestCpuFlag(kCpuHasLSX)) {
2578
+ ARGBToYJRow = ARGBToYJRow_Any_LSX;
2579
+ ARGBToUVJRow = ARGBToUVJRow_Any_LSX;
2580
+ if (IS_ALIGNED(width, 16)) {
2581
+ ARGBToYJRow = ARGBToYJRow_LSX;
2582
+ ARGBToUVJRow = ARGBToUVJRow_LSX;
2583
+ }
2584
+ }
2585
+ #endif
2586
+ #if defined(HAS_ARGBTOYJROW_LASX) && defined(HAS_ARGBTOUVJROW_LASX)
2587
+ if (TestCpuFlag(kCpuHasLASX)) {
2588
+ ARGBToYJRow = ARGBToYJRow_Any_LASX;
2589
+ ARGBToUVJRow = ARGBToUVJRow_Any_LASX;
2590
+ if (IS_ALIGNED(width, 32)) {
2591
+ ARGBToYJRow = ARGBToYJRow_LASX;
2592
+ ARGBToUVJRow = ARGBToUVJRow_LASX;
2593
+ }
2594
+ }
2595
+ #endif
2596
+ #if defined(HAS_ARGBTOYJROW_RVV)
2597
+ if (TestCpuFlag(kCpuHasRVV)) {
2598
+ ARGBToYJRow = ARGBToYJRow_RVV;
2599
+ }
2600
+ #endif
2601
+
2602
+ for (y = 0; y < height - 1; y += 2) {
2603
+ ARGBToUVJRow(src_argb, src_stride_argb, dst_uj, dst_vj, width);
2604
+ ARGBToYJRow(src_argb, dst_yj, width);
2605
+ ARGBToYJRow(src_argb + src_stride_argb, dst_yj + dst_stride_yj, width);
2606
+ src_argb += src_stride_argb * 2;
2607
+ dst_yj += dst_stride_yj * 2;
2608
+ dst_uj += dst_stride_uj;
2609
+ dst_vj += dst_stride_vj;
2610
+ }
2611
+ if (height & 1) {
2612
+ ARGBToUVJRow(src_argb, 0, dst_uj, dst_vj, width);
2613
+ ARGBToYJRow(src_argb, dst_yj, width);
2614
+ }
2615
+ return 0;
2616
+ }
2617
+
2618
+ // Convert ARGB to J422. (JPeg full range I422).
2619
+ LIBYUV_API
2620
+ int ARGBToJ422(const uint8_t* src_argb,
2621
+ int src_stride_argb,
2622
+ uint8_t* dst_yj,
2623
+ int dst_stride_yj,
2624
+ uint8_t* dst_uj,
2625
+ int dst_stride_uj,
2626
+ uint8_t* dst_vj,
2627
+ int dst_stride_vj,
2628
+ int width,
2629
+ int height) {
2630
+ int y;
2631
+ void (*ARGBToUVJRow)(const uint8_t* src_argb0, int src_stride_argb,
2632
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
2633
+ ARGBToUVJRow_C;
2634
+ void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_yj, int width) =
2635
+ ARGBToYJRow_C;
2636
+ if (!src_argb || !dst_yj || !dst_uj || !dst_vj || width <= 0 || height == 0) {
2637
+ return -1;
2638
+ }
2639
+ // Negative height means invert the image.
2640
+ if (height < 0) {
2641
+ height = -height;
2642
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2643
+ src_stride_argb = -src_stride_argb;
2644
+ }
2645
+ // Coalesce rows.
2646
+ if (src_stride_argb == width * 4 && dst_stride_yj == width &&
2647
+ dst_stride_uj * 2 == width && dst_stride_vj * 2 == width) {
2648
+ width *= height;
2649
+ height = 1;
2650
+ src_stride_argb = dst_stride_yj = dst_stride_uj = dst_stride_vj = 0;
2651
+ }
2652
+ #if defined(HAS_ARGBTOYJROW_SSSE3)
2653
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2654
+ ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
2655
+ if (IS_ALIGNED(width, 16)) {
2656
+ ARGBToYJRow = ARGBToYJRow_SSSE3;
2657
+ }
2658
+ }
2659
+ #endif
2660
+ #if defined(HAS_ARGBTOUVJROW_SSSE3)
2661
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2662
+ ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
2663
+ if (IS_ALIGNED(width, 16)) {
2664
+ ARGBToUVJRow = ARGBToUVJRow_SSSE3;
2665
+ }
2666
+ }
2667
+ #endif
2668
+ #if defined(HAS_ARGBTOYJROW_AVX2)
2669
+ if (TestCpuFlag(kCpuHasAVX2)) {
2670
+ ARGBToYJRow = ARGBToYJRow_Any_AVX2;
2671
+ if (IS_ALIGNED(width, 32)) {
2672
+ ARGBToYJRow = ARGBToYJRow_AVX2;
2673
+ }
2674
+ }
2675
+ #endif
2676
+ #if defined(HAS_ARGBTOUVJROW_AVX2)
2677
+ if (TestCpuFlag(kCpuHasAVX2)) {
2678
+ ARGBToUVJRow = ARGBToUVJRow_Any_AVX2;
2679
+ if (IS_ALIGNED(width, 32)) {
2680
+ ARGBToUVJRow = ARGBToUVJRow_AVX2;
2681
+ }
2682
+ }
2683
+ #endif
2684
+ #if defined(HAS_ARGBTOYJROW_NEON)
2685
+ if (TestCpuFlag(kCpuHasNEON)) {
2686
+ ARGBToYJRow = ARGBToYJRow_Any_NEON;
2687
+ if (IS_ALIGNED(width, 16)) {
2688
+ ARGBToYJRow = ARGBToYJRow_NEON;
2689
+ }
2690
+ }
2691
+ #endif
2692
+ #if defined(HAS_ARGBTOYJROW_NEON_DOTPROD)
2693
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2694
+ ARGBToYJRow = ARGBToYJRow_Any_NEON_DotProd;
2695
+ if (IS_ALIGNED(width, 16)) {
2696
+ ARGBToYJRow = ARGBToYJRow_NEON_DotProd;
2697
+ }
2698
+ }
2699
+ #endif
2700
+ #if defined(HAS_ARGBTOUVJROW_NEON)
2701
+ if (TestCpuFlag(kCpuHasNEON)) {
2702
+ ARGBToUVJRow = ARGBToUVJRow_Any_NEON;
2703
+ if (IS_ALIGNED(width, 16)) {
2704
+ ARGBToUVJRow = ARGBToUVJRow_NEON;
2705
+ }
2706
+ }
2707
+ #endif
2708
+ #if defined(HAS_ARGBTOUVJROW_NEON_I8MM)
2709
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
2710
+ ARGBToUVJRow = ARGBToUVJRow_Any_NEON_I8MM;
2711
+ if (IS_ALIGNED(width, 16)) {
2712
+ ARGBToUVJRow = ARGBToUVJRow_NEON_I8MM;
2713
+ }
2714
+ }
2715
+ #endif
2716
+ #if defined(HAS_ARGBTOUVJROW_SVE2)
2717
+ if (TestCpuFlag(kCpuHasSVE2)) {
2718
+ ARGBToUVJRow = ARGBToUVJRow_Any_SVE2;
2719
+ if (IS_ALIGNED(width, 2)) {
2720
+ ARGBToUVJRow = ARGBToUVJRow_SVE2;
2721
+ }
2722
+ }
2723
+ #endif
2724
+ #if defined(HAS_ARGBTOUVJROW_SME)
2725
+ if (TestCpuFlag(kCpuHasSME)) {
2726
+ ARGBToUVJRow = ARGBToUVJRow_Any_SME;
2727
+ if (IS_ALIGNED(width, 2)) {
2728
+ ARGBToUVJRow = ARGBToUVJRow_SME;
2729
+ }
2730
+ }
2731
+ #endif
2732
+ #if defined(HAS_ARGBTOYJROW_LSX) && defined(HAS_ARGBTOUVJROW_LSX)
2733
+ if (TestCpuFlag(kCpuHasLSX)) {
2734
+ ARGBToYJRow = ARGBToYJRow_Any_LSX;
2735
+ ARGBToUVJRow = ARGBToUVJRow_Any_LSX;
2736
+ if (IS_ALIGNED(width, 16)) {
2737
+ ARGBToYJRow = ARGBToYJRow_LSX;
2738
+ ARGBToUVJRow = ARGBToUVJRow_LSX;
2739
+ }
2740
+ }
2741
+ #endif
2742
+ #if defined(HAS_ARGBTOYJROW_LASX) && defined(HAS_ARGBTOUVJROW_LASX)
2743
+ if (TestCpuFlag(kCpuHasLASX)) {
2744
+ ARGBToYJRow = ARGBToYJRow_Any_LASX;
2745
+ ARGBToUVJRow = ARGBToUVJRow_Any_LASX;
2746
+ if (IS_ALIGNED(width, 32)) {
2747
+ ARGBToYJRow = ARGBToYJRow_LASX;
2748
+ ARGBToUVJRow = ARGBToUVJRow_LASX;
2749
+ }
2750
+ }
2751
+ #endif
2752
+ #if defined(HAS_ARGBTOYJROW_RVV)
2753
+ if (TestCpuFlag(kCpuHasRVV)) {
2754
+ ARGBToYJRow = ARGBToYJRow_RVV;
2755
+ }
2756
+ #endif
2757
+
2758
+ for (y = 0; y < height; ++y) {
2759
+ ARGBToUVJRow(src_argb, 0, dst_uj, dst_vj, width);
2760
+ ARGBToYJRow(src_argb, dst_yj, width);
2761
+ src_argb += src_stride_argb;
2762
+ dst_yj += dst_stride_yj;
2763
+ dst_uj += dst_stride_uj;
2764
+ dst_vj += dst_stride_vj;
2765
+ }
2766
+ return 0;
2767
+ }
2768
+
2769
+ // Convert ARGB to J400.
2770
+ LIBYUV_API
2771
+ int ARGBToJ400(const uint8_t* src_argb,
2772
+ int src_stride_argb,
2773
+ uint8_t* dst_yj,
2774
+ int dst_stride_yj,
2775
+ int width,
2776
+ int height) {
2777
+ int y;
2778
+ void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_yj, int width) =
2779
+ ARGBToYJRow_C;
2780
+ if (!src_argb || !dst_yj || width <= 0 || height == 0) {
2781
+ return -1;
2782
+ }
2783
+ if (height < 0) {
2784
+ height = -height;
2785
+ src_argb = src_argb + (height - 1) * src_stride_argb;
2786
+ src_stride_argb = -src_stride_argb;
2787
+ }
2788
+ // Coalesce rows.
2789
+ if (src_stride_argb == width * 4 && dst_stride_yj == width) {
2790
+ width *= height;
2791
+ height = 1;
2792
+ src_stride_argb = dst_stride_yj = 0;
2793
+ }
2794
+ #if defined(HAS_ARGBTOYJROW_SSSE3)
2795
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2796
+ ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
2797
+ if (IS_ALIGNED(width, 16)) {
2798
+ ARGBToYJRow = ARGBToYJRow_SSSE3;
2799
+ }
2800
+ }
2801
+ #endif
2802
+ #if defined(HAS_ARGBTOYJROW_AVX2)
2803
+ if (TestCpuFlag(kCpuHasAVX2)) {
2804
+ ARGBToYJRow = ARGBToYJRow_Any_AVX2;
2805
+ if (IS_ALIGNED(width, 32)) {
2806
+ ARGBToYJRow = ARGBToYJRow_AVX2;
2807
+ }
2808
+ }
2809
+ #endif
2810
+ #if defined(HAS_ARGBTOYJROW_NEON)
2811
+ if (TestCpuFlag(kCpuHasNEON)) {
2812
+ ARGBToYJRow = ARGBToYJRow_Any_NEON;
2813
+ if (IS_ALIGNED(width, 16)) {
2814
+ ARGBToYJRow = ARGBToYJRow_NEON;
2815
+ }
2816
+ }
2817
+ #endif
2818
+ #if defined(HAS_ARGBTOYJROW_NEON_DOTPROD)
2819
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2820
+ ARGBToYJRow = ARGBToYJRow_Any_NEON_DotProd;
2821
+ if (IS_ALIGNED(width, 16)) {
2822
+ ARGBToYJRow = ARGBToYJRow_NEON_DotProd;
2823
+ }
2824
+ }
2825
+ #endif
2826
+ #if defined(HAS_ARGBTOYJROW_RVV)
2827
+ if (TestCpuFlag(kCpuHasRVV)) {
2828
+ ARGBToYJRow = ARGBToYJRow_RVV;
2829
+ }
2830
+ #endif
2831
+
2832
+ for (y = 0; y < height; ++y) {
2833
+ ARGBToYJRow(src_argb, dst_yj, width);
2834
+ src_argb += src_stride_argb;
2835
+ dst_yj += dst_stride_yj;
2836
+ }
2837
+ return 0;
2838
+ }
2839
+
2840
+ // Convert RGBA to J400.
2841
+ LIBYUV_API
2842
+ int RGBAToJ400(const uint8_t* src_rgba,
2843
+ int src_stride_rgba,
2844
+ uint8_t* dst_yj,
2845
+ int dst_stride_yj,
2846
+ int width,
2847
+ int height) {
2848
+ int y;
2849
+ void (*RGBAToYJRow)(const uint8_t* src_rgba, uint8_t* dst_yj, int width) =
2850
+ RGBAToYJRow_C;
2851
+ if (!src_rgba || !dst_yj || width <= 0 || height == 0) {
2852
+ return -1;
2853
+ }
2854
+ if (height < 0) {
2855
+ height = -height;
2856
+ src_rgba = src_rgba + (height - 1) * src_stride_rgba;
2857
+ src_stride_rgba = -src_stride_rgba;
2858
+ }
2859
+ // Coalesce rows.
2860
+ if (src_stride_rgba == width * 4 && dst_stride_yj == width) {
2861
+ width *= height;
2862
+ height = 1;
2863
+ src_stride_rgba = dst_stride_yj = 0;
2864
+ }
2865
+ #if defined(HAS_RGBATOYJROW_SSSE3)
2866
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2867
+ RGBAToYJRow = RGBAToYJRow_Any_SSSE3;
2868
+ if (IS_ALIGNED(width, 16)) {
2869
+ RGBAToYJRow = RGBAToYJRow_SSSE3;
2870
+ }
2871
+ }
2872
+ #endif
2873
+ #if defined(HAS_RGBATOYJROW_AVX2)
2874
+ if (TestCpuFlag(kCpuHasAVX2)) {
2875
+ RGBAToYJRow = RGBAToYJRow_Any_AVX2;
2876
+ if (IS_ALIGNED(width, 32)) {
2877
+ RGBAToYJRow = RGBAToYJRow_AVX2;
2878
+ }
2879
+ }
2880
+ #endif
2881
+ #if defined(HAS_RGBATOYJROW_NEON)
2882
+ if (TestCpuFlag(kCpuHasNEON)) {
2883
+ RGBAToYJRow = RGBAToYJRow_Any_NEON;
2884
+ if (IS_ALIGNED(width, 16)) {
2885
+ RGBAToYJRow = RGBAToYJRow_NEON;
2886
+ }
2887
+ }
2888
+ #endif
2889
+ #if defined(HAS_RGBATOYJROW_NEON_DOTPROD)
2890
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2891
+ RGBAToYJRow = RGBAToYJRow_Any_NEON_DotProd;
2892
+ if (IS_ALIGNED(width, 16)) {
2893
+ RGBAToYJRow = RGBAToYJRow_NEON_DotProd;
2894
+ }
2895
+ }
2896
+ #endif
2897
+ #if defined(HAS_RGBATOYJROW_LSX)
2898
+ if (TestCpuFlag(kCpuHasLSX)) {
2899
+ RGBAToYJRow = RGBAToYJRow_Any_LSX;
2900
+ if (IS_ALIGNED(width, 16)) {
2901
+ RGBAToYJRow = RGBAToYJRow_LSX;
2902
+ }
2903
+ }
2904
+ #endif
2905
+ #if defined(HAS_RGBATOYJROW_LASX)
2906
+ if (TestCpuFlag(kCpuHasLASX)) {
2907
+ RGBAToYJRow = RGBAToYJRow_Any_LASX;
2908
+ if (IS_ALIGNED(width, 32)) {
2909
+ RGBAToYJRow = RGBAToYJRow_LASX;
2910
+ }
2911
+ }
2912
+ #endif
2913
+ #if defined(HAS_RGBATOYJROW_RVV)
2914
+ if (TestCpuFlag(kCpuHasRVV)) {
2915
+ RGBAToYJRow = RGBAToYJRow_RVV;
2916
+ }
2917
+ #endif
2918
+
2919
+ for (y = 0; y < height; ++y) {
2920
+ RGBAToYJRow(src_rgba, dst_yj, width);
2921
+ src_rgba += src_stride_rgba;
2922
+ dst_yj += dst_stride_yj;
2923
+ }
2924
+ return 0;
2925
+ }
2926
+
2927
+ // Convert ABGR to J420. (JPeg full range I420).
2928
+ LIBYUV_API
2929
+ int ABGRToJ420(const uint8_t* src_abgr,
2930
+ int src_stride_abgr,
2931
+ uint8_t* dst_yj,
2932
+ int dst_stride_yj,
2933
+ uint8_t* dst_uj,
2934
+ int dst_stride_uj,
2935
+ uint8_t* dst_vj,
2936
+ int dst_stride_vj,
2937
+ int width,
2938
+ int height) {
2939
+ int y;
2940
+ void (*ABGRToUVJRow)(const uint8_t* src_abgr0, int src_stride_abgr,
2941
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
2942
+ ABGRToUVJRow_C;
2943
+ void (*ABGRToYJRow)(const uint8_t* src_abgr, uint8_t* dst_yj, int width) =
2944
+ ABGRToYJRow_C;
2945
+ if (!src_abgr || !dst_yj || !dst_uj || !dst_vj || width <= 0 || height == 0) {
2946
+ return -1;
2947
+ }
2948
+ // Negative height means invert the image.
2949
+ if (height < 0) {
2950
+ height = -height;
2951
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
2952
+ src_stride_abgr = -src_stride_abgr;
2953
+ }
2954
+ #if defined(HAS_ABGRTOYJROW_SSSE3)
2955
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2956
+ ABGRToYJRow = ABGRToYJRow_Any_SSSE3;
2957
+ if (IS_ALIGNED(width, 16)) {
2958
+ ABGRToYJRow = ABGRToYJRow_SSSE3;
2959
+ }
2960
+ }
2961
+ #endif
2962
+ #if defined(HAS_ABGRTOUVJROW_SSSE3)
2963
+ if (TestCpuFlag(kCpuHasSSSE3)) {
2964
+ ABGRToUVJRow = ABGRToUVJRow_Any_SSSE3;
2965
+ if (IS_ALIGNED(width, 16)) {
2966
+ ABGRToUVJRow = ABGRToUVJRow_SSSE3;
2967
+ }
2968
+ }
2969
+ #endif
2970
+ #if defined(HAS_ABGRTOYJROW_AVX2)
2971
+ if (TestCpuFlag(kCpuHasAVX2)) {
2972
+ ABGRToYJRow = ABGRToYJRow_Any_AVX2;
2973
+ if (IS_ALIGNED(width, 32)) {
2974
+ ABGRToYJRow = ABGRToYJRow_AVX2;
2975
+ }
2976
+ }
2977
+ #endif
2978
+ #if defined(HAS_ABGRTOUVJROW_AVX2)
2979
+ if (TestCpuFlag(kCpuHasAVX2)) {
2980
+ ABGRToUVJRow = ABGRToUVJRow_Any_AVX2;
2981
+ if (IS_ALIGNED(width, 32)) {
2982
+ ABGRToUVJRow = ABGRToUVJRow_AVX2;
2983
+ }
2984
+ }
2985
+ #endif
2986
+ #if defined(HAS_ABGRTOYJROW_NEON)
2987
+ if (TestCpuFlag(kCpuHasNEON)) {
2988
+ ABGRToYJRow = ABGRToYJRow_Any_NEON;
2989
+ if (IS_ALIGNED(width, 16)) {
2990
+ ABGRToYJRow = ABGRToYJRow_NEON;
2991
+ }
2992
+ }
2993
+ #endif
2994
+ #if defined(HAS_ABGRTOYJROW_NEON_DOTPROD)
2995
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
2996
+ ABGRToYJRow = ABGRToYJRow_Any_NEON_DotProd;
2997
+ if (IS_ALIGNED(width, 16)) {
2998
+ ABGRToYJRow = ABGRToYJRow_NEON_DotProd;
2999
+ }
3000
+ }
3001
+ #endif
3002
+ #if defined(HAS_ABGRTOUVJROW_NEON)
3003
+ if (TestCpuFlag(kCpuHasNEON)) {
3004
+ ABGRToUVJRow = ABGRToUVJRow_Any_NEON;
3005
+ if (IS_ALIGNED(width, 16)) {
3006
+ ABGRToUVJRow = ABGRToUVJRow_NEON;
3007
+ }
3008
+ }
3009
+ #endif
3010
+ #if defined(HAS_ABGRTOUVJROW_NEON_I8MM)
3011
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
3012
+ ABGRToUVJRow = ABGRToUVJRow_Any_NEON_I8MM;
3013
+ if (IS_ALIGNED(width, 16)) {
3014
+ ABGRToUVJRow = ABGRToUVJRow_NEON_I8MM;
3015
+ }
3016
+ }
3017
+ #endif
3018
+ #if defined(HAS_ABGRTOUVJROW_SVE2)
3019
+ if (TestCpuFlag(kCpuHasSVE2)) {
3020
+ ABGRToUVJRow = ABGRToUVJRow_Any_SVE2;
3021
+ if (IS_ALIGNED(width, 2)) {
3022
+ ABGRToUVJRow = ABGRToUVJRow_SVE2;
3023
+ }
3024
+ }
3025
+ #endif
3026
+ #if defined(HAS_ABGRTOUVJROW_SME)
3027
+ if (TestCpuFlag(kCpuHasSME)) {
3028
+ ABGRToUVJRow = ABGRToUVJRow_Any_SME;
3029
+ if (IS_ALIGNED(width, 2)) {
3030
+ ABGRToUVJRow = ABGRToUVJRow_SME;
3031
+ }
3032
+ }
3033
+ #endif
3034
+ #if defined(HAS_ABGRTOYJROW_LSX)
3035
+ if (TestCpuFlag(kCpuHasLSX)) {
3036
+ ABGRToYJRow = ABGRToYJRow_Any_LSX;
3037
+ if (IS_ALIGNED(width, 16)) {
3038
+ ABGRToYJRow = ABGRToYJRow_LSX;
3039
+ }
3040
+ }
3041
+ #endif
3042
+ #if defined(HAS_ABGRTOYJROW_LASX)
3043
+ if (TestCpuFlag(kCpuHasLASX)) {
3044
+ ABGRToYJRow = ABGRToYJRow_Any_LASX;
3045
+ if (IS_ALIGNED(width, 32)) {
3046
+ ABGRToYJRow = ABGRToYJRow_LASX;
3047
+ }
3048
+ }
3049
+ #endif
3050
+ #if defined(HAS_ABGRTOYJROW_RVV)
3051
+ if (TestCpuFlag(kCpuHasRVV)) {
3052
+ ABGRToYJRow = ABGRToYJRow_RVV;
3053
+ }
3054
+ #endif
3055
+
3056
+ for (y = 0; y < height - 1; y += 2) {
3057
+ ABGRToUVJRow(src_abgr, src_stride_abgr, dst_uj, dst_vj, width);
3058
+ ABGRToYJRow(src_abgr, dst_yj, width);
3059
+ ABGRToYJRow(src_abgr + src_stride_abgr, dst_yj + dst_stride_yj, width);
3060
+ src_abgr += src_stride_abgr * 2;
3061
+ dst_yj += dst_stride_yj * 2;
3062
+ dst_uj += dst_stride_uj;
3063
+ dst_vj += dst_stride_vj;
3064
+ }
3065
+ if (height & 1) {
3066
+ ABGRToUVJRow(src_abgr, 0, dst_uj, dst_vj, width);
3067
+ ABGRToYJRow(src_abgr, dst_yj, width);
3068
+ }
3069
+ return 0;
3070
+ }
3071
+
3072
+ // Convert ABGR to J422. (JPeg full range I422).
3073
+ LIBYUV_API
3074
+ int ABGRToJ422(const uint8_t* src_abgr,
3075
+ int src_stride_abgr,
3076
+ uint8_t* dst_yj,
3077
+ int dst_stride_yj,
3078
+ uint8_t* dst_uj,
3079
+ int dst_stride_uj,
3080
+ uint8_t* dst_vj,
3081
+ int dst_stride_vj,
3082
+ int width,
3083
+ int height) {
3084
+ int y;
3085
+ void (*ABGRToUVJRow)(const uint8_t* src_abgr0, int src_stride_abgr,
3086
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
3087
+ ABGRToUVJRow_C;
3088
+ void (*ABGRToYJRow)(const uint8_t* src_abgr, uint8_t* dst_yj, int width) =
3089
+ ABGRToYJRow_C;
3090
+ if (!src_abgr || !dst_yj || !dst_uj || !dst_vj || width <= 0 || height == 0) {
3091
+ return -1;
3092
+ }
3093
+ // Negative height means invert the image.
3094
+ if (height < 0) {
3095
+ height = -height;
3096
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
3097
+ src_stride_abgr = -src_stride_abgr;
3098
+ }
3099
+ // Coalesce rows.
3100
+ if (src_stride_abgr == width * 4 && dst_stride_yj == width &&
3101
+ dst_stride_uj * 2 == width && dst_stride_vj * 2 == width) {
3102
+ width *= height;
3103
+ height = 1;
3104
+ src_stride_abgr = dst_stride_yj = dst_stride_uj = dst_stride_vj = 0;
3105
+ }
3106
+ #if defined(HAS_ABGRTOYJROW_SSSE3)
3107
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3108
+ ABGRToYJRow = ABGRToYJRow_Any_SSSE3;
3109
+ if (IS_ALIGNED(width, 16)) {
3110
+ ABGRToYJRow = ABGRToYJRow_SSSE3;
3111
+ }
3112
+ }
3113
+ #endif
3114
+ #if defined(HAS_ABGRTOUVJROW_SSSE3)
3115
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3116
+ ABGRToUVJRow = ABGRToUVJRow_Any_SSSE3;
3117
+ if (IS_ALIGNED(width, 16)) {
3118
+ ABGRToUVJRow = ABGRToUVJRow_SSSE3;
3119
+ }
3120
+ }
3121
+ #endif
3122
+ #if defined(HAS_ABGRTOYJROW_AVX2)
3123
+ if (TestCpuFlag(kCpuHasAVX2)) {
3124
+ ABGRToYJRow = ABGRToYJRow_Any_AVX2;
3125
+ if (IS_ALIGNED(width, 32)) {
3126
+ ABGRToYJRow = ABGRToYJRow_AVX2;
3127
+ }
3128
+ }
3129
+ #endif
3130
+ #if defined(HAS_ABGRTOUVJROW_AVX2)
3131
+ if (TestCpuFlag(kCpuHasAVX2)) {
3132
+ ABGRToUVJRow = ABGRToUVJRow_Any_AVX2;
3133
+ if (IS_ALIGNED(width, 32)) {
3134
+ ABGRToUVJRow = ABGRToUVJRow_AVX2;
3135
+ }
3136
+ }
3137
+ #endif
3138
+ #if defined(HAS_ABGRTOYJROW_NEON)
3139
+ if (TestCpuFlag(kCpuHasNEON)) {
3140
+ ABGRToYJRow = ABGRToYJRow_Any_NEON;
3141
+ if (IS_ALIGNED(width, 16)) {
3142
+ ABGRToYJRow = ABGRToYJRow_NEON;
3143
+ }
3144
+ }
3145
+ #endif
3146
+ #if defined(HAS_ABGRTOYJROW_NEON_DOTPROD)
3147
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
3148
+ ABGRToYJRow = ABGRToYJRow_Any_NEON_DotProd;
3149
+ if (IS_ALIGNED(width, 16)) {
3150
+ ABGRToYJRow = ABGRToYJRow_NEON_DotProd;
3151
+ }
3152
+ }
3153
+ #endif
3154
+ #if defined(HAS_ABGRTOUVJROW_NEON)
3155
+ if (TestCpuFlag(kCpuHasNEON)) {
3156
+ ABGRToUVJRow = ABGRToUVJRow_Any_NEON;
3157
+ if (IS_ALIGNED(width, 16)) {
3158
+ ABGRToUVJRow = ABGRToUVJRow_NEON;
3159
+ }
3160
+ }
3161
+ #endif
3162
+ #if defined(HAS_ABGRTOUVJROW_NEON_I8MM)
3163
+ if (TestCpuFlag(kCpuHasNeonI8MM)) {
3164
+ ABGRToUVJRow = ABGRToUVJRow_Any_NEON_I8MM;
3165
+ if (IS_ALIGNED(width, 16)) {
3166
+ ABGRToUVJRow = ABGRToUVJRow_NEON_I8MM;
3167
+ }
3168
+ }
3169
+ #endif
3170
+ #if defined(HAS_ABGRTOUVJROW_SVE2)
3171
+ if (TestCpuFlag(kCpuHasSVE2)) {
3172
+ ABGRToUVJRow = ABGRToUVJRow_Any_SVE2;
3173
+ if (IS_ALIGNED(width, 2)) {
3174
+ ABGRToUVJRow = ABGRToUVJRow_SVE2;
3175
+ }
3176
+ }
3177
+ #endif
3178
+ #if defined(HAS_ABGRTOUVJROW_SME)
3179
+ if (TestCpuFlag(kCpuHasSME)) {
3180
+ ABGRToUVJRow = ABGRToUVJRow_Any_SME;
3181
+ if (IS_ALIGNED(width, 2)) {
3182
+ ABGRToUVJRow = ABGRToUVJRow_SME;
3183
+ }
3184
+ }
3185
+ #endif
3186
+ #if defined(HAS_ABGRTOYJROW_LSX)
3187
+ if (TestCpuFlag(kCpuHasLSX)) {
3188
+ ABGRToYJRow = ABGRToYJRow_Any_LSX;
3189
+ if (IS_ALIGNED(width, 16)) {
3190
+ ABGRToYJRow = ABGRToYJRow_LSX;
3191
+ }
3192
+ }
3193
+ #endif
3194
+ #if defined(HAS_ABGRTOYJROW_LASX)
3195
+ if (TestCpuFlag(kCpuHasLASX)) {
3196
+ ABGRToYJRow = ABGRToYJRow_Any_LASX;
3197
+ if (IS_ALIGNED(width, 32)) {
3198
+ ABGRToYJRow = ABGRToYJRow_LASX;
3199
+ }
3200
+ }
3201
+ #endif
3202
+ #if defined(HAS_ABGRTOYJROW_RVV)
3203
+ if (TestCpuFlag(kCpuHasRVV)) {
3204
+ ABGRToYJRow = ABGRToYJRow_RVV;
3205
+ }
3206
+ #endif
3207
+
3208
+ for (y = 0; y < height; ++y) {
3209
+ ABGRToUVJRow(src_abgr, 0, dst_uj, dst_vj, width);
3210
+ ABGRToYJRow(src_abgr, dst_yj, width);
3211
+ src_abgr += src_stride_abgr;
3212
+ dst_yj += dst_stride_yj;
3213
+ dst_uj += dst_stride_uj;
3214
+ dst_vj += dst_stride_vj;
3215
+ }
3216
+ return 0;
3217
+ }
3218
+
3219
+ // Convert ABGR to J400.
3220
+ LIBYUV_API
3221
+ int ABGRToJ400(const uint8_t* src_abgr,
3222
+ int src_stride_abgr,
3223
+ uint8_t* dst_yj,
3224
+ int dst_stride_yj,
3225
+ int width,
3226
+ int height) {
3227
+ int y;
3228
+ void (*ABGRToYJRow)(const uint8_t* src_abgr, uint8_t* dst_yj, int width) =
3229
+ ABGRToYJRow_C;
3230
+ if (!src_abgr || !dst_yj || width <= 0 || height == 0) {
3231
+ return -1;
3232
+ }
3233
+ if (height < 0) {
3234
+ height = -height;
3235
+ src_abgr = src_abgr + (height - 1) * src_stride_abgr;
3236
+ src_stride_abgr = -src_stride_abgr;
3237
+ }
3238
+ // Coalesce rows.
3239
+ if (src_stride_abgr == width * 4 && dst_stride_yj == width) {
3240
+ width *= height;
3241
+ height = 1;
3242
+ src_stride_abgr = dst_stride_yj = 0;
3243
+ }
3244
+ #if defined(HAS_ABGRTOYJROW_SSSE3)
3245
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3246
+ ABGRToYJRow = ABGRToYJRow_Any_SSSE3;
3247
+ if (IS_ALIGNED(width, 16)) {
3248
+ ABGRToYJRow = ABGRToYJRow_SSSE3;
3249
+ }
3250
+ }
3251
+ #endif
3252
+ #if defined(HAS_ABGRTOYJROW_AVX2)
3253
+ if (TestCpuFlag(kCpuHasAVX2)) {
3254
+ ABGRToYJRow = ABGRToYJRow_Any_AVX2;
3255
+ if (IS_ALIGNED(width, 32)) {
3256
+ ABGRToYJRow = ABGRToYJRow_AVX2;
3257
+ }
3258
+ }
3259
+ #endif
3260
+ #if defined(HAS_ABGRTOYJROW_NEON)
3261
+ if (TestCpuFlag(kCpuHasNEON)) {
3262
+ ABGRToYJRow = ABGRToYJRow_Any_NEON;
3263
+ if (IS_ALIGNED(width, 16)) {
3264
+ ABGRToYJRow = ABGRToYJRow_NEON;
3265
+ }
3266
+ }
3267
+ #endif
3268
+ #if defined(HAS_ABGRTOYJROW_NEON_DOTPROD)
3269
+ if (TestCpuFlag(kCpuHasNeonDotProd)) {
3270
+ ABGRToYJRow = ABGRToYJRow_Any_NEON_DotProd;
3271
+ if (IS_ALIGNED(width, 16)) {
3272
+ ABGRToYJRow = ABGRToYJRow_NEON_DotProd;
3273
+ }
3274
+ }
3275
+ #endif
3276
+ #if defined(HAS_ABGRTOYJROW_LSX)
3277
+ if (TestCpuFlag(kCpuHasLSX)) {
3278
+ ABGRToYJRow = ABGRToYJRow_Any_LSX;
3279
+ if (IS_ALIGNED(width, 16)) {
3280
+ ABGRToYJRow = ABGRToYJRow_LSX;
3281
+ }
3282
+ }
3283
+ #endif
3284
+ #if defined(HAS_ABGRTOYJROW_LASX)
3285
+ if (TestCpuFlag(kCpuHasLASX)) {
3286
+ ABGRToYJRow = ABGRToYJRow_Any_LASX;
3287
+ if (IS_ALIGNED(width, 32)) {
3288
+ ABGRToYJRow = ABGRToYJRow_LASX;
3289
+ }
3290
+ }
3291
+ #endif
3292
+ #if defined(HAS_ABGRTOYJROW_RVV)
3293
+ if (TestCpuFlag(kCpuHasRVV)) {
3294
+ ABGRToYJRow = ABGRToYJRow_RVV;
3295
+ }
3296
+ #endif
3297
+
3298
+ for (y = 0; y < height; ++y) {
3299
+ ABGRToYJRow(src_abgr, dst_yj, width);
3300
+ src_abgr += src_stride_abgr;
3301
+ dst_yj += dst_stride_yj;
3302
+ }
3303
+ return 0;
3304
+ }
3305
+
3306
+ // Convert ARGB to AR64.
3307
+ LIBYUV_API
3308
+ int ARGBToAR64(const uint8_t* src_argb,
3309
+ int src_stride_argb,
3310
+ uint16_t* dst_ar64,
3311
+ int dst_stride_ar64,
3312
+ int width,
3313
+ int height) {
3314
+ int y;
3315
+ void (*ARGBToAR64Row)(const uint8_t* src_argb, uint16_t* dst_ar64,
3316
+ int width) = ARGBToAR64Row_C;
3317
+ if (!src_argb || !dst_ar64 || width <= 0 || height == 0) {
3318
+ return -1;
3319
+ }
3320
+ // Negative height means invert the image.
3321
+ if (height < 0) {
3322
+ height = -height;
3323
+ src_argb = src_argb + (height - 1) * src_stride_argb;
3324
+ src_stride_argb = -src_stride_argb;
3325
+ }
3326
+ // Coalesce rows.
3327
+ if (src_stride_argb == width * 4 && dst_stride_ar64 == width * 4) {
3328
+ width *= height;
3329
+ height = 1;
3330
+ src_stride_argb = dst_stride_ar64 = 0;
3331
+ }
3332
+ #if defined(HAS_ARGBTOAR64ROW_SSSE3)
3333
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3334
+ ARGBToAR64Row = ARGBToAR64Row_Any_SSSE3;
3335
+ if (IS_ALIGNED(width, 4)) {
3336
+ ARGBToAR64Row = ARGBToAR64Row_SSSE3;
3337
+ }
3338
+ }
3339
+ #endif
3340
+ #if defined(HAS_ARGBTOAR64ROW_AVX2)
3341
+ if (TestCpuFlag(kCpuHasAVX2)) {
3342
+ ARGBToAR64Row = ARGBToAR64Row_Any_AVX2;
3343
+ if (IS_ALIGNED(width, 8)) {
3344
+ ARGBToAR64Row = ARGBToAR64Row_AVX2;
3345
+ }
3346
+ }
3347
+ #endif
3348
+ #if defined(HAS_ARGBTOAR64ROW_NEON)
3349
+ if (TestCpuFlag(kCpuHasNEON)) {
3350
+ ARGBToAR64Row = ARGBToAR64Row_Any_NEON;
3351
+ if (IS_ALIGNED(width, 8)) {
3352
+ ARGBToAR64Row = ARGBToAR64Row_NEON;
3353
+ }
3354
+ }
3355
+ #endif
3356
+ #if defined(HAS_ARGBTOAR64ROW_RVV)
3357
+ if (TestCpuFlag(kCpuHasRVV)) {
3358
+ ARGBToAR64Row = ARGBToAR64Row_RVV;
3359
+ }
3360
+ #endif
3361
+
3362
+ for (y = 0; y < height; ++y) {
3363
+ ARGBToAR64Row(src_argb, dst_ar64, width);
3364
+ src_argb += src_stride_argb;
3365
+ dst_ar64 += dst_stride_ar64;
3366
+ }
3367
+ return 0;
3368
+ }
3369
+
3370
+ // Convert ARGB to AB64.
3371
+ LIBYUV_API
3372
+ int ARGBToAB64(const uint8_t* src_argb,
3373
+ int src_stride_argb,
3374
+ uint16_t* dst_ab64,
3375
+ int dst_stride_ab64,
3376
+ int width,
3377
+ int height) {
3378
+ int y;
3379
+ void (*ARGBToAB64Row)(const uint8_t* src_argb, uint16_t* dst_ar64,
3380
+ int width) = ARGBToAB64Row_C;
3381
+ if (!src_argb || !dst_ab64 || width <= 0 || height == 0) {
3382
+ return -1;
3383
+ }
3384
+ // Negative height means invert the image.
3385
+ if (height < 0) {
3386
+ height = -height;
3387
+ src_argb = src_argb + (height - 1) * src_stride_argb;
3388
+ src_stride_argb = -src_stride_argb;
3389
+ }
3390
+ // Coalesce rows.
3391
+ if (src_stride_argb == width * 4 && dst_stride_ab64 == width * 4) {
3392
+ width *= height;
3393
+ height = 1;
3394
+ src_stride_argb = dst_stride_ab64 = 0;
3395
+ }
3396
+ #if defined(HAS_ARGBTOAB64ROW_SSSE3)
3397
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3398
+ ARGBToAB64Row = ARGBToAB64Row_Any_SSSE3;
3399
+ if (IS_ALIGNED(width, 4)) {
3400
+ ARGBToAB64Row = ARGBToAB64Row_SSSE3;
3401
+ }
3402
+ }
3403
+ #endif
3404
+ #if defined(HAS_ARGBTOAB64ROW_AVX2)
3405
+ if (TestCpuFlag(kCpuHasAVX2)) {
3406
+ ARGBToAB64Row = ARGBToAB64Row_Any_AVX2;
3407
+ if (IS_ALIGNED(width, 8)) {
3408
+ ARGBToAB64Row = ARGBToAB64Row_AVX2;
3409
+ }
3410
+ }
3411
+ #endif
3412
+ #if defined(HAS_ARGBTOAB64ROW_NEON)
3413
+ if (TestCpuFlag(kCpuHasNEON)) {
3414
+ ARGBToAB64Row = ARGBToAB64Row_Any_NEON;
3415
+ if (IS_ALIGNED(width, 8)) {
3416
+ ARGBToAB64Row = ARGBToAB64Row_NEON;
3417
+ }
3418
+ }
3419
+ #endif
3420
+ #if defined(HAS_ARGBTOAB64ROW_RVV)
3421
+ if (TestCpuFlag(kCpuHasRVV)) {
3422
+ ARGBToAB64Row = ARGBToAB64Row_RVV;
3423
+ }
3424
+ #endif
3425
+
3426
+ for (y = 0; y < height; ++y) {
3427
+ ARGBToAB64Row(src_argb, dst_ab64, width);
3428
+ src_argb += src_stride_argb;
3429
+ dst_ab64 += dst_stride_ab64;
3430
+ }
3431
+ return 0;
3432
+ }
3433
+
3434
+ // Enabled if 1 pass is available
3435
+ #if defined(HAS_RAWTOYJROW_NEON) || defined(HAS_RAWTOYJROW_RVV)
3436
+ #define HAS_RAWTOYJROW
3437
+ #endif
3438
+
3439
+ // RAW to JNV21 full range NV21
3440
+ LIBYUV_API
3441
+ int RAWToJNV21(const uint8_t* src_raw,
3442
+ int src_stride_raw,
3443
+ uint8_t* dst_y,
3444
+ int dst_stride_y,
3445
+ uint8_t* dst_vu,
3446
+ int dst_stride_vu,
3447
+ int width,
3448
+ int height) {
3449
+ int y;
3450
+ int halfwidth = (width + 1) >> 1;
3451
+ #if defined(HAS_RAWTOYJROW)
3452
+ void (*RAWToUVJRow)(const uint8_t* src_raw, int src_stride_raw,
3453
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
3454
+ RAWToUVJRow_C;
3455
+ void (*RAWToYJRow)(const uint8_t* src_raw, uint8_t* dst_y, int width) =
3456
+ RAWToYJRow_C;
3457
+ #else
3458
+ void (*RAWToARGBRow)(const uint8_t* src_rgb, uint8_t* dst_argb, int width) =
3459
+ RAWToARGBRow_C;
3460
+ void (*ARGBToUVJRow)(const uint8_t* src_argb0, int src_stride_argb,
3461
+ uint8_t* dst_uj, uint8_t* dst_vj, int width) =
3462
+ ARGBToUVJRow_C;
3463
+ void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
3464
+ ARGBToYJRow_C;
3465
+ #endif
3466
+ void (*MergeUVRow_)(const uint8_t* src_uj, const uint8_t* src_vj,
3467
+ uint8_t* dst_vu, int width) = MergeUVRow_C;
3468
+ if (!src_raw || !dst_y || !dst_vu || width <= 0 || height == 0) {
3469
+ return -1;
3470
+ }
3471
+ // Negative height means invert the image.
3472
+ if (height < 0) {
3473
+ height = -height;
3474
+ src_raw = src_raw + (height - 1) * src_stride_raw;
3475
+ src_stride_raw = -src_stride_raw;
3476
+ }
3477
+
3478
+ #if defined(HAS_RAWTOYJROW)
3479
+
3480
+ // Neon version does direct RAW to YUV.
3481
+ #if defined(HAS_RAWTOYJROW_NEON) && defined(HAS_RAWTOUVJROW_NEON)
3482
+ if (TestCpuFlag(kCpuHasNEON)) {
3483
+ RAWToUVJRow = RAWToUVJRow_Any_NEON;
3484
+ RAWToYJRow = RAWToYJRow_Any_NEON;
3485
+ if (IS_ALIGNED(width, 16)) {
3486
+ RAWToYJRow = RAWToYJRow_NEON;
3487
+ RAWToUVJRow = RAWToUVJRow_NEON;
3488
+ }
3489
+ }
3490
+ #endif
3491
+ #if defined(HAS_RAWTOYJROW_LSX)
3492
+ if (TestCpuFlag(kCpuHasLSX)) {
3493
+ RAWToYJRow = RAWToYJRow_Any_LSX;
3494
+ if (IS_ALIGNED(width, 16)) {
3495
+ RAWToYJRow = RAWToYJRow_LSX;
3496
+ }
3497
+ }
3498
+ #endif
3499
+ #if defined(HAS_RAWTOYJROW_LASX)
3500
+ if (TestCpuFlag(kCpuHasLASX)) {
3501
+ RAWToYJRow = RAWToYJRow_Any_LASX;
3502
+ if (IS_ALIGNED(width, 32)) {
3503
+ RAWToYJRow = RAWToYJRow_LASX;
3504
+ }
3505
+ }
3506
+ #endif
3507
+ #if defined(HAS_RAWTOYJROW_RVV)
3508
+ if (TestCpuFlag(kCpuHasRVV)) {
3509
+ RAWToYJRow = RAWToYJRow_RVV;
3510
+ }
3511
+ #endif
3512
+
3513
+ // Other platforms do intermediate conversion from RAW to ARGB.
3514
+ #else // HAS_RAWTOYJROW
3515
+
3516
+ #if defined(HAS_RAWTOARGBROW_SSSE3)
3517
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3518
+ RAWToARGBRow = RAWToARGBRow_Any_SSSE3;
3519
+ if (IS_ALIGNED(width, 16)) {
3520
+ RAWToARGBRow = RAWToARGBRow_SSSE3;
3521
+ }
3522
+ }
3523
+ #endif
3524
+ #if defined(HAS_RAWTOARGBROW_AVX2)
3525
+ if (TestCpuFlag(kCpuHasAVX2)) {
3526
+ RAWToARGBRow = RAWToARGBRow_Any_AVX2;
3527
+ if (IS_ALIGNED(width, 32)) {
3528
+ RAWToARGBRow = RAWToARGBRow_AVX2;
3529
+ }
3530
+ }
3531
+ #endif
3532
+ #if defined(HAS_ARGBTOYJROW_SSSE3)
3533
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3534
+ ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
3535
+ if (IS_ALIGNED(width, 16)) {
3536
+ ARGBToYJRow = ARGBToYJRow_SSSE3;
3537
+ }
3538
+ }
3539
+ #endif
3540
+ #if defined(HAS_ARGBTOYJROW_AVX2)
3541
+ if (TestCpuFlag(kCpuHasAVX2)) {
3542
+ ARGBToYJRow = ARGBToYJRow_Any_AVX2;
3543
+ if (IS_ALIGNED(width, 32)) {
3544
+ ARGBToYJRow = ARGBToYJRow_AVX2;
3545
+ }
3546
+ }
3547
+ #endif
3548
+ #if defined(HAS_ARGBTOUVJROW_SSSE3)
3549
+ if (TestCpuFlag(kCpuHasSSSE3)) {
3550
+ ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
3551
+ if (IS_ALIGNED(width, 16)) {
3552
+ ARGBToUVJRow = ARGBToUVJRow_SSSE3;
3553
+ }
3554
+ }
3555
+ #endif
3556
+ #if defined(HAS_ARGBTOUVJROW_AVX2)
3557
+ if (TestCpuFlag(kCpuHasAVX2)) {
3558
+ ARGBToUVJRow = ARGBToUVJRow_Any_AVX2;
3559
+ if (IS_ALIGNED(width, 32)) {
3560
+ ARGBToUVJRow = ARGBToUVJRow_AVX2;
3561
+ }
3562
+ }
3563
+ #endif
3564
+ #endif // HAS_RAWTOYJROW
3565
+ #if defined(HAS_MERGEUVROW_SSE2)
3566
+ if (TestCpuFlag(kCpuHasSSE2)) {
3567
+ MergeUVRow_ = MergeUVRow_Any_SSE2;
3568
+ if (IS_ALIGNED(halfwidth, 16)) {
3569
+ MergeUVRow_ = MergeUVRow_SSE2;
3570
+ }
3571
+ }
3572
+ #endif
3573
+ #if defined(HAS_MERGEUVROW_AVX2)
3574
+ if (TestCpuFlag(kCpuHasAVX2)) {
3575
+ MergeUVRow_ = MergeUVRow_Any_AVX2;
3576
+ if (IS_ALIGNED(halfwidth, 16)) {
3577
+ MergeUVRow_ = MergeUVRow_AVX2;
3578
+ }
3579
+ }
3580
+ #endif
3581
+ #if defined(HAS_MERGEUVROW_AVX512BW)
3582
+ if (TestCpuFlag(kCpuHasAVX512BW)) {
3583
+ MergeUVRow_ = MergeUVRow_Any_AVX512BW;
3584
+ if (IS_ALIGNED(halfwidth, 64)) {
3585
+ MergeUVRow_ = MergeUVRow_AVX512BW;
3586
+ }
3587
+ }
3588
+ #endif
3589
+ #if defined(HAS_MERGEUVROW_NEON)
3590
+ if (TestCpuFlag(kCpuHasNEON)) {
3591
+ MergeUVRow_ = MergeUVRow_Any_NEON;
3592
+ if (IS_ALIGNED(halfwidth, 16)) {
3593
+ MergeUVRow_ = MergeUVRow_NEON;
3594
+ }
3595
+ }
3596
+ #endif
3597
+ #if defined(HAS_MERGEUVROW_SME)
3598
+ if (TestCpuFlag(kCpuHasSME)) {
3599
+ MergeUVRow_ = MergeUVRow_SME;
3600
+ }
3601
+ #endif
3602
+ #if defined(HAS_MERGEUVROW_LSX)
3603
+ if (TestCpuFlag(kCpuHasLSX)) {
3604
+ MergeUVRow_ = MergeUVRow_Any_LSX;
3605
+ if (IS_ALIGNED(halfwidth, 16)) {
3606
+ MergeUVRow_ = MergeUVRow_LSX;
3607
+ }
3608
+ }
3609
+ #endif
3610
+ #if defined(HAS_MERGEUVROW_RVV)
3611
+ if (TestCpuFlag(kCpuHasRVV)) {
3612
+ MergeUVRow_ = MergeUVRow_RVV;
3613
+ }
3614
+ #endif
3615
+ {
3616
+ #if defined(HAS_RAWTOYJROW)
3617
+ // Allocate a row of uv.
3618
+ const int row_uv_size = ((halfwidth + 31) & ~31);
3619
+ align_buffer_64(row_uj, row_uv_size * 2);
3620
+ uint8_t* row_vj = row_uj + row_uv_size;
3621
+ #else
3622
+ // Allocate row of uv and 2 rows of ARGB.
3623
+ const int row_size = ((width * 4 + 31) & ~31);
3624
+ const int row_uv_size = ((halfwidth + 31) & ~31);
3625
+ align_buffer_64(row_uj, row_uv_size * 2 + row_size * 2);
3626
+ uint8_t* row_vj = row_uj + row_uv_size;
3627
+ uint8_t* row = row_vj + row_uv_size;
3628
+ #endif
3629
+ if (!row_uj)
3630
+ return 1;
3631
+
3632
+ for (y = 0; y < height - 1; y += 2) {
3633
+ #if defined(HAS_RAWTOYJROW)
3634
+ RAWToUVJRow(src_raw, src_stride_raw, row_uj, row_vj, width);
3635
+ MergeUVRow_(row_vj, row_uj, dst_vu, halfwidth);
3636
+ RAWToYJRow(src_raw, dst_y, width);
3637
+ RAWToYJRow(src_raw + src_stride_raw, dst_y + dst_stride_y, width);
3638
+ #else
3639
+ RAWToARGBRow(src_raw, row, width);
3640
+ RAWToARGBRow(src_raw + src_stride_raw, row + row_size, width);
3641
+ ARGBToUVJRow(row, row_size, row_uj, row_vj, width);
3642
+ MergeUVRow_(row_vj, row_uj, dst_vu, halfwidth);
3643
+ ARGBToYJRow(row, dst_y, width);
3644
+ ARGBToYJRow(row + row_size, dst_y + dst_stride_y, width);
3645
+ #endif
3646
+ src_raw += src_stride_raw * 2;
3647
+ dst_y += dst_stride_y * 2;
3648
+ dst_vu += dst_stride_vu;
3649
+ }
3650
+ if (height & 1) {
3651
+ #if defined(HAS_RAWTOYJROW)
3652
+ RAWToUVJRow(src_raw, 0, row_uj, row_vj, width);
3653
+ MergeUVRow_(row_vj, row_uj, dst_vu, halfwidth);
3654
+ RAWToYJRow(src_raw, dst_y, width);
3655
+ #else
3656
+ RAWToARGBRow(src_raw, row, width);
3657
+ ARGBToUVJRow(row, 0, row_uj, row_vj, width);
3658
+ MergeUVRow_(row_vj, row_uj, dst_vu, halfwidth);
3659
+ ARGBToYJRow(row, dst_y, width);
3660
+ #endif
3661
+ }
3662
+ free_aligned_buffer_64(row_uj);
3663
+ }
3664
+ return 0;
3665
+ }
3666
+ #undef HAS_RAWTOYJROW
3667
+
3668
+ #ifdef __cplusplus
3669
+ } // extern "C"
3670
+ } // namespace libyuv
3671
+ #endif