| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 | 
							- /*M///////////////////////////////////////////////////////////////////////////////////////
 
- //
 
- //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 
- //
 
- //  By downloading, copying, installing or using the software you agree to this license.
 
- //  If you do not agree to this license, do not download, install,
 
- //  copy or use the software.
 
- //
 
- //
 
- //                          License Agreement
 
- //                For Open Source Computer Vision Library
 
- //
 
- // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 
- // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 
- // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
 
- // Copyright (C) 2015, Itseez Inc., all rights reserved.
 
- // Third party copyrights are property of their respective owners.
 
- //
 
- // Redistribution and use in source and binary forms, with or without modification,
 
- // are permitted provided that the following conditions are met:
 
- //
 
- //   * Redistribution's of source code must retain the above copyright notice,
 
- //     this list of conditions and the following disclaimer.
 
- //
 
- //   * Redistribution's in binary form must reproduce the above copyright notice,
 
- //     this list of conditions and the following disclaimer in the documentation
 
- //     and/or other materials provided with the distribution.
 
- //
 
- //   * The name of the copyright holders may not be used to endorse or promote products
 
- //     derived from this software without specific prior written permission.
 
- //
 
- // This software is provided by the copyright holders and contributors "as is" and
 
- // any express or implied warranties, including, but not limited to, the implied
 
- // warranties of merchantability and fitness for a particular purpose are disclaimed.
 
- // In no event shall the Intel Corporation or contributors be liable for any direct,
 
- // indirect, incidental, special, exemplary, or consequential damages
 
- // (including, but not limited to, procurement of substitute goods or services;
 
- // loss of use, data, or profits; or business interruption) however caused
 
- // and on any theory of liability, whether in contract, strict liability,
 
- // or tort (including negligence or otherwise) arising in any way out of
 
- // the use of this software, even if advised of the possibility of such damage.
 
- //
 
- //M*/
 
- #ifndef OPENCV_CORE_CVDEF_H
 
- #define OPENCV_CORE_CVDEF_H
 
- //! @addtogroup core_utils
 
- //! @{
 
- #if !defined CV_DOXYGEN && !defined CV_IGNORE_DEBUG_BUILD_GUARD
 
- #if (defined(_MSC_VER) && (defined(DEBUG) || defined(_DEBUG))) || \
 
-     (defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_DEBUG_PEDANTIC))
 
- // Guard to prevent using of binary incompatible binaries / runtimes
 
- // https://github.com/opencv/opencv/pull/9161
 
- #define CV__DEBUG_NS_BEGIN namespace debug_build_guard {
 
- #define CV__DEBUG_NS_END }
 
- namespace cv { namespace debug_build_guard { } using namespace debug_build_guard; }
 
- #endif
 
- #endif
 
- #ifndef CV__DEBUG_NS_BEGIN
 
- #define CV__DEBUG_NS_BEGIN
 
- #define CV__DEBUG_NS_END
 
- #endif
 
- #ifdef __OPENCV_BUILD
 
- #include "cvconfig.h"
 
- #endif
 
- #ifndef __CV_EXPAND
 
- #define __CV_EXPAND(x) x
 
- #endif
 
- #ifndef __CV_CAT
 
- #define __CV_CAT__(x, y) x ## y
 
- #define __CV_CAT_(x, y) __CV_CAT__(x, y)
 
- #define __CV_CAT(x, y) __CV_CAT_(x, y)
 
- #endif
 
- // undef problematic defines sometimes defined by system headers (windows.h in particular)
 
- #undef small
 
- #undef min
 
- #undef max
 
- #undef abs
 
- #undef Complex
 
- #include <limits.h>
 
- #include "opencv2/core/hal/interface.h"
 
- #if defined __ICL
 
- #  define CV_ICC   __ICL
 
- #elif defined __ICC
 
- #  define CV_ICC   __ICC
 
- #elif defined __ECL
 
- #  define CV_ICC   __ECL
 
- #elif defined __ECC
 
- #  define CV_ICC   __ECC
 
- #elif defined __INTEL_COMPILER
 
- #  define CV_ICC   __INTEL_COMPILER
 
- #endif
 
- #ifndef CV_INLINE
 
- #  if defined __cplusplus
 
