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,433 @@
1
+ /*M///////////////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4
+ //
5
+ // By downloading, copying, installing or using the software you agree to this license.
6
+ // If you do not agree to this license, do not download, install,
7
+ // copy or use the software.
8
+ //
9
+ //
10
+ // License Agreement
11
+ // For Open Source Computer Vision Library
12
+ //
13
+ // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14
+ // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15
+ // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
16
+ // Copyright (C) 2015, Itseez Inc., all rights reserved.
17
+ // Third party copyrights are property of their respective owners.
18
+ //
19
+ // Redistribution and use in source and binary forms, with or without modification,
20
+ // are permitted provided that the following conditions are met:
21
+ //
22
+ // * Redistribution's of source code must retain the above copyright notice,
23
+ // this list of conditions and the following disclaimer.
24
+ //
25
+ // * Redistribution's in binary form must reproduce the above copyright notice,
26
+ // this list of conditions and the following disclaimer in the documentation
27
+ // and/or other materials provided with the distribution.
28
+ //
29
+ // * The name of the copyright holders may not be used to endorse or promote products
30
+ // derived from this software without specific prior written permission.
31
+ //
32
+ // This software is provided by the copyright holders and contributors "as is" and
33
+ // any express or implied warranties, including, but not limited to, the implied
34
+ // warranties of merchantability and fitness for a particular purpose are disclaimed.
35
+ // In no event shall the Intel Corporation or contributors be liable for any direct,
36
+ // indirect, incidental, special, exemplary, or consequential damages
37
+ // (including, but not limited to, procurement of substitute goods or services;
38
+ // loss of use, data, or profits; or business interruption) however caused
39
+ // and on any theory of liability, whether in contract, strict liability,
40
+ // or tort (including negligence or otherwise) arising in any way out of
41
+ // the use of this software, even if advised of the possibility of such damage.
42
+ //
43
+ //M*/
44
+
45
+ #ifndef OPENCV_CORE_FAST_MATH_HPP
46
+ #define OPENCV_CORE_FAST_MATH_HPP
47
+
48
+ #include "opencv2/core/cvdef.h"
49
+
50
+ //! @addtogroup core_utils
51
+ //! @{
52
+
53
+ /****************************************************************************************\
54
+ * fast math *
55
+ \****************************************************************************************/
56
+
57
+ #ifdef __cplusplus
58
+ # include <cmath>
59
+ #else
60
+ # ifdef __BORLANDC__
61
+ # include <fastmath.h>
62
+ # else
63
+ # include <math.h>
64
+ # endif
65
+ #endif
66
+
67
+ #if defined(__CUDACC__)
68
+ // nothing, intrinsics/asm code is not supported
69
+ #else
70
+ #if ((defined _MSC_VER && defined _M_X64) \
71
+ || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__)) \
72
+ && !defined(OPENCV_SKIP_INCLUDE_EMMINTRIN_H)
73
+ #include <emmintrin.h>
74
+ #endif
75
+
76
+ #if defined __PPC64__ && defined __GNUC__ && defined _ARCH_PWR8 \
77
+ && !defined(OPENCV_SKIP_INCLUDE_ALTIVEC_H)
78
+ #include <altivec.h>
79
+ #undef vector
80
+ #undef bool
81
+ #undef pixel
82
+ #endif
83
+
84
+ #if defined(CV_INLINE_ROUND_FLT)
85
+ // user-specified version
86
+ // CV_INLINE_ROUND_DBL should be defined too
87
+ #elif defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__ || defined __ARM_NEON__) && !defined __SOFTFP__
88
+ // 1. general scheme
89
+ #define ARM_ROUND(_value, _asm_string) \
90
+ int res; \
91
+ float temp; \
92
+ CV_UNUSED(temp); \
93
+ __asm__(_asm_string : [res] "=r" (res), [temp] "=w" (temp) : [value] "w" (_value)); \
94
+ return res
95
+ // 2. version for double
96
+ #ifdef __clang__
97
+ #define CV_INLINE_ROUND_DBL(value) ARM_ROUND(value, "vcvtr.s32.f64 %[temp], %[value] \n vmov %[res], %[temp]")
98
+ #else
99
+ #define CV_INLINE_ROUND_DBL(value) ARM_ROUND(value, "vcvtr.s32.f64 %[temp], %P[value] \n vmov %[res], %[temp]")
100
+ #endif
101
+ // 3. version for float
102
+ #define CV_INLINE_ROUND_FLT(value) ARM_ROUND(value, "vcvtr.s32.f32 %[temp], %[value]\n vmov %[res], %[temp]")
103
+ #elif defined __PPC64__ && defined __GNUC__ && defined _ARCH_PWR8
104
+ // P8 and newer machines can convert fp32/64 to int quickly.
105
+ #define CV_INLINE_ROUND_DBL(value) \
106
+ int out; \
107
+ double temp; \
108
+ __asm__( "fctiw %[temp],%[in]\n\tmfvsrwz %[out],%[temp]\n\t" : [out] "=r" (out), [temp] "=d" (temp) : [in] "d" ((double)(value)) : ); \
109
+ return out;
110
+
111
+ // FP32 also works with FP64 routine above
112
+ #define CV_INLINE_ROUND_FLT(value) CV_INLINE_ROUND_DBL(value)
113
+ #endif
114
+
115
+ #ifdef CV_INLINE_ISINF_FLT
116
+ // user-specified version
117
+ // CV_INLINE_ISINF_DBL should be defined too
118
+ #elif defined __PPC64__ && defined _ARCH_PWR9 && defined(scalar_test_data_class)
119
+ #define CV_INLINE_ISINF_DBL(value) return scalar_test_data_class(value, 0x30);
120
+ #define CV_INLINE_ISINF_FLT(value) CV_INLINE_ISINF_DBL(value)
121
+ #endif
122
+
123
+ #ifdef CV_INLINE_ISNAN_FLT
124
+ // user-specified version
125
+ // CV_INLINE_ISNAN_DBL should be defined too
126
+ #elif defined __PPC64__ && defined _ARCH_PWR9 && defined(scalar_test_data_class)
127
+ #define CV_INLINE_ISNAN_DBL(value) return scalar_test_data_class(value, 0x40);
128
+ #define CV_INLINE_ISNAN_FLT(value) CV_INLINE_ISNAN_DBL(value)
129
+ #endif
130
+
131
+ #if !defined(OPENCV_USE_FASTMATH_BUILTINS) \
132
+ && ( \
133
+ defined(__x86_64__) || defined(__i686__) \
134
+ || defined(__arm__) \
135
+ || defined(__PPC64__) \
136
+ )
137
+ /* Let builtin C math functions when available. Dedicated hardware is available to
138
+ round and convert FP values. */
139
+ #define OPENCV_USE_FASTMATH_BUILTINS 1
140
+ #endif
141
+
142
+ /* Enable builtin math functions if possible, desired, and available.
143
+ Note, not all math functions inline equally. E.g lrint will not inline
144
+ without the -fno-math-errno option. */
145
+ #if defined(CV_ICC)
146
+ // nothing
147
+ #elif defined(OPENCV_USE_FASTMATH_BUILTINS) && OPENCV_USE_FASTMATH_BUILTINS
148
+ #if defined(__clang__)
149
+ #define CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
150
+ #if !defined(CV_INLINE_ISNAN_DBL) && __has_builtin(__builtin_isnan)
151
+ #define CV_INLINE_ISNAN_DBL(value) return __builtin_isnan(value);
152
+ #endif
153
+ #if !defined(CV_INLINE_ISNAN_FLT) && __has_builtin(__builtin_isnan)
154
+ #define CV_INLINE_ISNAN_FLT(value) return __builtin_isnan(value);
155
+ #endif
156
+ #if !defined(CV_INLINE_ISINF_DBL) && __has_builtin(__builtin_isinf)
157
+ #define CV_INLINE_ISINF_DBL(value) return __builtin_isinf(value);
158
+ #endif
159
+ #if !defined(CV_INLINE_ISINF_FLT) && __has_builtin(__builtin_isinf)
160
+ #define CV_INLINE_ISINF_FLT(value) return __builtin_isinf(value);
161
+ #endif
162
+ #elif defined(__GNUC__)
163
+ #define CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS
164
+ #if !defined(CV_INLINE_ISNAN_DBL)
165
+ #define CV_INLINE_ISNAN_DBL(value) return __builtin_isnan(value);
166
+ #endif
167
+ #if !defined(CV_INLINE_ISNAN_FLT)
168
+ #define CV_INLINE_ISNAN_FLT(value) return __builtin_isnanf(value);
169
+ #endif
170
+ #if !defined(CV_INLINE_ISINF_DBL)
171
+ #define CV_INLINE_ISINF_DBL(value) return __builtin_isinf(value);
172
+ #endif
173
+ #if !defined(CV_INLINE_ISINF_FLT)
174
+ #define CV_INLINE_ISINF_FLT(value) return __builtin_isinff(value);
175
+ #endif
176
+ #elif defined(_MSC_VER)
177
+ #if !defined(CV_INLINE_ISNAN_DBL)
178
+ #define CV_INLINE_ISNAN_DBL(value) return isnan(value);
179
+ #endif
180
+ #if !defined(CV_INLINE_ISNAN_FLT)
181
+ #define CV_INLINE_ISNAN_FLT(value) return isnan(value);
182
+ #endif
183
+ #if !defined(CV_INLINE_ISINF_DBL)
184
+ #define CV_INLINE_ISINF_DBL(value) return isinf(value);
185
+ #endif
186
+ #if !defined(CV_INLINE_ISINF_FLT)
187
+ #define CV_INLINE_ISINF_FLT(value) return isinf(value);
188
+ #endif
189
+ #endif
190
+ #endif
191
+
192
+ #endif // defined(__CUDACC__)
193
+
194
+ /** @brief Rounds floating-point number to the nearest integer
195
+
196
+ @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the
197
+ result is not defined.
198
+ */
199
+ CV_INLINE int
200
+ cvRound( double value )
201
+ {
202
+ #if defined CV_INLINE_ROUND_DBL
203
+ CV_INLINE_ROUND_DBL(value);
204
+ #elif (defined _MSC_VER && defined _M_X64) && !defined(__CUDACC__)
205
+ __m128d t = _mm_set_sd( value );
206
+ return _mm_cvtsd_si32(t);
207
+ #elif defined _MSC_VER && defined _M_IX86
208
+ int t;
209
+ __asm
210
+ {
211
+ fld value;
212
+ fistp t;
213
+ }
214
+ return t;
215
+ #elif defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
216
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
217
+ return (int)__builtin_lrint(value);
218
+ #else
219
+ return (int)lrint(value);
220
+ #endif
221
+ }
222
+
223
+
224
+ /** @brief Rounds floating-point number to the nearest integer not larger than the original.
225
+
226
+ The function computes an integer i such that:
227
+ \f[i \le \texttt{value} < i+1\f]
228
+ @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the
229
+ result is not defined.
230
+ */
231
+ CV_INLINE int cvFloor( double value )
232
+ {
233
+ #if defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
234
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
235
+ return (int)__builtin_floor(value);
236
+ #elif defined __loongarch64
237
+ int i;
238
+ double tmp;
239
+ __asm__ ("ftintrm.l.d %[tmp], %[in] \n\t"
240
+ "movfr2gr.d %[i], %[tmp] \n\t"
241
+ : [i] "=r" (i), [tmp] "=f" (tmp)
242
+ : [in] "f" (value)
243
+ :);
244
+ return i;
245
+ #else
246
+ int i = (int)value;
247
+ return i - (i > value);
248
+ #endif
249
+ }
250
+
251
+ /** @brief Rounds floating-point number to the nearest integer not smaller than the original.
252
+
253
+ The function computes an integer i such that:
254
+ \f[i \le \texttt{value} < i+1\f]
255
+ @param value floating-point number. If the value is outside of INT_MIN ... INT_MAX range, the
256
+ result is not defined.
257
+ */
258
+ CV_INLINE int cvCeil( double value )
259
+ {
260
+ #if defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
261
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
262
+ return (int)__builtin_ceil(value);
263
+ #elif defined __loongarch64
264
+ int i;
265
+ double tmp;
266
+ __asm__ ("ftintrp.l.d %[tmp], %[in] \n\t"
267
+ "movfr2gr.d %[i], %[tmp] \n\t"
268
+ : [i] "=r" (i), [tmp] "=f" (tmp)
269
+ : [in] "f" (value)
270
+ :);
271
+ return i;
272
+ #else
273
+ int i = (int)value;
274
+ return i + (i < value);
275
+ #endif
276
+ }
277
+
278
+ /** @brief Determines if the argument is Not A Number.
279
+
280
+ @param value The input floating-point value
281
+
282
+ The function returns 1 if the argument is Not A Number (as defined by IEEE754 standard), 0
283
+ otherwise. */
284
+ CV_INLINE int cvIsNaN( double value )
285
+ {
286
+ #if defined CV_INLINE_ISNAN_DBL
287
+ CV_INLINE_ISNAN_DBL(value);
288
+ #else
289
+ Cv64suf ieee754;
290
+ ieee754.f = value;
291
+ return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) +
292
+ ((unsigned)ieee754.u != 0) > 0x7ff00000;
293
+ #endif
294
+ }
295
+
296
+ /** @brief Determines if the argument is Infinity.
297
+
298
+ @param value The input floating-point value
299
+
300
+ The function returns 1 if the argument is a plus or minus infinity (as defined by IEEE754 standard)
301
+ and 0 otherwise. */
302
+ CV_INLINE int cvIsInf( double value )
303
+ {
304
+ #if defined CV_INLINE_ISINF_DBL
305
+ CV_INLINE_ISINF_DBL(value);
306
+ #elif defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__PPC64__) || defined(__loongarch64)
307
+ Cv64suf ieee754;
308
+ ieee754.f = value;
309
+ return (ieee754.u & 0x7fffffff00000000) ==
310
+ 0x7ff0000000000000;
311
+ #else
312
+ Cv64suf ieee754;
313
+ ieee754.f = value;
314
+ return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 &&
315
+ (unsigned)ieee754.u == 0;
316
+ #endif
317
+ }
318
+
319
+ #ifdef __cplusplus
320
+
321
+ /** @overload */
322
+ CV_INLINE int cvRound(float value)
323
+ {
324
+ #if defined CV_INLINE_ROUND_FLT
325
+ CV_INLINE_ROUND_FLT(value);
326
+ #elif (defined _MSC_VER && defined _M_X64) && !defined(__CUDACC__)
327
+ __m128 t = _mm_set_ss( value );
328
+ return _mm_cvtss_si32(t);
329
+ #elif defined _MSC_VER && defined _M_IX86
330
+ int t;
331
+ __asm
332
+ {
333
+ fld value;
334
+ fistp t;
335
+ }
336
+ return t;
337
+ #elif defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
338
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
339
+ return (int)__builtin_lrintf(value);
340
+ #else
341
+ return (int)lrintf(value);
342
+ #endif
343
+ }
344
+
345
+ /** @overload */
346
+ CV_INLINE int cvRound( int value )
347
+ {
348
+ return value;
349
+ }
350
+
351
+ /** @overload */
352
+ CV_INLINE int cvFloor( float value )
353
+ {
354
+ #if defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
355
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
356
+ return (int)__builtin_floorf(value);
357
+ #elif defined __loongarch
358
+ int i;
359
+ float tmp;
360
+ __asm__ ("ftintrm.w.s %[tmp], %[in] \n\t"
361
+ "movfr2gr.s %[i], %[tmp] \n\t"
362
+ : [i] "=r" (i), [tmp] "=f" (tmp)
363
+ : [in] "f" (value)
364
+ :);
365
+ return i;
366
+ #else
367
+ int i = (int)value;
368
+ return i - (i > value);
369
+ #endif
370
+ }
371
+
372
+ /** @overload */
373
+ CV_INLINE int cvFloor( int value )
374
+ {
375
+ return value;
376
+ }
377
+
378
+ /** @overload */
379
+ CV_INLINE int cvCeil( float value )
380
+ {
381
+ #if defined CV__FASTMATH_ENABLE_GCC_MATH_BUILTINS || \
382
+ defined CV__FASTMATH_ENABLE_CLANG_MATH_BUILTINS
383
+ return (int)__builtin_ceilf(value);
384
+ #elif defined __loongarch
385
+ int i;
386
+ float tmp;
387
+ __asm__ ("ftintrp.w.s %[tmp], %[in] \n\t"
388
+ "movfr2gr.s %[i], %[tmp] \n\t"
389
+ : [i] "=r" (i), [tmp] "=f" (tmp)
390
+ : [in] "f" (value)
391
+ :);
392
+ return i;
393
+ #else
394
+ int i = (int)value;
395
+ return i + (i < value);
396
+ #endif
397
+ }
398
+
399
+ /** @overload */
400
+ CV_INLINE int cvCeil( int value )
401
+ {
402
+ return value;
403
+ }
404
+
405
+ /** @overload */
406
+ CV_INLINE int cvIsNaN( float value )
407
+ {
408
+ #if defined CV_INLINE_ISNAN_FLT
409
+ CV_INLINE_ISNAN_FLT(value);
410
+ #else
411
+ Cv32suf ieee754;
412
+ ieee754.f = value;
413
+ return (ieee754.u & 0x7fffffff) > 0x7f800000;
414
+ #endif
415
+ }
416
+
417
+ /** @overload */
418
+ CV_INLINE int cvIsInf( float value )
419
+ {
420
+ #if defined CV_INLINE_ISINF_FLT
421
+ CV_INLINE_ISINF_FLT(value);
422
+ #else
423
+ Cv32suf ieee754;
424
+ ieee754.f = value;
425
+ return (ieee754.u & 0x7fffffff) == 0x7f800000;
426
+ #endif
427
+ }
428
+
429
+ #endif // __cplusplus
430
+
431
+ //! @} core_utils
432
+
433
+ #endif