From f8484e32665e065ee3c319d7372e051575b79cf9 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 26 Feb 2015 19:34:20 +0300 Subject: [PATCH] add fucntion to control tegra optimizations in run-time --- modules/core/include/opencv2/core/private.hpp | 9 ++++++ modules/core/src/precomp.hpp | 6 ++++ modules/core/src/system.cpp | 30 +++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/modules/core/include/opencv2/core/private.hpp b/modules/core/include/opencv2/core/private.hpp index 38d18e3000..ececd30f2a 100644 --- a/modules/core/include/opencv2/core/private.hpp +++ b/modules/core/include/opencv2/core/private.hpp @@ -269,6 +269,15 @@ typedef enum CvStatus } CvStatus; +#ifdef HAVE_TEGRA_OPTIMIZATION +namespace cv { namespace tegra { + +CV_EXPORTS bool useTegra(); +CV_EXPORTS void setUseTegra(bool flag); + +} +#endif + //! @endcond #endif // __OPENCV_CORE_PRIVATE_HPP__ diff --git a/modules/core/src/precomp.hpp b/modules/core/src/precomp.hpp index b35be6ecc2..a57849012c 100644 --- a/modules/core/src/precomp.hpp +++ b/modules/core/src/precomp.hpp @@ -236,6 +236,9 @@ struct CoreTLSData { CoreTLSData() : device(0), useOpenCL(-1), useIPP(-1), useCollection(false) { +#ifdef HAVE_TEGRA_OPTIMIZATION + useTegra = -1; +#endif #ifdef CV_COLLECT_IMPL_DATA implFlags = 0; #endif @@ -246,6 +249,9 @@ struct CoreTLSData ocl::Queue oclQueue; int useOpenCL; // 1 - use, 0 - do not use, -1 - auto/not initialized int useIPP; // 1 - use, 0 - do not use, -1 - auto/not initialized +#ifdef HAVE_TEGRA_OPTIMIZATION + int useTegra; // 1 - use, 0 - do not use, -1 - auto/not initialized +#endif bool useCollection; // enable/disable impl data collection #ifdef CV_COLLECT_IMPL_DATA diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp index 43d5bd0a0b..3aea4571fd 100644 --- a/modules/core/src/system.cpp +++ b/modules/core/src/system.cpp @@ -1257,6 +1257,36 @@ void setUseIPP(bool flag) } // namespace ipp +#ifdef HAVE_TEGRA_OPTIMIZATION + +namespace tegra { + +bool useTegra() +{ + CoreTLSData* data = getCoreTlsData().get(); + + if (data->useTegra < 0) + { + const char* pTegraEnv = getenv("OPENCV_TEGRA"); + if (pTegraEnv && (cv::String(pTegraEnv) == "disabled")) + data->useTegra = false; + else + data->useTegra = true; + } + + return (data->useTegra > 0); +} + +void setUseTegra(bool flag) +{ + CoreTLSData* data = getCoreTlsData().get(); + data->useTegra = flag; +} + +} // namespace tegra + +#endif + } // namespace cv /* End of file. */