From 52a904e17b28b59ab149f3eb57ff030468bcf1ef Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Sun, 20 Oct 2013 17:28:45 +0200 Subject: [PATCH 1/6] Fixed MSVC 2013 build errors and workaround for an internal compiler crash. --- 3rdparty/openexr/IlmImf/ImfAcesFile.cpp | 1 + 3rdparty/openexr/IlmImf/ImfOutputFile.cpp | 1 + 3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp | 1 + 3rdparty/openexr/IlmImf/ImfTiledMisc.cpp | 1 + 3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp | 1 + 3rdparty/openexr/Imath/ImathMatrixAlgo.cpp | 1 + modules/features2d/src/features2d_init.cpp | 2 +- modules/features2d/src/orb.cpp | 13 +++++++++---- 8 files changed, 16 insertions(+), 5 deletions(-) diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp index de4bf83c6a..9418b9d2a1 100644 --- a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp +++ b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp @@ -42,6 +42,7 @@ #include #include #include +#include // for std::max() using namespace std; using namespace Imath; diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp index 8831ec94d1..e69b92bd57 100644 --- a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp +++ b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp @@ -58,6 +58,7 @@ #include #include #include +#include // for std::max() namespace Imf { diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp index f7a12a3476..5d8b52201b 100644 --- a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp +++ b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp @@ -56,6 +56,7 @@ #include #include #include +#include // for std::max() namespace Imf { diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp index 57f52f17f8..9588e789f6 100644 --- a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp +++ b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp @@ -43,6 +43,7 @@ #include "Iex.h" #include #include +#include // for std::max() namespace Imf { diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp index 08821060d8..0bc3cb3c30 100644 --- a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp +++ b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp @@ -63,6 +63,7 @@ #include #include #include +#include // for std::max() namespace Imf { diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp index f0d2ed679f..7ddc64968f 100644 --- a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp +++ b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp @@ -44,6 +44,7 @@ #include "ImathMatrixAlgo.h" #include +#include // for std::max() #if defined(OPENEXR_DLL) #define EXPORT_CONST __declspec(dllexport) diff --git a/modules/features2d/src/features2d_init.cpp b/modules/features2d/src/features2d_init.cpp index 780a67b87a..a49ea9f790 100644 --- a/modules/features2d/src/features2d_init.cpp +++ b/modules/features2d/src/features2d_init.cpp @@ -176,7 +176,7 @@ CV_INIT_ALGORITHM(DenseFeatureDetector, "Feature2D.Dense", obj.info()->addParam(obj, "varyImgBoundWithScale", obj.varyImgBoundWithScale)); CV_INIT_ALGORITHM(GridAdaptedFeatureDetector, "Feature2D.Grid", - obj.info()->addParam(obj, "detector", obj.detector); + obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0, "Detector algorithm."); obj.info()->addParam(obj, "maxTotalKeypoints", obj.maxTotalKeypoints); obj.info()->addParam(obj, "gridRows", obj.gridRows); obj.info()->addParam(obj, "gridCols", obj.gridCols)); diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp index 7ed3ff03c3..5790faf263 100644 --- a/modules/features2d/src/orb.cpp +++ b/modules/features2d/src/orb.cpp @@ -139,9 +139,14 @@ static void computeOrbDescriptor(const KeyPoint& kpt, int step = (int)img.step; #if 1 - #define GET_VALUE(idx) \ - center[cvRound(pattern[idx].x*b + pattern[idx].y*a)*step + \ - cvRound(pattern[idx].x*a - pattern[idx].y*b)] + float x, y; + int ix, iy; +#define GET_VALUE(idx) \ + (x = pattern[idx].x*a - pattern[idx].y*b, \ + y = pattern[idx].x*b + pattern[idx].y*a, \ + ix = cvRound(x), \ + iy = cvRound(y), \ + *(center + iy*step + ix) ) #else float x, y; int ix, iy; @@ -935,7 +940,7 @@ void ORB::operator()( InputArray _image, InputArray _mask, std::vector } } -void ORB::detectImpl( const Mat& image, std::vector& keypoints, const Mat& mask) const +void ORB::detectImpl(const Mat& image, std::vector& keypoints, const Mat& mask) const { (*this)(image, mask, keypoints, noArray(), false); } From bec35eeddb185ce9480ba2f413bd63c5cc5e90d7 Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Mon, 21 Oct 2013 15:57:11 +0200 Subject: [PATCH 2/6] Avoid duplicated variable declarations. --- modules/features2d/src/orb.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp index 5790faf263..8d12060bd9 100644 --- a/modules/features2d/src/orb.cpp +++ b/modules/features2d/src/orb.cpp @@ -138,9 +138,9 @@ static void computeOrbDescriptor(const KeyPoint& kpt, const uchar* center = &img.at(cvRound(kpt.pt.y), cvRound(kpt.pt.x)); int step = (int)img.step; -#if 1 float x, y; int ix, iy; +#if 1 #define GET_VALUE(idx) \ (x = pattern[idx].x*a - pattern[idx].y*b, \ y = pattern[idx].x*b + pattern[idx].y*a, \ @@ -148,8 +148,6 @@ static void computeOrbDescriptor(const KeyPoint& kpt, iy = cvRound(y), \ *(center + iy*step + ix) ) #else - float x, y; - int ix, iy; #define GET_VALUE(idx) \ (x = pattern[idx].x*a - pattern[idx].y*b, \ y = pattern[idx].x*b + pattern[idx].y*a, \ From c33ca77838e899956ae9da4502ec0cf7c426ed77 Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Mon, 21 Oct 2013 15:59:26 +0200 Subject: [PATCH 3/6] Undo changing whitespace. --- modules/features2d/src/orb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp index 8d12060bd9..a6e8ffab3c 100644 --- a/modules/features2d/src/orb.cpp +++ b/modules/features2d/src/orb.cpp @@ -938,7 +938,7 @@ void ORB::operator()( InputArray _image, InputArray _mask, std::vector } } -void ORB::detectImpl(const Mat& image, std::vector& keypoints, const Mat& mask) const +void ORB::detectImpl( const Mat& image, std::vector& keypoints, const Mat& mask) const { (*this)(image, mask, keypoints, noArray(), false); } From 77023e23667b8a4cce531d7ba62d8572a74f16a6 Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Mon, 21 Oct 2013 21:17:15 +0200 Subject: [PATCH 4/6] Added comment to features2d_init.cpp explaining the reason for the extra parameters. --- modules/features2d/src/features2d_init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/features2d/src/features2d_init.cpp b/modules/features2d/src/features2d_init.cpp index a49ea9f790..fb4a0ce375 100644 --- a/modules/features2d/src/features2d_init.cpp +++ b/modules/features2d/src/features2d_init.cpp @@ -176,7 +176,7 @@ CV_INIT_ALGORITHM(DenseFeatureDetector, "Feature2D.Dense", obj.info()->addParam(obj, "varyImgBoundWithScale", obj.varyImgBoundWithScale)); CV_INIT_ALGORITHM(GridAdaptedFeatureDetector, "Feature2D.Grid", - obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0, "Detector algorithm."); + obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0, "Detector algorithm."); // Extra params added to avoid VS2013 fatal error in opencv2/core.hpp (decl. of addParam) obj.info()->addParam(obj, "maxTotalKeypoints", obj.maxTotalKeypoints); obj.info()->addParam(obj, "gridRows", obj.gridRows); obj.info()->addParam(obj, "gridCols", obj.gridCols)); From 27b02921f33f777046a971a066157ebee6425bc1 Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Mon, 21 Oct 2013 21:41:27 +0200 Subject: [PATCH 5/6] Added patch file for fixing VS2013 in 3rd party lib OpenEXR --- 3rdparty/openexr/fix_msvc2013_errors.patch | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 3rdparty/openexr/fix_msvc2013_errors.patch diff --git a/3rdparty/openexr/fix_msvc2013_errors.patch b/3rdparty/openexr/fix_msvc2013_errors.patch new file mode 100644 index 0000000000..0ce106f13b --- /dev/null +++ b/3rdparty/openexr/fix_msvc2013_errors.patch @@ -0,0 +1,72 @@ +diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp +index de4bf83..9418b9d 100644 +--- a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp ++++ b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include // for std::max() + + using namespace std; + using namespace Imath; +diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp +index 8831ec9..e69b92b 100644 +--- a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp ++++ b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp +@@ -58,6 +58,7 @@ + #include + #include + #include ++#include // for std::max() + + + namespace Imf { +diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp +index f7a12a3..5d8b522 100644 +--- a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp ++++ b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp +@@ -56,6 +56,7 @@ + #include + #include + #include ++#include // for std::max() + + + namespace Imf { +diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp +index 57f52f1..9588e78 100644 +--- a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp ++++ b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp +@@ -43,6 +43,7 @@ + #include "Iex.h" + #include + #include ++#include // for std::max() + + + namespace Imf { +diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp +index 0882106..0bc3cb3 100644 +--- a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp ++++ b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp +@@ -63,6 +63,7 @@ + #include + #include + #include ++#include // for std::max() + + + namespace Imf { +diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp +index f0d2ed6..7ddc649 100644 +--- a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp ++++ b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp +@@ -44,6 +44,7 @@ + + #include "ImathMatrixAlgo.h" + #include ++#include // for std::max() + + #if defined(OPENEXR_DLL) + #define EXPORT_CONST __declspec(dllexport) From 80e667b647615ef865e551c30effe46f03ff27f4 Mon Sep 17 00:00:00 2001 From: Jose-Luis Blanco-Claraco Date: Mon, 21 Oct 2013 21:43:26 +0200 Subject: [PATCH 6/6] Minimized the number of arguments required to workaround the MSVC2013 compiler bug. --- modules/features2d/src/features2d_init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/features2d/src/features2d_init.cpp b/modules/features2d/src/features2d_init.cpp index fb4a0ce375..959c1ac9d4 100644 --- a/modules/features2d/src/features2d_init.cpp +++ b/modules/features2d/src/features2d_init.cpp @@ -176,7 +176,7 @@ CV_INIT_ALGORITHM(DenseFeatureDetector, "Feature2D.Dense", obj.info()->addParam(obj, "varyImgBoundWithScale", obj.varyImgBoundWithScale)); CV_INIT_ALGORITHM(GridAdaptedFeatureDetector, "Feature2D.Grid", - obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0, "Detector algorithm."); // Extra params added to avoid VS2013 fatal error in opencv2/core.hpp (decl. of addParam) + obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0); // Extra params added to avoid VS2013 fatal error in opencv2/core.hpp (decl. of addParam) obj.info()->addParam(obj, "maxTotalKeypoints", obj.maxTotalKeypoints); obj.info()->addParam(obj, "gridRows", obj.gridRows); obj.info()->addParam(obj, "gridCols", obj.gridCols));