Commit 05a47d90 authored by Ilya Lavrenov's avatar Ilya Lavrenov

cmd option

parent 87eb1b8f
...@@ -560,12 +560,14 @@ namespace cudev ...@@ -560,12 +560,14 @@ namespace cudev
template <typename _Tp> class GpuMat_; template <typename _Tp> class GpuMat_;
} }
namespace ipp
{
CV_EXPORTS void setIppStatus(int status, const char * const funcname = NULL, const char * const filename = NULL, CV_EXPORTS void setIppStatus(int status, const char * const funcname = NULL, const char * const filename = NULL,
int line = 0); int line = 0);
CV_EXPORTS int getIppStatus(); CV_EXPORTS int getIppStatus();
CV_EXPORTS String getIppErrorLocation(); CV_EXPORTS String getIppErrorLocation();
#define setIppErrorStatus() setIppStatus(-1, CV_Func, __FILE__, __LINE__)
} // ipp
} // cv } // cv
#endif //__OPENCV_CORE_BASE_HPP__ #endif //__OPENCV_CORE_BASE_HPP__
...@@ -218,6 +218,8 @@ CV_EXPORTS void scalarToRawData(const cv::Scalar& s, void* buf, int type, int un ...@@ -218,6 +218,8 @@ CV_EXPORTS void scalarToRawData(const cv::Scalar& s, void* buf, int type, int un
# endif # endif
# define IPP_VERSION_X100 (IPP_VERSION_MAJOR * 100 + IPP_VERSION_MINOR) # 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) static inline IppiSize ippiSize(int width, int height)
{ {
IppiSize size = { width, height }; IppiSize size = { width, height };
......
...@@ -1063,9 +1063,12 @@ TLSStorage::~TLSStorage() ...@@ -1063,9 +1063,12 @@ TLSStorage::~TLSStorage()
TLSData<CoreTLSData> coreTlsData; TLSData<CoreTLSData> coreTlsData;
namespace ipp
{
static int ippStatus = 0; // 0 - all is ok, -1 - IPP functions failed static int ippStatus = 0; // 0 - all is ok, -1 - IPP functions failed
static const char * funcname, * filename; static const char * funcname = NULL, * filename = NULL;
static int linen; static int linen = 0;
void setIppStatus(int status, const char * const _funcname, const char * const _filename, int _line) void setIppStatus(int status, const char * const _funcname, const char * const _filename, int _line)
{ {
...@@ -1085,6 +1088,8 @@ String getIppErrorLocation() ...@@ -1085,6 +1088,8 @@ String getIppErrorLocation()
return format("%s:%d %s", filename ? filename : "", linen, funcname ? funcname : ""); return format("%s:%d %s", filename ? filename : "", linen, funcname ? funcname : "");
} }
} // namespace ipp
} // namespace cv } // namespace cv
/* End of file. */ /* End of file. */
...@@ -374,7 +374,7 @@ static ippiGeneralFunc ippiHLS2RGBTab[] = ...@@ -374,7 +374,7 @@ static ippiGeneralFunc ippiHLS2RGBTab[] =
0, (ippiGeneralFunc)ippiHLSToRGB_32f_C3R, 0, 0 0, (ippiGeneralFunc)ippiHLSToRGB_32f_C3R, 0, 0
}; };
#if !defined(HAVE_IPP_ICV_ONLY) #if !defined(HAVE_IPP_ICV_ONLY) && 0
static ippiGeneralFunc ippiRGBToLUVTab[] = static ippiGeneralFunc ippiRGBToLUVTab[] =
{ {
(ippiGeneralFunc)ippiRGBToLUV_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToLUV_16u_C3R, 0, (ippiGeneralFunc)ippiRGBToLUV_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToLUV_16u_C3R, 0,
...@@ -3920,6 +3920,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -3920,6 +3920,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
dst = _dst.getMat(); dst = _dst.getMat();
#if defined HAVE_IPP && !defined(HAVE_IPP_ICV_ONLY) #if defined HAVE_IPP && !defined(HAVE_IPP_ICV_ONLY)
#if 0
if (code == CV_LBGR2Lab && scn == 3 && depth == CV_8U) if (code == CV_LBGR2Lab && scn == 3 && depth == CV_8U)
{ {
if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor((ippiGeneralFunc)ippiBGRToLab_8u_C3R))) if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor((ippiGeneralFunc)ippiBGRToLab_8u_C3R)))
...@@ -3933,7 +3934,9 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -3933,7 +3934,9 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
return; return;
setIppErrorStatus(); 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], if (CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC3RTab[depth],
(ippiGeneralFunc)ippiBGRToLab_8u_C3R, 2, 1, 0, depth))) (ippiGeneralFunc)ippiBGRToLab_8u_C3R, 2, 1, 0, depth)))
...@@ -3947,6 +3950,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -3947,6 +3950,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
return; return;
setIppErrorStatus(); setIppErrorStatus();
} }
#if 0
else if (code == CV_LRGB2Luv && scn == 3) else if (code == CV_LRGB2Luv && scn == 3)
{ {
if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiRGBToLUVTab[depth]))) if (CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiRGBToLUVTab[depth])))
...@@ -3974,6 +3978,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -3974,6 +3978,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
return; return;
setIppErrorStatus(); setIppErrorStatus();
} }
#endif
#endif #endif
if( code == CV_BGR2Lab || code == CV_RGB2Lab || if( code == CV_BGR2Lab || code == CV_RGB2Lab ||
...@@ -4036,7 +4041,6 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -4036,7 +4041,6 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
return; return;
setIppErrorStatus(); setIppErrorStatus();
} }
#endif
if( code == CV_Luv2LRGB && dcn == 3 ) if( code == CV_Luv2LRGB && dcn == 3 )
{ {
if( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiLUVToRGBTab[depth])) ) if( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiLUVToRGBTab[depth])) )
...@@ -4060,6 +4064,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) ...@@ -4060,6 +4064,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
ippiSwapChannelsC3C4RTab[depth], 2, 1, 0, depth)) ) ippiSwapChannelsC3C4RTab[depth], 2, 1, 0, depth)) )
return; return;
} }
#endif
#endif #endif
if( code == CV_Lab2BGR || code == CV_Lab2RGB || if( code == CV_Lab2BGR || code == CV_Lab2RGB ||
......
...@@ -1876,7 +1876,7 @@ static int computeResizeAreaTab( int ssize, int dsize, int cn, double scale, Dec ...@@ -1876,7 +1876,7 @@ static int computeResizeAreaTab( int ssize, int dsize, int cn, double scale, Dec
return k; 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) \ #define SET_IPP_RESIZE_LINEAR_FUNC_PTR(TYPE, CN) \
func = (ippiResizeFunc)ippiResizeLinear_##TYPE##_##CN##R; \ func = (ippiResizeFunc)ippiResizeLinear_##TYPE##_##CN##R; \
......
...@@ -1337,7 +1337,6 @@ static bool IPPMorphOp(int op, InputArray _src, OutputArray _dst, ...@@ -1337,7 +1337,6 @@ static bool IPPMorphOp(int op, InputArray _src, OutputArray _dst,
if (IPPMorphReplicate( op, src, dst, kernel, ksize, anchor, rectKernel )) if (IPPMorphReplicate( op, src, dst, kernel, ksize, anchor, rectKernel ))
return true; return true;
setIppErrorStatus();
return false; return false;
} }
#endif #endif
......
...@@ -554,15 +554,17 @@ CV_EXPORTS void printVersionInfo(bool useStdOut = true); ...@@ -554,15 +554,17 @@ CV_EXPORTS void printVersionInfo(bool useStdOut = true);
#endif #endif
#endif #endif
#if defined(HAVE_OPENCL) #ifdef HAVE_OPENCL
namespace cvtest { namespace ocl { namespace cvtest { namespace ocl {
void dumpOpenCLDevice(); void dumpOpenCLDevice();
}} } }
#define TEST_DUMP_OCL_INFO cvtest::ocl::dumpOpenCLDevice(); #define TEST_DUMP_OCL_INFO cvtest::ocl::dumpOpenCLDevice();
#else #else
#define TEST_DUMP_OCL_INFO #define TEST_DUMP_OCL_INFO
#endif #endif
void parseCustomOptions(int argc, char **argv);
#define CV_TEST_MAIN(resourcesubdir, ...) \ #define CV_TEST_MAIN(resourcesubdir, ...) \
int main(int argc, char **argv) \ int main(int argc, char **argv) \
{ \ { \
...@@ -571,6 +573,7 @@ int main(int argc, char **argv) \ ...@@ -571,6 +573,7 @@ int main(int argc, char **argv) \
cvtest::printVersionInfo(); \ cvtest::printVersionInfo(); \
__CV_TEST_EXEC_ARGS(__VA_ARGS__) \ __CV_TEST_EXEC_ARGS(__VA_ARGS__) \
TEST_DUMP_OCL_INFO \ TEST_DUMP_OCL_INFO \
parseCustomOptions(argc, argv); \
return RUN_ALL_TESTS(); \ 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__ #ifndef __OPENCV_TS_EXT_HPP__
#define __OPENCV_TS_EXT_HPP__ #define __OPENCV_TS_EXT_HPP__
#define CHECK_IPP_STATUS \ void checkIppStatus();
do \
{ \
EXPECT_LE(0, getIppStatus()) << getIppErrorLocation().c_str(); \
} while ((void)0, 0)
#undef TEST #undef TEST
#define TEST(test_case_name, test_name) \ #define TEST(test_case_name, test_name) \
...@@ -29,7 +32,7 @@ ...@@ -29,7 +32,7 @@
::testing::Test::TearDownTestCase, \ ::testing::Test::TearDownTestCase, \
new ::testing::internal::TestFactoryImpl<\ new ::testing::internal::TestFactoryImpl<\
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ 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() void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::Body()
#undef TEST_F #undef TEST_F
...@@ -54,7 +57,7 @@ ...@@ -54,7 +57,7 @@
test_fixture::TearDownTestCase, \ test_fixture::TearDownTestCase, \
new ::testing::internal::TestFactoryImpl<\ new ::testing::internal::TestFactoryImpl<\
GTEST_TEST_CLASS_NAME_(test_fixture, test_name)>);\ 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() void GTEST_TEST_CLASS_NAME_(test_fixture, test_name)::Body()
#undef TEST_P #undef TEST_P
...@@ -83,7 +86,7 @@ ...@@ -83,7 +86,7 @@
int GTEST_TEST_CLASS_NAME_(test_case_name, \ int GTEST_TEST_CLASS_NAME_(test_case_name, \
test_name)::gtest_registering_dummy_ = \ test_name)::gtest_registering_dummy_ = \
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ 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() void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::Body()
#endif // __OPENCV_TS_EXT_HPP__ #endif // __OPENCV_TS_EXT_HPP__
...@@ -658,4 +658,33 @@ void smoothBorder(Mat& img, const Scalar& color, int delta) ...@@ -658,4 +658,33 @@ void smoothBorder(Mat& img, const Scalar& color, int delta)
} //namespace cvtest } //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. */ /* End of file. */
...@@ -31,6 +31,7 @@ static double param_time_limit; ...@@ -31,6 +31,7 @@ static double param_time_limit;
static int param_threads; static int param_threads;
static bool param_write_sanity; static bool param_write_sanity;
static bool param_verify_sanity; static bool param_verify_sanity;
extern bool test_ipp_check;
#ifdef HAVE_CUDA #ifdef HAVE_CUDA
static int param_cuda_device; static int param_cuda_device;
#endif #endif
...@@ -670,6 +671,9 @@ void TestBase::Init(const std::vector<std::string> & availableImpls, ...@@ -670,6 +671,9 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
"{ perf_time_limit |3.0 |default time limit for a single test (in seconds)}" "{ perf_time_limit |3.0 |default time limit for a single test (in seconds)}"
#endif #endif
"{ perf_max_deviation |1.0 |}" "{ 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}" "{ help h |false |print help info}"
#ifdef HAVE_CUDA #ifdef HAVE_CUDA
"{ perf_cuda_device |0 |run CUDA test suite onto specific CUDA capable device}" "{ perf_cuda_device |0 |run CUDA test suite onto specific CUDA capable device}"
...@@ -713,7 +717,8 @@ void TestBase::Init(const std::vector<std::string> & availableImpls, ...@@ -713,7 +717,8 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
param_force_samples = args.get<unsigned int>("perf_force_samples"); param_force_samples = args.get<unsigned int>("perf_force_samples");
param_write_sanity = args.has("perf_write_sanity"); param_write_sanity = args.has("perf_write_sanity");
param_verify_sanity = args.has("perf_verify_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 #ifdef ANDROID
param_affinity_mask = args.get<int>("perf_affinity_mask"); param_affinity_mask = args.get<int>("perf_affinity_mask");
log_power_checkpoints = args.has("perf_log_power_checkpoints"); log_power_checkpoints = args.has("perf_log_power_checkpoints");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment