1 /*M///////////////////////////////////////////////////////////////////////////////////////
3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
5 // By downloading, copying, installing or using the software you agree to this license.
6 // If you do not agree to this license, do not download, install,
7 // copy or use the software.
11 // For Open Source Computer Vision Library
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15 // Third party copyrights are property of their respective owners.
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
20 // * Redistribution's of source code must retain the above copyright notice,
21 // this list of conditions and the following disclaimer.
23 // * Redistribution's in binary form must reproduce the above copyright notice,
24 // this list of conditions and the following disclaimer in the documentation
25 // and/or other materials provided with the distribution.
27 // * The name of the copyright holders may not be used to endorse or promote products
28 // derived from this software without specific prior written permission.
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
43 /* The header is for internal use and it is likely to change.
44 It contains some macro definitions that are used in cxcore, cv, cvaux
45 and, probably, other libraries. If you need some of this functionality,
46 the safe way is to copy it into your code and rename the macros.
48 #ifndef __OPENCV_INTERNAL_H__
49 #define __OPENCV_INTERNAL_H__
57 #if defined WIN32 || defined _WIN32
66 #if defined WIN32 || defined WINCE
67 #ifndef _WIN32_WINNT // This is needed for the declaration of TryEnterCriticalSection in winbase.h with Visual Studio 2005 (and older?)
68 #define _WIN32_WINNT 0x0400 // http://msdn.microsoft.com/en-us/library/ms686857(VS.85).aspx
87 #undef _CV_ALWAYS_PROFILE_
88 #define _CV_ALWAYS_NO_PROFILE_
98 #define __BEGIN__ __CV_BEGIN__
99 #define __END__ __CV_END__
100 #define EXIT __CV_EXIT__
105 CV_INLINE IppiSize ippiSize(int width, int height)
107 IppiSize size = { width, height };
112 #if defined __SSE2__ || _MSC_VER >= 1300
113 #include "emmintrin.h"
116 #if defined __SSE3__ || _MSC_VER >= 1400
117 #include "pmmintrin.h"
127 #define IPPI_CALL(func) CV_Assert((func) >= 0)
131 #include "tbb/tbb_stddef.h"
132 #if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202
144 typedef tbb::blocked_range<int> BlockedRange;
146 template<typename Body>
147 void parallel_for( const BlockedRange& range, const Body& body )
149 tbb::parallel_for(range, body);
152 template<typename Iterator, typename Body>
153 void parallel_do( Iterator first, Iterator last, const Body& body )
155 tbb::parallel_do(first, last, body);
158 typedef tbb::concurrent_vector<Rect> ConcurrentRectVector;
166 BlockedRange() : _begin(0), _end(0), _grainsize(0) {}
167 BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {}
168 int begin() const { return _begin; }
169 int end() const { return _end; }
170 int grainsize() const { return _grainsize; }
173 int _begin, _end, _grainsize;
176 template<typename Body>
177 void parallel_for( const BlockedRange& range, const Body& body )
182 template<typename Iterator, typename Body>
183 void parallel_do( Iterator first, Iterator last, const Body& body )
185 for( ; first != last; ++first )
189 typedef std::vector<Rect> ConcurrentRectVector;