- #    define CV_INLINE static inline
 
- #  elif defined _MSC_VER
 
- #    define CV_INLINE __inline
 
- #  else
 
- #    define CV_INLINE static
 
- #  endif
 
- #endif
 
- #if defined CV_DISABLE_OPTIMIZATION || (defined CV_ICC && !defined CV_ENABLE_UNROLLED)
 
- #  define CV_ENABLE_UNROLLED 0
 
- #else
 
- #  define CV_ENABLE_UNROLLED 1
 
- #endif
 
- #ifdef __GNUC__
 
- #  define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x)))
 
- #elif defined _MSC_VER
 
- #  define CV_DECL_ALIGNED(x) __declspec(align(x))
 
- #else
 
- #  define CV_DECL_ALIGNED(x)
 
- #endif
 
- /* CPU features and intrinsics support */
 
- #define CV_CPU_NONE             0
 
- #define CV_CPU_MMX              1
 
- #define CV_CPU_SSE              2
 
- #define CV_CPU_SSE2             3
 
- #define CV_CPU_SSE3             4
 
- #define CV_CPU_SSSE3            5
 
- #define CV_CPU_SSE4_1           6
 
- #define CV_CPU_SSE4_2           7
 
- #define CV_CPU_POPCNT           8
 
- #define CV_CPU_FP16             9
 
- #define CV_CPU_AVX              10
 
- #define CV_CPU_AVX2             11
 
- #define CV_CPU_FMA3             12
 
- #define CV_CPU_AVX_512F         13
 
- #define CV_CPU_AVX_512BW        14
 
- #define CV_CPU_AVX_512CD        15
 
- #define CV_CPU_AVX_512DQ        16
 
- #define CV_CPU_AVX_512ER        17
 
- #define CV_CPU_AVX_512IFMA512   18
 
- #define CV_CPU_AVX_512PF        19
 
- #define CV_CPU_AVX_512VBMI      20
 
- #define CV_CPU_AVX_512VL        21
 
- #define CV_CPU_NEON   100
 
- #define CV_CPU_VSX 200
 
- // when adding to this list remember to update the following enum
 
- #define CV_HARDWARE_MAX_FEATURE 255
 
- /** @brief Available CPU features.
 
- */
 
- enum CpuFeatures {
 
-     CPU_MMX             = 1,
 
-     CPU_SSE             = 2,
 
-     CPU_SSE2            = 3,
 
-     CPU_SSE3            = 4,
 
-     CPU_SSSE3           = 5,
 
-     CPU_SSE4_1          = 6,
 
-     CPU_SSE4_2          = 7,
 
-     CPU_POPCNT          = 8,
 
-     CPU_FP16            = 9,
 
-     CPU_AVX             = 10,
 
-     CPU_AVX2            = 11,
 
-     CPU_FMA3            = 12,
 
-     CPU_AVX_512F        = 13,
 
-     CPU_AVX_512BW       = 14,
 
-     CPU_AVX_512CD       = 15,
 
-     CPU_AVX_512DQ       = 16,
 
-     CPU_AVX_512ER       = 17,
 
-     CPU_AVX_512IFMA512  = 18,
 
-     CPU_AVX_512PF       = 19,
 
-     CPU_AVX_512VBMI     = 20,
 
-     CPU_AVX_512VL       = 21,
 
-     CPU_NEON            = 100,
 
-     CPU_VSX             = 200
 
- };
 
- #include "cv_cpu_dispatch.h"
 
- /* fundamental constants */
 
- #define CV_PI   3.1415926535897932384626433832795
 
- #define CV_2PI  6.283185307179586476925286766559
 
- #define CV_LOG2 0.69314718055994530941723212145818
 
- #if defined __ARM_FP16_FORMAT_IEEE \
 
-     && !defined __CUDACC__
 
- #  define CV_FP16_TYPE 1
 
- #else
 
- #  define CV_FP16_TYPE 0
 
- #endif
 
- typedef union Cv16suf
 
- {
 
-     short i;
 
- #if CV_FP16_TYPE
 
-     __fp16 h;
 
- #endif
 
-     struct _fp16Format
 
-     {
 
-         unsigned int significand : 10;
 
-         unsigned int exponent    : 5;
 
-         unsigned int sign        : 1;
 
-     } fmt;
 
- }
 
