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.
- package/android/CMakeLists.txt +12 -0
- package/android/build.gradle +10 -9
- package/android/src/main/cpp/cpp-adapter.cpp +6 -3
- package/ios/HybridSpoofDetectorOutput.swift +112 -72
- package/package.json +1 -1
- package/android/src/main/cpp/CMakeLists.txt +0 -33
- package/android/src/main/cpp/FaceAntiSpoofJSI.cpp +0 -142
- package/android/src/main/cpp/FastYuvJni.cpp +0 -111
- package/android/src/main/cpp/fast_yuv.cpp +0 -342
- package/android/src/main/cpp/fast_yuv.h +0 -23
- package/android/src/main/cpp/libyuv/.clang-format +0 -6
- package/android/src/main/cpp/libyuv/.gn +0 -40
- package/android/src/main/cpp/libyuv/.vpython3 +0 -410
- package/android/src/main/cpp/libyuv/AUTHORS +0 -7
- package/android/src/main/cpp/libyuv/Android.bp +0 -202
- package/android/src/main/cpp/libyuv/Android.mk +0 -106
- package/android/src/main/cpp/libyuv/BUILD.gn +0 -490
- package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +0 -70
- package/android/src/main/cpp/libyuv/CMakeLists.txt +0 -259
- package/android/src/main/cpp/libyuv/DEPS +0 -935
- package/android/src/main/cpp/libyuv/DIR_METADATA +0 -3
- package/android/src/main/cpp/libyuv/LICENSE +0 -29
- package/android/src/main/cpp/libyuv/OWNERS +0 -11
- package/android/src/main/cpp/libyuv/PATENTS +0 -24
- package/android/src/main/cpp/libyuv/PRESUBMIT.py +0 -65
- package/android/src/main/cpp/libyuv/README.chromium +0 -11
- package/android/src/main/cpp/libyuv/README.md +0 -19
- package/android/src/main/cpp/libyuv/build_overrides/build.gni +0 -60
- package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +0 -19
- package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +0 -17
- package/android/src/main/cpp/libyuv/codereview.settings +0 -5
- package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +0 -409
- package/android/src/main/cpp/libyuv/docs/environment_variables.md +0 -64
- package/android/src/main/cpp/libyuv/docs/feature_detection.md +0 -108
- package/android/src/main/cpp/libyuv/docs/filtering.md +0 -196
- package/android/src/main/cpp/libyuv/docs/formats.md +0 -208
- package/android/src/main/cpp/libyuv/docs/getting_started.md +0 -296
- package/android/src/main/cpp/libyuv/docs/rotation.md +0 -107
- package/android/src/main/cpp/libyuv/download_vs_toolchain.py +0 -29
- package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +0 -68
- package/android/src/main/cpp/libyuv/include/libyuv/compare.h +0 -111
- package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +0 -112
- package/android/src/main/cpp/libyuv/include/libyuv/convert.h +0 -1117
- package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +0 -2335
- package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +0 -203
- package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +0 -394
- package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +0 -147
- package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +0 -99
- package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +0 -1949
- package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +0 -195
- package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +0 -1131
- package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +0 -296
- package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +0 -37
- package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +0 -265
- package/android/src/main/cpp/libyuv/include/libyuv/row.h +0 -6738
- package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +0 -2154
- package/android/src/main/cpp/libyuv/include/libyuv/scale.h +0 -336
- package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +0 -76
- package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +0 -42
- package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +0 -1726
- package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +0 -51
- package/android/src/main/cpp/libyuv/include/libyuv/version.h +0 -16
- package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +0 -222
- package/android/src/main/cpp/libyuv/include/libyuv.h +0 -33
- package/android/src/main/cpp/libyuv/infra/config/OWNERS +0 -3
- package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +0 -17
- package/android/src/main/cpp/libyuv/infra/config/README.md +0 -2
- package/android/src/main/cpp/libyuv/infra/config/codereview.settings +0 -6
- package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +0 -144
- package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +0 -1185
- package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +0 -9
- package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +0 -246
- package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +0 -385
- package/android/src/main/cpp/libyuv/infra/config/main.star +0 -402
- package/android/src/main/cpp/libyuv/infra/config/project.cfg +0 -16
- package/android/src/main/cpp/libyuv/infra/config/realms.cfg +0 -111
- package/android/src/main/cpp/libyuv/libyuv.gni +0 -34
- package/android/src/main/cpp/libyuv/libyuv.gyp +0 -149
- package/android/src/main/cpp/libyuv/libyuv.gypi +0 -87
- package/android/src/main/cpp/libyuv/linux.mk +0 -96
- package/android/src/main/cpp/libyuv/public.mk +0 -13
- package/android/src/main/cpp/libyuv/pylintrc +0 -49
- package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +0 -74
- package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +0 -56
- package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +0 -15
- package/android/src/main/cpp/libyuv/source/compare.cc +0 -435
- package/android/src/main/cpp/libyuv/source/compare_common.cc +0 -74
- package/android/src/main/cpp/libyuv/source/compare_gcc.cc +0 -362
- package/android/src/main/cpp/libyuv/source/compare_neon.cc +0 -96
- package/android/src/main/cpp/libyuv/source/compare_neon64.cc +0 -223
- package/android/src/main/cpp/libyuv/source/compare_win.cc +0 -241
- package/android/src/main/cpp/libyuv/source/convert.cc +0 -4746
- package/android/src/main/cpp/libyuv/source/convert_argb.cc +0 -9179
- package/android/src/main/cpp/libyuv/source/convert_from.cc +0 -866
- package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +0 -3671
- package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +0 -602
- package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +0 -391
- package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +0 -288
- package/android/src/main/cpp/libyuv/source/cpu_id.cc +0 -496
- package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +0 -580
- package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +0 -71
- package/android/src/main/cpp/libyuv/source/planar_functions.cc +0 -5663
- package/android/src/main/cpp/libyuv/source/rotate.cc +0 -1241
- package/android/src/main/cpp/libyuv/source/rotate_any.cc +0 -76
- package/android/src/main/cpp/libyuv/source/rotate_argb.cc +0 -259
- package/android/src/main/cpp/libyuv/source/rotate_common.cc +0 -208
- package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +0 -505
- package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +0 -233
- package/android/src/main/cpp/libyuv/source/rotate_neon.cc +0 -219
- package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +0 -273
- package/android/src/main/cpp/libyuv/source/rotate_sme.cc +0 -174
- package/android/src/main/cpp/libyuv/source/rotate_win.cc +0 -253
- package/android/src/main/cpp/libyuv/source/row_any.cc +0 -2519
- package/android/src/main/cpp/libyuv/source/row_common.cc +0 -4461
- package/android/src/main/cpp/libyuv/source/row_gcc.cc +0 -9570
- package/android/src/main/cpp/libyuv/source/row_lasx.cc +0 -2343
- package/android/src/main/cpp/libyuv/source/row_lsx.cc +0 -3030
- package/android/src/main/cpp/libyuv/source/row_neon.cc +0 -4026
- package/android/src/main/cpp/libyuv/source/row_neon64.cc +0 -5617
- package/android/src/main/cpp/libyuv/source/row_rvv.cc +0 -2599
- package/android/src/main/cpp/libyuv/source/row_sme.cc +0 -1183
- package/android/src/main/cpp/libyuv/source/row_sve.cc +0 -1088
- package/android/src/main/cpp/libyuv/source/row_win.cc +0 -6453
- package/android/src/main/cpp/libyuv/source/scale.cc +0 -2710
- package/android/src/main/cpp/libyuv/source/scale_any.cc +0 -991
- package/android/src/main/cpp/libyuv/source/scale_argb.cc +0 -1158
- package/android/src/main/cpp/libyuv/source/scale_common.cc +0 -1977
- package/android/src/main/cpp/libyuv/source/scale_gcc.cc +0 -2947
- package/android/src/main/cpp/libyuv/source/scale_lsx.cc +0 -739
- package/android/src/main/cpp/libyuv/source/scale_neon.cc +0 -1449
- package/android/src/main/cpp/libyuv/source/scale_neon64.cc +0 -1552
- package/android/src/main/cpp/libyuv/source/scale_rgb.cc +0 -82
- package/android/src/main/cpp/libyuv/source/scale_rvv.cc +0 -1971
- package/android/src/main/cpp/libyuv/source/scale_sme.cc +0 -555
- package/android/src/main/cpp/libyuv/source/scale_uv.cc +0 -1159
- package/android/src/main/cpp/libyuv/source/scale_win.cc +0 -1392
- package/android/src/main/cpp/libyuv/source/test.sh +0 -35
- package/android/src/main/cpp/libyuv/source/video_common.cc +0 -62
- package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +0 -4
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +0 -931
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +0 -164
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +0 -21
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +0 -13
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +0 -13
- package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +0 -38
- package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +0 -3
- package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +0 -9
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +0 -3
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +0 -15
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +0 -25
- package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +0 -43
- package/android/src/main/cpp/libyuv/unit_test/color_test.cc +0 -848
- package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +0 -739
- package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +0 -2867
- package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +0 -2133
- package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +0 -427
- package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +0 -63
- package/android/src/main/cpp/libyuv/unit_test/math_test.cc +0 -160
- package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +0 -4731
- package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +0 -334
- package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +0 -962
- package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +0 -590
- package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +0 -465
- package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +0 -280
- package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +0 -1135
- package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +0 -249
- package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +0 -12
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +0 -7
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +0 -5
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +0 -10
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +0 -7
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +0 -4
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +0 -4
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +0 -4
- package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +0 -23
- package/android/src/main/cpp/libyuv/unit_test/testdata/test0.jpg +0 -0
- package/android/src/main/cpp/libyuv/unit_test/testdata/test1.jpg +0 -0
- package/android/src/main/cpp/libyuv/unit_test/testdata/test2.jpg +0 -0
- package/android/src/main/cpp/libyuv/unit_test/testdata/test3.jpg +0 -0
- package/android/src/main/cpp/libyuv/unit_test/testdata/test4.jpg +0 -0
- package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +0 -581
- package/android/src/main/cpp/libyuv/unit_test/unit_test.h +0 -232
- package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +0 -112
- package/android/src/main/cpp/libyuv/util/Makefile +0 -9
- package/android/src/main/cpp/libyuv/util/color.cc +0 -120
- package/android/src/main/cpp/libyuv/util/compare.cc +0 -67
- package/android/src/main/cpp/libyuv/util/cpuid.c +0 -211
- package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +0 -28
- package/android/src/main/cpp/libyuv/util/psnr.cc +0 -291
- package/android/src/main/cpp/libyuv/util/psnr.h +0 -47
- package/android/src/main/cpp/libyuv/util/psnr_main.cc +0 -620
- package/android/src/main/cpp/libyuv/util/ssim.cc +0 -364
- package/android/src/main/cpp/libyuv/util/ssim.h +0 -38
- package/android/src/main/cpp/libyuv/util/yuvconstants.c +0 -114
- package/android/src/main/cpp/libyuv/util/yuvconvert.cc +0 -367
- package/android/src/main/cpp/libyuv/winarm.mk +0 -47
- package/android/src/main/java/com/faceantispoof/ByteBufferPool.kt +0 -68
- package/android/src/main/java/com/faceantispoof/FastYuv.kt +0 -51
- package/android/src/main/java/com/faceantispoof/YuvToFloatArrayConverter.kt +0 -584
- 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,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
|
-
}
|