| 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#endiftypedef 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
 |