diff --git a/modules/calib3d/test/test_affine3d_estimator.cpp b/modules/calib3d/test/test_affine3d_estimator.cpp index 9c3821bbc4..42e10a0e77 100644 --- a/modules/calib3d/test/test_affine3d_estimator.cpp +++ b/modules/calib3d/test/test_affine3d_estimator.cpp @@ -138,13 +138,8 @@ bool CV_Affine3D_EstTest::testNPoints() std::transform(fpts.ptr(), fpts.ptr() + n, tpts.ptr(), WrapAff(aff)); /* adding noise*/ -#ifdef CV_CXX11 std::transform(tpts.ptr() + m, tpts.ptr() + n, tpts.ptr() + m, [=] (const Point3f& pt) -> Point3f { return Noise(noise_level)(pt + shift_outl); }); -#else - std::transform(tpts.ptr() + m, tpts.ptr() + n, tpts.ptr() + m, std::bind2nd(std::plus(), shift_outl)); - std::transform(tpts.ptr() + m, tpts.ptr() + n, tpts.ptr() + m, Noise(noise_level)); -#endif Mat aff_est; vector outl; diff --git a/modules/core/include/opencv2/core/cuda/functional.hpp b/modules/core/include/opencv2/core/cuda/functional.hpp index b28f7a5e0e..7f404dece5 100644 --- a/modules/core/include/opencv2/core/cuda/functional.hpp +++ b/modules/core/include/opencv2/core/cuda/functional.hpp @@ -58,7 +58,6 @@ namespace cv { namespace cuda { namespace device { // Function Objects -#ifdef CV_CXX11 template struct unary_function { typedef Argument argument_type; @@ -70,10 +69,6 @@ namespace cv { namespace cuda { namespace device typedef Argument2 second_argument_type; typedef Result result_type; }; -#else - template struct unary_function : public std::unary_function {}; - template struct binary_function : public std::binary_function {}; -#endif // Arithmetic Operations template struct plus : binary_function diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h index 32e5343ff4..b424d14799 100644 --- a/modules/core/include/opencv2/core/cvdef.h +++ b/modules/core/include/opencv2/core/cvdef.h @@ -417,6 +417,9 @@ Cv64suf; # undef CV_CXX11 # endif #endif +#ifndef CV_CXX11 +# error "OpenCV 4.x+ requires enabled C++11 support" +#endif /****************************************************************************************\ diff --git a/modules/core/include/opencv2/core/mat.hpp b/modules/core/include/opencv2/core/mat.hpp index ca1b3aa9b5..627c7d14e6 100644 --- a/modules/core/include/opencv2/core/mat.hpp +++ b/modules/core/include/opencv2/core/mat.hpp @@ -53,9 +53,7 @@ #include "opencv2/core/bufferpool.hpp" -#ifdef CV_CXX11 #include -#endif namespace cv { @@ -984,7 +982,6 @@ public: */ template explicit Mat(const std::vector<_Tp>& vec, bool copyData=false); -#ifdef CV_CXX11 /** @overload */ template::value>::type> @@ -993,7 +990,6 @@ public: /** @overload */ template explicit Mat(const std::initializer_list sizes, const std::initializer_list<_Tp> list); -#endif #ifdef CV_CXX_STD_ARRAY /** @overload @@ -2210,10 +2206,8 @@ public: explicit Mat_(const Point3_::channel_type>& pt, bool copyData=true); explicit Mat_(const MatCommaInitializer_<_Tp>& commaInitializer); -#ifdef CV_CXX11 Mat_(std::initializer_list<_Tp> values); explicit Mat_(const std::initializer_list sizes, const std::initializer_list<_Tp> values); -#endif #ifdef CV_CXX_STD_ARRAY template explicit Mat_(const std::array<_Tp, _Nm>& arr, bool copyData=false); diff --git a/modules/core/include/opencv2/core/mat.inl.hpp b/modules/core/include/opencv2/core/mat.inl.hpp index 9b2da34e61..dc1eadfefc 100644 --- a/modules/core/include/opencv2/core/mat.inl.hpp +++ b/modules/core/include/opencv2/core/mat.inl.hpp @@ -574,7 +574,6 @@ Mat::Mat(const std::vector<_Tp>& vec, bool copyData) Mat((int)vec.size(), 1, traits::Type<_Tp>::value, (uchar*)&vec[0]).copyTo(*this); } -#ifdef CV_CXX11 template inline Mat::Mat(const std::initializer_list<_Tp> list) : Mat() @@ -594,7 +593,6 @@ Mat::Mat(const std::initializer_list sizes, const std::initializer_list<_Tp CV_Assert(size_total == list.size()); Mat((int)sizes.size(), (int*)sizes.begin(), traits::Type<_Tp>::value, (uchar*)list.begin()).copyTo(*this); } -#endif #ifdef CV_CXX_STD_ARRAY template inline @@ -1634,7 +1632,6 @@ Mat_<_Tp>::Mat_(const std::vector<_Tp>& vec, bool copyData) : Mat(vec, copyData) {} -#ifdef CV_CXX11 template inline Mat_<_Tp>::Mat_(std::initializer_list<_Tp> list) : Mat(list) @@ -1644,7 +1641,6 @@ template inline Mat_<_Tp>::Mat_(const std::initializer_list sizes, std::initializer_list<_Tp> list) : Mat(sizes, list) {} -#endif #ifdef CV_CXX_STD_ARRAY template template inline diff --git a/modules/core/include/opencv2/core/matx.hpp b/modules/core/include/opencv2/core/matx.hpp index e664a3e84c..cdeda40f7b 100644 --- a/modules/core/include/opencv2/core/matx.hpp +++ b/modules/core/include/opencv2/core/matx.hpp @@ -53,9 +53,7 @@ #include "opencv2/core/traits.hpp" #include "opencv2/core/saturate.hpp" -#ifdef CV_CXX11 #include -#endif namespace cv { @@ -141,9 +139,7 @@ public: _Tp v12, _Tp v13, _Tp v14, _Tp v15); //!< 1x16, 4x4 or 16x1 matrix explicit Matx(const _Tp* vals); //!< initialize from a plain array -#ifdef CV_CXX11 Matx(std::initializer_list<_Tp>); //!< initialize from an initializer list -#endif static Matx all(_Tp alpha); static Matx zeros(); @@ -361,9 +357,7 @@ public: Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9, _Tp v10, _Tp v11, _Tp v12, _Tp v13); //!< 14-element vector constructor explicit Vec(const _Tp* values); -#ifdef CV_CXX11 Vec(std::initializer_list<_Tp>); -#endif Vec(const Vec<_Tp, cn>& v); @@ -665,7 +659,6 @@ Matx<_Tp, m, n>::Matx(const _Tp* values) for( int i = 0; i < channels; i++ ) val[i] = values[i]; } -#ifdef CV_CXX11 template inline Matx<_Tp, m, n>::Matx(std::initializer_list<_Tp> list) { @@ -676,7 +669,6 @@ Matx<_Tp, m, n>::Matx(std::initializer_list<_Tp> list) val[i++] = elem; } } -#endif template inline Matx<_Tp, m, n> Matx<_Tp, m, n>::all(_Tp alpha) @@ -1019,11 +1011,9 @@ template inline Vec<_Tp, cn>::Vec(const _Tp* values) : Matx<_Tp, cn, 1>(values) {} -#ifdef CV_CXX11 template inline Vec<_Tp, cn>::Vec(std::initializer_list<_Tp> list) : Matx<_Tp, cn, 1>(list) {} -#endif template inline Vec<_Tp, cn>::Vec(const Vec<_Tp, cn>& m) diff --git a/modules/core/include/opencv2/core/utility.hpp b/modules/core/include/opencv2/core/utility.hpp index ba76176723..092f732c78 100644 --- a/modules/core/include/opencv2/core/utility.hpp +++ b/modules/core/include/opencv2/core/utility.hpp @@ -56,9 +56,7 @@ #include "opencv2/core.hpp" #include -#ifdef CV_CXX11 #include -#endif namespace cv { @@ -531,7 +529,6 @@ public: */ CV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.); -#ifdef CV_CXX11 class ParallelLoopBodyLambdaWrapper : public ParallelLoopBody { private: @@ -551,7 +548,6 @@ inline void parallel_for_(const Range& range, std::function { parallel_for_(range, ParallelLoopBodyLambdaWrapper(functor), nstripes); } -#endif /////////////////////////////// forEach method of cv::Mat //////////////////////////// template inline diff --git a/modules/core/src/parallel_impl.cpp b/modules/core/src/parallel_impl.cpp index bc64fce7a8..cf8165e3cd 100644 --- a/modules/core/src/parallel_impl.cpp +++ b/modules/core/src/parallel_impl.cpp @@ -21,27 +21,15 @@ //#define CV_USE_GLOBAL_WORKERS_COND_VAR // not effective on many-core systems (10+) -#ifdef CV_CXX11 #include -#else -#include // _POSIX_PRIORITY_SCHEDULING -#endif // Spin lock's OS-level yield #ifdef DECLARE_CV_YIELD DECLARE_CV_YIELD #endif #ifndef CV_YIELD -# ifdef CV_CXX11 -# include -# define CV_YIELD() std::this_thread::yield() -# elif defined(_POSIX_PRIORITY_SCHEDULING) -# include -# define CV_YIELD() sched_yield() -# else -# warning "Can't detect sched_yield() on the target platform. Specify CV_YIELD() definition via compiler flags." -# define CV_YIELD() /* no-op: works, but not effective */ -# endif +# include +# define CV_YIELD() std::this_thread::yield() #endif // CV_YIELD // Spin lock's CPU-level yield (required for Hyper-Threading) @@ -290,15 +278,9 @@ public: is_completed(false) { CV_LOG_VERBOSE(NULL, 5, "ParallelJob::ParallelJob(" << (void*)this << ")"); -#ifdef CV_CXX11 current_task.store(0, std::memory_order_relaxed); active_thread_count.store(0, std::memory_order_relaxed); completed_thread_count.store(0, std::memory_order_relaxed); -#else - current_task = 0; - active_thread_count = 0; - completed_thread_count = 0; -#endif dummy0_[0] = 0, dummy1_[0] = 0, dummy2_[0] = 0; // compiler warning } @@ -319,11 +301,7 @@ public: for (;;) { int chunk_size = std::max(1, (task_count - current_task) / remaining_multiplier); -#ifdef CV_CXX11 int id = current_task.fetch_add(chunk_size, std::memory_order_seq_cst); -#else - int id = (int)CV_XADD(¤t_task, chunk_size); -#endif if (id >= task_count) break; // no more free tasks @@ -349,7 +327,7 @@ public: const ParallelLoopBody& body; const Range range; const unsigned nstripes; -#ifdef CV_CXX11 + std::atomic current_task; // next free part of job int64 dummy0_[8]; // avoid cache-line reusing for the same atomics @@ -358,16 +336,6 @@ public: std::atomic completed_thread_count; // number of threads completed any activities on this job int64 dummy2_[8]; // avoid cache-line reusing for the same atomics -#else - /*CV_DECL_ALIGNED(64)*/ volatile int current_task; // next free part of job - int64 dummy0_[8]; // avoid cache-line reusing for the same atomics - - /*CV_DECL_ALIGNED(64)*/ volatile int active_thread_count; // number of threads worked on this job - int64 dummy1_[8]; // avoid cache-line reusing for the same atomics - - /*CV_DECL_ALIGNED(64)*/ volatile int completed_thread_count; // number of threads completed any activities on this job - int64 dummy2_[8]; // avoid cache-line reusing for the same atomics -#endif volatile bool is_completed; // std::atomic_flag ? @@ -437,11 +405,7 @@ void WorkerThread::thread_body() CV_LOG_VERBOSE(NULL, 5, "Thread: job size=" << j->range.size() << " done=" << j->current_task); if (j->current_task < j->range.size()) { -#ifdef CV_CXX11 int other = j->active_thread_count.fetch_add(1, std::memory_order_seq_cst); -#else - int other = CV_XADD(&j->active_thread_count, 1); -#endif CV_LOG_VERBOSE(NULL, 5, "Thread: processing new job (with " << other << " other threads)"); CV_UNUSED(other); #ifdef CV_PROFILE_THREADS stat.threadExecuteStart = getTickCount(); @@ -450,13 +414,8 @@ void WorkerThread::thread_body() #else j->execute(true); #endif -#ifdef CV_CXX11 int completed = j->completed_thread_count.fetch_add(1, std::memory_order_seq_cst) + 1; int active = j->active_thread_count.load(std::memory_order_acquire); -#else - int completed = (int)CV_XADD(&j->completed_thread_count, 1) + 1; - int active = j->active_thread_count; -#endif if (CV_WORKER_ACTIVE_WAIT_THREADS_LIMIT > 0) { allow_active_wait = true; diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 53b43ae8c2..bb149dbae1 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -1344,8 +1344,6 @@ TEST(Core_Matx, fromMat_) ASSERT_EQ( cvtest::norm(a, b, NORM_INF), 0.); } -#ifdef CV_CXX11 - TEST(Core_Matx, from_initializer_list) { Mat_ a = (Mat_(2,2) << 10, 11, 12, 13); @@ -1360,8 +1358,6 @@ TEST(Core_Mat, regression_9507) EXPECT_EQ(25u, m2.total()); } -#endif // CXX11 - TEST(Core_InputArray, empty) { vector > data; @@ -1711,8 +1707,6 @@ TEST(Mat, regression_8680) ASSERT_EQ(mat.channels(), 2); } -#ifdef CV_CXX11 - TEST(Mat_, range_based_for) { Mat_ img = Mat_::zeros(3, 3); @@ -1774,6 +1768,4 @@ TEST(Mat_, template_based_ptr) ASSERT_FLOAT_EQ(66.0f, *(mat.ptr(idx))); } -#endif - }} // namespace diff --git a/modules/cudafeatures2d/src/brute_force_matcher.cpp b/modules/cudafeatures2d/src/brute_force_matcher.cpp index 5287546bbe..87316846d5 100644 --- a/modules/cudafeatures2d/src/brute_force_matcher.cpp +++ b/modules/cudafeatures2d/src/brute_force_matcher.cpp @@ -564,12 +564,8 @@ namespace if (compactResult) { -#ifdef CV_CXX11 std::vector< std::vector >::iterator new_end = std::remove_if(matches.begin(), matches.end(), [](const std::vector& e)->bool { return e.empty(); }); -#else - std::vector< std::vector >::iterator new_end = std::remove_if(matches.begin(), matches.end(), std::mem_fun_ref(&std::vector::empty)); -#endif matches.erase(new_end, matches.end()); } } diff --git a/modules/imgproc/src/featureselect.cpp b/modules/imgproc/src/featureselect.cpp index 95b44b3742..c384a81148 100644 --- a/modules/imgproc/src/featureselect.cpp +++ b/modules/imgproc/src/featureselect.cpp @@ -52,11 +52,7 @@ namespace cv { -#ifdef CV_CXX11 struct greaterThanPtr -#else -struct greaterThanPtr : public std::binary_function -#endif { bool operator () (const float * a, const float * b) const // Ensure a fully deterministic result of the sort diff --git a/modules/imgproc/src/generalized_hough.cpp b/modules/imgproc/src/generalized_hough.cpp index 027e67a77e..c4f121df8a 100644 --- a/modules/imgproc/src/generalized_hough.cpp +++ b/modules/imgproc/src/generalized_hough.cpp @@ -385,11 +385,7 @@ namespace const double thetaScale = levels_ / 360.0; r_table_.resize(levels_ + 1); -#ifdef CV_CXX11 std::for_each(r_table_.begin(), r_table_.end(), [](std::vector& e)->void { e.clear(); }); -#else - std::for_each(r_table_.begin(), r_table_.end(), std::mem_fun_ref(&std::vector::clear)); -#endif for (int y = 0; y < templSize_.height; ++y) { @@ -696,12 +692,7 @@ namespace getContourPoints(edges, dx, dy, points); features.resize(levels_ + 1); -#ifdef CV_CXX11 std::for_each(features.begin(), features.end(), [=](std::vector& e) { e.clear(); e.reserve(maxBufferSize_); }); -#else - std::for_each(features.begin(), features.end(), std::mem_fun_ref(&std::vector::clear)); - std::for_each(features.begin(), features.end(), std::bind2nd(std::mem_fun_ref(&std::vector::reserve), maxBufferSize_)); -#endif for (size_t i = 0; i < points.size(); ++i) { diff --git a/modules/imgproc/test/test_goodfeaturetotrack.cpp b/modules/imgproc/test/test_goodfeaturetotrack.cpp index 362cc014cf..1a339bea55 100644 --- a/modules/imgproc/test/test_goodfeaturetotrack.cpp +++ b/modules/imgproc/test/test_goodfeaturetotrack.cpp @@ -56,11 +56,7 @@ enum { MINEIGENVAL=0, HARRIS=1, EIGENVALSVECS=2 }; /////////////////////ref////////////////////// -#ifdef CV_CXX11 struct greaterThanPtr -#else -struct greaterThanPtr : public std::binary_function -#endif { bool operator () (const float * a, const float * b) const { return *a > *b; } diff --git a/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp b/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp index 07dd587491..18cde13eab 100644 --- a/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp +++ b/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp @@ -46,10 +46,6 @@ #include -// After this condition removal update blacklist for bindings: modules/python/common.cmake -#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(__ANDROID__) || \ - defined(CV_CXX11) - #include namespace cv @@ -222,6 +218,5 @@ class CV_EXPORTS DetectionBasedTracker //! @} objdetect } //end of cv namespace -#endif #endif diff --git a/modules/objdetect/perf/opencl/perf_hogdetect.cpp b/modules/objdetect/perf/opencl/perf_hogdetect.cpp index 43c63d8cca..e7ca8c232a 100644 --- a/modules/objdetect/perf/opencl/perf_hogdetect.cpp +++ b/modules/objdetect/perf/opencl/perf_hogdetect.cpp @@ -53,11 +53,7 @@ namespace opencv_test { namespace ocl { ///////////// HOG//////////////////////// -#ifdef CV_CXX11 struct RectLess -#else -struct RectLess : public std::binary_function -#endif { bool operator()(const cv::Rect& a, const cv::Rect& b) const diff --git a/modules/objdetect/src/detection_based_tracker.cpp b/modules/objdetect/src/detection_based_tracker.cpp index 0cdcafacee..431c289a00 100644 --- a/modules/objdetect/src/detection_based_tracker.cpp +++ b/modules/objdetect/src/detection_based_tracker.cpp @@ -42,23 +42,12 @@ //M*/ #include "precomp.hpp" -#include - -#ifdef CV_CXX11 -#define USE_STD_THREADS -#endif - -#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(__ANDROID__) || defined(USE_STD_THREADS) #include "opencv2/core/utility.hpp" -#ifdef USE_STD_THREADS #include #include #include -#else //USE_STD_THREADS -#include -#endif //USE_STD_THREADS #if defined(DEBUG) || defined(_DEBUG) #undef DEBUGLOGS @@ -139,49 +128,26 @@ class cv::DetectionBasedTracker::SeparateDetectionWork } void setParameters(const cv::DetectionBasedTracker::Parameters& params) { -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif parameters = params; -#ifndef USE_STD_THREADS - pthread_mutex_unlock(&mutex); -#endif } inline void init() { -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif stateThread = STATE_THREAD_STOPPED; isObjectDetectingReady = false; shouldObjectDetectingResultsBeForgot = false; -#ifdef USE_STD_THREADS objectDetectorThreadStartStop.notify_one(); -#else - pthread_cond_signal(&(objectDetectorThreadStartStop)); - pthread_mutex_unlock(&mutex); -#endif } protected: DetectionBasedTracker& detectionBasedTracker; cv::Ptr cascadeInThread; -#ifdef USE_STD_THREADS std::thread second_workthread; std::mutex mtx; std::condition_variable objectDetectorRun; std::condition_variable objectDetectorThreadStartStop; -#else - pthread_t second_workthread; - pthread_mutex_t mutex; - pthread_cond_t objectDetectorRun; - pthread_cond_t objectDetectorThreadStartStop; -#endif std::vector resultDetect; volatile bool isObjectDetectingReady; volatile bool shouldObjectDetectingResultsBeForgot; @@ -217,28 +183,6 @@ cv::DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork(Detectio CV_Assert(_detector); cascadeInThread = _detector; -#ifndef USE_STD_THREADS - second_workthread = 0; - int res=0; - res=pthread_mutex_init(&mutex, NULL);//TODO: should be attributes? - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_mutex_init(&mutex, NULL) is %d", res); - throw(std::exception()); - } - res=pthread_cond_init (&objectDetectorRun, NULL); - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_cond_init(&objectDetectorRun,, NULL) is %d", res); - pthread_mutex_destroy(&mutex); - throw(std::exception()); - } - res=pthread_cond_init (&objectDetectorThreadStartStop, NULL); - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_cond_init(&objectDetectorThreadStartStop,, NULL) is %d", res); - pthread_cond_destroy(&objectDetectorRun); - pthread_mutex_destroy(&mutex); - throw(std::exception()); - } -#endif } cv::DetectionBasedTracker::SeparateDetectionWork::~SeparateDetectionWork() @@ -246,39 +190,20 @@ cv::DetectionBasedTracker::SeparateDetectionWork::~SeparateDetectionWork() if(stateThread!=STATE_THREAD_STOPPED) { LOGE("\n\n\nATTENTION!!! dangerous algorithm error: destructor DetectionBasedTracker::DetectionBasedTracker::~SeparateDetectionWork is called before stopping the workthread"); } -#ifndef USE_STD_THREADS - pthread_cond_destroy(&objectDetectorThreadStartStop); - pthread_cond_destroy(&objectDetectorRun); - pthread_mutex_destroy(&mutex); -#else second_workthread.join(); -#endif } bool cv::DetectionBasedTracker::SeparateDetectionWork::run() { LOGD("DetectionBasedTracker::SeparateDetectionWork::run() --- start"); -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); // unlocked when leaving scope -#else - pthread_mutex_lock(&mutex); -#endif if (stateThread != STATE_THREAD_STOPPED) { LOGE("DetectionBasedTracker::SeparateDetectionWork::run is called while the previous run is not stopped"); -#ifndef USE_STD_THREADS - pthread_mutex_unlock(&mutex); -#endif return false; } stateThread=STATE_THREAD_WORKING_SLEEPING; -#ifdef USE_STD_THREADS second_workthread = std::thread(workcycleObjectDetectorFunction, (void*)this); //TODO: add attributes? objectDetectorThreadStartStop.wait(mtx_lock); -#else - pthread_create(&second_workthread, NULL, workcycleObjectDetectorFunction, (void*)this); //TODO: add attributes? - pthread_cond_wait(&objectDetectorThreadStartStop, &mutex); - pthread_mutex_unlock(&mutex); -#endif LOGD("DetectionBasedTracker::SeparateDetectionWork::run --- end"); return true; } @@ -313,34 +238,18 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() std::vector objects; CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif { -#ifdef USE_STD_THREADS objectDetectorThreadStartStop.notify_one(); -#else - pthread_cond_signal(&objectDetectorThreadStartStop); -#endif LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- before waiting"); CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); -#ifdef USE_STD_THREADS objectDetectorRun.wait(mtx_lock); -#else - pthread_cond_wait(&objectDetectorRun, &mutex); -#endif if (isWorking()) { stateThread=STATE_THREAD_WORKING_WITH_IMAGE; } LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- after waiting"); } -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif bool isFirstStep=true; @@ -353,34 +262,18 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() if (! isFirstStep) { LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- before waiting"); CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); -#ifdef USE_STD_THREADS mtx_lock.lock(); -#else - pthread_mutex_lock(&mutex); -#endif if (!isWorking()) {//it is a rare case, but may cause a crash LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- go out from the workcycle from inner part of lock just before waiting"); -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif break; } CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); -#ifdef USE_STD_THREADS objectDetectorRun.wait(mtx_lock); -#else - pthread_cond_wait(&objectDetectorRun, &mutex); -#endif if (isWorking()) { stateThread=STATE_THREAD_WORKING_WITH_IMAGE; } -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- after waiting"); } else { @@ -427,11 +320,7 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() (void)(dt_detect_ms); LOGI("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- objects num==%d, t_ms=%.4f", (int)objects.size(), dt_detect_ms); -#ifdef USE_STD_THREADS mtx_lock.lock(); -#else - pthread_mutex_lock(&mutex); -#endif if (!shouldObjectDetectingResultsBeForgot) { resultDetect=objects; isObjectDetectingReady=true; @@ -443,11 +332,7 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() if(isWorking()) { stateThread=STATE_THREAD_WORKING_SLEEPING; } -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif objects.clear(); }// while(isWorking()) @@ -458,44 +343,25 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() void cv::DetectionBasedTracker::SeparateDetectionWork::stop() { //FIXME: TODO: should add quickStop functionality -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif if (!isWorking()) { -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif LOGE("SimpleHighguiDemoCore::stop is called but the SimpleHighguiDemoCore pthread is not active"); stateThread = STATE_THREAD_STOPPING; return; } stateThread=STATE_THREAD_STOPPING; LOGD("DetectionBasedTracker::SeparateDetectionWork::stop: before going to sleep to wait for the signal from the workthread"); -#ifdef USE_STD_THREADS objectDetectorRun.notify_one(); objectDetectorThreadStartStop.wait(mtx_lock); LOGD("DetectionBasedTracker::SeparateDetectionWork::stop: after receiving the signal from the workthread, stateThread=%d", (int)stateThread); mtx_lock.unlock(); -#else - pthread_cond_signal(&objectDetectorRun); - pthread_cond_wait(&objectDetectorThreadStartStop, &mutex); - LOGD("DetectionBasedTracker::SeparateDetectionWork::stop: after receiving the signal from the workthread, stateThread=%d", (int)stateThread); - pthread_mutex_unlock(&mutex); -#endif } void cv::DetectionBasedTracker::SeparateDetectionWork::resetTracking() { LOGD("DetectionBasedTracker::SeparateDetectionWork::resetTracking"); -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif if (stateThread == STATE_THREAD_WORKING_WITH_IMAGE) { LOGD("DetectionBasedTracker::SeparateDetectionWork::resetTracking: since workthread is detecting objects at the moment, we should make cascadeInThread stop detecting and forget the detecting results"); @@ -508,12 +374,7 @@ void cv::DetectionBasedTracker::SeparateDetectionWork::resetTracking() resultDetect.clear(); isObjectDetectingReady=false; -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif - } bool cv::DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread(const Mat& imageGray, std::vector& rectsWhereRegions) @@ -529,11 +390,7 @@ bool cv::DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingT bool shouldHandleResult = false; -#ifdef USE_STD_THREADS std::unique_lock mtx_lock(mtx); -#else - pthread_mutex_lock(&mutex); -#endif if (isObjectDetectingReady) { shouldHandleResult=true; @@ -562,18 +419,10 @@ bool cv::DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingT timeWhenDetectingThreadStartedWork = getTickCount() ; -#ifdef USE_STD_THREADS objectDetectorRun.notify_one(); -#else - pthread_cond_signal(&objectDetectorRun); -#endif } -#ifdef USE_STD_THREADS mtx_lock.unlock(); -#else - pthread_mutex_unlock(&mutex); -#endif LOGD("DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread: result: shouldHandleResult=%d", (shouldHandleResult?1:0)); return shouldHandleResult; @@ -1034,5 +883,3 @@ const cv::DetectionBasedTracker::Parameters& DetectionBasedTracker::getParameter { return parameters; } - -#endif //defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(__ANDROID__) || defined(USE_STD_THREADS) diff --git a/modules/ts/include/opencv2/ts/ts_perf.hpp b/modules/ts/include/opencv2/ts/ts_perf.hpp index a5d0acfa41..a61da5e618 100644 --- a/modules/ts/include/opencv2/ts/ts_perf.hpp +++ b/modules/ts/include/opencv2/ts/ts_perf.hpp @@ -706,11 +706,7 @@ namespace comparators { template -#ifdef CV_CXX11 struct RectLess_ -#else -struct RectLess_ : public std::binary_function, cv::Rect_, bool> -#endif { bool operator()(const cv::Rect_& r1, const cv::Rect_& r2) const { @@ -723,11 +719,7 @@ struct RectLess_ : public std::binary_function, cv::Rect_, bool> typedef RectLess_ RectLess; -#ifdef CV_CXX11 struct KeypointGreater -#else -struct KeypointGreater : public std::binary_function -#endif { bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const { diff --git a/modules/ts/src/cuda_test.cpp b/modules/ts/src/cuda_test.cpp index 307e1296a2..ca48d0631e 100644 --- a/modules/ts/src/cuda_test.cpp +++ b/modules/ts/src/cuda_test.cpp @@ -462,11 +462,7 @@ namespace cvtest return false; } -#ifdef CV_CXX11 struct KeyPointLess -#else - struct KeyPointLess : std::binary_function -#endif { bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const {