template <typename _Tp> class GpuMat_;
}
+namespace ipp
+{
CV_EXPORTS void setIppStatus(int status, const char * const funcname = NULL, const char * const filename = NULL,
int line = 0);
CV_EXPORTS int getIppStatus();
CV_EXPORTS String getIppErrorLocation();
-#define setIppErrorStatus() setIppStatus(-1, CV_Func, __FILE__, __LINE__)
+} // ipp
} // cv
#endif //__OPENCV_CORE_BASE_HPP__
# endif
# define IPP_VERSION_X100 (IPP_VERSION_MAJOR * 100 + IPP_VERSION_MINOR)
+#define setIppErrorStatus() cv::ipp::setIppStatus(-1, CV_Func, __FILE__, __LINE__)
+
static inline IppiSize ippiSize(int width, int height)
{
IppiSize size = { width, height };
TLSData<CoreTLSData> coreTlsData;
+namespace ipp
+{
+
static int ippStatus = 0; // 0 - all is ok, -1 - IPP functions failed
-static const char * funcname, * filename;
-static int linen;
+static const char * funcname = NULL, * filename = NULL;
+static int linen = 0;
void setIppStatus(int status, const char * const _funcname, const char * const _filename, int _line)
{
return format("%s:%d %s", filename ? filename : "", linen, funcname ? funcname : "");
}
+} // namespace ipp
+
} // namespace cv
/* End of file. */
0, (ippiGeneralFunc)ippiHLSToRGB_32f_C3R, 0, 0
};
-#if !defined(HAVE_IPP_ICV_ONLY)
+#if !defined(HAVE_IPP_ICV_ONLY) && 0
static ippiGeneralFunc ippiRGBToLUVTab[] =
{
(ippiGeneralFunc)ippiRGBToLUV_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToLUV_16u_C3R, 0,
dst = _dst.getMat();
#if defined HAVE_IPP && !defined(HAVE_IPP_ICV_ONLY)
+#if 0
if (code == CV_LBGR2Lab && scn == 3 && depth == CV_8U)
{
if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor((ippiGeneralFunc)ippiBGRToLab_8u_C3R)))
return;
setIppErrorStatus();
}
- else if (code == CV_LRGB2Lab && scn == 3 && depth == CV_8U)
+ else
+#endif
+ if (code == CV_LRGB2Lab && scn == 3 && depth == CV_8U)
{
if (CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC3RTab[depth],
(ippiGeneralFunc)ippiBGRToLab_8u_C3R, 2, 1, 0, depth)))
return;
setIppErrorStatus();
}
+#if 0
else if (code == CV_LRGB2Luv && scn == 3)
{
if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiRGBToLUVTab[depth])))
setIppErrorStatus();
}
#endif
+#endif
if( code == CV_BGR2Lab || code == CV_RGB2Lab ||
code == CV_LBGR2Lab || code == CV_LRGB2Lab )
return;
setIppErrorStatus();
}
-#endif
if( code == CV_Luv2LRGB && dcn == 3 )
{
if( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiLUVToRGBTab[depth])) )
return;
}
#endif
+#endif
if( code == CV_Lab2BGR || code == CV_Lab2RGB ||
code == CV_Lab2LBGR || code == CV_Lab2LRGB )
return k;
}
-#define CHECK_IPP_STATUS(STATUS) if (STATUS < 0) { *ok = false; return; }
+#define CHECK_IPP_STATUS(STATUS) if (STATUS != 0) { *ok = false; return; }
#define SET_IPP_RESIZE_LINEAR_FUNC_PTR(TYPE, CN) \
func = (ippiResizeFunc)ippiResizeLinear_##TYPE##_##CN##R; \
if (IPPMorphReplicate( op, src, dst, kernel, ksize, anchor, rectKernel ))
return true;
- setIppErrorStatus();
return false;
}
#endif
#endif
#endif
-#if defined(HAVE_OPENCL)
+#ifdef HAVE_OPENCL
namespace cvtest { namespace ocl {
void dumpOpenCLDevice();
-}}
+} }
#define TEST_DUMP_OCL_INFO cvtest::ocl::dumpOpenCLDevice();
#else
#define TEST_DUMP_OCL_INFO
#endif
+void parseCustomOptions(int argc, char **argv);
+
#define CV_TEST_MAIN(resourcesubdir, ...) \
int main(int argc, char **argv) \
{ \
cvtest::printVersionInfo(); \
__CV_TEST_EXEC_ARGS(__VA_ARGS__) \
TEST_DUMP_OCL_INFO \
+ parseCustomOptions(argc, argv); \
return RUN_ALL_TESTS(); \
}
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html.
+
+// Copyright (C) 2014, Intel, Inc., all rights reserved.
+// Third party copyrights are property of their respective owners.
+
#ifndef __OPENCV_TS_EXT_HPP__
#define __OPENCV_TS_EXT_HPP__
-#define CHECK_IPP_STATUS \
- do \
- { \
- EXPECT_LE(0, getIppStatus()) << getIppErrorLocation().c_str(); \
- } while ((void)0, 0)
+void checkIppStatus();
#undef TEST
#define TEST(test_case_name, test_name) \
::testing::Test::TearDownTestCase, \
new ::testing::internal::TestFactoryImpl<\
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
- void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() { setIppStatus(0); Body(); CHECK_IPP_STATUS; } \
+ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() { cv::ipp::setIppStatus(0); Body(); checkIppStatus(); } \
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::Body()
#undef TEST_F
test_fixture::TearDownTestCase, \
new ::testing::internal::TestFactoryImpl<\
GTEST_TEST_CLASS_NAME_(test_fixture, test_name)>);\
- void GTEST_TEST_CLASS_NAME_(test_fixture, test_name)::TestBody() { setIppStatus(0); Body(); CHECK_IPP_STATUS; } \
+ void GTEST_TEST_CLASS_NAME_(test_fixture, test_name)::TestBody() { cv::ipp::setIppStatus(0); Body(); checkIppStatus(); } \
void GTEST_TEST_CLASS_NAME_(test_fixture, test_name)::Body()
#undef TEST_P
int GTEST_TEST_CLASS_NAME_(test_case_name, \
test_name)::gtest_registering_dummy_ = \
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
- void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() { setIppStatus(0); Body(); CHECK_IPP_STATUS; } \
+ void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() { cv::ipp::setIppStatus(0); Body(); checkIppStatus(); } \
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::Body()
#endif // __OPENCV_TS_EXT_HPP__
} //namespace cvtest
+bool test_ipp_check = false;
+
+void checkIppStatus()
+{
+ if (test_ipp_check)
+ {
+ int status = cv::ipp::getIppStatus();
+ EXPECT_LE(0, status) << cv::ipp::getIppErrorLocation().c_str();
+ }
+}
+
+void parseCustomOptions(int argc, char **argv)
+{
+ const char * const command_line_keys =
+ "{ ipp test_ipp_check |false |check whether IPP works without failures }"
+ "{ h help |false |print help info }";
+
+ cv::CommandLineParser parser(argc, argv, command_line_keys);
+ if (parser.get<bool>("help"))
+ {
+ std::cout << "\nAvailable options besides google test option: \n";
+ parser.printMessage();
+ }
+
+ test_ipp_check = parser.get<bool>("test_ipp_check");
+ if (!test_ipp_check)
+ test_ipp_check = getenv("OPENCV_IPP_CHECK") != NULL;
+}
+
/* End of file. */
static int param_threads;
static bool param_write_sanity;
static bool param_verify_sanity;
+extern bool test_ipp_check;
#ifdef HAVE_CUDA
static int param_cuda_device;
#endif
"{ perf_time_limit |3.0 |default time limit for a single test (in seconds)}"
#endif
"{ perf_max_deviation |1.0 |}"
+#ifdef HAVE_IPP
+ "{ perf_ipp_check |false |check whether IPP works without failures}"
+#endif
"{ help h |false |print help info}"
#ifdef HAVE_CUDA
"{ perf_cuda_device |0 |run CUDA test suite onto specific CUDA capable device}"
param_force_samples = args.get<unsigned int>("perf_force_samples");
param_write_sanity = args.has("perf_write_sanity");
param_verify_sanity = args.has("perf_verify_sanity");
- param_threads = args.get<int>("perf_threads");
+ test_ipp_check = !args.has("perf_ipp_check") ? getenv("OPENCV_IPP_CHECK") != NULL : true;
+ param_threads = args.get<int>("perf_threads");
#ifdef ANDROID
param_affinity_mask = args.get<int>("perf_affinity_mask");
log_power_checkpoints = args.has("perf_log_power_checkpoints");