Joe Verbout
/
main
opencv on mbed
Embed:
(wiki syntax)
Show/hide line numbers
cvdef.h
00001 /*M/////////////////////////////////////////////////////////////////////////////////////// 00002 // 00003 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 00004 // 00005 // By downloading, copying, installing or using the software you agree to this license. 00006 // If you do not agree to this license, do not download, install, 00007 // copy or use the software. 00008 // 00009 // 00010 // License Agreement 00011 // For Open Source Computer Vision Library 00012 // 00013 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 00014 // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 00015 // Copyright (C) 2013, OpenCV Foundation, all rights reserved. 00016 // Copyright (C) 2015, Itseez Inc., all rights reserved. 00017 // Third party copyrights are property of their respective owners. 00018 // 00019 // Redistribution and use in source and binary forms, with or without modification, 00020 // are permitted provided that the following conditions are met: 00021 // 00022 // * Redistribution's of source code must retain the above copyright notice, 00023 // this list of conditions and the following disclaimer. 00024 // 00025 // * Redistribution's in binary form must reproduce the above copyright notice, 00026 // this list of conditions and the following disclaimer in the documentation 00027 // and/or other materials provided with the distribution. 00028 // 00029 // * The name of the copyright holders may not be used to endorse or promote products 00030 // derived from this software without specific prior written permission. 00031 // 00032 // This software is provided by the copyright holders and contributors "as is" and 00033 // any express or implied warranties, including, but not limited to, the implied 00034 // warranties of merchantability and fitness for a particular purpose are disclaimed. 00035 // In no event shall the Intel Corporation or contributors be liable for any direct, 00036 // indirect, incidental, special, exemplary, or consequential damages 00037 // (including, but not limited to, procurement of substitute goods or services; 00038 // loss of use, data, or profits; or business interruption) however caused 00039 // and on any theory of liability, whether in contract, strict liability, 00040 // or tort (including negligence or otherwise) arising in any way out of 00041 // the use of this software, even if advised of the possibility of such damage. 00042 // 00043 //M*/ 00044 00045 #ifndef __OPENCV_CORE_CVDEF_H__ 00046 #define __OPENCV_CORE_CVDEF_H__ 00047 00048 //! @addtogroup core_utils 00049 //! @{ 00050 00051 #if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300 00052 # define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio warnings */ 00053 #endif 00054 00055 // undef problematic defines sometimes defined by system headers (windows.h in particular) 00056 #undef small 00057 #undef min 00058 #undef max 00059 #undef abs 00060 #undef Complex 00061 00062 #if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300 00063 # define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio warnings */ 00064 #endif 00065 00066 #include <limits.h> 00067 #include "opencv2/core/hal/interface.h" 00068 00069 #if defined __ICL 00070 # define CV_ICC __ICL 00071 #elif defined __ICC 00072 # define CV_ICC __ICC 00073 #elif defined __ECL 00074 # define CV_ICC __ECL 00075 #elif defined __ECC 00076 # define CV_ICC __ECC 00077 #elif defined __INTEL_COMPILER 00078 # define CV_ICC __INTEL_COMPILER 00079 #endif 00080 00081 #ifndef CV_INLINE 00082 # if defined __cplusplus 00083 # define CV_INLINE static inline 00084 # elif defined _MSC_VER 00085 # define CV_INLINE __inline 00086 # else 00087 # define CV_INLINE static 00088 # endif 00089 #endif 00090 00091 #if defined CV_ICC && !defined CV_ENABLE_UNROLLED 00092 # define CV_ENABLE_UNROLLED 0 00093 #else 00094 # define CV_ENABLE_UNROLLED 1 00095 #endif 00096 00097 #ifdef __GNUC__ 00098 # define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x))) 00099 #elif defined _MSC_VER 00100 # define CV_DECL_ALIGNED(x) __declspec(align(x)) 00101 #else 00102 # define CV_DECL_ALIGNED(x) 00103 #endif 00104 00105 /* CPU features and intrinsics support */ 00106 #define CV_CPU_NONE 0 00107 #define CV_CPU_MMX 1 00108 #define CV_CPU_SSE 2 00109 #define CV_CPU_SSE2 3 00110 #define CV_CPU_SSE3 4 00111 #define CV_CPU_SSSE3 5 00112 #define CV_CPU_SSE4_1 6 00113 #define CV_CPU_SSE4_2 7 00114 #define CV_CPU_POPCNT 8 00115 00116 #define CV_CPU_AVX 10 00117 #define CV_CPU_AVX2 11 00118 #define CV_CPU_FMA3 12 00119 00120 #define CV_CPU_AVX_512F 13 00121 #define CV_CPU_AVX_512BW 14 00122 #define CV_CPU_AVX_512CD 15 00123 #define CV_CPU_AVX_512DQ 16 00124 #define CV_CPU_AVX_512ER 17 00125 #define CV_CPU_AVX_512IFMA512 18 00126 #define CV_CPU_AVX_512PF 19 00127 #define CV_CPU_AVX_512VBMI 20 00128 #define CV_CPU_AVX_512VL 21 00129 00130 #define CV_CPU_NEON 100 00131 00132 // when adding to this list remember to update the following enum 00133 #define CV_HARDWARE_MAX_FEATURE 255 00134 00135 /** @brief Available CPU features. 00136 */ 00137 enum CpuFeatures { 00138 CPU_MMX = 1, 00139 CPU_SSE = 2, 00140 CPU_SSE2 = 3, 00141 CPU_SSE3 = 4, 00142 CPU_SSSE3 = 5, 00143 CPU_SSE4_1 = 6, 00144 CPU_SSE4_2 = 7, 00145 CPU_POPCNT = 8, 00146 00147 CPU_AVX = 10, 00148 CPU_AVX2 = 11, 00149 CPU_FMA3 = 12, 00150 00151 CPU_AVX_512F = 13, 00152 CPU_AVX_512BW = 14, 00153 CPU_AVX_512CD = 15, 00154 CPU_AVX_512DQ = 16, 00155 CPU_AVX_512ER = 17, 00156 CPU_AVX_512IFMA512 = 18, 00157 CPU_AVX_512PF = 19, 00158 CPU_AVX_512VBMI = 20, 00159 CPU_AVX_512VL = 21, 00160 00161 CPU_NEON = 100 00162 }; 00163 00164 // do not include SSE/AVX/NEON headers for NVCC compiler 00165 #ifndef __CUDACC__ 00166 00167 #if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2) 00168 # include <emmintrin.h> 00169 # define CV_MMX 1 00170 # define CV_SSE 1 00171 # define CV_SSE2 1 00172 # if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) 00173 # include <pmmintrin.h> 00174 # define CV_SSE3 1 00175 # endif 00176 # if defined __SSSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) 00177 # include <tmmintrin.h> 00178 # define CV_SSSE3 1 00179 # endif 00180 # if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500) 00181 # include <smmintrin.h> 00182 # define CV_SSE4_1 1 00183 # endif 00184 # if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500) 00185 # include <nmmintrin.h> 00186 # define CV_SSE4_2 1 00187 # endif 00188 # if defined __POPCNT__ || (defined _MSC_VER && _MSC_VER >= 1500) 00189 # ifdef _MSC_VER 00190 # include <nmmintrin.h> 00191 # else 00192 # include <popcntintrin.h> 00193 # endif 00194 # define CV_POPCNT 1 00195 # endif 00196 # if defined __AVX__ || (defined _MSC_VER && _MSC_VER >= 1600 && 0) 00197 // MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX 00198 // See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32 00199 # include <immintrin.h> 00200 # define CV_AVX 1 00201 # if defined(_XCR_XFEATURE_ENABLED_MASK) 00202 # define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK) 00203 # else 00204 # define __xgetbv() 0 00205 # endif 00206 # endif 00207 # if defined __AVX2__ || (defined _MSC_VER && _MSC_VER >= 1800 && 0) 00208 # include <immintrin.h> 00209 # define CV_AVX2 1 00210 # if defined __FMA__ 00211 # define CV_FMA3 1 00212 # endif 00213 # endif 00214 #endif 00215 00216 #if (defined WIN32 || defined _WIN32) && defined(_M_ARM) 00217 # include <Intrin.h> 00218 # include "arm_neon.h" 00219 # define CV_NEON 1 00220 # define CPU_HAS_NEON_FEATURE (true) 00221 #elif defined(__ARM_NEON__) || (defined (__ARM_NEON) && defined(__aarch64__)) 00222 # include <arm_neon.h> 00223 # define CV_NEON 1 00224 #endif 00225 00226 #if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__ || defined __ARM_NEON__) && !defined __SOFTFP__ 00227 # define CV_VFP 1 00228 #endif 00229 00230 #endif // __CUDACC__ 00231 00232 #ifndef CV_POPCNT 00233 #define CV_POPCNT 0 00234 #endif 00235 #ifndef CV_MMX 00236 # define CV_MMX 0 00237 #endif 00238 #ifndef CV_SSE 00239 # define CV_SSE 0 00240 #endif 00241 #ifndef CV_SSE2 00242 # define CV_SSE2 0 00243 #endif 00244 #ifndef CV_SSE3 00245 # define CV_SSE3 0 00246 #endif 00247 #ifndef CV_SSSE3 00248 # define CV_SSSE3 0 00249 #endif 00250 #ifndef CV_SSE4_1 00251 # define CV_SSE4_1 0 00252 #endif 00253 #ifndef CV_SSE4_2 00254 # define CV_SSE4_2 0 00255 #endif 00256 #ifndef CV_AVX 00257 # define CV_AVX 0 00258 #endif 00259 #ifndef CV_AVX2 00260 # define CV_AVX2 0 00261 #endif 00262 #ifndef CV_FMA3 00263 # define CV_FMA3 0 00264 #endif 00265 #ifndef CV_AVX_512F 00266 # define CV_AVX_512F 0 00267 #endif 00268 #ifndef CV_AVX_512BW 00269 # define CV_AVX_512BW 0 00270 #endif 00271 #ifndef CV_AVX_512CD 00272 # define CV_AVX_512CD 0 00273 #endif 00274 #ifndef CV_AVX_512DQ 00275 # define CV_AVX_512DQ 0 00276 #endif 00277 #ifndef CV_AVX_512ER 00278 # define CV_AVX_512ER 0 00279 #endif 00280 #ifndef CV_AVX_512IFMA512 00281 # define CV_AVX_512IFMA512 0 00282 #endif 00283 #ifndef CV_AVX_512PF 00284 # define CV_AVX_512PF 0 00285 #endif 00286 #ifndef CV_AVX_512VBMI 00287 # define CV_AVX_512VBMI 0 00288 #endif 00289 #ifndef CV_AVX_512VL 00290 # define CV_AVX_512VL 0 00291 #endif 00292 00293 #ifndef CV_NEON 00294 # define CV_NEON 0 00295 #endif 00296 00297 #ifndef CV_VFP 00298 # define CV_VFP 0 00299 #endif 00300 00301 /* fundamental constants */ 00302 #define CV_PI 3.1415926535897932384626433832795 00303 #define CV_2PI 6.283185307179586476925286766559 00304 #define CV_LOG2 0.69314718055994530941723212145818 00305 00306 typedef union Cv32suf 00307 { 00308 int i; 00309 unsigned u; 00310 float f; 00311 } 00312 Cv32suf; 00313 00314 typedef union Cv64suf 00315 { 00316 int64 i; 00317 uint64 u; 00318 double f; 00319 } 00320 Cv64suf; 00321 00322 #define OPENCV_ABI_COMPATIBILITY 300 00323 00324 #ifdef __OPENCV_BUILD 00325 # define DISABLE_OPENCV_24_COMPATIBILITY 00326 #endif 00327 00328 #if (defined WIN32 || defined _WIN32 || defined WINCE || defined __CYGWIN__) && defined CVAPI_EXPORTS 00329 # define CV_EXPORTS __declspec(dllexport) 00330 #elif defined __GNUC__ && __GNUC__ >= 4 00331 # define CV_EXPORTS __attribute__ ((visibility ("default"))) 00332 #else 00333 # define CV_EXPORTS 00334 #endif 00335 00336 #ifndef CV_EXTERN_C 00337 # ifdef __cplusplus 00338 # define CV_EXTERN_C extern "C" 00339 # else 00340 # define CV_EXTERN_C 00341 # endif 00342 #endif 00343 00344 /* special informative macros for wrapper generators */ 00345 #define CV_EXPORTS_W CV_EXPORTS 00346 #define CV_EXPORTS_W_SIMPLE CV_EXPORTS 00347 #define CV_EXPORTS_AS(synonym) CV_EXPORTS 00348 #define CV_EXPORTS_W_MAP CV_EXPORTS 00349 #define CV_IN_OUT 00350 #define CV_OUT 00351 #define CV_PROP 00352 #define CV_PROP_RW 00353 #define CV_WRAP 00354 #define CV_WRAP_AS(synonym) 00355 00356 /****************************************************************************************\ 00357 * Matrix type (Mat) * 00358 \****************************************************************************************/ 00359 00360 #define CV_CN_MAX 512 00361 #define CV_CN_SHIFT 3 00362 #define CV_DEPTH_MAX (1 << CV_CN_SHIFT) 00363 00364 #define CV_8U 0 00365 #define CV_8S 1 00366 #define CV_16U 2 00367 #define CV_16S 3 00368 #define CV_32S 4 00369 #define CV_32F 5 00370 #define CV_64F 6 00371 #define CV_USRTYPE1 7 00372 00373 #define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1) 00374 #define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) 00375 00376 #define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) 00377 #define CV_MAKE_TYPE CV_MAKETYPE 00378 00379 #define CV_8UC1 CV_MAKETYPE(CV_8U,1) 00380 #define CV_8UC2 CV_MAKETYPE(CV_8U,2) 00381 #define CV_8UC3 CV_MAKETYPE(CV_8U,3) 00382 #define CV_8UC4 CV_MAKETYPE(CV_8U,4) 00383 #define CV_8UC(n) CV_MAKETYPE(CV_8U,(n)) 00384 00385 #define CV_8SC1 CV_MAKETYPE(CV_8S,1) 00386 #define CV_8SC2 CV_MAKETYPE(CV_8S,2) 00387 #define CV_8SC3 CV_MAKETYPE(CV_8S,3) 00388 #define CV_8SC4 CV_MAKETYPE(CV_8S,4) 00389 #define CV_8SC(n) CV_MAKETYPE(CV_8S,(n)) 00390 00391 #define CV_16UC1 CV_MAKETYPE(CV_16U,1) 00392 #define CV_16UC2 CV_MAKETYPE(CV_16U,2) 00393 #define CV_16UC3 CV_MAKETYPE(CV_16U,3) 00394 #define CV_16UC4 CV_MAKETYPE(CV_16U,4) 00395 #define CV_16UC(n) CV_MAKETYPE(CV_16U,(n)) 00396 00397 #define CV_16SC1 CV_MAKETYPE(CV_16S,1) 00398 #define CV_16SC2 CV_MAKETYPE(CV_16S,2) 00399 #define CV_16SC3 CV_MAKETYPE(CV_16S,3) 00400 #define CV_16SC4 CV_MAKETYPE(CV_16S,4) 00401 #define CV_16SC(n) CV_MAKETYPE(CV_16S,(n)) 00402 00403 #define CV_32SC1 CV_MAKETYPE(CV_32S,1) 00404 #define CV_32SC2 CV_MAKETYPE(CV_32S,2) 00405 #define CV_32SC3 CV_MAKETYPE(CV_32S,3) 00406 #define CV_32SC4 CV_MAKETYPE(CV_32S,4) 00407 #define CV_32SC(n) CV_MAKETYPE(CV_32S,(n)) 00408 00409 #define CV_32FC1 CV_MAKETYPE(CV_32F,1) 00410 #define CV_32FC2 CV_MAKETYPE(CV_32F,2) 00411 #define CV_32FC3 CV_MAKETYPE(CV_32F,3) 00412 #define CV_32FC4 CV_MAKETYPE(CV_32F,4) 00413 #define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) 00414 00415 #define CV_64FC1 CV_MAKETYPE(CV_64F,1) 00416 #define CV_64FC2 CV_MAKETYPE(CV_64F,2) 00417 #define CV_64FC3 CV_MAKETYPE(CV_64F,3) 00418 #define CV_64FC4 CV_MAKETYPE(CV_64F,4) 00419 #define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) 00420 00421 #define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) 00422 #define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) 00423 #define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1) 00424 #define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) 00425 #define CV_MAT_CONT_FLAG_SHIFT 14 00426 #define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) 00427 #define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) 00428 #define CV_IS_CONT_MAT CV_IS_MAT_CONT 00429 #define CV_SUBMAT_FLAG_SHIFT 15 00430 #define CV_SUBMAT_FLAG (1 << CV_SUBMAT_FLAG_SHIFT) 00431 #define CV_IS_SUBMAT(flags) ((flags) & CV_MAT_SUBMAT_FLAG) 00432 00433 /** Size of each channel item, 00434 0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */ 00435 #define CV_ELEM_SIZE1(type) \ 00436 ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15) 00437 00438 /** 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ 00439 #define CV_ELEM_SIZE(type) \ 00440 (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3)) 00441 00442 #ifndef MIN 00443 # define MIN(a,b) ((a) > (b) ? (b) : (a)) 00444 #endif 00445 00446 #ifndef MAX 00447 # define MAX(a,b) ((a) < (b) ? (b) : (a)) 00448 #endif 00449 00450 /****************************************************************************************\ 00451 * exchange-add operation for atomic operations on reference counters * 00452 \****************************************************************************************/ 00453 00454 #if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32) 00455 // atomic increment on the linux version of the Intel(tm) compiler 00456 # define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd(const_cast<void*>(reinterpret_cast<volatile void*>(addr)), delta) 00457 #elif defined __GNUC__ 00458 # if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__ && !defined(__CUDACC__) 00459 # ifdef __ATOMIC_ACQ_REL 00460 # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) 00461 # else 00462 # define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), delta, 4) 00463 # endif 00464 # else 00465 # if defined __ATOMIC_ACQ_REL && !defined __clang__ 00466 // version for gcc >= 4.7 00467 # define CV_XADD(addr, delta) (int)__atomic_fetch_add((unsigned*)(addr), (unsigned)(delta), __ATOMIC_ACQ_REL) 00468 # else 00469 # define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta)) 00470 # endif 00471 # endif 00472 #elif defined _MSC_VER && !defined RC_INVOKED 00473 # include <intrin.h> 00474 # define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta) 00475 #else 00476 CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; } 00477 #endif 00478 00479 00480 /****************************************************************************************\ 00481 * CV_NORETURN attribute * 00482 \****************************************************************************************/ 00483 00484 #ifndef CV_NORETURN 00485 # if defined(__GNUC__) 00486 # define CV_NORETURN __attribute__((__noreturn__)) 00487 # elif defined(_MSC_VER) && (_MSC_VER >= 1300) 00488 # define CV_NORETURN __declspec(noreturn) 00489 # else 00490 # define CV_NORETURN /* nothing by default */ 00491 # endif 00492 #endif 00493 00494 00495 /****************************************************************************************\ 00496 * C++ Move semantics * 00497 \****************************************************************************************/ 00498 00499 #ifndef CV_CXX_MOVE_SEMANTICS 00500 # if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) || defined(_MSC_VER) && _MSC_VER >= 1600 00501 # define CV_CXX_MOVE_SEMANTICS 1 00502 # elif defined(__clang) 00503 # if __has_feature(cxx_rvalue_references) 00504 # define CV_CXX_MOVE_SEMANTICS 1 00505 # endif 00506 # endif 00507 #else 00508 # if CV_CXX_MOVE_SEMANTICS == 0 00509 # undef CV_CXX_MOVE_SEMANTICS 00510 # endif 00511 #endif 00512 00513 //! @} 00514 00515 #endif // __OPENCV_CORE_CVDEF_H__ 00516
Generated on Tue Jul 12 2022 16:42:37 by 1.7.2