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,2710 @@
1
+ /*
2
+ * Copyright 2011 The LibYuv Project Authors. All rights reserved.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license
5
+ * that can be found in the LICENSE file in the root of the source
6
+ * tree. An additional intellectual property rights grant can be found
7
+ * in the file PATENTS. All contributing project authors may
8
+ * be found in the AUTHORS file in the root of the source tree.
9
+ */
10
+
11
+ #include "libyuv/scale.h"
12
+
13
+ #include <assert.h>
14
+ #include <string.h>
15
+
16
+ #include "libyuv/cpu_id.h"
17
+ #include "libyuv/planar_functions.h" // For CopyPlane
18
+ #include "libyuv/row.h"
19
+ #include "libyuv/scale_row.h"
20
+ #include "libyuv/scale_uv.h" // For UVScale
21
+
22
+ #ifdef __cplusplus
23
+ namespace libyuv {
24
+ extern "C" {
25
+ #endif
26
+
27
+ static __inline int Abs(int v) {
28
+ return v >= 0 ? v : -v;
29
+ }
30
+
31
+ #define SUBSAMPLE(v, a, s) (v < 0) ? (-((-v + a) >> s)) : ((v + a) >> s)
32
+ #define CENTERSTART(dx, s) (dx < 0) ? -((-dx >> 1) + s) : ((dx >> 1) + s)
33
+
34
+ // Scale plane, 1/2
35
+ // This is an optimized version for scaling down a plane to 1/2 of
36
+ // its original size.
37
+
38
+ static void ScalePlaneDown2(int src_width,
39
+ int src_height,
40
+ int dst_width,
41
+ int dst_height,
42
+ int src_stride,
43
+ int dst_stride,
44
+ const uint8_t* src_ptr,
45
+ uint8_t* dst_ptr,
46
+ enum FilterMode filtering) {
47
+ int y;
48
+ void (*ScaleRowDown2)(const uint8_t* src_ptr, ptrdiff_t src_stride,
49
+ uint8_t* dst_ptr, int dst_width) =
50
+ filtering == kFilterNone
51
+ ? ScaleRowDown2_C
52
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_C
53
+ : ScaleRowDown2Box_C);
54
+ int row_stride = src_stride * 2;
55
+ (void)src_width;
56
+ (void)src_height;
57
+ if (!filtering) {
58
+ src_ptr += src_stride; // Point to odd rows.
59
+ src_stride = 0;
60
+ }
61
+
62
+ #if defined(HAS_SCALEROWDOWN2_NEON)
63
+ if (TestCpuFlag(kCpuHasNEON)) {
64
+ ScaleRowDown2 =
65
+ filtering == kFilterNone
66
+ ? ScaleRowDown2_Any_NEON
67
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_NEON
68
+ : ScaleRowDown2Box_Any_NEON);
69
+ if (IS_ALIGNED(dst_width, 16)) {
70
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_NEON
71
+ : (filtering == kFilterLinear
72
+ ? ScaleRowDown2Linear_NEON
73
+ : ScaleRowDown2Box_NEON);
74
+ }
75
+ }
76
+ #endif
77
+ #if defined(HAS_SCALEROWDOWN2_SME)
78
+ if (TestCpuFlag(kCpuHasSME)) {
79
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_SME
80
+ : filtering == kFilterLinear ? ScaleRowDown2Linear_SME
81
+ : ScaleRowDown2Box_SME;
82
+ }
83
+ #endif
84
+ #if defined(HAS_SCALEROWDOWN2_SSSE3)
85
+ if (TestCpuFlag(kCpuHasSSSE3)) {
86
+ ScaleRowDown2 =
87
+ filtering == kFilterNone
88
+ ? ScaleRowDown2_Any_SSSE3
89
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_SSSE3
90
+ : ScaleRowDown2Box_Any_SSSE3);
91
+ if (IS_ALIGNED(dst_width, 16)) {
92
+ ScaleRowDown2 =
93
+ filtering == kFilterNone
94
+ ? ScaleRowDown2_SSSE3
95
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_SSSE3
96
+ : ScaleRowDown2Box_SSSE3);
97
+ }
98
+ }
99
+ #endif
100
+ #if defined(HAS_SCALEROWDOWN2_AVX2)
101
+ if (TestCpuFlag(kCpuHasAVX2)) {
102
+ ScaleRowDown2 =
103
+ filtering == kFilterNone
104
+ ? ScaleRowDown2_Any_AVX2
105
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_AVX2
106
+ : ScaleRowDown2Box_Any_AVX2);
107
+ if (IS_ALIGNED(dst_width, 32)) {
108
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_AVX2
109
+ : (filtering == kFilterLinear
110
+ ? ScaleRowDown2Linear_AVX2
111
+ : ScaleRowDown2Box_AVX2);
112
+ }
113
+ }
114
+ #endif
115
+ #if defined(HAS_SCALEROWDOWN2_LSX)
116
+ if (TestCpuFlag(kCpuHasLSX)) {
117
+ ScaleRowDown2 =
118
+ filtering == kFilterNone
119
+ ? ScaleRowDown2_Any_LSX
120
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_LSX
121
+ : ScaleRowDown2Box_Any_LSX);
122
+ if (IS_ALIGNED(dst_width, 32)) {
123
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_LSX
124
+ : (filtering == kFilterLinear
125
+ ? ScaleRowDown2Linear_LSX
126
+ : ScaleRowDown2Box_LSX);
127
+ }
128
+ }
129
+ #endif
130
+ #if defined(HAS_SCALEROWDOWN2_RVV)
131
+ if (TestCpuFlag(kCpuHasRVV)) {
132
+ ScaleRowDown2 = filtering == kFilterNone
133
+ ? ScaleRowDown2_RVV
134
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_RVV
135
+ : ScaleRowDown2Box_RVV);
136
+ }
137
+ #endif
138
+
139
+ if (filtering == kFilterLinear) {
140
+ src_stride = 0;
141
+ }
142
+ // TODO(fbarchard): Loop through source height to allow odd height.
143
+ for (y = 0; y < dst_height; ++y) {
144
+ ScaleRowDown2(src_ptr, src_stride, dst_ptr, dst_width);
145
+ src_ptr += row_stride;
146
+ dst_ptr += dst_stride;
147
+ }
148
+ }
149
+
150
+ static void ScalePlaneDown2_16(int src_width,
151
+ int src_height,
152
+ int dst_width,
153
+ int dst_height,
154
+ int src_stride,
155
+ int dst_stride,
156
+ const uint16_t* src_ptr,
157
+ uint16_t* dst_ptr,
158
+ enum FilterMode filtering) {
159
+ int y;
160
+ void (*ScaleRowDown2)(const uint16_t* src_ptr, ptrdiff_t src_stride,
161
+ uint16_t* dst_ptr, int dst_width) =
162
+ filtering == kFilterNone
163
+ ? ScaleRowDown2_16_C
164
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_16_C
165
+ : ScaleRowDown2Box_16_C);
166
+ int row_stride = src_stride * 2;
167
+ (void)src_width;
168
+ (void)src_height;
169
+ if (!filtering) {
170
+ src_ptr += src_stride; // Point to odd rows.
171
+ src_stride = 0;
172
+ }
173
+
174
+ #if defined(HAS_SCALEROWDOWN2_16_NEON)
175
+ if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(dst_width, 16)) {
176
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_16_NEON
177
+ : filtering == kFilterLinear ? ScaleRowDown2Linear_16_NEON
178
+ : ScaleRowDown2Box_16_NEON;
179
+ }
180
+ #endif
181
+ #if defined(HAS_SCALEROWDOWN2_16_SME)
182
+ if (TestCpuFlag(kCpuHasSME)) {
183
+ ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_16_SME
184
+ : filtering == kFilterLinear ? ScaleRowDown2Linear_16_SME
185
+ : ScaleRowDown2Box_16_SME;
186
+ }
187
+ #endif
188
+ #if defined(HAS_SCALEROWDOWN2_16_SSE2)
189
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 16)) {
190
+ ScaleRowDown2 =
191
+ filtering == kFilterNone
192
+ ? ScaleRowDown2_16_SSE2
193
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_16_SSE2
194
+ : ScaleRowDown2Box_16_SSE2);
195
+ }
196
+ #endif
197
+
198
+ if (filtering == kFilterLinear) {
199
+ src_stride = 0;
200
+ }
201
+ // TODO(fbarchard): Loop through source height to allow odd height.
202
+ for (y = 0; y < dst_height; ++y) {
203
+ ScaleRowDown2(src_ptr, src_stride, dst_ptr, dst_width);
204
+ src_ptr += row_stride;
205
+ dst_ptr += dst_stride;
206
+ }
207
+ }
208
+
209
+ void ScalePlaneDown2_16To8(int src_width,
210
+ int src_height,
211
+ int dst_width,
212
+ int dst_height,
213
+ int src_stride,
214
+ int dst_stride,
215
+ const uint16_t* src_ptr,
216
+ uint8_t* dst_ptr,
217
+ int scale,
218
+ enum FilterMode filtering) {
219
+ int y;
220
+ void (*ScaleRowDown2)(const uint16_t* src_ptr, ptrdiff_t src_stride,
221
+ uint8_t* dst_ptr, int dst_width, int scale) =
222
+ (src_width & 1)
223
+ ? (filtering == kFilterNone
224
+ ? ScaleRowDown2_16To8_Odd_C
225
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_16To8_Odd_C
226
+ : ScaleRowDown2Box_16To8_Odd_C))
227
+ : (filtering == kFilterNone
228
+ ? ScaleRowDown2_16To8_C
229
+ : (filtering == kFilterLinear ? ScaleRowDown2Linear_16To8_C
230
+ : ScaleRowDown2Box_16To8_C));
231
+ int row_stride = src_stride * 2;
232
+ (void)dst_height;
233
+ if (!filtering) {
234
+ src_ptr += src_stride; // Point to odd rows.
235
+ src_stride = 0;
236
+ }
237
+
238
+ if (filtering == kFilterLinear) {
239
+ src_stride = 0;
240
+ }
241
+ for (y = 0; y < src_height / 2; ++y) {
242
+ ScaleRowDown2(src_ptr, src_stride, dst_ptr, dst_width, scale);
243
+ src_ptr += row_stride;
244
+ dst_ptr += dst_stride;
245
+ }
246
+ if (src_height & 1) {
247
+ if (!filtering) {
248
+ src_ptr -= src_stride; // Point to last row.
249
+ }
250
+ ScaleRowDown2(src_ptr, 0, dst_ptr, dst_width, scale);
251
+ }
252
+ }
253
+
254
+ // Scale plane, 1/4
255
+ // This is an optimized version for scaling down a plane to 1/4 of
256
+ // its original size.
257
+
258
+ static void ScalePlaneDown4(int src_width,
259
+ int src_height,
260
+ int dst_width,
261
+ int dst_height,
262
+ int src_stride,
263
+ int dst_stride,
264
+ const uint8_t* src_ptr,
265
+ uint8_t* dst_ptr,
266
+ enum FilterMode filtering) {
267
+ int y;
268
+ void (*ScaleRowDown4)(const uint8_t* src_ptr, ptrdiff_t src_stride,
269
+ uint8_t* dst_ptr, int dst_width) =
270
+ filtering ? ScaleRowDown4Box_C : ScaleRowDown4_C;
271
+ int row_stride = src_stride * 4;
272
+ (void)src_width;
273
+ (void)src_height;
274
+ if (!filtering) {
275
+ src_ptr += src_stride * 2; // Point to row 2.
276
+ src_stride = 0;
277
+ }
278
+ #if defined(HAS_SCALEROWDOWN4_NEON)
279
+ if (TestCpuFlag(kCpuHasNEON)) {
280
+ ScaleRowDown4 =
281
+ filtering ? ScaleRowDown4Box_Any_NEON : ScaleRowDown4_Any_NEON;
282
+ if (IS_ALIGNED(dst_width, 16)) {
283
+ ScaleRowDown4 = filtering ? ScaleRowDown4Box_NEON : ScaleRowDown4_NEON;
284
+ }
285
+ }
286
+ #endif
287
+ #if defined(HAS_SCALEROWDOWN4_SSSE3)
288
+ if (TestCpuFlag(kCpuHasSSSE3)) {
289
+ ScaleRowDown4 =
290
+ filtering ? ScaleRowDown4Box_Any_SSSE3 : ScaleRowDown4_Any_SSSE3;
291
+ if (IS_ALIGNED(dst_width, 8)) {
292
+ ScaleRowDown4 = filtering ? ScaleRowDown4Box_SSSE3 : ScaleRowDown4_SSSE3;
293
+ }
294
+ }
295
+ #endif
296
+ #if defined(HAS_SCALEROWDOWN4_AVX2)
297
+ if (TestCpuFlag(kCpuHasAVX2)) {
298
+ ScaleRowDown4 =
299
+ filtering ? ScaleRowDown4Box_Any_AVX2 : ScaleRowDown4_Any_AVX2;
300
+ if (IS_ALIGNED(dst_width, 16)) {
301
+ ScaleRowDown4 = filtering ? ScaleRowDown4Box_AVX2 : ScaleRowDown4_AVX2;
302
+ }
303
+ }
304
+ #endif
305
+ #if defined(HAS_SCALEROWDOWN4_LSX)
306
+ if (TestCpuFlag(kCpuHasLSX)) {
307
+ ScaleRowDown4 =
308
+ filtering ? ScaleRowDown4Box_Any_LSX : ScaleRowDown4_Any_LSX;
309
+ if (IS_ALIGNED(dst_width, 16)) {
310
+ ScaleRowDown4 = filtering ? ScaleRowDown4Box_LSX : ScaleRowDown4_LSX;
311
+ }
312
+ }
313
+ #endif
314
+ #if defined(HAS_SCALEROWDOWN4_RVV)
315
+ if (TestCpuFlag(kCpuHasRVV)) {
316
+ ScaleRowDown4 = filtering ? ScaleRowDown4Box_RVV : ScaleRowDown4_RVV;
317
+ }
318
+ #endif
319
+
320
+ if (filtering == kFilterLinear) {
321
+ src_stride = 0;
322
+ }
323
+ for (y = 0; y < dst_height; ++y) {
324
+ ScaleRowDown4(src_ptr, src_stride, dst_ptr, dst_width);
325
+ src_ptr += row_stride;
326
+ dst_ptr += dst_stride;
327
+ }
328
+ }
329
+
330
+ static void ScalePlaneDown4_16(int src_width,
331
+ int src_height,
332
+ int dst_width,
333
+ int dst_height,
334
+ int src_stride,
335
+ int dst_stride,
336
+ const uint16_t* src_ptr,
337
+ uint16_t* dst_ptr,
338
+ enum FilterMode filtering) {
339
+ int y;
340
+ void (*ScaleRowDown4)(const uint16_t* src_ptr, ptrdiff_t src_stride,
341
+ uint16_t* dst_ptr, int dst_width) =
342
+ filtering ? ScaleRowDown4Box_16_C : ScaleRowDown4_16_C;
343
+ int row_stride = src_stride * 4;
344
+ (void)src_width;
345
+ (void)src_height;
346
+ if (!filtering) {
347
+ src_ptr += src_stride * 2; // Point to row 2.
348
+ src_stride = 0;
349
+ }
350
+ #if defined(HAS_SCALEROWDOWN4_16_NEON)
351
+ if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(dst_width, 8)) {
352
+ ScaleRowDown4 =
353
+ filtering ? ScaleRowDown4Box_16_NEON : ScaleRowDown4_16_NEON;
354
+ }
355
+ #endif
356
+ #if defined(HAS_SCALEROWDOWN4_16_SSE2)
357
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 8)) {
358
+ ScaleRowDown4 =
359
+ filtering ? ScaleRowDown4Box_16_SSE2 : ScaleRowDown4_16_SSE2;
360
+ }
361
+ #endif
362
+
363
+ if (filtering == kFilterLinear) {
364
+ src_stride = 0;
365
+ }
366
+ for (y = 0; y < dst_height; ++y) {
367
+ ScaleRowDown4(src_ptr, src_stride, dst_ptr, dst_width);
368
+ src_ptr += row_stride;
369
+ dst_ptr += dst_stride;
370
+ }
371
+ }
372
+
373
+ // Scale plane down, 3/4
374
+ static void ScalePlaneDown34(int src_width,
375
+ int src_height,
376
+ int dst_width,
377
+ int dst_height,
378
+ int src_stride,
379
+ int dst_stride,
380
+ const uint8_t* src_ptr,
381
+ uint8_t* dst_ptr,
382
+ enum FilterMode filtering) {
383
+ int y;
384
+ void (*ScaleRowDown34_0)(const uint8_t* src_ptr, ptrdiff_t src_stride,
385
+ uint8_t* dst_ptr, int dst_width);
386
+ void (*ScaleRowDown34_1)(const uint8_t* src_ptr, ptrdiff_t src_stride,
387
+ uint8_t* dst_ptr, int dst_width);
388
+ const int filter_stride = (filtering == kFilterLinear) ? 0 : src_stride;
389
+ (void)src_width;
390
+ (void)src_height;
391
+ assert(dst_width % 3 == 0);
392
+ if (!filtering) {
393
+ ScaleRowDown34_0 = ScaleRowDown34_C;
394
+ ScaleRowDown34_1 = ScaleRowDown34_C;
395
+ } else {
396
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_C;
397
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_C;
398
+ }
399
+ #if defined(HAS_SCALEROWDOWN34_NEON)
400
+ if (TestCpuFlag(kCpuHasNEON)) {
401
+ #if defined(__aarch64__)
402
+ if (dst_width % 48 == 0) {
403
+ #else
404
+ if (dst_width % 24 == 0) {
405
+ #endif
406
+ if (!filtering) {
407
+ ScaleRowDown34_0 = ScaleRowDown34_NEON;
408
+ ScaleRowDown34_1 = ScaleRowDown34_NEON;
409
+ } else {
410
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_NEON;
411
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_NEON;
412
+ }
413
+ } else {
414
+ if (!filtering) {
415
+ ScaleRowDown34_0 = ScaleRowDown34_Any_NEON;
416
+ ScaleRowDown34_1 = ScaleRowDown34_Any_NEON;
417
+ } else {
418
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_Any_NEON;
419
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_Any_NEON;
420
+ }
421
+ }
422
+ }
423
+ #endif
424
+ #if defined(HAS_SCALEROWDOWN34_LSX)
425
+ if (TestCpuFlag(kCpuHasLSX)) {
426
+ if (dst_width % 48 == 0) {
427
+ if (!filtering) {
428
+ ScaleRowDown34_0 = ScaleRowDown34_LSX;
429
+ ScaleRowDown34_1 = ScaleRowDown34_LSX;
430
+ } else {
431
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_LSX;
432
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_LSX;
433
+ }
434
+ } else {
435
+ if (!filtering) {
436
+ ScaleRowDown34_0 = ScaleRowDown34_Any_LSX;
437
+ ScaleRowDown34_1 = ScaleRowDown34_Any_LSX;
438
+ } else {
439
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_Any_LSX;
440
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_Any_LSX;
441
+ }
442
+ }
443
+ }
444
+ #endif
445
+ #if defined(HAS_SCALEROWDOWN34_SSSE3)
446
+ if (TestCpuFlag(kCpuHasSSSE3)) {
447
+ if (dst_width % 24 == 0) {
448
+ if (!filtering) {
449
+ ScaleRowDown34_0 = ScaleRowDown34_SSSE3;
450
+ ScaleRowDown34_1 = ScaleRowDown34_SSSE3;
451
+ } else {
452
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_SSSE3;
453
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_SSSE3;
454
+ }
455
+ } else {
456
+ if (!filtering) {
457
+ ScaleRowDown34_0 = ScaleRowDown34_Any_SSSE3;
458
+ ScaleRowDown34_1 = ScaleRowDown34_Any_SSSE3;
459
+ } else {
460
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_Any_SSSE3;
461
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_Any_SSSE3;
462
+ }
463
+ }
464
+ }
465
+ #endif
466
+ #if defined(HAS_SCALEROWDOWN34_RVV)
467
+ if (TestCpuFlag(kCpuHasRVV)) {
468
+ if (!filtering) {
469
+ ScaleRowDown34_0 = ScaleRowDown34_RVV;
470
+ ScaleRowDown34_1 = ScaleRowDown34_RVV;
471
+ } else {
472
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_RVV;
473
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_RVV;
474
+ }
475
+ }
476
+ #endif
477
+
478
+ for (y = 0; y < dst_height - 2; y += 3) {
479
+ ScaleRowDown34_0(src_ptr, filter_stride, dst_ptr, dst_width);
480
+ src_ptr += src_stride;
481
+ dst_ptr += dst_stride;
482
+ ScaleRowDown34_1(src_ptr, filter_stride, dst_ptr, dst_width);
483
+ src_ptr += src_stride;
484
+ dst_ptr += dst_stride;
485
+ ScaleRowDown34_0(src_ptr + src_stride, -filter_stride, dst_ptr, dst_width);
486
+ src_ptr += src_stride * 2;
487
+ dst_ptr += dst_stride;
488
+ }
489
+
490
+ // Remainder 1 or 2 rows with last row vertically unfiltered
491
+ if ((dst_height % 3) == 2) {
492
+ ScaleRowDown34_0(src_ptr, filter_stride, dst_ptr, dst_width);
493
+ src_ptr += src_stride;
494
+ dst_ptr += dst_stride;
495
+ ScaleRowDown34_1(src_ptr, 0, dst_ptr, dst_width);
496
+ } else if ((dst_height % 3) == 1) {
497
+ ScaleRowDown34_0(src_ptr, 0, dst_ptr, dst_width);
498
+ }
499
+ }
500
+
501
+ static void ScalePlaneDown34_16(int src_width,
502
+ int src_height,
503
+ int dst_width,
504
+ int dst_height,
505
+ int src_stride,
506
+ int dst_stride,
507
+ const uint16_t* src_ptr,
508
+ uint16_t* dst_ptr,
509
+ enum FilterMode filtering) {
510
+ int y;
511
+ void (*ScaleRowDown34_0)(const uint16_t* src_ptr, ptrdiff_t src_stride,
512
+ uint16_t* dst_ptr, int dst_width);
513
+ void (*ScaleRowDown34_1)(const uint16_t* src_ptr, ptrdiff_t src_stride,
514
+ uint16_t* dst_ptr, int dst_width);
515
+ const int filter_stride = (filtering == kFilterLinear) ? 0 : src_stride;
516
+ (void)src_width;
517
+ (void)src_height;
518
+ assert(dst_width % 3 == 0);
519
+ if (!filtering) {
520
+ ScaleRowDown34_0 = ScaleRowDown34_16_C;
521
+ ScaleRowDown34_1 = ScaleRowDown34_16_C;
522
+ } else {
523
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_16_C;
524
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_16_C;
525
+ }
526
+ #if defined(HAS_SCALEROWDOWN34_16_NEON)
527
+ if (TestCpuFlag(kCpuHasNEON) && (dst_width % 24 == 0)) {
528
+ if (!filtering) {
529
+ ScaleRowDown34_0 = ScaleRowDown34_16_NEON;
530
+ ScaleRowDown34_1 = ScaleRowDown34_16_NEON;
531
+ } else {
532
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_16_NEON;
533
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_16_NEON;
534
+ }
535
+ }
536
+ #endif
537
+ #if defined(HAS_SCALEROWDOWN34_16_SSSE3)
538
+ if (TestCpuFlag(kCpuHasSSSE3) && (dst_width % 24 == 0)) {
539
+ if (!filtering) {
540
+ ScaleRowDown34_0 = ScaleRowDown34_16_SSSE3;
541
+ ScaleRowDown34_1 = ScaleRowDown34_16_SSSE3;
542
+ } else {
543
+ ScaleRowDown34_0 = ScaleRowDown34_0_Box_16_SSSE3;
544
+ ScaleRowDown34_1 = ScaleRowDown34_1_Box_16_SSSE3;
545
+ }
546
+ }
547
+ #endif
548
+
549
+ for (y = 0; y < dst_height - 2; y += 3) {
550
+ ScaleRowDown34_0(src_ptr, filter_stride, dst_ptr, dst_width);
551
+ src_ptr += src_stride;
552
+ dst_ptr += dst_stride;
553
+ ScaleRowDown34_1(src_ptr, filter_stride, dst_ptr, dst_width);
554
+ src_ptr += src_stride;
555
+ dst_ptr += dst_stride;
556
+ ScaleRowDown34_0(src_ptr + src_stride, -filter_stride, dst_ptr, dst_width);
557
+ src_ptr += src_stride * 2;
558
+ dst_ptr += dst_stride;
559
+ }
560
+
561
+ // Remainder 1 or 2 rows with last row vertically unfiltered
562
+ if ((dst_height % 3) == 2) {
563
+ ScaleRowDown34_0(src_ptr, filter_stride, dst_ptr, dst_width);
564
+ src_ptr += src_stride;
565
+ dst_ptr += dst_stride;
566
+ ScaleRowDown34_1(src_ptr, 0, dst_ptr, dst_width);
567
+ } else if ((dst_height % 3) == 1) {
568
+ ScaleRowDown34_0(src_ptr, 0, dst_ptr, dst_width);
569
+ }
570
+ }
571
+
572
+ // Scale plane, 3/8
573
+ // This is an optimized version for scaling down a plane to 3/8
574
+ // of its original size.
575
+ //
576
+ // Uses box filter arranges like this
577
+ // aaabbbcc -> abc
578
+ // aaabbbcc def
579
+ // aaabbbcc ghi
580
+ // dddeeeff
581
+ // dddeeeff
582
+ // dddeeeff
583
+ // ggghhhii
584
+ // ggghhhii
585
+ // Boxes are 3x3, 2x3, 3x2 and 2x2
586
+
587
+ static void ScalePlaneDown38(int src_width,
588
+ int src_height,
589
+ int dst_width,
590
+ int dst_height,
591
+ int src_stride,
592
+ int dst_stride,
593
+ const uint8_t* src_ptr,
594
+ uint8_t* dst_ptr,
595
+ enum FilterMode filtering) {
596
+ int y;
597
+ void (*ScaleRowDown38_3)(const uint8_t* src_ptr, ptrdiff_t src_stride,
598
+ uint8_t* dst_ptr, int dst_width);
599
+ void (*ScaleRowDown38_2)(const uint8_t* src_ptr, ptrdiff_t src_stride,
600
+ uint8_t* dst_ptr, int dst_width);
601
+ const int filter_stride = (filtering == kFilterLinear) ? 0 : src_stride;
602
+ assert(dst_width % 3 == 0);
603
+ (void)src_width;
604
+ (void)src_height;
605
+ if (!filtering) {
606
+ ScaleRowDown38_3 = ScaleRowDown38_C;
607
+ ScaleRowDown38_2 = ScaleRowDown38_C;
608
+ } else {
609
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_C;
610
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_C;
611
+ }
612
+
613
+ #if defined(HAS_SCALEROWDOWN38_NEON)
614
+ if (TestCpuFlag(kCpuHasNEON)) {
615
+ if (!filtering) {
616
+ ScaleRowDown38_3 = ScaleRowDown38_Any_NEON;
617
+ ScaleRowDown38_2 = ScaleRowDown38_Any_NEON;
618
+ } else {
619
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_Any_NEON;
620
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_Any_NEON;
621
+ }
622
+ if (dst_width % 12 == 0) {
623
+ if (!filtering) {
624
+ ScaleRowDown38_3 = ScaleRowDown38_NEON;
625
+ ScaleRowDown38_2 = ScaleRowDown38_NEON;
626
+ } else {
627
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_NEON;
628
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_NEON;
629
+ }
630
+ }
631
+ }
632
+ #endif
633
+ #if defined(HAS_SCALEROWDOWN38_SSSE3)
634
+ if (TestCpuFlag(kCpuHasSSSE3)) {
635
+ if (!filtering) {
636
+ ScaleRowDown38_3 = ScaleRowDown38_Any_SSSE3;
637
+ ScaleRowDown38_2 = ScaleRowDown38_Any_SSSE3;
638
+ } else {
639
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_Any_SSSE3;
640
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_Any_SSSE3;
641
+ }
642
+ if (dst_width % 12 == 0 && !filtering) {
643
+ ScaleRowDown38_3 = ScaleRowDown38_SSSE3;
644
+ ScaleRowDown38_2 = ScaleRowDown38_SSSE3;
645
+ }
646
+ if (dst_width % 6 == 0 && filtering) {
647
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_SSSE3;
648
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_SSSE3;
649
+ }
650
+ }
651
+ #endif
652
+ #if defined(HAS_SCALEROWDOWN38_LSX)
653
+ if (TestCpuFlag(kCpuHasLSX)) {
654
+ if (!filtering) {
655
+ ScaleRowDown38_3 = ScaleRowDown38_Any_LSX;
656
+ ScaleRowDown38_2 = ScaleRowDown38_Any_LSX;
657
+ } else {
658
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_Any_LSX;
659
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_Any_LSX;
660
+ }
661
+ if (dst_width % 12 == 0) {
662
+ if (!filtering) {
663
+ ScaleRowDown38_3 = ScaleRowDown38_LSX;
664
+ ScaleRowDown38_2 = ScaleRowDown38_LSX;
665
+ } else {
666
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_LSX;
667
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_LSX;
668
+ }
669
+ }
670
+ }
671
+ #endif
672
+ #if defined(HAS_SCALEROWDOWN38_RVV)
673
+ if (TestCpuFlag(kCpuHasRVV)) {
674
+ if (!filtering) {
675
+ ScaleRowDown38_3 = ScaleRowDown38_RVV;
676
+ ScaleRowDown38_2 = ScaleRowDown38_RVV;
677
+ } else {
678
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_RVV;
679
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_RVV;
680
+ }
681
+ }
682
+ #endif
683
+
684
+ for (y = 0; y < dst_height - 2; y += 3) {
685
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
686
+ src_ptr += src_stride * 3;
687
+ dst_ptr += dst_stride;
688
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
689
+ src_ptr += src_stride * 3;
690
+ dst_ptr += dst_stride;
691
+ ScaleRowDown38_2(src_ptr, filter_stride, dst_ptr, dst_width);
692
+ src_ptr += src_stride * 2;
693
+ dst_ptr += dst_stride;
694
+ }
695
+
696
+ // Remainder 1 or 2 rows with last row vertically unfiltered
697
+ if ((dst_height % 3) == 2) {
698
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
699
+ src_ptr += src_stride * 3;
700
+ dst_ptr += dst_stride;
701
+ ScaleRowDown38_3(src_ptr, 0, dst_ptr, dst_width);
702
+ } else if ((dst_height % 3) == 1) {
703
+ ScaleRowDown38_3(src_ptr, 0, dst_ptr, dst_width);
704
+ }
705
+ }
706
+
707
+ static void ScalePlaneDown38_16(int src_width,
708
+ int src_height,
709
+ int dst_width,
710
+ int dst_height,
711
+ int src_stride,
712
+ int dst_stride,
713
+ const uint16_t* src_ptr,
714
+ uint16_t* dst_ptr,
715
+ enum FilterMode filtering) {
716
+ int y;
717
+ void (*ScaleRowDown38_3)(const uint16_t* src_ptr, ptrdiff_t src_stride,
718
+ uint16_t* dst_ptr, int dst_width);
719
+ void (*ScaleRowDown38_2)(const uint16_t* src_ptr, ptrdiff_t src_stride,
720
+ uint16_t* dst_ptr, int dst_width);
721
+ const int filter_stride = (filtering == kFilterLinear) ? 0 : src_stride;
722
+ (void)src_width;
723
+ (void)src_height;
724
+ assert(dst_width % 3 == 0);
725
+ if (!filtering) {
726
+ ScaleRowDown38_3 = ScaleRowDown38_16_C;
727
+ ScaleRowDown38_2 = ScaleRowDown38_16_C;
728
+ } else {
729
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_16_C;
730
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_16_C;
731
+ }
732
+ #if defined(HAS_SCALEROWDOWN38_16_NEON)
733
+ if (TestCpuFlag(kCpuHasNEON) && (dst_width % 12 == 0)) {
734
+ if (!filtering) {
735
+ ScaleRowDown38_3 = ScaleRowDown38_16_NEON;
736
+ ScaleRowDown38_2 = ScaleRowDown38_16_NEON;
737
+ } else {
738
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_16_NEON;
739
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_16_NEON;
740
+ }
741
+ }
742
+ #endif
743
+ #if defined(HAS_SCALEROWDOWN38_16_SSSE3)
744
+ if (TestCpuFlag(kCpuHasSSSE3) && (dst_width % 24 == 0)) {
745
+ if (!filtering) {
746
+ ScaleRowDown38_3 = ScaleRowDown38_16_SSSE3;
747
+ ScaleRowDown38_2 = ScaleRowDown38_16_SSSE3;
748
+ } else {
749
+ ScaleRowDown38_3 = ScaleRowDown38_3_Box_16_SSSE3;
750
+ ScaleRowDown38_2 = ScaleRowDown38_2_Box_16_SSSE3;
751
+ }
752
+ }
753
+ #endif
754
+
755
+ for (y = 0; y < dst_height - 2; y += 3) {
756
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
757
+ src_ptr += src_stride * 3;
758
+ dst_ptr += dst_stride;
759
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
760
+ src_ptr += src_stride * 3;
761
+ dst_ptr += dst_stride;
762
+ ScaleRowDown38_2(src_ptr, filter_stride, dst_ptr, dst_width);
763
+ src_ptr += src_stride * 2;
764
+ dst_ptr += dst_stride;
765
+ }
766
+
767
+ // Remainder 1 or 2 rows with last row vertically unfiltered
768
+ if ((dst_height % 3) == 2) {
769
+ ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
770
+ src_ptr += src_stride * 3;
771
+ dst_ptr += dst_stride;
772
+ ScaleRowDown38_3(src_ptr, 0, dst_ptr, dst_width);
773
+ } else if ((dst_height % 3) == 1) {
774
+ ScaleRowDown38_3(src_ptr, 0, dst_ptr, dst_width);
775
+ }
776
+ }
777
+
778
+ #define MIN1(x) ((x) < 1 ? 1 : (x))
779
+
780
+ static __inline uint32_t SumPixels(int iboxwidth, const uint16_t* src_ptr) {
781
+ uint32_t sum = 0u;
782
+ int x;
783
+ assert(iboxwidth > 0);
784
+ for (x = 0; x < iboxwidth; ++x) {
785
+ sum += src_ptr[x];
786
+ }
787
+ return sum;
788
+ }
789
+
790
+ static __inline uint32_t SumPixels_16(int iboxwidth, const uint32_t* src_ptr) {
791
+ uint32_t sum = 0u;
792
+ int x;
793
+ assert(iboxwidth > 0);
794
+ for (x = 0; x < iboxwidth; ++x) {
795
+ sum += src_ptr[x];
796
+ }
797
+ return sum;
798
+ }
799
+
800
+ static void ScaleAddCols2_C(int dst_width,
801
+ int boxheight,
802
+ int x,
803
+ int dx,
804
+ const uint16_t* src_ptr,
805
+ uint8_t* dst_ptr) {
806
+ int i;
807
+ int scaletbl[2];
808
+ int minboxwidth = dx >> 16;
809
+ int boxwidth;
810
+ scaletbl[0] = 65536 / (MIN1(minboxwidth) * boxheight);
811
+ scaletbl[1] = 65536 / (MIN1(minboxwidth + 1) * boxheight);
812
+ for (i = 0; i < dst_width; ++i) {
813
+ int ix = x >> 16;
814
+ x += dx;
815
+ boxwidth = MIN1((x >> 16) - ix);
816
+ int scaletbl_index = boxwidth - minboxwidth;
817
+ assert((scaletbl_index == 0) || (scaletbl_index == 1));
818
+ *dst_ptr++ = (uint8_t)(SumPixels(boxwidth, src_ptr + ix) *
819
+ scaletbl[scaletbl_index] >>
820
+ 16);
821
+ }
822
+ }
823
+
824
+ static void ScaleAddCols2_16_C(int dst_width,
825
+ int boxheight,
826
+ int x,
827
+ int dx,
828
+ const uint32_t* src_ptr,
829
+ uint16_t* dst_ptr) {
830
+ int i;
831
+ int scaletbl[2];
832
+ int minboxwidth = dx >> 16;
833
+ int boxwidth;
834
+ scaletbl[0] = 65536 / (MIN1(minboxwidth) * boxheight);
835
+ scaletbl[1] = 65536 / (MIN1(minboxwidth + 1) * boxheight);
836
+ for (i = 0; i < dst_width; ++i) {
837
+ int ix = x >> 16;
838
+ x += dx;
839
+ boxwidth = MIN1((x >> 16) - ix);
840
+ int scaletbl_index = boxwidth - minboxwidth;
841
+ assert((scaletbl_index == 0) || (scaletbl_index == 1));
842
+ *dst_ptr++ =
843
+ SumPixels_16(boxwidth, src_ptr + ix) * scaletbl[scaletbl_index] >> 16;
844
+ }
845
+ }
846
+
847
+ static void ScaleAddCols0_C(int dst_width,
848
+ int boxheight,
849
+ int x,
850
+ int dx,
851
+ const uint16_t* src_ptr,
852
+ uint8_t* dst_ptr) {
853
+ int scaleval = 65536 / boxheight;
854
+ int i;
855
+ (void)dx;
856
+ src_ptr += (x >> 16);
857
+ for (i = 0; i < dst_width; ++i) {
858
+ *dst_ptr++ = (uint8_t)(src_ptr[i] * scaleval >> 16);
859
+ }
860
+ }
861
+
862
+ static void ScaleAddCols1_C(int dst_width,
863
+ int boxheight,
864
+ int x,
865
+ int dx,
866
+ const uint16_t* src_ptr,
867
+ uint8_t* dst_ptr) {
868
+ int boxwidth = MIN1(dx >> 16);
869
+ int scaleval = 65536 / (boxwidth * boxheight);
870
+ int i;
871
+ x >>= 16;
872
+ for (i = 0; i < dst_width; ++i) {
873
+ *dst_ptr++ = (uint8_t)(SumPixels(boxwidth, src_ptr + x) * scaleval >> 16);
874
+ x += boxwidth;
875
+ }
876
+ }
877
+
878
+ static void ScaleAddCols1_16_C(int dst_width,
879
+ int boxheight,
880
+ int x,
881
+ int dx,
882
+ const uint32_t* src_ptr,
883
+ uint16_t* dst_ptr) {
884
+ int boxwidth = MIN1(dx >> 16);
885
+ int scaleval = 65536 / (boxwidth * boxheight);
886
+ int i;
887
+ for (i = 0; i < dst_width; ++i) {
888
+ *dst_ptr++ = SumPixels_16(boxwidth, src_ptr + x) * scaleval >> 16;
889
+ x += boxwidth;
890
+ }
891
+ }
892
+
893
+ // Scale plane down to any dimensions, with interpolation.
894
+ // (boxfilter).
895
+ //
896
+ // Same method as SimpleScale, which is fixed point, outputting
897
+ // one pixel of destination using fixed point (16.16) to step
898
+ // through source, sampling a box of pixel with simple
899
+ // averaging.
900
+ static int ScalePlaneBox(int src_width,
901
+ int src_height,
902
+ int dst_width,
903
+ int dst_height,
904
+ int src_stride,
905
+ int dst_stride,
906
+ const uint8_t* src_ptr,
907
+ uint8_t* dst_ptr) {
908
+ int j, k;
909
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
910
+ int x = 0;
911
+ int y = 0;
912
+ int dx = 0;
913
+ int dy = 0;
914
+ const int max_y = (src_height << 16);
915
+ ScaleSlope(src_width, src_height, dst_width, dst_height, kFilterBox, &x, &y,
916
+ &dx, &dy);
917
+ src_width = Abs(src_width);
918
+ {
919
+ // Allocate a row buffer of uint16_t.
920
+ align_buffer_64(row16, src_width * 2);
921
+ if (!row16)
922
+ return 1;
923
+ void (*ScaleAddCols)(int dst_width, int boxheight, int x, int dx,
924
+ const uint16_t* src_ptr, uint8_t* dst_ptr) =
925
+ (dx & 0xffff) ? ScaleAddCols2_C
926
+ : ((dx != 0x10000) ? ScaleAddCols1_C : ScaleAddCols0_C);
927
+ void (*ScaleAddRow)(const uint8_t* src_ptr, uint16_t* dst_ptr,
928
+ int src_width) = ScaleAddRow_C;
929
+ #if defined(HAS_SCALEADDROW_SSE2)
930
+ if (TestCpuFlag(kCpuHasSSE2)) {
931
+ ScaleAddRow = ScaleAddRow_Any_SSE2;
932
+ if (IS_ALIGNED(src_width, 16)) {
933
+ ScaleAddRow = ScaleAddRow_SSE2;
934
+ }
935
+ }
936
+ #endif
937
+ #if defined(HAS_SCALEADDROW_AVX2)
938
+ if (TestCpuFlag(kCpuHasAVX2)) {
939
+ ScaleAddRow = ScaleAddRow_Any_AVX2;
940
+ if (IS_ALIGNED(src_width, 32)) {
941
+ ScaleAddRow = ScaleAddRow_AVX2;
942
+ }
943
+ }
944
+ #endif
945
+ #if defined(HAS_SCALEADDROW_NEON)
946
+ if (TestCpuFlag(kCpuHasNEON)) {
947
+ ScaleAddRow = ScaleAddRow_Any_NEON;
948
+ if (IS_ALIGNED(src_width, 16)) {
949
+ ScaleAddRow = ScaleAddRow_NEON;
950
+ }
951
+ }
952
+ #endif
953
+ #if defined(HAS_SCALEADDROW_LSX)
954
+ if (TestCpuFlag(kCpuHasLSX)) {
955
+ ScaleAddRow = ScaleAddRow_Any_LSX;
956
+ if (IS_ALIGNED(src_width, 16)) {
957
+ ScaleAddRow = ScaleAddRow_LSX;
958
+ }
959
+ }
960
+ #endif
961
+ #if defined(HAS_SCALEADDROW_RVV)
962
+ if (TestCpuFlag(kCpuHasRVV)) {
963
+ ScaleAddRow = ScaleAddRow_RVV;
964
+ }
965
+ #endif
966
+
967
+ for (j = 0; j < dst_height; ++j) {
968
+ int boxheight;
969
+ int iy = y >> 16;
970
+ const uint8_t* src = src_ptr + iy * (int64_t)src_stride;
971
+ y += dy;
972
+ if (y > max_y) {
973
+ y = max_y;
974
+ }
975
+ boxheight = MIN1((y >> 16) - iy);
976
+ memset(row16, 0, src_width * 2);
977
+ for (k = 0; k < boxheight; ++k) {
978
+ ScaleAddRow(src, (uint16_t*)(row16), src_width);
979
+ src += src_stride;
980
+ }
981
+ ScaleAddCols(dst_width, boxheight, x, dx, (uint16_t*)(row16), dst_ptr);
982
+ dst_ptr += dst_stride;
983
+ }
984
+ free_aligned_buffer_64(row16);
985
+ }
986
+ return 0;
987
+ }
988
+
989
+ static int ScalePlaneBox_16(int src_width,
990
+ int src_height,
991
+ int dst_width,
992
+ int dst_height,
993
+ int src_stride,
994
+ int dst_stride,
995
+ const uint16_t* src_ptr,
996
+ uint16_t* dst_ptr) {
997
+ int j, k;
998
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
999
+ int x = 0;
1000
+ int y = 0;
1001
+ int dx = 0;
1002
+ int dy = 0;
1003
+ const int max_y = (src_height << 16);
1004
+ ScaleSlope(src_width, src_height, dst_width, dst_height, kFilterBox, &x, &y,
1005
+ &dx, &dy);
1006
+ src_width = Abs(src_width);
1007
+ {
1008
+ // Allocate a row buffer of uint32_t.
1009
+ align_buffer_64(row32, src_width * 4);
1010
+ if (!row32)
1011
+ return 1;
1012
+ void (*ScaleAddCols)(int dst_width, int boxheight, int x, int dx,
1013
+ const uint32_t* src_ptr, uint16_t* dst_ptr) =
1014
+ (dx & 0xffff) ? ScaleAddCols2_16_C : ScaleAddCols1_16_C;
1015
+ void (*ScaleAddRow)(const uint16_t* src_ptr, uint32_t* dst_ptr,
1016
+ int src_width) = ScaleAddRow_16_C;
1017
+
1018
+ #if defined(HAS_SCALEADDROW_16_SSE2)
1019
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(src_width, 16)) {
1020
+ ScaleAddRow = ScaleAddRow_16_SSE2;
1021
+ }
1022
+ #endif
1023
+
1024
+ for (j = 0; j < dst_height; ++j) {
1025
+ int boxheight;
1026
+ int iy = y >> 16;
1027
+ const uint16_t* src = src_ptr + iy * (int64_t)src_stride;
1028
+ y += dy;
1029
+ if (y > max_y) {
1030
+ y = max_y;
1031
+ }
1032
+ boxheight = MIN1((y >> 16) - iy);
1033
+ memset(row32, 0, src_width * 4);
1034
+ for (k = 0; k < boxheight; ++k) {
1035
+ ScaleAddRow(src, (uint32_t*)(row32), src_width);
1036
+ src += src_stride;
1037
+ }
1038
+ ScaleAddCols(dst_width, boxheight, x, dx, (uint32_t*)(row32), dst_ptr);
1039
+ dst_ptr += dst_stride;
1040
+ }
1041
+ free_aligned_buffer_64(row32);
1042
+ }
1043
+ return 0;
1044
+ }
1045
+
1046
+ // Scale plane down with bilinear interpolation.
1047
+ static int ScalePlaneBilinearDown(int src_width,
1048
+ int src_height,
1049
+ int dst_width,
1050
+ int dst_height,
1051
+ int src_stride,
1052
+ int dst_stride,
1053
+ const uint8_t* src_ptr,
1054
+ uint8_t* dst_ptr,
1055
+ enum FilterMode filtering) {
1056
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1057
+ int x = 0;
1058
+ int y = 0;
1059
+ int dx = 0;
1060
+ int dy = 0;
1061
+ // TODO(fbarchard): Consider not allocating row buffer for kFilterLinear.
1062
+ // Allocate a row buffer.
1063
+ align_buffer_64(row, src_width);
1064
+ if (!row)
1065
+ return 1;
1066
+
1067
+ const int max_y = (src_height - 1) << 16;
1068
+ int j;
1069
+ void (*ScaleFilterCols)(uint8_t* dst_ptr, const uint8_t* src_ptr,
1070
+ int dst_width, int x, int dx) =
1071
+ (src_width >= 32768) ? ScaleFilterCols64_C : ScaleFilterCols_C;
1072
+ void (*InterpolateRow)(uint8_t* dst_ptr, const uint8_t* src_ptr,
1073
+ ptrdiff_t src_stride, int dst_width,
1074
+ int source_y_fraction) = InterpolateRow_C;
1075
+ ScaleSlope(src_width, src_height, dst_width, dst_height, filtering, &x, &y,
1076
+ &dx, &dy);
1077
+ src_width = Abs(src_width);
1078
+
1079
+ #if defined(HAS_INTERPOLATEROW_SSSE3)
1080
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1081
+ InterpolateRow = InterpolateRow_Any_SSSE3;
1082
+ if (IS_ALIGNED(src_width, 16)) {
1083
+ InterpolateRow = InterpolateRow_SSSE3;
1084
+ }
1085
+ }
1086
+ #endif
1087
+ #if defined(HAS_INTERPOLATEROW_AVX2)
1088
+ if (TestCpuFlag(kCpuHasAVX2)) {
1089
+ InterpolateRow = InterpolateRow_Any_AVX2;
1090
+ if (IS_ALIGNED(src_width, 32)) {
1091
+ InterpolateRow = InterpolateRow_AVX2;
1092
+ }
1093
+ }
1094
+ #endif
1095
+ #if defined(HAS_INTERPOLATEROW_NEON)
1096
+ if (TestCpuFlag(kCpuHasNEON)) {
1097
+ InterpolateRow = InterpolateRow_Any_NEON;
1098
+ if (IS_ALIGNED(src_width, 16)) {
1099
+ InterpolateRow = InterpolateRow_NEON;
1100
+ }
1101
+ }
1102
+ #endif
1103
+ #if defined(HAS_INTERPOLATEROW_SME)
1104
+ if (TestCpuFlag(kCpuHasSME)) {
1105
+ InterpolateRow = InterpolateRow_SME;
1106
+ }
1107
+ #endif
1108
+ #if defined(HAS_INTERPOLATEROW_LSX)
1109
+ if (TestCpuFlag(kCpuHasLSX)) {
1110
+ InterpolateRow = InterpolateRow_Any_LSX;
1111
+ if (IS_ALIGNED(src_width, 32)) {
1112
+ InterpolateRow = InterpolateRow_LSX;
1113
+ }
1114
+ }
1115
+ #endif
1116
+ #if defined(HAS_INTERPOLATEROW_RVV)
1117
+ if (TestCpuFlag(kCpuHasRVV)) {
1118
+ InterpolateRow = InterpolateRow_RVV;
1119
+ }
1120
+ #endif
1121
+
1122
+ #if defined(HAS_SCALEFILTERCOLS_SSSE3)
1123
+ if (TestCpuFlag(kCpuHasSSSE3) && src_width < 32768) {
1124
+ ScaleFilterCols = ScaleFilterCols_SSSE3;
1125
+ }
1126
+ #endif
1127
+ #if defined(HAS_SCALEFILTERCOLS_NEON)
1128
+ if (TestCpuFlag(kCpuHasNEON) && src_width < 32768) {
1129
+ ScaleFilterCols = ScaleFilterCols_Any_NEON;
1130
+ if (IS_ALIGNED(dst_width, 8)) {
1131
+ ScaleFilterCols = ScaleFilterCols_NEON;
1132
+ }
1133
+ }
1134
+ #endif
1135
+ #if defined(HAS_SCALEFILTERCOLS_LSX)
1136
+ if (TestCpuFlag(kCpuHasLSX) && src_width < 32768) {
1137
+ ScaleFilterCols = ScaleFilterCols_Any_LSX;
1138
+ if (IS_ALIGNED(dst_width, 16)) {
1139
+ ScaleFilterCols = ScaleFilterCols_LSX;
1140
+ }
1141
+ }
1142
+ #endif
1143
+ if (y > max_y) {
1144
+ y = max_y;
1145
+ }
1146
+
1147
+ for (j = 0; j < dst_height; ++j) {
1148
+ int yi = y >> 16;
1149
+ const uint8_t* src = src_ptr + yi * (int64_t)src_stride;
1150
+ if (filtering == kFilterLinear) {
1151
+ ScaleFilterCols(dst_ptr, src, dst_width, x, dx);
1152
+ } else {
1153
+ int yf = (y >> 8) & 255;
1154
+ InterpolateRow(row, src, src_stride, src_width, yf);
1155
+ ScaleFilterCols(dst_ptr, row, dst_width, x, dx);
1156
+ }
1157
+ dst_ptr += dst_stride;
1158
+ y += dy;
1159
+ if (y > max_y) {
1160
+ y = max_y;
1161
+ }
1162
+ }
1163
+ free_aligned_buffer_64(row);
1164
+ return 0;
1165
+ }
1166
+
1167
+ static int ScalePlaneBilinearDown_16(int src_width,
1168
+ int src_height,
1169
+ int dst_width,
1170
+ int dst_height,
1171
+ int src_stride,
1172
+ int dst_stride,
1173
+ const uint16_t* src_ptr,
1174
+ uint16_t* dst_ptr,
1175
+ enum FilterMode filtering) {
1176
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1177
+ int x = 0;
1178
+ int y = 0;
1179
+ int dx = 0;
1180
+ int dy = 0;
1181
+ // TODO(fbarchard): Consider not allocating row buffer for kFilterLinear.
1182
+ // Allocate a row buffer.
1183
+ align_buffer_64(row, src_width * 2);
1184
+ if (!row)
1185
+ return 1;
1186
+
1187
+ const int max_y = (src_height - 1) << 16;
1188
+ int j;
1189
+ void (*ScaleFilterCols)(uint16_t* dst_ptr, const uint16_t* src_ptr,
1190
+ int dst_width, int x, int dx) =
1191
+ (src_width >= 32768) ? ScaleFilterCols64_16_C : ScaleFilterCols_16_C;
1192
+ void (*InterpolateRow)(uint16_t* dst_ptr, const uint16_t* src_ptr,
1193
+ ptrdiff_t src_stride, int dst_width,
1194
+ int source_y_fraction) = InterpolateRow_16_C;
1195
+ ScaleSlope(src_width, src_height, dst_width, dst_height, filtering, &x, &y,
1196
+ &dx, &dy);
1197
+ src_width = Abs(src_width);
1198
+
1199
+ #if defined(HAS_INTERPOLATEROW_16_SSE2)
1200
+ if (TestCpuFlag(kCpuHasSSE2)) {
1201
+ InterpolateRow = InterpolateRow_16_Any_SSE2;
1202
+ if (IS_ALIGNED(src_width, 16)) {
1203
+ InterpolateRow = InterpolateRow_16_SSE2;
1204
+ }
1205
+ }
1206
+ #endif
1207
+ #if defined(HAS_INTERPOLATEROW_16_SSSE3)
1208
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1209
+ InterpolateRow = InterpolateRow_16_Any_SSSE3;
1210
+ if (IS_ALIGNED(src_width, 16)) {
1211
+ InterpolateRow = InterpolateRow_16_SSSE3;
1212
+ }
1213
+ }
1214
+ #endif
1215
+ #if defined(HAS_INTERPOLATEROW_16_AVX2)
1216
+ if (TestCpuFlag(kCpuHasAVX2)) {
1217
+ InterpolateRow = InterpolateRow_16_Any_AVX2;
1218
+ if (IS_ALIGNED(src_width, 32)) {
1219
+ InterpolateRow = InterpolateRow_16_AVX2;
1220
+ }
1221
+ }
1222
+ #endif
1223
+ #if defined(HAS_INTERPOLATEROW_16_NEON)
1224
+ if (TestCpuFlag(kCpuHasNEON)) {
1225
+ InterpolateRow = InterpolateRow_16_Any_NEON;
1226
+ if (IS_ALIGNED(src_width, 16)) {
1227
+ InterpolateRow = InterpolateRow_16_NEON;
1228
+ }
1229
+ }
1230
+ #endif
1231
+ #if defined(HAS_INTERPOLATEROW_16_SME)
1232
+ if (TestCpuFlag(kCpuHasSME)) {
1233
+ InterpolateRow = InterpolateRow_16_SME;
1234
+ }
1235
+ #endif
1236
+
1237
+ #if defined(HAS_SCALEFILTERCOLS_16_SSSE3)
1238
+ if (TestCpuFlag(kCpuHasSSSE3) && src_width < 32768) {
1239
+ ScaleFilterCols = ScaleFilterCols_16_SSSE3;
1240
+ }
1241
+ #endif
1242
+ if (y > max_y) {
1243
+ y = max_y;
1244
+ }
1245
+
1246
+ for (j = 0; j < dst_height; ++j) {
1247
+ int yi = y >> 16;
1248
+ const uint16_t* src = src_ptr + yi * (int64_t)src_stride;
1249
+ if (filtering == kFilterLinear) {
1250
+ ScaleFilterCols(dst_ptr, src, dst_width, x, dx);
1251
+ } else {
1252
+ int yf = (y >> 8) & 255;
1253
+ InterpolateRow((uint16_t*)row, src, src_stride, src_width, yf);
1254
+ ScaleFilterCols(dst_ptr, (uint16_t*)row, dst_width, x, dx);
1255
+ }
1256
+ dst_ptr += dst_stride;
1257
+ y += dy;
1258
+ if (y > max_y) {
1259
+ y = max_y;
1260
+ }
1261
+ }
1262
+ free_aligned_buffer_64(row);
1263
+ return 0;
1264
+ }
1265
+
1266
+ // Scale up down with bilinear interpolation.
1267
+ static int ScalePlaneBilinearUp(int src_width,
1268
+ int src_height,
1269
+ int dst_width,
1270
+ int dst_height,
1271
+ int src_stride,
1272
+ int dst_stride,
1273
+ const uint8_t* src_ptr,
1274
+ uint8_t* dst_ptr,
1275
+ enum FilterMode filtering) {
1276
+ int j;
1277
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1278
+ int x = 0;
1279
+ int y = 0;
1280
+ int dx = 0;
1281
+ int dy = 0;
1282
+ const int max_y = (src_height - 1) << 16;
1283
+ void (*InterpolateRow)(uint8_t* dst_ptr, const uint8_t* src_ptr,
1284
+ ptrdiff_t src_stride, int dst_width,
1285
+ int source_y_fraction) = InterpolateRow_C;
1286
+ void (*ScaleFilterCols)(uint8_t* dst_ptr, const uint8_t* src_ptr,
1287
+ int dst_width, int x, int dx) =
1288
+ filtering ? ScaleFilterCols_C : ScaleCols_C;
1289
+ ScaleSlope(src_width, src_height, dst_width, dst_height, filtering, &x, &y,
1290
+ &dx, &dy);
1291
+ src_width = Abs(src_width);
1292
+
1293
+ #if defined(HAS_INTERPOLATEROW_SSSE3)
1294
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1295
+ InterpolateRow = InterpolateRow_Any_SSSE3;
1296
+ if (IS_ALIGNED(dst_width, 16)) {
1297
+ InterpolateRow = InterpolateRow_SSSE3;
1298
+ }
1299
+ }
1300
+ #endif
1301
+ #if defined(HAS_INTERPOLATEROW_AVX2)
1302
+ if (TestCpuFlag(kCpuHasAVX2)) {
1303
+ InterpolateRow = InterpolateRow_Any_AVX2;
1304
+ if (IS_ALIGNED(dst_width, 32)) {
1305
+ InterpolateRow = InterpolateRow_AVX2;
1306
+ }
1307
+ }
1308
+ #endif
1309
+ #if defined(HAS_INTERPOLATEROW_NEON)
1310
+ if (TestCpuFlag(kCpuHasNEON)) {
1311
+ InterpolateRow = InterpolateRow_Any_NEON;
1312
+ if (IS_ALIGNED(dst_width, 16)) {
1313
+ InterpolateRow = InterpolateRow_NEON;
1314
+ }
1315
+ }
1316
+ #endif
1317
+ #if defined(HAS_INTERPOLATEROW_SME)
1318
+ if (TestCpuFlag(kCpuHasSME)) {
1319
+ InterpolateRow = InterpolateRow_SME;
1320
+ }
1321
+ #endif
1322
+ #if defined(HAS_INTERPOLATEROW_RVV)
1323
+ if (TestCpuFlag(kCpuHasRVV)) {
1324
+ InterpolateRow = InterpolateRow_RVV;
1325
+ }
1326
+ #endif
1327
+
1328
+ if (filtering && src_width >= 32768) {
1329
+ ScaleFilterCols = ScaleFilterCols64_C;
1330
+ }
1331
+ #if defined(HAS_SCALEFILTERCOLS_SSSE3)
1332
+ if (filtering && TestCpuFlag(kCpuHasSSSE3) && src_width < 32768) {
1333
+ ScaleFilterCols = ScaleFilterCols_SSSE3;
1334
+ }
1335
+ #endif
1336
+ #if defined(HAS_SCALEFILTERCOLS_NEON)
1337
+ if (filtering && TestCpuFlag(kCpuHasNEON) && src_width < 32768) {
1338
+ ScaleFilterCols = ScaleFilterCols_Any_NEON;
1339
+ if (IS_ALIGNED(dst_width, 8)) {
1340
+ ScaleFilterCols = ScaleFilterCols_NEON;
1341
+ }
1342
+ }
1343
+ #endif
1344
+ #if defined(HAS_SCALEFILTERCOLS_LSX)
1345
+ if (filtering && TestCpuFlag(kCpuHasLSX) && src_width < 32768) {
1346
+ ScaleFilterCols = ScaleFilterCols_Any_LSX;
1347
+ if (IS_ALIGNED(dst_width, 16)) {
1348
+ ScaleFilterCols = ScaleFilterCols_LSX;
1349
+ }
1350
+ }
1351
+ #endif
1352
+ if (!filtering && src_width * 2 == dst_width && x < 0x8000) {
1353
+ ScaleFilterCols = ScaleColsUp2_C;
1354
+ #if defined(HAS_SCALECOLS_SSE2)
1355
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 8)) {
1356
+ ScaleFilterCols = ScaleColsUp2_SSE2;
1357
+ }
1358
+ #endif
1359
+ }
1360
+
1361
+ if (y > max_y) {
1362
+ y = max_y;
1363
+ }
1364
+ {
1365
+ int yi = y >> 16;
1366
+ const uint8_t* src = src_ptr + yi * (int64_t)src_stride;
1367
+
1368
+ // Allocate 2 row buffers.
1369
+ const int row_size = (dst_width + 31) & ~31;
1370
+ align_buffer_64(row, row_size * 2);
1371
+ if (!row)
1372
+ return 1;
1373
+
1374
+ uint8_t* rowptr = row;
1375
+ int rowstride = row_size;
1376
+ int lasty = yi;
1377
+
1378
+ ScaleFilterCols(rowptr, src, dst_width, x, dx);
1379
+ if (src_height > 1) {
1380
+ src += src_stride;
1381
+ }
1382
+ ScaleFilterCols(rowptr + rowstride, src, dst_width, x, dx);
1383
+ if (src_height > 2) {
1384
+ src += src_stride;
1385
+ }
1386
+
1387
+ for (j = 0; j < dst_height; ++j) {
1388
+ yi = y >> 16;
1389
+ if (yi != lasty) {
1390
+ if (y > max_y) {
1391
+ y = max_y;
1392
+ yi = y >> 16;
1393
+ src = src_ptr + yi * (int64_t)src_stride;
1394
+ }
1395
+ if (yi != lasty) {
1396
+ ScaleFilterCols(rowptr, src, dst_width, x, dx);
1397
+ rowptr += rowstride;
1398
+ rowstride = -rowstride;
1399
+ lasty = yi;
1400
+ if ((y + 65536) < max_y) {
1401
+ src += src_stride;
1402
+ }
1403
+ }
1404
+ }
1405
+ if (filtering == kFilterLinear) {
1406
+ InterpolateRow(dst_ptr, rowptr, 0, dst_width, 0);
1407
+ } else {
1408
+ int yf = (y >> 8) & 255;
1409
+ InterpolateRow(dst_ptr, rowptr, rowstride, dst_width, yf);
1410
+ }
1411
+ dst_ptr += dst_stride;
1412
+ y += dy;
1413
+ }
1414
+ free_aligned_buffer_64(row);
1415
+ }
1416
+ return 0;
1417
+ }
1418
+
1419
+ // Scale plane, horizontally up by 2 times.
1420
+ // Uses linear filter horizontally, nearest vertically.
1421
+ // This is an optimized version for scaling up a plane to 2 times of
1422
+ // its original width, using linear interpolation.
1423
+ // This is used to scale U and V planes of I422 to I444.
1424
+ static void ScalePlaneUp2_Linear(int src_width,
1425
+ int src_height,
1426
+ int dst_width,
1427
+ int dst_height,
1428
+ int src_stride,
1429
+ int dst_stride,
1430
+ const uint8_t* src_ptr,
1431
+ uint8_t* dst_ptr) {
1432
+ void (*ScaleRowUp)(const uint8_t* src_ptr, uint8_t* dst_ptr, int dst_width) =
1433
+ ScaleRowUp2_Linear_Any_C;
1434
+ int i;
1435
+ int y;
1436
+ int dy;
1437
+
1438
+ (void)src_width;
1439
+ // This function can only scale up by 2 times horizontally.
1440
+ assert(src_width == ((dst_width + 1) / 2));
1441
+
1442
+ #ifdef HAS_SCALEROWUP2_LINEAR_SSE2
1443
+ if (TestCpuFlag(kCpuHasSSE2)) {
1444
+ ScaleRowUp = ScaleRowUp2_Linear_Any_SSE2;
1445
+ }
1446
+ #endif
1447
+
1448
+ #ifdef HAS_SCALEROWUP2_LINEAR_SSSE3
1449
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1450
+ ScaleRowUp = ScaleRowUp2_Linear_Any_SSSE3;
1451
+ }
1452
+ #endif
1453
+
1454
+ #ifdef HAS_SCALEROWUP2_LINEAR_AVX2
1455
+ if (TestCpuFlag(kCpuHasAVX2)) {
1456
+ ScaleRowUp = ScaleRowUp2_Linear_Any_AVX2;
1457
+ }
1458
+ #endif
1459
+
1460
+ #ifdef HAS_SCALEROWUP2_LINEAR_NEON
1461
+ if (TestCpuFlag(kCpuHasNEON)) {
1462
+ ScaleRowUp = ScaleRowUp2_Linear_Any_NEON;
1463
+ }
1464
+ #endif
1465
+ #ifdef HAS_SCALEROWUP2_LINEAR_RVV
1466
+ if (TestCpuFlag(kCpuHasRVV)) {
1467
+ ScaleRowUp = ScaleRowUp2_Linear_RVV;
1468
+ }
1469
+ #endif
1470
+
1471
+ if (dst_height == 1) {
1472
+ ScaleRowUp(src_ptr + ((src_height - 1) / 2) * (int64_t)src_stride, dst_ptr,
1473
+ dst_width);
1474
+ } else {
1475
+ dy = FixedDiv(src_height - 1, dst_height - 1);
1476
+ y = (1 << 15) - 1;
1477
+ for (i = 0; i < dst_height; ++i) {
1478
+ ScaleRowUp(src_ptr + (y >> 16) * (int64_t)src_stride, dst_ptr, dst_width);
1479
+ dst_ptr += dst_stride;
1480
+ y += dy;
1481
+ }
1482
+ }
1483
+ }
1484
+
1485
+ // Scale plane, up by 2 times.
1486
+ // This is an optimized version for scaling up a plane to 2 times of
1487
+ // its original size, using bilinear interpolation.
1488
+ // This is used to scale U and V planes of I420 to I444.
1489
+ static void ScalePlaneUp2_Bilinear(int src_width,
1490
+ int src_height,
1491
+ int dst_width,
1492
+ int dst_height,
1493
+ int src_stride,
1494
+ int dst_stride,
1495
+ const uint8_t* src_ptr,
1496
+ uint8_t* dst_ptr) {
1497
+ void (*Scale2RowUp)(const uint8_t* src_ptr, ptrdiff_t src_stride,
1498
+ uint8_t* dst_ptr, ptrdiff_t dst_stride, int dst_width) =
1499
+ ScaleRowUp2_Bilinear_Any_C;
1500
+ int x;
1501
+
1502
+ (void)src_width;
1503
+ // This function can only scale up by 2 times.
1504
+ assert(src_width == ((dst_width + 1) / 2));
1505
+ assert(src_height == ((dst_height + 1) / 2));
1506
+
1507
+ #ifdef HAS_SCALEROWUP2_BILINEAR_SSE2
1508
+ if (TestCpuFlag(kCpuHasSSE2)) {
1509
+ Scale2RowUp = ScaleRowUp2_Bilinear_Any_SSE2;
1510
+ }
1511
+ #endif
1512
+
1513
+ #ifdef HAS_SCALEROWUP2_BILINEAR_SSSE3
1514
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1515
+ Scale2RowUp = ScaleRowUp2_Bilinear_Any_SSSE3;
1516
+ }
1517
+ #endif
1518
+
1519
+ #ifdef HAS_SCALEROWUP2_BILINEAR_AVX2
1520
+ if (TestCpuFlag(kCpuHasAVX2)) {
1521
+ Scale2RowUp = ScaleRowUp2_Bilinear_Any_AVX2;
1522
+ }
1523
+ #endif
1524
+
1525
+ #ifdef HAS_SCALEROWUP2_BILINEAR_NEON
1526
+ if (TestCpuFlag(kCpuHasNEON)) {
1527
+ Scale2RowUp = ScaleRowUp2_Bilinear_Any_NEON;
1528
+ }
1529
+ #endif
1530
+ #ifdef HAS_SCALEROWUP2_BILINEAR_RVV
1531
+ if (TestCpuFlag(kCpuHasRVV)) {
1532
+ Scale2RowUp = ScaleRowUp2_Bilinear_RVV;
1533
+ }
1534
+ #endif
1535
+
1536
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1537
+ dst_ptr += dst_stride;
1538
+ for (x = 0; x < src_height - 1; ++x) {
1539
+ Scale2RowUp(src_ptr, src_stride, dst_ptr, dst_stride, dst_width);
1540
+ src_ptr += src_stride;
1541
+ // TODO(fbarchard): Test performance of writing one row of destination at a
1542
+ // time.
1543
+ dst_ptr += 2 * dst_stride;
1544
+ }
1545
+ if (!(dst_height & 1)) {
1546
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1547
+ }
1548
+ }
1549
+
1550
+ // Scale at most 14 bit plane, horizontally up by 2 times.
1551
+ // This is an optimized version for scaling up a plane to 2 times of
1552
+ // its original width, using linear interpolation.
1553
+ // stride is in count of uint16_t.
1554
+ // This is used to scale U and V planes of I210 to I410 and I212 to I412.
1555
+ static void ScalePlaneUp2_12_Linear(int src_width,
1556
+ int src_height,
1557
+ int dst_width,
1558
+ int dst_height,
1559
+ int src_stride,
1560
+ int dst_stride,
1561
+ const uint16_t* src_ptr,
1562
+ uint16_t* dst_ptr) {
1563
+ void (*ScaleRowUp)(const uint16_t* src_ptr, uint16_t* dst_ptr,
1564
+ int dst_width) = ScaleRowUp2_Linear_16_Any_C;
1565
+ int i;
1566
+ int y;
1567
+ int dy;
1568
+
1569
+ (void)src_width;
1570
+ // This function can only scale up by 2 times horizontally.
1571
+ assert(src_width == ((dst_width + 1) / 2));
1572
+
1573
+ #ifdef HAS_SCALEROWUP2_LINEAR_12_SSSE3
1574
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1575
+ ScaleRowUp = ScaleRowUp2_Linear_12_Any_SSSE3;
1576
+ }
1577
+ #endif
1578
+
1579
+ #ifdef HAS_SCALEROWUP2_LINEAR_12_AVX2
1580
+ if (TestCpuFlag(kCpuHasAVX2)) {
1581
+ ScaleRowUp = ScaleRowUp2_Linear_12_Any_AVX2;
1582
+ }
1583
+ #endif
1584
+
1585
+ #ifdef HAS_SCALEROWUP2_LINEAR_12_NEON
1586
+ if (TestCpuFlag(kCpuHasNEON)) {
1587
+ ScaleRowUp = ScaleRowUp2_Linear_12_Any_NEON;
1588
+ }
1589
+ #endif
1590
+
1591
+ if (dst_height == 1) {
1592
+ ScaleRowUp(src_ptr + ((src_height - 1) / 2) * (int64_t)src_stride, dst_ptr,
1593
+ dst_width);
1594
+ } else {
1595
+ dy = FixedDiv(src_height - 1, dst_height - 1);
1596
+ y = (1 << 15) - 1;
1597
+ for (i = 0; i < dst_height; ++i) {
1598
+ ScaleRowUp(src_ptr + (y >> 16) * (int64_t)src_stride, dst_ptr, dst_width);
1599
+ dst_ptr += dst_stride;
1600
+ y += dy;
1601
+ }
1602
+ }
1603
+ }
1604
+
1605
+ // Scale at most 12 bit plane, up by 2 times.
1606
+ // This is an optimized version for scaling up a plane to 2 times of
1607
+ // its original size, using bilinear interpolation.
1608
+ // stride is in count of uint16_t.
1609
+ // This is used to scale U and V planes of I010 to I410 and I012 to I412.
1610
+ static void ScalePlaneUp2_12_Bilinear(int src_width,
1611
+ int src_height,
1612
+ int dst_width,
1613
+ int dst_height,
1614
+ int src_stride,
1615
+ int dst_stride,
1616
+ const uint16_t* src_ptr,
1617
+ uint16_t* dst_ptr) {
1618
+ void (*Scale2RowUp)(const uint16_t* src_ptr, ptrdiff_t src_stride,
1619
+ uint16_t* dst_ptr, ptrdiff_t dst_stride, int dst_width) =
1620
+ ScaleRowUp2_Bilinear_16_Any_C;
1621
+ int x;
1622
+
1623
+ (void)src_width;
1624
+ // This function can only scale up by 2 times.
1625
+ assert(src_width == ((dst_width + 1) / 2));
1626
+ assert(src_height == ((dst_height + 1) / 2));
1627
+
1628
+ #ifdef HAS_SCALEROWUP2_BILINEAR_12_SSSE3
1629
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1630
+ Scale2RowUp = ScaleRowUp2_Bilinear_12_Any_SSSE3;
1631
+ }
1632
+ #endif
1633
+
1634
+ #ifdef HAS_SCALEROWUP2_BILINEAR_12_AVX2
1635
+ if (TestCpuFlag(kCpuHasAVX2)) {
1636
+ Scale2RowUp = ScaleRowUp2_Bilinear_12_Any_AVX2;
1637
+ }
1638
+ #endif
1639
+
1640
+ #ifdef HAS_SCALEROWUP2_BILINEAR_12_NEON
1641
+ if (TestCpuFlag(kCpuHasNEON)) {
1642
+ Scale2RowUp = ScaleRowUp2_Bilinear_12_Any_NEON;
1643
+ }
1644
+ #endif
1645
+
1646
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1647
+ dst_ptr += dst_stride;
1648
+ for (x = 0; x < src_height - 1; ++x) {
1649
+ Scale2RowUp(src_ptr, src_stride, dst_ptr, dst_stride, dst_width);
1650
+ src_ptr += src_stride;
1651
+ dst_ptr += 2 * dst_stride;
1652
+ }
1653
+ if (!(dst_height & 1)) {
1654
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1655
+ }
1656
+ }
1657
+
1658
+ static void ScalePlaneUp2_16_Linear(int src_width,
1659
+ int src_height,
1660
+ int dst_width,
1661
+ int dst_height,
1662
+ int src_stride,
1663
+ int dst_stride,
1664
+ const uint16_t* src_ptr,
1665
+ uint16_t* dst_ptr) {
1666
+ void (*ScaleRowUp)(const uint16_t* src_ptr, uint16_t* dst_ptr,
1667
+ int dst_width) = ScaleRowUp2_Linear_16_Any_C;
1668
+ int i;
1669
+ int y;
1670
+ int dy;
1671
+
1672
+ (void)src_width;
1673
+ // This function can only scale up by 2 times horizontally.
1674
+ assert(src_width == ((dst_width + 1) / 2));
1675
+
1676
+ #ifdef HAS_SCALEROWUP2_LINEAR_16_SSE2
1677
+ if (TestCpuFlag(kCpuHasSSE2)) {
1678
+ ScaleRowUp = ScaleRowUp2_Linear_16_Any_SSE2;
1679
+ }
1680
+ #endif
1681
+
1682
+ #ifdef HAS_SCALEROWUP2_LINEAR_16_AVX2
1683
+ if (TestCpuFlag(kCpuHasAVX2)) {
1684
+ ScaleRowUp = ScaleRowUp2_Linear_16_Any_AVX2;
1685
+ }
1686
+ #endif
1687
+
1688
+ #ifdef HAS_SCALEROWUP2_LINEAR_16_NEON
1689
+ if (TestCpuFlag(kCpuHasNEON)) {
1690
+ ScaleRowUp = ScaleRowUp2_Linear_16_Any_NEON;
1691
+ }
1692
+ #endif
1693
+
1694
+ if (dst_height == 1) {
1695
+ ScaleRowUp(src_ptr + ((src_height - 1) / 2) * (int64_t)src_stride, dst_ptr,
1696
+ dst_width);
1697
+ } else {
1698
+ dy = FixedDiv(src_height - 1, dst_height - 1);
1699
+ y = (1 << 15) - 1;
1700
+ for (i = 0; i < dst_height; ++i) {
1701
+ ScaleRowUp(src_ptr + (y >> 16) * (int64_t)src_stride, dst_ptr, dst_width);
1702
+ dst_ptr += dst_stride;
1703
+ y += dy;
1704
+ }
1705
+ }
1706
+ }
1707
+
1708
+ static void ScalePlaneUp2_16_Bilinear(int src_width,
1709
+ int src_height,
1710
+ int dst_width,
1711
+ int dst_height,
1712
+ int src_stride,
1713
+ int dst_stride,
1714
+ const uint16_t* src_ptr,
1715
+ uint16_t* dst_ptr) {
1716
+ void (*Scale2RowUp)(const uint16_t* src_ptr, ptrdiff_t src_stride,
1717
+ uint16_t* dst_ptr, ptrdiff_t dst_stride, int dst_width) =
1718
+ ScaleRowUp2_Bilinear_16_Any_C;
1719
+ int x;
1720
+
1721
+ (void)src_width;
1722
+ // This function can only scale up by 2 times.
1723
+ assert(src_width == ((dst_width + 1) / 2));
1724
+ assert(src_height == ((dst_height + 1) / 2));
1725
+
1726
+ #ifdef HAS_SCALEROWUP2_BILINEAR_16_SSE2
1727
+ if (TestCpuFlag(kCpuHasSSE2)) {
1728
+ Scale2RowUp = ScaleRowUp2_Bilinear_16_Any_SSE2;
1729
+ }
1730
+ #endif
1731
+
1732
+ #ifdef HAS_SCALEROWUP2_BILINEAR_16_AVX2
1733
+ if (TestCpuFlag(kCpuHasAVX2)) {
1734
+ Scale2RowUp = ScaleRowUp2_Bilinear_16_Any_AVX2;
1735
+ }
1736
+ #endif
1737
+
1738
+ #ifdef HAS_SCALEROWUP2_BILINEAR_16_NEON
1739
+ if (TestCpuFlag(kCpuHasNEON)) {
1740
+ Scale2RowUp = ScaleRowUp2_Bilinear_16_Any_NEON;
1741
+ }
1742
+ #endif
1743
+
1744
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1745
+ dst_ptr += dst_stride;
1746
+ for (x = 0; x < src_height - 1; ++x) {
1747
+ Scale2RowUp(src_ptr, src_stride, dst_ptr, dst_stride, dst_width);
1748
+ src_ptr += src_stride;
1749
+ dst_ptr += 2 * dst_stride;
1750
+ }
1751
+ if (!(dst_height & 1)) {
1752
+ Scale2RowUp(src_ptr, 0, dst_ptr, 0, dst_width);
1753
+ }
1754
+ }
1755
+
1756
+ static int ScalePlaneBilinearUp_16(int src_width,
1757
+ int src_height,
1758
+ int dst_width,
1759
+ int dst_height,
1760
+ int src_stride,
1761
+ int dst_stride,
1762
+ const uint16_t* src_ptr,
1763
+ uint16_t* dst_ptr,
1764
+ enum FilterMode filtering) {
1765
+ int j;
1766
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1767
+ int x = 0;
1768
+ int y = 0;
1769
+ int dx = 0;
1770
+ int dy = 0;
1771
+ const int max_y = (src_height - 1) << 16;
1772
+ void (*InterpolateRow)(uint16_t* dst_ptr, const uint16_t* src_ptr,
1773
+ ptrdiff_t src_stride, int dst_width,
1774
+ int source_y_fraction) = InterpolateRow_16_C;
1775
+ void (*ScaleFilterCols)(uint16_t* dst_ptr, const uint16_t* src_ptr,
1776
+ int dst_width, int x, int dx) =
1777
+ filtering ? ScaleFilterCols_16_C : ScaleCols_16_C;
1778
+ ScaleSlope(src_width, src_height, dst_width, dst_height, filtering, &x, &y,
1779
+ &dx, &dy);
1780
+ src_width = Abs(src_width);
1781
+
1782
+ #if defined(HAS_INTERPOLATEROW_16_SSE2)
1783
+ if (TestCpuFlag(kCpuHasSSE2)) {
1784
+ InterpolateRow = InterpolateRow_16_Any_SSE2;
1785
+ if (IS_ALIGNED(dst_width, 16)) {
1786
+ InterpolateRow = InterpolateRow_16_SSE2;
1787
+ }
1788
+ }
1789
+ #endif
1790
+ #if defined(HAS_INTERPOLATEROW_16_SSSE3)
1791
+ if (TestCpuFlag(kCpuHasSSSE3)) {
1792
+ InterpolateRow = InterpolateRow_16_Any_SSSE3;
1793
+ if (IS_ALIGNED(dst_width, 16)) {
1794
+ InterpolateRow = InterpolateRow_16_SSSE3;
1795
+ }
1796
+ }
1797
+ #endif
1798
+ #if defined(HAS_INTERPOLATEROW_16_AVX2)
1799
+ if (TestCpuFlag(kCpuHasAVX2)) {
1800
+ InterpolateRow = InterpolateRow_16_Any_AVX2;
1801
+ if (IS_ALIGNED(dst_width, 32)) {
1802
+ InterpolateRow = InterpolateRow_16_AVX2;
1803
+ }
1804
+ }
1805
+ #endif
1806
+ #if defined(HAS_INTERPOLATEROW_16_NEON)
1807
+ if (TestCpuFlag(kCpuHasNEON)) {
1808
+ InterpolateRow = InterpolateRow_16_Any_NEON;
1809
+ if (IS_ALIGNED(dst_width, 16)) {
1810
+ InterpolateRow = InterpolateRow_16_NEON;
1811
+ }
1812
+ }
1813
+ #endif
1814
+ #if defined(HAS_INTERPOLATEROW_16_SME)
1815
+ if (TestCpuFlag(kCpuHasSME)) {
1816
+ InterpolateRow = InterpolateRow_16_SME;
1817
+ }
1818
+ #endif
1819
+
1820
+ if (filtering && src_width >= 32768) {
1821
+ ScaleFilterCols = ScaleFilterCols64_16_C;
1822
+ }
1823
+ #if defined(HAS_SCALEFILTERCOLS_16_SSSE3)
1824
+ if (filtering && TestCpuFlag(kCpuHasSSSE3) && src_width < 32768) {
1825
+ ScaleFilterCols = ScaleFilterCols_16_SSSE3;
1826
+ }
1827
+ #endif
1828
+ if (!filtering && src_width * 2 == dst_width && x < 0x8000) {
1829
+ ScaleFilterCols = ScaleColsUp2_16_C;
1830
+ #if defined(HAS_SCALECOLS_16_SSE2)
1831
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 8)) {
1832
+ ScaleFilterCols = ScaleColsUp2_16_SSE2;
1833
+ }
1834
+ #endif
1835
+ }
1836
+ if (y > max_y) {
1837
+ y = max_y;
1838
+ }
1839
+ {
1840
+ int yi = y >> 16;
1841
+ const uint16_t* src = src_ptr + yi * (int64_t)src_stride;
1842
+
1843
+ // Allocate 2 row buffers.
1844
+ const int row_size = (dst_width + 31) & ~31;
1845
+ align_buffer_64(row, row_size * 4);
1846
+ int rowstride = row_size;
1847
+ int lasty = yi;
1848
+ uint16_t* rowptr = (uint16_t*)row;
1849
+ if (!row)
1850
+ return 1;
1851
+
1852
+ ScaleFilterCols(rowptr, src, dst_width, x, dx);
1853
+ if (src_height > 1) {
1854
+ src += src_stride;
1855
+ }
1856
+ ScaleFilterCols(rowptr + rowstride, src, dst_width, x, dx);
1857
+ if (src_height > 2) {
1858
+ src += src_stride;
1859
+ }
1860
+
1861
+ for (j = 0; j < dst_height; ++j) {
1862
+ yi = y >> 16;
1863
+ if (yi != lasty) {
1864
+ if (y > max_y) {
1865
+ y = max_y;
1866
+ yi = y >> 16;
1867
+ src = src_ptr + yi * (int64_t)src_stride;
1868
+ }
1869
+ if (yi != lasty) {
1870
+ ScaleFilterCols(rowptr, src, dst_width, x, dx);
1871
+ rowptr += rowstride;
1872
+ rowstride = -rowstride;
1873
+ lasty = yi;
1874
+ if ((y + 65536) < max_y) {
1875
+ src += src_stride;
1876
+ }
1877
+ }
1878
+ }
1879
+ if (filtering == kFilterLinear) {
1880
+ InterpolateRow(dst_ptr, rowptr, 0, dst_width, 0);
1881
+ } else {
1882
+ int yf = (y >> 8) & 255;
1883
+ InterpolateRow(dst_ptr, rowptr, rowstride, dst_width, yf);
1884
+ }
1885
+ dst_ptr += dst_stride;
1886
+ y += dy;
1887
+ }
1888
+ free_aligned_buffer_64(row);
1889
+ }
1890
+ return 0;
1891
+ }
1892
+
1893
+ // Scale Plane to/from any dimensions, without interpolation.
1894
+ // Fixed point math is used for performance: The upper 16 bits
1895
+ // of x and dx is the integer part of the source position and
1896
+ // the lower 16 bits are the fixed decimal part.
1897
+
1898
+ static void ScalePlaneSimple(int src_width,
1899
+ int src_height,
1900
+ int dst_width,
1901
+ int dst_height,
1902
+ int src_stride,
1903
+ int dst_stride,
1904
+ const uint8_t* src_ptr,
1905
+ uint8_t* dst_ptr) {
1906
+ int i;
1907
+ void (*ScaleCols)(uint8_t* dst_ptr, const uint8_t* src_ptr, int dst_width,
1908
+ int x, int dx) = ScaleCols_C;
1909
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1910
+ int x = 0;
1911
+ int y = 0;
1912
+ int dx = 0;
1913
+ int dy = 0;
1914
+ ScaleSlope(src_width, src_height, dst_width, dst_height, kFilterNone, &x, &y,
1915
+ &dx, &dy);
1916
+ src_width = Abs(src_width);
1917
+
1918
+ if (src_width * 2 == dst_width && x < 0x8000) {
1919
+ ScaleCols = ScaleColsUp2_C;
1920
+ #if defined(HAS_SCALECOLS_SSE2)
1921
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 8)) {
1922
+ ScaleCols = ScaleColsUp2_SSE2;
1923
+ }
1924
+ #endif
1925
+ }
1926
+
1927
+ for (i = 0; i < dst_height; ++i) {
1928
+ ScaleCols(dst_ptr, src_ptr + (y >> 16) * (int64_t)src_stride, dst_width, x,
1929
+ dx);
1930
+ dst_ptr += dst_stride;
1931
+ y += dy;
1932
+ }
1933
+ }
1934
+
1935
+ static void ScalePlaneSimple_16(int src_width,
1936
+ int src_height,
1937
+ int dst_width,
1938
+ int dst_height,
1939
+ int src_stride,
1940
+ int dst_stride,
1941
+ const uint16_t* src_ptr,
1942
+ uint16_t* dst_ptr) {
1943
+ int i;
1944
+ void (*ScaleCols)(uint16_t* dst_ptr, const uint16_t* src_ptr, int dst_width,
1945
+ int x, int dx) = ScaleCols_16_C;
1946
+ // Initial source x/y coordinate and step values as 16.16 fixed point.
1947
+ int x = 0;
1948
+ int y = 0;
1949
+ int dx = 0;
1950
+ int dy = 0;
1951
+ ScaleSlope(src_width, src_height, dst_width, dst_height, kFilterNone, &x, &y,
1952
+ &dx, &dy);
1953
+ src_width = Abs(src_width);
1954
+
1955
+ if (src_width * 2 == dst_width && x < 0x8000) {
1956
+ ScaleCols = ScaleColsUp2_16_C;
1957
+ #if defined(HAS_SCALECOLS_16_SSE2)
1958
+ if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(dst_width, 8)) {
1959
+ ScaleCols = ScaleColsUp2_16_SSE2;
1960
+ }
1961
+ #endif
1962
+ }
1963
+
1964
+ for (i = 0; i < dst_height; ++i) {
1965
+ ScaleCols(dst_ptr, src_ptr + (y >> 16) * (int64_t)src_stride, dst_width, x,
1966
+ dx);
1967
+ dst_ptr += dst_stride;
1968
+ y += dy;
1969
+ }
1970
+ }
1971
+
1972
+ // Scale a plane.
1973
+ // This function dispatches to a specialized scaler based on scale factor.
1974
+ LIBYUV_API
1975
+ int ScalePlane(const uint8_t* src,
1976
+ int src_stride,
1977
+ int src_width,
1978
+ int src_height,
1979
+ uint8_t* dst,
1980
+ int dst_stride,
1981
+ int dst_width,
1982
+ int dst_height,
1983
+ enum FilterMode filtering) {
1984
+ // Simplify filtering when possible.
1985
+ filtering = ScaleFilterReduce(src_width, src_height, dst_width, dst_height,
1986
+ filtering);
1987
+
1988
+ // Negative height means invert the image.
1989
+ if (src_height < 0) {
1990
+ src_height = -src_height;
1991
+ src = src + (src_height - 1) * (int64_t)src_stride;
1992
+ src_stride = -src_stride;
1993
+ }
1994
+ // Use specialized scales to improve performance for common resolutions.
1995
+ // For example, all the 1/2 scalings will use ScalePlaneDown2()
1996
+ if (dst_width == src_width && dst_height == src_height) {
1997
+ // Straight copy.
1998
+ CopyPlane(src, src_stride, dst, dst_stride, dst_width, dst_height);
1999
+ return 0;
2000
+ }
2001
+ if (dst_width == src_width && filtering != kFilterBox) {
2002
+ int dy = 0;
2003
+ int y = 0;
2004
+ // When scaling down, use the center 2 rows to filter.
2005
+ // When scaling up, last row of destination uses the last 2 source rows.
2006
+ if (dst_height <= src_height) {
2007
+ dy = FixedDiv(src_height, dst_height);
2008
+ y = CENTERSTART(dy, -32768); // Subtract 0.5 (32768) to center filter.
2009
+ } else if (src_height > 1 && dst_height > 1) {
2010
+ dy = FixedDiv1(src_height, dst_height);
2011
+ }
2012
+ // Arbitrary scale vertically, but unscaled horizontally.
2013
+ ScalePlaneVertical(src_height, dst_width, dst_height, src_stride,
2014
+ dst_stride, src, dst, 0, y, dy, /*bpp=*/1, filtering);
2015
+ return 0;
2016
+ }
2017
+ if (dst_width <= Abs(src_width) && dst_height <= src_height) {
2018
+ // Scale down.
2019
+ if (4 * dst_width == 3 * src_width && 4 * dst_height == 3 * src_height) {
2020
+ // optimized, 3/4
2021
+ ScalePlaneDown34(src_width, src_height, dst_width, dst_height, src_stride,
2022
+ dst_stride, src, dst, filtering);
2023
+ return 0;
2024
+ }
2025
+ if (2 * dst_width == src_width && 2 * dst_height == src_height) {
2026
+ // optimized, 1/2
2027
+ ScalePlaneDown2(src_width, src_height, dst_width, dst_height, src_stride,
2028
+ dst_stride, src, dst, filtering);
2029
+ return 0;
2030
+ }
2031
+ // 3/8 rounded up for odd sized chroma height.
2032
+ if (8 * dst_width == 3 * src_width && 8 * dst_height == 3 * src_height) {
2033
+ // optimized, 3/8
2034
+ ScalePlaneDown38(src_width, src_height, dst_width, dst_height, src_stride,
2035
+ dst_stride, src, dst, filtering);
2036
+ return 0;
2037
+ }
2038
+ if (4 * dst_width == src_width && 4 * dst_height == src_height &&
2039
+ (filtering == kFilterBox || filtering == kFilterNone)) {
2040
+ // optimized, 1/4
2041
+ ScalePlaneDown4(src_width, src_height, dst_width, dst_height, src_stride,
2042
+ dst_stride, src, dst, filtering);
2043
+ return 0;
2044
+ }
2045
+ }
2046
+ if (filtering == kFilterBox && dst_height * 2 < src_height) {
2047
+ return ScalePlaneBox(src_width, src_height, dst_width, dst_height,
2048
+ src_stride, dst_stride, src, dst);
2049
+ }
2050
+ if ((dst_width + 1) / 2 == src_width && filtering == kFilterLinear) {
2051
+ ScalePlaneUp2_Linear(src_width, src_height, dst_width, dst_height,
2052
+ src_stride, dst_stride, src, dst);
2053
+ return 0;
2054
+ }
2055
+ if ((dst_height + 1) / 2 == src_height && (dst_width + 1) / 2 == src_width &&
2056
+ (filtering == kFilterBilinear || filtering == kFilterBox)) {
2057
+ ScalePlaneUp2_Bilinear(src_width, src_height, dst_width, dst_height,
2058
+ src_stride, dst_stride, src, dst);
2059
+ return 0;
2060
+ }
2061
+ if (filtering && dst_height > src_height) {
2062
+ return ScalePlaneBilinearUp(src_width, src_height, dst_width, dst_height,
2063
+ src_stride, dst_stride, src, dst, filtering);
2064
+ }
2065
+ if (filtering) {
2066
+ return ScalePlaneBilinearDown(src_width, src_height, dst_width, dst_height,
2067
+ src_stride, dst_stride, src, dst, filtering);
2068
+ }
2069
+ ScalePlaneSimple(src_width, src_height, dst_width, dst_height, src_stride,
2070
+ dst_stride, src, dst);
2071
+ return 0;
2072
+ }
2073
+
2074
+ LIBYUV_API
2075
+ int ScalePlane_16(const uint16_t* src,
2076
+ int src_stride,
2077
+ int src_width,
2078
+ int src_height,
2079
+ uint16_t* dst,
2080
+ int dst_stride,
2081
+ int dst_width,
2082
+ int dst_height,
2083
+ enum FilterMode filtering) {
2084
+ // Simplify filtering when possible.
2085
+ filtering = ScaleFilterReduce(src_width, src_height, dst_width, dst_height,
2086
+ filtering);
2087
+
2088
+ // Negative height means invert the image.
2089
+ if (src_height < 0) {
2090
+ src_height = -src_height;
2091
+ src = src + (src_height - 1) * (int64_t)src_stride;
2092
+ src_stride = -src_stride;
2093
+ }
2094
+ // Use specialized scales to improve performance for common resolutions.
2095
+ // For example, all the 1/2 scalings will use ScalePlaneDown2()
2096
+ if (dst_width == src_width && dst_height == src_height) {
2097
+ // Straight copy.
2098
+ CopyPlane_16(src, src_stride, dst, dst_stride, dst_width, dst_height);
2099
+ return 0;
2100
+ }
2101
+ if (dst_width == src_width && filtering != kFilterBox) {
2102
+ int dy = 0;
2103
+ int y = 0;
2104
+ // When scaling down, use the center 2 rows to filter.
2105
+ // When scaling up, last row of destination uses the last 2 source rows.
2106
+ if (dst_height <= src_height) {
2107
+ dy = FixedDiv(src_height, dst_height);
2108
+ y = CENTERSTART(dy, -32768); // Subtract 0.5 (32768) to center filter.
2109
+ // When scaling up, ensure the last row of destination uses the last
2110
+ // source. Avoid divide by zero for dst_height but will do no scaling
2111
+ // later.
2112
+ } else if (src_height > 1 && dst_height > 1) {
2113
+ dy = FixedDiv1(src_height, dst_height);
2114
+ }
2115
+ // Arbitrary scale vertically, but unscaled horizontally.
2116
+ ScalePlaneVertical_16(src_height, dst_width, dst_height, src_stride,
2117
+ dst_stride, src, dst, 0, y, dy, /*bpp=*/1, filtering);
2118
+ return 0;
2119
+ }
2120
+ if (dst_width <= Abs(src_width) && dst_height <= src_height) {
2121
+ // Scale down.
2122
+ if (4 * dst_width == 3 * src_width && 4 * dst_height == 3 * src_height) {
2123
+ // optimized, 3/4
2124
+ ScalePlaneDown34_16(src_width, src_height, dst_width, dst_height,
2125
+ src_stride, dst_stride, src, dst, filtering);
2126
+ return 0;
2127
+ }
2128
+ if (2 * dst_width == src_width && 2 * dst_height == src_height) {
2129
+ // optimized, 1/2
2130
+ ScalePlaneDown2_16(src_width, src_height, dst_width, dst_height,
2131
+ src_stride, dst_stride, src, dst, filtering);
2132
+ return 0;
2133
+ }
2134
+ // 3/8 rounded up for odd sized chroma height.
2135
+ if (8 * dst_width == 3 * src_width && 8 * dst_height == 3 * src_height) {
2136
+ // optimized, 3/8
2137
+ ScalePlaneDown38_16(src_width, src_height, dst_width, dst_height,
2138
+ src_stride, dst_stride, src, dst, filtering);
2139
+ return 0;
2140
+ }
2141
+ if (4 * dst_width == src_width && 4 * dst_height == src_height &&
2142
+ (filtering == kFilterBox || filtering == kFilterNone)) {
2143
+ // optimized, 1/4
2144
+ ScalePlaneDown4_16(src_width, src_height, dst_width, dst_height,
2145
+ src_stride, dst_stride, src, dst, filtering);
2146
+ return 0;
2147
+ }
2148
+ }
2149
+ if (filtering == kFilterBox && dst_height * 2 < src_height) {
2150
+ return ScalePlaneBox_16(src_width, src_height, dst_width, dst_height,
2151
+ src_stride, dst_stride, src, dst);
2152
+ }
2153
+ if ((dst_width + 1) / 2 == src_width && filtering == kFilterLinear) {
2154
+ ScalePlaneUp2_16_Linear(src_width, src_height, dst_width, dst_height,
2155
+ src_stride, dst_stride, src, dst);
2156
+ return 0;
2157
+ }
2158
+ if ((dst_height + 1) / 2 == src_height && (dst_width + 1) / 2 == src_width &&
2159
+ (filtering == kFilterBilinear || filtering == kFilterBox)) {
2160
+ ScalePlaneUp2_16_Bilinear(src_width, src_height, dst_width, dst_height,
2161
+ src_stride, dst_stride, src, dst);
2162
+ return 0;
2163
+ }
2164
+ if (filtering && dst_height > src_height) {
2165
+ return ScalePlaneBilinearUp_16(src_width, src_height, dst_width, dst_height,
2166
+ src_stride, dst_stride, src, dst, filtering);
2167
+ }
2168
+ if (filtering) {
2169
+ return ScalePlaneBilinearDown_16(src_width, src_height, dst_width,
2170
+ dst_height, src_stride, dst_stride, src,
2171
+ dst, filtering);
2172
+ }
2173
+ ScalePlaneSimple_16(src_width, src_height, dst_width, dst_height, src_stride,
2174
+ dst_stride, src, dst);
2175
+ return 0;
2176
+ }
2177
+
2178
+ LIBYUV_API
2179
+ int ScalePlane_12(const uint16_t* src,
2180
+ int src_stride,
2181
+ int src_width,
2182
+ int src_height,
2183
+ uint16_t* dst,
2184
+ int dst_stride,
2185
+ int dst_width,
2186
+ int dst_height,
2187
+ enum FilterMode filtering) {
2188
+ // Simplify filtering when possible.
2189
+ filtering = ScaleFilterReduce(src_width, src_height, dst_width, dst_height,
2190
+ filtering);
2191
+
2192
+ // Negative height means invert the image.
2193
+ if (src_height < 0) {
2194
+ src_height = -src_height;
2195
+ src = src + (src_height - 1) * (int64_t)src_stride;
2196
+ src_stride = -src_stride;
2197
+ }
2198
+
2199
+ if ((dst_width + 1) / 2 == src_width && filtering == kFilterLinear) {
2200
+ ScalePlaneUp2_12_Linear(src_width, src_height, dst_width, dst_height,
2201
+ src_stride, dst_stride, src, dst);
2202
+ return 0;
2203
+ }
2204
+ if ((dst_height + 1) / 2 == src_height && (dst_width + 1) / 2 == src_width &&
2205
+ (filtering == kFilterBilinear || filtering == kFilterBox)) {
2206
+ ScalePlaneUp2_12_Bilinear(src_width, src_height, dst_width, dst_height,
2207
+ src_stride, dst_stride, src, dst);
2208
+ return 0;
2209
+ }
2210
+
2211
+ return ScalePlane_16(src, src_stride, src_width, src_height, dst, dst_stride,
2212
+ dst_width, dst_height, filtering);
2213
+ }
2214
+
2215
+ // Scale an I420 image.
2216
+ // This function in turn calls a scaling function for each plane.
2217
+
2218
+ LIBYUV_API
2219
+ int I420Scale(const uint8_t* src_y,
2220
+ int src_stride_y,
2221
+ const uint8_t* src_u,
2222
+ int src_stride_u,
2223
+ const uint8_t* src_v,
2224
+ int src_stride_v,
2225
+ int src_width,
2226
+ int src_height,
2227
+ uint8_t* dst_y,
2228
+ int dst_stride_y,
2229
+ uint8_t* dst_u,
2230
+ int dst_stride_u,
2231
+ uint8_t* dst_v,
2232
+ int dst_stride_v,
2233
+ int dst_width,
2234
+ int dst_height,
2235
+ enum FilterMode filtering) {
2236
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2237
+ int src_halfheight = SUBSAMPLE(src_height, 1, 1);
2238
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2239
+ int dst_halfheight = SUBSAMPLE(dst_height, 1, 1);
2240
+ int r;
2241
+
2242
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2243
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2244
+ dst_width <= 0 || dst_height <= 0) {
2245
+ return -1;
2246
+ }
2247
+
2248
+ r = ScalePlane(src_y, src_stride_y, src_width, src_height, dst_y,
2249
+ dst_stride_y, dst_width, dst_height, filtering);
2250
+ if (r != 0) {
2251
+ return r;
2252
+ }
2253
+ r = ScalePlane(src_u, src_stride_u, src_halfwidth, src_halfheight, dst_u,
2254
+ dst_stride_u, dst_halfwidth, dst_halfheight, filtering);
2255
+ if (r != 0) {
2256
+ return r;
2257
+ }
2258
+ r = ScalePlane(src_v, src_stride_v, src_halfwidth, src_halfheight, dst_v,
2259
+ dst_stride_v, dst_halfwidth, dst_halfheight, filtering);
2260
+ return r;
2261
+ }
2262
+
2263
+ LIBYUV_API
2264
+ int I420Scale_16(const uint16_t* src_y,
2265
+ int src_stride_y,
2266
+ const uint16_t* src_u,
2267
+ int src_stride_u,
2268
+ const uint16_t* src_v,
2269
+ int src_stride_v,
2270
+ int src_width,
2271
+ int src_height,
2272
+ uint16_t* dst_y,
2273
+ int dst_stride_y,
2274
+ uint16_t* dst_u,
2275
+ int dst_stride_u,
2276
+ uint16_t* dst_v,
2277
+ int dst_stride_v,
2278
+ int dst_width,
2279
+ int dst_height,
2280
+ enum FilterMode filtering) {
2281
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2282
+ int src_halfheight = SUBSAMPLE(src_height, 1, 1);
2283
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2284
+ int dst_halfheight = SUBSAMPLE(dst_height, 1, 1);
2285
+ int r;
2286
+
2287
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2288
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2289
+ dst_width <= 0 || dst_height <= 0) {
2290
+ return -1;
2291
+ }
2292
+
2293
+ r = ScalePlane_16(src_y, src_stride_y, src_width, src_height, dst_y,
2294
+ dst_stride_y, dst_width, dst_height, filtering);
2295
+ if (r != 0) {
2296
+ return r;
2297
+ }
2298
+ r = ScalePlane_16(src_u, src_stride_u, src_halfwidth, src_halfheight, dst_u,
2299
+ dst_stride_u, dst_halfwidth, dst_halfheight, filtering);
2300
+ if (r != 0) {
2301
+ return r;
2302
+ }
2303
+ r = ScalePlane_16(src_v, src_stride_v, src_halfwidth, src_halfheight, dst_v,
2304
+ dst_stride_v, dst_halfwidth, dst_halfheight, filtering);
2305
+ return r;
2306
+ }
2307
+
2308
+ LIBYUV_API
2309
+ int I420Scale_12(const uint16_t* src_y,
2310
+ int src_stride_y,
2311
+ const uint16_t* src_u,
2312
+ int src_stride_u,
2313
+ const uint16_t* src_v,
2314
+ int src_stride_v,
2315
+ int src_width,
2316
+ int src_height,
2317
+ uint16_t* dst_y,
2318
+ int dst_stride_y,
2319
+ uint16_t* dst_u,
2320
+ int dst_stride_u,
2321
+ uint16_t* dst_v,
2322
+ int dst_stride_v,
2323
+ int dst_width,
2324
+ int dst_height,
2325
+ enum FilterMode filtering) {
2326
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2327
+ int src_halfheight = SUBSAMPLE(src_height, 1, 1);
2328
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2329
+ int dst_halfheight = SUBSAMPLE(dst_height, 1, 1);
2330
+ int r;
2331
+
2332
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2333
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2334
+ dst_width <= 0 || dst_height <= 0) {
2335
+ return -1;
2336
+ }
2337
+
2338
+ r = ScalePlane_12(src_y, src_stride_y, src_width, src_height, dst_y,
2339
+ dst_stride_y, dst_width, dst_height, filtering);
2340
+ if (r != 0) {
2341
+ return r;
2342
+ }
2343
+ r = ScalePlane_12(src_u, src_stride_u, src_halfwidth, src_halfheight, dst_u,
2344
+ dst_stride_u, dst_halfwidth, dst_halfheight, filtering);
2345
+ if (r != 0) {
2346
+ return r;
2347
+ }
2348
+ r = ScalePlane_12(src_v, src_stride_v, src_halfwidth, src_halfheight, dst_v,
2349
+ dst_stride_v, dst_halfwidth, dst_halfheight, filtering);
2350
+ return r;
2351
+ }
2352
+
2353
+ // Scale an I444 image.
2354
+ // This function in turn calls a scaling function for each plane.
2355
+
2356
+ LIBYUV_API
2357
+ int I444Scale(const uint8_t* src_y,
2358
+ int src_stride_y,
2359
+ const uint8_t* src_u,
2360
+ int src_stride_u,
2361
+ const uint8_t* src_v,
2362
+ int src_stride_v,
2363
+ int src_width,
2364
+ int src_height,
2365
+ uint8_t* dst_y,
2366
+ int dst_stride_y,
2367
+ uint8_t* dst_u,
2368
+ int dst_stride_u,
2369
+ uint8_t* dst_v,
2370
+ int dst_stride_v,
2371
+ int dst_width,
2372
+ int dst_height,
2373
+ enum FilterMode filtering) {
2374
+ int r;
2375
+
2376
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2377
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2378
+ dst_width <= 0 || dst_height <= 0) {
2379
+ return -1;
2380
+ }
2381
+
2382
+ r = ScalePlane(src_y, src_stride_y, src_width, src_height, dst_y,
2383
+ dst_stride_y, dst_width, dst_height, filtering);
2384
+ if (r != 0) {
2385
+ return r;
2386
+ }
2387
+ r = ScalePlane(src_u, src_stride_u, src_width, src_height, dst_u,
2388
+ dst_stride_u, dst_width, dst_height, filtering);
2389
+ if (r != 0) {
2390
+ return r;
2391
+ }
2392
+ r = ScalePlane(src_v, src_stride_v, src_width, src_height, dst_v,
2393
+ dst_stride_v, dst_width, dst_height, filtering);
2394
+ return r;
2395
+ }
2396
+
2397
+ LIBYUV_API
2398
+ int I444Scale_16(const uint16_t* src_y,
2399
+ int src_stride_y,
2400
+ const uint16_t* src_u,
2401
+ int src_stride_u,
2402
+ const uint16_t* src_v,
2403
+ int src_stride_v,
2404
+ int src_width,
2405
+ int src_height,
2406
+ uint16_t* dst_y,
2407
+ int dst_stride_y,
2408
+ uint16_t* dst_u,
2409
+ int dst_stride_u,
2410
+ uint16_t* dst_v,
2411
+ int dst_stride_v,
2412
+ int dst_width,
2413
+ int dst_height,
2414
+ enum FilterMode filtering) {
2415
+ int r;
2416
+
2417
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2418
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2419
+ dst_width <= 0 || dst_height <= 0) {
2420
+ return -1;
2421
+ }
2422
+
2423
+ r = ScalePlane_16(src_y, src_stride_y, src_width, src_height, dst_y,
2424
+ dst_stride_y, dst_width, dst_height, filtering);
2425
+ if (r != 0) {
2426
+ return r;
2427
+ }
2428
+ r = ScalePlane_16(src_u, src_stride_u, src_width, src_height, dst_u,
2429
+ dst_stride_u, dst_width, dst_height, filtering);
2430
+ if (r != 0) {
2431
+ return r;
2432
+ }
2433
+ r = ScalePlane_16(src_v, src_stride_v, src_width, src_height, dst_v,
2434
+ dst_stride_v, dst_width, dst_height, filtering);
2435
+ return r;
2436
+ }
2437
+
2438
+ LIBYUV_API
2439
+ int I444Scale_12(const uint16_t* src_y,
2440
+ int src_stride_y,
2441
+ const uint16_t* src_u,
2442
+ int src_stride_u,
2443
+ const uint16_t* src_v,
2444
+ int src_stride_v,
2445
+ int src_width,
2446
+ int src_height,
2447
+ uint16_t* dst_y,
2448
+ int dst_stride_y,
2449
+ uint16_t* dst_u,
2450
+ int dst_stride_u,
2451
+ uint16_t* dst_v,
2452
+ int dst_stride_v,
2453
+ int dst_width,
2454
+ int dst_height,
2455
+ enum FilterMode filtering) {
2456
+ int r;
2457
+
2458
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2459
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2460
+ dst_width <= 0 || dst_height <= 0) {
2461
+ return -1;
2462
+ }
2463
+
2464
+ r = ScalePlane_12(src_y, src_stride_y, src_width, src_height, dst_y,
2465
+ dst_stride_y, dst_width, dst_height, filtering);
2466
+ if (r != 0) {
2467
+ return r;
2468
+ }
2469
+ r = ScalePlane_12(src_u, src_stride_u, src_width, src_height, dst_u,
2470
+ dst_stride_u, dst_width, dst_height, filtering);
2471
+ if (r != 0) {
2472
+ return r;
2473
+ }
2474
+ r = ScalePlane_12(src_v, src_stride_v, src_width, src_height, dst_v,
2475
+ dst_stride_v, dst_width, dst_height, filtering);
2476
+ return r;
2477
+ }
2478
+
2479
+ // Scale an I422 image.
2480
+ // This function in turn calls a scaling function for each plane.
2481
+
2482
+ LIBYUV_API
2483
+ int I422Scale(const uint8_t* src_y,
2484
+ int src_stride_y,
2485
+ const uint8_t* src_u,
2486
+ int src_stride_u,
2487
+ const uint8_t* src_v,
2488
+ int src_stride_v,
2489
+ int src_width,
2490
+ int src_height,
2491
+ uint8_t* dst_y,
2492
+ int dst_stride_y,
2493
+ uint8_t* dst_u,
2494
+ int dst_stride_u,
2495
+ uint8_t* dst_v,
2496
+ int dst_stride_v,
2497
+ int dst_width,
2498
+ int dst_height,
2499
+ enum FilterMode filtering) {
2500
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2501
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2502
+ int r;
2503
+
2504
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2505
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2506
+ dst_width <= 0 || dst_height <= 0) {
2507
+ return -1;
2508
+ }
2509
+
2510
+ r = ScalePlane(src_y, src_stride_y, src_width, src_height, dst_y,
2511
+ dst_stride_y, dst_width, dst_height, filtering);
2512
+ if (r != 0) {
2513
+ return r;
2514
+ }
2515
+ r = ScalePlane(src_u, src_stride_u, src_halfwidth, src_height, dst_u,
2516
+ dst_stride_u, dst_halfwidth, dst_height, filtering);
2517
+ if (r != 0) {
2518
+ return r;
2519
+ }
2520
+ r = ScalePlane(src_v, src_stride_v, src_halfwidth, src_height, dst_v,
2521
+ dst_stride_v, dst_halfwidth, dst_height, filtering);
2522
+ return r;
2523
+ }
2524
+
2525
+ LIBYUV_API
2526
+ int I422Scale_16(const uint16_t* src_y,
2527
+ int src_stride_y,
2528
+ const uint16_t* src_u,
2529
+ int src_stride_u,
2530
+ const uint16_t* src_v,
2531
+ int src_stride_v,
2532
+ int src_width,
2533
+ int src_height,
2534
+ uint16_t* dst_y,
2535
+ int dst_stride_y,
2536
+ uint16_t* dst_u,
2537
+ int dst_stride_u,
2538
+ uint16_t* dst_v,
2539
+ int dst_stride_v,
2540
+ int dst_width,
2541
+ int dst_height,
2542
+ enum FilterMode filtering) {
2543
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2544
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2545
+ int r;
2546
+
2547
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2548
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2549
+ dst_width <= 0 || dst_height <= 0) {
2550
+ return -1;
2551
+ }
2552
+
2553
+ r = ScalePlane_16(src_y, src_stride_y, src_width, src_height, dst_y,
2554
+ dst_stride_y, dst_width, dst_height, filtering);
2555
+ if (r != 0) {
2556
+ return r;
2557
+ }
2558
+ r = ScalePlane_16(src_u, src_stride_u, src_halfwidth, src_height, dst_u,
2559
+ dst_stride_u, dst_halfwidth, dst_height, filtering);
2560
+ if (r != 0) {
2561
+ return r;
2562
+ }
2563
+ r = ScalePlane_16(src_v, src_stride_v, src_halfwidth, src_height, dst_v,
2564
+ dst_stride_v, dst_halfwidth, dst_height, filtering);
2565
+ return r;
2566
+ }
2567
+
2568
+ LIBYUV_API
2569
+ int I422Scale_12(const uint16_t* src_y,
2570
+ int src_stride_y,
2571
+ const uint16_t* src_u,
2572
+ int src_stride_u,
2573
+ const uint16_t* src_v,
2574
+ int src_stride_v,
2575
+ int src_width,
2576
+ int src_height,
2577
+ uint16_t* dst_y,
2578
+ int dst_stride_y,
2579
+ uint16_t* dst_u,
2580
+ int dst_stride_u,
2581
+ uint16_t* dst_v,
2582
+ int dst_stride_v,
2583
+ int dst_width,
2584
+ int dst_height,
2585
+ enum FilterMode filtering) {
2586
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2587
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2588
+ int r;
2589
+
2590
+ if (!src_y || !src_u || !src_v || src_width <= 0 || src_height == 0 ||
2591
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_u || !dst_v ||
2592
+ dst_width <= 0 || dst_height <= 0) {
2593
+ return -1;
2594
+ }
2595
+
2596
+ r = ScalePlane_12(src_y, src_stride_y, src_width, src_height, dst_y,
2597
+ dst_stride_y, dst_width, dst_height, filtering);
2598
+ if (r != 0) {
2599
+ return r;
2600
+ }
2601
+ r = ScalePlane_12(src_u, src_stride_u, src_halfwidth, src_height, dst_u,
2602
+ dst_stride_u, dst_halfwidth, dst_height, filtering);
2603
+ if (r != 0) {
2604
+ return r;
2605
+ }
2606
+ r = ScalePlane_12(src_v, src_stride_v, src_halfwidth, src_height, dst_v,
2607
+ dst_stride_v, dst_halfwidth, dst_height, filtering);
2608
+ return r;
2609
+ }
2610
+
2611
+ // Scale an NV12 image.
2612
+ // This function in turn calls a scaling function for each plane.
2613
+
2614
+ LIBYUV_API
2615
+ int NV12Scale(const uint8_t* src_y,
2616
+ int src_stride_y,
2617
+ const uint8_t* src_uv,
2618
+ int src_stride_uv,
2619
+ int src_width,
2620
+ int src_height,
2621
+ uint8_t* dst_y,
2622
+ int dst_stride_y,
2623
+ uint8_t* dst_uv,
2624
+ int dst_stride_uv,
2625
+ int dst_width,
2626
+ int dst_height,
2627
+ enum FilterMode filtering) {
2628
+ int src_halfwidth = SUBSAMPLE(src_width, 1, 1);
2629
+ int src_halfheight = SUBSAMPLE(src_height, 1, 1);
2630
+ int dst_halfwidth = SUBSAMPLE(dst_width, 1, 1);
2631
+ int dst_halfheight = SUBSAMPLE(dst_height, 1, 1);
2632
+ int r;
2633
+
2634
+ if (!src_y || !src_uv || src_width <= 0 || src_height == 0 ||
2635
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_uv ||
2636
+ dst_width <= 0 || dst_height <= 0) {
2637
+ return -1;
2638
+ }
2639
+
2640
+ r = ScalePlane(src_y, src_stride_y, src_width, src_height, dst_y,
2641
+ dst_stride_y, dst_width, dst_height, filtering);
2642
+ if (r != 0) {
2643
+ return r;
2644
+ }
2645
+ r = UVScale(src_uv, src_stride_uv, src_halfwidth, src_halfheight, dst_uv,
2646
+ dst_stride_uv, dst_halfwidth, dst_halfheight, filtering);
2647
+ return r;
2648
+ }
2649
+
2650
+ LIBYUV_API
2651
+ int NV24Scale(const uint8_t* src_y,
2652
+ int src_stride_y,
2653
+ const uint8_t* src_uv,
2654
+ int src_stride_uv,
2655
+ int src_width,
2656
+ int src_height,
2657
+ uint8_t* dst_y,
2658
+ int dst_stride_y,
2659
+ uint8_t* dst_uv,
2660
+ int dst_stride_uv,
2661
+ int dst_width,
2662
+ int dst_height,
2663
+ enum FilterMode filtering) {
2664
+ int r;
2665
+
2666
+ if (!src_y || !src_uv || src_width <= 0 || src_height == 0 ||
2667
+ src_width > 32768 || src_height > 32768 || !dst_y || !dst_uv ||
2668
+ dst_width <= 0 || dst_height <= 0) {
2669
+ return -1;
2670
+ }
2671
+
2672
+ r = ScalePlane(src_y, src_stride_y, src_width, src_height, dst_y,
2673
+ dst_stride_y, dst_width, dst_height, filtering);
2674
+ if (r != 0) {
2675
+ return r;
2676
+ }
2677
+ r = UVScale(src_uv, src_stride_uv, src_width, src_height, dst_uv,
2678
+ dst_stride_uv, dst_width, dst_height, filtering);
2679
+ return r;
2680
+ }
2681
+
2682
+ // Deprecated api
2683
+ LIBYUV_API
2684
+ int Scale(const uint8_t* src_y,
2685
+ const uint8_t* src_u,
2686
+ const uint8_t* src_v,
2687
+ int src_stride_y,
2688
+ int src_stride_u,
2689
+ int src_stride_v,
2690
+ int src_width,
2691
+ int src_height,
2692
+ uint8_t* dst_y,
2693
+ uint8_t* dst_u,
2694
+ uint8_t* dst_v,
2695
+ int dst_stride_y,
2696
+ int dst_stride_u,
2697
+ int dst_stride_v,
2698
+ int dst_width,
2699
+ int dst_height,
2700
+ LIBYUV_BOOL interpolate) {
2701
+ return I420Scale(src_y, src_stride_y, src_u, src_stride_u, src_v,
2702
+ src_stride_v, src_width, src_height, dst_y, dst_stride_y,
2703
+ dst_u, dst_stride_u, dst_v, dst_stride_v, dst_width,
2704
+ dst_height, interpolate ? kFilterBox : kFilterNone);
2705
+ }
2706
+
2707
+ #ifdef __cplusplus
2708
+ } // extern "C"
2709
+ } // namespace libyuv
2710
+ #endif