react-native-vision-camera-spoof-detector 1.0.21 → 1.0.23
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/.gitattributes +2 -0
- package/.gitignore +27 -0
- package/CHANGELOG.md +2 -2
- package/CONTRIBUTING.md +2 -2
- package/README.md +442 -443
- package/android/build.gradle +12 -4
- package/android/src/main/cpp/CMakeLists.txt +101 -94
- package/android/src/main/cpp/libyuv/.clang-format +6 -6
- package/android/src/main/cpp/libyuv/.gn +40 -40
- package/android/src/main/cpp/libyuv/.vpython3 +410 -410
- package/android/src/main/cpp/libyuv/AUTHORS +7 -7
- package/android/src/main/cpp/libyuv/Android.bp +202 -202
- package/android/src/main/cpp/libyuv/Android.mk +106 -106
- package/android/src/main/cpp/libyuv/BUILD.gn +490 -490
- package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +70 -70
- package/android/src/main/cpp/libyuv/CMakeLists.txt +259 -252
- package/android/src/main/cpp/libyuv/DEPS +935 -935
- package/android/src/main/cpp/libyuv/DIR_METADATA +3 -3
- package/android/src/main/cpp/libyuv/LICENSE +29 -29
- package/android/src/main/cpp/libyuv/OWNERS +11 -11
- package/android/src/main/cpp/libyuv/PATENTS +23 -23
- package/android/src/main/cpp/libyuv/PRESUBMIT.py +65 -65
- package/android/src/main/cpp/libyuv/README.chromium +11 -11
- package/android/src/main/cpp/libyuv/README.md +19 -19
- package/android/src/main/cpp/libyuv/build_overrides/build.gni +60 -60
- package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +19 -19
- package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +17 -17
- package/android/src/main/cpp/libyuv/codereview.settings +5 -5
- package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +409 -409
- package/android/src/main/cpp/libyuv/docs/environment_variables.md +64 -64
- package/android/src/main/cpp/libyuv/docs/feature_detection.md +108 -108
- package/android/src/main/cpp/libyuv/docs/filtering.md +196 -196
- package/android/src/main/cpp/libyuv/docs/formats.md +208 -208
- package/android/src/main/cpp/libyuv/docs/getting_started.md +296 -296
- package/android/src/main/cpp/libyuv/docs/rotation.md +107 -107
- package/android/src/main/cpp/libyuv/download_vs_toolchain.py +29 -29
- package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +68 -68
- package/android/src/main/cpp/libyuv/include/libyuv/compare.h +111 -111
- package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +112 -112
- package/android/src/main/cpp/libyuv/include/libyuv/convert.h +1117 -1117
- package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +2335 -2335
- package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +203 -203
- package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +394 -394
- package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +147 -147
- package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +99 -99
- package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +1949 -1949
- package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +195 -195
- package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +1131 -1131
- package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +296 -296
- package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +37 -37
- package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +265 -265
- package/android/src/main/cpp/libyuv/include/libyuv/row.h +6738 -6738
- package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +2154 -2154
- package/android/src/main/cpp/libyuv/include/libyuv/scale.h +336 -336
- package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +76 -76
- package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +42 -42
- package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +1726 -1726
- package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +51 -51
- package/android/src/main/cpp/libyuv/include/libyuv/version.h +16 -16
- package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +222 -222
- package/android/src/main/cpp/libyuv/include/libyuv.h +33 -33
- package/android/src/main/cpp/libyuv/infra/config/OWNERS +3 -3
- package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +17 -17
- package/android/src/main/cpp/libyuv/infra/config/README.md +2 -2
- package/android/src/main/cpp/libyuv/infra/config/codereview.settings +6 -6
- package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +144 -144
- package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +1185 -1185
- package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +9 -9
- package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +246 -246
- package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +385 -385
- package/android/src/main/cpp/libyuv/infra/config/main.star +402 -402
- package/android/src/main/cpp/libyuv/infra/config/project.cfg +16 -16
- package/android/src/main/cpp/libyuv/infra/config/realms.cfg +111 -111
- package/android/src/main/cpp/libyuv/libyuv.gni +34 -34
- package/android/src/main/cpp/libyuv/libyuv.gyp +149 -149
- package/android/src/main/cpp/libyuv/libyuv.gypi +87 -87
- package/android/src/main/cpp/libyuv/linux.mk +96 -96
- package/android/src/main/cpp/libyuv/public.mk +13 -13
- package/android/src/main/cpp/libyuv/pylintrc +49 -49
- package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +74 -74
- package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +56 -56
- package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +15 -15
- package/android/src/main/cpp/libyuv/source/compare.cc +435 -435
- package/android/src/main/cpp/libyuv/source/compare_common.cc +74 -74
- package/android/src/main/cpp/libyuv/source/compare_gcc.cc +362 -362
- package/android/src/main/cpp/libyuv/source/compare_neon.cc +96 -96
- package/android/src/main/cpp/libyuv/source/compare_neon64.cc +223 -223
- package/android/src/main/cpp/libyuv/source/compare_win.cc +241 -241
- package/android/src/main/cpp/libyuv/source/convert.cc +4746 -4746
- package/android/src/main/cpp/libyuv/source/convert_argb.cc +9179 -9179
- package/android/src/main/cpp/libyuv/source/convert_from.cc +866 -866
- package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +3671 -3671
- package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +602 -602
- package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +391 -391
- package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +288 -288
- package/android/src/main/cpp/libyuv/source/cpu_id.cc +496 -496
- package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +580 -580
- package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +71 -71
- package/android/src/main/cpp/libyuv/source/planar_functions.cc +5663 -5663
- package/android/src/main/cpp/libyuv/source/rotate.cc +1241 -1241
- package/android/src/main/cpp/libyuv/source/rotate_any.cc +76 -76
- package/android/src/main/cpp/libyuv/source/rotate_argb.cc +259 -259
- package/android/src/main/cpp/libyuv/source/rotate_common.cc +208 -208
- package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +505 -505
- package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +233 -233
- package/android/src/main/cpp/libyuv/source/rotate_neon.cc +219 -219
- package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +273 -273
- package/android/src/main/cpp/libyuv/source/rotate_sme.cc +174 -174
- package/android/src/main/cpp/libyuv/source/rotate_win.cc +253 -253
- package/android/src/main/cpp/libyuv/source/row_any.cc +2519 -2519
- package/android/src/main/cpp/libyuv/source/row_common.cc +4461 -4461
- package/android/src/main/cpp/libyuv/source/row_gcc.cc +9570 -9570
- package/android/src/main/cpp/libyuv/source/row_lasx.cc +2343 -2343
- package/android/src/main/cpp/libyuv/source/row_lsx.cc +3030 -3030
- package/android/src/main/cpp/libyuv/source/row_neon.cc +4026 -4026
- package/android/src/main/cpp/libyuv/source/row_neon64.cc +5617 -5617
- package/android/src/main/cpp/libyuv/source/row_rvv.cc +2599 -2599
- package/android/src/main/cpp/libyuv/source/row_sme.cc +1183 -1183
- package/android/src/main/cpp/libyuv/source/row_sve.cc +1088 -1088
- package/android/src/main/cpp/libyuv/source/row_win.cc +6453 -6453
- package/android/src/main/cpp/libyuv/source/scale.cc +2710 -2710
- package/android/src/main/cpp/libyuv/source/scale_any.cc +991 -991
- package/android/src/main/cpp/libyuv/source/scale_argb.cc +1158 -1158
- package/android/src/main/cpp/libyuv/source/scale_common.cc +1977 -1977
- package/android/src/main/cpp/libyuv/source/scale_gcc.cc +2947 -2947
- package/android/src/main/cpp/libyuv/source/scale_lsx.cc +739 -739
- package/android/src/main/cpp/libyuv/source/scale_neon.cc +1449 -1449
- package/android/src/main/cpp/libyuv/source/scale_neon64.cc +1552 -1552
- package/android/src/main/cpp/libyuv/source/scale_rgb.cc +82 -82
- package/android/src/main/cpp/libyuv/source/scale_rvv.cc +1971 -1971
- package/android/src/main/cpp/libyuv/source/scale_sme.cc +555 -555
- package/android/src/main/cpp/libyuv/source/scale_uv.cc +1159 -1159
- package/android/src/main/cpp/libyuv/source/scale_win.cc +1392 -1392
- package/android/src/main/cpp/libyuv/source/test.sh +35 -35
- package/android/src/main/cpp/libyuv/source/video_common.cc +62 -62
- package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +4 -4
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +931 -931
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +164 -164
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +21 -21
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +13 -13
- package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +13 -13
- package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +38 -38
- package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +3 -3
- package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +9 -9
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +3 -3
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +15 -15
- package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +25 -25
- package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +43 -43
- package/android/src/main/cpp/libyuv/unit_test/color_test.cc +848 -848
- package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +739 -739
- package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +2867 -2867
- package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +2133 -2133
- package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +427 -427
- package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +63 -63
- package/android/src/main/cpp/libyuv/unit_test/math_test.cc +160 -160
- package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +4731 -4731
- package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +334 -334
- package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +962 -962
- package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +590 -590
- package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +465 -465
- package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +280 -280
- package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +1135 -1135
- package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +249 -249
- package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +12 -12
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +7 -7
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +5 -5
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +10 -10
- package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +7 -7
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +3 -3
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +3 -3
- package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +3 -3
- package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +23 -23
- package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +581 -581
- package/android/src/main/cpp/libyuv/unit_test/unit_test.h +232 -232
- package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +112 -112
- package/android/src/main/cpp/libyuv/util/Makefile +9 -9
- package/android/src/main/cpp/libyuv/util/color.cc +120 -120
- package/android/src/main/cpp/libyuv/util/compare.cc +67 -67
- package/android/src/main/cpp/libyuv/util/cpuid.c +211 -211
- package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +27 -27
- package/android/src/main/cpp/libyuv/util/psnr.cc +291 -291
- package/android/src/main/cpp/libyuv/util/psnr.h +47 -47
- package/android/src/main/cpp/libyuv/util/psnr_main.cc +620 -620
- package/android/src/main/cpp/libyuv/util/ssim.cc +364 -364
- package/android/src/main/cpp/libyuv/util/ssim.h +38 -38
- package/android/src/main/cpp/libyuv/util/yuvconstants.c +114 -114
- package/android/src/main/cpp/libyuv/util/yuvconvert.cc +367 -367
- package/android/src/main/cpp/libyuv/winarm.mk +47 -47
- package/package.json +86 -84
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/vcs-1/gc.properties +0 -0
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2012 The LibYuv Project Authors. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Use of this source code is governed by a BSD-style license
|
|
5
|
-
* that can be found in the LICENSE file in the root of the source
|
|
6
|
-
* tree. An additional intellectual property rights grant can be found
|
|
7
|
-
* in the file PATENTS. All contributing project authors may
|
|
8
|
-
* be found in the AUTHORS file in the root of the source tree.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#include "libyuv/basic_types.h"
|
|
12
|
-
|
|
13
|
-
#include "libyuv/compare_row.h"
|
|
14
|
-
#include "libyuv/row.h"
|
|
15
|
-
|
|
16
|
-
#if defined(_MSC_VER)
|
|
17
|
-
#include <intrin.h> // For __popcnt
|
|
18
|
-
#endif
|
|
19
|
-
|
|
20
|
-
#ifdef __cplusplus
|
|
21
|
-
namespace libyuv {
|
|
22
|
-
extern "C" {
|
|
23
|
-
#endif
|
|
24
|
-
|
|
25
|
-
// This module is for 32 bit Visual C x86
|
|
26
|
-
#if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_IX86) && \
|
|
27
|
-
(!defined(__clang__) || defined(LIBYUV_ENABLE_ROWWIN))
|
|
28
|
-
|
|
29
|
-
uint32_t HammingDistance_SSE42(const uint8_t* src_a,
|
|
30
|
-
const uint8_t* src_b,
|
|
31
|
-
int count) {
|
|
32
|
-
uint32_t diff = 0u;
|
|
33
|
-
|
|
34
|
-
int i;
|
|
35
|
-
for (i = 0; i < count - 3; i += 4) {
|
|
36
|
-
uint32_t x = *((uint32_t*)src_a) ^ *((uint32_t*)src_b); // NOLINT
|
|
37
|
-
src_a += 4;
|
|
38
|
-
src_b += 4;
|
|
39
|
-
diff += __popcnt(x);
|
|
40
|
-
}
|
|
41
|
-
return diff;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
__declspec(naked) uint32_t
|
|
45
|
-
SumSquareError_SSE2(const uint8_t* src_a, const uint8_t* src_b, int count) {
|
|
46
|
-
__asm {
|
|
47
|
-
mov eax, [esp + 4] // src_a
|
|
48
|
-
mov edx, [esp + 8] // src_b
|
|
49
|
-
mov ecx, [esp + 12] // count
|
|
50
|
-
pxor xmm0, xmm0
|
|
51
|
-
pxor xmm5, xmm5
|
|
52
|
-
|
|
53
|
-
wloop:
|
|
54
|
-
movdqu xmm1, [eax]
|
|
55
|
-
lea eax, [eax + 16]
|
|
56
|
-
movdqu xmm2, [edx]
|
|
57
|
-
lea edx, [edx + 16]
|
|
58
|
-
movdqa xmm3, xmm1 // abs trick
|
|
59
|
-
psubusb xmm1, xmm2
|
|
60
|
-
psubusb xmm2, xmm3
|
|
61
|
-
por xmm1, xmm2
|
|
62
|
-
movdqa xmm2, xmm1
|
|
63
|
-
punpcklbw xmm1, xmm5
|
|
64
|
-
punpckhbw xmm2, xmm5
|
|
65
|
-
pmaddwd xmm1, xmm1
|
|
66
|
-
pmaddwd xmm2, xmm2
|
|
67
|
-
paddd xmm0, xmm1
|
|
68
|
-
paddd xmm0, xmm2
|
|
69
|
-
sub ecx, 16
|
|
70
|
-
jg wloop
|
|
71
|
-
|
|
72
|
-
pshufd xmm1, xmm0, 0xee
|
|
73
|
-
paddd xmm0, xmm1
|
|
74
|
-
pshufd xmm1, xmm0, 0x01
|
|
75
|
-
paddd xmm0, xmm1
|
|
76
|
-
movd eax, xmm0
|
|
77
|
-
ret
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
#ifdef HAS_SUMSQUAREERROR_AVX2
|
|
82
|
-
// C4752: found Intel(R) Advanced Vector Extensions; consider using /arch:AVX.
|
|
83
|
-
#pragma warning(disable : 4752)
|
|
84
|
-
__declspec(naked) uint32_t
|
|
85
|
-
SumSquareError_AVX2(const uint8_t* src_a, const uint8_t* src_b, int count) {
|
|
86
|
-
__asm {
|
|
87
|
-
mov eax, [esp + 4] // src_a
|
|
88
|
-
mov edx, [esp + 8] // src_b
|
|
89
|
-
mov ecx, [esp + 12] // count
|
|
90
|
-
vpxor ymm0, ymm0, ymm0 // sum
|
|
91
|
-
vpxor ymm5, ymm5, ymm5 // constant 0 for unpck
|
|
92
|
-
sub edx, eax
|
|
93
|
-
|
|
94
|
-
wloop:
|
|
95
|
-
vmovdqu ymm1, [eax]
|
|
96
|
-
vmovdqu ymm2, [eax + edx]
|
|
97
|
-
lea eax, [eax + 32]
|
|
98
|
-
vpsubusb ymm3, ymm1, ymm2 // abs difference trick
|
|
99
|
-
vpsubusb ymm2, ymm2, ymm1
|
|
100
|
-
vpor ymm1, ymm2, ymm3
|
|
101
|
-
vpunpcklbw ymm2, ymm1, ymm5 // u16. mutates order.
|
|
102
|
-
vpunpckhbw ymm1, ymm1, ymm5
|
|
103
|
-
vpmaddwd ymm2, ymm2, ymm2 // square + hadd to u32.
|
|
104
|
-
vpmaddwd ymm1, ymm1, ymm1
|
|
105
|
-
vpaddd ymm0, ymm0, ymm1
|
|
106
|
-
vpaddd ymm0, ymm0, ymm2
|
|
107
|
-
sub ecx, 32
|
|
108
|
-
jg wloop
|
|
109
|
-
|
|
110
|
-
vpshufd ymm1, ymm0, 0xee // 3, 2 + 1, 0 both lanes.
|
|
111
|
-
vpaddd ymm0, ymm0, ymm1
|
|
112
|
-
vpshufd ymm1, ymm0, 0x01 // 1 + 0 both lanes.
|
|
113
|
-
vpaddd ymm0, ymm0, ymm1
|
|
114
|
-
vpermq ymm1, ymm0, 0x02 // high + low lane.
|
|
115
|
-
vpaddd ymm0, ymm0, ymm1
|
|
116
|
-
vmovd eax, xmm0
|
|
117
|
-
vzeroupper
|
|
118
|
-
ret
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
#endif // HAS_SUMSQUAREERROR_AVX2
|
|
122
|
-
|
|
123
|
-
uvec32 kHash16x33 = {0x92d9e201, 0, 0, 0}; // 33 ^ 16
|
|
124
|
-
uvec32 kHashMul0 = {
|
|
125
|
-
0x0c3525e1, // 33 ^ 15
|
|
126
|
-
0xa3476dc1, // 33 ^ 14
|
|
127
|
-
0x3b4039a1, // 33 ^ 13
|
|
128
|
-
0x4f5f0981, // 33 ^ 12
|
|
129
|
-
};
|
|
130
|
-
uvec32 kHashMul1 = {
|
|
131
|
-
0x30f35d61, // 33 ^ 11
|
|
132
|
-
0x855cb541, // 33 ^ 10
|
|
133
|
-
0x040a9121, // 33 ^ 9
|
|
134
|
-
0x747c7101, // 33 ^ 8
|
|
135
|
-
};
|
|
136
|
-
uvec32 kHashMul2 = {
|
|
137
|
-
0xec41d4e1, // 33 ^ 7
|
|
138
|
-
0x4cfa3cc1, // 33 ^ 6
|
|
139
|
-
0x025528a1, // 33 ^ 5
|
|
140
|
-
0x00121881, // 33 ^ 4
|
|
141
|
-
};
|
|
142
|
-
uvec32 kHashMul3 = {
|
|
143
|
-
0x00008c61, // 33 ^ 3
|
|
144
|
-
0x00000441, // 33 ^ 2
|
|
145
|
-
0x00000021, // 33 ^ 1
|
|
146
|
-
0x00000001, // 33 ^ 0
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
__declspec(naked) uint32_t
|
|
150
|
-
HashDjb2_SSE41(const uint8_t* src, int count, uint32_t seed) {
|
|
151
|
-
__asm {
|
|
152
|
-
mov eax, [esp + 4] // src
|
|
153
|
-
mov ecx, [esp + 8] // count
|
|
154
|
-
movd xmm0, [esp + 12] // seed
|
|
155
|
-
|
|
156
|
-
pxor xmm7, xmm7 // constant 0 for unpck
|
|
157
|
-
movdqa xmm6, xmmword ptr kHash16x33
|
|
158
|
-
|
|
159
|
-
wloop:
|
|
160
|
-
movdqu xmm1, [eax] // src[0-15]
|
|
161
|
-
lea eax, [eax + 16]
|
|
162
|
-
pmulld xmm0, xmm6 // hash *= 33 ^ 16
|
|
163
|
-
movdqa xmm5, xmmword ptr kHashMul0
|
|
164
|
-
movdqa xmm2, xmm1
|
|
165
|
-
punpcklbw xmm2, xmm7 // src[0-7]
|
|
166
|
-
movdqa xmm3, xmm2
|
|
167
|
-
punpcklwd xmm3, xmm7 // src[0-3]
|
|
168
|
-
pmulld xmm3, xmm5
|
|
169
|
-
movdqa xmm5, xmmword ptr kHashMul1
|
|
170
|
-
movdqa xmm4, xmm2
|
|
171
|
-
punpckhwd xmm4, xmm7 // src[4-7]
|
|
172
|
-
pmulld xmm4, xmm5
|
|
173
|
-
movdqa xmm5, xmmword ptr kHashMul2
|
|
174
|
-
punpckhbw xmm1, xmm7 // src[8-15]
|
|
175
|
-
movdqa xmm2, xmm1
|
|
176
|
-
punpcklwd xmm2, xmm7 // src[8-11]
|
|
177
|
-
pmulld xmm2, xmm5
|
|
178
|
-
movdqa xmm5, xmmword ptr kHashMul3
|
|
179
|
-
punpckhwd xmm1, xmm7 // src[12-15]
|
|
180
|
-
pmulld xmm1, xmm5
|
|
181
|
-
paddd xmm3, xmm4 // add 16 results
|
|
182
|
-
paddd xmm1, xmm2
|
|
183
|
-
paddd xmm1, xmm3
|
|
184
|
-
|
|
185
|
-
pshufd xmm2, xmm1, 0x0e // upper 2 dwords
|
|
186
|
-
paddd xmm1, xmm2
|
|
187
|
-
pshufd xmm2, xmm1, 0x01
|
|
188
|
-
paddd xmm1, xmm2
|
|
189
|
-
paddd xmm0, xmm1
|
|
190
|
-
sub ecx, 16
|
|
191
|
-
jg wloop
|
|
192
|
-
|
|
193
|
-
movd eax, xmm0 // return hash
|
|
194
|
-
ret
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Visual C 2012 required for AVX2.
|
|
199
|
-
#ifdef HAS_HASHDJB2_AVX2
|
|
200
|
-
__declspec(naked) uint32_t
|
|
201
|
-
HashDjb2_AVX2(const uint8_t* src, int count, uint32_t seed) {
|
|
202
|
-
__asm {
|
|
203
|
-
mov eax, [esp + 4] // src
|
|
204
|
-
mov ecx, [esp + 8] // count
|
|
205
|
-
vmovd xmm0, [esp + 12] // seed
|
|
206
|
-
|
|
207
|
-
wloop:
|
|
208
|
-
vpmovzxbd xmm3, [eax] // src[0-3]
|
|
209
|
-
vpmulld xmm0, xmm0, xmmword ptr kHash16x33 // hash *= 33 ^ 16
|
|
210
|
-
vpmovzxbd xmm4, [eax + 4] // src[4-7]
|
|
211
|
-
vpmulld xmm3, xmm3, xmmword ptr kHashMul0
|
|
212
|
-
vpmovzxbd xmm2, [eax + 8] // src[8-11]
|
|
213
|
-
vpmulld xmm4, xmm4, xmmword ptr kHashMul1
|
|
214
|
-
vpmovzxbd xmm1, [eax + 12] // src[12-15]
|
|
215
|
-
vpmulld xmm2, xmm2, xmmword ptr kHashMul2
|
|
216
|
-
lea eax, [eax + 16]
|
|
217
|
-
vpmulld xmm1, xmm1, xmmword ptr kHashMul3
|
|
218
|
-
vpaddd xmm3, xmm3, xmm4 // add 16 results
|
|
219
|
-
vpaddd xmm1, xmm1, xmm2
|
|
220
|
-
vpaddd xmm1, xmm1, xmm3
|
|
221
|
-
vpshufd xmm2, xmm1, 0x0e // upper 2 dwords
|
|
222
|
-
vpaddd xmm1, xmm1,xmm2
|
|
223
|
-
vpshufd xmm2, xmm1, 0x01
|
|
224
|
-
vpaddd xmm1, xmm1, xmm2
|
|
225
|
-
vpaddd xmm0, xmm0, xmm1
|
|
226
|
-
sub ecx, 16
|
|
227
|
-
jg wloop
|
|
228
|
-
|
|
229
|
-
vmovd eax, xmm0 // return hash
|
|
230
|
-
vzeroupper
|
|
231
|
-
ret
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
#endif // HAS_HASHDJB2_AVX2
|
|
235
|
-
|
|
236
|
-
#endif // !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86)
|
|
237
|
-
|
|
238
|
-
#ifdef __cplusplus
|
|
239
|
-
} // extern "C"
|
|
240
|
-
} // namespace libyuv
|
|
241
|
-
#endif
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012 The LibYuv Project Authors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license
|
|
5
|
+
* that can be found in the LICENSE file in the root of the source
|
|
6
|
+
* tree. An additional intellectual property rights grant can be found
|
|
7
|
+
* in the file PATENTS. All contributing project authors may
|
|
8
|
+
* be found in the AUTHORS file in the root of the source tree.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#include "libyuv/basic_types.h"
|
|
12
|
+
|
|
13
|
+
#include "libyuv/compare_row.h"
|
|
14
|
+
#include "libyuv/row.h"
|
|
15
|
+
|
|
16
|
+
#if defined(_MSC_VER)
|
|
17
|
+
#include <intrin.h> // For __popcnt
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#ifdef __cplusplus
|
|
21
|
+
namespace libyuv {
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
// This module is for 32 bit Visual C x86
|
|
26
|
+
#if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_IX86) && \
|
|
27
|
+
(!defined(__clang__) || defined(LIBYUV_ENABLE_ROWWIN))
|
|
28
|
+
|
|
29
|
+
uint32_t HammingDistance_SSE42(const uint8_t* src_a,
|
|
30
|
+
const uint8_t* src_b,
|
|
31
|
+
int count) {
|
|
32
|
+
uint32_t diff = 0u;
|
|
33
|
+
|
|
34
|
+
int i;
|
|
35
|
+
for (i = 0; i < count - 3; i += 4) {
|
|
36
|
+
uint32_t x = *((uint32_t*)src_a) ^ *((uint32_t*)src_b); // NOLINT
|
|
37
|
+
src_a += 4;
|
|
38
|
+
src_b += 4;
|
|
39
|
+
diff += __popcnt(x);
|
|
40
|
+
}
|
|
41
|
+
return diff;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
__declspec(naked) uint32_t
|
|
45
|
+
SumSquareError_SSE2(const uint8_t* src_a, const uint8_t* src_b, int count) {
|
|
46
|
+
__asm {
|
|
47
|
+
mov eax, [esp + 4] // src_a
|
|
48
|
+
mov edx, [esp + 8] // src_b
|
|
49
|
+
mov ecx, [esp + 12] // count
|
|
50
|
+
pxor xmm0, xmm0
|
|
51
|
+
pxor xmm5, xmm5
|
|
52
|
+
|
|
53
|
+
wloop:
|
|
54
|
+
movdqu xmm1, [eax]
|
|
55
|
+
lea eax, [eax + 16]
|
|
56
|
+
movdqu xmm2, [edx]
|
|
57
|
+
lea edx, [edx + 16]
|
|
58
|
+
movdqa xmm3, xmm1 // abs trick
|
|
59
|
+
psubusb xmm1, xmm2
|
|
60
|
+
psubusb xmm2, xmm3
|
|
61
|
+
por xmm1, xmm2
|
|
62
|
+
movdqa xmm2, xmm1
|
|
63
|
+
punpcklbw xmm1, xmm5
|
|
64
|
+
punpckhbw xmm2, xmm5
|
|
65
|
+
pmaddwd xmm1, xmm1
|
|
66
|
+
pmaddwd xmm2, xmm2
|
|
67
|
+
paddd xmm0, xmm1
|
|
68
|
+
paddd xmm0, xmm2
|
|
69
|
+
sub ecx, 16
|
|
70
|
+
jg wloop
|
|
71
|
+
|
|
72
|
+
pshufd xmm1, xmm0, 0xee
|
|
73
|
+
paddd xmm0, xmm1
|
|
74
|
+
pshufd xmm1, xmm0, 0x01
|
|
75
|
+
paddd xmm0, xmm1
|
|
76
|
+
movd eax, xmm0
|
|
77
|
+
ret
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#ifdef HAS_SUMSQUAREERROR_AVX2
|
|
82
|
+
// C4752: found Intel(R) Advanced Vector Extensions; consider using /arch:AVX.
|
|
83
|
+
#pragma warning(disable : 4752)
|
|
84
|
+
__declspec(naked) uint32_t
|
|
85
|
+
SumSquareError_AVX2(const uint8_t* src_a, const uint8_t* src_b, int count) {
|
|
86
|
+
__asm {
|
|
87
|
+
mov eax, [esp + 4] // src_a
|
|
88
|
+
mov edx, [esp + 8] // src_b
|
|
89
|
+
mov ecx, [esp + 12] // count
|
|
90
|
+
vpxor ymm0, ymm0, ymm0 // sum
|
|
91
|
+
vpxor ymm5, ymm5, ymm5 // constant 0 for unpck
|
|
92
|
+
sub edx, eax
|
|
93
|
+
|
|
94
|
+
wloop:
|
|
95
|
+
vmovdqu ymm1, [eax]
|
|
96
|
+
vmovdqu ymm2, [eax + edx]
|
|
97
|
+
lea eax, [eax + 32]
|
|
98
|
+
vpsubusb ymm3, ymm1, ymm2 // abs difference trick
|
|
99
|
+
vpsubusb ymm2, ymm2, ymm1
|
|
100
|
+
vpor ymm1, ymm2, ymm3
|
|
101
|
+
vpunpcklbw ymm2, ymm1, ymm5 // u16. mutates order.
|
|
102
|
+
vpunpckhbw ymm1, ymm1, ymm5
|
|
103
|
+
vpmaddwd ymm2, ymm2, ymm2 // square + hadd to u32.
|
|
104
|
+
vpmaddwd ymm1, ymm1, ymm1
|
|
105
|
+
vpaddd ymm0, ymm0, ymm1
|
|
106
|
+
vpaddd ymm0, ymm0, ymm2
|
|
107
|
+
sub ecx, 32
|
|
108
|
+
jg wloop
|
|
109
|
+
|
|
110
|
+
vpshufd ymm1, ymm0, 0xee // 3, 2 + 1, 0 both lanes.
|
|
111
|
+
vpaddd ymm0, ymm0, ymm1
|
|
112
|
+
vpshufd ymm1, ymm0, 0x01 // 1 + 0 both lanes.
|
|
113
|
+
vpaddd ymm0, ymm0, ymm1
|
|
114
|
+
vpermq ymm1, ymm0, 0x02 // high + low lane.
|
|
115
|
+
vpaddd ymm0, ymm0, ymm1
|
|
116
|
+
vmovd eax, xmm0
|
|
117
|
+
vzeroupper
|
|
118
|
+
ret
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
#endif // HAS_SUMSQUAREERROR_AVX2
|
|
122
|
+
|
|
123
|
+
uvec32 kHash16x33 = {0x92d9e201, 0, 0, 0}; // 33 ^ 16
|
|
124
|
+
uvec32 kHashMul0 = {
|
|
125
|
+
0x0c3525e1, // 33 ^ 15
|
|
126
|
+
0xa3476dc1, // 33 ^ 14
|
|
127
|
+
0x3b4039a1, // 33 ^ 13
|
|
128
|
+
0x4f5f0981, // 33 ^ 12
|
|
129
|
+
};
|
|
130
|
+
uvec32 kHashMul1 = {
|
|
131
|
+
0x30f35d61, // 33 ^ 11
|
|
132
|
+
0x855cb541, // 33 ^ 10
|
|
133
|
+
0x040a9121, // 33 ^ 9
|
|
134
|
+
0x747c7101, // 33 ^ 8
|
|
135
|
+
};
|
|
136
|
+
uvec32 kHashMul2 = {
|
|
137
|
+
0xec41d4e1, // 33 ^ 7
|
|
138
|
+
0x4cfa3cc1, // 33 ^ 6
|
|
139
|
+
0x025528a1, // 33 ^ 5
|
|
140
|
+
0x00121881, // 33 ^ 4
|
|
141
|
+
};
|
|
142
|
+
uvec32 kHashMul3 = {
|
|
143
|
+
0x00008c61, // 33 ^ 3
|
|
144
|
+
0x00000441, // 33 ^ 2
|
|
145
|
+
0x00000021, // 33 ^ 1
|
|
146
|
+
0x00000001, // 33 ^ 0
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
__declspec(naked) uint32_t
|
|
150
|
+
HashDjb2_SSE41(const uint8_t* src, int count, uint32_t seed) {
|
|
151
|
+
__asm {
|
|
152
|
+
mov eax, [esp + 4] // src
|
|
153
|
+
mov ecx, [esp + 8] // count
|
|
154
|
+
movd xmm0, [esp + 12] // seed
|
|
155
|
+
|
|
156
|
+
pxor xmm7, xmm7 // constant 0 for unpck
|
|
157
|
+
movdqa xmm6, xmmword ptr kHash16x33
|
|
158
|
+
|
|
159
|
+
wloop:
|
|
160
|
+
movdqu xmm1, [eax] // src[0-15]
|
|
161
|
+
lea eax, [eax + 16]
|
|
162
|
+
pmulld xmm0, xmm6 // hash *= 33 ^ 16
|
|
163
|
+
movdqa xmm5, xmmword ptr kHashMul0
|
|
164
|
+
movdqa xmm2, xmm1
|
|
165
|
+
punpcklbw xmm2, xmm7 // src[0-7]
|
|
166
|
+
movdqa xmm3, xmm2
|
|
167
|
+
punpcklwd xmm3, xmm7 // src[0-3]
|
|
168
|
+
pmulld xmm3, xmm5
|
|
169
|
+
movdqa xmm5, xmmword ptr kHashMul1
|
|
170
|
+
movdqa xmm4, xmm2
|
|
171
|
+
punpckhwd xmm4, xmm7 // src[4-7]
|
|
172
|
+
pmulld xmm4, xmm5
|
|
173
|
+
movdqa xmm5, xmmword ptr kHashMul2
|
|
174
|
+
punpckhbw xmm1, xmm7 // src[8-15]
|
|
175
|
+
movdqa xmm2, xmm1
|
|
176
|
+
punpcklwd xmm2, xmm7 // src[8-11]
|
|
177
|
+
pmulld xmm2, xmm5
|
|
178
|
+
movdqa xmm5, xmmword ptr kHashMul3
|
|
179
|
+
punpckhwd xmm1, xmm7 // src[12-15]
|
|
180
|
+
pmulld xmm1, xmm5
|
|
181
|
+
paddd xmm3, xmm4 // add 16 results
|
|
182
|
+
paddd xmm1, xmm2
|
|
183
|
+
paddd xmm1, xmm3
|
|
184
|
+
|
|
185
|
+
pshufd xmm2, xmm1, 0x0e // upper 2 dwords
|
|
186
|
+
paddd xmm1, xmm2
|
|
187
|
+
pshufd xmm2, xmm1, 0x01
|
|
188
|
+
paddd xmm1, xmm2
|
|
189
|
+
paddd xmm0, xmm1
|
|
190
|
+
sub ecx, 16
|
|
191
|
+
jg wloop
|
|
192
|
+
|
|
193
|
+
movd eax, xmm0 // return hash
|
|
194
|
+
ret
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Visual C 2012 required for AVX2.
|
|
199
|
+
#ifdef HAS_HASHDJB2_AVX2
|
|
200
|
+
__declspec(naked) uint32_t
|
|
201
|
+
HashDjb2_AVX2(const uint8_t* src, int count, uint32_t seed) {
|
|
202
|
+
__asm {
|
|
203
|
+
mov eax, [esp + 4] // src
|
|
204
|
+
mov ecx, [esp + 8] // count
|
|
205
|
+
vmovd xmm0, [esp + 12] // seed
|
|
206
|
+
|
|
207
|
+
wloop:
|
|
208
|
+
vpmovzxbd xmm3, [eax] // src[0-3]
|
|
209
|
+
vpmulld xmm0, xmm0, xmmword ptr kHash16x33 // hash *= 33 ^ 16
|
|
210
|
+
vpmovzxbd xmm4, [eax + 4] // src[4-7]
|
|
211
|
+
vpmulld xmm3, xmm3, xmmword ptr kHashMul0
|
|
212
|
+
vpmovzxbd xmm2, [eax + 8] // src[8-11]
|
|
213
|
+
vpmulld xmm4, xmm4, xmmword ptr kHashMul1
|
|
214
|
+
vpmovzxbd xmm1, [eax + 12] // src[12-15]
|
|
215
|
+
vpmulld xmm2, xmm2, xmmword ptr kHashMul2
|
|
216
|
+
lea eax, [eax + 16]
|
|
217
|
+
vpmulld xmm1, xmm1, xmmword ptr kHashMul3
|
|
218
|
+
vpaddd xmm3, xmm3, xmm4 // add 16 results
|
|
219
|
+
vpaddd xmm1, xmm1, xmm2
|
|
220
|
+
vpaddd xmm1, xmm1, xmm3
|
|
221
|
+
vpshufd xmm2, xmm1, 0x0e // upper 2 dwords
|
|
222
|
+
vpaddd xmm1, xmm1,xmm2
|
|
223
|
+
vpshufd xmm2, xmm1, 0x01
|
|
224
|
+
vpaddd xmm1, xmm1, xmm2
|
|
225
|
+
vpaddd xmm0, xmm0, xmm1
|
|
226
|
+
sub ecx, 16
|
|
227
|
+
jg wloop
|
|
228
|
+
|
|
229
|
+
vmovd eax, xmm0 // return hash
|
|
230
|
+
vzeroupper
|
|
231
|
+
ret
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
#endif // HAS_HASHDJB2_AVX2
|
|
235
|
+
|
|
236
|
+
#endif // !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86)
|
|
237
|
+
|
|
238
|
+
#ifdef __cplusplus
|
|
239
|
+
} // extern "C"
|
|
240
|
+
} // namespace libyuv
|
|
241
|
+
#endif
|