- Cv16suf;
 
- typedef union Cv32suf
 
- {
 
-     int i;
 
-     unsigned u;
 
-     float f;
 
-     struct _fp32Format
 
-     {
 
-         unsigned int significand : 23;
 
-         unsigned int exponent    : 8;
 
-         unsigned int sign        : 1;
 
-     } fmt;
 
- }
 
- Cv32suf;
 
- typedef union Cv64suf
 
- {
 
-     int64 i;
 
-     uint64 u;
 
-     double f;
 
- }
 
- Cv64suf;
 
- #define OPENCV_ABI_COMPATIBILITY 300
 
- #ifdef __OPENCV_BUILD
 
- #  define DISABLE_OPENCV_24_COMPATIBILITY
 
- #endif
 
- #if (defined _WIN32 || defined WINCE || defined __CYGWIN__) && defined CVAPI_EXPORTS
 
- #  define CV_EXPORTS __declspec(dllexport)
 
- #elif defined __GNUC__ && __GNUC__ >= 4
 
- #  define CV_EXPORTS __attribute__ ((visibility ("default")))
 
- #else
 
- #  define CV_EXPORTS
 
- #endif
 
- #ifndef CV_DEPRECATED
 
- #  if defined(__GNUC__)
 
- #    define CV_DEPRECATED __attribute__ ((deprecated))
 
- #  elif defined(_MSC_VER)
 
- #    define CV_DEPRECATED __declspec(deprecated)
 
- #  else
 
- #    define CV_DEPRECATED
 
- #  endif
 
- #endif
 
- #ifndef CV_EXTERN_C
 
- #  ifdef __cplusplus
 
- #    define CV_EXTERN_C extern "C"
 
- #  else
 
- #    define CV_EXTERN_C
 
- #  endif
 
- #endif
 
- /* special informative macros for wrapper generators */
 
- #define CV_EXPORTS_W CV_EXPORTS
 
- #define CV_EXPORTS_W_SIMPLE CV_EXPORTS
 
- #define CV_EXPORTS_AS(synonym) CV_EXPORTS
 
- #define CV_EXPORTS_W_MAP CV_EXPORTS
 
- #define CV_IN_OUT
 
- #define CV_OUT
 
- #define CV_PROP
 
- #define CV_PROP_RW
 
- #define CV_WRAP
 
- #define CV_WRAP_AS(synonym)
 
- /****************************************************************************************\
 
- *                                  Matrix type (Mat)                                     *
 
- \****************************************************************************************/
 
- #define CV_MAT_CN_MASK          ((CV_CN_MAX - 1) << CV_CN_SHIFT)
 
- #define CV_MAT_CN(flags)        ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)
 
- #define CV_MAT_TYPE_MASK        (CV_DEPTH_MAX*CV_CN_MAX - 1)
 
- #define CV_MAT_TYPE(flags)      ((flags) & CV_MAT_TYPE_MASK)
 
- #define CV_MAT_CONT_FLAG_SHIFT  14
 
- #define CV_MAT_CONT_FLAG        (1 << CV_MAT_CONT_FLAG_SHIFT)
 
- #define CV_IS_MAT_CONT(flags)   ((flags) & CV_MAT_CONT_FLAG)
 
- #define CV_IS_CONT_MAT          CV_IS_MAT_CONT
 
- #define CV_SUBMAT_FLAG_SHIFT    15
 
- #define CV_SUBMAT_FLAG          (1 << CV_SUBMAT_FLAG_SHIFT)
 
- #define CV_IS_SUBMAT(flags)     ((flags) & CV_MAT_SUBMAT_FLAG)
 
- /** Size of each channel item,
 
-    0x8442211 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */
 
- #define CV_ELEM_SIZE1(type) \
 
-     ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15)
 
- /** 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */
 
- #define CV_ELEM_SIZE(type) \
 
-     (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))
 
- #ifndef MIN
 
- #  define MIN(a,b)  ((a) > (b) ? (b) : (a))
 
- #endif
 
- #ifndef MAX
 
- #  define MAX(a,b)  ((a) < (b) ? (b) : (a))
 
- #endif
 
