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#ifndef _CXCORE_TYPES_H_ 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CXCORE_TYPES_H_ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if !defined _CRT_SECURE_NO_DEPRECATE && _MSC_VER > 1300 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio 2005 warnings */ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef SKIP_INCLUDES 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <assert.h> 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <stdlib.h> 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <string.h> 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <float.h> 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined __ICL 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_ICC __ICL 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #elif defined __ICC 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_ICC __ICC 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #elif defined __ECL 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_ICC __ECL 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #elif defined __ECC 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_ICC __ECC 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined WIN32 && (!defined WIN64 || defined EM64T) && \ 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (_MSC_VER >= 1400 || defined CV_ICC) \ 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn || (defined __SSE2__ && defined __GNUC__ && __GNUC__ >= 4) 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <emmintrin.h> 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_SSE2 1 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_SSE2 0 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined __BORLANDC__ 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <fastmath.h> 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #elif defined WIN64 && !defined EM64T && defined CV_ICC 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <mathimf.h> 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <math.h> 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef HAVE_IPL 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifndef __IPL_H__ 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #if defined WIN32 || defined WIN64 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <ipl.h> 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #include <ipl/ipl.h> 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #elif defined __IPL_H__ 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define HAVE_IPL 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif // SKIP_INCLUDES 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_CDECL __cdecl 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_STDCALL __stdcall 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_CDECL 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_STDCALL 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef CV_EXTERN_C 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef __cplusplus 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXTERN_C extern "C" 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_DEFAULT(val) = val 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXTERN_C 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_DEFAULT(val) 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef CV_EXTERN_C_FUNCPTR 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #ifdef __cplusplus 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXTERN_C_FUNCPTR(x) extern "C" { typedef x; } 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #else 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXTERN_C_FUNCPTR(x) typedef x 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #endif 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef CV_INLINE 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined __cplusplus 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_INLINE inline 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif (defined WIN32 || defined WIN64) && !defined __GNUC__ 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_INLINE __inline 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_INLINE static 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /* CV_INLINE */ 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if (defined WIN32 || defined WIN64) && defined CVAPI_EXPORTS 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXPORTS __declspec(dllexport) 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_EXPORTS 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef CVAPI 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined _MSC_VER || defined __BORLANDC__ 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef __int64 int64; 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned __int64 uint64; 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef long long int64; 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned long long uint64; 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef HAVE_IPL 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned char uchar; 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned short ushort; 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef signed char schar; 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* CvArr* is used to pass arbitrary 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * array-like data structures 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * into functions where the particular 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * array type is recognized at runtime: 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void CvArr; 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef union Cv32suf 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned u; 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float f; 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCv32suf; 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef union Cv64suf 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int64 i; 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uint64 u; 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double f; 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCv64suf; 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Common macros and inline functions * 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PI 3.1415926535897932384626433832795 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LOG2 0.69314718055994530941723212145818 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t)) 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef MIN 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define MIN(a,b) ((a) > (b) ? (b) : (a)) 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef MAX 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define MAX(a,b) ((a) < (b) ? (b) : (a)) 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* min & max without jumps */ 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMIN(a, b) ((a) ^ (((a)^(b)) & (((a) < (b)) - 1))) 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMAX(a, b) ((a) ^ (((a)^(b)) & (((a) > (b)) - 1))) 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* absolute value without jumps */ 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef __cplusplus 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IABS(a) (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0)) 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IABS(a) abs(a) 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CMP(a,b) (((a) > (b)) - ((a) < (b))) 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SIGN(a) CV_CMP((a),0) 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvRound( double value ) 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if CV_SSE2 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __m128d t = _mm_load_sd( &value ); 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return _mm_cvtsd_si32(t); 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined WIN32 && !defined WIN64 && defined _MSC_VER 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int t; 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __asm 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn fld value; 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn fistp t; 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return t; 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif (defined HAVE_LRINT) || (defined WIN64 && !defined EM64T && defined CV_ICC) 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (int)lrint(value); 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn the algorithm was taken from Agner Fog's optimization guide 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn at http://www.agner.org/assem 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv64suf temp; 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn temp.f = value + 6755399441055744.0; 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (int)temp.u; 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvFloor( double value ) 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if CV_SSE2 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __m128d t = _mm_load_sd( &value ); 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i = _mm_cvtsd_si32(t); 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return i - _mm_movemask_pd(_mm_cmplt_sd(t,_mm_cvtsi32_sd(t,i))); 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int temp = cvRound(value); 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv32suf diff; 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn diff.f = (float)(value - temp); 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return temp - (diff.i < 0); 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvCeil( double value ) 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if CV_SSE2 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn __m128d t = _mm_load_sd( &value ); 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i = _mm_cvtsd_si32(t); 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i),t)); 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int temp = cvRound(value); 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv32suf diff; 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn diff.f = (float)(temp - value); 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return temp + (diff.i < 0); 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvInvSqrt(value) ((float)(1./sqrt(value))) 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define cvSqrt(value) ((float)sqrt(value)) 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvIsNaN( double value ) 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 1/*defined _MSC_VER || defined __BORLANDC__ 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return _isnan(value); 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined __GNUC__ 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return isnan(value); 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else*/ 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv64suf ieee754; 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ieee754.f = value; 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) + 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((unsigned)ieee754.u != 0) > 0x7ff00000; 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvIsInf( double value ) 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 1/*defined _MSC_VER || defined __BORLANDC__ 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !_finite(value); 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined __GNUC__ 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return isinf(value); 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else*/ 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Cv64suf ieee754; 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ieee754.f = value; 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 && 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unsigned)ieee754.u == 0; 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*************** Random number generation *******************/ 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef uint64 CvRNG; 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1)) 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRNG rng = seed ? (uint64)seed : (uint64)(int64)-1; 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return rng; 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return random 32-bit unsigned integer: */ 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE unsigned cvRandInt( CvRNG* rng ) 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uint64 temp = *rng; 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn temp = (uint64)(unsigned)temp*1554115554 + (temp >> 32); 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *rng = temp; 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (unsigned)temp; 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Returns random floating-point number between 0 and 1: */ 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvRandReal( CvRNG* rng ) 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvRandInt(rng)*2.3283064365386962890625e-10 /* 2^-32 */; 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Image type (IplImage) * 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef HAVE_IPL 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * The following definitions (until #endif) 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * is an extract from IPL headers. 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Copyright (c) 1995 Intel Corporation. 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_SIGN 0x80000000 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_1U 1 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_8U 8 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_16U 16 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_32F 32 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_8S (IPL_DEPTH_SIGN| 8) 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16) 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32) 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DATA_ORDER_PIXEL 0 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DATA_ORDER_PLANE 1 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ORIGIN_TL 0 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ORIGIN_BL 1 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_4BYTES 4 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_8BYTES 8 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_16BYTES 16 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_32BYTES 32 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_DWORD IPL_ALIGN_4BYTES 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_ALIGN_QWORD IPL_ALIGN_8BYTES 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_BORDER_CONSTANT 0 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_BORDER_REPLICATE 1 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_BORDER_REFLECT 2 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_BORDER_WRAP 3 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _IplImage 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nSize; /* sizeof(IplImage) */ 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int ID; /* version (=0)*/ 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int alphaChannel; /* Ignored by OpenCV */ 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int depth; /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported. */ 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char colorModel[4]; /* Ignored by OpenCV */ 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char channelSeq[4]; /* ditto */ 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dataOrder; /* 0 - interleaved color channels, 1 - separate color channels. 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCreateImage can only create interleaved images */ 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int origin; /* 0 - top-left origin, 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1 - bottom-left origin (Windows bitmaps style). */ 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int align; /* Alignment of image rows (4 or 8). 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn OpenCV ignores it and uses widthStep instead. */ 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; /* Image width in pixels. */ 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; /* Image height in pixels. */ 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct _IplROI *roi; /* Image ROI. If NULL, the whole image is selected. */ 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct _IplImage *maskROI; /* Must be NULL. */ 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void *imageId; /* " " */ 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct _IplTileInfo *tileInfo; /* " " */ 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int imageSize; /* Image data size in bytes 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (==image->height*image->widthStep 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn in case of interleaved data)*/ 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char *imageData; /* Pointer to aligned image data. */ 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int widthStep; /* Size of aligned image row in bytes. */ 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int BorderMode[4]; /* Ignored by OpenCV. */ 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int BorderConst[4]; /* Ditto. */ 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char *imageDataOrigin; /* Pointer to very origin of image data 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (not necessarily aligned) - 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn needed for correct deallocation */ 3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIplImage; 3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _IplTileInfo IplTileInfo; 4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _IplROI 4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int coi; /* 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/ 4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int xOffset; 4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int yOffset; 4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIplROI; 4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _IplConvKernel 4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nCols; 4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nRows; 4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int anchorX; 4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int anchorY; 4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int *values; 4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nShiftR; 4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIplConvKernel; 4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _IplConvKernelFP 4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nCols; 4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int nRows; 4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int anchorX; 4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int anchorY; 4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float *values; 4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIplConvKernelFP; 4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_IMAGE_HEADER 1 4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_IMAGE_DATA 2 4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_IMAGE_ROI 4 4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif/*HAVE_IPL*/ 4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* extra border mode */ 4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_BORDER_REFLECT_101 4 4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_IMAGE_MAGIC_VAL ((int)sizeof(IplImage)) 4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_IMAGE "opencv-image" 4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_IMAGE_HDR(img) \ 4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((img) != NULL && ((const IplImage*)(img))->nSize == sizeof(IplImage)) 4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_IMAGE(img) \ 4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_IMAGE_HDR(img) && ((IplImage*)img)->imageData != NULL) 4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* for storing double-precision 4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn floating point data in IplImage's */ 4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define IPL_DEPTH_64F 64 4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* get reference to pixel at (col,row), 4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn for multi-channel images (col) should be multiplied by number of channels */ 4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IMAGE_ELEM( image, elemtype, row, col ) \ 4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)]) 4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 4616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Matrix type (CvMat) * 4626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 4636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CN_MAX 64 4656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CN_SHIFT 3 4666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEPTH_MAX (1 << CV_CN_SHIFT) 4676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8U 0 4696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8S 1 4706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16U 2 4716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16S 3 4726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32S 4 4736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32F 5 4746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64F 6 4756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_USRTYPE1 7 4766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAKETYPE(depth,cn) ((depth) + (((cn)-1) << CV_CN_SHIFT)) 4786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAKE_TYPE CV_MAKETYPE 4796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8UC1 CV_MAKETYPE(CV_8U,1) 4816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8UC2 CV_MAKETYPE(CV_8U,2) 4826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8UC3 CV_MAKETYPE(CV_8U,3) 4836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8UC4 CV_MAKETYPE(CV_8U,4) 4846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n)) 4856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8SC1 CV_MAKETYPE(CV_8S,1) 4876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8SC2 CV_MAKETYPE(CV_8S,2) 4886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8SC3 CV_MAKETYPE(CV_8S,3) 4896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8SC4 CV_MAKETYPE(CV_8S,4) 4906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n)) 4916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16UC1 CV_MAKETYPE(CV_16U,1) 4936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16UC2 CV_MAKETYPE(CV_16U,2) 4946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16UC3 CV_MAKETYPE(CV_16U,3) 4956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16UC4 CV_MAKETYPE(CV_16U,4) 4966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n)) 4976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 4986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16SC1 CV_MAKETYPE(CV_16S,1) 4996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16SC2 CV_MAKETYPE(CV_16S,2) 5006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16SC3 CV_MAKETYPE(CV_16S,3) 5016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16SC4 CV_MAKETYPE(CV_16S,4) 5026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n)) 5036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32SC1 CV_MAKETYPE(CV_32S,1) 5056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32SC2 CV_MAKETYPE(CV_32S,2) 5066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32SC3 CV_MAKETYPE(CV_32S,3) 5076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32SC4 CV_MAKETYPE(CV_32S,4) 5086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n)) 5096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32FC1 CV_MAKETYPE(CV_32F,1) 5116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32FC2 CV_MAKETYPE(CV_32F,2) 5126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32FC3 CV_MAKETYPE(CV_32F,3) 5136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32FC4 CV_MAKETYPE(CV_32F,4) 5146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) 5156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64FC1 CV_MAKETYPE(CV_64F,1) 5176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64FC2 CV_MAKETYPE(CV_64F,2) 5186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64FC3 CV_MAKETYPE(CV_64F,3) 5196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64FC4 CV_MAKETYPE(CV_64F,4) 5206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) 5216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_AUTO_STEP 0x7fffffff 5236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WHOLE_ARR cvSlice( 0, 0x3fffffff ) 5246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) 5266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) 5276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1) 5286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) 5296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1) 5306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) 5316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_CONT_FLAG_SHIFT 14 5326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) 5336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) 5346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_CONT_MAT CV_IS_MAT_CONT 5356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_TEMP_FLAG_SHIFT 15 5366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_TEMP_FLAG (1 << CV_MAT_TEMP_FLAG_SHIFT) 5376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_TEMP_MAT(flags) ((flags) & CV_MAT_TEMP_FLAG) 5386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAGIC_MASK 0xFFFF0000 5406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_MAGIC_VAL 0x42420000 5416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_MAT "opencv-matrix" 5426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMat 5446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 5456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 5466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step; 5476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* for internal use only */ 5496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* refcount; 5506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int hdr_refcount; 5516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union 5536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* ptr; 5556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn short* s; 5566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* i; 5576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* fl; 5586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* db; 5596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } data; 5606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 5626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union 5636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int rows; 5656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 5666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union 5696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 5706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cols; 5716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 5726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn }; 5736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 5746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int rows; 5756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cols; 5766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 5776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 5796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMat; 5806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MAT_HDR(mat) \ 5836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((mat) != NULL && \ 5846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \ 5856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((const CvMat*)(mat))->cols > 0 && ((const CvMat*)(mat))->rows > 0) 5866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MAT(mat) \ 5886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_MAT_HDR(mat) && ((const CvMat*)(mat))->data.ptr != NULL) 5896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MASK_ARR(mat) \ 5916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((mat)->type & (CV_MAT_TYPE_MASK & ~CV_8SC1)) == 0) 5926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ARE_TYPES_EQ(mat1, mat2) \ 5946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((mat1)->type ^ (mat2)->type) & CV_MAT_TYPE_MASK) == 0) 5956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ARE_CNS_EQ(mat1, mat2) \ 5976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((mat1)->type ^ (mat2)->type) & CV_MAT_CN_MASK) == 0) 5986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 5996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ARE_DEPTHS_EQ(mat1, mat2) \ 6006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((mat1)->type ^ (mat2)->type) & CV_MAT_DEPTH_MASK) == 0) 6016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ARE_SIZES_EQ(mat1, mat2) \ 6036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols) 6046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MAT_CONST(mat) \ 6066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((mat)->rows|(mat)->cols) == 1) 6076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Size of each channel item, 6096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */ 6106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ELEM_SIZE1(type) \ 6116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15) 6126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ 6146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ELEM_SIZE(type) \ 6156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3)) 6166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Inline constructor. No data is allocated internally!!! 6186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * (Use together with cvCreateData, or use cvCreateMat instead to 6196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * get a matrix with allocated data): 6206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 6216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL)) 6226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat m; 6246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F ); 6266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn type = CV_MAT_TYPE(type); 6276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type; 6286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.cols = cols; 6296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.rows = rows; 6306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.step = rows > 1 ? m.cols*CV_ELEM_SIZE(type) : 0; 6316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.data.ptr = (uchar*)data; 6326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.refcount = NULL; 6336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m.hdr_refcount = 0; 6346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m; 6366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size ) \ 6406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (assert( (unsigned)(row) < (unsigned)(mat).rows && \ 6416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unsigned)(col) < (unsigned)(mat).cols ), \ 6426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col)) 6436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_ELEM_PTR( mat, row, col ) \ 6456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_MAT_ELEM_PTR_FAST( mat, row, col, CV_ELEM_SIZE((mat).type) ) 6466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAT_ELEM( mat, elemtype, row, col ) \ 6486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype))) 6496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE double cvmGet( const CvMat* mat, int row, int col ) 6526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 6546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn type = CV_MAT_TYPE(mat->type); 6566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (unsigned)row < (unsigned)mat->rows && 6576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unsigned)col < (unsigned)mat->cols ); 6586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( type == CV_32FC1 ) 6606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return ((float*)(mat->data.ptr + (size_t)mat->step*row))[col]; 6616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 6626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( type == CV_64FC1 ); 6646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return ((double*)(mat->data.ptr + (size_t)mat->step*row))[col]; 6656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE void cvmSet( CvMat* mat, int row, int col, double value ) 6706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 6726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn type = CV_MAT_TYPE(mat->type); 6736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (unsigned)row < (unsigned)mat->rows && 6746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unsigned)col < (unsigned)mat->cols ); 6756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( type == CV_32FC1 ) 6776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((float*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value; 6786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 6796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 6806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( type == CV_64FC1 ); 6816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((double*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value; 6826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 6836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE int cvCvToIplDepth( int type ) 6876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 6886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int depth = CV_MAT_DEPTH(type); 6896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CV_ELEM_SIZE1(depth)*8 | (depth == CV_8S || depth == CV_16S || 6906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn depth == CV_32S ? IPL_DEPTH_SIGN : 0); 6916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 6926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 6956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Multi-dimensional dense array (CvMatND) * 6966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 6976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 6986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MATND_MAGIC_VAL 0x42430000 6996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_MATND "opencv-nd-matrix" 7006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_DIM 32 7026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_DIM_HEAP (1 << 16) 7036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMatND 7056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 7076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dims; 7086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* refcount; 7106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int hdr_refcount; 7116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union 7136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 7146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* ptr; 7156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float* fl; 7166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double* db; 7176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* i; 7186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn short* s; 7196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } data; 7206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct 7226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 7236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int size; 7246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step; 7256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 7266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dim[CV_MAX_DIM]; 7276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMatND; 7296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MATND_HDR(mat) \ 7316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((mat) != NULL && (((const CvMatND*)(mat))->type & CV_MAGIC_MASK) == CV_MATND_MAGIC_VAL) 7326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_MATND(mat) \ 7346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_MATND_HDR(mat) && ((const CvMatND*)(mat))->data.ptr != NULL) 7356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 7386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Multi-dimensional sparse array (CvSparseMat) * 7396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 7406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SPARSE_MAT_MAGIC_VAL 0x42440000 7426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_SPARSE_MAT "opencv-sparse-matrix" 7436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvSet; 7456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSparseMat 7476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 7496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dims; 7506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* refcount; 7516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int hdr_refcount; 7526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvSet* heap; 7546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void** hashtable; 7556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int hashsize; 7566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int valoffset; 7576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int idxoffset; 7586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int size[CV_MAX_DIM]; 7596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSparseMat; 7616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SPARSE_MAT_HDR(mat) \ 7636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((mat) != NULL && \ 7646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((const CvSparseMat*)(mat))->type & CV_MAGIC_MASK) == CV_SPARSE_MAT_MAGIC_VAL) 7656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SPARSE_MAT(mat) \ 7676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_IS_SPARSE_MAT_HDR(mat) 7686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**************** iteration through a sparse array *****************/ 7706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSparseNode 7726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned hashval; 7746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvSparseNode* next; 7756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSparseNode; 7776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSparseMatIterator 7796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 7806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSparseMat* mat; 7816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSparseNode* node; 7826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int curidx; 7836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 7846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSparseMatIterator; 7856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_VAL(mat,node) ((void*)((uchar*)(node) + (mat)->valoffset)) 7876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IDX(mat,node) ((int*)((uchar*)(node) + (mat)->idxoffset)) 7886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 7906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Histogram * 7916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 7926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int CvHistType; 7946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_MAGIC_VAL 0x42450000 7966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_UNIFORM_FLAG (1 << 10) 7976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 7986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* indicates whether bin ranges are set already or not */ 7996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_RANGES_FLAG (1 << 11) 8006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_ARRAY 0 8026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_SPARSE 1 8036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_TREE CV_HIST_SPARSE 8046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* should be used as a parameter only, 8066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn it turns to CV_HIST_UNIFORM_FLAG of hist->type */ 8076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_UNIFORM 1 8086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHistogram 8106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; 8126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvArr* bins; 8136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float thresh[CV_MAX_DIM][2]; /* For uniform histograms. */ 8146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float** thresh2; /* For non-uniform histograms. */ 8156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatND mat; /* Embedded matrix header for array histograms. */ 8166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHistogram; 8186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_HIST( hist ) \ 8206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((hist) != NULL && \ 8216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((CvHistogram*)(hist))->type & CV_MAGIC_MASK) == CV_HIST_MAGIC_VAL && \ 8226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (hist)->bins != NULL) 8236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_UNIFORM_HIST( hist ) \ 8256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((hist)->type & CV_HIST_UNIFORM_FLAG) != 0) 8266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SPARSE_HIST( hist ) \ 8286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_IS_SPARSE_MAT((hist)->bins) 8296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HIST_HAS_RANGES( hist ) \ 8316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((hist)->type & CV_HIST_RANGES_FLAG) != 0) 8326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 8346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Other supplementary data type definitions * 8356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 8366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*************************************** CvRect *****************************************/ 8386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvRect 8406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int x; 8426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int y; 8436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 8446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 8456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvRect; 8476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvRect cvRect( int x, int y, int width, int height ) 8496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect r; 8516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.x = x; 8536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.y = y; 8546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.width = width; 8556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn r.height = height; 8566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return r; 8586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE IplROI cvRectToROI( CvRect rect, int coi ) 8626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplROI roi; 8646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn roi.xOffset = rect.x; 8656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn roi.yOffset = rect.y; 8666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn roi.width = rect.width; 8676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn roi.height = rect.height; 8686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn roi.coi = coi; 8696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return roi; 8716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvRect cvROIToRect( IplROI roi ) 8756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvRect( roi.xOffset, roi.yOffset, roi.width, roi.height ); 8776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** CvTermCriteria *************************************/ 8806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TERMCRIT_ITER 1 8826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER 8836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TERMCRIT_EPS 2 8846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvTermCriteria 8866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type; /* may be combination of 8886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_TERMCRIT_ITER 8896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_TERMCRIT_EPS */ 8906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int max_iter; 8916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double epsilon; 8926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 8936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvTermCriteria; 8946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon ) 8966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 8976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvTermCriteria t; 8986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 8996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn t.type = type; 9006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn t.max_iter = max_iter; 9016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn t.epsilon = (float)epsilon; 9026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return t; 9046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/******************************* CvPoint and variants ***********************************/ 9086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPoint 9106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int x; 9126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int y; 9136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPoint; 9156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint cvPoint( int x, int y ) 9186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint p; 9206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.x = x; 9226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.y = y; 9236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 9256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPoint2D32f 9296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float x; 9316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float y; 9326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPoint2D32f; 9346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint2D32f cvPoint2D32f( double x, double y ) 9376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f p; 9396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.x = (float)x; 9416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.y = (float)y; 9426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 9446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint2D32f cvPointTo32f( CvPoint point ) 9486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cvPoint2D32f( (float)point.x, (float)point.y ); 9506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint cvPointFrom32f( CvPoint2D32f point ) 9546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint ipt; 9566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ipt.x = cvRound(point.x); 9576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ipt.y = cvRound(point.y); 9586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return ipt; 9606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPoint3D32f 9646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float x; 9666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float y; 9676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float z; 9686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPoint3D32f; 9706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint3D32f cvPoint3D32f( double x, double y, double z ) 9736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint3D32f p; 9756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.x = (float)x; 9776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.y = (float)y; 9786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.z = (float)z; 9796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 9816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPoint2D64f 9856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double x; 9876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double y; 9886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 9896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPoint2D64f; 9906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint2D64f cvPoint2D64f( double x, double y ) 9936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 9946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D64f p; 9956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.x = x; 9976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.y = y; 9986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 9996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 10006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPoint3D64f 10046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double x; 10066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double y; 10076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double z; 10086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPoint3D64f; 10106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvPoint3D64f cvPoint3D64f( double x, double y, double z ) 10136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint3D64f p; 10156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.x = x; 10176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.y = y; 10186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn p.z = z; 10196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return p; 10216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/******************************** CvSize's & CvBox **************************************/ 10256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct 10276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width; 10296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height; 10306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSize; 10326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSize cvSize( int width, int height ) 10346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize s; 10366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn s.width = width; 10386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn s.height = height; 10396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return s; 10416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSize2D32f 10446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float width; 10466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float height; 10476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSize2D32f; 10496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSize2D32f cvSize2D32f( double width, double height ) 10526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize2D32f s; 10546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn s.width = (float)width; 10566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn s.height = (float)height; 10576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return s; 10596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvBox2D 10626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f center; /* Center of the box. */ 10646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize2D32f size; /* Box width and length. */ 10656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float angle; /* Angle between the horizontal axis */ 10666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* and the first side (i.e. length) in degrees */ 10676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvBox2D; 10696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Line iterator state: */ 10726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvLineIterator 10736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Pointer to the current point: */ 10756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* ptr; 10766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Bresenham algorithm state: */ 10786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int err; 10796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int plus_delta; 10806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int minus_delta; 10816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int plus_step; 10826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int minus_step; 10836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvLineIterator; 10856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************************************* CvSlice ******************************************/ 10896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSlice 10916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int start_index, end_index; 10936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 10946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSlice; 10956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 10966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvSlice cvSlice( int start, int end ) 10976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 10986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSlice slice; 10996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn slice.start_index = start; 11006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn slice.end_index = end; 11016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return slice; 11036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff 11066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WHOLE_SEQ cvSlice(0, CV_WHOLE_SEQ_END_INDEX) 11076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************************************* CvScalar *****************************************/ 11106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvScalar 11126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double val[4]; 11146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvScalar; 11166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0), 11186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0)) 11196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar scalar; 11216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[0] = val0; scalar.val[1] = val1; 11226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[2] = val2; scalar.val[3] = val3; 11236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return scalar; 11246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvScalar cvRealScalar( double val0 ) 11286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar scalar; 11306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[0] = val0; 11316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; 11326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return scalar; 11336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvScalar cvScalarAll( double val0123 ) 11366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvScalar scalar; 11386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[0] = val0123; 11396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[1] = val0123; 11406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[2] = val0123; 11416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn scalar.val[3] = val0123; 11426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return scalar; 11436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 11466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Dynamic Data structures * 11476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 11486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/******************************** Memory storage ****************************************/ 11506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMemBlock 11526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvMemBlock* prev; 11546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvMemBlock* next; 11556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMemBlock; 11576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_MAGIC_VAL 0x42890000 11596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMemStorage 11616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int signature; 11636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemBlock* bottom; /* First allocated block. */ 11646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemBlock* top; /* Current memory block - top of the stack. */ 11656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvMemStorage* parent; /* We get new blocks from parent as needed. */ 11666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int block_size; /* Block size. */ 11676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int free_space; /* Remaining free space in current block. */ 11686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMemStorage; 11706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_STORAGE(storage) \ 11726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((storage) != NULL && \ 11736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL) 11746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMemStoragePos 11776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemBlock* top; 11796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int free_space; 11806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMemStoragePos; 11826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Sequence *******************************************/ 11856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSeqBlock 11876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 11886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvSeqBlock* prev; /* Previous sequence block. */ 11896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvSeqBlock* next; /* Next sequence block. */ 11906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int start_index; /* Index of the first element in the block + */ 11916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* sequence->first->start_index. */ 11926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int count; /* Number of elements in the block. */ 11936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* data; /* Pointer to the first element of the block. */ 11946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 11956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeqBlock; 11966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 11986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TREE_NODE_FIELDS(node_type) \ 11996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags; /* Miscellaneous flags. */ \ 12006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int header_size; /* Size of sequence header. */ \ 12016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct node_type* h_prev; /* Previous sequence. */ \ 12026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct node_type* h_next; /* Next sequence. */ \ 12036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct node_type* v_prev; /* 2nd previous sequence. */ \ 12046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct node_type* v_next /* 2nd next sequence. */ 12056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 12076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Read/Write sequence. 12086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Elements can be dynamically inserted to or deleted from the sequence. 12096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 12106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQUENCE_FIELDS() \ 12116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_TREE_NODE_FIELDS(CvSeq); \ 12126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int total; /* Total number of elements. */ \ 12136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int elem_size; /* Size of sequence element in bytes. */ \ 12146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* block_max; /* Maximal bound of the last block. */ \ 12156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* ptr; /* Current write pointer. */ \ 12166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int delta_elems; /* Grow seq this many at a time. */ \ 12176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMemStorage* storage; /* Where the seq is stored. */ \ 12186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqBlock* free_blocks; /* Free blocks list. */ \ 12196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqBlock* first; /* Pointer to the first sequence block. */ 12206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSeq 12226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQUENCE_FIELDS() 12246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 12256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeq; 12266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_SEQ "opencv-sequence" 12286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_SEQ_TREE "opencv-sequence-tree" 12296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*************************************** Set ********************************************/ 12316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 12326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Set. 12336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Order is not preserved. There can be gaps between sequence elements. 12346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn After the element has been inserted it stays in the same place all the time. 12356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists. 12366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 12376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_ELEM_FIELDS(elem_type) \ 12386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags; \ 12396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct elem_type* next_free; 12406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSetElem 12426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SET_ELEM_FIELDS(CvSetElem) 12446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 12456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSetElem; 12466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_FIELDS() \ 12486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQUENCE_FIELDS() \ 12496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSetElem* free_elems; \ 12506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int active_count; 12516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSet 12536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SET_FIELDS() 12556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 12566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSet; 12576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_ELEM_IDX_MASK ((1 << 26) - 1) 12606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_ELEM_FREE_FLAG (1 << (sizeof(int)*8-1)) 12616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Checks whether the element pointed by ptr belongs to a set or not */ 12636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SET_ELEM( ptr ) (((CvSetElem*)(ptr))->flags >= 0) 12646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************************************* Graph ********************************************/ 12666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 12686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn We represent a graph as a set of vertices. 12696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Vertices contain their adjacency lists (more exactly, pointers to first incoming or 12706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn outcoming edge (or 0 if isolated vertex)). Edges are stored in another set. 12716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn There is a singly-linked list of incoming/outcoming edges for each vertex. 12726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Each edge consists of 12746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn o Two pointers to the starting and ending vertices 12766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (vtx[0] and vtx[1] respectively). 12776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn A graph may be oriented or not. In the latter case, edges between 12796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn vertex i to vertex j are not distinguished during search operations. 12806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn o Two pointers to next edges for the starting and ending vertices, where 12826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn next[0] points to the next edge in the vtx[0] adjacency list and 12836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn next[1] points to the next edge in the vtx[1] adjacency list. 12846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 12856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_EDGE_FIELDS() \ 12866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags; \ 12876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float weight; \ 12886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvGraphEdge* next[2]; \ 12896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvGraphVtx* vtx[2]; 12906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_VERTEX_FIELDS() \ 12936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags; \ 12946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvGraphEdge* first; 12956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 12976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphEdge 12986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 12996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_GRAPH_EDGE_FIELDS() 13006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphEdge; 13026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphVtx 13046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_GRAPH_VERTEX_FIELDS() 13066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphVtx; 13086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraphVtx2D 13106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_GRAPH_VERTEX_FIELDS() 13126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint2D32f* ptr; 13136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraphVtx2D; 13156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 13176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Graph is "derived" from the set (this is set a of vertices) 13186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn and includes another set (edges) 13196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 13206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_FIELDS() \ 13216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SET_FIELDS() \ 13226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSet* edges; 13236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGraph 13256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_GRAPH_FIELDS() 13276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvGraph; 13296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_GRAPH "opencv-graph" 13316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************************** Chain/Countour *************************************/ 13336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvChain 13356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQUENCE_FIELDS() 13376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPoint origin; 13386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvChain; 13406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CONTOUR_FIELDS() \ 13426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQUENCE_FIELDS() \ 13436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect rect; \ 13446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int color; \ 13456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int reserved[3]; 13466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvContour 13486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 13496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_CONTOUR_FIELDS() 13506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 13516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvContour; 13526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvContour CvPoint2DSeq; 13546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 13566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Sequence types * 13576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 13586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_MAGIC_VAL 0x42990000 13606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ(seq) \ 13626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL) 13636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SET_MAGIC_VAL 0x42980000 13656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SET(set) \ 13666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((set) != NULL && (((CvSeq*)(set))->flags & CV_MAGIC_MASK) == CV_SET_MAGIC_VAL) 13676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_BITS 9 13696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_MASK ((1 << CV_SEQ_ELTYPE_BITS) - 1) 13706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_POINT CV_32SC2 /* (x,y) */ 13726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_CODE CV_8UC1 /* freeman code: 0..7 */ 13736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_GENERIC 0 13746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_PTR CV_USRTYPE1 13756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_PPOINT CV_SEQ_ELTYPE_PTR /* &(x,y) */ 13766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_INDEX CV_32SC1 /* #(x,y) */ 13776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_GRAPH_EDGE 0 /* &next_o, &next_d, &vtx_o, &vtx_d */ 13786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_GRAPH_VERTEX 0 /* first_edge, &(x,y) */ 13796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_TRIAN_ATR 0 /* vertex of the binary tree */ 13806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_CONNECTED_COMP 0 /* connected component */ 13816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE_POINT3D CV_32FC3 /* (x,y,z) */ 13826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_BITS 3 13846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_MASK (((1 << CV_SEQ_KIND_BITS) - 1)<<CV_SEQ_ELTYPE_BITS) 13856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* types of sequences */ 13876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_GENERIC (0 << CV_SEQ_ELTYPE_BITS) 13886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_CURVE (1 << CV_SEQ_ELTYPE_BITS) 13896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_BIN_TREE (2 << CV_SEQ_ELTYPE_BITS) 13906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* types of sparse sequences (sets) */ 13926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_GRAPH (3 << CV_SEQ_ELTYPE_BITS) 13936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND_SUBDIV2D (4 << CV_SEQ_ELTYPE_BITS) 13946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_FLAG_SHIFT (CV_SEQ_KIND_BITS + CV_SEQ_ELTYPE_BITS) 13966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 13976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* flags for curves */ 13986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_FLAG_CLOSED (1 << CV_SEQ_FLAG_SHIFT) 13996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_FLAG_SIMPLE (2 << CV_SEQ_FLAG_SHIFT) 14006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_FLAG_CONVEX (4 << CV_SEQ_FLAG_SHIFT) 14016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_FLAG_HOLE (8 << CV_SEQ_FLAG_SHIFT) 14026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* flags for graphs */ 14046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH_FLAG_ORIENTED (1 << CV_SEQ_FLAG_SHIFT) 14056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GRAPH CV_SEQ_KIND_GRAPH 14076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_ORIENTED_GRAPH (CV_SEQ_KIND_GRAPH|CV_GRAPH_FLAG_ORIENTED) 14086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* point sets */ 14106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_POINT_SET (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT) 14116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_POINT3D_SET (CV_SEQ_KIND_GENERIC| CV_SEQ_ELTYPE_POINT3D) 14126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_POLYLINE (CV_SEQ_KIND_CURVE | CV_SEQ_ELTYPE_POINT) 14136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_POLYGON (CV_SEQ_FLAG_CLOSED | CV_SEQ_POLYLINE ) 14146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_CONTOUR CV_SEQ_POLYGON 14156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_SIMPLE_POLYGON (CV_SEQ_FLAG_SIMPLE | CV_SEQ_POLYGON ) 14166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* chain-coded curves */ 14186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_CHAIN (CV_SEQ_KIND_CURVE | CV_SEQ_ELTYPE_CODE) 14196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_CHAIN_CONTOUR (CV_SEQ_FLAG_CLOSED | CV_SEQ_CHAIN) 14206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* binary tree for the contour */ 14226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_POLYGON_TREE (CV_SEQ_KIND_BIN_TREE | CV_SEQ_ELTYPE_TRIAN_ATR) 14236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* sequence of the connected components */ 14256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_CONNECTED_COMP (CV_SEQ_KIND_GENERIC | CV_SEQ_ELTYPE_CONNECTED_COMP) 14266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* sequence of the integer numbers */ 14286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_INDEX (CV_SEQ_KIND_GENERIC | CV_SEQ_ELTYPE_INDEX) 14296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELTYPE( seq ) ((seq)->flags & CV_SEQ_ELTYPE_MASK) 14316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_KIND( seq ) ((seq)->flags & CV_SEQ_KIND_MASK ) 14326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* flag checking */ 14346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_INDEX( seq ) ((CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_INDEX) && \ 14356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_SEQ_KIND(seq) == CV_SEQ_KIND_GENERIC)) 14366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CURVE( seq ) (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE) 14386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CLOSED( seq ) (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0) 14396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CONVEX( seq ) (((seq)->flags & CV_SEQ_FLAG_CONVEX) != 0) 14406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_HOLE( seq ) (((seq)->flags & CV_SEQ_FLAG_HOLE) != 0) 14416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_SIMPLE( seq ) ((((seq)->flags & CV_SEQ_FLAG_SIMPLE) != 0) || \ 14426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_IS_SEQ_CONVEX(seq)) 14436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* type checking macros */ 14456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_POINT_SET( seq ) \ 14466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ((CV_SEQ_ELTYPE(seq) == CV_32SC2 || CV_SEQ_ELTYPE(seq) == CV_32FC2)) 14476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_POINT_SUBSET( seq ) \ 14496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SEQ_INDEX( seq ) || CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_PPOINT) 14506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_POLYLINE( seq ) \ 14526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq)) 14536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_POLYGON( seq ) \ 14556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq)) 14566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CHAIN( seq ) \ 14586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && (seq)->elem_size == 1) 14596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CONTOUR( seq ) \ 14616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SEQ_CLOSED(seq) && (CV_IS_SEQ_POLYLINE(seq) || CV_IS_SEQ_CHAIN(seq))) 14626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_CHAIN_CONTOUR( seq ) \ 14646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SEQ_CHAIN( seq ) && CV_IS_SEQ_CLOSED( seq )) 14656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SEQ_POLYGON_TREE( seq ) \ 14676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_SEQ_ELTYPE (seq) == CV_SEQ_ELTYPE_TRIAN_ATR && \ 14686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQ_KIND( seq ) == CV_SEQ_KIND_BIN_TREE ) 14696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_GRAPH( seq ) \ 14716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_GRAPH) 14726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_GRAPH_ORIENTED( seq ) \ 14746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (((seq)->flags & CV_GRAPH_FLAG_ORIENTED) != 0) 14756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_SUBDIV2D( seq ) \ 14776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_SUBDIV2D) 14786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/ 14806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Sequence writer & reader */ 14816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/ 14826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_WRITER_FIELDS() \ 14846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int header_size; \ 14856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* seq; /* the sequence written */ \ 14866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqBlock* block; /* current block */ \ 14876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* ptr; /* pointer to free space */ \ 14886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* block_min; /* pointer to the beginning of block*/\ 14896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* block_max; /* pointer to the end of block */ 14906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSeqWriter 14926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 14936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQ_WRITER_FIELDS() 14946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 14956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeqWriter; 14966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 14986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_READER_FIELDS() \ 14996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int header_size; \ 15006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* seq; /* sequence, beign read */ \ 15016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeqBlock* block; /* current block */ \ 15026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* ptr; /* pointer to element be read next */ \ 15036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* block_min; /* pointer to the beginning of block */\ 15046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* block_max; /* pointer to the end of block */ \ 15056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int delta_index;/* = seq->first->start_index */ \ 15066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn schar* prev_elem; /* pointer to previous element */ 15076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSeqReader 15106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 15116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_SEQ_READER_FIELDS() 15126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSeqReader; 15146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/ 15166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Operations on sequences */ 15176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/ 15186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SEQ_ELEM( seq, elem_type, index ) \ 15206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* assert gives some guarantee that <seq> parameter is valid */ \ 15216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn( assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) && \ 15226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (seq)->elem_size == sizeof(elem_type)), \ 15236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (elem_type*)((seq)->first && (unsigned)index < \ 15246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (unsigned)((seq)->first->count) ? \ 15256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (seq)->first->data + (index) * sizeof(elem_type) : \ 15266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvGetSeqElem( (CvSeq*)(seq), (index) ))) 15276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) ) 15286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Add element to sequence: */ 15306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer ) \ 15316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( (writer).ptr >= (writer).block_max ) \ 15336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 15346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCreateSeqBlock( &writer); \ 15356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 15366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy((writer).ptr, elem_ptr, (writer).seq->elem_size);\ 15376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (writer).ptr += (writer).seq->elem_size; \ 15386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_WRITE_SEQ_ELEM( elem, writer ) \ 15416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (writer).seq->elem_size == sizeof(elem)); \ 15436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( (writer).ptr >= (writer).block_max ) \ 15446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 15456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvCreateSeqBlock( &writer); \ 15466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 15476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (writer).ptr <= (writer).block_max - sizeof(elem));\ 15486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy((writer).ptr, &(elem), sizeof(elem)); \ 15496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (writer).ptr += sizeof(elem); \ 15506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move reader position forward: */ 15546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEXT_SEQ_ELEM( elem_size, reader ) \ 15556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( ((reader).ptr += (elem_size)) >= (reader).block_max ) \ 15576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 15586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvChangeSeqBlock( &(reader), 1 ); \ 15596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 15606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Move reader position backward: */ 15646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PREV_SEQ_ELEM( elem_size, reader ) \ 15656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( ((reader).ptr -= (elem_size)) < (reader).block_min ) \ 15676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 15686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvChangeSeqBlock( &(reader), -1 ); \ 15696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 15706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Read element and move read position forward: */ 15736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_READ_SEQ_ELEM( elem, reader ) \ 15746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (reader).seq->elem_size == sizeof(elem)); \ 15766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy( &(elem), (reader).ptr, sizeof((elem))); \ 15776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NEXT_SEQ_ELEM( sizeof(elem), reader ) \ 15786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Read element and move read position backward: */ 15816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_REV_READ_SEQ_ELEM( elem, reader ) \ 15826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( (reader).seq->elem_size == sizeof(elem)); \ 15846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy(&(elem), (reader).ptr, sizeof((elem))); \ 15856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_PREV_SEQ_ELEM( sizeof(elem), reader ) \ 15866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 15876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 15896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_READ_CHAIN_POINT( _pt, reader ) \ 15906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 15916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (_pt) = (reader).pt; \ 15926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( (reader).ptr ) \ 15936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { \ 15946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_READ_SEQ_ELEM( (reader).code, (reader)); \ 15956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( ((reader).code & ~7) == 0 ); \ 15966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (reader).pt.x += (reader).deltas[(int)(reader).code][0]; \ 15976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (reader).pt.y += (reader).deltas[(int)(reader).code][1]; \ 15986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } \ 15996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CURRENT_POINT( reader ) (*((CvPoint*)((reader).ptr))) 16026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_PREV_POINT( reader ) (*((CvPoint*)((reader).prev_elem))) 16036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_READ_EDGE( pt1, pt2, reader ) \ 16056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ \ 16066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( sizeof(pt1) == sizeof(CvPoint) && \ 16076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn sizeof(pt2) == sizeof(CvPoint) && \ 16086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn reader.seq->elem_size == sizeof(CvPoint)); \ 16096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pt1) = CV_PREV_POINT( reader ); \ 16106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (pt2) = CV_CURRENT_POINT( reader ); \ 16116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (reader).prev_elem = (reader).ptr; \ 16126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_NEXT_SEQ_ELEM( sizeof(CvPoint), (reader)); \ 16136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************ Graph macros ************/ 16166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Return next graph edge for given vertex: */ 16186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NEXT_GRAPH_EDGE( edge, vertex ) \ 16196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (assert((edge)->vtx[0] == (vertex) || (edge)->vtx[1] == (vertex)), \ 16206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (edge)->next[(edge)->vtx[1] == (vertex)]) 16216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 16256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Data structures for persistence (a.k.a serialization) functionality * 16266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 16276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* "black box" file storage */ 16296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFileStorage CvFileStorage; 16306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Storage flags: */ 16326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_READ 0 16336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_WRITE 1 16346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_WRITE_TEXT CV_STORAGE_WRITE 16356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_WRITE_BINARY CV_STORAGE_WRITE 16366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_STORAGE_APPEND 2 16376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* List of attributes: */ 16396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvAttrList 16406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char** attr; /* NULL-terminated array of (attribute_name,attribute_value) pairs. */ 16426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvAttrList* next; /* Pointer to next chunk of the attributes list. */ 16436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvAttrList; 16456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvAttrList cvAttrList( const char** attr CV_DEFAULT(NULL), 16476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList* next CV_DEFAULT(NULL) ) 16486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvAttrList l; 16506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn l.attr = attr; 16516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn l.next = next; 16526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return l; 16546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvTypeInfo; 16576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_NONE 0 16596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_INT 1 16606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_INTEGER CV_NODE_INT 16616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_REAL 2 16626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_FLOAT CV_NODE_REAL 16636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_STR 3 16646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_STRING CV_NODE_STR 16656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_REF 4 /* not used */ 16666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_SEQ 5 16676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_MAP 6 16686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_TYPE_MASK 7 16696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_TYPE(flags) ((flags) & CV_NODE_TYPE_MASK) 16716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* file node flags */ 16736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_FLOW 8 /* Used only for writing structures in YAML format. */ 16746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_USER 16 16756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_EMPTY 32 16766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_NAMED 64 16776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_INT(flags) (CV_NODE_TYPE(flags) == CV_NODE_INT) 16796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_REAL(flags) (CV_NODE_TYPE(flags) == CV_NODE_REAL) 16806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_STRING(flags) (CV_NODE_TYPE(flags) == CV_NODE_STRING) 16816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_SEQ(flags) (CV_NODE_TYPE(flags) == CV_NODE_SEQ) 16826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_MAP(flags) (CV_NODE_TYPE(flags) == CV_NODE_MAP) 16836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags) >= CV_NODE_SEQ) 16846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_FLOW(flags) (((flags) & CV_NODE_FLOW) != 0) 16856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_EMPTY(flags) (((flags) & CV_NODE_EMPTY) != 0) 16866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_IS_USER(flags) (((flags) & CV_NODE_USER) != 0) 16876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_HAS_NAME(flags) (((flags) & CV_NODE_NAMED) != 0) 16886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_SEQ_SIMPLE 256 16906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0) 16916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvString 16936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 16946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int len; 16956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char* ptr; 16966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 16976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvString; 16986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 16996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* All the keys (names) of elements in the readed file storage 17006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn are stored in the hash to speed up the lookup operations: */ 17016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvStringHashNode 17026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned hashval; 17046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvString str; 17056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvStringHashNode* next; 17066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStringHashNode; 17086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvGenericHash CvFileNodeHash; 17106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Basic element of the file storage - scalar or collection: */ 17126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvFileNode 17136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int tag; 17156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvTypeInfo* info; /* type information 17166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (only for user-defined object, for others it is 0) */ 17176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn union 17186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 17196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double f; /* scalar floating-point number */ 17206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int i; /* scalar integer number */ 17216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvString str; /* text string */ 17226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSeq* seq; /* sequence (ordered collection of file nodes) */ 17236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvFileNodeHash* map; /* map (collection of named file nodes) */ 17246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } data; 17256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFileNode; 17276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 17296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern "C" { 17306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 17316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr ); 17326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr ); 17336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage, CvFileNode* node ); 17346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage, const char* name, 17356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const void* struct_ptr, CvAttrList attributes ); 17366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr ); 17376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus 17386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 17406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvTypeInfo 17426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int flags; 17446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int header_size; 17456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvTypeInfo* prev; 17466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvTypeInfo* next; 17476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* type_name; 17486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvIsInstanceFunc is_instance; 17496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvReleaseFunc release; 17506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvReadFunc read; 17516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvWriteFunc write; 17526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvCloneFunc clone; 17536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvTypeInfo; 17556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**** System data types ******/ 17586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvPluginFuncInfo 17606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void** func_addr; 17626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* default_func_addr; 17636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* func_names; 17646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int search_modules; 17656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int loaded_from; 17666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvPluginFuncInfo; 17686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvModuleInfo 17706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 17716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn struct CvModuleInfo* next; 17726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* name; 17736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const char* version; 17746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvPluginFuncInfo* func_tab; 17756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 17766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvModuleInfo; 17776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CXCORE_TYPES_H_*/ 17796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 17806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */ 1781