cxmisc.h revision 6acb9a7ea3d7564944e12cbc73a857b88c1301ee
16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M/////////////////////////////////////////////////////////////////////////////////////// 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// By downloading, copying, installing or using the software you agree to this license. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// If you do not agree to this license, do not download, install, 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// copy or use the software. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Intel License Agreement 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// For Open Source Computer Vision Library 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners. 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification, 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met: 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's of source code must retain the above copyright notice, 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer. 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's in binary form must reproduce the above copyright notice, 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer in the documentation 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and/or other materials provided with the distribution. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * The name of Intel Corporation may not be used to endorse or promote products 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// derived from this software without specific prior written permission. 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed. 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct, 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services; 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability, 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage. 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/ 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* The header is mostly for internal use and it is likely to change. 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn It contains some macro definitions that are used in cxcore, cv, cvaux 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn and, probably, other libraries. If you need some of this functionality, 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the safe way is to copy it into your code and rename the macros. 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CXCORE_MISC_H_ 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CXCORE_MISC_H_ 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef HAVE_CONFIG_H 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include "cvconfig.h" 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <limits.h> 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef _OPENMP 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "omp.h" 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Compile-time tuning parameters * 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */ 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_INLINE_MAT_OP_SIZE 10 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximal linear size of matrix to allocate it on stack. */ 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_LOCAL_MAT_SIZE 32 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximal size of local memory storage */ 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_LOCAL_SIZE \ 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double)) 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default image row align (in bytes) */ 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEFAULT_IMAGE_ROW_ALIGN 4 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* matrices are continuous by default */ 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEFAULT_MAT_ROW_ALIGN 1 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximum size of dynamic memory buffer. 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAlloc reports an error if a larger block is requested. */ 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_ALLOC_SIZE (((size_t)1 << (sizeof(size_t)*8-2))) 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* the alignment of all the allocated buffers */ 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MALLOC_ALIGN 32 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default alignment for dynamic data strucutures, resided in storages. */ 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STRUCT_ALIGN ((int)sizeof(double)) 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default storage block size */ 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_BLOCK_SIZE ((1<<16) - 128) 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default memory block for sparse array elements */ 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SPARSE_MAT_BLOCK (1<<12) 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* initial hash table size */ 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SPARSE_HASH_SIZE0 (1<<10) 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximal average node_count/hash_size ratio beyond which hash table is resized */ 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SPARSE_HASH_RATIO 3 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* max length of strings */ 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_STRLEN 1024 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* maximum possible number of threads in parallel implementations */ 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef _OPENMP 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_THREADS 128 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_THREADS 1 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 0 /*def CV_CHECK_FOR_NANS*/ 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_CHECK_NANS( arr ) cvCheckArray((arr)) 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_CHECK_NANS( arr ) 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Common declarations * 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* get alloca declaration */ 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __GNUC__ 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #undef alloca 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define alloca __builtin_alloca 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined WIN32 || defined WIN64 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined _MSC_VER || defined __BORLANDC__ 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <malloc.h> 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined HAVE_ALLOCA_H 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <alloca.h> 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined HAVE_ALLOCA 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <stdlib.h> 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #error 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* ! DO NOT make it an inline function */ 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN ) 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined _MSC_VER || defined __BORLANDC__ 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_BIG_INT(n) n##I64 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_BIG_UINT(n) n##UI64 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_BIG_INT(n) n##LL 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_BIG_UINT(n) n##ULL 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMPL CV_EXTERN_C 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DBG_BREAK() { volatile int* crashMe = 0; *crashMe = 0; } 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* default step, set in case of continuous data 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn to work around checks for valid step in some ipp functions */ 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STUB_STEP (1 << 30) 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SIZEOF_FLOAT ((int)sizeof(float)) 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SIZEOF_SHORT ((int)sizeof(short)) 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ORIGIN_TL 0 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ORIGIN_BL 1 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* IEEE754 constants and macros */ 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_POS_INF 0x7f800000 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEG_INF 0x807fffff /* CV_TOGGLE_FLT(0xff800000) */ 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_1F 0x3f800000 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0)) 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TOGGLE_DBL(x) \ 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0)) 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOP(a) (a) 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ADD(a, b) ((a) + (b)) 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SUB(a, b) ((a) - (b)) 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MUL(a, b) ((a) * (b)) 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_AND(a, b) ((a) & (b)) 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_OR(a, b) ((a) | (b)) 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_XOR(a, b) ((a) ^ (b)) 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ANDN(a, b) (~(a) & (b)) 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ORN(a, b) (~(a) | (b)) 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SQR(a) ((a) * (a)) 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LT(a, b) ((a) < (b)) 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LE(a, b) ((a) <= (b)) 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EQ(a, b) ((a) == (b)) 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NE(a, b) ((a) != (b)) 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GT(a, b) ((a) > (b)) 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GE(a, b) ((a) >= (b)) 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NONZERO(a) ((a) != 0) 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NONZERO_FLT(a) (((a)+(a)) != 0) 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* general-purpose saturation macros */ 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_8U(t) (uchar)(!((t) & ~255) ? (t) : (t) > 0 ? 255 : 0) 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_8S(t) (schar)(!(((t)+128) & ~255) ? (t) : (t) > 0 ? 127 : -128) 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) > 0 ? 65535 : 0) 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) > 0 ? 32767 : -32768) 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_32S(t) (int)(t) 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_64S(t) (int64)(t) 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_32F(t) (float)(t) 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CAST_64F(t) (double)(t) 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PASTE2(a,b) a##b 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PASTE(a,b) CV_PASTE2(a,b) 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_EMPTY 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAKE_STR(a) #a 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEFINE_MASK \ 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float maskTab[2]; maskTab[0] = 0.f; maskTab[1] = 1.f; 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ANDMASK( m, x ) ((x) & (((m) == 0) - 1)) 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* (x) * ((m) == 1 ? 1.f : (m) == 0 ? 0.f : <ERR> */ 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MULMASK( m, x ) (maskTab[(m) != 0]*(x)) 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* (x) * ((m) == -1 ? 1.f : (m) == 0 ? 0.f : <ERR> */ 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MULMASK1( m, x ) (maskTab[(m)+1]*(x)) 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ZERO_OBJ(x) memset((x), 0, sizeof(*(x))) 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0]))) 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_UN_ENTRY_C1(worktype) \ 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn worktype s0 = scalar[0] 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_UN_ENTRY_C2(worktype) \ 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn worktype s0 = scalar[0], s1 = scalar[1] 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_UN_ENTRY_C3(worktype) \ 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn worktype s0 = scalar[0], s1 = scalar[1], s2 = scalar[2] 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_UN_ENTRY_C4(worktype) \ 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn worktype s0 = scalar[0], s1 = scalar[1], s2 = scalar[2], s3 = scalar[3] 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvUnsupportedFormat "Unsupported format" 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void* cvAlignPtr( const void* ptr, int align=32 ) 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (align & (align-1)) == 0 ); 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) ); 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvAlign( int size, int align ) 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (align & (align-1)) == 0 && size < INT_MAX ); 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (size + align - 1) & -align; 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSize cvGetMatSize( const CvMat* mat ) 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size = { mat->width, mat->height }; 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return size; 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DESCALE(x,n) (((x) + (1 << ((n)-1))) >> (n)) 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FLT_TO_FIX(x,n) cvRound((x)*(1<<(n))) 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 0 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* This is a small engine for performing fast division of multiple numbers 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn by the same constant. Most compilers do it too if they know the divisor value 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn at compile-time. The algorithm was taken from Agner Fog's optimization guide 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn at http://www.agner.org/assem */ 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFastDiv 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned delta, scale, divisor; 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFastDiv; 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FAST_DIV_SHIFT 32 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvFastDiv cvFastDiv( int divisor ) 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFastDiv fastdiv; 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( divisor >= 1 ); 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uint64 temp = ((uint64)1 << CV_FAST_DIV_SHIFT)/divisor; 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn fastdiv.divisor = divisor; 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn fastdiv.delta = (unsigned)(((temp & 1) ^ 1) + divisor - 1); 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn fastdiv.scale = (unsigned)((temp + 1) >> 1); 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return fastdiv; 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FAST_DIV( x, fastdiv ) \ 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((int)(((int64)((x)*2 + (int)(fastdiv).delta))*(int)(fastdiv).scale>>CV_FAST_DIV_SHIFT)) 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FAST_UDIV( x, fastdiv ) \ 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((int)(((uint64)((x)*2 + (fastdiv).delta))*(fastdiv).scale>>CV_FAST_DIV_SHIFT)) 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MEMCPY_CHAR( dst, src, len ) \ 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size_t _icv_memcpy_i_, _icv_memcpy_len_ = (len); \ 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* _icv_memcpy_dst_ = (char*)(dst); \ 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* _icv_memcpy_src_ = (const char*)(src); \ 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( _icv_memcpy_i_ = 0; _icv_memcpy_i_ < _icv_memcpy_len_; _icv_memcpy_i_++ ) \ 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_dst_[_icv_memcpy_i_] = _icv_memcpy_src_[_icv_memcpy_i_]; \ 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MEMCPY_INT( dst, src, len ) \ 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size_t _icv_memcpy_i_, _icv_memcpy_len_ = (len); \ 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* _icv_memcpy_dst_ = (int*)(dst); \ 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const int* _icv_memcpy_src_ = (const int*)(src); \ 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( ((size_t)_icv_memcpy_src_&(sizeof(int)-1)) == 0 && \ 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((size_t)_icv_memcpy_dst_&(sizeof(int)-1)) == 0 ); \ 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(_icv_memcpy_i_=0;_icv_memcpy_i_<_icv_memcpy_len_;_icv_memcpy_i_++) \ 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_dst_[_icv_memcpy_i_] = _icv_memcpy_src_[_icv_memcpy_i_]; \ 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MEMCPY_AUTO( dst, src, len ) \ 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size_t _icv_memcpy_i_, _icv_memcpy_len_ = (len); \ 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* _icv_memcpy_dst_ = (char*)(dst); \ 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* _icv_memcpy_src_ = (const char*)(src); \ 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( (_icv_memcpy_len_ & (sizeof(int)-1)) == 0 ) \ 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( ((size_t)_icv_memcpy_src_&(sizeof(int)-1)) == 0 && \ 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((size_t)_icv_memcpy_dst_&(sizeof(int)-1)) == 0 ); \ 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( _icv_memcpy_i_ = 0; _icv_memcpy_i_ < _icv_memcpy_len_; \ 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_i_+=sizeof(int) ) \ 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(int*)(_icv_memcpy_dst_+_icv_memcpy_i_) = \ 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(const int*)(_icv_memcpy_src_+_icv_memcpy_i_); \ 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else \ 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(_icv_memcpy_i_ = 0; _icv_memcpy_i_ < _icv_memcpy_len_; _icv_memcpy_i_++)\ 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_dst_[_icv_memcpy_i_] = _icv_memcpy_src_[_icv_memcpy_i_]; \ 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ZERO_CHAR( dst, len ) \ 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size_t _icv_memcpy_i_, _icv_memcpy_len_ = (len); \ 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* _icv_memcpy_dst_ = (char*)(dst); \ 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( _icv_memcpy_i_ = 0; _icv_memcpy_i_ < _icv_memcpy_len_; _icv_memcpy_i_++ ) \ 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_dst_[_icv_memcpy_i_] = '\0'; \ 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ZERO_INT( dst, len ) \ 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn size_t _icv_memcpy_i_, _icv_memcpy_len_ = (len); \ 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* _icv_memcpy_dst_ = (int*)(dst); \ 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( ((size_t)_icv_memcpy_dst_&(sizeof(int)-1)) == 0 ); \ 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(_icv_memcpy_i_=0;_icv_memcpy_i_<_icv_memcpy_len_;_icv_memcpy_i_++) \ 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _icv_memcpy_dst_[_icv_memcpy_i_] = 0; \ 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Generic implementation of QuickSort algorithm. 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ---------------------------------------------- 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Using this macro user can declare customized sort function that can be much faster 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn than built-in qsort function because of lower overhead on elements 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn comparison and exchange. The macro takes less_than (or LT) argument - a macro or function 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn that takes 2 arguments returns non-zero if the first argument should be before the second 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn one in the sorted sequence and zero otherwise. 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Example: 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Suppose that the task is to sort points by ascending of y coordinates and if 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn y's are equal x's should ascend. 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The code is: 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ------------------------------------------------------------------------------ 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define cmp_pts( pt1, pt2 ) \ 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((pt1).y < (pt2).y || ((pt1).y < (pt2).y && (pt1).x < (pt2).x)) 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn [static] CV_IMPLEMENT_QSORT( icvSortPoints, CvPoint, cmp_pts ) 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ------------------------------------------------------------------------------ 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn After that the function "void icvSortPoints( CvPoint* array, size_t total, int aux );" 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn is available to user. 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn aux is an additional parameter, which can be used when comparing elements. 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The current implementation was derived from *BSD system qsort(): 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Copyright (c) 1992, 1993 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * The Regents of the University of California. All rights reserved. 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Redistribution and use in source and binary forms, with or without 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * modification, are permitted provided that the following conditions 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * are met: 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 1. Redistributions of source code must retain the above copyright 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * notice, this list of conditions and the following disclaimer. 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 2. Redistributions in binary form must reproduce the above copyright 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * notice, this list of conditions and the following disclaimer in the 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * documentation and/or other materials provided with the distribution. 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 3. All advertising materials mentioning features or use of this software 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * must display the following acknowledgement: 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * This product includes software developed by the University of 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * California, Berkeley and its contributors. 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 4. Neither the name of the University nor the names of its contributors 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * may be used to endorse or promote products derived from this software 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * without specific prior written permission. 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * SUCH DAMAGE. 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMPLEMENT_QSORT_EX( func_name, T, LT, user_data_type ) \ 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid func_name( T *array, size_t total, user_data_type aux ) \ 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int isort_thresh = 7; \ 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T t; \ 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int sp = 0; \ 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct \ 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T *lb; \ 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T *ub; \ 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[48]; \ 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn aux = aux; \ 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( total <= 1 ) \ 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return; \ 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[0].lb = array; \ 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[0].ub = array + (total - 1); \ 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( sp >= 0 ) \ 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* left = stack[sp].lb; \ 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* right = stack[sp--].ub; \ 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;;) \ 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i, n = (int)(right - left) + 1, m; \ 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* ptr; \ 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* ptr2; \ 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( n <= isort_thresh ) \ 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn insert_sort: \ 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ptr = left + 1; ptr <= right; ptr++ ) \ 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--) \ 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( ptr2[0], ptr2[-1], t ); \ 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; \ 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else \ 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* left0; \ 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* left1; \ 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* right0; \ 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* right1; \ 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* pivot; \ 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* a; \ 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* b; \ 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn T* c; \ 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int swap_cnt = 0; \ 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left0 = left; \ 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right0 = right; \ 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pivot = left + (n/2); \ 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( n > 40 ) \ 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int d = n / 8; \ 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a = left, b = left + d, c = left + 2*d; \ 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a = pivot - d, b = pivot, c = pivot + d; \ 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a = right - 2*d, b = right - d, c = right; \ 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a = left, b = pivot, c = right; \ 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( pivot != left0 ) \ 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( *pivot, *left0, t ); \ 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn pivot = left0; \ 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = left1 = left0 + 1; \ 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right = right1 = right0; \ 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for(;;) \ 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( left <= right && !LT(*pivot, *left) ) \ 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !LT(*left, *pivot) ) \ 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( left > left1 ) \ 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( *left1, *left, t ); \ 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn swap_cnt = 1; \ 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left1++; \ 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left++; \ 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( left <= right && !LT(*right, *pivot) ) \ 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !LT(*pivot, *right) ) \ 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( right < right1 ) \ 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( *right1, *right, t ); \ 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn swap_cnt = 1; \ 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right1--; \ 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right--; \ 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( left > right ) \ 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; \ 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( *left, *right, t ); \ 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn swap_cnt = 1; \ 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left++; \ 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn right--; \ 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( swap_cnt == 0 ) \ 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = left0, right = right0; \ 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn goto insert_sort; \ 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn n = MIN( (int)(left1 - left0), (int)(left - left1) ); \ 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < n; i++ ) \ 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( left0[i], left[i-n], t ); \ 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn n = MIN( (int)(right0 - right1), (int)(right1 - right) ); \ 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for( i = 0; i < n; i++ ) \ 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SWAP( left[i], right0[i-n+1], t ); \ 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn n = (int)(left - left1); \ 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m = (int)(right1 - right); \ 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( n > 1 ) \ 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( m > 1 ) \ 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( n > m ) \ 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[++sp].lb = left0; \ 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[sp].ub = left0 + n - 1; \ 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = right0 - m + 1, right = right0; \ 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else \ 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[++sp].lb = right0 - m + 1; \ 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn stack[sp].ub = right0; \ 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = left0, right = left0 + n - 1; \ 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else \ 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = left0, right = left0 + n - 1; \ 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( m > 1 ) \ 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn left = right0 - m + 1, right = right0; \ 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else \ 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn break; \ 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMPLEMENT_QSORT( func_name, T, cmp ) \ 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int ) 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Structures and macros for integration with IPP * 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* IPP-compatible return codes */ 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvStatus 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADMEMBLOCK_ERR = -113, 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_INPLACE_NOT_SUPPORTED_ERR= -112, 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNMATCHED_ROI_ERR = -111, 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NOTFOUND_ERR = -110, 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADCONVERGENCE_ERR = -109, 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADDEPTH_ERR = -107, 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADROI_ERR = -106, 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADHEADER_ERR = -105, 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNMATCHED_FORMATS_ERR = -104, 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNSUPPORTED_COI_ERR = -103, 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNSUPPORTED_CHANNELS_ERR = -102, 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNSUPPORTED_DEPTH_ERR = -101, 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_UNSUPPORTED_FORMAT_ERR = -100, 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADARG_ERR = -49, //ipp comp 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NOTDEFINED_ERR = -48, //ipp comp 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADCHANNELS_ERR = -47, //ipp comp 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADRANGE_ERR = -44, //ipp comp 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADSTEP_ERR = -29, //ipp comp 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADFLAG_ERR = -12, 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_DIV_BY_ZERO_ERR = -11, //ipp comp 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADCOEF_ERR = -10, 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADFACTOR_ERR = -7, 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADPOINT_ERR = -6, 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADSCALE_ERR = -4, 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_OUTOFMEM_ERR = -3, 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NULLPTR_ERR = -2, 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_BADSIZE_ERR = -1, 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NO_ERR = 0, 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_OK = CV_NO_ERR 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus; 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ERROR_FROM_STATUS( result ) \ 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( cvErrorFromIppStatus( result ), "OpenCV function failed" ) 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPPI_CALL( Func ) \ 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvStatus ippi_call_result; \ 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ippi_call_result = Func; \ 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( ippi_call_result < 0 ) \ 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR_FROM_STATUS( (ippi_call_result)); \ 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_NONE 0 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_OPTCV 1 /* custom "emerged" ippopencv library */ 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_IPPCV 2 /* IPP: computer vision */ 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_IPPI 3 /* IPP: image processing */ 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_IPPS 4 /* IPP: signal processing */ 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_IPPVM 5 /* IPP: vector math functions */ 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_IPPCC 6 /* IPP: color space conversion */ 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_MKL 8 /* Intel Math Kernel Library */ 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGIN_MAX 16 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGINS1(lib1) ((lib1)&15) 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGINS2(lib1,lib2) (((lib1)&15)|(((lib2)&15)<<4)) 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PLUGINS3(lib1,lib2,lib3) (((lib1)&15)|(((lib2)&15)<<4)|(((lib2)&15)<<8)) 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NOTHROW throw() 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef IPCVAPI 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPCVAPI(type,declspec,name,args) \ 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* function pointer */ \ 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn typedef type (declspec* name##_t) args; \ 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn extern name##_t name##_p; \ 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn type declspec name args; 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPCVAPI_EX(type,name,ipp_name,ipp_search_modules,args) \ 6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IPCVAPI(type,CV_STDCALL,name,args) 6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPCVAPI_C_EX(type,name,ipp_name,ipp_search_modules,args)\ 6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IPCVAPI(type,CV_CDECL,name,args) 6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef IPCVAPI_IMPL 6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPCVAPI_IMPL(type,name,args,arg_names) \ 6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static type CV_STDCALL name##_f args; \ 6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn name##_t name##_p = name##_f; \ 6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn type CV_STDCALL name args { return name##_p arg_names; } \ 6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static type CV_STDCALL name##_f args 6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* IPP types' enumeration */ 6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvDataType { 6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv1u, 6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv8u, cv8s, 6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv16u, cv16s, cv16sc, 6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv32u, cv32s, cv32sc, 6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv32f, cv32fc, 6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv64u, cv64s, cv64sc, 6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cv64f, cv64fc 6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvDataType; 6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvHintAlgorithm { 6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAlgHintNone, 6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAlgHintFast, 6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvAlgHintAccurate 6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvHintAlgorithm; 6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvCmpOp { 7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCmpLess, 7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCmpLessEq, 7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCmpEq, 7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCmpGreaterEq, 7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCmpGreater 7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvCmpOp; 7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFuncTable 7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* fn_2d[CV_DEPTH_MAX]; 7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFuncTable; 7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBigFuncTable 7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* fn_2d[CV_DEPTH_MAX*CV_CN_MAX]; 7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBigFuncTable; 7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBtFuncTable 7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* fn_2d[33]; 7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBtFuncTable; 7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_1A)(void* arr, int step, CvSize size); 7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_1A1P)(void* arr, int step, CvSize size, void* param); 7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_1A1P1I)(void* arr, int step, CvSize size, 7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param, int flag); 7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_1A1P)( void* arr, int step, CvSize size, 7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cn, int coi, void* param ); 7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_1A1P)( void* arr, int step, CvSize size, 7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cn, int coi, void* param ); 7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_1A2P)( void* arr, int step, CvSize size, 7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2 ); 7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_1A2P)( void* arr, int step, 7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, int coi, 7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2 ); 7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_1A4P)( void* arr, int step, CvSize size, 7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2, 7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param3, void* param4 ); 7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_1A4P)( void* arr, int step, 7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, int coi, 7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2, 7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param3, void* param4 ); 7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_2A)( void* arr0, int step0, 7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, CvSize size ); 7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_2A1P)( void* arr0, int step0, 7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, void* param ); 7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_2A1P)( void* arr0, int step0, 7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, 7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int coi, void* param ); 7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_2A1P)( void* arr0, int step0, 7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, 7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int coi, void* param ); 7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_2A2P)( void* arr0, int step0, 7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, CvSize size, 7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2 ); 7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_2A2P)( void* arr0, int step0, 7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, int coi, 7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2 ); 7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_2A1P1I)( void* arr0, int step0, 7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, CvSize size, 7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param, int flag ); 7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_2A4P)( void* arr0, int step0, 7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, CvSize size, 7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2, 7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param3, void* param4 ); 7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_2A4P)( void* arr0, int step0, 7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, CvSize size, 7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cn, int coi, 7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param1, void* param2, 7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* param3, void* param4 ); 7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_3A)( void* arr0, int step0, 7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr2, int step2, CvSize size ); 8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_3A1P)( void* arr0, int step0, 8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr2, int step2, 8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, void* param ); 8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_3A1I)( void* arr0, int step0, 8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr2, int step2, 8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int flag ); 8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2DnC_3A1P)( void* arr0, int step0, 8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr2, int step2, 8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size, int cn, 8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int coi, void* param ); 8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc2D_4A)( void* arr0, int step0, 8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr1, int step1, 8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr2, int step2, 8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* arr3, int step3, 8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size ); 8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL *CvFunc0D)( const void* src, void* dst, int param ); 8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEF_INIT_FUNC_TAB_2D( FUNCNAME, FLAG ) \ 8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic void icvInit##FUNCNAME##FLAG##Table( CvFuncTable* tab ) \ 8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( tab ); \ 8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8U] = (void*)icv##FUNCNAME##_8u_##FLAG; \ 8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8S] = (void*)icv##FUNCNAME##_8s_##FLAG; \ 8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16U] = (void*)icv##FUNCNAME##_16u_##FLAG; \ 8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16S] = (void*)icv##FUNCNAME##_16s_##FLAG; \ 8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32S] = (void*)icv##FUNCNAME##_32s_##FLAG; \ 8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32F] = (void*)icv##FUNCNAME##_32f_##FLAG; \ 8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64F] = (void*)icv##FUNCNAME##_64f_##FLAG; \ 8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEF_INIT_BIG_FUNC_TAB_2D( FUNCNAME, FLAG ) \ 8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic void icvInit##FUNCNAME##FLAG##Table( CvBigFuncTable* tab ) \ 8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( tab ); \ 8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8UC1] = (void*)icv##FUNCNAME##_8u_C1##FLAG; \ 8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8UC2] = (void*)icv##FUNCNAME##_8u_C2##FLAG; \ 8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8UC3] = (void*)icv##FUNCNAME##_8u_C3##FLAG; \ 8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8UC4] = (void*)icv##FUNCNAME##_8u_C4##FLAG; \ 8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8SC1] = (void*)icv##FUNCNAME##_8s_C1##FLAG; \ 8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8SC2] = (void*)icv##FUNCNAME##_8s_C2##FLAG; \ 8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8SC3] = (void*)icv##FUNCNAME##_8s_C3##FLAG; \ 8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8SC4] = (void*)icv##FUNCNAME##_8s_C4##FLAG; \ 8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16UC1] = (void*)icv##FUNCNAME##_16u_C1##FLAG; \ 8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16UC2] = (void*)icv##FUNCNAME##_16u_C2##FLAG; \ 8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16UC3] = (void*)icv##FUNCNAME##_16u_C3##FLAG; \ 8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16UC4] = (void*)icv##FUNCNAME##_16u_C4##FLAG; \ 8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16SC1] = (void*)icv##FUNCNAME##_16s_C1##FLAG; \ 8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16SC2] = (void*)icv##FUNCNAME##_16s_C2##FLAG; \ 8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16SC3] = (void*)icv##FUNCNAME##_16s_C3##FLAG; \ 8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16SC4] = (void*)icv##FUNCNAME##_16s_C4##FLAG; \ 8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32SC1] = (void*)icv##FUNCNAME##_32s_C1##FLAG; \ 8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32SC2] = (void*)icv##FUNCNAME##_32s_C2##FLAG; \ 8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32SC3] = (void*)icv##FUNCNAME##_32s_C3##FLAG; \ 8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32SC4] = (void*)icv##FUNCNAME##_32s_C4##FLAG; \ 8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32FC1] = (void*)icv##FUNCNAME##_32f_C1##FLAG; \ 8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32FC2] = (void*)icv##FUNCNAME##_32f_C2##FLAG; \ 8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32FC3] = (void*)icv##FUNCNAME##_32f_C3##FLAG; \ 8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32FC4] = (void*)icv##FUNCNAME##_32f_C4##FLAG; \ 8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64FC1] = (void*)icv##FUNCNAME##_64f_C1##FLAG; \ 8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64FC2] = (void*)icv##FUNCNAME##_64f_C2##FLAG; \ 8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64FC3] = (void*)icv##FUNCNAME##_64f_C3##FLAG; \ 8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64FC4] = (void*)icv##FUNCNAME##_64f_C4##FLAG; \ 8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEF_INIT_FUNC_TAB_0D( FUNCNAME ) \ 8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic void icvInit##FUNCNAME##Table( CvFuncTable* tab ) \ 8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8U] = (void*)icv##FUNCNAME##_8u; \ 8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_8S] = (void*)icv##FUNCNAME##_8s; \ 8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16U] = (void*)icv##FUNCNAME##_16u; \ 8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_16S] = (void*)icv##FUNCNAME##_16s; \ 8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32S] = (void*)icv##FUNCNAME##_32s; \ 8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_32F] = (void*)icv##FUNCNAME##_32f; \ 8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn tab->fn_2d[CV_64F] = (void*)icv##FUNCNAME##_64f; \ 8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEF_INIT_FUNC_TAB_1D CV_DEF_INIT_FUNC_TAB_0D 8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEF_INIT_PIXSIZE_TAB_2D( FUNCNAME, FLAG ) \ 8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic void icvInit##FUNCNAME##FLAG##Table( CvBtFuncTable* table ) \ 8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[1] = (void*)icv##FUNCNAME##_8u_C1##FLAG; \ 9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[2] = (void*)icv##FUNCNAME##_8u_C2##FLAG; \ 9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[3] = (void*)icv##FUNCNAME##_8u_C3##FLAG; \ 9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[4] = (void*)icv##FUNCNAME##_16u_C2##FLAG; \ 9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[6] = (void*)icv##FUNCNAME##_16u_C3##FLAG; \ 9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[8] = (void*)icv##FUNCNAME##_32s_C2##FLAG; \ 9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[12] = (void*)icv##FUNCNAME##_32s_C3##FLAG; \ 9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[16] = (void*)icv##FUNCNAME##_64s_C2##FLAG; \ 9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[24] = (void*)icv##FUNCNAME##_64s_C3##FLAG; \ 9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn table->fn_2d[32] = (void*)icv##FUNCNAME##_64s_C4##FLAG; \ 9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GET_FUNC_PTR( func, table_entry ) \ 9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn func = (table_entry); \ 9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn \ 9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !func ) \ 9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_ERROR( CV_StsUnsupportedFormat, "" ) 9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CXCORE_MISC_H_*/ 919