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,2867 @@
1
+ /*
2
+ * Copyright 2023 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 <assert.h>
12
+ #include <stdlib.h>
13
+ #include <time.h>
14
+
15
+ #include "../unit_test/unit_test.h"
16
+ #include "libyuv/basic_types.h"
17
+ #include "libyuv/compare.h"
18
+ #include "libyuv/convert.h"
19
+ #include "libyuv/convert_argb.h"
20
+ #include "libyuv/convert_from.h"
21
+ #include "libyuv/convert_from_argb.h"
22
+ #include "libyuv/cpu_id.h"
23
+ #include "libyuv/planar_functions.h"
24
+ #include "libyuv/rotate.h"
25
+ #include "libyuv/video_common.h"
26
+
27
+ #ifdef ENABLE_ROW_TESTS
28
+ #include "libyuv/row.h" /* For ARGBToAR30Row_AVX2 */
29
+ #endif
30
+
31
+ #if defined(__riscv) && !defined(__clang__)
32
+ #define DISABLE_SLOW_TESTS
33
+ #undef ENABLE_FULL_TESTS
34
+ #undef ENABLE_ROW_TESTS
35
+ #define LEAN_TESTS
36
+ #endif
37
+
38
+ // Some functions fail on big endian. Enable these tests on all cpus except
39
+ // PowerPC, but they are not optimized so disabled by default.
40
+ #if !defined(DISABLE_SLOW_TESTS) && !defined(__powerpc__)
41
+ #define LITTLE_ENDIAN_ONLY_TEST 1
42
+ #endif
43
+ #if !defined(DISABLE_SLOW_TESTS) || defined(__x86_64__) || defined(__i386__)
44
+ // SLOW TESTS are those that are unoptimized C code.
45
+ // FULL TESTS are optimized but test many variations of the same code.
46
+ #define ENABLE_FULL_TESTS
47
+ #endif
48
+
49
+ namespace libyuv {
50
+
51
+ // Alias to copy pixels as is
52
+ #define AR30ToAR30 ARGBCopy
53
+ #define ABGRToABGR ARGBCopy
54
+
55
+ // subsample amount uses a divide.
56
+ #define SUBSAMPLE(v, a) ((((v) + (a)-1)) / (a))
57
+
58
+ #define ALIGNINT(V, ALIGN) (((V) + (ALIGN)-1) / (ALIGN) * (ALIGN))
59
+
60
+ #define TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
61
+ SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
62
+ DST_SUBSAMP_Y, W1280, N, NEG, OFF, SRC_DEPTH, TILE_WIDTH, \
63
+ TILE_HEIGHT) \
64
+ TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##N) { \
65
+ static_assert(SRC_BPC == 1 || SRC_BPC == 2, "SRC BPC unsupported"); \
66
+ static_assert(DST_BPC == 1 || DST_BPC == 2, "DST BPC unsupported"); \
67
+ static_assert(SRC_SUBSAMP_X == 1 || SRC_SUBSAMP_X == 2, \
68
+ "SRC_SUBSAMP_X unsupported"); \
69
+ static_assert(SRC_SUBSAMP_Y == 1 || SRC_SUBSAMP_Y == 2, \
70
+ "SRC_SUBSAMP_Y unsupported"); \
71
+ static_assert(DST_SUBSAMP_X == 1 || DST_SUBSAMP_X == 2, \
72
+ "DST_SUBSAMP_X unsupported"); \
73
+ static_assert(DST_SUBSAMP_Y == 1 || DST_SUBSAMP_Y == 2, \
74
+ "DST_SUBSAMP_Y unsupported"); \
75
+ const int kWidth = W1280; \
76
+ const int kHeight = benchmark_height_; \
77
+ const int kSrcHalfWidth = SUBSAMPLE(kWidth, SRC_SUBSAMP_X); \
78
+ const int kDstHalfWidth = SUBSAMPLE(kWidth, DST_SUBSAMP_X); \
79
+ const int kDstHalfHeight = SUBSAMPLE(kHeight, DST_SUBSAMP_Y); \
80
+ const int kPaddedWidth = (kWidth + (TILE_WIDTH - 1)) & ~(TILE_WIDTH - 1); \
81
+ const int kPaddedHeight = \
82
+ (kHeight + (TILE_HEIGHT - 1)) & ~(TILE_HEIGHT - 1); \
83
+ const int kSrcHalfPaddedWidth = SUBSAMPLE(kPaddedWidth, SRC_SUBSAMP_X); \
84
+ const int kSrcHalfPaddedHeight = SUBSAMPLE(kPaddedHeight, SRC_SUBSAMP_Y); \
85
+ align_buffer_page_end(src_y, kPaddedWidth* kPaddedHeight* SRC_BPC + OFF); \
86
+ align_buffer_page_end( \
87
+ src_uv, kSrcHalfPaddedWidth* kSrcHalfPaddedHeight* SRC_BPC * 2 + OFF); \
88
+ align_buffer_page_end(dst_y_c, kWidth* kHeight* DST_BPC); \
89
+ align_buffer_page_end(dst_u_c, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
90
+ align_buffer_page_end(dst_v_c, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
91
+ align_buffer_page_end(dst_y_opt, kWidth* kHeight* DST_BPC); \
92
+ align_buffer_page_end(dst_u_opt, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
93
+ align_buffer_page_end(dst_v_opt, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
94
+ SRC_T* src_y_p = reinterpret_cast<SRC_T*>(src_y + OFF); \
95
+ SRC_T* src_uv_p = reinterpret_cast<SRC_T*>(src_uv + OFF); \
96
+ for (int i = 0; i < kPaddedWidth * kPaddedHeight; ++i) { \
97
+ src_y_p[i] = \
98
+ (fastrand() & (((SRC_T)(-1)) << ((8 * SRC_BPC) - SRC_DEPTH))); \
99
+ } \
100
+ for (int i = 0; i < kSrcHalfPaddedWidth * kSrcHalfPaddedHeight * 2; ++i) { \
101
+ src_uv_p[i] = \
102
+ (fastrand() & (((SRC_T)(-1)) << ((8 * SRC_BPC) - SRC_DEPTH))); \
103
+ } \
104
+ memset(dst_y_c, 1, kWidth* kHeight* DST_BPC); \
105
+ memset(dst_u_c, 2, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
106
+ memset(dst_v_c, 3, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
107
+ memset(dst_y_opt, 101, kWidth* kHeight* DST_BPC); \
108
+ memset(dst_u_opt, 102, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
109
+ memset(dst_v_opt, 103, kDstHalfWidth* kDstHalfHeight* DST_BPC); \
110
+ MaskCpuFlags(disable_cpu_flags_); \
111
+ SRC_FMT_PLANAR##To##FMT_PLANAR( \
112
+ src_y_p, kWidth, src_uv_p, kSrcHalfWidth * 2, \
113
+ reinterpret_cast<DST_T*>(dst_y_c), kWidth, \
114
+ reinterpret_cast<DST_T*>(dst_u_c), kDstHalfWidth, \
115
+ reinterpret_cast<DST_T*>(dst_v_c), kDstHalfWidth, kWidth, \
116
+ NEG kHeight); \
117
+ MaskCpuFlags(benchmark_cpu_info_); \
118
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
119
+ SRC_FMT_PLANAR##To##FMT_PLANAR( \
120
+ src_y_p, kWidth, src_uv_p, kSrcHalfWidth * 2, \
121
+ reinterpret_cast<DST_T*>(dst_y_opt), kWidth, \
122
+ reinterpret_cast<DST_T*>(dst_u_opt), kDstHalfWidth, \
123
+ reinterpret_cast<DST_T*>(dst_v_opt), kDstHalfWidth, kWidth, \
124
+ NEG kHeight); \
125
+ } \
126
+ for (int i = 0; i < kHeight * kWidth * DST_BPC; ++i) { \
127
+ EXPECT_EQ(dst_y_c[i], dst_y_opt[i]); \
128
+ } \
129
+ for (int i = 0; i < kDstHalfWidth * kDstHalfHeight * DST_BPC; ++i) { \
130
+ EXPECT_EQ(dst_u_c[i], dst_u_opt[i]); \
131
+ EXPECT_EQ(dst_v_c[i], dst_v_opt[i]); \
132
+ } \
133
+ free_aligned_buffer_page_end(dst_y_c); \
134
+ free_aligned_buffer_page_end(dst_u_c); \
135
+ free_aligned_buffer_page_end(dst_v_c); \
136
+ free_aligned_buffer_page_end(dst_y_opt); \
137
+ free_aligned_buffer_page_end(dst_u_opt); \
138
+ free_aligned_buffer_page_end(dst_v_opt); \
139
+ free_aligned_buffer_page_end(src_y); \
140
+ free_aligned_buffer_page_end(src_uv); \
141
+ }
142
+
143
+ #if defined(ENABLE_FULL_TESTS)
144
+ #define TESTBPTOP(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
145
+ SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
146
+ DST_SUBSAMP_Y, SRC_DEPTH, TILE_WIDTH, TILE_HEIGHT) \
147
+ TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
148
+ FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
149
+ benchmark_width_ + 1, _Any, +, 0, SRC_DEPTH, TILE_WIDTH, \
150
+ TILE_HEIGHT) \
151
+ TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
152
+ FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
153
+ benchmark_width_, _Unaligned, +, 2, SRC_DEPTH, TILE_WIDTH, \
154
+ TILE_HEIGHT) \
155
+ TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
156
+ FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
157
+ benchmark_width_, _Invert, -, 0, SRC_DEPTH, TILE_WIDTH, \
158
+ TILE_HEIGHT) \
159
+ TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
160
+ FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
161
+ benchmark_width_, _Opt, +, 0, SRC_DEPTH, TILE_WIDTH, TILE_HEIGHT)
162
+ #else
163
+ #define TESTBPTOP(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
164
+ SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
165
+ DST_SUBSAMP_Y, SRC_DEPTH, TILE_WIDTH, TILE_HEIGHT) \
166
+ TESTBPTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
167
+ FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
168
+ benchmark_width_, _Opt, +, 0, SRC_DEPTH, TILE_WIDTH, TILE_HEIGHT)
169
+ #endif
170
+
171
+ TESTBPTOP(NV12, uint8_t, 1, 2, 2, I420, uint8_t, 1, 2, 2, 8, 1, 1)
172
+ TESTBPTOP(NV21, uint8_t, 1, 2, 2, I420, uint8_t, 1, 2, 2, 8, 1, 1)
173
+ TESTBPTOP(MM21, uint8_t, 1, 2, 2, I420, uint8_t, 1, 2, 2, 8, 16, 32)
174
+ TESTBPTOP(P010, uint16_t, 2, 2, 2, I010, uint16_t, 2, 2, 2, 10, 1, 1)
175
+ TESTBPTOP(P012, uint16_t, 2, 2, 2, I012, uint16_t, 2, 2, 2, 12, 1, 1)
176
+
177
+ // Provide matrix wrappers for full range bt.709
178
+ #define F420ToABGR(a, b, c, d, e, f, g, h, i, j) \
179
+ I420ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuF709Constants, i, j)
180
+ #define F420ToARGB(a, b, c, d, e, f, g, h, i, j) \
181
+ I420ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvF709Constants, i, j)
182
+ #define F422ToABGR(a, b, c, d, e, f, g, h, i, j) \
183
+ I422ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuF709Constants, i, j)
184
+ #define F422ToARGB(a, b, c, d, e, f, g, h, i, j) \
185
+ I422ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvF709Constants, i, j)
186
+ #define F444ToABGR(a, b, c, d, e, f, g, h, i, j) \
187
+ I444ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuF709Constants, i, j)
188
+ #define F444ToARGB(a, b, c, d, e, f, g, h, i, j) \
189
+ I444ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvF709Constants, i, j)
190
+
191
+ // Provide matrix wrappers for full range bt.2020
192
+ #define V420ToABGR(a, b, c, d, e, f, g, h, i, j) \
193
+ I420ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuV2020Constants, i, j)
194
+ #define V420ToARGB(a, b, c, d, e, f, g, h, i, j) \
195
+ I420ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvV2020Constants, i, j)
196
+ #define V422ToABGR(a, b, c, d, e, f, g, h, i, j) \
197
+ I422ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuV2020Constants, i, j)
198
+ #define V422ToARGB(a, b, c, d, e, f, g, h, i, j) \
199
+ I422ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvV2020Constants, i, j)
200
+ #define V444ToABGR(a, b, c, d, e, f, g, h, i, j) \
201
+ I444ToARGBMatrix(a, b, e, f, c, d, g, h, &kYvuV2020Constants, i, j)
202
+ #define V444ToARGB(a, b, c, d, e, f, g, h, i, j) \
203
+ I444ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvV2020Constants, i, j)
204
+
205
+ #define I420ToARGBFilter(a, b, c, d, e, f, g, h, i, j) \
206
+ I420ToARGBMatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
207
+ kFilterBilinear)
208
+ #define I422ToARGBFilter(a, b, c, d, e, f, g, h, i, j) \
209
+ I422ToARGBMatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
210
+ kFilterBilinear)
211
+ #define I420ToRGB24Filter(a, b, c, d, e, f, g, h, i, j) \
212
+ I420ToRGB24MatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
213
+ kFilterBilinear)
214
+ #define I422ToRGB24Filter(a, b, c, d, e, f, g, h, i, j) \
215
+ I420ToRGB24MatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
216
+ kFilterBilinear)
217
+
218
+ #define TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
219
+ YALIGN, W1280, N, NEG, OFF) \
220
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
221
+ const int kWidth = W1280; \
222
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
223
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
224
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
225
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
226
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
227
+ align_buffer_page_end(src_u, kSizeUV + OFF); \
228
+ align_buffer_page_end(src_v, kSizeUV + OFF); \
229
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + OFF); \
230
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + OFF); \
231
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
232
+ src_y[i + OFF] = (fastrand() & 0xff); \
233
+ } \
234
+ for (int i = 0; i < kSizeUV; ++i) { \
235
+ src_u[i + OFF] = (fastrand() & 0xff); \
236
+ src_v[i + OFF] = (fastrand() & 0xff); \
237
+ } \
238
+ memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \
239
+ memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \
240
+ MaskCpuFlags(disable_cpu_flags_); \
241
+ double time0 = get_time(); \
242
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
243
+ src_v + OFF, kStrideUV, dst_argb_c + OFF, kStrideB, \
244
+ kWidth, NEG kHeight); \
245
+ double time1 = get_time(); \
246
+ MaskCpuFlags(benchmark_cpu_info_); \
247
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
248
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
249
+ src_v + OFF, kStrideUV, dst_argb_opt + OFF, \
250
+ kStrideB, kWidth, NEG kHeight); \
251
+ } \
252
+ double time2 = get_time(); \
253
+ printf(" %8d us C - %8d us OPT\n", \
254
+ static_cast<int>((time1 - time0) * 1e6), \
255
+ static_cast<int>((time2 - time1) * 1e6 / benchmark_iterations_)); \
256
+ for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \
257
+ EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_opt[i + OFF]); \
258
+ } \
259
+ free_aligned_buffer_page_end(src_y); \
260
+ free_aligned_buffer_page_end(src_u); \
261
+ free_aligned_buffer_page_end(src_v); \
262
+ free_aligned_buffer_page_end(dst_argb_c); \
263
+ free_aligned_buffer_page_end(dst_argb_opt); \
264
+ }
265
+
266
+ #if defined(ENABLE_FULL_TESTS)
267
+ #define TESTPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
268
+ YALIGN) \
269
+ TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
270
+ YALIGN, benchmark_width_ + 1, _Any, +, 0) \
271
+ TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
272
+ YALIGN, benchmark_width_, _Unaligned, +, 4) \
273
+ TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
274
+ YALIGN, benchmark_width_, _Invert, -, 0) \
275
+ TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
276
+ YALIGN, benchmark_width_, _Opt, +, 0)
277
+ #else
278
+ #define TESTPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
279
+ YALIGN) \
280
+ TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
281
+ YALIGN, benchmark_width_, _Opt, +, 0)
282
+ #endif
283
+
284
+ #if defined(ENABLE_FULL_TESTS)
285
+ TESTPLANARTOB(I420, 2, 2, ARGB, 4, 4, 1)
286
+ TESTPLANARTOB(I420, 2, 2, ABGR, 4, 4, 1)
287
+ TESTPLANARTOB(J420, 2, 2, ARGB, 4, 4, 1)
288
+ TESTPLANARTOB(J420, 2, 2, ABGR, 4, 4, 1)
289
+ TESTPLANARTOB(F420, 2, 2, ARGB, 4, 4, 1)
290
+ TESTPLANARTOB(F420, 2, 2, ABGR, 4, 4, 1)
291
+ TESTPLANARTOB(H420, 2, 2, ARGB, 4, 4, 1)
292
+ TESTPLANARTOB(H420, 2, 2, ABGR, 4, 4, 1)
293
+ TESTPLANARTOB(U420, 2, 2, ARGB, 4, 4, 1)
294
+ TESTPLANARTOB(U420, 2, 2, ABGR, 4, 4, 1)
295
+ TESTPLANARTOB(V420, 2, 2, ARGB, 4, 4, 1)
296
+ TESTPLANARTOB(V420, 2, 2, ABGR, 4, 4, 1)
297
+ TESTPLANARTOB(I420, 2, 2, BGRA, 4, 4, 1)
298
+ TESTPLANARTOB(I420, 2, 2, RGBA, 4, 4, 1)
299
+ TESTPLANARTOB(I420, 2, 2, RAW, 3, 3, 1)
300
+ TESTPLANARTOB(I420, 2, 2, RGB24, 3, 3, 1)
301
+ TESTPLANARTOB(J420, 2, 2, RAW, 3, 3, 1)
302
+ TESTPLANARTOB(J420, 2, 2, RGB24, 3, 3, 1)
303
+ TESTPLANARTOB(H420, 2, 2, RAW, 3, 3, 1)
304
+ TESTPLANARTOB(H420, 2, 2, RGB24, 3, 3, 1)
305
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
306
+ TESTPLANARTOB(I420, 2, 2, RGB565, 2, 2, 1)
307
+ TESTPLANARTOB(J420, 2, 2, RGB565, 2, 2, 1)
308
+ TESTPLANARTOB(H420, 2, 2, RGB565, 2, 2, 1)
309
+ TESTPLANARTOB(I420, 2, 2, ARGB1555, 2, 2, 1)
310
+ TESTPLANARTOB(I420, 2, 2, ARGB4444, 2, 2, 1)
311
+ TESTPLANARTOB(I422, 2, 1, RGB565, 2, 2, 1)
312
+ #endif
313
+ TESTPLANARTOB(I422, 2, 1, ARGB, 4, 4, 1)
314
+ TESTPLANARTOB(I422, 2, 1, ABGR, 4, 4, 1)
315
+ TESTPLANARTOB(J422, 2, 1, ARGB, 4, 4, 1)
316
+ TESTPLANARTOB(J422, 2, 1, ABGR, 4, 4, 1)
317
+ TESTPLANARTOB(H422, 2, 1, ARGB, 4, 4, 1)
318
+ TESTPLANARTOB(H422, 2, 1, ABGR, 4, 4, 1)
319
+ TESTPLANARTOB(U422, 2, 1, ARGB, 4, 4, 1)
320
+ TESTPLANARTOB(U422, 2, 1, ABGR, 4, 4, 1)
321
+ TESTPLANARTOB(V422, 2, 1, ARGB, 4, 4, 1)
322
+ TESTPLANARTOB(V422, 2, 1, ABGR, 4, 4, 1)
323
+ TESTPLANARTOB(I422, 2, 1, BGRA, 4, 4, 1)
324
+ TESTPLANARTOB(I422, 2, 1, RGBA, 4, 4, 1)
325
+ TESTPLANARTOB(I422, 1, 1, RGB24, 3, 3, 1)
326
+ TESTPLANARTOB(I422, 1, 1, RAW, 3, 3, 1)
327
+ TESTPLANARTOB(I444, 1, 1, ARGB, 4, 4, 1)
328
+ TESTPLANARTOB(I444, 1, 1, ABGR, 4, 4, 1)
329
+ TESTPLANARTOB(I444, 1, 1, RGB24, 3, 3, 1)
330
+ TESTPLANARTOB(I444, 1, 1, RAW, 3, 3, 1)
331
+ TESTPLANARTOB(J444, 1, 1, ARGB, 4, 4, 1)
332
+ TESTPLANARTOB(J444, 1, 1, ABGR, 4, 4, 1)
333
+ TESTPLANARTOB(H444, 1, 1, ARGB, 4, 4, 1)
334
+ TESTPLANARTOB(H444, 1, 1, ABGR, 4, 4, 1)
335
+ TESTPLANARTOB(U444, 1, 1, ARGB, 4, 4, 1)
336
+ TESTPLANARTOB(U444, 1, 1, ABGR, 4, 4, 1)
337
+ TESTPLANARTOB(V444, 1, 1, ARGB, 4, 4, 1)
338
+ TESTPLANARTOB(V444, 1, 1, ABGR, 4, 4, 1)
339
+ TESTPLANARTOB(I420, 2, 2, YUY2, 2, 4, 1)
340
+ TESTPLANARTOB(I420, 2, 2, UYVY, 2, 4, 1)
341
+ TESTPLANARTOB(I422, 2, 1, YUY2, 2, 4, 1)
342
+ TESTPLANARTOB(I422, 2, 1, UYVY, 2, 4, 1)
343
+ TESTPLANARTOB(I420, 2, 2, I400, 1, 1, 1)
344
+ TESTPLANARTOB(J420, 2, 2, J400, 1, 1, 1)
345
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
346
+ TESTPLANARTOB(I420, 2, 2, AR30, 4, 4, 1)
347
+ TESTPLANARTOB(H420, 2, 2, AR30, 4, 4, 1)
348
+ TESTPLANARTOB(I420, 2, 2, AB30, 4, 4, 1)
349
+ TESTPLANARTOB(H420, 2, 2, AB30, 4, 4, 1)
350
+ #endif
351
+ TESTPLANARTOB(I420, 2, 2, ARGBFilter, 4, 4, 1)
352
+ TESTPLANARTOB(I422, 2, 1, ARGBFilter, 4, 4, 1)
353
+ TESTPLANARTOB(I420, 2, 2, RGB24Filter, 3, 3, 1)
354
+ TESTPLANARTOB(I422, 2, 2, RGB24Filter, 3, 3, 1)
355
+ #else // FULL_TESTS
356
+ TESTPLANARTOB(I420, 2, 2, ABGR, 4, 4, 1)
357
+ TESTPLANARTOB(I420, 2, 2, ARGB, 4, 4, 1)
358
+ TESTPLANARTOB(I420, 2, 2, BGRA, 4, 4, 1)
359
+ TESTPLANARTOB(I420, 2, 2, RAW, 3, 3, 1)
360
+ TESTPLANARTOB(I420, 2, 2, RGB24, 3, 3, 1)
361
+ TESTPLANARTOB(I420, 2, 2, RGBA, 4, 4, 1)
362
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
363
+ TESTPLANARTOB(I420, 2, 2, RGB565, 2, 2, 1)
364
+ TESTPLANARTOB(I420, 2, 2, ARGB1555, 2, 2, 1)
365
+ TESTPLANARTOB(I420, 2, 2, ARGB4444, 2, 2, 1)
366
+ TESTPLANARTOB(I422, 2, 1, RGB565, 2, 2, 1)
367
+ #endif
368
+ TESTPLANARTOB(I420, 2, 2, I400, 1, 1, 1)
369
+ TESTPLANARTOB(I420, 2, 2, UYVY, 2, 4, 1)
370
+ TESTPLANARTOB(I420, 2, 2, YUY2, 2, 4, 1)
371
+ TESTPLANARTOB(I422, 2, 1, ABGR, 4, 4, 1)
372
+ TESTPLANARTOB(I422, 2, 1, ARGB, 4, 4, 1)
373
+ TESTPLANARTOB(I422, 2, 1, BGRA, 4, 4, 1)
374
+ TESTPLANARTOB(I422, 2, 1, RGBA, 4, 4, 1)
375
+ TESTPLANARTOB(I422, 2, 1, UYVY, 2, 4, 1)
376
+ TESTPLANARTOB(I422, 2, 1, YUY2, 2, 4, 1)
377
+ TESTPLANARTOB(I420, 2, 2, ARGBFilter, 4, 4, 1)
378
+ TESTPLANARTOB(I422, 2, 1, ARGBFilter, 4, 4, 1)
379
+ TESTPLANARTOB(I420, 2, 2, RGB24Filter, 3, 3, 1)
380
+ TESTPLANARTOB(I444, 1, 1, ABGR, 4, 4, 1)
381
+ TESTPLANARTOB(I444, 1, 1, ARGB, 4, 4, 1)
382
+ #endif
383
+
384
+ #define TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
385
+ W1280, N, NEG, OFF) \
386
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
387
+ const int kWidth = W1280; \
388
+ const int kHeight = benchmark_height_; \
389
+ const int kStrideB = kWidth * BPP_B; \
390
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
391
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
392
+ align_buffer_page_end(src_uv, \
393
+ kStrideUV* SUBSAMPLE(kHeight, SUBSAMP_Y) * 2 + OFF); \
394
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight); \
395
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight); \
396
+ for (int i = 0; i < kHeight; ++i) \
397
+ for (int j = 0; j < kWidth; ++j) \
398
+ src_y[i * kWidth + j + OFF] = (fastrand() & 0xff); \
399
+ for (int i = 0; i < SUBSAMPLE(kHeight, SUBSAMP_Y); ++i) { \
400
+ for (int j = 0; j < kStrideUV * 2; ++j) { \
401
+ src_uv[i * kStrideUV * 2 + j + OFF] = (fastrand() & 0xff); \
402
+ } \
403
+ } \
404
+ memset(dst_argb_c, 1, kStrideB* kHeight); \
405
+ memset(dst_argb_opt, 101, kStrideB* kHeight); \
406
+ MaskCpuFlags(disable_cpu_flags_); \
407
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_uv + OFF, kStrideUV * 2, \
408
+ dst_argb_c, kWidth * BPP_B, kWidth, NEG kHeight); \
409
+ MaskCpuFlags(benchmark_cpu_info_); \
410
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
411
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_uv + OFF, kStrideUV * 2, \
412
+ dst_argb_opt, kWidth * BPP_B, kWidth, \
413
+ NEG kHeight); \
414
+ } \
415
+ /* Convert to ARGB so 565 is expanded to bytes that can be compared. */ \
416
+ align_buffer_page_end(dst_argb32_c, kWidth * 4 * kHeight); \
417
+ align_buffer_page_end(dst_argb32_opt, kWidth * 4 * kHeight); \
418
+ memset(dst_argb32_c, 2, kWidth * 4 * kHeight); \
419
+ memset(dst_argb32_opt, 102, kWidth * 4 * kHeight); \
420
+ FMT_C##ToARGB(dst_argb_c, kStrideB, dst_argb32_c, kWidth * 4, kWidth, \
421
+ kHeight); \
422
+ FMT_C##ToARGB(dst_argb_opt, kStrideB, dst_argb32_opt, kWidth * 4, kWidth, \
423
+ kHeight); \
424
+ for (int i = 0; i < kHeight; ++i) { \
425
+ for (int j = 0; j < kWidth * 4; ++j) { \
426
+ EXPECT_EQ(dst_argb32_c[i * kWidth * 4 + j], \
427
+ dst_argb32_opt[i * kWidth * 4 + j]); \
428
+ } \
429
+ } \
430
+ free_aligned_buffer_page_end(src_y); \
431
+ free_aligned_buffer_page_end(src_uv); \
432
+ free_aligned_buffer_page_end(dst_argb_c); \
433
+ free_aligned_buffer_page_end(dst_argb_opt); \
434
+ free_aligned_buffer_page_end(dst_argb32_c); \
435
+ free_aligned_buffer_page_end(dst_argb32_opt); \
436
+ }
437
+
438
+ #if defined(ENABLE_FULL_TESTS)
439
+ #define TESTBPTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B) \
440
+ TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
441
+ benchmark_width_ + 1, _Any, +, 0) \
442
+ TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
443
+ benchmark_width_, _Unaligned, +, 2) \
444
+ TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
445
+ benchmark_width_, _Invert, -, 0) \
446
+ TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
447
+ benchmark_width_, _Opt, +, 0)
448
+ #else
449
+ #define TESTBPTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B) \
450
+ TESTBPTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
451
+ benchmark_width_, _Opt, +, 0)
452
+ #endif
453
+
454
+ #define JNV12ToARGB(a, b, c, d, e, f, g, h) \
455
+ NV12ToARGBMatrix(a, b, c, d, e, f, &kYuvJPEGConstants, g, h)
456
+ #define JNV21ToARGB(a, b, c, d, e, f, g, h) \
457
+ NV21ToARGBMatrix(a, b, c, d, e, f, &kYuvJPEGConstants, g, h)
458
+ #define JNV12ToABGR(a, b, c, d, e, f, g, h) \
459
+ NV21ToARGBMatrix(a, b, c, d, e, f, &kYvuJPEGConstants, g, h)
460
+ #define JNV21ToABGR(a, b, c, d, e, f, g, h) \
461
+ NV12ToARGBMatrix(a, b, c, d, e, f, &kYvuJPEGConstants, g, h)
462
+ #define JNV12ToRGB24(a, b, c, d, e, f, g, h) \
463
+ NV12ToRGB24Matrix(a, b, c, d, e, f, &kYuvJPEGConstants, g, h)
464
+ #define JNV21ToRGB24(a, b, c, d, e, f, g, h) \
465
+ NV21ToRGB24Matrix(a, b, c, d, e, f, &kYuvJPEGConstants, g, h)
466
+ #define JNV12ToRAW(a, b, c, d, e, f, g, h) \
467
+ NV21ToRGB24Matrix(a, b, c, d, e, f, &kYvuJPEGConstants, g, h)
468
+ #define JNV21ToRAW(a, b, c, d, e, f, g, h) \
469
+ NV12ToRGB24Matrix(a, b, c, d, e, f, &kYvuJPEGConstants, g, h)
470
+ #define JNV12ToRGB565(a, b, c, d, e, f, g, h) \
471
+ NV12ToRGB565Matrix(a, b, c, d, e, f, &kYuvJPEGConstants, g, h)
472
+
473
+ TESTBPTOB(JNV12, 2, 2, ARGB, ARGB, 4)
474
+ TESTBPTOB(JNV21, 2, 2, ARGB, ARGB, 4)
475
+ TESTBPTOB(JNV12, 2, 2, ABGR, ABGR, 4)
476
+ TESTBPTOB(JNV21, 2, 2, ABGR, ABGR, 4)
477
+ TESTBPTOB(JNV12, 2, 2, RGB24, RGB24, 3)
478
+ TESTBPTOB(JNV21, 2, 2, RGB24, RGB24, 3)
479
+ TESTBPTOB(JNV12, 2, 2, RAW, RAW, 3)
480
+ TESTBPTOB(JNV21, 2, 2, RAW, RAW, 3)
481
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
482
+ TESTBPTOB(JNV12, 2, 2, RGB565, RGB565, 2)
483
+ #endif
484
+
485
+ TESTBPTOB(NV12, 2, 2, ARGB, ARGB, 4)
486
+ TESTBPTOB(NV21, 2, 2, ARGB, ARGB, 4)
487
+ TESTBPTOB(NV12, 2, 2, ABGR, ABGR, 4)
488
+ TESTBPTOB(NV21, 2, 2, ABGR, ABGR, 4)
489
+ TESTBPTOB(NV12, 2, 2, RGB24, RGB24, 3)
490
+ TESTBPTOB(NV21, 2, 2, RGB24, RGB24, 3)
491
+ TESTBPTOB(NV12, 2, 2, RAW, RAW, 3)
492
+ TESTBPTOB(NV21, 2, 2, RAW, RAW, 3)
493
+ TESTBPTOB(NV21, 2, 2, YUV24, RAW, 3)
494
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
495
+ TESTBPTOB(NV12, 2, 2, RGB565, RGB565, 2)
496
+ #endif
497
+
498
+ #define TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
499
+ EPP_B, STRIDE_B, HEIGHT_B, W1280, N, NEG, OFF) \
500
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##N) { \
501
+ const int kWidth = W1280; \
502
+ const int kHeight = benchmark_height_; \
503
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
504
+ const int kHeightB = (kHeight + HEIGHT_B - 1) / HEIGHT_B * HEIGHT_B; \
505
+ const int kStrideA = \
506
+ (kWidth * EPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
507
+ const int kStrideB = \
508
+ (kWidth * EPP_B + STRIDE_B - 1) / STRIDE_B * STRIDE_B; \
509
+ align_buffer_page_end(src_argb, \
510
+ kStrideA* kHeightA*(int)sizeof(TYPE_A) + OFF); \
511
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeightB*(int)sizeof(TYPE_B)); \
512
+ align_buffer_page_end(dst_argb_opt, \
513
+ kStrideB* kHeightB*(int)sizeof(TYPE_B)); \
514
+ for (int i = 0; i < kStrideA * kHeightA * (int)sizeof(TYPE_A); ++i) { \
515
+ src_argb[i + OFF] = (fastrand() & 0xff); \
516
+ } \
517
+ memset(dst_argb_c, 1, kStrideB* kHeightB); \
518
+ memset(dst_argb_opt, 101, kStrideB* kHeightB); \
519
+ MaskCpuFlags(disable_cpu_flags_); \
520
+ FMT_A##To##FMT_B((TYPE_A*)(src_argb + OFF), kStrideA, (TYPE_B*)dst_argb_c, \
521
+ kStrideB, kWidth, NEG kHeight); \
522
+ MaskCpuFlags(benchmark_cpu_info_); \
523
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
524
+ FMT_A##To##FMT_B((TYPE_A*)(src_argb + OFF), kStrideA, \
525
+ (TYPE_B*)dst_argb_opt, kStrideB, kWidth, NEG kHeight); \
526
+ } \
527
+ for (int i = 0; i < kStrideB * kHeightB * (int)sizeof(TYPE_B); ++i) { \
528
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
529
+ } \
530
+ free_aligned_buffer_page_end(src_argb); \
531
+ free_aligned_buffer_page_end(dst_argb_c); \
532
+ free_aligned_buffer_page_end(dst_argb_opt); \
533
+ }
534
+
535
+ #define TESTATOBRANDOM(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, \
536
+ TYPE_B, EPP_B, STRIDE_B, HEIGHT_B) \
537
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##_Random) { \
538
+ for (int times = 0; times < benchmark_iterations_; ++times) { \
539
+ const int kWidth = (fastrand() & 63) + 1; \
540
+ const int kHeight = (fastrand() & 31) + 1; \
541
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
542
+ const int kHeightB = (kHeight + HEIGHT_B - 1) / HEIGHT_B * HEIGHT_B; \
543
+ const int kStrideA = \
544
+ (kWidth * EPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
545
+ const int kStrideB = \
546
+ (kWidth * EPP_B + STRIDE_B - 1) / STRIDE_B * STRIDE_B; \
547
+ align_buffer_page_end(src_argb, kStrideA* kHeightA*(int)sizeof(TYPE_A)); \
548
+ align_buffer_page_end(dst_argb_c, \
549
+ kStrideB* kHeightB*(int)sizeof(TYPE_B)); \
550
+ align_buffer_page_end(dst_argb_opt, \
551
+ kStrideB* kHeightB*(int)sizeof(TYPE_B)); \
552
+ for (int i = 0; i < kStrideA * kHeightA * (int)sizeof(TYPE_A); ++i) { \
553
+ src_argb[i] = 0xfe; \
554
+ } \
555
+ memset(dst_argb_c, 123, kStrideB* kHeightB); \
556
+ memset(dst_argb_opt, 123, kStrideB* kHeightB); \
557
+ MaskCpuFlags(disable_cpu_flags_); \
558
+ FMT_A##To##FMT_B((TYPE_A*)src_argb, kStrideA, (TYPE_B*)dst_argb_c, \
559
+ kStrideB, kWidth, kHeight); \
560
+ MaskCpuFlags(benchmark_cpu_info_); \
561
+ FMT_A##To##FMT_B((TYPE_A*)src_argb, kStrideA, (TYPE_B*)dst_argb_opt, \
562
+ kStrideB, kWidth, kHeight); \
563
+ for (int i = 0; i < kStrideB * kHeightB * (int)sizeof(TYPE_B); ++i) { \
564
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
565
+ } \
566
+ free_aligned_buffer_page_end(src_argb); \
567
+ free_aligned_buffer_page_end(dst_argb_c); \
568
+ free_aligned_buffer_page_end(dst_argb_opt); \
569
+ } \
570
+ }
571
+
572
+ #if defined(ENABLE_FULL_TESTS)
573
+ #define TESTATOB(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
574
+ EPP_B, STRIDE_B, HEIGHT_B) \
575
+ TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
576
+ STRIDE_B, HEIGHT_B, benchmark_width_ + 1, _Any, +, 0) \
577
+ TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
578
+ STRIDE_B, HEIGHT_B, benchmark_width_, _Unaligned, +, 4) \
579
+ TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
580
+ STRIDE_B, HEIGHT_B, benchmark_width_, _Invert, -, 0) \
581
+ TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
582
+ STRIDE_B, HEIGHT_B, benchmark_width_, _Opt, +, 0) \
583
+ TESTATOBRANDOM(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
584
+ EPP_B, STRIDE_B, HEIGHT_B)
585
+ #else
586
+ #define TESTATOB(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
587
+ EPP_B, STRIDE_B, HEIGHT_B) \
588
+ TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
589
+ STRIDE_B, HEIGHT_B, benchmark_width_, _Opt, +, 0)
590
+ #endif
591
+
592
+ TESTATOB(AB30, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
593
+ TESTATOB(AB30, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
594
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
595
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
596
+ #endif
597
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
598
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
599
+ TESTATOB(AR30, uint8_t, 4, 4, 1, AB30, uint8_t, 4, 4, 1)
600
+ #endif
601
+ TESTATOB(AR30, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
602
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
603
+ TESTATOB(AR30, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
604
+ TESTATOB(AR30, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
605
+ #endif
606
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
607
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
608
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
609
+ #endif
610
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
611
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, ARGB1555, uint8_t, 2, 2, 1)
612
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, ARGB4444, uint8_t, 2, 2, 1)
613
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, ARGBMirror, uint8_t, 4, 4, 1)
614
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, BGRA, uint8_t, 4, 4, 1)
615
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, I400, uint8_t, 1, 1, 1)
616
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, J400, uint8_t, 1, 1, 1)
617
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, J400, uint8_t, 1, 1, 1)
618
+ TESTATOB(RGBA, uint8_t, 4, 4, 1, J400, uint8_t, 1, 1, 1)
619
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, RAW, uint8_t, 3, 3, 1)
620
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, RGB24, uint8_t, 3, 3, 1)
621
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, RAW, uint8_t, 3, 3, 1)
622
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, RGB24, uint8_t, 3, 3, 1)
623
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
624
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, RGB565, uint8_t, 2, 2, 1)
625
+ #endif
626
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, RGBA, uint8_t, 4, 4, 1)
627
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, UYVY, uint8_t, 2, 4, 1)
628
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, YUY2, uint8_t, 2, 4, 1)
629
+ TESTATOB(ARGB1555, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
630
+ TESTATOB(ARGB4444, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
631
+ TESTATOB(BGRA, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
632
+ TESTATOB(I400, uint8_t, 1, 1, 1, ARGB, uint8_t, 4, 4, 1)
633
+ TESTATOB(I400, uint8_t, 1, 1, 1, I400, uint8_t, 1, 1, 1)
634
+ TESTATOB(I400, uint8_t, 1, 1, 1, I400Mirror, uint8_t, 1, 1, 1)
635
+ TESTATOB(J400, uint8_t, 1, 1, 1, ARGB, uint8_t, 4, 4, 1)
636
+ TESTATOB(J400, uint8_t, 1, 1, 1, J400, uint8_t, 1, 1, 1)
637
+ TESTATOB(RAW, uint8_t, 3, 3, 1, ARGB, uint8_t, 4, 4, 1)
638
+ TESTATOB(RAW, uint8_t, 3, 3, 1, RGBA, uint8_t, 4, 4, 1)
639
+ TESTATOB(RAW, uint8_t, 3, 3, 1, RGB24, uint8_t, 3, 3, 1)
640
+ TESTATOB(RGB24, uint8_t, 3, 3, 1, ARGB, uint8_t, 4, 4, 1)
641
+ TESTATOB(RGB24, uint8_t, 3, 3, 1, J400, uint8_t, 1, 1, 1)
642
+ TESTATOB(RGB24, uint8_t, 3, 3, 1, RGB24Mirror, uint8_t, 3, 3, 1)
643
+ TESTATOB(RAW, uint8_t, 3, 3, 1, J400, uint8_t, 1, 1, 1)
644
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
645
+ TESTATOB(RGB565, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
646
+ #endif
647
+ TESTATOB(RGBA, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
648
+ TESTATOB(UYVY, uint8_t, 2, 4, 1, ARGB, uint8_t, 4, 4, 1)
649
+ TESTATOB(YUY2, uint8_t, 2, 4, 1, ARGB, uint8_t, 4, 4, 1)
650
+ TESTATOB(YUY2, uint8_t, 2, 4, 1, Y, uint8_t, 1, 1, 1)
651
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
652
+ TESTATOB(ARGB, uint8_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
653
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
654
+ TESTATOB(ABGR, uint8_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
655
+ TESTATOB(AR64, uint16_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
656
+ TESTATOB(AB64, uint16_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
657
+ TESTATOB(AR64, uint16_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
658
+ TESTATOB(AB64, uint16_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
659
+ TESTATOB(AR64, uint16_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
660
+ TESTATOB(AB64, uint16_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
661
+
662
+ // in place test
663
+ #define TESTATOAI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
664
+ EPP_B, STRIDE_B, HEIGHT_B, W1280, N, NEG, OFF) \
665
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##N) { \
666
+ const int kWidth = W1280; \
667
+ const int kHeight = benchmark_height_; \
668
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
669
+ const int kHeightB = (kHeight + HEIGHT_B - 1) / HEIGHT_B * HEIGHT_B; \
670
+ const int kStrideA = \
671
+ (kWidth * EPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
672
+ const int kStrideB = \
673
+ (kWidth * EPP_B + STRIDE_B - 1) / STRIDE_B * STRIDE_B; \
674
+ align_buffer_page_end(src_argb, \
675
+ kStrideA* kHeightA*(int)sizeof(TYPE_A) + OFF); \
676
+ align_buffer_page_end(dst_argb_c, \
677
+ kStrideA* kHeightA*(int)sizeof(TYPE_A) + OFF); \
678
+ align_buffer_page_end(dst_argb_opt, \
679
+ kStrideA* kHeightA*(int)sizeof(TYPE_A) + OFF); \
680
+ for (int i = 0; i < kStrideA * kHeightA * (int)sizeof(TYPE_A); ++i) { \
681
+ src_argb[i + OFF] = (fastrand() & 0xff); \
682
+ } \
683
+ memcpy(dst_argb_c + OFF, src_argb, \
684
+ kStrideA * kHeightA * (int)sizeof(TYPE_A)); \
685
+ memcpy(dst_argb_opt + OFF, src_argb, \
686
+ kStrideA * kHeightA * (int)sizeof(TYPE_A)); \
687
+ MaskCpuFlags(disable_cpu_flags_); \
688
+ FMT_A##To##FMT_B((TYPE_A*)(dst_argb_c /* src */ + OFF), kStrideA, \
689
+ (TYPE_B*)dst_argb_c, kStrideB, kWidth, NEG kHeight); \
690
+ MaskCpuFlags(benchmark_cpu_info_); \
691
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
692
+ FMT_A##To##FMT_B((TYPE_A*)(dst_argb_opt /* src */ + OFF), kStrideA, \
693
+ (TYPE_B*)dst_argb_opt, kStrideB, kWidth, NEG kHeight); \
694
+ } \
695
+ memcpy(dst_argb_opt + OFF, src_argb, \
696
+ kStrideA * kHeightA * (int)sizeof(TYPE_A)); \
697
+ FMT_A##To##FMT_B((TYPE_A*)(dst_argb_opt /* src */ + OFF), kStrideA, \
698
+ (TYPE_B*)dst_argb_opt, kStrideB, kWidth, NEG kHeight); \
699
+ for (int i = 0; i < kStrideB * kHeightB * (int)sizeof(TYPE_B); ++i) { \
700
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
701
+ } \
702
+ free_aligned_buffer_page_end(src_argb); \
703
+ free_aligned_buffer_page_end(dst_argb_c); \
704
+ free_aligned_buffer_page_end(dst_argb_opt); \
705
+ }
706
+
707
+ #define TESTATOA(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, \
708
+ EPP_B, STRIDE_B, HEIGHT_B) \
709
+ TESTATOAI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
710
+ STRIDE_B, HEIGHT_B, benchmark_width_, _Inplace, +, 0)
711
+
712
+ TESTATOA(AB30, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
713
+ TESTATOA(AB30, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
714
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
715
+ TESTATOA(ABGR, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
716
+ #endif
717
+ TESTATOA(ABGR, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
718
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
719
+ TESTATOA(AR30, uint8_t, 4, 4, 1, AB30, uint8_t, 4, 4, 1)
720
+ #endif
721
+ TESTATOA(AR30, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
722
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
723
+ TESTATOA(AR30, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
724
+ TESTATOA(AR30, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
725
+ #endif
726
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
727
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
728
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, AR30, uint8_t, 4, 4, 1)
729
+ #endif
730
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
731
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, ARGB1555, uint8_t, 2, 2, 1)
732
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, ARGB4444, uint8_t, 2, 2, 1)
733
+ // TODO(fbarchard): Support in place for mirror.
734
+ // TESTATOA(ARGB, uint8_t, 4, 4, 1, ARGBMirror, uint8_t, 4, 4, 1)
735
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, BGRA, uint8_t, 4, 4, 1)
736
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, I400, uint8_t, 1, 1, 1)
737
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, J400, uint8_t, 1, 1, 1)
738
+ TESTATOA(RGBA, uint8_t, 4, 4, 1, J400, uint8_t, 1, 1, 1)
739
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, RAW, uint8_t, 3, 3, 1)
740
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, RGB24, uint8_t, 3, 3, 1)
741
+ TESTATOA(ABGR, uint8_t, 4, 4, 1, RAW, uint8_t, 3, 3, 1)
742
+ TESTATOA(ABGR, uint8_t, 4, 4, 1, RGB24, uint8_t, 3, 3, 1)
743
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
744
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, RGB565, uint8_t, 2, 2, 1)
745
+ #endif
746
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, RGBA, uint8_t, 4, 4, 1)
747
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, UYVY, uint8_t, 2, 4, 1)
748
+ TESTATOA(ARGB, uint8_t, 4, 4, 1, YUY2, uint8_t, 2, 4, 1)
749
+ // TODO(fbarchard): Support in place for conversions that increase bpp.
750
+ // TESTATOA(ARGB1555, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
751
+ // TESTATOA(ARGB4444, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
752
+ TESTATOA(BGRA, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
753
+ // TESTATOA(I400, uint8_t, 1, 1, 1, ARGB, uint8_t, 4, 4, 1)
754
+ TESTATOA(I400, uint8_t, 1, 1, 1, I400, uint8_t, 1, 1, 1)
755
+ // TESTATOA(I400, uint8_t, 1, 1, 1, I400Mirror, uint8_t, 1, 1, 1)
756
+ // TESTATOA(J400, uint8_t, 1, 1, 1, ARGB, uint8_t, 4, 4, 1)
757
+ TESTATOA(J400, uint8_t, 1, 1, 1, J400, uint8_t, 1, 1, 1)
758
+ // TESTATOA(RAW, uint8_t, 3, 3, 1, ARGB, uint8_t, 4, 4, 1)
759
+ // TESTATOA(RAW, uint8_t, 3, 3, 1, RGBA, uint8_t, 4, 4, 1)
760
+ TESTATOA(RAW, uint8_t, 3, 3, 1, RGB24, uint8_t, 3, 3, 1)
761
+ // TESTATOA(RGB24, uint8_t, 3, 3, 1, ARGB, uint8_t, 4, 4, 1)
762
+ TESTATOA(RGB24, uint8_t, 3, 3, 1, J400, uint8_t, 1, 1, 1)
763
+ // TESTATOA(RGB24, uint8_t, 3, 3, 1, RGB24Mirror, uint8_t, 3, 3, 1)
764
+ TESTATOA(RAW, uint8_t, 3, 3, 1, J400, uint8_t, 1, 1, 1)
765
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
766
+ // TESTATOA(RGB565, uint8_t, 2, 2, 1, ARGB, uint8_t, 4, 4, 1)
767
+ #endif
768
+ TESTATOA(RGBA, uint8_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
769
+ // TESTATOA(UYVY, uint8_t, 2, 4, 1, ARGB, uint8_t, 4, 4, 1)
770
+ // TESTATOA(YUY2, uint8_t, 2, 4, 1, ARGB, uint8_t, 4, 4, 1)
771
+ TESTATOA(YUY2, uint8_t, 2, 4, 1, Y, uint8_t, 1, 1, 1)
772
+ // TESTATOA(ARGB, uint8_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
773
+ // TESTATOA(ARGB, uint8_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
774
+ // TESTATOA(ABGR, uint8_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
775
+ // TESTATOA(ABGR, uint8_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
776
+ TESTATOA(AR64, uint16_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
777
+ TESTATOA(AB64, uint16_t, 4, 4, 1, ARGB, uint8_t, 4, 4, 1)
778
+ TESTATOA(AR64, uint16_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
779
+ TESTATOA(AB64, uint16_t, 4, 4, 1, ABGR, uint8_t, 4, 4, 1)
780
+ TESTATOA(AR64, uint16_t, 4, 4, 1, AB64, uint16_t, 4, 4, 1)
781
+ TESTATOA(AB64, uint16_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
782
+
783
+ #define TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
784
+ HEIGHT_B, W1280, N, NEG, OFF) \
785
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##Dither##N) { \
786
+ const int kWidth = W1280; \
787
+ const int kHeight = benchmark_height_; \
788
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
789
+ const int kHeightB = (kHeight + HEIGHT_B - 1) / HEIGHT_B * HEIGHT_B; \
790
+ const int kStrideA = \
791
+ (kWidth * BPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
792
+ const int kStrideB = \
793
+ (kWidth * BPP_B + STRIDE_B - 1) / STRIDE_B * STRIDE_B; \
794
+ align_buffer_page_end(src_argb, kStrideA* kHeightA + OFF); \
795
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeightB); \
796
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeightB); \
797
+ for (int i = 0; i < kStrideA * kHeightA; ++i) { \
798
+ src_argb[i + OFF] = (fastrand() & 0xff); \
799
+ } \
800
+ memset(dst_argb_c, 1, kStrideB* kHeightB); \
801
+ memset(dst_argb_opt, 101, kStrideB* kHeightB); \
802
+ MaskCpuFlags(disable_cpu_flags_); \
803
+ FMT_A##To##FMT_B##Dither(src_argb + OFF, kStrideA, dst_argb_c, kStrideB, \
804
+ NULL, kWidth, NEG kHeight); \
805
+ MaskCpuFlags(benchmark_cpu_info_); \
806
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
807
+ FMT_A##To##FMT_B##Dither(src_argb + OFF, kStrideA, dst_argb_opt, \
808
+ kStrideB, NULL, kWidth, NEG kHeight); \
809
+ } \
810
+ for (int i = 0; i < kStrideB * kHeightB; ++i) { \
811
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
812
+ } \
813
+ free_aligned_buffer_page_end(src_argb); \
814
+ free_aligned_buffer_page_end(dst_argb_c); \
815
+ free_aligned_buffer_page_end(dst_argb_opt); \
816
+ }
817
+
818
+ #define TESTATOBDRANDOM(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, \
819
+ STRIDE_B, HEIGHT_B) \
820
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##Dither_Random) { \
821
+ for (int times = 0; times < benchmark_iterations_; ++times) { \
822
+ const int kWidth = (fastrand() & 63) + 1; \
823
+ const int kHeight = (fastrand() & 31) + 1; \
824
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
825
+ const int kHeightB = (kHeight + HEIGHT_B - 1) / HEIGHT_B * HEIGHT_B; \
826
+ const int kStrideA = \
827
+ (kWidth * BPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
828
+ const int kStrideB = \
829
+ (kWidth * BPP_B + STRIDE_B - 1) / STRIDE_B * STRIDE_B; \
830
+ align_buffer_page_end(src_argb, kStrideA* kHeightA); \
831
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeightB); \
832
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeightB); \
833
+ for (int i = 0; i < kStrideA * kHeightA; ++i) { \
834
+ src_argb[i] = (fastrand() & 0xff); \
835
+ } \
836
+ memset(dst_argb_c, 123, kStrideB* kHeightB); \
837
+ memset(dst_argb_opt, 123, kStrideB* kHeightB); \
838
+ MaskCpuFlags(disable_cpu_flags_); \
839
+ FMT_A##To##FMT_B##Dither(src_argb, kStrideA, dst_argb_c, kStrideB, NULL, \
840
+ kWidth, kHeight); \
841
+ MaskCpuFlags(benchmark_cpu_info_); \
842
+ FMT_A##To##FMT_B##Dither(src_argb, kStrideA, dst_argb_opt, kStrideB, \
843
+ NULL, kWidth, kHeight); \
844
+ for (int i = 0; i < kStrideB * kHeightB; ++i) { \
845
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
846
+ } \
847
+ free_aligned_buffer_page_end(src_argb); \
848
+ free_aligned_buffer_page_end(dst_argb_c); \
849
+ free_aligned_buffer_page_end(dst_argb_opt); \
850
+ } \
851
+ }
852
+
853
+ #if defined(ENABLE_FULL_TESTS)
854
+ #define TESTATOBD(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
855
+ HEIGHT_B) \
856
+ TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
857
+ HEIGHT_B, benchmark_width_ + 1, _Any, +, 0) \
858
+ TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
859
+ HEIGHT_B, benchmark_width_, _Unaligned, +, 2) \
860
+ TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
861
+ HEIGHT_B, benchmark_width_, _Invert, -, 0) \
862
+ TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
863
+ HEIGHT_B, benchmark_width_, _Opt, +, 0) \
864
+ TESTATOBDRANDOM(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
865
+ HEIGHT_B)
866
+ #else
867
+ #define TESTATOBD(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
868
+ HEIGHT_B) \
869
+ TESTATOBDRANDOM(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
870
+ HEIGHT_B)
871
+ #endif
872
+
873
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
874
+ TESTATOBD(ARGB, 4, 4, 1, RGB565, 2, 2, 1)
875
+ #endif
876
+
877
+ // These conversions called twice, produce the original result.
878
+ // e.g. endian swap twice.
879
+ #define TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, W1280, N, NEG, \
880
+ OFF) \
881
+ TEST_F(LibYUVConvertTest, FMT_ATOB##_Endswap##N) { \
882
+ const int kWidth = W1280; \
883
+ const int kHeight = benchmark_height_; \
884
+ const int kHeightA = (kHeight + HEIGHT_A - 1) / HEIGHT_A * HEIGHT_A; \
885
+ const int kStrideA = \
886
+ (kWidth * EPP_A + STRIDE_A - 1) / STRIDE_A * STRIDE_A; \
887
+ align_buffer_page_end(src_argb, \
888
+ kStrideA* kHeightA*(int)sizeof(TYPE_A) + OFF); \
889
+ align_buffer_page_end(dst_argb_c, kStrideA* kHeightA*(int)sizeof(TYPE_A)); \
890
+ align_buffer_page_end(dst_argb_opt, \
891
+ kStrideA* kHeightA*(int)sizeof(TYPE_A)); \
892
+ for (int i = 0; i < kStrideA * kHeightA * (int)sizeof(TYPE_A); ++i) { \
893
+ src_argb[i + OFF] = (fastrand() & 0xff); \
894
+ } \
895
+ memset(dst_argb_c, 1, kStrideA* kHeightA); \
896
+ memset(dst_argb_opt, 101, kStrideA* kHeightA); \
897
+ MaskCpuFlags(disable_cpu_flags_); \
898
+ FMT_ATOB((TYPE_A*)(src_argb + OFF), kStrideA, (TYPE_A*)dst_argb_c, \
899
+ kStrideA, kWidth, NEG kHeight); \
900
+ MaskCpuFlags(benchmark_cpu_info_); \
901
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
902
+ FMT_ATOB((TYPE_A*)(src_argb + OFF), kStrideA, (TYPE_A*)dst_argb_opt, \
903
+ kStrideA, kWidth, NEG kHeight); \
904
+ } \
905
+ MaskCpuFlags(disable_cpu_flags_); \
906
+ FMT_ATOB((TYPE_A*)dst_argb_c, kStrideA, (TYPE_A*)dst_argb_c, kStrideA, \
907
+ kWidth, NEG kHeight); \
908
+ MaskCpuFlags(benchmark_cpu_info_); \
909
+ FMT_ATOB((TYPE_A*)dst_argb_opt, kStrideA, (TYPE_A*)dst_argb_opt, kStrideA, \
910
+ kWidth, NEG kHeight); \
911
+ for (int i = 0; i < kStrideA * kHeightA * (int)sizeof(TYPE_A); ++i) { \
912
+ EXPECT_EQ(src_argb[i + OFF], dst_argb_opt[i]); \
913
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); \
914
+ } \
915
+ free_aligned_buffer_page_end(src_argb); \
916
+ free_aligned_buffer_page_end(dst_argb_c); \
917
+ free_aligned_buffer_page_end(dst_argb_opt); \
918
+ }
919
+
920
+ #if defined(ENABLE_FULL_TESTS)
921
+ #define TESTEND(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A) \
922
+ TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_ + 1, \
923
+ _Any, +, 0) \
924
+ TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_, \
925
+ _Unaligned, +, 2) \
926
+ TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_, \
927
+ _Opt, +, 0)
928
+ #else
929
+ #define TESTEND(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A) \
930
+ TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_, \
931
+ _Opt, +, 0)
932
+ #endif
933
+
934
+ TESTEND(ARGBToBGRA, uint8_t, 4, 4, 1)
935
+ TESTEND(ARGBToABGR, uint8_t, 4, 4, 1)
936
+ TESTEND(BGRAToARGB, uint8_t, 4, 4, 1)
937
+ TESTEND(ABGRToARGB, uint8_t, 4, 4, 1)
938
+ TESTEND(AB64ToAR64, uint16_t, 4, 4, 1)
939
+
940
+ #define TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
941
+ YALIGN, W1280, N, NEG, OFF, ATTEN) \
942
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
943
+ const int kWidth = W1280; \
944
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
945
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
946
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
947
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
948
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
949
+ align_buffer_page_end(src_u, kSizeUV + OFF); \
950
+ align_buffer_page_end(src_v, kSizeUV + OFF); \
951
+ align_buffer_page_end(src_a, kWidth* kHeight + OFF); \
952
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + OFF); \
953
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + OFF); \
954
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
955
+ src_y[i + OFF] = (fastrand() & 0xff); \
956
+ src_a[i + OFF] = (fastrand() & 0xff); \
957
+ } \
958
+ for (int i = 0; i < kSizeUV; ++i) { \
959
+ src_u[i + OFF] = (fastrand() & 0xff); \
960
+ src_v[i + OFF] = (fastrand() & 0xff); \
961
+ } \
962
+ memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \
963
+ memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \
964
+ MaskCpuFlags(disable_cpu_flags_); \
965
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
966
+ src_v + OFF, kStrideUV, src_a + OFF, kWidth, \
967
+ dst_argb_c + OFF, kStrideB, kWidth, NEG kHeight, \
968
+ ATTEN); \
969
+ MaskCpuFlags(benchmark_cpu_info_); \
970
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
971
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
972
+ src_v + OFF, kStrideUV, src_a + OFF, kWidth, \
973
+ dst_argb_opt + OFF, kStrideB, kWidth, NEG kHeight, \
974
+ ATTEN); \
975
+ } \
976
+ for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \
977
+ EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_opt[i + OFF]); \
978
+ } \
979
+ free_aligned_buffer_page_end(src_y); \
980
+ free_aligned_buffer_page_end(src_u); \
981
+ free_aligned_buffer_page_end(src_v); \
982
+ free_aligned_buffer_page_end(src_a); \
983
+ free_aligned_buffer_page_end(dst_argb_c); \
984
+ free_aligned_buffer_page_end(dst_argb_opt); \
985
+ }
986
+
987
+ #if defined(ENABLE_FULL_TESTS)
988
+ #define TESTQPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
989
+ YALIGN) \
990
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
991
+ YALIGN, benchmark_width_ + 1, _Any, +, 0, 0) \
992
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
993
+ YALIGN, benchmark_width_, _Unaligned, +, 2, 0) \
994
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
995
+ YALIGN, benchmark_width_, _Invert, -, 0, 0) \
996
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
997
+ YALIGN, benchmark_width_, _Opt, +, 0, 0) \
998
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
999
+ YALIGN, benchmark_width_, _Premult, +, 0, 1)
1000
+ #else
1001
+ #define TESTQPLANARTOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1002
+ YALIGN) \
1003
+ TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1004
+ YALIGN, benchmark_width_, _Opt, +, 0, 0)
1005
+ #endif
1006
+
1007
+ #define J420AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1008
+ I420AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1009
+ l, m)
1010
+ #define J420AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1011
+ I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1012
+ l, m)
1013
+ #define F420AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1014
+ I420AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1015
+ l, m)
1016
+ #define F420AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1017
+ I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1018
+ l, m)
1019
+ #define H420AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1020
+ I420AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1021
+ l, m)
1022
+ #define H420AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1023
+ I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1024
+ l, m)
1025
+ #define U420AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1026
+ I420AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1027
+ l, m)
1028
+ #define U420AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1029
+ I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1030
+ l, m)
1031
+ #define V420AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1032
+ I420AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1033
+ l, m)
1034
+ #define V420AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1035
+ I420AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1036
+ l, m)
1037
+ #define J422AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1038
+ I422AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1039
+ l, m)
1040
+ #define J422AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1041
+ I422AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1042
+ l, m)
1043
+ #define F422AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1044
+ I422AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1045
+ l, m)
1046
+ #define F422AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1047
+ I422AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1048
+ l, m)
1049
+ #define H422AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1050
+ I422AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1051
+ l, m)
1052
+ #define H422AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1053
+ I422AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1054
+ l, m)
1055
+ #define U422AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1056
+ I422AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1057
+ l, m)
1058
+ #define U422AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1059
+ I422AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1060
+ l, m)
1061
+ #define V422AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1062
+ I422AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1063
+ l, m)
1064
+ #define V422AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1065
+ I422AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1066
+ l, m)
1067
+ #define J444AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1068
+ I444AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1069
+ l, m)
1070
+ #define J444AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1071
+ I444AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1072
+ l, m)
1073
+ #define F444AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1074
+ I444AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1075
+ l, m)
1076
+ #define F444AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1077
+ I444AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1078
+ l, m)
1079
+ #define H444AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1080
+ I444AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1081
+ l, m)
1082
+ #define H444AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1083
+ I444AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
1084
+ l, m)
1085
+ #define U444AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1086
+ I444AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1087
+ l, m)
1088
+ #define U444AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1089
+ I444AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
1090
+ l, m)
1091
+ #define V444AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1092
+ I444AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1093
+ l, m)
1094
+ #define V444AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1095
+ I444AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
1096
+ l, m)
1097
+
1098
+ #define I420AlphaToARGBFilter(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1099
+ I420AlphaToARGBMatrixFilter(a, b, c, d, e, f, g, h, i, j, \
1100
+ &kYuvI601Constants, k, l, m, kFilterBilinear)
1101
+ #define I422AlphaToARGBFilter(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1102
+ I422AlphaToARGBMatrixFilter(a, b, c, d, e, f, g, h, i, j, \
1103
+ &kYuvI601Constants, k, l, m, kFilterBilinear)
1104
+
1105
+ #if defined(ENABLE_FULL_TESTS)
1106
+ TESTQPLANARTOB(I420Alpha, 2, 2, ARGB, 4, 4, 1)
1107
+ TESTQPLANARTOB(I420Alpha, 2, 2, ABGR, 4, 4, 1)
1108
+ TESTQPLANARTOB(J420Alpha, 2, 2, ARGB, 4, 4, 1)
1109
+ TESTQPLANARTOB(J420Alpha, 2, 2, ABGR, 4, 4, 1)
1110
+ TESTQPLANARTOB(H420Alpha, 2, 2, ARGB, 4, 4, 1)
1111
+ TESTQPLANARTOB(H420Alpha, 2, 2, ABGR, 4, 4, 1)
1112
+ TESTQPLANARTOB(F420Alpha, 2, 2, ARGB, 4, 4, 1)
1113
+ TESTQPLANARTOB(F420Alpha, 2, 2, ABGR, 4, 4, 1)
1114
+ TESTQPLANARTOB(U420Alpha, 2, 2, ARGB, 4, 4, 1)
1115
+ TESTQPLANARTOB(U420Alpha, 2, 2, ABGR, 4, 4, 1)
1116
+ TESTQPLANARTOB(V420Alpha, 2, 2, ARGB, 4, 4, 1)
1117
+ TESTQPLANARTOB(V420Alpha, 2, 2, ABGR, 4, 4, 1)
1118
+ TESTQPLANARTOB(I422Alpha, 2, 1, ARGB, 4, 4, 1)
1119
+ TESTQPLANARTOB(I422Alpha, 2, 1, ABGR, 4, 4, 1)
1120
+ TESTQPLANARTOB(J422Alpha, 2, 1, ARGB, 4, 4, 1)
1121
+ TESTQPLANARTOB(J422Alpha, 2, 1, ABGR, 4, 4, 1)
1122
+ TESTQPLANARTOB(H422Alpha, 2, 1, ARGB, 4, 4, 1)
1123
+ TESTQPLANARTOB(H422Alpha, 2, 1, ABGR, 4, 4, 1)
1124
+ TESTQPLANARTOB(F422Alpha, 2, 1, ARGB, 4, 4, 1)
1125
+ TESTQPLANARTOB(F422Alpha, 2, 1, ABGR, 4, 4, 1)
1126
+ TESTQPLANARTOB(U422Alpha, 2, 1, ARGB, 4, 4, 1)
1127
+ TESTQPLANARTOB(U422Alpha, 2, 1, ABGR, 4, 4, 1)
1128
+ TESTQPLANARTOB(V422Alpha, 2, 1, ARGB, 4, 4, 1)
1129
+ TESTQPLANARTOB(V422Alpha, 2, 1, ABGR, 4, 4, 1)
1130
+ TESTQPLANARTOB(I444Alpha, 1, 1, ARGB, 4, 4, 1)
1131
+ TESTQPLANARTOB(I444Alpha, 1, 1, ABGR, 4, 4, 1)
1132
+ TESTQPLANARTOB(J444Alpha, 1, 1, ARGB, 4, 4, 1)
1133
+ TESTQPLANARTOB(J444Alpha, 1, 1, ABGR, 4, 4, 1)
1134
+ TESTQPLANARTOB(H444Alpha, 1, 1, ARGB, 4, 4, 1)
1135
+ TESTQPLANARTOB(H444Alpha, 1, 1, ABGR, 4, 4, 1)
1136
+ TESTQPLANARTOB(F444Alpha, 1, 1, ARGB, 4, 4, 1)
1137
+ TESTQPLANARTOB(F444Alpha, 1, 1, ABGR, 4, 4, 1)
1138
+ TESTQPLANARTOB(U444Alpha, 1, 1, ARGB, 4, 4, 1)
1139
+ TESTQPLANARTOB(U444Alpha, 1, 1, ABGR, 4, 4, 1)
1140
+ TESTQPLANARTOB(V444Alpha, 1, 1, ARGB, 4, 4, 1)
1141
+ TESTQPLANARTOB(V444Alpha, 1, 1, ABGR, 4, 4, 1)
1142
+ TESTQPLANARTOB(I420Alpha, 2, 2, ARGBFilter, 4, 4, 1)
1143
+ TESTQPLANARTOB(I422Alpha, 2, 1, ARGBFilter, 4, 4, 1)
1144
+ #else
1145
+ TESTQPLANARTOB(I420Alpha, 2, 2, ARGB, 4, 4, 1)
1146
+ TESTQPLANARTOB(I422Alpha, 2, 1, ARGB, 4, 4, 1)
1147
+ TESTQPLANARTOB(I444Alpha, 1, 1, ARGB, 4, 4, 1)
1148
+ TESTQPLANARTOB(I420Alpha, 2, 2, ARGBFilter, 4, 4, 1)
1149
+ TESTQPLANARTOB(I422Alpha, 2, 1, ARGBFilter, 4, 4, 1)
1150
+ #endif
1151
+
1152
+ TEST_F(LibYUVConvertTest, TestYToARGB) {
1153
+ uint8_t y[32];
1154
+ uint8_t expectedg[32];
1155
+ for (int i = 0; i < 32; ++i) {
1156
+ y[i] = i * 5 + 17;
1157
+ expectedg[i] = static_cast<int>((y[i] - 16) * 1.164f + 0.5f);
1158
+ }
1159
+ uint8_t argb[32 * 4];
1160
+ YToARGB(y, 0, argb, 0, 32, 1);
1161
+
1162
+ for (int i = 0; i < 32; ++i) {
1163
+ printf("%2d %d: %d <-> %d,%d,%d,%d\n", i, y[i], expectedg[i],
1164
+ argb[i * 4 + 0], argb[i * 4 + 1], argb[i * 4 + 2], argb[i * 4 + 3]);
1165
+ }
1166
+ for (int i = 0; i < 32; ++i) {
1167
+ EXPECT_EQ(expectedg[i], argb[i * 4 + 0]);
1168
+ }
1169
+ }
1170
+
1171
+ static const uint8_t kNoDither4x4[16] = {
1172
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1173
+ };
1174
+
1175
+ TEST_F(LibYUVConvertTest, TestNoDither) {
1176
+ align_buffer_page_end(src_argb, benchmark_width_ * benchmark_height_ * 4);
1177
+ align_buffer_page_end(dst_rgb565, benchmark_width_ * benchmark_height_ * 2);
1178
+ align_buffer_page_end(dst_rgb565dither,
1179
+ benchmark_width_ * benchmark_height_ * 2);
1180
+ MemRandomize(src_argb, benchmark_width_ * benchmark_height_ * 4);
1181
+ MemRandomize(dst_rgb565, benchmark_width_ * benchmark_height_ * 2);
1182
+ MemRandomize(dst_rgb565dither, benchmark_width_ * benchmark_height_ * 2);
1183
+ ARGBToRGB565(src_argb, benchmark_width_ * 4, dst_rgb565, benchmark_width_ * 2,
1184
+ benchmark_width_, benchmark_height_);
1185
+ ARGBToRGB565Dither(src_argb, benchmark_width_ * 4, dst_rgb565dither,
1186
+ benchmark_width_ * 2, kNoDither4x4, benchmark_width_,
1187
+ benchmark_height_);
1188
+ for (int i = 0; i < benchmark_width_ * benchmark_height_ * 2; ++i) {
1189
+ EXPECT_EQ(dst_rgb565[i], dst_rgb565dither[i]);
1190
+ }
1191
+
1192
+ free_aligned_buffer_page_end(src_argb);
1193
+ free_aligned_buffer_page_end(dst_rgb565);
1194
+ free_aligned_buffer_page_end(dst_rgb565dither);
1195
+ }
1196
+
1197
+ // Ordered 4x4 dither for 888 to 565. Values from 0 to 7.
1198
+ static const uint8_t kDither565_4x4[16] = {
1199
+ 0, 4, 1, 5, 6, 2, 7, 3, 1, 5, 0, 4, 7, 3, 6, 2,
1200
+ };
1201
+
1202
+ TEST_F(LibYUVConvertTest, TestDither) {
1203
+ align_buffer_page_end(src_argb, benchmark_width_ * benchmark_height_ * 4);
1204
+ align_buffer_page_end(dst_rgb565, benchmark_width_ * benchmark_height_ * 2);
1205
+ align_buffer_page_end(dst_rgb565dither,
1206
+ benchmark_width_ * benchmark_height_ * 2);
1207
+ align_buffer_page_end(dst_argb, benchmark_width_ * benchmark_height_ * 4);
1208
+ align_buffer_page_end(dst_argbdither,
1209
+ benchmark_width_ * benchmark_height_ * 4);
1210
+ MemRandomize(src_argb, benchmark_width_ * benchmark_height_ * 4);
1211
+ MemRandomize(dst_rgb565, benchmark_width_ * benchmark_height_ * 2);
1212
+ MemRandomize(dst_rgb565dither, benchmark_width_ * benchmark_height_ * 2);
1213
+ MemRandomize(dst_argb, benchmark_width_ * benchmark_height_ * 4);
1214
+ MemRandomize(dst_argbdither, benchmark_width_ * benchmark_height_ * 4);
1215
+ ARGBToRGB565(src_argb, benchmark_width_ * 4, dst_rgb565, benchmark_width_ * 2,
1216
+ benchmark_width_, benchmark_height_);
1217
+ ARGBToRGB565Dither(src_argb, benchmark_width_ * 4, dst_rgb565dither,
1218
+ benchmark_width_ * 2, kDither565_4x4, benchmark_width_,
1219
+ benchmark_height_);
1220
+ RGB565ToARGB(dst_rgb565, benchmark_width_ * 2, dst_argb, benchmark_width_ * 4,
1221
+ benchmark_width_, benchmark_height_);
1222
+ RGB565ToARGB(dst_rgb565dither, benchmark_width_ * 2, dst_argbdither,
1223
+ benchmark_width_ * 4, benchmark_width_, benchmark_height_);
1224
+
1225
+ for (int i = 0; i < benchmark_width_ * benchmark_height_ * 4; ++i) {
1226
+ EXPECT_NEAR(dst_argb[i], dst_argbdither[i], 9);
1227
+ }
1228
+ free_aligned_buffer_page_end(src_argb);
1229
+ free_aligned_buffer_page_end(dst_rgb565);
1230
+ free_aligned_buffer_page_end(dst_rgb565dither);
1231
+ free_aligned_buffer_page_end(dst_argb);
1232
+ free_aligned_buffer_page_end(dst_argbdither);
1233
+ }
1234
+
1235
+ #define TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1236
+ YALIGN, W1280, N, NEG, OFF, FMT_C, BPP_C) \
1237
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##Dither##N) { \
1238
+ const int kWidth = W1280; \
1239
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
1240
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
1241
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
1242
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
1243
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
1244
+ align_buffer_page_end(src_u, kSizeUV + OFF); \
1245
+ align_buffer_page_end(src_v, kSizeUV + OFF); \
1246
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + OFF); \
1247
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + OFF); \
1248
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
1249
+ src_y[i + OFF] = (fastrand() & 0xff); \
1250
+ } \
1251
+ for (int i = 0; i < kSizeUV; ++i) { \
1252
+ src_u[i + OFF] = (fastrand() & 0xff); \
1253
+ src_v[i + OFF] = (fastrand() & 0xff); \
1254
+ } \
1255
+ memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \
1256
+ memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \
1257
+ MaskCpuFlags(disable_cpu_flags_); \
1258
+ FMT_PLANAR##To##FMT_B##Dither(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
1259
+ src_v + OFF, kStrideUV, dst_argb_c + OFF, \
1260
+ kStrideB, NULL, kWidth, NEG kHeight); \
1261
+ MaskCpuFlags(benchmark_cpu_info_); \
1262
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1263
+ FMT_PLANAR##To##FMT_B##Dither( \
1264
+ src_y + OFF, kWidth, src_u + OFF, kStrideUV, src_v + OFF, kStrideUV, \
1265
+ dst_argb_opt + OFF, kStrideB, NULL, kWidth, NEG kHeight); \
1266
+ } \
1267
+ /* Convert to ARGB so 565 is expanded to bytes that can be compared. */ \
1268
+ align_buffer_page_end(dst_argb32_c, kWidth* BPP_C* kHeight); \
1269
+ align_buffer_page_end(dst_argb32_opt, kWidth* BPP_C* kHeight); \
1270
+ memset(dst_argb32_c, 2, kWidth* BPP_C* kHeight); \
1271
+ memset(dst_argb32_opt, 102, kWidth* BPP_C* kHeight); \
1272
+ FMT_B##To##FMT_C(dst_argb_c + OFF, kStrideB, dst_argb32_c, kWidth * BPP_C, \
1273
+ kWidth, kHeight); \
1274
+ FMT_B##To##FMT_C(dst_argb_opt + OFF, kStrideB, dst_argb32_opt, \
1275
+ kWidth * BPP_C, kWidth, kHeight); \
1276
+ for (int i = 0; i < kWidth * BPP_C * kHeight; ++i) { \
1277
+ EXPECT_EQ(dst_argb32_c[i], dst_argb32_opt[i]); \
1278
+ } \
1279
+ free_aligned_buffer_page_end(src_y); \
1280
+ free_aligned_buffer_page_end(src_u); \
1281
+ free_aligned_buffer_page_end(src_v); \
1282
+ free_aligned_buffer_page_end(dst_argb_c); \
1283
+ free_aligned_buffer_page_end(dst_argb_opt); \
1284
+ free_aligned_buffer_page_end(dst_argb32_c); \
1285
+ free_aligned_buffer_page_end(dst_argb32_opt); \
1286
+ }
1287
+
1288
+ #if defined(ENABLE_FULL_TESTS)
1289
+ #define TESTPLANARTOBD(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1290
+ YALIGN, FMT_C, BPP_C) \
1291
+ TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1292
+ YALIGN, benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
1293
+ TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1294
+ YALIGN, benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C) \
1295
+ TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1296
+ YALIGN, benchmark_width_, _Invert, -, 0, FMT_C, BPP_C) \
1297
+ TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1298
+ YALIGN, benchmark_width_, _Opt, +, 0, FMT_C, BPP_C)
1299
+ #else
1300
+ #define TESTPLANARTOBD(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1301
+ YALIGN, FMT_C, BPP_C) \
1302
+ TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1303
+ YALIGN, benchmark_width_, _Opt, +, 0, FMT_C, BPP_C)
1304
+ #endif
1305
+
1306
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
1307
+ TESTPLANARTOBD(I420, 2, 2, RGB565, 2, 2, 1, ARGB, 4)
1308
+ #endif
1309
+
1310
+ // Transitive test. A to B to C is same as A to C.
1311
+ // Benchmarks A To B to C for comparison to 1 step, benchmarked elsewhere.
1312
+ #define TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1313
+ W1280, N, NEG, OFF, FMT_C, BPP_C) \
1314
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##To##FMT_C##N) { \
1315
+ const int kWidth = W1280; \
1316
+ const int kHeight = benchmark_height_; \
1317
+ const int kStrideB = SUBSAMPLE(kWidth, SUB_B) * BPP_B; \
1318
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
1319
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
1320
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
1321
+ align_buffer_page_end(src_u, kSizeUV + OFF); \
1322
+ align_buffer_page_end(src_v, kSizeUV + OFF); \
1323
+ align_buffer_page_end(dst_argb_b, kStrideB* kHeight + OFF); \
1324
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
1325
+ src_y[i + OFF] = (fastrand() & 0xff); \
1326
+ } \
1327
+ for (int i = 0; i < kSizeUV; ++i) { \
1328
+ src_u[i + OFF] = (fastrand() & 0xff); \
1329
+ src_v[i + OFF] = (fastrand() & 0xff); \
1330
+ } \
1331
+ memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
1332
+ FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
1333
+ src_v + OFF, kStrideUV, dst_argb_b + OFF, kStrideB, \
1334
+ kWidth, NEG kHeight); \
1335
+ /* Convert to a 3rd format in 1 step and 2 steps and compare */ \
1336
+ const int kStrideC = kWidth * BPP_C; \
1337
+ align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
1338
+ align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
1339
+ memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
1340
+ memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
1341
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1342
+ FMT_PLANAR##To##FMT_C(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
1343
+ src_v + OFF, kStrideUV, dst_argb_c + OFF, \
1344
+ kStrideC, kWidth, NEG kHeight); \
1345
+ /* Convert B to C */ \
1346
+ FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
1347
+ kStrideC, kWidth, kHeight); \
1348
+ } \
1349
+ for (int i = 0; i < kStrideC * kHeight; ++i) { \
1350
+ EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_bc[i + OFF]); \
1351
+ } \
1352
+ free_aligned_buffer_page_end(src_y); \
1353
+ free_aligned_buffer_page_end(src_u); \
1354
+ free_aligned_buffer_page_end(src_v); \
1355
+ free_aligned_buffer_page_end(dst_argb_b); \
1356
+ free_aligned_buffer_page_end(dst_argb_c); \
1357
+ free_aligned_buffer_page_end(dst_argb_bc); \
1358
+ }
1359
+
1360
+ #if defined(ENABLE_FULL_TESTS)
1361
+ #define TESTPLANARTOE(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1362
+ FMT_C, BPP_C) \
1363
+ TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1364
+ benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
1365
+ TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1366
+ benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C) \
1367
+ TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1368
+ benchmark_width_, _Invert, -, 0, FMT_C, BPP_C) \
1369
+ TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1370
+ benchmark_width_, _Opt, +, 0, FMT_C, BPP_C)
1371
+ #else
1372
+ #define TESTPLANARTOE(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1373
+ FMT_C, BPP_C) \
1374
+ TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1375
+ benchmark_width_, _Opt, +, 0, FMT_C, BPP_C)
1376
+ #endif
1377
+
1378
+ #if defined(ENABLE_FULL_TESTS)
1379
+ TESTPLANARTOE(I420, 2, 2, ABGR, 1, 4, ARGB, 4)
1380
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ABGR, 4)
1381
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RAW, 3)
1382
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB24, 3)
1383
+ TESTPLANARTOE(I420, 2, 2, BGRA, 1, 4, ARGB, 4)
1384
+ TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, ARGB, 4)
1385
+ TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, RGB24, 3)
1386
+ TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, ARGB, 4)
1387
+ TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, RAW, 3)
1388
+ TESTPLANARTOE(I420, 2, 2, RGBA, 1, 4, ARGB, 4)
1389
+ TESTPLANARTOE(H420, 2, 2, ABGR, 1, 4, ARGB, 4)
1390
+ TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, ABGR, 4)
1391
+ TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, RAW, 3)
1392
+ TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, RGB24, 3)
1393
+ TESTPLANARTOE(H420, 2, 2, RAW, 1, 3, ARGB, 4)
1394
+ TESTPLANARTOE(H420, 2, 2, RAW, 1, 3, RGB24, 3)
1395
+ TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, ARGB, 4)
1396
+ TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, RAW, 3)
1397
+ TESTPLANARTOE(J420, 2, 2, ABGR, 1, 4, ARGB, 4)
1398
+ TESTPLANARTOE(J420, 2, 2, ARGB, 1, 4, ARGB, 4)
1399
+ TESTPLANARTOE(U420, 2, 2, ABGR, 1, 4, ARGB, 4)
1400
+ TESTPLANARTOE(U420, 2, 2, ARGB, 1, 4, ARGB, 4)
1401
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
1402
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB565, 2)
1403
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ARGB1555, 2)
1404
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ARGB4444, 2)
1405
+ TESTPLANARTOE(I422, 2, 1, ARGB, 1, 4, RGB565, 2)
1406
+ #endif
1407
+ TESTPLANARTOE(I422, 2, 1, ARGB, 1, 4, ABGR, 4)
1408
+ TESTPLANARTOE(I422, 2, 1, ABGR, 1, 4, ARGB, 4)
1409
+ TESTPLANARTOE(J422, 2, 1, ARGB, 1, 4, ARGB, 4)
1410
+ TESTPLANARTOE(J422, 2, 1, ABGR, 1, 4, ARGB, 4)
1411
+ TESTPLANARTOE(H422, 2, 1, ARGB, 1, 4, ARGB, 4)
1412
+ TESTPLANARTOE(H422, 2, 1, ABGR, 1, 4, ARGB, 4)
1413
+ TESTPLANARTOE(U422, 2, 1, ARGB, 1, 4, ARGB, 4)
1414
+ TESTPLANARTOE(U422, 2, 1, ABGR, 1, 4, ARGB, 4)
1415
+ TESTPLANARTOE(V422, 2, 1, ARGB, 1, 4, ARGB, 4)
1416
+ TESTPLANARTOE(V422, 2, 1, ABGR, 1, 4, ARGB, 4)
1417
+ TESTPLANARTOE(I422, 2, 1, BGRA, 1, 4, ARGB, 4)
1418
+ TESTPLANARTOE(I422, 2, 1, RGBA, 1, 4, ARGB, 4)
1419
+ TESTPLANARTOE(I444, 1, 1, ARGB, 1, 4, ABGR, 4)
1420
+ TESTPLANARTOE(I444, 1, 1, ABGR, 1, 4, ARGB, 4)
1421
+ TESTPLANARTOE(J444, 1, 1, ARGB, 1, 4, ARGB, 4)
1422
+ TESTPLANARTOE(J444, 1, 1, ABGR, 1, 4, ARGB, 4)
1423
+ TESTPLANARTOE(H444, 1, 1, ARGB, 1, 4, ARGB, 4)
1424
+ TESTPLANARTOE(H444, 1, 1, ABGR, 1, 4, ARGB, 4)
1425
+ TESTPLANARTOE(U444, 1, 1, ARGB, 1, 4, ARGB, 4)
1426
+ TESTPLANARTOE(U444, 1, 1, ABGR, 1, 4, ARGB, 4)
1427
+ TESTPLANARTOE(V444, 1, 1, ARGB, 1, 4, ARGB, 4)
1428
+ TESTPLANARTOE(V444, 1, 1, ABGR, 1, 4, ARGB, 4)
1429
+ TESTPLANARTOE(I420, 2, 2, YUY2, 2, 4, ARGB, 4)
1430
+ TESTPLANARTOE(I420, 2, 2, UYVY, 2, 4, ARGB, 4)
1431
+ TESTPLANARTOE(I422, 2, 1, YUY2, 2, 4, ARGB, 4)
1432
+ TESTPLANARTOE(I422, 2, 1, UYVY, 2, 4, ARGB, 4)
1433
+ #else
1434
+ TESTPLANARTOE(I420, 2, 2, ABGR, 1, 4, ARGB, 4)
1435
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ARGB1555, 2)
1436
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ARGB4444, 2)
1437
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RAW, 3)
1438
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB24, 3)
1439
+ TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB565, 2)
1440
+ TESTPLANARTOE(I420, 2, 2, BGRA, 1, 4, ARGB, 4)
1441
+ TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, ARGB, 4)
1442
+ TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, RGB24, 3)
1443
+ TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, ARGB, 4)
1444
+ TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, RAW, 3)
1445
+ TESTPLANARTOE(I420, 2, 2, RGBA, 1, 4, ARGB, 4)
1446
+ TESTPLANARTOE(I420, 2, 2, UYVY, 2, 4, ARGB, 4)
1447
+ TESTPLANARTOE(I420, 2, 2, YUY2, 2, 4, ARGB, 4)
1448
+ TESTPLANARTOE(I422, 2, 1, ABGR, 1, 4, ARGB, 4)
1449
+ TESTPLANARTOE(I422, 2, 1, ARGB, 1, 4, RGB565, 2)
1450
+ TESTPLANARTOE(I422, 2, 1, BGRA, 1, 4, ARGB, 4)
1451
+ TESTPLANARTOE(I422, 2, 1, RGBA, 1, 4, ARGB, 4)
1452
+ TESTPLANARTOE(I422, 2, 1, UYVY, 2, 4, ARGB, 4)
1453
+ TESTPLANARTOE(I422, 2, 1, YUY2, 2, 4, ARGB, 4)
1454
+ TESTPLANARTOE(I444, 1, 1, ABGR, 1, 4, ARGB, 4)
1455
+ #endif
1456
+
1457
+ // Transitive test: Compare 1 step vs 2 step conversion for YUVA to ARGB.
1458
+ // Benchmark 2 step conversion for comparison to 1 step conversion.
1459
+ #define TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1460
+ W1280, N, NEG, OFF, FMT_C, BPP_C, ATTEN) \
1461
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##To##FMT_C##N) { \
1462
+ const int kWidth = W1280; \
1463
+ const int kHeight = benchmark_height_; \
1464
+ const int kStrideB = SUBSAMPLE(kWidth, SUB_B) * BPP_B; \
1465
+ const int kSizeUV = \
1466
+ SUBSAMPLE(kWidth, SUBSAMP_X) * SUBSAMPLE(kHeight, SUBSAMP_Y); \
1467
+ align_buffer_page_end(src_y, kWidth* kHeight + OFF); \
1468
+ align_buffer_page_end(src_u, kSizeUV + OFF); \
1469
+ align_buffer_page_end(src_v, kSizeUV + OFF); \
1470
+ align_buffer_page_end(src_a, kWidth* kHeight + OFF); \
1471
+ align_buffer_page_end(dst_argb_b, kStrideB* kHeight + OFF); \
1472
+ const int kStrideC = kWidth * BPP_C; \
1473
+ align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
1474
+ align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
1475
+ memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
1476
+ memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
1477
+ memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
1478
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
1479
+ src_y[i + OFF] = (fastrand() & 0xff); \
1480
+ src_a[i + OFF] = (fastrand() & 0xff); \
1481
+ } \
1482
+ for (int i = 0; i < kSizeUV; ++i) { \
1483
+ src_u[i + OFF] = (fastrand() & 0xff); \
1484
+ src_v[i + OFF] = (fastrand() & 0xff); \
1485
+ } \
1486
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1487
+ /* Convert A to B */ \
1488
+ FMT_PLANAR##To##FMT_B( \
1489
+ src_y + OFF, kWidth, src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \
1490
+ src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), src_a + OFF, kWidth, \
1491
+ dst_argb_b + OFF, kStrideB, kWidth, NEG kHeight, ATTEN); \
1492
+ /* Convert B to C */ \
1493
+ FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
1494
+ kStrideC, kWidth, kHeight); \
1495
+ } \
1496
+ /* Convert A to C */ \
1497
+ FMT_PLANAR##To##FMT_C( \
1498
+ src_y + OFF, kWidth, src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \
1499
+ src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), src_a + OFF, kWidth, \
1500
+ dst_argb_c + OFF, kStrideC, kWidth, NEG kHeight, ATTEN); \
1501
+ for (int i = 0; i < kStrideC * kHeight; ++i) { \
1502
+ EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_bc[i + OFF]); \
1503
+ } \
1504
+ free_aligned_buffer_page_end(src_y); \
1505
+ free_aligned_buffer_page_end(src_u); \
1506
+ free_aligned_buffer_page_end(src_v); \
1507
+ free_aligned_buffer_page_end(src_a); \
1508
+ free_aligned_buffer_page_end(dst_argb_b); \
1509
+ free_aligned_buffer_page_end(dst_argb_c); \
1510
+ free_aligned_buffer_page_end(dst_argb_bc); \
1511
+ }
1512
+
1513
+ #if defined(ENABLE_FULL_TESTS)
1514
+ #define TESTQPLANARTOE(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1515
+ FMT_C, BPP_C) \
1516
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1517
+ benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C, 0) \
1518
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1519
+ benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C, 0) \
1520
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1521
+ benchmark_width_, _Invert, -, 0, FMT_C, BPP_C, 0) \
1522
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1523
+ benchmark_width_, _Opt, +, 0, FMT_C, BPP_C, 0) \
1524
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1525
+ benchmark_width_, _Premult, +, 0, FMT_C, BPP_C, 1)
1526
+ #else
1527
+ #define TESTQPLANARTOE(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1528
+ FMT_C, BPP_C) \
1529
+ TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
1530
+ benchmark_width_, _Opt, +, 0, FMT_C, BPP_C, 0)
1531
+ #endif
1532
+
1533
+ #if defined(ENABLE_FULL_TESTS)
1534
+ TESTQPLANARTOE(I420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1535
+ TESTQPLANARTOE(I420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1536
+ TESTQPLANARTOE(J420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1537
+ TESTQPLANARTOE(J420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1538
+ TESTQPLANARTOE(H420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1539
+ TESTQPLANARTOE(H420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1540
+ TESTQPLANARTOE(F420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1541
+ TESTQPLANARTOE(F420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1542
+ TESTQPLANARTOE(U420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1543
+ TESTQPLANARTOE(U420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1544
+ TESTQPLANARTOE(V420Alpha, 2, 2, ARGB, 1, 4, ABGR, 4)
1545
+ TESTQPLANARTOE(V420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1546
+ TESTQPLANARTOE(I422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1547
+ TESTQPLANARTOE(I422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1548
+ TESTQPLANARTOE(J422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1549
+ TESTQPLANARTOE(J422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1550
+ TESTQPLANARTOE(F422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1551
+ TESTQPLANARTOE(F422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1552
+ TESTQPLANARTOE(H422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1553
+ TESTQPLANARTOE(H422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1554
+ TESTQPLANARTOE(U422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1555
+ TESTQPLANARTOE(U422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1556
+ TESTQPLANARTOE(V422Alpha, 2, 1, ARGB, 1, 4, ABGR, 4)
1557
+ TESTQPLANARTOE(V422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1558
+ TESTQPLANARTOE(I444Alpha, 1, 1, ARGB, 1, 4, ABGR, 4)
1559
+ TESTQPLANARTOE(I444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1560
+ TESTQPLANARTOE(J444Alpha, 1, 1, ARGB, 1, 4, ABGR, 4)
1561
+ TESTQPLANARTOE(J444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1562
+ TESTQPLANARTOE(H444Alpha, 1, 1, ARGB, 1, 4, ABGR, 4)
1563
+ TESTQPLANARTOE(H444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1564
+ TESTQPLANARTOE(U444Alpha, 1, 1, ARGB, 1, 4, ABGR, 4)
1565
+ TESTQPLANARTOE(U444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1566
+ TESTQPLANARTOE(V444Alpha, 1, 1, ARGB, 1, 4, ABGR, 4)
1567
+ TESTQPLANARTOE(V444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1568
+ #else
1569
+ TESTQPLANARTOE(I420Alpha, 2, 2, ABGR, 1, 4, ARGB, 4)
1570
+ TESTQPLANARTOE(I422Alpha, 2, 1, ABGR, 1, 4, ARGB, 4)
1571
+ TESTQPLANARTOE(I444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
1572
+ #endif
1573
+
1574
+ #define TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, W1280, N, NEG, \
1575
+ OFF, FMT_C, BPP_C) \
1576
+ TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##To##FMT_C##N) { \
1577
+ const int kWidth = W1280; \
1578
+ const int kHeight = benchmark_height_; \
1579
+ const int kStrideA = SUBSAMPLE(kWidth, SUB_A) * BPP_A; \
1580
+ const int kStrideB = SUBSAMPLE(kWidth, SUB_B) * BPP_B; \
1581
+ align_buffer_page_end(src_argb_a, kStrideA* kHeight + OFF); \
1582
+ align_buffer_page_end(dst_argb_b, kStrideB* kHeight + OFF); \
1583
+ MemRandomize(src_argb_a + OFF, kStrideA * kHeight); \
1584
+ memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
1585
+ FMT_A##To##FMT_B(src_argb_a + OFF, kStrideA, dst_argb_b + OFF, kStrideB, \
1586
+ kWidth, NEG kHeight); \
1587
+ /* Convert to a 3rd format in 1 step and 2 steps and compare */ \
1588
+ const int kStrideC = kWidth * BPP_C; \
1589
+ align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
1590
+ align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
1591
+ memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
1592
+ memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
1593
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1594
+ FMT_A##To##FMT_C(src_argb_a + OFF, kStrideA, dst_argb_c + OFF, kStrideC, \
1595
+ kWidth, NEG kHeight); \
1596
+ /* Convert B to C */ \
1597
+ FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
1598
+ kStrideC, kWidth, kHeight); \
1599
+ } \
1600
+ for (int i = 0; i < kStrideC * kHeight; i += 4) { \
1601
+ EXPECT_EQ(dst_argb_c[i + OFF + 0], dst_argb_bc[i + OFF + 0]); \
1602
+ EXPECT_EQ(dst_argb_c[i + OFF + 1], dst_argb_bc[i + OFF + 1]); \
1603
+ EXPECT_EQ(dst_argb_c[i + OFF + 2], dst_argb_bc[i + OFF + 2]); \
1604
+ EXPECT_NEAR(dst_argb_c[i + OFF + 3], dst_argb_bc[i + OFF + 3], 64); \
1605
+ } \
1606
+ free_aligned_buffer_page_end(src_argb_a); \
1607
+ free_aligned_buffer_page_end(dst_argb_b); \
1608
+ free_aligned_buffer_page_end(dst_argb_c); \
1609
+ free_aligned_buffer_page_end(dst_argb_bc); \
1610
+ }
1611
+
1612
+ #if defined(ENABLE_FULL_TESTS)
1613
+ #define TESTPLANETOE(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, FMT_C, BPP_C) \
1614
+ TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, \
1615
+ benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
1616
+ TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
1617
+ _Unaligned, +, 4, FMT_C, BPP_C) \
1618
+ TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
1619
+ _Invert, -, 0, FMT_C, BPP_C) \
1620
+ TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
1621
+ _Opt, +, 0, FMT_C, BPP_C)
1622
+ #else
1623
+ #define TESTPLANETOE(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, FMT_C, BPP_C) \
1624
+ TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
1625
+ _Opt, +, 0, FMT_C, BPP_C)
1626
+ #endif
1627
+
1628
+ // Caveat: Destination needs to be 4 bytes
1629
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
1630
+ TESTPLANETOE(ARGB, 1, 4, AR30, 1, 4, ARGB, 4)
1631
+ TESTPLANETOE(ABGR, 1, 4, AR30, 1, 4, ABGR, 4)
1632
+ TESTPLANETOE(AR30, 1, 4, ARGB, 1, 4, ABGR, 4)
1633
+ TESTPLANETOE(AR30, 1, 4, ABGR, 1, 4, ARGB, 4)
1634
+ TESTPLANETOE(ARGB, 1, 4, AB30, 1, 4, ARGB, 4)
1635
+ TESTPLANETOE(ABGR, 1, 4, AB30, 1, 4, ABGR, 4)
1636
+ TESTPLANETOE(AB30, 1, 4, ARGB, 1, 4, ABGR, 4)
1637
+ TESTPLANETOE(AB30, 1, 4, ABGR, 1, 4, ARGB, 4)
1638
+ #endif
1639
+
1640
+ TEST_F(LibYUVConvertTest, RotateWithARGBSource) {
1641
+ // 2x2 frames
1642
+ uint32_t src[4];
1643
+ uint32_t dst[4];
1644
+ // some random input
1645
+ src[0] = 0x11000000;
1646
+ src[1] = 0x00450000;
1647
+ src[2] = 0x00009f00;
1648
+ src[3] = 0x000000ff;
1649
+ // zeros on destination
1650
+ dst[0] = 0x00000000;
1651
+ dst[1] = 0x00000000;
1652
+ dst[2] = 0x00000000;
1653
+ dst[3] = 0x00000000;
1654
+
1655
+ int r = ConvertToARGB(reinterpret_cast<uint8_t*>(src),
1656
+ 16, // input size
1657
+ reinterpret_cast<uint8_t*>(dst),
1658
+ 8, // destination stride
1659
+ 0, // crop_x
1660
+ 0, // crop_y
1661
+ 2, // width
1662
+ 2, // height
1663
+ 2, // crop width
1664
+ 2, // crop height
1665
+ kRotate90, FOURCC_ARGB);
1666
+
1667
+ EXPECT_EQ(r, 0);
1668
+ // 90 degrees rotation, no conversion
1669
+ EXPECT_EQ(dst[0], src[2]);
1670
+ EXPECT_EQ(dst[1], src[0]);
1671
+ EXPECT_EQ(dst[2], src[3]);
1672
+ EXPECT_EQ(dst[3], src[1]);
1673
+ }
1674
+
1675
+ #ifdef HAS_ARGBTOAR30ROW_AVX2
1676
+ TEST_F(LibYUVConvertTest, ARGBToAR30Row_Opt) {
1677
+ // ARGBToAR30Row_AVX2 expects a multiple of 8 pixels.
1678
+ const int kPixels = (benchmark_width_ * benchmark_height_ + 7) & ~7;
1679
+ align_buffer_page_end(src, kPixels * 4);
1680
+ align_buffer_page_end(dst_opt, kPixels * 4);
1681
+ align_buffer_page_end(dst_c, kPixels * 4);
1682
+ MemRandomize(src, kPixels * 4);
1683
+ memset(dst_opt, 0, kPixels * 4);
1684
+ memset(dst_c, 1, kPixels * 4);
1685
+
1686
+ ARGBToAR30Row_C(src, dst_c, kPixels);
1687
+
1688
+ int has_avx2 = TestCpuFlag(kCpuHasAVX2);
1689
+ int has_ssse3 = TestCpuFlag(kCpuHasSSSE3);
1690
+ for (int i = 0; i < benchmark_iterations_; ++i) {
1691
+ if (has_avx2) {
1692
+ ARGBToAR30Row_AVX2(src, dst_opt, kPixels);
1693
+ } else if (has_ssse3) {
1694
+ ARGBToAR30Row_SSSE3(src, dst_opt, kPixels);
1695
+ } else {
1696
+ ARGBToAR30Row_C(src, dst_opt, kPixels);
1697
+ }
1698
+ }
1699
+ for (int i = 0; i < kPixels * 4; ++i) {
1700
+ EXPECT_EQ(dst_opt[i], dst_c[i]);
1701
+ }
1702
+
1703
+ free_aligned_buffer_page_end(src);
1704
+ free_aligned_buffer_page_end(dst_opt);
1705
+ free_aligned_buffer_page_end(dst_c);
1706
+ }
1707
+ #endif // HAS_ARGBTOAR30ROW_AVX2
1708
+
1709
+ #ifdef HAS_ABGRTOAR30ROW_AVX2
1710
+ TEST_F(LibYUVConvertTest, ABGRToAR30Row_Opt) {
1711
+ // ABGRToAR30Row_AVX2 expects a multiple of 8 pixels.
1712
+ const int kPixels = (benchmark_width_ * benchmark_height_ + 7) & ~7;
1713
+ align_buffer_page_end(src, kPixels * 4);
1714
+ align_buffer_page_end(dst_opt, kPixels * 4);
1715
+ align_buffer_page_end(dst_c, kPixels * 4);
1716
+ MemRandomize(src, kPixels * 4);
1717
+ memset(dst_opt, 0, kPixels * 4);
1718
+ memset(dst_c, 1, kPixels * 4);
1719
+
1720
+ ABGRToAR30Row_C(src, dst_c, kPixels);
1721
+
1722
+ int has_avx2 = TestCpuFlag(kCpuHasAVX2);
1723
+ int has_ssse3 = TestCpuFlag(kCpuHasSSSE3);
1724
+ for (int i = 0; i < benchmark_iterations_; ++i) {
1725
+ if (has_avx2) {
1726
+ ABGRToAR30Row_AVX2(src, dst_opt, kPixels);
1727
+ } else if (has_ssse3) {
1728
+ ABGRToAR30Row_SSSE3(src, dst_opt, kPixels);
1729
+ } else {
1730
+ ABGRToAR30Row_C(src, dst_opt, kPixels);
1731
+ }
1732
+ }
1733
+ for (int i = 0; i < kPixels * 4; ++i) {
1734
+ EXPECT_EQ(dst_opt[i], dst_c[i]);
1735
+ }
1736
+
1737
+ free_aligned_buffer_page_end(src);
1738
+ free_aligned_buffer_page_end(dst_opt);
1739
+ free_aligned_buffer_page_end(dst_c);
1740
+ }
1741
+ #endif // HAS_ABGRTOAR30ROW_AVX2
1742
+
1743
+ #if !defined(LEAN_TESTS)
1744
+
1745
+ // Provide matrix wrappers for 12 bit YUV
1746
+ #define I012ToARGB(a, b, c, d, e, f, g, h, i, j) \
1747
+ I012ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1748
+ #define I012ToAR30(a, b, c, d, e, f, g, h, i, j) \
1749
+ I012ToAR30Matrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1750
+ #define I012ToAB30(a, b, c, d, e, f, g, h, i, j) \
1751
+ I012ToAB30Matrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1752
+
1753
+ #define I410ToARGB(a, b, c, d, e, f, g, h, i, j) \
1754
+ I410ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1755
+ #define I410ToABGR(a, b, c, d, e, f, g, h, i, j) \
1756
+ I410ToABGRMatrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1757
+ #define H410ToARGB(a, b, c, d, e, f, g, h, i, j) \
1758
+ I410ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuvH709Constants, i, j)
1759
+ #define H410ToABGR(a, b, c, d, e, f, g, h, i, j) \
1760
+ I410ToABGRMatrix(a, b, c, d, e, f, g, h, &kYuvH709Constants, i, j)
1761
+ #define U410ToARGB(a, b, c, d, e, f, g, h, i, j) \
1762
+ I410ToARGBMatrix(a, b, c, d, e, f, g, h, &kYuv2020Constants, i, j)
1763
+ #define U410ToABGR(a, b, c, d, e, f, g, h, i, j) \
1764
+ I410ToABGRMatrix(a, b, c, d, e, f, g, h, &kYuv2020Constants, i, j)
1765
+ #define I410ToAR30(a, b, c, d, e, f, g, h, i, j) \
1766
+ I410ToAR30Matrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1767
+ #define I410ToAB30(a, b, c, d, e, f, g, h, i, j) \
1768
+ I410ToAB30Matrix(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j)
1769
+ #define H410ToAR30(a, b, c, d, e, f, g, h, i, j) \
1770
+ I410ToAR30Matrix(a, b, c, d, e, f, g, h, &kYuvH709Constants, i, j)
1771
+ #define H410ToAB30(a, b, c, d, e, f, g, h, i, j) \
1772
+ I410ToAB30Matrix(a, b, c, d, e, f, g, h, &kYuvH709Constants, i, j)
1773
+ #define U410ToAR30(a, b, c, d, e, f, g, h, i, j) \
1774
+ I410ToAR30Matrix(a, b, c, d, e, f, g, h, &kYuv2020Constants, i, j)
1775
+ #define U410ToAB30(a, b, c, d, e, f, g, h, i, j) \
1776
+ I410ToAB30Matrix(a, b, c, d, e, f, g, h, &kYuv2020Constants, i, j)
1777
+
1778
+ #define I010ToARGBFilter(a, b, c, d, e, f, g, h, i, j) \
1779
+ I010ToARGBMatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
1780
+ kFilterBilinear)
1781
+ #define I010ToAR30Filter(a, b, c, d, e, f, g, h, i, j) \
1782
+ I010ToAR30MatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
1783
+ kFilterBilinear)
1784
+ #define I210ToARGBFilter(a, b, c, d, e, f, g, h, i, j) \
1785
+ I210ToARGBMatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
1786
+ kFilterBilinear)
1787
+ #define I210ToAR30Filter(a, b, c, d, e, f, g, h, i, j) \
1788
+ I210ToAR30MatrixFilter(a, b, c, d, e, f, g, h, &kYuvI601Constants, i, j, \
1789
+ kFilterBilinear)
1790
+
1791
+ // TODO(fbarchard): Fix clamping issue affected by U channel.
1792
+ #define TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, \
1793
+ BPP_B, ALIGN, YALIGN, W1280, N, NEG, SOFF, DOFF) \
1794
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
1795
+ const int kWidth = W1280; \
1796
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
1797
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
1798
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
1799
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
1800
+ const int kBpc = 2; \
1801
+ align_buffer_page_end(src_y, kWidth* kHeight* kBpc + SOFF); \
1802
+ align_buffer_page_end(src_u, kSizeUV* kBpc + SOFF); \
1803
+ align_buffer_page_end(src_v, kSizeUV* kBpc + SOFF); \
1804
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + DOFF); \
1805
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + DOFF); \
1806
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
1807
+ reinterpret_cast<uint16_t*>(src_y + SOFF)[i] = (fastrand() & FMT_MASK); \
1808
+ } \
1809
+ for (int i = 0; i < kSizeUV; ++i) { \
1810
+ reinterpret_cast<uint16_t*>(src_u + SOFF)[i] = (fastrand() & FMT_MASK); \
1811
+ reinterpret_cast<uint16_t*>(src_v + SOFF)[i] = (fastrand() & FMT_MASK); \
1812
+ } \
1813
+ memset(dst_argb_c + DOFF, 1, kStrideB * kHeight); \
1814
+ memset(dst_argb_opt + DOFF, 101, kStrideB * kHeight); \
1815
+ MaskCpuFlags(disable_cpu_flags_); \
1816
+ FMT_PLANAR##To##FMT_B( \
1817
+ reinterpret_cast<uint16_t*>(src_y + SOFF), kWidth, \
1818
+ reinterpret_cast<uint16_t*>(src_u + SOFF), kStrideUV, \
1819
+ reinterpret_cast<uint16_t*>(src_v + SOFF), kStrideUV, \
1820
+ dst_argb_c + DOFF, kStrideB, kWidth, NEG kHeight); \
1821
+ MaskCpuFlags(benchmark_cpu_info_); \
1822
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1823
+ FMT_PLANAR##To##FMT_B( \
1824
+ reinterpret_cast<uint16_t*>(src_y + SOFF), kWidth, \
1825
+ reinterpret_cast<uint16_t*>(src_u + SOFF), kStrideUV, \
1826
+ reinterpret_cast<uint16_t*>(src_v + SOFF), kStrideUV, \
1827
+ dst_argb_opt + DOFF, kStrideB, kWidth, NEG kHeight); \
1828
+ } \
1829
+ for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \
1830
+ EXPECT_EQ(dst_argb_c[i + DOFF], dst_argb_opt[i + DOFF]); \
1831
+ } \
1832
+ free_aligned_buffer_page_end(src_y); \
1833
+ free_aligned_buffer_page_end(src_u); \
1834
+ free_aligned_buffer_page_end(src_v); \
1835
+ free_aligned_buffer_page_end(dst_argb_c); \
1836
+ free_aligned_buffer_page_end(dst_argb_opt); \
1837
+ }
1838
+
1839
+ #if defined(ENABLE_FULL_TESTS)
1840
+ #define TESTPLANAR16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, \
1841
+ BPP_B, ALIGN, YALIGN) \
1842
+ TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
1843
+ ALIGN, YALIGN, benchmark_width_ + 1, _Any, +, 0, 0) \
1844
+ TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
1845
+ ALIGN, YALIGN, benchmark_width_, _Unaligned, +, 4, 4) \
1846
+ TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
1847
+ ALIGN, YALIGN, benchmark_width_, _Invert, -, 0, 0) \
1848
+ TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
1849
+ ALIGN, YALIGN, benchmark_width_, _Opt, +, 0, 0)
1850
+ #else
1851
+ #define TESTPLANAR16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, \
1852
+ BPP_B, ALIGN, YALIGN) \
1853
+ TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
1854
+ ALIGN, YALIGN, benchmark_width_, _Opt, +, 0, 0)
1855
+ #endif
1856
+
1857
+ // These conversions are only optimized for x86
1858
+ #if !defined(DISABLE_SLOW_TESTS) || defined(__x86_64__) || defined(__i386__)
1859
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, ARGB, 4, 4, 1)
1860
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, ABGR, 4, 4, 1)
1861
+ TESTPLANAR16TOB(H010, 2, 2, 0x3ff, ARGB, 4, 4, 1)
1862
+ TESTPLANAR16TOB(H010, 2, 2, 0x3ff, ABGR, 4, 4, 1)
1863
+ TESTPLANAR16TOB(U010, 2, 2, 0x3ff, ARGB, 4, 4, 1)
1864
+ TESTPLANAR16TOB(U010, 2, 2, 0x3ff, ABGR, 4, 4, 1)
1865
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, ARGB, 4, 4, 1)
1866
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, ABGR, 4, 4, 1)
1867
+ TESTPLANAR16TOB(H210, 2, 1, 0x3ff, ARGB, 4, 4, 1)
1868
+ TESTPLANAR16TOB(H210, 2, 1, 0x3ff, ABGR, 4, 4, 1)
1869
+ TESTPLANAR16TOB(U210, 2, 1, 0x3ff, ARGB, 4, 4, 1)
1870
+ TESTPLANAR16TOB(U210, 2, 1, 0x3ff, ABGR, 4, 4, 1)
1871
+ TESTPLANAR16TOB(I410, 1, 1, 0x3ff, ARGB, 4, 4, 1)
1872
+ TESTPLANAR16TOB(I410, 1, 1, 0x3ff, ABGR, 4, 4, 1)
1873
+ TESTPLANAR16TOB(H410, 1, 1, 0x3ff, ARGB, 4, 4, 1)
1874
+ TESTPLANAR16TOB(H410, 1, 1, 0x3ff, ABGR, 4, 4, 1)
1875
+ TESTPLANAR16TOB(U410, 1, 1, 0x3ff, ARGB, 4, 4, 1)
1876
+ TESTPLANAR16TOB(U410, 1, 1, 0x3ff, ABGR, 4, 4, 1)
1877
+ TESTPLANAR16TOB(I012, 2, 2, 0xfff, ARGB, 4, 4, 1)
1878
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, ARGBFilter, 4, 4, 1)
1879
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, ARGBFilter, 4, 4, 1)
1880
+
1881
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
1882
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, AR30, 4, 4, 1)
1883
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, AB30, 4, 4, 1)
1884
+ TESTPLANAR16TOB(H010, 2, 2, 0x3ff, AR30, 4, 4, 1)
1885
+ TESTPLANAR16TOB(H010, 2, 2, 0x3ff, AB30, 4, 4, 1)
1886
+ TESTPLANAR16TOB(U010, 2, 2, 0x3ff, AR30, 4, 4, 1)
1887
+ TESTPLANAR16TOB(U010, 2, 2, 0x3ff, AB30, 4, 4, 1)
1888
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, AR30, 4, 4, 1)
1889
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, AB30, 4, 4, 1)
1890
+ TESTPLANAR16TOB(H210, 2, 1, 0x3ff, AR30, 4, 4, 1)
1891
+ TESTPLANAR16TOB(H210, 2, 1, 0x3ff, AB30, 4, 4, 1)
1892
+ TESTPLANAR16TOB(U210, 2, 1, 0x3ff, AR30, 4, 4, 1)
1893
+ TESTPLANAR16TOB(U210, 2, 1, 0x3ff, AB30, 4, 4, 1)
1894
+ TESTPLANAR16TOB(I410, 1, 1, 0x3ff, AR30, 4, 4, 1)
1895
+ TESTPLANAR16TOB(I410, 1, 1, 0x3ff, AB30, 4, 4, 1)
1896
+ TESTPLANAR16TOB(H410, 1, 1, 0x3ff, AR30, 4, 4, 1)
1897
+ TESTPLANAR16TOB(H410, 1, 1, 0x3ff, AB30, 4, 4, 1)
1898
+ TESTPLANAR16TOB(U410, 1, 1, 0x3ff, AR30, 4, 4, 1)
1899
+ TESTPLANAR16TOB(U410, 1, 1, 0x3ff, AB30, 4, 4, 1)
1900
+ TESTPLANAR16TOB(I012, 2, 2, 0xfff, AR30, 4, 4, 1)
1901
+ TESTPLANAR16TOB(I012, 2, 2, 0xfff, AB30, 4, 4, 1)
1902
+ TESTPLANAR16TOB(I010, 2, 2, 0x3ff, AR30Filter, 4, 4, 1)
1903
+ TESTPLANAR16TOB(I210, 2, 1, 0x3ff, AR30Filter, 4, 4, 1)
1904
+ #endif // LITTLE_ENDIAN_ONLY_TEST
1905
+ #endif // DISABLE_SLOW_TESTS
1906
+
1907
+ #define TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, \
1908
+ ALIGN, YALIGN, W1280, N, NEG, OFF, ATTEN, S_DEPTH) \
1909
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
1910
+ const int kWidth = W1280; \
1911
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
1912
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
1913
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X); \
1914
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y); \
1915
+ const int kBpc = 2; \
1916
+ align_buffer_page_end(src_y, kWidth* kHeight* kBpc + OFF); \
1917
+ align_buffer_page_end(src_u, kSizeUV* kBpc + OFF); \
1918
+ align_buffer_page_end(src_v, kSizeUV* kBpc + OFF); \
1919
+ align_buffer_page_end(src_a, kWidth* kHeight* kBpc + OFF); \
1920
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + OFF); \
1921
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + OFF); \
1922
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
1923
+ reinterpret_cast<uint16_t*>(src_y + OFF)[i] = \
1924
+ (fastrand() & ((1 << S_DEPTH) - 1)); \
1925
+ reinterpret_cast<uint16_t*>(src_a + OFF)[i] = \
1926
+ (fastrand() & ((1 << S_DEPTH) - 1)); \
1927
+ } \
1928
+ for (int i = 0; i < kSizeUV; ++i) { \
1929
+ reinterpret_cast<uint16_t*>(src_u + OFF)[i] = \
1930
+ (fastrand() & ((1 << S_DEPTH) - 1)); \
1931
+ reinterpret_cast<uint16_t*>(src_v + OFF)[i] = \
1932
+ (fastrand() & ((1 << S_DEPTH) - 1)); \
1933
+ } \
1934
+ memset(dst_argb_c + OFF, 1, kStrideB * kHeight); \
1935
+ memset(dst_argb_opt + OFF, 101, kStrideB * kHeight); \
1936
+ MaskCpuFlags(disable_cpu_flags_); \
1937
+ FMT_PLANAR##To##FMT_B(reinterpret_cast<uint16_t*>(src_y + OFF), kWidth, \
1938
+ reinterpret_cast<uint16_t*>(src_u + OFF), kStrideUV, \
1939
+ reinterpret_cast<uint16_t*>(src_v + OFF), kStrideUV, \
1940
+ reinterpret_cast<uint16_t*>(src_a + OFF), kWidth, \
1941
+ dst_argb_c + OFF, kStrideB, kWidth, NEG kHeight, \
1942
+ ATTEN); \
1943
+ MaskCpuFlags(benchmark_cpu_info_); \
1944
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
1945
+ FMT_PLANAR##To##FMT_B( \
1946
+ reinterpret_cast<uint16_t*>(src_y + OFF), kWidth, \
1947
+ reinterpret_cast<uint16_t*>(src_u + OFF), kStrideUV, \
1948
+ reinterpret_cast<uint16_t*>(src_v + OFF), kStrideUV, \
1949
+ reinterpret_cast<uint16_t*>(src_a + OFF), kWidth, \
1950
+ dst_argb_opt + OFF, kStrideB, kWidth, NEG kHeight, ATTEN); \
1951
+ } \
1952
+ for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \
1953
+ EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_opt[i + OFF]); \
1954
+ } \
1955
+ free_aligned_buffer_page_end(src_y); \
1956
+ free_aligned_buffer_page_end(src_u); \
1957
+ free_aligned_buffer_page_end(src_v); \
1958
+ free_aligned_buffer_page_end(src_a); \
1959
+ free_aligned_buffer_page_end(dst_argb_c); \
1960
+ free_aligned_buffer_page_end(dst_argb_opt); \
1961
+ }
1962
+
1963
+ #if defined(ENABLE_FULL_TESTS)
1964
+ #define TESTQPLANAR16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, \
1965
+ ALIGN, YALIGN, S_DEPTH) \
1966
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1967
+ YALIGN, benchmark_width_ + 1, _Any, +, 0, 0, S_DEPTH) \
1968
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1969
+ YALIGN, benchmark_width_, _Unaligned, +, 2, 0, S_DEPTH) \
1970
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1971
+ YALIGN, benchmark_width_, _Invert, -, 0, 0, S_DEPTH) \
1972
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1973
+ YALIGN, benchmark_width_, _Opt, +, 0, 0, S_DEPTH) \
1974
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1975
+ YALIGN, benchmark_width_, _Premult, +, 0, 1, S_DEPTH)
1976
+ #else
1977
+ #define TESTQPLANAR16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, \
1978
+ ALIGN, YALIGN, S_DEPTH) \
1979
+ TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
1980
+ YALIGN, benchmark_width_, _Opt, +, 0, 0, S_DEPTH)
1981
+ #endif
1982
+
1983
+ #define I010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1984
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
1985
+ l, m)
1986
+ #define I010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1987
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
1988
+ l, m)
1989
+ #define J010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1990
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1991
+ l, m)
1992
+ #define J010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1993
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
1994
+ l, m)
1995
+ #define F010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1996
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
1997
+ l, m)
1998
+ #define F010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
1999
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
2000
+ l, m)
2001
+ #define H010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2002
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2003
+ l, m)
2004
+ #define H010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2005
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2006
+ l, m)
2007
+ #define U010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2008
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2009
+ l, m)
2010
+ #define U010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2011
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2012
+ l, m)
2013
+ #define V010AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2014
+ I010AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2015
+ l, m)
2016
+ #define V010AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2017
+ I010AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2018
+ l, m)
2019
+ #define I210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2020
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
2021
+ l, m)
2022
+ #define I210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2023
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
2024
+ l, m)
2025
+ #define J210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2026
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
2027
+ l, m)
2028
+ #define J210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2029
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
2030
+ l, m)
2031
+ #define F210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2032
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
2033
+ l, m)
2034
+ #define F210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2035
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
2036
+ l, m)
2037
+ #define H210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2038
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2039
+ l, m)
2040
+ #define H210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2041
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2042
+ l, m)
2043
+ #define U210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2044
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2045
+ l, m)
2046
+ #define U210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2047
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2048
+ l, m)
2049
+ #define V210AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2050
+ I210AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2051
+ l, m)
2052
+ #define V210AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2053
+ I210AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2054
+ l, m)
2055
+ #define I410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2056
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
2057
+ l, m)
2058
+ #define I410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2059
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvI601Constants, k, \
2060
+ l, m)
2061
+ #define J410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2062
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
2063
+ l, m)
2064
+ #define J410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2065
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvJPEGConstants, k, \
2066
+ l, m)
2067
+ #define F410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2068
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
2069
+ l, m)
2070
+ #define F410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2071
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvF709Constants, k, \
2072
+ l, m)
2073
+ #define H410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2074
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2075
+ l, m)
2076
+ #define H410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2077
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvH709Constants, k, \
2078
+ l, m)
2079
+ #define U410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2080
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2081
+ l, m)
2082
+ #define U410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2083
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuv2020Constants, k, \
2084
+ l, m)
2085
+ #define V410AlphaToARGB(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2086
+ I410AlphaToARGBMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2087
+ l, m)
2088
+ #define V410AlphaToABGR(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2089
+ I410AlphaToABGRMatrix(a, b, c, d, e, f, g, h, i, j, &kYuvV2020Constants, k, \
2090
+ l, m)
2091
+ #define I010AlphaToARGBFilter(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2092
+ I010AlphaToARGBMatrixFilter(a, b, c, d, e, f, g, h, i, j, \
2093
+ &kYuvI601Constants, k, l, m, kFilterBilinear)
2094
+ #define I210AlphaToARGBFilter(a, b, c, d, e, f, g, h, i, j, k, l, m) \
2095
+ I010AlphaToARGBMatrixFilter(a, b, c, d, e, f, g, h, i, j, \
2096
+ &kYuvI601Constants, k, l, m, kFilterBilinear)
2097
+
2098
+ // These conversions are only optimized for x86
2099
+ #if !defined(DISABLE_SLOW_TESTS) || defined(__x86_64__) || defined(__i386__)
2100
+ TESTQPLANAR16TOB(I010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2101
+ TESTQPLANAR16TOB(I010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2102
+ TESTQPLANAR16TOB(J010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2103
+ TESTQPLANAR16TOB(J010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2104
+ TESTQPLANAR16TOB(H010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2105
+ TESTQPLANAR16TOB(H010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2106
+ TESTQPLANAR16TOB(F010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2107
+ TESTQPLANAR16TOB(F010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2108
+ TESTQPLANAR16TOB(U010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2109
+ TESTQPLANAR16TOB(U010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2110
+ TESTQPLANAR16TOB(V010Alpha, 2, 2, ARGB, 4, 4, 1, 10)
2111
+ TESTQPLANAR16TOB(V010Alpha, 2, 2, ABGR, 4, 4, 1, 10)
2112
+ TESTQPLANAR16TOB(I210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2113
+ TESTQPLANAR16TOB(I210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2114
+ TESTQPLANAR16TOB(J210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2115
+ TESTQPLANAR16TOB(J210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2116
+ TESTQPLANAR16TOB(H210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2117
+ TESTQPLANAR16TOB(H210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2118
+ TESTQPLANAR16TOB(F210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2119
+ TESTQPLANAR16TOB(F210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2120
+ TESTQPLANAR16TOB(U210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2121
+ TESTQPLANAR16TOB(U210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2122
+ TESTQPLANAR16TOB(V210Alpha, 2, 1, ARGB, 4, 4, 1, 10)
2123
+ TESTQPLANAR16TOB(V210Alpha, 2, 1, ABGR, 4, 4, 1, 10)
2124
+ TESTQPLANAR16TOB(I410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2125
+ TESTQPLANAR16TOB(I410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2126
+ TESTQPLANAR16TOB(J410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2127
+ TESTQPLANAR16TOB(J410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2128
+ TESTQPLANAR16TOB(H410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2129
+ TESTQPLANAR16TOB(H410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2130
+ TESTQPLANAR16TOB(F410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2131
+ TESTQPLANAR16TOB(F410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2132
+ TESTQPLANAR16TOB(U410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2133
+ TESTQPLANAR16TOB(U410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2134
+ TESTQPLANAR16TOB(V410Alpha, 1, 1, ARGB, 4, 4, 1, 10)
2135
+ TESTQPLANAR16TOB(V410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
2136
+ TESTQPLANAR16TOB(I010Alpha, 2, 2, ARGBFilter, 4, 4, 1, 10)
2137
+ TESTQPLANAR16TOB(I210Alpha, 2, 1, ARGBFilter, 4, 4, 1, 10)
2138
+ #endif // DISABLE_SLOW_TESTS
2139
+
2140
+ #define TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
2141
+ YALIGN, W1280, N, NEG, SOFF, DOFF, S_DEPTH) \
2142
+ TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##N) { \
2143
+ const int kWidth = W1280; \
2144
+ const int kHeight = ALIGNINT(benchmark_height_, YALIGN); \
2145
+ const int kStrideB = ALIGNINT(kWidth * BPP_B, ALIGN); \
2146
+ const int kStrideUV = SUBSAMPLE(kWidth, SUBSAMP_X) * 2; \
2147
+ const int kSizeUV = kStrideUV * SUBSAMPLE(kHeight, SUBSAMP_Y) * 2; \
2148
+ const int kBpc = 2; \
2149
+ align_buffer_page_end(src_y, kWidth* kHeight* kBpc + SOFF); \
2150
+ align_buffer_page_end(src_uv, kSizeUV* kBpc + SOFF); \
2151
+ align_buffer_page_end(dst_argb_c, kStrideB* kHeight + DOFF); \
2152
+ align_buffer_page_end(dst_argb_opt, kStrideB* kHeight + DOFF); \
2153
+ for (int i = 0; i < kWidth * kHeight; ++i) { \
2154
+ reinterpret_cast<uint16_t*>(src_y + SOFF)[i] = \
2155
+ (fastrand() & (((uint16_t)(-1)) << (16 - S_DEPTH))); \
2156
+ } \
2157
+ for (int i = 0; i < kSizeUV; ++i) { \
2158
+ reinterpret_cast<uint16_t*>(src_uv + SOFF)[i] = \
2159
+ (fastrand() & (((uint16_t)(-1)) << (16 - S_DEPTH))); \
2160
+ } \
2161
+ memset(dst_argb_c + DOFF, 1, kStrideB * kHeight); \
2162
+ memset(dst_argb_opt + DOFF, 101, kStrideB * kHeight); \
2163
+ MaskCpuFlags(disable_cpu_flags_); \
2164
+ FMT_PLANAR##To##FMT_B(reinterpret_cast<uint16_t*>(src_y + SOFF), kWidth, \
2165
+ reinterpret_cast<uint16_t*>(src_uv + SOFF), \
2166
+ kStrideUV, dst_argb_c + DOFF, kStrideB, kWidth, \
2167
+ NEG kHeight); \
2168
+ MaskCpuFlags(benchmark_cpu_info_); \
2169
+ for (int i = 0; i < benchmark_iterations_; ++i) { \
2170
+ FMT_PLANAR##To##FMT_B(reinterpret_cast<uint16_t*>(src_y + SOFF), kWidth, \
2171
+ reinterpret_cast<uint16_t*>(src_uv + SOFF), \
2172
+ kStrideUV, dst_argb_opt + DOFF, kStrideB, kWidth, \
2173
+ NEG kHeight); \
2174
+ } \
2175
+ for (int i = 0; i < kWidth * BPP_B * kHeight; ++i) { \
2176
+ EXPECT_EQ(dst_argb_c[i + DOFF], dst_argb_opt[i + DOFF]); \
2177
+ } \
2178
+ free_aligned_buffer_page_end(src_y); \
2179
+ free_aligned_buffer_page_end(src_uv); \
2180
+ free_aligned_buffer_page_end(dst_argb_c); \
2181
+ free_aligned_buffer_page_end(dst_argb_opt); \
2182
+ }
2183
+
2184
+ #if defined(ENABLE_FULL_TESTS)
2185
+ #define TESTBP16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
2186
+ YALIGN, S_DEPTH) \
2187
+ TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, YALIGN, \
2188
+ benchmark_width_ + 1, _Any, +, 0, 0, S_DEPTH) \
2189
+ TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, YALIGN, \
2190
+ benchmark_width_, _Unaligned, +, 4, 4, S_DEPTH) \
2191
+ TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, YALIGN, \
2192
+ benchmark_width_, _Invert, -, 0, 0, S_DEPTH) \
2193
+ TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, YALIGN, \
2194
+ benchmark_width_, _Opt, +, 0, 0, S_DEPTH)
2195
+ #else
2196
+ #define TESTBP16TOB(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
2197
+ YALIGN, S_DEPTH) \
2198
+ TESTBP16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, YALIGN, \
2199
+ benchmark_width_, _Opt, +, 0, 0, S_DEPTH)
2200
+ #endif
2201
+
2202
+ #define P010ToARGB(a, b, c, d, e, f, g, h) \
2203
+ P010ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2204
+ #define P210ToARGB(a, b, c, d, e, f, g, h) \
2205
+ P210ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2206
+ #define P010ToAR30(a, b, c, d, e, f, g, h) \
2207
+ P010ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2208
+ #define P210ToAR30(a, b, c, d, e, f, g, h) \
2209
+ P210ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2210
+
2211
+ #define P012ToARGB(a, b, c, d, e, f, g, h) \
2212
+ P012ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2213
+ #define P212ToARGB(a, b, c, d, e, f, g, h) \
2214
+ P212ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2215
+ #define P012ToAR30(a, b, c, d, e, f, g, h) \
2216
+ P012ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2217
+ #define P212ToAR30(a, b, c, d, e, f, g, h) \
2218
+ P212ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2219
+
2220
+ #define P016ToARGB(a, b, c, d, e, f, g, h) \
2221
+ P016ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2222
+ #define P216ToARGB(a, b, c, d, e, f, g, h) \
2223
+ P216ToARGBMatrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2224
+ #define P016ToAR30(a, b, c, d, e, f, g, h) \
2225
+ P016ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2226
+ #define P216ToAR30(a, b, c, d, e, f, g, h) \
2227
+ P216ToAR30Matrix(a, b, c, d, e, f, &kYuvH709Constants, g, h)
2228
+
2229
+ #define P010ToARGBFilter(a, b, c, d, e, f, g, h) \
2230
+ P010ToARGBMatrixFilter(a, b, c, d, e, f, &kYuvH709Constants, g, h, \
2231
+ kFilterBilinear)
2232
+ #define P210ToARGBFilter(a, b, c, d, e, f, g, h) \
2233
+ P210ToARGBMatrixFilter(a, b, c, d, e, f, &kYuvH709Constants, g, h, \
2234
+ kFilterBilinear)
2235
+ #define P010ToAR30Filter(a, b, c, d, e, f, g, h) \
2236
+ P010ToAR30MatrixFilter(a, b, c, d, e, f, &kYuvH709Constants, g, h, \
2237
+ kFilterBilinear)
2238
+ #define P210ToAR30Filter(a, b, c, d, e, f, g, h) \
2239
+ P210ToAR30MatrixFilter(a, b, c, d, e, f, &kYuvH709Constants, g, h, \
2240
+ kFilterBilinear)
2241
+
2242
+ #if !defined(DISABLE_SLOW_TESTS) || defined(__x86_64__) || defined(__i386__)
2243
+ TESTBP16TOB(P010, 2, 2, ARGB, 4, 4, 1, 10)
2244
+ TESTBP16TOB(P210, 2, 1, ARGB, 4, 4, 1, 10)
2245
+ TESTBP16TOB(P012, 2, 2, ARGB, 4, 4, 1, 12)
2246
+ TESTBP16TOB(P212, 2, 1, ARGB, 4, 4, 1, 12)
2247
+ TESTBP16TOB(P016, 2, 2, ARGB, 4, 4, 1, 16)
2248
+ TESTBP16TOB(P216, 2, 1, ARGB, 4, 4, 1, 16)
2249
+ TESTBP16TOB(P010, 2, 2, ARGBFilter, 4, 4, 1, 10)
2250
+ TESTBP16TOB(P210, 2, 1, ARGBFilter, 4, 4, 1, 10)
2251
+ #ifdef LITTLE_ENDIAN_ONLY_TEST
2252
+ TESTBP16TOB(P010, 2, 2, AR30, 4, 4, 1, 10)
2253
+ TESTBP16TOB(P210, 2, 1, AR30, 4, 4, 1, 10)
2254
+ TESTBP16TOB(P012, 2, 2, AR30, 4, 4, 1, 12)
2255
+ TESTBP16TOB(P212, 2, 1, AR30, 4, 4, 1, 12)
2256
+ TESTBP16TOB(P016, 2, 2, AR30, 4, 4, 1, 16)
2257
+ TESTBP16TOB(P216, 2, 1, AR30, 4, 4, 1, 16)
2258
+ TESTBP16TOB(P010, 2, 2, AR30Filter, 4, 4, 1, 10)
2259
+ TESTBP16TOB(P210, 2, 1, AR30Filter, 4, 4, 1, 10)
2260
+ #endif // LITTLE_ENDIAN_ONLY_TEST
2261
+ #endif // DISABLE_SLOW_TESTS
2262
+
2263
+ static int Clamp(int y) {
2264
+ if (y < 0) {
2265
+ y = 0;
2266
+ }
2267
+ if (y > 255) {
2268
+ y = 255;
2269
+ }
2270
+ return y;
2271
+ }
2272
+
2273
+ static int Clamp10(int y) {
2274
+ if (y < 0) {
2275
+ y = 0;
2276
+ }
2277
+ if (y > 1023) {
2278
+ y = 1023;
2279
+ }
2280
+ return y;
2281
+ }
2282
+
2283
+ // Test 8 bit YUV to 8 bit RGB
2284
+ TEST_F(LibYUVConvertTest, TestH420ToARGB) {
2285
+ const int kSize = 256;
2286
+ int histogram_b[256];
2287
+ int histogram_g[256];
2288
+ int histogram_r[256];
2289
+ memset(histogram_b, 0, sizeof(histogram_b));
2290
+ memset(histogram_g, 0, sizeof(histogram_g));
2291
+ memset(histogram_r, 0, sizeof(histogram_r));
2292
+ align_buffer_page_end(orig_yuv, kSize + kSize / 2 * 2);
2293
+ align_buffer_page_end(argb_pixels, kSize * 4);
2294
+ uint8_t* orig_y = orig_yuv;
2295
+ uint8_t* orig_u = orig_y + kSize;
2296
+ uint8_t* orig_v = orig_u + kSize / 2;
2297
+
2298
+ // Test grey scale
2299
+ for (int i = 0; i < kSize; ++i) {
2300
+ orig_y[i] = i;
2301
+ }
2302
+ for (int i = 0; i < kSize / 2; ++i) {
2303
+ orig_u[i] = 128; // 128 is 0.
2304
+ orig_v[i] = 128;
2305
+ }
2306
+
2307
+ H420ToARGB(orig_y, 0, orig_u, 0, orig_v, 0, argb_pixels, 0, kSize, 1);
2308
+
2309
+ for (int i = 0; i < kSize; ++i) {
2310
+ int b = argb_pixels[i * 4 + 0];
2311
+ int g = argb_pixels[i * 4 + 1];
2312
+ int r = argb_pixels[i * 4 + 2];
2313
+ int a = argb_pixels[i * 4 + 3];
2314
+ ++histogram_b[b];
2315
+ ++histogram_g[g];
2316
+ ++histogram_r[r];
2317
+ // Reference formula for Y channel contribution in YUV to RGB conversions:
2318
+ int expected_y = Clamp(static_cast<int>((i - 16) * 1.164f + 0.5f));
2319
+ EXPECT_EQ(b, expected_y);
2320
+ EXPECT_EQ(g, expected_y);
2321
+ EXPECT_EQ(r, expected_y);
2322
+ EXPECT_EQ(a, 255);
2323
+ }
2324
+
2325
+ int count_b = 0;
2326
+ int count_g = 0;
2327
+ int count_r = 0;
2328
+ for (int i = 0; i < kSize; ++i) {
2329
+ if (histogram_b[i]) {
2330
+ ++count_b;
2331
+ }
2332
+ if (histogram_g[i]) {
2333
+ ++count_g;
2334
+ }
2335
+ if (histogram_r[i]) {
2336
+ ++count_r;
2337
+ }
2338
+ }
2339
+ printf("uniques: B %d, G, %d, R %d\n", count_b, count_g, count_r);
2340
+
2341
+ free_aligned_buffer_page_end(orig_yuv);
2342
+ free_aligned_buffer_page_end(argb_pixels);
2343
+ }
2344
+
2345
+ // Test 10 bit YUV to 8 bit RGB
2346
+ TEST_F(LibYUVConvertTest, TestH010ToARGB) {
2347
+ const int kSize = 1024;
2348
+ int histogram_b[1024];
2349
+ int histogram_g[1024];
2350
+ int histogram_r[1024];
2351
+ memset(histogram_b, 0, sizeof(histogram_b));
2352
+ memset(histogram_g, 0, sizeof(histogram_g));
2353
+ memset(histogram_r, 0, sizeof(histogram_r));
2354
+ align_buffer_page_end(orig_yuv, kSize * 2 + kSize / 2 * 2 * 2);
2355
+ align_buffer_page_end(argb_pixels, kSize * 4);
2356
+ uint16_t* orig_y = reinterpret_cast<uint16_t*>(orig_yuv);
2357
+ uint16_t* orig_u = orig_y + kSize;
2358
+ uint16_t* orig_v = orig_u + kSize / 2;
2359
+
2360
+ // Test grey scale
2361
+ for (int i = 0; i < kSize; ++i) {
2362
+ orig_y[i] = i;
2363
+ }
2364
+ for (int i = 0; i < kSize / 2; ++i) {
2365
+ orig_u[i] = 512; // 512 is 0.
2366
+ orig_v[i] = 512;
2367
+ }
2368
+
2369
+ H010ToARGB(orig_y, 0, orig_u, 0, orig_v, 0, argb_pixels, 0, kSize, 1);
2370
+
2371
+ for (int i = 0; i < kSize; ++i) {
2372
+ int b = argb_pixels[i * 4 + 0];
2373
+ int g = argb_pixels[i * 4 + 1];
2374
+ int r = argb_pixels[i * 4 + 2];
2375
+ int a = argb_pixels[i * 4 + 3];
2376
+ ++histogram_b[b];
2377
+ ++histogram_g[g];
2378
+ ++histogram_r[r];
2379
+ int expected_y = Clamp(static_cast<int>((i - 64) * 1.164f / 4));
2380
+ EXPECT_NEAR(b, expected_y, 1);
2381
+ EXPECT_NEAR(g, expected_y, 1);
2382
+ EXPECT_NEAR(r, expected_y, 1);
2383
+ EXPECT_EQ(a, 255);
2384
+ }
2385
+
2386
+ int count_b = 0;
2387
+ int count_g = 0;
2388
+ int count_r = 0;
2389
+ for (int i = 0; i < kSize; ++i) {
2390
+ if (histogram_b[i]) {
2391
+ ++count_b;
2392
+ }
2393
+ if (histogram_g[i]) {
2394
+ ++count_g;
2395
+ }
2396
+ if (histogram_r[i]) {
2397
+ ++count_r;
2398
+ }
2399
+ }
2400
+ printf("uniques: B %d, G, %d, R %d\n", count_b, count_g, count_r);
2401
+
2402
+ free_aligned_buffer_page_end(orig_yuv);
2403
+ free_aligned_buffer_page_end(argb_pixels);
2404
+ }
2405
+
2406
+ // Test 10 bit YUV to 10 bit RGB
2407
+ // Caveat: Result is near due to float rounding in expected
2408
+ // result.
2409
+ TEST_F(LibYUVConvertTest, TestH010ToAR30) {
2410
+ const int kSize = 1024;
2411
+ int histogram_b[1024];
2412
+ int histogram_g[1024];
2413
+ int histogram_r[1024];
2414
+ memset(histogram_b, 0, sizeof(histogram_b));
2415
+ memset(histogram_g, 0, sizeof(histogram_g));
2416
+ memset(histogram_r, 0, sizeof(histogram_r));
2417
+
2418
+ align_buffer_page_end(orig_yuv, kSize * 2 + kSize / 2 * 2 * 2);
2419
+ align_buffer_page_end(ar30_pixels, kSize * 4);
2420
+ uint16_t* orig_y = reinterpret_cast<uint16_t*>(orig_yuv);
2421
+ uint16_t* orig_u = orig_y + kSize;
2422
+ uint16_t* orig_v = orig_u + kSize / 2;
2423
+
2424
+ // Test grey scale
2425
+ for (int i = 0; i < kSize; ++i) {
2426
+ orig_y[i] = i;
2427
+ }
2428
+ for (int i = 0; i < kSize / 2; ++i) {
2429
+ orig_u[i] = 512; // 512 is 0.
2430
+ orig_v[i] = 512;
2431
+ }
2432
+
2433
+ H010ToAR30(orig_y, 0, orig_u, 0, orig_v, 0, ar30_pixels, 0, kSize, 1);
2434
+
2435
+ for (int i = 0; i < kSize; ++i) {
2436
+ int b10 = reinterpret_cast<uint32_t*>(ar30_pixels)[i] & 1023;
2437
+ int g10 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 10) & 1023;
2438
+ int r10 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 20) & 1023;
2439
+ int a2 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 30) & 3;
2440
+ ++histogram_b[b10];
2441
+ ++histogram_g[g10];
2442
+ ++histogram_r[r10];
2443
+ int expected_y = Clamp10(static_cast<int>((i - 64) * 1.164f + 0.5));
2444
+ EXPECT_NEAR(b10, expected_y, 4);
2445
+ EXPECT_NEAR(g10, expected_y, 4);
2446
+ EXPECT_NEAR(r10, expected_y, 4);
2447
+ EXPECT_EQ(a2, 3);
2448
+ }
2449
+
2450
+ int count_b = 0;
2451
+ int count_g = 0;
2452
+ int count_r = 0;
2453
+ for (int i = 0; i < kSize; ++i) {
2454
+ if (histogram_b[i]) {
2455
+ ++count_b;
2456
+ }
2457
+ if (histogram_g[i]) {
2458
+ ++count_g;
2459
+ }
2460
+ if (histogram_r[i]) {
2461
+ ++count_r;
2462
+ }
2463
+ }
2464
+ printf("uniques: B %d, G, %d, R %d\n", count_b, count_g, count_r);
2465
+
2466
+ free_aligned_buffer_page_end(orig_yuv);
2467
+ free_aligned_buffer_page_end(ar30_pixels);
2468
+ }
2469
+
2470
+ // Test 10 bit YUV to 10 bit RGB
2471
+ // Caveat: Result is near due to float rounding in expected
2472
+ // result.
2473
+ TEST_F(LibYUVConvertTest, TestH010ToAB30) {
2474
+ const int kSize = 1024;
2475
+ int histogram_b[1024];
2476
+ int histogram_g[1024];
2477
+ int histogram_r[1024];
2478
+ memset(histogram_b, 0, sizeof(histogram_b));
2479
+ memset(histogram_g, 0, sizeof(histogram_g));
2480
+ memset(histogram_r, 0, sizeof(histogram_r));
2481
+
2482
+ align_buffer_page_end(orig_yuv, kSize * 2 + kSize / 2 * 2 * 2);
2483
+ align_buffer_page_end(ab30_pixels, kSize * 4);
2484
+ uint16_t* orig_y = reinterpret_cast<uint16_t*>(orig_yuv);
2485
+ uint16_t* orig_u = orig_y + kSize;
2486
+ uint16_t* orig_v = orig_u + kSize / 2;
2487
+
2488
+ // Test grey scale
2489
+ for (int i = 0; i < kSize; ++i) {
2490
+ orig_y[i] = i;
2491
+ }
2492
+ for (int i = 0; i < kSize / 2; ++i) {
2493
+ orig_u[i] = 512; // 512 is 0.
2494
+ orig_v[i] = 512;
2495
+ }
2496
+
2497
+ H010ToAB30(orig_y, 0, orig_u, 0, orig_v, 0, ab30_pixels, 0, kSize, 1);
2498
+
2499
+ for (int i = 0; i < kSize; ++i) {
2500
+ int r10 = reinterpret_cast<uint32_t*>(ab30_pixels)[i] & 1023;
2501
+ int g10 = (reinterpret_cast<uint32_t*>(ab30_pixels)[i] >> 10) & 1023;
2502
+ int b10 = (reinterpret_cast<uint32_t*>(ab30_pixels)[i] >> 20) & 1023;
2503
+ int a2 = (reinterpret_cast<uint32_t*>(ab30_pixels)[i] >> 30) & 3;
2504
+ ++histogram_b[b10];
2505
+ ++histogram_g[g10];
2506
+ ++histogram_r[r10];
2507
+ int expected_y = Clamp10(static_cast<int>((i - 64) * 1.164f));
2508
+ EXPECT_NEAR(b10, expected_y, 4);
2509
+ EXPECT_NEAR(g10, expected_y, 4);
2510
+ EXPECT_NEAR(r10, expected_y, 4);
2511
+ EXPECT_EQ(a2, 3);
2512
+ }
2513
+
2514
+ int count_b = 0;
2515
+ int count_g = 0;
2516
+ int count_r = 0;
2517
+ for (int i = 0; i < kSize; ++i) {
2518
+ if (histogram_b[i]) {
2519
+ ++count_b;
2520
+ }
2521
+ if (histogram_g[i]) {
2522
+ ++count_g;
2523
+ }
2524
+ if (histogram_r[i]) {
2525
+ ++count_r;
2526
+ }
2527
+ }
2528
+ printf("uniques: B %d, G, %d, R %d\n", count_b, count_g, count_r);
2529
+
2530
+ free_aligned_buffer_page_end(orig_yuv);
2531
+ free_aligned_buffer_page_end(ab30_pixels);
2532
+ }
2533
+
2534
+ // Test 8 bit YUV to 10 bit RGB
2535
+ TEST_F(LibYUVConvertTest, TestH420ToAR30) {
2536
+ const int kSize = 256;
2537
+ const int kHistSize = 1024;
2538
+ int histogram_b[kHistSize];
2539
+ int histogram_g[kHistSize];
2540
+ int histogram_r[kHistSize];
2541
+ memset(histogram_b, 0, sizeof(histogram_b));
2542
+ memset(histogram_g, 0, sizeof(histogram_g));
2543
+ memset(histogram_r, 0, sizeof(histogram_r));
2544
+ align_buffer_page_end(orig_yuv, kSize + kSize / 2 * 2);
2545
+ align_buffer_page_end(ar30_pixels, kSize * 4);
2546
+ uint8_t* orig_y = orig_yuv;
2547
+ uint8_t* orig_u = orig_y + kSize;
2548
+ uint8_t* orig_v = orig_u + kSize / 2;
2549
+
2550
+ // Test grey scale
2551
+ for (int i = 0; i < kSize; ++i) {
2552
+ orig_y[i] = i;
2553
+ }
2554
+ for (int i = 0; i < kSize / 2; ++i) {
2555
+ orig_u[i] = 128; // 128 is 0.
2556
+ orig_v[i] = 128;
2557
+ }
2558
+
2559
+ H420ToAR30(orig_y, 0, orig_u, 0, orig_v, 0, ar30_pixels, 0, kSize, 1);
2560
+
2561
+ for (int i = 0; i < kSize; ++i) {
2562
+ int b10 = reinterpret_cast<uint32_t*>(ar30_pixels)[i] & 1023;
2563
+ int g10 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 10) & 1023;
2564
+ int r10 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 20) & 1023;
2565
+ int a2 = (reinterpret_cast<uint32_t*>(ar30_pixels)[i] >> 30) & 3;
2566
+ ++histogram_b[b10];
2567
+ ++histogram_g[g10];
2568
+ ++histogram_r[r10];
2569
+ int expected_y = Clamp10(static_cast<int>((i - 16) * 1.164f * 4.f));
2570
+ EXPECT_NEAR(b10, expected_y, 4);
2571
+ EXPECT_NEAR(g10, expected_y, 4);
2572
+ EXPECT_NEAR(r10, expected_y, 4);
2573
+ EXPECT_EQ(a2, 3);
2574
+ }
2575
+
2576
+ int count_b = 0;
2577
+ int count_g = 0;
2578
+ int count_r = 0;
2579
+ for (int i = 0; i < kHistSize; ++i) {
2580
+ if (histogram_b[i]) {
2581
+ ++count_b;
2582
+ }
2583
+ if (histogram_g[i]) {
2584
+ ++count_g;
2585
+ }
2586
+ if (histogram_r[i]) {
2587
+ ++count_r;
2588
+ }
2589
+ }
2590
+ printf("uniques: B %d, G, %d, R %d\n", count_b, count_g, count_r);
2591
+
2592
+ free_aligned_buffer_page_end(orig_yuv);
2593
+ free_aligned_buffer_page_end(ar30_pixels);
2594
+ }
2595
+
2596
+ // Test I400 with jpeg matrix is same as J400
2597
+ TEST_F(LibYUVConvertTest, TestI400) {
2598
+ const int kSize = 256;
2599
+ align_buffer_page_end(orig_i400, kSize);
2600
+ align_buffer_page_end(argb_pixels_i400, kSize * 4);
2601
+ align_buffer_page_end(argb_pixels_j400, kSize * 4);
2602
+ align_buffer_page_end(argb_pixels_jpeg_i400, kSize * 4);
2603
+ align_buffer_page_end(argb_pixels_h709_i400, kSize * 4);
2604
+ align_buffer_page_end(argb_pixels_2020_i400, kSize * 4);
2605
+
2606
+ // Test grey scale
2607
+ for (int i = 0; i < kSize; ++i) {
2608
+ orig_i400[i] = i;
2609
+ }
2610
+
2611
+ J400ToARGB(orig_i400, 0, argb_pixels_j400, 0, kSize, 1);
2612
+ I400ToARGB(orig_i400, 0, argb_pixels_i400, 0, kSize, 1);
2613
+ I400ToARGBMatrix(orig_i400, 0, argb_pixels_jpeg_i400, 0, &kYuvJPEGConstants,
2614
+ kSize, 1);
2615
+ I400ToARGBMatrix(orig_i400, 0, argb_pixels_h709_i400, 0, &kYuvH709Constants,
2616
+ kSize, 1);
2617
+ I400ToARGBMatrix(orig_i400, 0, argb_pixels_2020_i400, 0, &kYuv2020Constants,
2618
+ kSize, 1);
2619
+
2620
+ EXPECT_EQ(0, argb_pixels_i400[0]);
2621
+ EXPECT_EQ(0, argb_pixels_j400[0]);
2622
+ EXPECT_EQ(0, argb_pixels_jpeg_i400[0]);
2623
+ EXPECT_EQ(0, argb_pixels_h709_i400[0]);
2624
+ EXPECT_EQ(0, argb_pixels_2020_i400[0]);
2625
+ EXPECT_EQ(0, argb_pixels_i400[16 * 4]);
2626
+ EXPECT_EQ(16, argb_pixels_j400[16 * 4]);
2627
+ EXPECT_EQ(16, argb_pixels_jpeg_i400[16 * 4]);
2628
+ EXPECT_EQ(0, argb_pixels_h709_i400[16 * 4]);
2629
+ EXPECT_EQ(0, argb_pixels_2020_i400[16 * 4]);
2630
+ EXPECT_EQ(130, argb_pixels_i400[128 * 4]);
2631
+ EXPECT_EQ(128, argb_pixels_j400[128 * 4]);
2632
+ EXPECT_EQ(128, argb_pixels_jpeg_i400[128 * 4]);
2633
+ EXPECT_EQ(130, argb_pixels_h709_i400[128 * 4]);
2634
+ EXPECT_EQ(130, argb_pixels_2020_i400[128 * 4]);
2635
+ EXPECT_EQ(255, argb_pixels_i400[255 * 4]);
2636
+ EXPECT_EQ(255, argb_pixels_j400[255 * 4]);
2637
+ EXPECT_EQ(255, argb_pixels_jpeg_i400[255 * 4]);
2638
+ EXPECT_EQ(255, argb_pixels_h709_i400[255 * 4]);
2639
+ EXPECT_EQ(255, argb_pixels_2020_i400[255 * 4]);
2640
+
2641
+ for (int i = 0; i < kSize * 4; ++i) {
2642
+ if ((i & 3) == 3) {
2643
+ EXPECT_EQ(255, argb_pixels_j400[i]);
2644
+ } else {
2645
+ EXPECT_EQ(i / 4, argb_pixels_j400[i]);
2646
+ }
2647
+ EXPECT_EQ(argb_pixels_jpeg_i400[i], argb_pixels_j400[i]);
2648
+ }
2649
+
2650
+ free_aligned_buffer_page_end(orig_i400);
2651
+ free_aligned_buffer_page_end(argb_pixels_i400);
2652
+ free_aligned_buffer_page_end(argb_pixels_j400);
2653
+ free_aligned_buffer_page_end(argb_pixels_jpeg_i400);
2654
+ free_aligned_buffer_page_end(argb_pixels_h709_i400);
2655
+ free_aligned_buffer_page_end(argb_pixels_2020_i400);
2656
+ }
2657
+
2658
+ // Test RGB24 to ARGB and back to RGB24
2659
+ TEST_F(LibYUVConvertTest, TestARGBToRGB24) {
2660
+ const int kSize = 256;
2661
+ align_buffer_page_end(orig_rgb24, kSize * 3);
2662
+ align_buffer_page_end(argb_pixels, kSize * 4);
2663
+ align_buffer_page_end(dest_rgb24, kSize * 3);
2664
+
2665
+ // Test grey scale
2666
+ for (int i = 0; i < kSize * 3; ++i) {
2667
+ orig_rgb24[i] = i;
2668
+ }
2669
+
2670
+ RGB24ToARGB(orig_rgb24, 0, argb_pixels, 0, kSize, 1);
2671
+ ARGBToRGB24(argb_pixels, 0, dest_rgb24, 0, kSize, 1);
2672
+
2673
+ for (int i = 0; i < kSize * 3; ++i) {
2674
+ EXPECT_EQ(orig_rgb24[i], dest_rgb24[i]);
2675
+ }
2676
+
2677
+ free_aligned_buffer_page_end(orig_rgb24);
2678
+ free_aligned_buffer_page_end(argb_pixels);
2679
+ free_aligned_buffer_page_end(dest_rgb24);
2680
+ }
2681
+
2682
+ TEST_F(LibYUVConvertTest, TestARGBToRGB565) {
2683
+ SIMD_ALIGNED(uint8_t orig_pixels[256][4]);
2684
+ SIMD_ALIGNED(uint8_t dest_rgb565[256][2]);
2685
+
2686
+ for (int i = 0; i < 256; ++i) {
2687
+ for (int j = 0; j < 4; ++j) {
2688
+ orig_pixels[i][j] = i;
2689
+ }
2690
+ }
2691
+ ARGBToRGB565(&orig_pixels[0][0], 0, &dest_rgb565[0][0], 0, 256, 1);
2692
+ uint32_t checksum = HashDjb2(&dest_rgb565[0][0], sizeof(dest_rgb565), 5381);
2693
+ EXPECT_EQ(610919429u, checksum);
2694
+ }
2695
+
2696
+ TEST_F(LibYUVConvertTest, TestYUY2ToARGB) {
2697
+ SIMD_ALIGNED(uint8_t orig_pixels[256][2]);
2698
+ SIMD_ALIGNED(uint8_t dest_argb[256][4]);
2699
+
2700
+ for (int i = 0; i < 256; ++i) {
2701
+ for (int j = 0; j < 2; ++j) {
2702
+ orig_pixels[i][j] = i;
2703
+ }
2704
+ }
2705
+ YUY2ToARGB(&orig_pixels[0][0], 0, &dest_argb[0][0], 0, 256, 1);
2706
+ uint32_t checksum = HashDjb2(&dest_argb[0][0], sizeof(dest_argb), 5381);
2707
+ EXPECT_EQ(3486643515u, checksum);
2708
+ }
2709
+
2710
+ TEST_F(LibYUVConvertTest, TestUYVYToARGB) {
2711
+ SIMD_ALIGNED(uint8_t orig_pixels[256][2]);
2712
+ SIMD_ALIGNED(uint8_t dest_argb[256][4]);
2713
+
2714
+ for (int i = 0; i < 256; ++i) {
2715
+ for (int j = 0; j < 2; ++j) {
2716
+ orig_pixels[i][j] = i;
2717
+ }
2718
+ }
2719
+ UYVYToARGB(&orig_pixels[0][0], 0, &dest_argb[0][0], 0, 256, 1);
2720
+ uint32_t checksum = HashDjb2(&dest_argb[0][0], sizeof(dest_argb), 5381);
2721
+ EXPECT_EQ(3486643515u, checksum);
2722
+ }
2723
+
2724
+ #ifdef ENABLE_ROW_TESTS
2725
+ TEST_F(LibYUVConvertTest, TestARGBToUVRow) {
2726
+ SIMD_ALIGNED(uint8_t orig_argb_pixels[256]);
2727
+ SIMD_ALIGNED(uint8_t dest_u[32]);
2728
+ SIMD_ALIGNED(uint8_t dest_v[32]);
2729
+
2730
+ for (int i = 0; i < 256; ++i) {
2731
+ orig_argb_pixels[i] = i * 43;
2732
+ }
2733
+
2734
+ orig_argb_pixels[0] = 0xff; // blue
2735
+ orig_argb_pixels[1] = 0x0;
2736
+ orig_argb_pixels[2] = 0x0;
2737
+ orig_argb_pixels[3] = 0xff;
2738
+ orig_argb_pixels[4] = 0xff; // blue
2739
+ orig_argb_pixels[5] = 0x0;
2740
+ orig_argb_pixels[6] = 0x0;
2741
+ orig_argb_pixels[7] = 0xff;
2742
+
2743
+ orig_argb_pixels[8] = 0x0;
2744
+ orig_argb_pixels[9] = 0xff; // green
2745
+ orig_argb_pixels[10] = 0x0;
2746
+ orig_argb_pixels[11] = 0xff;
2747
+ orig_argb_pixels[12] = 0x0;
2748
+ orig_argb_pixels[13] = 0xff; // green
2749
+ orig_argb_pixels[14] = 0x0;
2750
+ orig_argb_pixels[15] = 0xff;
2751
+
2752
+ orig_argb_pixels[16] = 0x0;
2753
+ orig_argb_pixels[17] = 0x0;
2754
+ orig_argb_pixels[18] = 0xff; // red
2755
+ orig_argb_pixels[19] = 0xff;
2756
+ orig_argb_pixels[20] = 0x0;
2757
+ orig_argb_pixels[21] = 0x0;
2758
+ orig_argb_pixels[22] = 0xff; // red
2759
+ orig_argb_pixels[23] = 0xff;
2760
+
2761
+ orig_argb_pixels[24] = 0xff;
2762
+ orig_argb_pixels[25] = 0xff;
2763
+ orig_argb_pixels[26] = 0xff; // white
2764
+ orig_argb_pixels[27] = 0xff;
2765
+ orig_argb_pixels[28] = 0xff;
2766
+ orig_argb_pixels[29] = 0xff;
2767
+ orig_argb_pixels[30] = 0xff; // white
2768
+ orig_argb_pixels[31] = 0xff;
2769
+
2770
+ int benchmark_iterations =
2771
+ benchmark_width_ * benchmark_height_ * benchmark_iterations_ / 32;
2772
+
2773
+ for (int i = 0; i < benchmark_iterations; ++i) {
2774
+ #if defined(HAS_ARGBTOUVROW_AVX2)
2775
+ int has_avx2 = TestCpuFlag(kCpuHasAVX2);
2776
+ if (has_avx2) {
2777
+ ARGBToUVRow_AVX2(&orig_argb_pixels[0], 0, &dest_u[0], &dest_v[0], 64);
2778
+ } else {
2779
+ ARGBToUVRow_C(&orig_argb_pixels[0], 0, &dest_u[0], &dest_v[0], 64);
2780
+ }
2781
+ #elif defined(HAS_ARGBTOUVROW_NEON)
2782
+ ARGBToUVRow_NEON(&orig_argb_pixels[0], 0, &dest_u[0], &dest_v[0], 64);
2783
+ #else
2784
+ ARGBToUVRow_C(&orig_argb_pixels[0], 0, &dest_u[0], &dest_v[0], 64);
2785
+ #endif
2786
+ }
2787
+ printf("u: ");
2788
+ for (int i = 0; i < 32; ++i) {
2789
+ printf("%3d ", (int)dest_u[i]);
2790
+ }
2791
+ printf("\nv: ");
2792
+ for (int i = 0; i < 32; ++i) {
2793
+ printf("%3d ", (int)dest_v[i]);
2794
+ }
2795
+ printf("\n");
2796
+
2797
+ uint32_t checksum_u = HashDjb2(&dest_u[0], sizeof(dest_u), 5381);
2798
+ EXPECT_EQ(192508756u, checksum_u);
2799
+ uint32_t checksum_v = HashDjb2(&dest_v[0], sizeof(dest_v), 5381);
2800
+ EXPECT_EQ(2590663990u, checksum_v);
2801
+ }
2802
+ #endif
2803
+
2804
+ #if !defined(DISABLE_SLOW_TESTS) && \
2805
+ (defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__))
2806
+ // TODO(fbarchard): Consider _set_new_mode(0) to make malloc return NULL
2807
+
2808
+ TEST_F(LibYUVConvertTest, TestI400LargeSize) {
2809
+ // The width and height are chosen as follows:
2810
+ // - kWidth * kHeight is not a multiple of 8: This lets us to use the Any
2811
+ // variant of the conversion function.
2812
+ const int kWidth = 1073741823;
2813
+ const int kHeight = 2;
2814
+
2815
+ #if defined(__aarch64__)
2816
+ // Infer malloc can accept a large size for cpu with dot product (a76/a55)
2817
+ int has_large_malloc = TestCpuFlag(kCpuHasNeonDotProd);
2818
+ #else
2819
+ int has_large_malloc = 1;
2820
+ #endif
2821
+ if (!has_large_malloc) {
2822
+ printf("WARNING: Skipped. Large allocation may assert for %zd\n",
2823
+ (size_t)kWidth * kHeight);
2824
+ return;
2825
+ }
2826
+
2827
+ // Allocate one extra column so that the coalesce optimizations do not trigger
2828
+ // in convert_argb.cc (they are triggered only when stride is equal to width).
2829
+ const size_t kStride = kWidth + 1;
2830
+
2831
+ printf("WARNING: attempting to allocate I400 image of %zd bytes\n",
2832
+ (size_t)kWidth * kHeight);
2833
+ fflush(stdout);
2834
+ align_buffer_page_end(orig_i400, (size_t)kWidth * kHeight);
2835
+ if (!orig_i400) {
2836
+ printf("WARNING: unable to allocate I400 image of %zd bytes\n",
2837
+ (size_t)kWidth * kHeight);
2838
+ fflush(stdout);
2839
+ return;
2840
+ }
2841
+ printf("INFO: allocate I400 image returned %p\n", orig_i400);
2842
+ fflush(stdout);
2843
+ align_buffer_page_end(dest_argb, (size_t)kWidth * kHeight * 4);
2844
+ if (!dest_argb) {
2845
+ printf("WARNING: unable to allocate ARGB image of %zd bytes\n",
2846
+ (size_t)kWidth * kHeight * 4);
2847
+ fflush(stdout);
2848
+ free_aligned_buffer_page_end(orig_i400);
2849
+ return;
2850
+ }
2851
+ printf("INFO: allocate ARGB image returned %p\n", dest_argb);
2852
+ fflush(stdout);
2853
+ for (int i = 0; i < kWidth * kHeight; ++i) {
2854
+ orig_i400[i] = i % 256;
2855
+ }
2856
+ EXPECT_EQ(I400ToARGBMatrix(orig_i400, kStride, dest_argb, kWidth,
2857
+ &kYuvJPEGConstants, kWidth, kHeight),
2858
+ 0);
2859
+ free_aligned_buffer_page_end(dest_argb);
2860
+ free_aligned_buffer_page_end(orig_i400);
2861
+ }
2862
+ #endif // !defined(DISABLE_SLOW_TESTS) && \
2863
+ // (defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__))
2864
+
2865
+ #endif // !defined(LEAN_TESTS)
2866
+
2867
+ } // namespace libyuv