node-native-win-utils 1.1.1 → 1.3.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.
- package/README.md +144 -27
- package/binding.gyp +18 -5
- package/dist/index.d.ts +146 -4
- package/dist/index.js +107 -3
- package/include/opencv2/core/affine.hpp +678 -0
- package/include/opencv2/core/async.hpp +105 -0
- package/include/opencv2/core/base.hpp +664 -0
- package/include/opencv2/core/bindings_utils.hpp +325 -0
- package/include/opencv2/core/bufferpool.hpp +40 -0
- package/include/opencv2/core/check.hpp +170 -0
- package/include/opencv2/core/core.hpp +48 -0
- package/include/opencv2/core/core_c.h +3128 -0
- package/include/opencv2/core/cuda/block.hpp +211 -0
- package/include/opencv2/core/cuda/border_interpolate.hpp +722 -0
- package/include/opencv2/core/cuda/color.hpp +309 -0
- package/include/opencv2/core/cuda/common.hpp +131 -0
- package/include/opencv2/core/cuda/datamov_utils.hpp +113 -0
- package/include/opencv2/core/cuda/detail/color_detail.hpp +2018 -0
- package/include/opencv2/core/cuda/detail/reduce.hpp +365 -0
- package/include/opencv2/core/cuda/detail/reduce_key_val.hpp +502 -0
- package/include/opencv2/core/cuda/detail/transform_detail.hpp +392 -0
- package/include/opencv2/core/cuda/detail/type_traits_detail.hpp +191 -0
- package/include/opencv2/core/cuda/detail/vec_distance_detail.hpp +121 -0
- package/include/opencv2/core/cuda/dynamic_smem.hpp +88 -0
- package/include/opencv2/core/cuda/emulation.hpp +269 -0
- package/include/opencv2/core/cuda/filters.hpp +293 -0
- package/include/opencv2/core/cuda/funcattrib.hpp +79 -0
- package/include/opencv2/core/cuda/functional.hpp +805 -0
- package/include/opencv2/core/cuda/limits.hpp +128 -0
- package/include/opencv2/core/cuda/reduce.hpp +209 -0
- package/include/opencv2/core/cuda/saturate_cast.hpp +292 -0
- package/include/opencv2/core/cuda/scan.hpp +258 -0
- package/include/opencv2/core/cuda/simd_functions.hpp +869 -0
- package/include/opencv2/core/cuda/transform.hpp +75 -0
- package/include/opencv2/core/cuda/type_traits.hpp +90 -0
- package/include/opencv2/core/cuda/utility.hpp +230 -0
- package/include/opencv2/core/cuda/vec_distance.hpp +232 -0
- package/include/opencv2/core/cuda/vec_math.hpp +923 -0
- package/include/opencv2/core/cuda/vec_traits.hpp +288 -0
- package/include/opencv2/core/cuda/warp.hpp +139 -0
- package/include/opencv2/core/cuda/warp_reduce.hpp +76 -0
- package/include/opencv2/core/cuda/warp_shuffle.hpp +162 -0
- package/include/opencv2/core/cuda.hpp +1279 -0
- package/include/opencv2/core/cuda.inl.hpp +763 -0
- package/include/opencv2/core/cuda_stream_accessor.hpp +86 -0
- package/include/opencv2/core/cuda_types.hpp +144 -0
- package/include/opencv2/core/cv_cpu_dispatch.h +381 -0
- package/include/opencv2/core/cv_cpu_helper.h +550 -0
- package/include/opencv2/core/cvdef.h +973 -0
- package/include/opencv2/core/cvstd.hpp +190 -0
- package/include/opencv2/core/cvstd.inl.hpp +197 -0
- package/include/opencv2/core/cvstd_wrapper.hpp +154 -0
- package/include/opencv2/core/detail/async_promise.hpp +71 -0
- package/include/opencv2/core/detail/dispatch_helper.impl.hpp +49 -0
- package/include/opencv2/core/detail/exception_ptr.hpp +27 -0
- package/include/opencv2/core/directx.hpp +184 -0
- package/include/opencv2/core/dualquaternion.hpp +979 -0
- package/include/opencv2/core/dualquaternion.inl.hpp +487 -0
- package/include/opencv2/core/eigen.hpp +402 -0
- package/include/opencv2/core/fast_math.hpp +433 -0
- package/include/opencv2/core/hal/hal.hpp +256 -0
- package/include/opencv2/core/hal/interface.h +190 -0
- package/include/opencv2/core/hal/intrin.hpp +939 -0
- package/include/opencv2/core/hal/intrin_avx.hpp +3177 -0
- package/include/opencv2/core/hal/intrin_avx512.hpp +3090 -0
- package/include/opencv2/core/hal/intrin_cpp.hpp +3321 -0
- package/include/opencv2/core/hal/intrin_forward.hpp +191 -0
- package/include/opencv2/core/hal/intrin_lasx.hpp +3236 -0
- package/include/opencv2/core/hal/intrin_msa.hpp +1887 -0
- package/include/opencv2/core/hal/intrin_neon.hpp +2610 -0
- package/include/opencv2/core/hal/intrin_rvv.hpp +3320 -0
- package/include/opencv2/core/hal/intrin_rvv071.hpp +2545 -0
- package/include/opencv2/core/hal/intrin_rvv_scalable.hpp +2080 -0
- package/include/opencv2/core/hal/intrin_sse.hpp +3467 -0
- package/include/opencv2/core/hal/intrin_sse_em.hpp +180 -0
- package/include/opencv2/core/hal/intrin_vsx.hpp +1608 -0
- package/include/opencv2/core/hal/intrin_wasm.hpp +2782 -0
- package/include/opencv2/core/hal/msa_macros.h +1558 -0
- package/include/opencv2/core/hal/simd_utils.impl.hpp +186 -0
- package/include/opencv2/core/llapi/llapi.h +102 -0
- package/include/opencv2/core/mat.hpp +3775 -0
- package/include/opencv2/core/mat.inl.hpp +3422 -0
- package/include/opencv2/core/matx.hpp +1536 -0
- package/include/opencv2/core/neon_utils.hpp +128 -0
- package/include/opencv2/core/ocl.hpp +917 -0
- package/include/opencv2/core/ocl_genbase.hpp +69 -0
- package/include/opencv2/core/opencl/ocl_defs.hpp +82 -0
- package/include/opencv2/core/opencl/opencl_info.hpp +212 -0
- package/include/opencv2/core/opencl/opencl_svm.hpp +81 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp +602 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp +146 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp +371 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp +272 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp +62 -0
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp +42 -0
- package/include/opencv2/core/opencl/runtime/opencl_clblas.hpp +53 -0
- package/include/opencv2/core/opencl/runtime/opencl_clfft.hpp +53 -0
- package/include/opencv2/core/opencl/runtime/opencl_core.hpp +84 -0
- package/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp +47 -0
- package/include/opencv2/core/opencl/runtime/opencl_gl.hpp +53 -0
- package/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp +47 -0
- package/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp +48 -0
- package/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp +42 -0
- package/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp +166 -0
- package/include/opencv2/core/opengl.hpp +733 -0
- package/include/opencv2/core/openvx/ovx_defs.hpp +48 -0
- package/include/opencv2/core/operations.hpp +610 -0
- package/include/opencv2/core/optim.hpp +302 -0
- package/include/opencv2/core/ovx.hpp +28 -0
- package/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp +72 -0
- package/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp +153 -0
- package/include/opencv2/core/parallel/parallel_backend.hpp +90 -0
- package/include/opencv2/core/persistence.hpp +1350 -0
- package/include/opencv2/core/private/cv_cpu_include_simd_declarations.hpp +30 -0
- package/include/opencv2/core/private.cuda.hpp +169 -0
- package/include/opencv2/core/private.hpp +896 -0
- package/include/opencv2/core/quaternion.hpp +1696 -0
- package/include/opencv2/core/quaternion.inl.hpp +1063 -0
- package/include/opencv2/core/saturate.hpp +180 -0
- package/include/opencv2/core/simd_intrinsics.hpp +87 -0
- package/include/opencv2/core/softfloat.hpp +514 -0
- package/include/opencv2/core/sse_utils.hpp +652 -0
- package/include/opencv2/core/traits.hpp +417 -0
- package/include/opencv2/core/types.hpp +2457 -0
- package/include/opencv2/core/types_c.h +2126 -0
- package/include/opencv2/core/utility.hpp +1229 -0
- package/include/opencv2/core/utils/allocator_stats.hpp +29 -0
- package/include/opencv2/core/utils/allocator_stats.impl.hpp +158 -0
- package/include/opencv2/core/utils/buffer_area.private.hpp +136 -0
- package/include/opencv2/core/utils/configuration.private.hpp +22 -0
- package/include/opencv2/core/utils/filesystem.hpp +82 -0
- package/include/opencv2/core/utils/filesystem.private.hpp +66 -0
- package/include/opencv2/core/utils/fp_control.private.hpp +29 -0
- package/include/opencv2/core/utils/fp_control_utils.hpp +69 -0
- package/include/opencv2/core/utils/instrumentation.hpp +125 -0
- package/include/opencv2/core/utils/lock.private.hpp +119 -0
- package/include/opencv2/core/utils/logger.defines.hpp +42 -0
- package/include/opencv2/core/utils/logger.hpp +218 -0
- package/include/opencv2/core/utils/logtag.hpp +28 -0
- package/include/opencv2/core/utils/plugin_loader.private.hpp +165 -0
- package/include/opencv2/core/utils/tls.hpp +235 -0
- package/include/opencv2/core/utils/trace.hpp +252 -0
- package/include/opencv2/core/utils/trace.private.hpp +421 -0
- package/include/opencv2/core/va_intel.hpp +75 -0
- package/include/opencv2/core/version.hpp +26 -0
- package/include/opencv2/core/vsx_utils.hpp +1047 -0
- package/include/opencv2/core.hpp +3365 -0
- package/include/opencv2/imgcodecs/imgcodecs.hpp +48 -0
- package/include/opencv2/imgcodecs/imgcodecs_c.h +1 -0
- package/include/opencv2/imgcodecs/ios.h +59 -0
- package/include/opencv2/imgcodecs/legacy/constants_c.h +54 -0
- package/include/opencv2/imgcodecs/macosx.h +20 -0
- package/include/opencv2/imgcodecs.hpp +407 -0
- package/include/opencv2/imgproc/bindings.hpp +34 -0
- package/include/opencv2/imgproc/detail/gcgraph.hpp +395 -0
- package/include/opencv2/imgproc/hal/hal.hpp +246 -0
- package/include/opencv2/imgproc/hal/interface.h +46 -0
- package/include/opencv2/imgproc/imgproc.hpp +48 -0
- package/include/opencv2/imgproc/imgproc_c.h +1177 -0
- package/include/opencv2/imgproc/segmentation.hpp +141 -0
- package/include/opencv2/imgproc/types_c.h +659 -0
- package/include/opencv2/imgproc.hpp +5035 -0
- package/include/opencv2/opencv_modules.hpp +17 -0
- package/libs/libjpeg-turbo.lib +0 -0
- package/libs/libpng.lib +0 -0
- package/libs/opencv_core470.lib +0 -0
- package/libs/opencv_imgcodecs470.lib +0 -0
- package/libs/opencv_imgproc470.lib +0 -0
- package/libs/zlib.lib +0 -0
- package/package.json +8 -2
- package/prebuilds/win32-x64/node.napi.node +0 -0
- package/src/cpp/capturewindow.cpp +36 -46
- package/src/cpp/main.cpp +10 -2
- package/src/cpp/opencv.cpp +425 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_CORE_ALLOCATOR_STATS_HPP
|
|
6
|
+
#define OPENCV_CORE_ALLOCATOR_STATS_HPP
|
|
7
|
+
|
|
8
|
+
#include "../cvdef.h"
|
|
9
|
+
|
|
10
|
+
namespace cv { namespace utils {
|
|
11
|
+
|
|
12
|
+
class AllocatorStatisticsInterface
|
|
13
|
+
{
|
|
14
|
+
protected:
|
|
15
|
+
AllocatorStatisticsInterface() {}
|
|
16
|
+
virtual ~AllocatorStatisticsInterface() {}
|
|
17
|
+
public:
|
|
18
|
+
virtual uint64_t getCurrentUsage() const = 0;
|
|
19
|
+
virtual uint64_t getTotalUsage() const = 0;
|
|
20
|
+
virtual uint64_t getNumberOfAllocations() const = 0;
|
|
21
|
+
virtual uint64_t getPeakUsage() const = 0;
|
|
22
|
+
|
|
23
|
+
/** set peak usage = current usage */
|
|
24
|
+
virtual void resetPeakUsage() = 0;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
}} // namespace
|
|
28
|
+
|
|
29
|
+
#endif // OPENCV_CORE_ALLOCATOR_STATS_HPP
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_CORE_ALLOCATOR_STATS_IMPL_HPP
|
|
6
|
+
#define OPENCV_CORE_ALLOCATOR_STATS_IMPL_HPP
|
|
7
|
+
|
|
8
|
+
#include "./allocator_stats.hpp"
|
|
9
|
+
|
|
10
|
+
//#define OPENCV_DISABLE_ALLOCATOR_STATS
|
|
11
|
+
|
|
12
|
+
#ifdef CV_CXX11
|
|
13
|
+
|
|
14
|
+
#include <atomic>
|
|
15
|
+
|
|
16
|
+
#ifndef OPENCV_ALLOCATOR_STATS_COUNTER_TYPE
|
|
17
|
+
#if defined(__GNUC__) && (\
|
|
18
|
+
(defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4) || \
|
|
19
|
+
(defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)) \
|
|
20
|
+
)
|
|
21
|
+
#define OPENCV_ALLOCATOR_STATS_COUNTER_TYPE int
|
|
22
|
+
#endif
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#ifndef OPENCV_ALLOCATOR_STATS_COUNTER_TYPE
|
|
26
|
+
#define OPENCV_ALLOCATOR_STATS_COUNTER_TYPE long long
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
#else // CV_CXX11
|
|
30
|
+
|
|
31
|
+
#ifndef OPENCV_ALLOCATOR_STATS_COUNTER_TYPE
|
|
32
|
+
#define OPENCV_ALLOCATOR_STATS_COUNTER_TYPE int // CV_XADD supports int only
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#endif // CV_CXX11
|
|
36
|
+
|
|
37
|
+
namespace cv { namespace utils {
|
|
38
|
+
|
|
39
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
40
|
+
namespace {
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
class AllocatorStatistics : public AllocatorStatisticsInterface
|
|
44
|
+
{
|
|
45
|
+
#ifdef OPENCV_DISABLE_ALLOCATOR_STATS
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
AllocatorStatistics() {}
|
|
49
|
+
~AllocatorStatistics() CV_OVERRIDE {}
|
|
50
|
+
|
|
51
|
+
uint64_t getCurrentUsage() const CV_OVERRIDE { return 0; }
|
|
52
|
+
uint64_t getTotalUsage() const CV_OVERRIDE { return 0; }
|
|
53
|
+
uint64_t getNumberOfAllocations() const CV_OVERRIDE { return 0; }
|
|
54
|
+
uint64_t getPeakUsage() const CV_OVERRIDE { return 0; }
|
|
55
|
+
|
|
56
|
+
/** set peak usage = current usage */
|
|
57
|
+
void resetPeakUsage() CV_OVERRIDE {};
|
|
58
|
+
|
|
59
|
+
void onAllocate(size_t /*sz*/) {}
|
|
60
|
+
void onFree(size_t /*sz*/) {}
|
|
61
|
+
|
|
62
|
+
#elif defined(CV_CXX11)
|
|
63
|
+
|
|
64
|
+
protected:
|
|
65
|
+
typedef OPENCV_ALLOCATOR_STATS_COUNTER_TYPE counter_t;
|
|
66
|
+
std::atomic<counter_t> curr, total, total_allocs, peak;
|
|
67
|
+
public:
|
|
68
|
+
AllocatorStatistics() {}
|
|
69
|
+
~AllocatorStatistics() CV_OVERRIDE {}
|
|
70
|
+
|
|
71
|
+
uint64_t getCurrentUsage() const CV_OVERRIDE { return (uint64_t)curr.load(); }
|
|
72
|
+
uint64_t getTotalUsage() const CV_OVERRIDE { return (uint64_t)total.load(); }
|
|
73
|
+
uint64_t getNumberOfAllocations() const CV_OVERRIDE { return (uint64_t)total_allocs.load(); }
|
|
74
|
+
uint64_t getPeakUsage() const CV_OVERRIDE { return (uint64_t)peak.load(); }
|
|
75
|
+
|
|
76
|
+
/** set peak usage = current usage */
|
|
77
|
+
void resetPeakUsage() CV_OVERRIDE { peak.store(curr.load()); }
|
|
78
|
+
|
|
79
|
+
// Controller interface
|
|
80
|
+
void onAllocate(size_t sz)
|
|
81
|
+
{
|
|
82
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
83
|
+
CV__ALLOCATOR_STATS_LOG(cv::format("allocate: %lld (curr=%lld)", (long long int)sz, (long long int)curr.load()));
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
counter_t new_curr = curr.fetch_add((counter_t)sz) + (counter_t)sz;
|
|
87
|
+
|
|
88
|
+
// peak = std::max((uint64_t)peak, new_curr);
|
|
89
|
+
auto prev_peak = peak.load();
|
|
90
|
+
while (prev_peak < new_curr)
|
|
91
|
+
{
|
|
92
|
+
if (peak.compare_exchange_weak(prev_peak, new_curr))
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
// end of peak = max(...)
|
|
96
|
+
|
|
97
|
+
total += (counter_t)sz;
|
|
98
|
+
total_allocs++;
|
|
99
|
+
}
|
|
100
|
+
void onFree(size_t sz)
|
|
101
|
+
{
|
|
102
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
103
|
+
CV__ALLOCATOR_STATS_LOG(cv::format("free: %lld (curr=%lld)", (long long int)sz, (long long int)curr.load()));
|
|
104
|
+
#endif
|
|
105
|
+
curr -= (counter_t)sz;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
#else // non C++11
|
|
109
|
+
|
|
110
|
+
protected:
|
|
111
|
+
typedef OPENCV_ALLOCATOR_STATS_COUNTER_TYPE counter_t;
|
|
112
|
+
volatile counter_t curr, total, total_allocs, peak; // overflow is possible, CV_XADD operates with 'int' only
|
|
113
|
+
public:
|
|
114
|
+
AllocatorStatistics()
|
|
115
|
+
: curr(0), total(0), total_allocs(0), peak(0)
|
|
116
|
+
{}
|
|
117
|
+
~AllocatorStatistics() CV_OVERRIDE {}
|
|
118
|
+
|
|
119
|
+
uint64_t getCurrentUsage() const CV_OVERRIDE { return (uint64_t)curr; }
|
|
120
|
+
uint64_t getTotalUsage() const CV_OVERRIDE { return (uint64_t)total; }
|
|
121
|
+
uint64_t getNumberOfAllocations() const CV_OVERRIDE { return (uint64_t)total_allocs; }
|
|
122
|
+
uint64_t getPeakUsage() const CV_OVERRIDE { return (uint64_t)peak; }
|
|
123
|
+
|
|
124
|
+
void resetPeakUsage() CV_OVERRIDE { peak = curr; }
|
|
125
|
+
|
|
126
|
+
// Controller interface
|
|
127
|
+
void onAllocate(size_t sz)
|
|
128
|
+
{
|
|
129
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
130
|
+
CV__ALLOCATOR_STATS_LOG(cv::format("allocate: %lld (curr=%lld)", (long long int)sz, (long long int)curr));
|
|
131
|
+
#endif
|
|
132
|
+
|
|
133
|
+
counter_t new_curr = (counter_t)CV_XADD(&curr, (counter_t)sz) + (counter_t)sz;
|
|
134
|
+
|
|
135
|
+
peak = std::max((counter_t)peak, new_curr); // non-thread safe
|
|
136
|
+
|
|
137
|
+
//CV_XADD(&total, (uint64_t)sz); // overflow with int, non-reliable...
|
|
138
|
+
total += sz;
|
|
139
|
+
|
|
140
|
+
CV_XADD(&total_allocs, (counter_t)1);
|
|
141
|
+
}
|
|
142
|
+
void onFree(size_t sz)
|
|
143
|
+
{
|
|
144
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
145
|
+
CV__ALLOCATOR_STATS_LOG(cv::format("free: %lld (curr=%lld)", (long long int)sz, (long long int)curr));
|
|
146
|
+
#endif
|
|
147
|
+
CV_XADD(&curr, (counter_t)-sz);
|
|
148
|
+
}
|
|
149
|
+
#endif
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
#ifdef CV__ALLOCATOR_STATS_LOG
|
|
153
|
+
} // namespace
|
|
154
|
+
#endif
|
|
155
|
+
|
|
156
|
+
}} // namespace
|
|
157
|
+
|
|
158
|
+
#endif // OPENCV_CORE_ALLOCATOR_STATS_IMPL_HPP
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
#ifndef OPENCV_UTILS_BUFFER_AREA_HPP
|
|
5
|
+
#define OPENCV_UTILS_BUFFER_AREA_HPP
|
|
6
|
+
|
|
7
|
+
#include <opencv2/core/base.hpp>
|
|
8
|
+
#include <opencv2/core/private.hpp>
|
|
9
|
+
#include <opencv2/core/utility.hpp>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace cv { namespace utils {
|
|
13
|
+
|
|
14
|
+
//! @addtogroup core_utils
|
|
15
|
+
//! @{
|
|
16
|
+
|
|
17
|
+
/** @brief Manages memory block shared by muliple buffers.
|
|
18
|
+
|
|
19
|
+
This class allows to allocate one large memory block and split it into several smaller
|
|
20
|
+
non-overlapping buffers. In safe mode each buffer allocation will be performed independently,
|
|
21
|
+
this mode allows dynamic memory access instrumentation using valgrind or memory sanitizer.
|
|
22
|
+
|
|
23
|
+
Safe mode can be explicitly switched ON in constructor. It will also be enabled when compiling with
|
|
24
|
+
memory sanitizer support or in runtime with the environment variable `OPENCV_BUFFER_AREA_ALWAYS_SAFE`.
|
|
25
|
+
|
|
26
|
+
Example of usage:
|
|
27
|
+
@code
|
|
28
|
+
int * buf1 = 0;
|
|
29
|
+
double * buf2 = 0;
|
|
30
|
+
cv::util::BufferArea area;
|
|
31
|
+
area.allocate(buf1, 200); // buf1 = new int[200];
|
|
32
|
+
area.allocate(buf2, 1000, 64); // buf2 = new double[1000]; - aligned by 64
|
|
33
|
+
area.commit();
|
|
34
|
+
@endcode
|
|
35
|
+
|
|
36
|
+
@note This class is considered private and should be used only in OpenCV itself. API can be changed.
|
|
37
|
+
*/
|
|
38
|
+
class CV_EXPORTS BufferArea
|
|
39
|
+
{
|
|
40
|
+
public:
|
|
41
|
+
/** @brief Class constructor.
|
|
42
|
+
|
|
43
|
+
@param safe Enable _safe_ operation mode, each allocation will be performed independently.
|
|
44
|
+
*/
|
|
45
|
+
BufferArea(bool safe = false);
|
|
46
|
+
|
|
47
|
+
/** @brief Class destructor
|
|
48
|
+
|
|
49
|
+
All allocated memory well be freed. Each bound pointer will be reset to NULL.
|
|
50
|
+
*/
|
|
51
|
+
~BufferArea();
|
|
52
|
+
|
|
53
|
+
/** @brief Bind a pointer to local area.
|
|
54
|
+
|
|
55
|
+
BufferArea will store reference to the pointer and allocation parameters effectively owning the
|
|
56
|
+
pointer and allocated memory. This operation has the same parameters and does the same job
|
|
57
|
+
as the operator `new`, except allocation can be performed later during the BufferArea::commit call.
|
|
58
|
+
|
|
59
|
+
@param ptr Reference to a pointer of type T. Must be NULL
|
|
60
|
+
@param count Count of objects to be allocated, it has the same meaning as in the operator `new`.
|
|
61
|
+
@param alignment Alignment of allocated memory. same meaning as in the operator `new` (C++17).
|
|
62
|
+
Must be divisible by sizeof(T). Must be power of two.
|
|
63
|
+
|
|
64
|
+
@note In safe mode allocation will be performed immediatly.
|
|
65
|
+
*/
|
|
66
|
+
template <typename T>
|
|
67
|
+
void allocate(T*&ptr, size_t count, ushort alignment = sizeof(T))
|
|
68
|
+
{
|
|
69
|
+
CV_Assert(ptr == NULL);
|
|
70
|
+
CV_Assert(count > 0);
|
|
71
|
+
CV_Assert(alignment > 0);
|
|
72
|
+
CV_Assert(alignment % sizeof(T) == 0);
|
|
73
|
+
CV_Assert((alignment & (alignment - 1)) == 0);
|
|
74
|
+
allocate_((void**)(&ptr), static_cast<ushort>(sizeof(T)), count, alignment);
|
|
75
|
+
#ifndef OPENCV_ENABLE_MEMORY_SANITIZER
|
|
76
|
+
if (safe)
|
|
77
|
+
#endif
|
|
78
|
+
CV_Assert(ptr != NULL);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** @brief Fill one of buffers with zeroes
|
|
82
|
+
|
|
83
|
+
@param ptr pointer to memory block previously added using BufferArea::allocate
|
|
84
|
+
|
|
85
|
+
BufferArea::commit must be called before using this method
|
|
86
|
+
*/
|
|
87
|
+
template <typename T>
|
|
88
|
+
void zeroFill(T*&ptr)
|
|
89
|
+
{
|
|
90
|
+
CV_Assert(ptr);
|
|
91
|
+
zeroFill_((void**)&ptr);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** @brief Fill all buffers with zeroes
|
|
95
|
+
|
|
96
|
+
BufferArea::commit must be called before using this method
|
|
97
|
+
*/
|
|
98
|
+
void zeroFill();
|
|
99
|
+
|
|
100
|
+
/** @brief Allocate memory and initialize all bound pointers
|
|
101
|
+
|
|
102
|
+
Each pointer bound to the area with the BufferArea::allocate will be initialized and will be set
|
|
103
|
+
to point to a memory block with requested size and alignment.
|
|
104
|
+
|
|
105
|
+
@note Does nothing in safe mode as all allocations will be performed by BufferArea::allocate
|
|
106
|
+
*/
|
|
107
|
+
void commit();
|
|
108
|
+
|
|
109
|
+
/** @brief Release all memory and unbind all pointers
|
|
110
|
+
|
|
111
|
+
All memory will be freed and all pointers will be reset to NULL and untied from the area allowing
|
|
112
|
+
to call `allocate` and `commit` again.
|
|
113
|
+
*/
|
|
114
|
+
void release();
|
|
115
|
+
|
|
116
|
+
private:
|
|
117
|
+
BufferArea(const BufferArea &); // = delete
|
|
118
|
+
BufferArea &operator=(const BufferArea &); // = delete
|
|
119
|
+
void allocate_(void **ptr, ushort type_size, size_t count, ushort alignment);
|
|
120
|
+
void zeroFill_(void **ptr);
|
|
121
|
+
|
|
122
|
+
private:
|
|
123
|
+
class Block;
|
|
124
|
+
std::vector<Block> blocks;
|
|
125
|
+
#ifndef OPENCV_ENABLE_MEMORY_SANITIZER
|
|
126
|
+
void * oneBuf;
|
|
127
|
+
size_t totalSize;
|
|
128
|
+
const bool safe;
|
|
129
|
+
#endif
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
//! @}
|
|
133
|
+
|
|
134
|
+
}} // cv::utils::
|
|
135
|
+
|
|
136
|
+
#endif
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_CONFIGURATION_PRIVATE_HPP
|
|
6
|
+
#define OPENCV_CONFIGURATION_PRIVATE_HPP
|
|
7
|
+
|
|
8
|
+
#include "opencv2/core/cvstd.hpp"
|
|
9
|
+
#include <vector>
|
|
10
|
+
#include <string>
|
|
11
|
+
|
|
12
|
+
namespace cv { namespace utils {
|
|
13
|
+
|
|
14
|
+
typedef std::vector<std::string> Paths;
|
|
15
|
+
CV_EXPORTS bool getConfigurationParameterBool(const char* name, bool defaultValue);
|
|
16
|
+
CV_EXPORTS size_t getConfigurationParameterSizeT(const char* name, size_t defaultValue);
|
|
17
|
+
CV_EXPORTS cv::String getConfigurationParameterString(const char* name, const char* defaultValue);
|
|
18
|
+
CV_EXPORTS Paths getConfigurationParameterPaths(const char* name, const Paths &defaultValue = Paths());
|
|
19
|
+
|
|
20
|
+
}} // namespace
|
|
21
|
+
|
|
22
|
+
#endif // OPENCV_CONFIGURATION_PRIVATE_HPP
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_UTILS_FILESYSTEM_HPP
|
|
6
|
+
#define OPENCV_UTILS_FILESYSTEM_HPP
|
|
7
|
+
|
|
8
|
+
namespace cv { namespace utils { namespace fs {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
CV_EXPORTS bool exists(const cv::String& path);
|
|
12
|
+
CV_EXPORTS bool isDirectory(const cv::String& path);
|
|
13
|
+
|
|
14
|
+
CV_EXPORTS void remove_all(const cv::String& path);
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
CV_EXPORTS cv::String getcwd();
|
|
18
|
+
|
|
19
|
+
/** @brief Converts path p to a canonical absolute path
|
|
20
|
+
* Symlinks are processed if there is support for them on running platform.
|
|
21
|
+
*
|
|
22
|
+
* @param path input path. Target file/directory should exist.
|
|
23
|
+
*/
|
|
24
|
+
CV_EXPORTS cv::String canonical(const cv::String& path);
|
|
25
|
+
|
|
26
|
+
/** Join path components */
|
|
27
|
+
CV_EXPORTS cv::String join(const cv::String& base, const cv::String& path);
|
|
28
|
+
|
|
29
|
+
/** Get parent directory */
|
|
30
|
+
CV_EXPORTS cv::String getParent(const cv::String &path);
|
|
31
|
+
CV_EXPORTS std::wstring getParent(const std::wstring& path);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Generate a list of all files that match the globbing pattern.
|
|
35
|
+
*
|
|
36
|
+
* Result entries are prefixed by base directory path.
|
|
37
|
+
*
|
|
38
|
+
* @param directory base directory
|
|
39
|
+
* @param pattern filter pattern (based on '*'/'?' symbols). Use empty string to disable filtering and return all results
|
|
40
|
+
* @param[out] result result of globing.
|
|
41
|
+
* @param recursive scan nested directories too
|
|
42
|
+
* @param includeDirectories include directories into results list
|
|
43
|
+
*/
|
|
44
|
+
CV_EXPORTS void glob(const cv::String& directory, const cv::String& pattern,
|
|
45
|
+
CV_OUT std::vector<cv::String>& result,
|
|
46
|
+
bool recursive = false, bool includeDirectories = false);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Generate a list of all files that match the globbing pattern.
|
|
50
|
+
*
|
|
51
|
+
* @param directory base directory
|
|
52
|
+
* @param pattern filter pattern (based on '*'/'?' symbols). Use empty string to disable filtering and return all results
|
|
53
|
+
* @param[out] result globbing result with relative paths from base directory
|
|
54
|
+
* @param recursive scan nested directories too
|
|
55
|
+
* @param includeDirectories include directories into results list
|
|
56
|
+
*/
|
|
57
|
+
CV_EXPORTS void glob_relative(const cv::String& directory, const cv::String& pattern,
|
|
58
|
+
CV_OUT std::vector<cv::String>& result,
|
|
59
|
+
bool recursive = false, bool includeDirectories = false);
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
CV_EXPORTS bool createDirectory(const cv::String& path);
|
|
63
|
+
CV_EXPORTS bool createDirectories(const cv::String& path);
|
|
64
|
+
|
|
65
|
+
#if defined(__OPENCV_BUILD) || defined(BUILD_PLUGIN)
|
|
66
|
+
// TODO
|
|
67
|
+
//CV_EXPORTS cv::String getTempDirectory();
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @brief Returns directory to store OpenCV cache files
|
|
71
|
+
* Create sub-directory in common OpenCV cache directory if it doesn't exist.
|
|
72
|
+
* @param sub_directory_name name of sub-directory. NULL or "" value asks to return root cache directory.
|
|
73
|
+
* @param configuration_name optional name of configuration parameter name which overrides default behavior.
|
|
74
|
+
* @return Path to cache directory. Returns empty string if cache directories support is not available. Returns "disabled" if cache disabled by user.
|
|
75
|
+
*/
|
|
76
|
+
CV_EXPORTS cv::String getCacheDirectory(const char* sub_directory_name, const char* configuration_name = NULL);
|
|
77
|
+
|
|
78
|
+
#endif
|
|
79
|
+
|
|
80
|
+
}}} // namespace
|
|
81
|
+
|
|
82
|
+
#endif // OPENCV_UTILS_FILESYSTEM_HPP
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_UTILS_FILESYSTEM_PRIVATE_HPP
|
|
6
|
+
#define OPENCV_UTILS_FILESYSTEM_PRIVATE_HPP
|
|
7
|
+
|
|
8
|
+
// TODO Move to CMake?
|
|
9
|
+
#ifndef OPENCV_HAVE_FILESYSTEM_SUPPORT
|
|
10
|
+
# if defined(__EMSCRIPTEN__) || defined(__native_client__)
|
|
11
|
+
/* no support */
|
|
12
|
+
# elif defined WINRT || defined _WIN32_WCE
|
|
13
|
+
/* not supported */
|
|
14
|
+
# elif defined __ANDROID__ || defined __linux__ || defined _WIN32 || \
|
|
15
|
+
defined __FreeBSD__ || defined __bsdi__ || defined __HAIKU__
|
|
16
|
+
# define OPENCV_HAVE_FILESYSTEM_SUPPORT 1
|
|
17
|
+
# elif defined(__APPLE__)
|
|
18
|
+
# include <TargetConditionals.h>
|
|
19
|
+
# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX) || (defined(TARGET_OS_IOS) && TARGET_OS_IOS)
|
|
20
|
+
# define OPENCV_HAVE_FILESYSTEM_SUPPORT 1 // OSX, iOS only
|
|
21
|
+
# endif
|
|
22
|
+
# else
|
|
23
|
+
/* unknown */
|
|
24
|
+
# endif
|
|
25
|
+
# ifndef OPENCV_HAVE_FILESYSTEM_SUPPORT
|
|
26
|
+
# define OPENCV_HAVE_FILESYSTEM_SUPPORT 0
|
|
27
|
+
# endif
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#if OPENCV_HAVE_FILESYSTEM_SUPPORT
|
|
31
|
+
namespace cv { namespace utils { namespace fs {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* File-based lock object.
|
|
35
|
+
*
|
|
36
|
+
* Provides interprocess synchronization mechanism.
|
|
37
|
+
* Platform dependent.
|
|
38
|
+
*
|
|
39
|
+
* Supports multiple readers / single writer access pattern (RW / readers-writer / shared-exclusive lock).
|
|
40
|
+
*
|
|
41
|
+
* File must exist.
|
|
42
|
+
* File can't be re-used (for example, I/O operations via std::fstream is not safe)
|
|
43
|
+
*/
|
|
44
|
+
class CV_EXPORTS FileLock {
|
|
45
|
+
public:
|
|
46
|
+
explicit FileLock(const char* fname);
|
|
47
|
+
~FileLock();
|
|
48
|
+
|
|
49
|
+
void lock(); //< acquire exclusive (writer) lock
|
|
50
|
+
void unlock(); //< release exclusive (writer) lock
|
|
51
|
+
|
|
52
|
+
void lock_shared(); //< acquire shareable (reader) lock
|
|
53
|
+
void unlock_shared(); //< release shareable (reader) lock
|
|
54
|
+
|
|
55
|
+
struct Impl;
|
|
56
|
+
protected:
|
|
57
|
+
Impl* pImpl;
|
|
58
|
+
|
|
59
|
+
private:
|
|
60
|
+
FileLock(const FileLock&); // disabled
|
|
61
|
+
FileLock& operator=(const FileLock&); // disabled
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
}}} // namespace
|
|
65
|
+
#endif
|
|
66
|
+
#endif // OPENCV_UTILS_FILESYSTEM_PRIVATE_HPP
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_CORE_FP_CONTROL_UTILS_PRIVATE_HPP
|
|
6
|
+
#define OPENCV_CORE_FP_CONTROL_UTILS_PRIVATE_HPP
|
|
7
|
+
|
|
8
|
+
#include "fp_control_utils.hpp"
|
|
9
|
+
|
|
10
|
+
#if OPENCV_SUPPORTS_FP_DENORMALS_HINT == 0
|
|
11
|
+
// disabled
|
|
12
|
+
#elif defined(OPENCV_IMPL_FP_HINTS)
|
|
13
|
+
// custom
|
|
14
|
+
#elif defined(OPENCV_IMPL_FP_HINTS_X86)
|
|
15
|
+
// custom
|
|
16
|
+
#elif defined(__SSE__) || defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1)
|
|
17
|
+
#include <xmmintrin.h>
|
|
18
|
+
#define OPENCV_IMPL_FP_HINTS_X86 1
|
|
19
|
+
#define OPENCV_IMPL_FP_HINTS 1
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#ifndef OPENCV_IMPL_FP_HINTS
|
|
23
|
+
#define OPENCV_IMPL_FP_HINTS 0
|
|
24
|
+
#endif
|
|
25
|
+
#ifndef OPENCV_IMPL_FP_HINTS_X86
|
|
26
|
+
#define OPENCV_IMPL_FP_HINTS_X86 0
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
#endif // OPENCV_CORE_FP_CONTROL_UTILS_PRIVATE_HPP
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
+
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_CORE_FP_CONTROL_UTILS_HPP
|
|
6
|
+
#define OPENCV_CORE_FP_CONTROL_UTILS_HPP
|
|
7
|
+
|
|
8
|
+
namespace cv {
|
|
9
|
+
|
|
10
|
+
namespace details {
|
|
11
|
+
|
|
12
|
+
struct FPDenormalsModeState
|
|
13
|
+
{
|
|
14
|
+
uint32_t reserved[16]; // 64-bytes
|
|
15
|
+
}; // FPDenormalsModeState
|
|
16
|
+
|
|
17
|
+
CV_EXPORTS void setFPDenormalsIgnoreHint(bool ignore, CV_OUT FPDenormalsModeState& state);
|
|
18
|
+
CV_EXPORTS int saveFPDenormalsState(CV_OUT FPDenormalsModeState& state);
|
|
19
|
+
CV_EXPORTS bool restoreFPDenormalsState(const FPDenormalsModeState& state);
|
|
20
|
+
|
|
21
|
+
class FPDenormalsIgnoreHintScope
|
|
22
|
+
{
|
|
23
|
+
public:
|
|
24
|
+
inline explicit FPDenormalsIgnoreHintScope(bool ignore = true)
|
|
25
|
+
{
|
|
26
|
+
details::setFPDenormalsIgnoreHint(ignore, saved_state);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
inline explicit FPDenormalsIgnoreHintScope(const FPDenormalsModeState& state)
|
|
30
|
+
{
|
|
31
|
+
details::saveFPDenormalsState(saved_state);
|
|
32
|
+
details::restoreFPDenormalsState(state);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
inline ~FPDenormalsIgnoreHintScope()
|
|
36
|
+
{
|
|
37
|
+
details::restoreFPDenormalsState(saved_state);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protected:
|
|
41
|
+
FPDenormalsModeState saved_state;
|
|
42
|
+
}; // FPDenormalsIgnoreHintScope
|
|
43
|
+
|
|
44
|
+
class FPDenormalsIgnoreHintScopeNOOP
|
|
45
|
+
{
|
|
46
|
+
public:
|
|
47
|
+
inline FPDenormalsIgnoreHintScopeNOOP(bool ignore = true) { CV_UNUSED(ignore); }
|
|
48
|
+
inline FPDenormalsIgnoreHintScopeNOOP(const FPDenormalsModeState& state) { CV_UNUSED(state); }
|
|
49
|
+
inline ~FPDenormalsIgnoreHintScopeNOOP() { }
|
|
50
|
+
}; // FPDenormalsIgnoreHintScopeNOOP
|
|
51
|
+
|
|
52
|
+
} // namespace details
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
// Should depend on target compilation architecture only
|
|
56
|
+
// Note: previously added archs should NOT be removed to preserve ABI compatibility
|
|
57
|
+
#if defined(OPENCV_SUPPORTS_FP_DENORMALS_HINT)
|
|
58
|
+
// preserve configuration overloading through ports
|
|
59
|
+
#elif defined(__i386__) || defined(__x86_64__) || defined(_M_X64) || defined(_X86_)
|
|
60
|
+
typedef details::FPDenormalsIgnoreHintScope FPDenormalsIgnoreHintScope;
|
|
61
|
+
#define OPENCV_SUPPORTS_FP_DENORMALS_HINT 1
|
|
62
|
+
#else
|
|
63
|
+
#define OPENCV_SUPPORTS_FP_DENORMALS_HINT 0
|
|
64
|
+
typedef details::FPDenormalsIgnoreHintScopeNOOP FPDenormalsIgnoreHintScope;
|
|
65
|
+
#endif
|
|
66
|
+
|
|
67
|
+
} // namespace cv
|
|
68
|
+
|
|
69
|
+
#endif // OPENCV_CORE_FP_CONTROL_UTILS_HPP
|