OCV_OPTION(WITH_QT "Build with Qt Backend support" OFF IF (NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O insted of QTKit" OFF IF APPLE )
OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS) )
+OCV_OPTION(WITH_CSTRIPES "Include C= support" OFF IF WIN32 )
OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) )
OCV_OPTION(WITH_UNICAP "Include Unicap support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) )
OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
status(" Use TBB:" HAVE_TBB THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
endif(DEFINED WITH_TBB)
+if(DEFINED WITH_CSTRIPES)
+ status(" Use C=:" HAVE_CSTRIPES THEN YES ELSE NO)
+endif(DEFINED WITH_CSTRIPES)
+
if(DEFINED WITH_CUDA)
status(" Use Cuda:" HAVE_CUDA THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
endif(DEFINED WITH_CUDA)
--- /dev/null
+if(WIN32)
+ find_path( CSTRIPES_LIB_DIR
+ NAMES "С=.lib"
+ DOC "The path to C= lib and dll")
+ if(CSTRIPES_LIB_DIR)
+ ocv_include_directories("${CSTRIPES_LIB_DIR}/..")
+ link_directories("${CSTRIPES_LIB_DIR}")
+ set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} "С=")
+ set(HAVE_CSTRIPES 1)
+ endif()
+endif()
include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake")
endif(WITH_TBB)
+# --- C= ---
+if(WITH_CSTRIPES)
+ include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCStripes.cmake")
+endif(WITH_CSTRIPES)
+
# --- IPP ---
ocv_clear_vars(IPP_FOUND)
if(WITH_IPP)
/* Intel Threading Building Blocks */
#cmakedefine HAVE_TBB
+/* C= */
+#cmakedefine HAVE_CSTRIPES
+
/* Eigen Matrix & Linear Algebra Library */
#cmakedefine HAVE_EIGEN
#include "precomp.hpp"
-#if !defined HAVE_TBB && !defined HAVE_OPENMP && !defined HAVE_GCD && !defined HAVE_CONCURRENCY
+#if !defined HAVE_TBB && !defined HAVE_OPENMP && !defined HAVE_GCD && !defined HAVE_CONCURRENCY && !defined HAVE_CSTRIPES
#ifdef __APPLE__
#define HAVE_GCD
#elif defined _MSC_VER && _MSC_VER >= 1600
#else
#undef HAVE_TBB
#endif // end TBB version
-#endif // HAVE_CONCURRENCY
+#elif defined HAVE_CSTRIPES
+ #include "C=.h"
+ #undef shared
+#endif
/*
HAVE_TBB - using TBB
for (int i = range.start; i < range.end; ++i)
body(Range(i, i + 1));
-#elif defined (HAVE_GCD)
+#elif defined HAVE_GCD
dispatch_queue_t concurrent_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_apply_f(range.end - range.start, concurrent_queue, &const_cast<ParallelLoopBody&>(body), block_function);
+#elif defined HAVE_CSTRIPES
+
+ parallel()
+ {
+ int offset = range.start;
+ int len = range.end - offset;
+ Range r(offset + CPX_RANGE_START(len), offset + CPX_RANGE_END(len));
+ body(r);
+ barrier();
+ }
+
#else
body(range);
_dst.create( src.size(), src.type() );
Mat dst = _dst.getMat();
- int nStripes = 1;
-#if defined HAVE_TBB && defined ANDROID
- nStripes = 4;
-#endif
-
if( src.depth() == CV_8U )
{
int ithresh = cvFloor(thresh);
;
else
CV_Error( CV_StsUnsupportedFormat, "" );
-
- parallel_for_(Range(0, nStripes),
+
+ size_t nStripes = (src.total() + (1<<15)) >> 16;
+ nStripes = MAX(MIN(nStripes, (size_t)4), (size_t)1);
+ parallel_for_(Range(0, (int)nStripes),
ThresholdRunner(src, dst, nStripes, thresh, maxval, type));
return thresh;
}