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.
Files changed (174) hide show
  1. package/README.md +144 -27
  2. package/binding.gyp +18 -5
  3. package/dist/index.d.ts +146 -4
  4. package/dist/index.js +107 -3
  5. package/include/opencv2/core/affine.hpp +678 -0
  6. package/include/opencv2/core/async.hpp +105 -0
  7. package/include/opencv2/core/base.hpp +664 -0
  8. package/include/opencv2/core/bindings_utils.hpp +325 -0
  9. package/include/opencv2/core/bufferpool.hpp +40 -0
  10. package/include/opencv2/core/check.hpp +170 -0
  11. package/include/opencv2/core/core.hpp +48 -0
  12. package/include/opencv2/core/core_c.h +3128 -0
  13. package/include/opencv2/core/cuda/block.hpp +211 -0
  14. package/include/opencv2/core/cuda/border_interpolate.hpp +722 -0
  15. package/include/opencv2/core/cuda/color.hpp +309 -0
  16. package/include/opencv2/core/cuda/common.hpp +131 -0
  17. package/include/opencv2/core/cuda/datamov_utils.hpp +113 -0
  18. package/include/opencv2/core/cuda/detail/color_detail.hpp +2018 -0
  19. package/include/opencv2/core/cuda/detail/reduce.hpp +365 -0
  20. package/include/opencv2/core/cuda/detail/reduce_key_val.hpp +502 -0
  21. package/include/opencv2/core/cuda/detail/transform_detail.hpp +392 -0
  22. package/include/opencv2/core/cuda/detail/type_traits_detail.hpp +191 -0
  23. package/include/opencv2/core/cuda/detail/vec_distance_detail.hpp +121 -0
  24. package/include/opencv2/core/cuda/dynamic_smem.hpp +88 -0
  25. package/include/opencv2/core/cuda/emulation.hpp +269 -0
  26. package/include/opencv2/core/cuda/filters.hpp +293 -0
  27. package/include/opencv2/core/cuda/funcattrib.hpp +79 -0
  28. package/include/opencv2/core/cuda/functional.hpp +805 -0
  29. package/include/opencv2/core/cuda/limits.hpp +128 -0
  30. package/include/opencv2/core/cuda/reduce.hpp +209 -0
  31. package/include/opencv2/core/cuda/saturate_cast.hpp +292 -0
  32. package/include/opencv2/core/cuda/scan.hpp +258 -0
  33. package/include/opencv2/core/cuda/simd_functions.hpp +869 -0
  34. package/include/opencv2/core/cuda/transform.hpp +75 -0
  35. package/include/opencv2/core/cuda/type_traits.hpp +90 -0
  36. package/include/opencv2/core/cuda/utility.hpp +230 -0
  37. package/include/opencv2/core/cuda/vec_distance.hpp +232 -0
  38. package/include/opencv2/core/cuda/vec_math.hpp +923 -0
  39. package/include/opencv2/core/cuda/vec_traits.hpp +288 -0
  40. package/include/opencv2/core/cuda/warp.hpp +139 -0
  41. package/include/opencv2/core/cuda/warp_reduce.hpp +76 -0
  42. package/include/opencv2/core/cuda/warp_shuffle.hpp +162 -0
  43. package/include/opencv2/core/cuda.hpp +1279 -0
  44. package/include/opencv2/core/cuda.inl.hpp +763 -0
  45. package/include/opencv2/core/cuda_stream_accessor.hpp +86 -0
  46. package/include/opencv2/core/cuda_types.hpp +144 -0
  47. package/include/opencv2/core/cv_cpu_dispatch.h +381 -0
  48. package/include/opencv2/core/cv_cpu_helper.h +550 -0
  49. package/include/opencv2/core/cvdef.h +973 -0
  50. package/include/opencv2/core/cvstd.hpp +190 -0
  51. package/include/opencv2/core/cvstd.inl.hpp +197 -0
  52. package/include/opencv2/core/cvstd_wrapper.hpp +154 -0
  53. package/include/opencv2/core/detail/async_promise.hpp +71 -0
  54. package/include/opencv2/core/detail/dispatch_helper.impl.hpp +49 -0
  55. package/include/opencv2/core/detail/exception_ptr.hpp +27 -0
  56. package/include/opencv2/core/directx.hpp +184 -0
  57. package/include/opencv2/core/dualquaternion.hpp +979 -0
  58. package/include/opencv2/core/dualquaternion.inl.hpp +487 -0
  59. package/include/opencv2/core/eigen.hpp +402 -0
  60. package/include/opencv2/core/fast_math.hpp +433 -0
  61. package/include/opencv2/core/hal/hal.hpp +256 -0
  62. package/include/opencv2/core/hal/interface.h +190 -0
  63. package/include/opencv2/core/hal/intrin.hpp +939 -0
  64. package/include/opencv2/core/hal/intrin_avx.hpp +3177 -0
  65. package/include/opencv2/core/hal/intrin_avx512.hpp +3090 -0
  66. package/include/opencv2/core/hal/intrin_cpp.hpp +3321 -0
  67. package/include/opencv2/core/hal/intrin_forward.hpp +191 -0
  68. package/include/opencv2/core/hal/intrin_lasx.hpp +3236 -0
  69. package/include/opencv2/core/hal/intrin_msa.hpp +1887 -0
  70. package/include/opencv2/core/hal/intrin_neon.hpp +2610 -0
  71. package/include/opencv2/core/hal/intrin_rvv.hpp +3320 -0
  72. package/include/opencv2/core/hal/intrin_rvv071.hpp +2545 -0
  73. package/include/opencv2/core/hal/intrin_rvv_scalable.hpp +2080 -0
  74. package/include/opencv2/core/hal/intrin_sse.hpp +3467 -0
  75. package/include/opencv2/core/hal/intrin_sse_em.hpp +180 -0
  76. package/include/opencv2/core/hal/intrin_vsx.hpp +1608 -0
  77. package/include/opencv2/core/hal/intrin_wasm.hpp +2782 -0
  78. package/include/opencv2/core/hal/msa_macros.h +1558 -0
  79. package/include/opencv2/core/hal/simd_utils.impl.hpp +186 -0
  80. package/include/opencv2/core/llapi/llapi.h +102 -0
  81. package/include/opencv2/core/mat.hpp +3775 -0
  82. package/include/opencv2/core/mat.inl.hpp +3422 -0
  83. package/include/opencv2/core/matx.hpp +1536 -0
  84. package/include/opencv2/core/neon_utils.hpp +128 -0
  85. package/include/opencv2/core/ocl.hpp +917 -0
  86. package/include/opencv2/core/ocl_genbase.hpp +69 -0
  87. package/include/opencv2/core/opencl/ocl_defs.hpp +82 -0
  88. package/include/opencv2/core/opencl/opencl_info.hpp +212 -0
  89. package/include/opencv2/core/opencl/opencl_svm.hpp +81 -0
  90. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp +602 -0
  91. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp +146 -0
  92. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp +371 -0
  93. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp +272 -0
  94. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp +62 -0
  95. package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp +42 -0
  96. package/include/opencv2/core/opencl/runtime/opencl_clblas.hpp +53 -0
  97. package/include/opencv2/core/opencl/runtime/opencl_clfft.hpp +53 -0
  98. package/include/opencv2/core/opencl/runtime/opencl_core.hpp +84 -0
  99. package/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp +47 -0
  100. package/include/opencv2/core/opencl/runtime/opencl_gl.hpp +53 -0
  101. package/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp +47 -0
  102. package/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp +48 -0
  103. package/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp +42 -0
  104. package/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp +166 -0
  105. package/include/opencv2/core/opengl.hpp +733 -0
  106. package/include/opencv2/core/openvx/ovx_defs.hpp +48 -0
  107. package/include/opencv2/core/operations.hpp +610 -0
  108. package/include/opencv2/core/optim.hpp +302 -0
  109. package/include/opencv2/core/ovx.hpp +28 -0
  110. package/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp +72 -0
  111. package/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp +153 -0
  112. package/include/opencv2/core/parallel/parallel_backend.hpp +90 -0
  113. package/include/opencv2/core/persistence.hpp +1350 -0
  114. package/include/opencv2/core/private/cv_cpu_include_simd_declarations.hpp +30 -0
  115. package/include/opencv2/core/private.cuda.hpp +169 -0
  116. package/include/opencv2/core/private.hpp +896 -0
  117. package/include/opencv2/core/quaternion.hpp +1696 -0
  118. package/include/opencv2/core/quaternion.inl.hpp +1063 -0
  119. package/include/opencv2/core/saturate.hpp +180 -0
  120. package/include/opencv2/core/simd_intrinsics.hpp +87 -0
  121. package/include/opencv2/core/softfloat.hpp +514 -0
  122. package/include/opencv2/core/sse_utils.hpp +652 -0
  123. package/include/opencv2/core/traits.hpp +417 -0
  124. package/include/opencv2/core/types.hpp +2457 -0
  125. package/include/opencv2/core/types_c.h +2126 -0
  126. package/include/opencv2/core/utility.hpp +1229 -0
  127. package/include/opencv2/core/utils/allocator_stats.hpp +29 -0
  128. package/include/opencv2/core/utils/allocator_stats.impl.hpp +158 -0
  129. package/include/opencv2/core/utils/buffer_area.private.hpp +136 -0
  130. package/include/opencv2/core/utils/configuration.private.hpp +22 -0
  131. package/include/opencv2/core/utils/filesystem.hpp +82 -0
  132. package/include/opencv2/core/utils/filesystem.private.hpp +66 -0
  133. package/include/opencv2/core/utils/fp_control.private.hpp +29 -0
  134. package/include/opencv2/core/utils/fp_control_utils.hpp +69 -0
  135. package/include/opencv2/core/utils/instrumentation.hpp +125 -0
  136. package/include/opencv2/core/utils/lock.private.hpp +119 -0
  137. package/include/opencv2/core/utils/logger.defines.hpp +42 -0
  138. package/include/opencv2/core/utils/logger.hpp +218 -0
  139. package/include/opencv2/core/utils/logtag.hpp +28 -0
  140. package/include/opencv2/core/utils/plugin_loader.private.hpp +165 -0
  141. package/include/opencv2/core/utils/tls.hpp +235 -0
  142. package/include/opencv2/core/utils/trace.hpp +252 -0
  143. package/include/opencv2/core/utils/trace.private.hpp +421 -0
  144. package/include/opencv2/core/va_intel.hpp +75 -0
  145. package/include/opencv2/core/version.hpp +26 -0
  146. package/include/opencv2/core/vsx_utils.hpp +1047 -0
  147. package/include/opencv2/core.hpp +3365 -0
  148. package/include/opencv2/imgcodecs/imgcodecs.hpp +48 -0
  149. package/include/opencv2/imgcodecs/imgcodecs_c.h +1 -0
  150. package/include/opencv2/imgcodecs/ios.h +59 -0
  151. package/include/opencv2/imgcodecs/legacy/constants_c.h +54 -0
  152. package/include/opencv2/imgcodecs/macosx.h +20 -0
  153. package/include/opencv2/imgcodecs.hpp +407 -0
  154. package/include/opencv2/imgproc/bindings.hpp +34 -0
  155. package/include/opencv2/imgproc/detail/gcgraph.hpp +395 -0
  156. package/include/opencv2/imgproc/hal/hal.hpp +246 -0
  157. package/include/opencv2/imgproc/hal/interface.h +46 -0
  158. package/include/opencv2/imgproc/imgproc.hpp +48 -0
  159. package/include/opencv2/imgproc/imgproc_c.h +1177 -0
  160. package/include/opencv2/imgproc/segmentation.hpp +141 -0
  161. package/include/opencv2/imgproc/types_c.h +659 -0
  162. package/include/opencv2/imgproc.hpp +5035 -0
  163. package/include/opencv2/opencv_modules.hpp +17 -0
  164. package/libs/libjpeg-turbo.lib +0 -0
  165. package/libs/libpng.lib +0 -0
  166. package/libs/opencv_core470.lib +0 -0
  167. package/libs/opencv_imgcodecs470.lib +0 -0
  168. package/libs/opencv_imgproc470.lib +0 -0
  169. package/libs/zlib.lib +0 -0
  170. package/package.json +8 -2
  171. package/prebuilds/win32-x64/node.napi.node +0 -0
  172. package/src/cpp/capturewindow.cpp +36 -46
  173. package/src/cpp/main.cpp +10 -2
  174. 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