From 84a81579ba839c4224d3b1fba806e1d64a475597 Mon Sep 17 00:00:00 2001 From: Noah Stier Date: Wed, 27 Oct 2021 12:01:53 -0700 Subject: [PATCH 1/8] tvl1 cuda optflow optimization --- modules/cudaoptflow/src/tvl1flow.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/cudaoptflow/src/tvl1flow.cpp b/modules/cudaoptflow/src/tvl1flow.cpp index 5f28d4c617..3ea2d365a6 100644 --- a/modules/cudaoptflow/src/tvl1flow.cpp +++ b/modules/cudaoptflow/src/tvl1flow.cpp @@ -162,7 +162,9 @@ namespace GpuMat p32_buf; GpuMat diff_buf; - GpuMat norm_buf; + + GpuMat diff_sum_dev; + Mat diff_sum_host; }; void OpticalFlowDual_TVL1_Impl::calc(InputArray _frame0, InputArray _frame1, InputOutputArray _flow, Stream& stream) @@ -361,8 +363,11 @@ namespace estimateU(I1wx, I1wy, grad, rho_c, p11, p12, p21, p22, p31, p32, u1, u2, u3, diff, l_t, static_cast(theta_), gamma_, calcError, stream); if (calcError) { + cuda::calcSum(diff, diff_sum_dev, cv::noArray(), _stream); + diff_sum_dev.download(diff_sum_host, _stream); _stream.waitForCompletion(); - error = cuda::sum(diff, norm_buf)[0]; + + error = diff_sum_host.at(0,0); prevError = error; } else From 5dfe65d53ab3d1ac19a23f04b1fa274306615b65 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Oct 2021 05:20:23 +0000 Subject: [PATCH 2/8] cmake: fix popcnt detection with Intel Compiler --- cmake/OpenCVCompilerOptimizations.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/OpenCVCompilerOptimizations.cmake b/cmake/OpenCVCompilerOptimizations.cmake index 970dd28903..058443821a 100644 --- a/cmake/OpenCVCompilerOptimizations.cmake +++ b/cmake/OpenCVCompilerOptimizations.cmake @@ -238,7 +238,7 @@ if(X86 OR X86_64) ocv_intel_compiler_optimization_option(FP16 "-mavx" "/arch:AVX") ocv_intel_compiler_optimization_option(AVX "-mavx" "/arch:AVX") ocv_intel_compiler_optimization_option(FMA3 "" "") - ocv_intel_compiler_optimization_option(POPCNT "" "") + ocv_intel_compiler_optimization_option(POPCNT "-mpopcnt" "") # -mpopcnt is available since ICC 19.0.0 ocv_intel_compiler_optimization_option(SSE4_2 "-msse4.2" "/arch:SSE4.2") ocv_intel_compiler_optimization_option(SSE4_1 "-msse4.1" "/arch:SSE4.1") ocv_intel_compiler_optimization_option(SSE3 "-msse3" "/arch:SSE3") From 1726bb6c0decddb0fd6f6e2fc70777fcd2c59e68 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Oct 2021 05:49:05 +0000 Subject: [PATCH 3/8] build(icc): fix nodiscard attribute handling --- modules/core/include/opencv2/core/cvdef.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h index 6011b2a931..c2cdcad075 100644 --- a/modules/core/include/opencv2/core/cvdef.h +++ b/modules/core/include/opencv2/core/cvdef.h @@ -589,6 +589,8 @@ Cv64suf; # elif __cplusplus >= 201703L // available when compiler is C++17 compliant # define CV_NODISCARD_STD [[nodiscard]] +# elif defined(__INTEL_COMPILER) + // see above, available when C++17 is enabled # elif defined(_MSC_VER) && _MSC_VER >= 1911 && _MSVC_LANG >= 201703L // available with VS2017 v15.3+ with /std:c++17 or higher; works on functions and classes # define CV_NODISCARD_STD [[nodiscard]] From 75e2ba5af3adc26b08c60a81fbd6931ced0977b3 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Oct 2021 11:25:00 +0000 Subject: [PATCH 4/8] core(simd): fix compilation with MSVC-Clang --- modules/core/include/opencv2/core/hal/intrin_sse.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/include/opencv2/core/hal/intrin_sse.hpp b/modules/core/include/opencv2/core/hal/intrin_sse.hpp index 2244717e19..443ee16097 100644 --- a/modules/core/include/opencv2/core/hal/intrin_sse.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_sse.hpp @@ -244,7 +244,7 @@ struct v_uint64x2 explicit v_uint64x2(__m128i v) : val(v) {} v_uint64x2(uint64 v0, uint64 v1) { -#if defined(_MSC_VER) && _MSC_VER >= 1920/*MSVS 2019*/ && defined(_M_X64) +#if defined(_MSC_VER) && _MSC_VER >= 1920/*MSVS 2019*/ && defined(_M_X64) && !defined(__clang__) val = _mm_setr_epi64x((int64_t)v0, (int64_t)v1); #elif defined(__GNUC__) val = _mm_setr_epi64((__m64)v0, (__m64)v1); @@ -278,7 +278,7 @@ struct v_int64x2 explicit v_int64x2(__m128i v) : val(v) {} v_int64x2(int64 v0, int64 v1) { -#if defined(_MSC_VER) && _MSC_VER >= 1920/*MSVS 2019*/ && defined(_M_X64) +#if defined(_MSC_VER) && _MSC_VER >= 1920/*MSVS 2019*/ && defined(_M_X64) && !defined(__clang__) val = _mm_setr_epi64x((int64_t)v0, (int64_t)v1); #elif defined(__GNUC__) val = _mm_setr_epi64((__m64)v0, (__m64)v1); From d612c72405c69becc0b0b4af3a0942ea9ee86279 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Oct 2021 21:08:36 +0000 Subject: [PATCH 5/8] build: fix MSVC-Clang warnings about unused parameters in stubs --- modules/core/src/hal_replacement.hpp | 25 +++++++++++++--------- modules/features2d/src/hal_replacement.hpp | 25 +++++++++++++--------- modules/imgproc/src/hal_replacement.hpp | 25 +++++++++++++--------- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/modules/core/src/hal_replacement.hpp b/modules/core/src/hal_replacement.hpp index 1a558f2532..6ed795b5e1 100644 --- a/modules/core/src/hal_replacement.hpp +++ b/modules/core/src/hal_replacement.hpp @@ -47,12 +47,15 @@ #include "opencv2/core/hal/interface.h" -#if defined __GNUC__ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -#elif defined _MSC_VER -# pragma warning( push ) -# pragma warning( disable: 4100 ) +#if defined(__clang__) // clang or MSVC clang +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4100) +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #endif //! @addtogroup core_hal_interface @@ -731,10 +734,12 @@ inline int hal_ni_minMaxIdx(const uchar* src_data, size_t src_step, int width, i //! @} -#if defined __GNUC__ -# pragma GCC diagnostic pop -#elif defined _MSC_VER -# pragma warning( pop ) +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif #include "hal_internal.hpp" diff --git a/modules/features2d/src/hal_replacement.hpp b/modules/features2d/src/hal_replacement.hpp index 7780aa4a24..977cef1e32 100644 --- a/modules/features2d/src/hal_replacement.hpp +++ b/modules/features2d/src/hal_replacement.hpp @@ -44,12 +44,15 @@ #include "opencv2/core/hal/interface.h" -#if defined __GNUC__ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -#elif defined _MSC_VER -# pragma warning( push ) -# pragma warning( disable: 4100 ) +#if defined(__clang__) // clang or MSVC clang +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4100) +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #endif //! @addtogroup features2d_hal_interface @@ -103,10 +106,12 @@ inline int hal_ni_FAST(const uchar* src_data, size_t src_step, int width, int he //! @} -#if defined __GNUC__ -# pragma GCC diagnostic pop -#elif defined _MSC_VER -# pragma warning( pop ) +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif #include "custom_hal.hpp" diff --git a/modules/imgproc/src/hal_replacement.hpp b/modules/imgproc/src/hal_replacement.hpp index 3368093c56..d9ef7530f9 100644 --- a/modules/imgproc/src/hal_replacement.hpp +++ b/modules/imgproc/src/hal_replacement.hpp @@ -48,12 +48,15 @@ #include "opencv2/core/hal/interface.h" #include "opencv2/imgproc/hal/interface.h" -#if defined __GNUC__ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-parameter" -#elif defined _MSC_VER -# pragma warning( push ) -# pragma warning( disable: 4100 ) +#if defined(__clang__) // clang or MSVC clang +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4100) +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #endif //! @addtogroup imgproc_hal_interface @@ -809,10 +812,12 @@ inline int hal_ni_canny(const uchar* src_data, size_t src_step, uchar* dst_data, //! @} -#if defined __GNUC__ -# pragma GCC diagnostic pop -#elif defined _MSC_VER -# pragma warning( pop ) +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif #include "custom_hal.hpp" From a49cda65230c0094148fc7dddd70eac2c3ed418e Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Oct 2021 21:32:47 +0000 Subject: [PATCH 6/8] core: eliminate Winvalid-noreturn in base.hpp --- modules/core/include/opencv2/core/base.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/core/include/opencv2/core/base.hpp b/modules/core/include/opencv2/core/base.hpp index 12504974d9..19d496080c 100644 --- a/modules/core/include/opencv2/core/base.hpp +++ b/modules/core/include/opencv2/core/base.hpp @@ -297,7 +297,10 @@ It is possible to alternate error processing by using redirectError(). */ CV_EXPORTS void error(int _code, const String& _err, const char* _func, const char* _file, int _line); -#ifdef __GNUC__ +#if defined(__clang__) && defined(_MSC_VER) // MSVC-Clang +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Winvalid-noreturn" +#elif defined(__GNUC__) # if defined __clang__ || defined __APPLE__ # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Winvalid-noreturn" @@ -316,7 +319,10 @@ CV_INLINE CV_NORETURN void errorNoReturn(int _code, const String& _err, const ch # endif #endif } -#ifdef __GNUC__ + +#if defined(__clang__) && defined(_MSC_VER) // MSVC-Clang +# pragma clang diagnostic pop +#elif defined(__GNUC__) # if defined __clang__ || defined __APPLE__ # pragma GCC diagnostic pop # endif From e5647cf70d5d207b2147163a5ba842dfab7f3641 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 29 Oct 2021 02:02:32 +0300 Subject: [PATCH 7/8] cmake: use CMAKE_BUILD_TYPE=Release by default --- CMakeLists.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9f98bf23e..b660cdd33b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,12 @@ ocv_cmake_hook(CMAKE_INIT) # must go before the project()/enable_language() commands ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) +if(NOT DEFINED CMAKE_BUILD_TYPE + AND NOT OPENCV_SKIP_DEFAULT_BUILD_TYPE +) + message(STATUS "'Release' build type is used by default. Use CMAKE_BUILD_TYPE to specify build type (Release or Debug)") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build") +endif() if(DEFINED CMAKE_BUILD_TYPE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${CMAKE_CONFIGURATION_TYPES}") endif() @@ -599,10 +605,6 @@ endif() # ---------------------------------------------------------------------------- # OpenCV compiler and linker options # ---------------------------------------------------------------------------- -# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release: -if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "") - set(CMAKE_BUILD_TYPE Release) -endif() ocv_cmake_hook(POST_CMAKE_BUILD_OPTIONS) From 0ee61d178f79d9d679af6b34eda1009cdf1415c1 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sat, 30 Oct 2021 10:51:52 +0000 Subject: [PATCH 8/8] highgui: drop invalid cvGetWindowImageRect - return type is C++ template - removal from 'extern "C"' scope broke ABI anyway, so this symbols is removed completelly --- modules/highgui/include/opencv2/highgui/highgui_c.h | 5 ----- modules/highgui/src/window.cpp | 1 + 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/highgui/include/opencv2/highgui/highgui_c.h b/modules/highgui/include/opencv2/highgui/highgui_c.h index 35413139c7..d8323d0d93 100644 --- a/modules/highgui/include/opencv2/highgui/highgui_c.h +++ b/modules/highgui/include/opencv2/highgui/highgui_c.h @@ -135,11 +135,6 @@ CVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOS CVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value); CVAPI(double) cvGetWindowProperty(const char* name, int prop_id); -#ifdef __cplusplus // FIXIT remove in OpenCV 4.0 -/* Get window image rectangle coordinates, width and height */ -CVAPI(cv::Rect)cvGetWindowImageRect(const char* name); -#endif - /* display image within window (highgui windows remember their content) */ CVAPI(void) cvShowImage( const char* name, const CvArr* image ); diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 877d6751c9..cfe58a0277 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -191,6 +191,7 @@ CV_IMPL double cvGetWindowProperty(const char* name, int prop_id) } } +static cv::Rect cvGetWindowImageRect(const char* name) { if (!name)