- /****************************************************************************************\
 
- *                                    static analysys                                     *
 
- \****************************************************************************************/
 
- // In practice, some macro are not processed correctly (noreturn is not detected).
 
- // We need to use simplified definition for them.
 
- #ifndef CV_STATIC_ANALYSIS
 
- # if defined(__KLOCWORK__) || defined(__clang_analyzer__) || defined(__COVERITY__)
 
- #   define CV_STATIC_ANALYSIS
 
- # endif
 
- #endif
 
- /****************************************************************************************\
 
- *                                    Thread sanitizer                                    *
 
- \****************************************************************************************/
 
- #ifndef CV_THREAD_SANITIZER
 
- # if defined(__has_feature)
 
- #   if __has_feature(thread_sanitizer)
 
- #     define CV_THREAD_SANITIZER
 
- #   endif
 
- # endif
 
- #endif
 
- /****************************************************************************************\
 
- *          exchange-add operation for atomic operations on reference counters            *
 
- \****************************************************************************************/
 
- #ifdef CV_XADD
 
-   // allow to use user-defined macro
 
- #elif defined __GNUC__ || defined __clang__
 
- #  if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__ && !defined(__CUDACC__)
 
- #    ifdef __ATOMIC_ACQ_REL
 
- #      define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL)
 
- #    else
 
- #      define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), delta, 4)
 
- #    endif
 
- #  else
 
- #    if defined __ATOMIC_ACQ_REL && !defined __clang__
 
-        // version for gcc >= 4.7
 
- #      define CV_XADD(addr, delta) (int)__atomic_fetch_add((unsigned*)(addr), (unsigned)(delta), __ATOMIC_ACQ_REL)
 
- #    else
 
- #      define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta))
 
- #    endif
 
- #  endif
 
- #elif defined _MSC_VER && !defined RC_INVOKED
 
- #  include <intrin.h>
 
- #  define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta)
 
- #else
 
-    CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; }
 
- #endif
 
- /****************************************************************************************\
 
- *                                  CV_NORETURN attribute                                 *
 
- \****************************************************************************************/
 
- #ifndef CV_NORETURN
 
- #  if defined(__GNUC__)
 
- #    define CV_NORETURN __attribute__((__noreturn__))
 
- #  elif defined(_MSC_VER) && (_MSC_VER >= 1300)
 
- #    define CV_NORETURN __declspec(noreturn)
 
- #  else
 
- #    define CV_NORETURN /* nothing by default */
 
- #  endif
 
- #endif
 
- /****************************************************************************************\
 
- *                                    C++ 11                                              *
 
- \****************************************************************************************/
 
- #ifndef CV_CXX11
 
- #  if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
 
- #    define CV_CXX11 1
 
- #  endif
 
- #else
 
- #  if CV_CXX11 == 0
 
- #    undef CV_CXX11
 
- #  endif
 
- #endif
 
- /****************************************************************************************\
 
- *                                    C++ Move semantics                                  *
 
- \****************************************************************************************/
 
- #ifndef CV_CXX_MOVE_SEMANTICS
 
- #  if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(_MSC_VER) && _MSC_VER >= 1600)
 
- #    define CV_CXX_MOVE_SEMANTICS 1
 
- #  elif defined(__clang)
 
- #    if __has_feature(cxx_rvalue_references)
 
- #      define CV_CXX_MOVE_SEMANTICS 1
 
- #    endif
 
- #  endif
 
- #else
 
- #  if CV_CXX_MOVE_SEMANTICS == 0
 
- #    undef CV_CXX_MOVE_SEMANTICS
 
- #  endif
 
- #endif
 
- /****************************************************************************************\
 
- *                                    C++11 std::array                                    *
 
- \****************************************************************************************/
 
- #ifndef CV_CXX_STD_ARRAY
 
- #  if __cplusplus >= 201103L
 
- #    define CV_CXX_STD_ARRAY 1
 
- #    include <array>
 
- #  endif
 
- #else
 
- #  if CV_CXX_STD_ARRAY == 0
 
- #    undef CV_CXX_STD_ARRAY
 
- #  endif
 
- #endif
 
- //! @}
 
- #endif // OPENCV_CORE_CVDEF_H
 
 
  |