diff --git a/modules/core/include/opencv2/core/types_c.h b/modules/core/include/opencv2/core/types_c.h index 68164fa923..11dbabfa7e 100644 --- a/modules/core/include/opencv2/core/types_c.h +++ b/modules/core/include/opencv2/core/types_c.h @@ -259,6 +259,10 @@ enum { * Common macros and inline functions * \****************************************************************************************/ +#ifdef HAVE_TEGRA_OPTIMIZATION +# include "tegra_round.hpp" +#endif + #define CV_PI 3.1415926535897932384626433832795 #define CV_LOG2 0.69314718055994530941723212145818 @@ -300,7 +304,11 @@ CV_INLINE int cvRound( double value ) } return t; #elif defined HAVE_LRINT || defined CV_ICC || defined __GNUC__ +# ifdef HAVE_TEGRA_OPTIMIZATION + TEGRA_ROUND(value); +# else return (int)lrint(value); +# endif #else // while this is not IEEE754-compliant rounding, it's usually a good enough approximation return (int)(value + (value >= 0 ? 0.5 : -0.5)); diff --git a/modules/core/perf/perf_core_arithm.cpp b/modules/core/perf/perf_core_arithm.cpp index 83d8d1ee88..7e48ca7159 100644 --- a/modules/core/perf/perf_core_arithm.cpp +++ b/modules/core/perf/perf_core_arithm.cpp @@ -62,3 +62,16 @@ PERF_TEST_P__CORE_ARITHM_SCALAR(subtract, TYPICAL_MATS_CORE_ARITHM) PERF_TEST_P__CORE_ARITHM_SCALAR(absdiff, TYPICAL_MATS_CORE_ARITHM) +PERF_TEST(convert, cvRound) +{ + double number = theRNG().uniform(-100, 100); + + int result = 0; + + TEST_CYCLE(1000) + { + for (int i = 0; i < 500000; ++i) + result += cvRound(number); + } +} + diff --git a/modules/stitching/perf/perf_stich.cpp b/modules/stitching/perf/perf_stich.cpp index 085d397ea1..5b65c89bd5 100644 --- a/modules/stitching/perf/perf_stich.cpp +++ b/modules/stitching/perf/perf_stich.cpp @@ -19,12 +19,18 @@ PERF_TEST( stitch3, a123 ) imgs.push_back( imread( getDataPath("stitching/a2.jpg") ) ); imgs.push_back( imread( getDataPath("stitching/a3.jpg") ) ); - Stitcher stitcher = Stitcher::createDefault(); Stitcher::Status status; declare.time(30 * 20); - TEST_CYCLE(20) { status = stitcher.stitch(imgs, pano); } + while(next()) + { + Stitcher stitcher = Stitcher::createDefault(); + + startTimer(); + status = stitcher.stitch(imgs, pano); + stopTimer(); + } } PERF_TEST( stitch2, b12 ) @@ -35,10 +41,16 @@ PERF_TEST( stitch2, b12 ) imgs.push_back( imread( getDataPath("stitching/b1.jpg") ) ); imgs.push_back( imread( getDataPath("stitching/b2.jpg") ) ); - Stitcher stitcher = Stitcher::createDefault(); Stitcher::Status status; declare.time(30 * 20); - TEST_CYCLE(20) { status = stitcher.stitch(imgs, pano); } + while(next()) + { + Stitcher stitcher = Stitcher::createDefault(); + + startTimer(); + status = stitcher.stitch(imgs, pano); + stopTimer(); + } }