react-native-vision-camera-spoof-detector 1.1.23 → 1.1.25

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 (200) hide show
  1. package/android/CMakeLists.txt +12 -0
  2. package/android/build.gradle +10 -9
  3. package/android/src/main/cpp/cpp-adapter.cpp +6 -3
  4. package/ios/HybridSpoofDetectorOutput.swift +112 -72
  5. package/package.json +1 -1
  6. package/android/src/main/cpp/CMakeLists.txt +0 -33
  7. package/android/src/main/cpp/FaceAntiSpoofJSI.cpp +0 -142
  8. package/android/src/main/cpp/FastYuvJni.cpp +0 -111
  9. package/android/src/main/cpp/fast_yuv.cpp +0 -342
  10. package/android/src/main/cpp/fast_yuv.h +0 -23
  11. package/android/src/main/cpp/libyuv/.clang-format +0 -6
  12. package/android/src/main/cpp/libyuv/.gn +0 -40
  13. package/android/src/main/cpp/libyuv/.vpython3 +0 -410
  14. package/android/src/main/cpp/libyuv/AUTHORS +0 -7
  15. package/android/src/main/cpp/libyuv/Android.bp +0 -202
  16. package/android/src/main/cpp/libyuv/Android.mk +0 -106
  17. package/android/src/main/cpp/libyuv/BUILD.gn +0 -490
  18. package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +0 -70
  19. package/android/src/main/cpp/libyuv/CMakeLists.txt +0 -259
  20. package/android/src/main/cpp/libyuv/DEPS +0 -935
  21. package/android/src/main/cpp/libyuv/DIR_METADATA +0 -3
  22. package/android/src/main/cpp/libyuv/LICENSE +0 -29
  23. package/android/src/main/cpp/libyuv/OWNERS +0 -11
  24. package/android/src/main/cpp/libyuv/PATENTS +0 -24
  25. package/android/src/main/cpp/libyuv/PRESUBMIT.py +0 -65
  26. package/android/src/main/cpp/libyuv/README.chromium +0 -11
  27. package/android/src/main/cpp/libyuv/README.md +0 -19
  28. package/android/src/main/cpp/libyuv/build_overrides/build.gni +0 -60
  29. package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +0 -19
  30. package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +0 -17
  31. package/android/src/main/cpp/libyuv/codereview.settings +0 -5
  32. package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +0 -409
  33. package/android/src/main/cpp/libyuv/docs/environment_variables.md +0 -64
  34. package/android/src/main/cpp/libyuv/docs/feature_detection.md +0 -108
  35. package/android/src/main/cpp/libyuv/docs/filtering.md +0 -196
  36. package/android/src/main/cpp/libyuv/docs/formats.md +0 -208
  37. package/android/src/main/cpp/libyuv/docs/getting_started.md +0 -296
  38. package/android/src/main/cpp/libyuv/docs/rotation.md +0 -107
  39. package/android/src/main/cpp/libyuv/download_vs_toolchain.py +0 -29
  40. package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +0 -68
  41. package/android/src/main/cpp/libyuv/include/libyuv/compare.h +0 -111
  42. package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +0 -112
  43. package/android/src/main/cpp/libyuv/include/libyuv/convert.h +0 -1117
  44. package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +0 -2335
  45. package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +0 -203
  46. package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +0 -394
  47. package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +0 -147
  48. package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +0 -99
  49. package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +0 -1949
  50. package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +0 -195
  51. package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +0 -1131
  52. package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +0 -296
  53. package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +0 -37
  54. package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +0 -265
  55. package/android/src/main/cpp/libyuv/include/libyuv/row.h +0 -6738
  56. package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +0 -2154
  57. package/android/src/main/cpp/libyuv/include/libyuv/scale.h +0 -336
  58. package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +0 -76
  59. package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +0 -42
  60. package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +0 -1726
  61. package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +0 -51
  62. package/android/src/main/cpp/libyuv/include/libyuv/version.h +0 -16
  63. package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +0 -222
  64. package/android/src/main/cpp/libyuv/include/libyuv.h +0 -33
  65. package/android/src/main/cpp/libyuv/infra/config/OWNERS +0 -3
  66. package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +0 -17
  67. package/android/src/main/cpp/libyuv/infra/config/README.md +0 -2
  68. package/android/src/main/cpp/libyuv/infra/config/codereview.settings +0 -6
  69. package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +0 -144
  70. package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +0 -1185
  71. package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +0 -9
  72. package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +0 -246
  73. package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +0 -385
  74. package/android/src/main/cpp/libyuv/infra/config/main.star +0 -402
  75. package/android/src/main/cpp/libyuv/infra/config/project.cfg +0 -16
  76. package/android/src/main/cpp/libyuv/infra/config/realms.cfg +0 -111
  77. package/android/src/main/cpp/libyuv/libyuv.gni +0 -34
  78. package/android/src/main/cpp/libyuv/libyuv.gyp +0 -149
  79. package/android/src/main/cpp/libyuv/libyuv.gypi +0 -87
  80. package/android/src/main/cpp/libyuv/linux.mk +0 -96
  81. package/android/src/main/cpp/libyuv/public.mk +0 -13
  82. package/android/src/main/cpp/libyuv/pylintrc +0 -49
  83. package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +0 -74
  84. package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +0 -56
  85. package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +0 -15
  86. package/android/src/main/cpp/libyuv/source/compare.cc +0 -435
  87. package/android/src/main/cpp/libyuv/source/compare_common.cc +0 -74
  88. package/android/src/main/cpp/libyuv/source/compare_gcc.cc +0 -362
  89. package/android/src/main/cpp/libyuv/source/compare_neon.cc +0 -96
  90. package/android/src/main/cpp/libyuv/source/compare_neon64.cc +0 -223
  91. package/android/src/main/cpp/libyuv/source/compare_win.cc +0 -241
  92. package/android/src/main/cpp/libyuv/source/convert.cc +0 -4746
  93. package/android/src/main/cpp/libyuv/source/convert_argb.cc +0 -9179
  94. package/android/src/main/cpp/libyuv/source/convert_from.cc +0 -866
  95. package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +0 -3671
  96. package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +0 -602
  97. package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +0 -391
  98. package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +0 -288
  99. package/android/src/main/cpp/libyuv/source/cpu_id.cc +0 -496
  100. package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +0 -580
  101. package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +0 -71
  102. package/android/src/main/cpp/libyuv/source/planar_functions.cc +0 -5663
  103. package/android/src/main/cpp/libyuv/source/rotate.cc +0 -1241
  104. package/android/src/main/cpp/libyuv/source/rotate_any.cc +0 -76
  105. package/android/src/main/cpp/libyuv/source/rotate_argb.cc +0 -259
  106. package/android/src/main/cpp/libyuv/source/rotate_common.cc +0 -208
  107. package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +0 -505
  108. package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +0 -233
  109. package/android/src/main/cpp/libyuv/source/rotate_neon.cc +0 -219
  110. package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +0 -273
  111. package/android/src/main/cpp/libyuv/source/rotate_sme.cc +0 -174
  112. package/android/src/main/cpp/libyuv/source/rotate_win.cc +0 -253
  113. package/android/src/main/cpp/libyuv/source/row_any.cc +0 -2519
  114. package/android/src/main/cpp/libyuv/source/row_common.cc +0 -4461
  115. package/android/src/main/cpp/libyuv/source/row_gcc.cc +0 -9570
  116. package/android/src/main/cpp/libyuv/source/row_lasx.cc +0 -2343
  117. package/android/src/main/cpp/libyuv/source/row_lsx.cc +0 -3030
  118. package/android/src/main/cpp/libyuv/source/row_neon.cc +0 -4026
  119. package/android/src/main/cpp/libyuv/source/row_neon64.cc +0 -5617
  120. package/android/src/main/cpp/libyuv/source/row_rvv.cc +0 -2599
  121. package/android/src/main/cpp/libyuv/source/row_sme.cc +0 -1183
  122. package/android/src/main/cpp/libyuv/source/row_sve.cc +0 -1088
  123. package/android/src/main/cpp/libyuv/source/row_win.cc +0 -6453
  124. package/android/src/main/cpp/libyuv/source/scale.cc +0 -2710
  125. package/android/src/main/cpp/libyuv/source/scale_any.cc +0 -991
  126. package/android/src/main/cpp/libyuv/source/scale_argb.cc +0 -1158
  127. package/android/src/main/cpp/libyuv/source/scale_common.cc +0 -1977
  128. package/android/src/main/cpp/libyuv/source/scale_gcc.cc +0 -2947
  129. package/android/src/main/cpp/libyuv/source/scale_lsx.cc +0 -739
  130. package/android/src/main/cpp/libyuv/source/scale_neon.cc +0 -1449
  131. package/android/src/main/cpp/libyuv/source/scale_neon64.cc +0 -1552
  132. package/android/src/main/cpp/libyuv/source/scale_rgb.cc +0 -82
  133. package/android/src/main/cpp/libyuv/source/scale_rvv.cc +0 -1971
  134. package/android/src/main/cpp/libyuv/source/scale_sme.cc +0 -555
  135. package/android/src/main/cpp/libyuv/source/scale_uv.cc +0 -1159
  136. package/android/src/main/cpp/libyuv/source/scale_win.cc +0 -1392
  137. package/android/src/main/cpp/libyuv/source/test.sh +0 -35
  138. package/android/src/main/cpp/libyuv/source/video_common.cc +0 -62
  139. package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +0 -4
  140. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +0 -931
  141. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +0 -164
  142. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +0 -21
  143. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +0 -13
  144. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +0 -13
  145. package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +0 -38
  146. package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +0 -3
  147. package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +0 -9
  148. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +0 -3
  149. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +0 -15
  150. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +0 -25
  151. package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +0 -43
  152. package/android/src/main/cpp/libyuv/unit_test/color_test.cc +0 -848
  153. package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +0 -739
  154. package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +0 -2867
  155. package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +0 -2133
  156. package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +0 -427
  157. package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +0 -63
  158. package/android/src/main/cpp/libyuv/unit_test/math_test.cc +0 -160
  159. package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +0 -4731
  160. package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +0 -334
  161. package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +0 -962
  162. package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +0 -590
  163. package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +0 -465
  164. package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +0 -280
  165. package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +0 -1135
  166. package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +0 -249
  167. package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +0 -12
  168. package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +0 -7
  169. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +0 -5
  170. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +0 -10
  171. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +0 -7
  172. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +0 -4
  173. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +0 -4
  174. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +0 -4
  175. package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +0 -23
  176. package/android/src/main/cpp/libyuv/unit_test/testdata/test0.jpg +0 -0
  177. package/android/src/main/cpp/libyuv/unit_test/testdata/test1.jpg +0 -0
  178. package/android/src/main/cpp/libyuv/unit_test/testdata/test2.jpg +0 -0
  179. package/android/src/main/cpp/libyuv/unit_test/testdata/test3.jpg +0 -0
  180. package/android/src/main/cpp/libyuv/unit_test/testdata/test4.jpg +0 -0
  181. package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +0 -581
  182. package/android/src/main/cpp/libyuv/unit_test/unit_test.h +0 -232
  183. package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +0 -112
  184. package/android/src/main/cpp/libyuv/util/Makefile +0 -9
  185. package/android/src/main/cpp/libyuv/util/color.cc +0 -120
  186. package/android/src/main/cpp/libyuv/util/compare.cc +0 -67
  187. package/android/src/main/cpp/libyuv/util/cpuid.c +0 -211
  188. package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +0 -28
  189. package/android/src/main/cpp/libyuv/util/psnr.cc +0 -291
  190. package/android/src/main/cpp/libyuv/util/psnr.h +0 -47
  191. package/android/src/main/cpp/libyuv/util/psnr_main.cc +0 -620
  192. package/android/src/main/cpp/libyuv/util/ssim.cc +0 -364
  193. package/android/src/main/cpp/libyuv/util/ssim.h +0 -38
  194. package/android/src/main/cpp/libyuv/util/yuvconstants.c +0 -114
  195. package/android/src/main/cpp/libyuv/util/yuvconvert.cc +0 -367
  196. package/android/src/main/cpp/libyuv/winarm.mk +0 -47
  197. package/android/src/main/java/com/faceantispoof/ByteBufferPool.kt +0 -68
  198. package/android/src/main/java/com/faceantispoof/FastYuv.kt +0 -51
  199. package/android/src/main/java/com/faceantispoof/YuvToFloatArrayConverter.kt +0 -584
  200. package/android/src/main/java/com/faceantispoof/YuvToRgbConverter.kt +0 -73
@@ -1,342 +0,0 @@
1
- #include "fast_yuv.h"
2
- #include <stdlib.h>
3
- #include <string.h>
4
- #include <vector>
5
- #include <unordered_map>
6
- #include <mutex>
7
-
8
- // Include specific libyuv headers with SIMD optimizations.
9
- // libyuv internally uses NEON for ARM and other SIMD extensions.
10
- #include "libyuv/convert.h"
11
- #include "libyuv/convert_argb.h"
12
- #include "libyuv/convert_from.h"
13
- #include "libyuv/scale.h"
14
- #include "libyuv/rotate.h"
15
-
16
- namespace fastyuv {
17
-
18
- // Simple memory pool for reducing allocation overhead in video processing
19
- class BufferPool {
20
- private:
21
- std::unordered_map<size_t, std::vector<uint8_t*>> pool;
22
- std::mutex pool_mutex;
23
- static constexpr int MAX_BUFFERS_PER_SIZE = 4; // Keep up to 4 buffers per size
24
-
25
- public:
26
- uint8_t* allocate(size_t size) {
27
- std::lock_guard<std::mutex> guard(pool_mutex);
28
- auto& buffers = pool[size];
29
- if (!buffers.empty()) {
30
- uint8_t* buf = buffers.back();
31
- buffers.pop_back();
32
- return buf;
33
- }
34
- return (uint8_t*)malloc(size);
35
- }
36
-
37
- void deallocate(uint8_t* ptr, size_t size) {
38
- if (!ptr) return;
39
- std::lock_guard<std::mutex> guard(pool_mutex);
40
- auto& buffers = pool[size];
41
- if (buffers.size() < MAX_BUFFERS_PER_SIZE) {
42
- buffers.push_back(ptr);
43
- } else {
44
- free(ptr);
45
- }
46
- }
47
-
48
- static BufferPool& getInstance() {
49
- static BufferPool instance;
50
- return instance;
51
- }
52
- };
53
-
54
- // RAII helper for automatic buffer management
55
- class BufferGuard {
56
- private:
57
- uint8_t* ptr;
58
- size_t size;
59
-
60
- public:
61
- BufferGuard(size_t size) : size(size) {
62
- ptr = BufferPool::getInstance().allocate(size);
63
- }
64
- ~BufferGuard() {
65
- BufferPool::getInstance().deallocate(ptr, size);
66
- }
67
- uint8_t* get() { return ptr; }
68
- operator uint8_t*() { return ptr; }
69
- };
70
-
71
- bool NV21ToRGB24(const uint8_t* nv21, int width, int height, uint8_t* dst_rgb) {
72
- if (!nv21 || !dst_rgb || width <= 0 || height <= 0) return false;
73
-
74
- // FIXED: libyuv NV21->I420->ARGB pipeline
75
- // libyuv provides the most reliable conversion with NEON/SIMD optimization
76
- int y_size = width * height;
77
- int i420_u_size = (width/2) * (height/2);
78
-
79
- BufferGuard i420_y_guard(y_size);
80
- BufferGuard i420_u_guard(i420_u_size);
81
- BufferGuard i420_v_guard(i420_u_size);
82
-
83
- uint8_t* i420_y = i420_y_guard.get();
84
- uint8_t* i420_u = i420_u_guard.get();
85
- uint8_t* i420_v = i420_v_guard.get();
86
-
87
- if (!i420_y || !i420_u || !i420_v) {
88
- return false;
89
- }
90
-
91
- // NV21: Y plane, then interleaved VU (V first)
92
- // CRITICAL: src_vu stride is 2 (interleaved UV pairs), not just width
93
- const uint8_t* src_y = nv21;
94
- const uint8_t* src_vu = nv21 + y_size;
95
-
96
- // Convert NV21 to I420 (planar YUV)
97
- // NV21ToI420 correctly handles the interleaved VU data
98
- int res = libyuv::NV21ToI420(src_y, width,
99
- src_vu, width, // stride = width (interleaved)
100
- i420_y, width,
101
- i420_u, width/2,
102
- i420_v, width/2,
103
- width, height);
104
-
105
- if (res != 0) {
106
- return false;
107
- }
108
-
109
- // Convert I420 -> ARGB with proper channel ordering
110
- // ARGB layout: A(unused) R G B per pixel
111
- int pixel_count = width * height;
112
-
113
- BufferGuard tmp_argb_guard(pixel_count * 4);
114
- uint8_t* tmp_argb = tmp_argb_guard.get();
115
- if (!tmp_argb) { return false; }
116
-
117
- res = libyuv::I420ToARGB(i420_y, width,
118
- i420_u, width/2,
119
- i420_v, width/2,
120
- tmp_argb, width * 4,
121
- width, height);
122
-
123
- if (res == 0) {
124
- // Extract RGB from ARGB: ARGB format is [A][R][G][B] per pixel
125
- // tmp_argb[i*4 + 0] = A (unused alpha)
126
- // tmp_argb[i*4 + 1] = R
127
- // tmp_argb[i*4 + 2] = G
128
- // tmp_argb[i*4 + 3] = B
129
- for (int i = 0; i < pixel_count; ++i) {
130
- dst_rgb[i*3 + 0] = tmp_argb[i*4 + 1]; // R
131
- dst_rgb[i*3 + 1] = tmp_argb[i*4 + 2]; // G
132
- dst_rgb[i*3 + 2] = tmp_argb[i*4 + 3]; // B
133
- }
134
- }
135
-
136
- return res == 0;
137
- }
138
-
139
- bool NV21ToARGB(const uint8_t* nv21, int width, int height, uint8_t* dst_argb) {
140
- if (!nv21 || !dst_argb || width <= 0 || height <= 0) return false;
141
-
142
- int y_size = width * height;
143
- int uv_size = (width/2) * (height/2);
144
-
145
- // Use buffer pool for I420 intermediate buffers
146
- BufferGuard i420_y_guard(y_size);
147
- BufferGuard i420_u_guard(uv_size);
148
- BufferGuard i420_v_guard(uv_size);
149
-
150
- uint8_t* i420_y = i420_y_guard.get();
151
- uint8_t* i420_u = i420_u_guard.get();
152
- uint8_t* i420_v = i420_v_guard.get();
153
-
154
- if (!i420_y || !i420_u || !i420_v) { return false; }
155
-
156
- const uint8_t* src_y = nv21;
157
- const uint8_t* src_vu = nv21 + y_size;
158
-
159
- // libyuv handles NEON/SIMD optimizations internally on ARM
160
- int res = libyuv::NV21ToI420(src_y, width,
161
- src_vu, width,
162
- i420_y, width,
163
- i420_u, width/2,
164
- i420_v, width/2,
165
- width, height);
166
-
167
- if (res != 0) { return false; }
168
-
169
- // Fast NEON-optimized I420 to ARGB conversion
170
- res = libyuv::I420ToARGB(i420_y, width,
171
- i420_u, width/2,
172
- i420_v, width/2,
173
- dst_argb, width * 4,
174
- width, height);
175
-
176
- return res == 0;
177
- }
178
-
179
- bool NV21ToBGR24(const uint8_t* nv21, int width, int height, uint8_t* dst_bgr) {
180
- // Convert to RGB24 then swap channels with SIMD-friendly loop
181
- if (!nv21 || !dst_bgr) return false;
182
- int pixel_count = width * height;
183
-
184
- BufferGuard tmp_guard(pixel_count * 3);
185
- uint8_t* tmp = tmp_guard.get();
186
- if (!tmp) return false;
187
-
188
- bool ok = NV21ToRGB24(nv21, width, height, tmp);
189
- if (!ok) { return false; }
190
-
191
- // Swap R<->B with vectorizable loop
192
- for (int i = 0; i < pixel_count; ++i) {
193
- dst_bgr[i*3 + 0] = tmp[i*3 + 2];
194
- dst_bgr[i*3 + 1] = tmp[i*3 + 1];
195
- dst_bgr[i*3 + 2] = tmp[i*3 + 0];
196
- }
197
- return true;
198
- }
199
-
200
- bool NV21ToARGBResize(const uint8_t* nv21, int src_w, int src_h, uint8_t* dst_argb, int dst_w, int dst_h) {
201
- if (!nv21 || !dst_argb || src_w <= 0 || src_h <= 0 || dst_w <= 0 || dst_h <= 0) return false;
202
-
203
- int src_y_size = src_w * src_h;
204
- int src_uv_size = (src_w/2) * (src_h/2);
205
-
206
- BufferGuard i420_y_guard(src_y_size);
207
- BufferGuard i420_u_guard(src_uv_size);
208
- BufferGuard i420_v_guard(src_uv_size);
209
-
210
- uint8_t* i420_y = i420_y_guard.get();
211
- uint8_t* i420_u = i420_u_guard.get();
212
- uint8_t* i420_v = i420_v_guard.get();
213
-
214
- if (!i420_y || !i420_u || !i420_v) { return false; }
215
-
216
- const uint8_t* src_y = nv21;
217
- const uint8_t* src_vu = nv21 + src_y_size;
218
-
219
- int res = libyuv::NV21ToI420(src_y, src_w,
220
- src_vu, src_w,
221
- i420_y, src_w,
222
- i420_u, src_w/2,
223
- i420_v, src_w/2,
224
- src_w, src_h);
225
- if (res != 0) { return false; }
226
-
227
- // Allocate scaled I420
228
- int dst_y_size = dst_w * dst_h;
229
- int dst_uv_size = (dst_w/2)*(dst_h/2);
230
-
231
- BufferGuard dst_y_guard(dst_y_size);
232
- BufferGuard dst_u_guard(dst_uv_size);
233
- BufferGuard dst_v_guard(dst_uv_size);
234
-
235
- uint8_t* dst_y = dst_y_guard.get();
236
- uint8_t* dst_u = dst_u_guard.get();
237
- uint8_t* dst_v = dst_v_guard.get();
238
-
239
- if (!dst_y || !dst_u || !dst_v) { return false; }
240
-
241
- // libyuv scale uses NEON/SIMD internally
242
- res = libyuv::I420Scale(i420_y, src_w,
243
- i420_u, src_w/2,
244
- i420_v, src_w/2,
245
- src_w, src_h,
246
- dst_y, dst_w,
247
- dst_u, dst_w/2,
248
- dst_v, dst_w/2,
249
- dst_w, dst_h,
250
- libyuv::kFilterBox);
251
-
252
- if (res != 0) { return false; }
253
-
254
- // Convert scaled I420 to ARGB with NEON acceleration
255
- res = libyuv::I420ToARGB(dst_y, dst_w,
256
- dst_u, dst_w/2,
257
- dst_v, dst_w/2,
258
- dst_argb, dst_w * 4,
259
- dst_w, dst_h);
260
-
261
- return res == 0;
262
- }
263
-
264
- bool NV21ToARGBRotate(const uint8_t* nv21, int src_w, int src_h, uint8_t* dst_argb, int rotation) {
265
- if (!nv21 || !dst_argb) return false;
266
- // rotation must be 0/90/180/270
267
- int rot = rotation % 360;
268
- if (rot < 0) rot += 360;
269
- if (rot % 90 != 0) return false;
270
-
271
- int y_size = src_w * src_h;
272
- int uv_size = (src_w/2)*(src_h/2);
273
-
274
- BufferGuard i420_y_guard(y_size);
275
- BufferGuard i420_u_guard(uv_size);
276
- BufferGuard i420_v_guard(uv_size);
277
-
278
- uint8_t* i420_y = i420_y_guard.get();
279
- uint8_t* i420_u = i420_u_guard.get();
280
- uint8_t* i420_v = i420_v_guard.get();
281
-
282
- if (!i420_y || !i420_u || !i420_v) { return false; }
283
-
284
- const uint8_t* src_y = nv21;
285
- const uint8_t* src_vu = nv21 + y_size;
286
-
287
- int res = libyuv::NV21ToI420(src_y, src_w,
288
- src_vu, src_w,
289
- i420_y, src_w,
290
- i420_u, src_w/2,
291
- i420_v, src_w/2,
292
- src_w, src_h);
293
- if (res != 0) { return false; }
294
-
295
- // Rotate I420
296
- int dst_w = (rot == 90 || rot == 270) ? src_h : src_w;
297
- int dst_h = (rot == 90 || rot == 270) ? src_w : src_h;
298
-
299
- int dst_y_size = dst_w * dst_h;
300
- int dst_uv_size = (dst_w/2)*(dst_h/2);
301
-
302
- BufferGuard ry_guard(dst_y_size);
303
- BufferGuard ru_guard(dst_uv_size);
304
- BufferGuard rv_guard(dst_uv_size);
305
-
306
- uint8_t* ry = ry_guard.get();
307
- uint8_t* ru = ru_guard.get();
308
- uint8_t* rv = rv_guard.get();
309
-
310
- if (!ry || !ru || !rv) { return false; }
311
-
312
- libyuv::RotationMode mode = libyuv::kRotate0;
313
- switch (rot) {
314
- case 0: mode = libyuv::kRotate0; break;
315
- case 90: mode = libyuv::kRotate90; break;
316
- case 180: mode = libyuv::kRotate180; break;
317
- case 270: mode = libyuv::kRotate270; break;
318
- }
319
-
320
- // I420Rotate uses NEON on ARM
321
- res = libyuv::I420Rotate(i420_y, src_w,
322
- i420_u, src_w/2,
323
- i420_v, src_w/2,
324
- ry, dst_w,
325
- ru, dst_w/2,
326
- rv, dst_w/2,
327
- src_w, src_h,
328
- mode);
329
-
330
- if (res != 0) { return false; }
331
-
332
- // Convert rotated I420 to ARGB with NEON acceleration
333
- res = libyuv::I420ToARGB(ry, dst_w,
334
- ru, dst_w/2,
335
- rv, dst_w/2,
336
- dst_argb, dst_w * 4,
337
- dst_w, dst_h);
338
-
339
- return res == 0;
340
- }
341
-
342
- } // namespace fastyuv
@@ -1,23 +0,0 @@
1
- #pragma once
2
-
3
- #include <stdint.h>
4
-
5
- // Lightweight helpers using libyuv. Implemented in fast_yuv.cpp.
6
- namespace fastyuv {
7
-
8
- // Convert NV21 (YUV420sp) to 3-channel RGB (RGB24). Returns true on success.
9
- bool NV21ToRGB24(const uint8_t* nv21, int width, int height, uint8_t* dst_rgb);
10
-
11
- // Convert NV21 to ARGB (4 bytes per pixel, order A,R,G,B)
12
- bool NV21ToARGB(const uint8_t* nv21, int width, int height, uint8_t* dst_argb);
13
-
14
- // Convert NV21 to BGR24
15
- bool NV21ToBGR24(const uint8_t* nv21, int width, int height, uint8_t* dst_bgr);
16
-
17
- // Resize NV21 -> ARGB with scaling to dst_w x dst_h
18
- bool NV21ToARGBResize(const uint8_t* nv21, int src_w, int src_h, uint8_t* dst_argb, int dst_w, int dst_h);
19
-
20
- // Rotate NV21 to ARGB with rotation 0/90/180/270
21
- bool NV21ToARGBRotate(const uint8_t* nv21, int src_w, int src_h, uint8_t* dst_argb, int rotation);
22
-
23
- } // namespace fastyuv
@@ -1,6 +0,0 @@
1
- # Defines the Chromium style for automatic reformatting.
2
- # http://clang.llvm.org/docs/ClangFormatStyleOptions.html
3
- BasedOnStyle: Chromium
4
- ---
5
- Language: Java
6
- BasedOnStyle: Google
@@ -1,40 +0,0 @@
1
- # Copyright 2015 The LibYuv Project Authors. All rights reserved.
2
- #
3
- # Use of this source code is governed by a BSD-style license
4
- # that can be found in the LICENSE file in the root of the source
5
- # tree. An additional intellectual property rights grant can be found
6
- # in the file PATENTS. All contributing project authors may
7
- # be found in the AUTHORS file in the root of the source tree.
8
-
9
- import("//build/dotfile_settings.gni")
10
-
11
- # The location of the build configuration file.
12
- buildconfig = "//build/config/BUILDCONFIG.gn"
13
-
14
- # The python interpreter to use by default. On Windows, this will look
15
- # for python3.exe and python3.bat.
16
- script_executable = "python3"
17
-
18
- # The secondary source root is a parallel directory tree where
19
- # GN build files are placed when they can not be placed directly
20
- # in the source tree, e.g. for third party source trees.
21
- secondary_source = "//build/secondary/"
22
-
23
- # These are the targets to check headers for by default. The files in targets
24
- # matching these patterns (see "gn help label_pattern" for format) will have
25
- # their includes checked for proper dependencies when you run either
26
- # "gn check" or "gn gen --check".
27
- check_targets = [ "//libyuv/*" ]
28
-
29
- # These are the list of GN files that run exec_script. This allowlist exists
30
- # to force additional review for new uses of exec_script, which is strongly
31
- # discouraged except for gypi_to_gn calls.
32
- exec_script_allowlist = build_dotfile_settings.exec_script_allowlist +
33
- [ "//build_overrides/build.gni" ]
34
-
35
- default_args = {
36
- mac_sdk_min = "10.12"
37
- ios_deployment_target = "12.0"
38
- # Use Siso instead of Ninja.
39
- use_siso = true
40
- }