Commit 920fd482 authored by Roman Donchenko's avatar Roman Donchenko

Merge remote-tracking branch 'origin/master' into merge-2.4

Conflicts:
	modules/ocl/src/arithm.cpp
parents 9c2272d5 aaf97c45
...@@ -458,15 +458,8 @@ CV_INLINE int cvIsInf( double value ) ...@@ -458,15 +458,8 @@ CV_INLINE int cvIsInf( double value )
# define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta)) # define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta))
# endif # endif
# endif # endif
#elif (defined WIN32 || defined _WIN32 || defined WINCE) && (!defined RC_INVOKED) #elif defined _MSC_VER && !defined RC_INVOKED
# if !defined(_M_AMD64) && !defined(_M_IA64) && !defined(_M_ARM) # define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta)
CV_EXTERN_C __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile *Addend, long Value);
# define CV_XADD(addr, delta) (int)InterlockedExchangeAdd((long volatile*)addr, delta)
# else
CV_EXTERN_C long _InterlockedExchangeAdd (long volatile *Addend, long Value);
# pragma intrinsic(_InterlockedExchangeAdd)
# define CV_XADD(addr, delta) (int)_InterlockedExchangeAdd((long volatile*)addr, delta)
# endif
#else #else
CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; } CV_INLINE CV_XADD(int* addr, int delta) { int tmp = *addr; *addr += delta; return tmp; }
#endif #endif
......
...@@ -364,6 +364,10 @@ public: ...@@ -364,6 +364,10 @@ public:
String& operator=(const char* s); String& operator=(const char* s);
String& operator=(char c); String& operator=(char c);
String& operator+=(const String& str);
String& operator+=(const char* s);
String& operator+=(char c);
size_t size() const; size_t size() const;
size_t length() const; size_t length() const;
...@@ -416,6 +420,7 @@ public: ...@@ -416,6 +420,7 @@ public:
String(const std::string& str); String(const std::string& str);
String(const std::string& str, size_t pos, size_t len = npos); String(const std::string& str, size_t pos, size_t len = npos);
String& operator=(const std::string& str); String& operator=(const std::string& str);
String& operator+=(const std::string& str);
operator std::string() const; operator std::string() const;
friend String operator+ (const String& lhs, const std::string& rhs); friend String operator+ (const String& lhs, const std::string& rhs);
...@@ -544,6 +549,27 @@ String& String::operator=(char c) ...@@ -544,6 +549,27 @@ String& String::operator=(char c)
return *this; return *this;
} }
inline
String& String::operator+=(const String& str)
{
*this = *this + str;
return *this;
}
inline
String& String::operator+=(const char* s)
{
*this = *this + s;
return *this;
}
inline
String& String::operator+=(char c)
{
*this = *this + c;
return *this;
}
inline inline
size_t String::size() const size_t String::size() const
{ {
......
...@@ -103,6 +103,13 @@ String& String::operator = (const std::string& str) ...@@ -103,6 +103,13 @@ String& String::operator = (const std::string& str)
return *this; return *this;
} }
inline
String& String::operator += (const std::string& str)
{
*this = *this + str;
return *this;
}
inline inline
String::operator std::string() const String::operator std::string() const
{ {
......
...@@ -87,10 +87,41 @@ ...@@ -87,10 +87,41 @@
#ifdef HAVE_WINRT #ifdef HAVE_WINRT
#include <wrl/client.h> #include <wrl/client.h>
#ifndef __cplusplus_winrt
#include <windows.storage.h>
#pragma comment(lib, "runtimeobject.lib")
#endif
std::wstring GetTempPathWinRT() std::wstring GetTempPathWinRT()
{ {
#ifdef __cplusplus_winrt
return std::wstring(Windows::Storage::ApplicationData::Current->TemporaryFolder->Path->Data()); return std::wstring(Windows::Storage::ApplicationData::Current->TemporaryFolder->Path->Data());
#else
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IApplicationDataStatics> appdataFactory;
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IApplicationData> appdataRef;
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IStorageFolder> storagefolderRef;
Microsoft::WRL::ComPtr<ABI::Windows::Storage::IStorageItem> storageitemRef;
HSTRING str;
HSTRING_HEADER hstrHead;
std::wstring wstr;
if (FAILED(WindowsCreateStringReference(RuntimeClass_Windows_Storage_ApplicationData,
(UINT32)wcslen(RuntimeClass_Windows_Storage_ApplicationData), &hstrHead, &str)))
return wstr;
if (FAILED(RoGetActivationFactory(str, IID_PPV_ARGS(appdataFactory.ReleaseAndGetAddressOf()))))
return wstr;
if (FAILED(appdataFactory->get_Current(appdataRef.ReleaseAndGetAddressOf())))
return wstr;
if (FAILED(appdataRef->get_TemporaryFolder(storagefolderRef.ReleaseAndGetAddressOf())))
return wstr;
if (FAILED(storagefolderRef.As(&storageitemRef)))
return wstr;
str = NULL;
if (FAILED(storageitemRef->get_Path(&str)))
return wstr;
wstr = WindowsGetStringRawBuffer(str, NULL);
WindowsDeleteString(str);
return wstr;
#endif
} }
std::wstring GetTempFileNameWinRT(std::wstring prefix) std::wstring GetTempFileNameWinRT(std::wstring prefix)
......
...@@ -195,11 +195,9 @@ namespace cv{ ...@@ -195,11 +195,9 @@ namespace cv{
CV_Assert(connectivity == 8 || connectivity == 4); CV_Assert(connectivity == 8 || connectivity == 4);
const int rows = L.rows; const int rows = L.rows;
const int cols = L.cols; const int cols = L.cols;
size_t Plength = (size_t(rows + 3 - 1)/3) * (size_t(cols + 3 - 1)/3); //A quick and dirty upper bound for the maximimum number of labels. The 4 comes from
if(connectivity == 4){ //the fact that a 3x3 block can never have more than 4 unique labels for both 4 & 8-way
Plength = 4 * Plength;//a quick and dirty upper bound, an exact answer exists if you want to find it const size_t Plength = 4 * (size_t(rows + 3 - 1)/3) * (size_t(cols + 3 - 1)/3);
//the 4 comes from the fact that a 3x3 block can never have more than 4 unique labels
}
LabelT *P = (LabelT *) fastMalloc(sizeof(LabelT) * Plength); LabelT *P = (LabelT *) fastMalloc(sizeof(LabelT) * Plength);
P[0] = 0; P[0] = 0;
LabelT lunique = 1; LabelT lunique = 1;
......
...@@ -518,7 +518,7 @@ static void arithmetic_minMax_run(const oclMat &src, const oclMat & mask, cl_mem ...@@ -518,7 +518,7 @@ static void arithmetic_minMax_run(const oclMat &src, const oclMat & mask, cl_mem
args.push_back( std::make_pair( sizeof(cl_int) , (void *)&minvalid_cols )); args.push_back( std::make_pair( sizeof(cl_int) , (void *)&minvalid_cols ));
args.push_back( std::make_pair( sizeof(cl_int) , (void *)&moffset )); args.push_back( std::make_pair( sizeof(cl_int) , (void *)&moffset ));
kernelName = kernelName + "_mask"; kernelName += "_mask";
} }
size_t globalThreads[3] = {groupnum * 256, 1, 1}; size_t globalThreads[3] = {groupnum * 256, 1, 1};
...@@ -658,8 +658,8 @@ static void arithm_absdiff_nonsaturate_run(const oclMat & src1, const oclMat & s ...@@ -658,8 +658,8 @@ static void arithm_absdiff_nonsaturate_run(const oclMat & src1, const oclMat & s
args.push_back( std::make_pair( sizeof(cl_int), (void *)&src2step1 )); args.push_back( std::make_pair( sizeof(cl_int), (void *)&src2step1 ));
args.push_back( std::make_pair( sizeof(cl_int), (void *)&src2offset1 )); args.push_back( std::make_pair( sizeof(cl_int), (void *)&src2offset1 ));
kernelName = kernelName + "_binary"; kernelName += "_binary";
buildOptions = buildOptions + " -D BINARY"; buildOptions += " -D BINARY";
} }
args.push_back( std::make_pair( sizeof(cl_mem), (void *)&diff.data )); args.push_back( std::make_pair( sizeof(cl_mem), (void *)&diff.data ));
......
...@@ -379,7 +379,7 @@ cl_kernel openCLGetKernelFromSource(Context *ctx, const cv::ocl::ProgramEntry* s ...@@ -379,7 +379,7 @@ cl_kernel openCLGetKernelFromSource(Context *ctx, const cv::ocl::ProgramEntry* s
idxStr << "_C" << channels; idxStr << "_C" << channels;
if(depth != -1) if(depth != -1)
idxStr << "_D" << depth; idxStr << "_D" << depth;
kernelName = kernelName + idxStr.str(); kernelName += idxStr.str();
std::string fixedOptions = removeDuplicatedWhiteSpaces(build_options); std::string fixedOptions = removeDuplicatedWhiteSpaces(build_options);
cl_kernel kernel = openCLGetKernelFromSource(ctx, source, kernelName, fixedOptions.c_str()); cl_kernel kernel = openCLGetKernelFromSource(ctx, source, kernelName, fixedOptions.c_str());
...@@ -497,7 +497,7 @@ void openCLExecuteKernelInterop(Context *ctx, const cv::ocl::ProgramSource& sour ...@@ -497,7 +497,7 @@ void openCLExecuteKernelInterop(Context *ctx, const cv::ocl::ProgramSource& sour
idxStr << "_C" << channels; idxStr << "_C" << channels;
if(depth != -1) if(depth != -1)
idxStr << "_D" << depth; idxStr << "_D" << depth;
kernelName = kernelName + idxStr.str(); kernelName += idxStr.str();
std::string name = std::string("custom_") + source.name; std::string name = std::string("custom_") + source.name;
ProgramEntry program = { name.c_str(), source.programStr, source.programHash }; ProgramEntry program = { name.c_str(), source.programStr, source.programHash };
......
...@@ -489,11 +489,11 @@ cl_program ProgramCache::getProgram(const Context *ctx, const cv::ocl::ProgramEn ...@@ -489,11 +489,11 @@ cl_program ProgramCache::getProgram(const Context *ctx, const cv::ocl::ProgramEn
String all_build_options; String all_build_options;
if (!ctx->getDeviceInfo().compilationExtraOptions.empty()) if (!ctx->getDeviceInfo().compilationExtraOptions.empty())
all_build_options = all_build_options + ctx->getDeviceInfo().compilationExtraOptions; all_build_options += ctx->getDeviceInfo().compilationExtraOptions;
if (build_options != NULL) if (build_options != NULL)
{ {
all_build_options = all_build_options + " "; all_build_options += " ";
all_build_options = all_build_options + build_options; all_build_options += build_options;
} }
const DeviceInfo& devInfo = ctx->getDeviceInfo(); const DeviceInfo& devInfo = ctx->getDeviceInfo();
String filename = binpath + (source->name ? source->name : "NULL") + "_" + devInfo.platform->platformName + "_" + devInfo.deviceName + ".clb"; String filename = binpath + (source->name ? source->name : "NULL") + "_" + devInfo.platform->platformName + "_" + devInfo.deviceName + ".clb";
......
...@@ -959,15 +959,15 @@ void OclCascadeClassifier::detectMultiScale(oclMat &gimg, CV_OUT std::vector<cv: ...@@ -959,15 +959,15 @@ void OclCascadeClassifier::detectMultiScale(oclMat &gimg, CV_OUT std::vector<cv:
//form build options for kernel //form build options for kernel
String options = "-D PACKED_CLASSIFIER"; String options = "-D PACKED_CLASSIFIER";
options = options + format(" -D NODE_SIZE=%d",NODE_SIZE); options += format(" -D NODE_SIZE=%d",NODE_SIZE);
options = options + format(" -D WND_SIZE_X=%d",cascade->orig_window_size.width); options += format(" -D WND_SIZE_X=%d",cascade->orig_window_size.width);
options = options + format(" -D WND_SIZE_Y=%d",cascade->orig_window_size.height); options += format(" -D WND_SIZE_Y=%d",cascade->orig_window_size.height);
options = options + format(" -D STUMP_BASED=%d",gcascade->is_stump_based); options += format(" -D STUMP_BASED=%d",gcascade->is_stump_based);
options = options + format(" -D LSx=%d",localThreads[0]); options += format(" -D LSx=%d",localThreads[0]);
options = options + format(" -D LSy=%d",localThreads[1]); options += format(" -D LSy=%d",localThreads[1]);
options = options + format(" -D SPLITNODE=%d",splitnode); options += format(" -D SPLITNODE=%d",splitnode);
options = options + format(" -D SPLITSTAGE=%d",splitstage); options += format(" -D SPLITSTAGE=%d",splitstage);
options = options + format(" -D OUTPUTSZ=%d",outputsz); options += format(" -D OUTPUTSZ=%d",outputsz);
// init candiate global count by 0 // init candiate global count by 0
int pattern = 0; int pattern = 0;
......
...@@ -217,15 +217,15 @@ namespace cv ...@@ -217,15 +217,15 @@ namespace cv
String kernelName = "remap"; String kernelName = "remap";
if (map1.type() == CV_32FC2 && map2.empty()) if (map1.type() == CV_32FC2 && map2.empty())
kernelName = kernelName + "_32FC2"; kernelName += "_32FC2";
else if (map1.type() == CV_16SC2) else if (map1.type() == CV_16SC2)
{ {
kernelName = kernelName + "_16SC2"; kernelName += "_16SC2";
if (!map2.empty()) if (!map2.empty())
kernelName = kernelName + "_16UC1"; kernelName += "_16UC1";
} }
else if (map1.type() == CV_32FC1 && map2.type() == CV_32FC1) else if (map1.type() == CV_32FC1 && map2.type() == CV_32FC1)
kernelName = kernelName + "_2_32FC1"; kernelName += "_2_32FC1";
else else
CV_Error(Error::StsBadArg, "Unsupported map types"); CV_Error(Error::StsBadArg, "Unsupported map types");
...@@ -1072,16 +1072,16 @@ namespace cv ...@@ -1072,16 +1072,16 @@ namespace cv
switch(borderType) switch(borderType)
{ {
case cv::BORDER_REPLICATE: case cv::BORDER_REPLICATE:
option = option + " -D BORDER_REPLICATE"; option += " -D BORDER_REPLICATE";
break; break;
case cv::BORDER_REFLECT: case cv::BORDER_REFLECT:
option = option + " -D BORDER_REFLECT"; option += " -D BORDER_REFLECT";
break; break;
case cv::BORDER_REFLECT101: case cv::BORDER_REFLECT101:
option = option + " -D BORDER_REFLECT101"; option += " -D BORDER_REFLECT101";
break; break;
case cv::BORDER_WRAP: case cv::BORDER_WRAP:
option = option + " -D BORDER_WRAP"; option += " -D BORDER_WRAP";
break; break;
} }
openCLExecuteKernel(src.clCxt, &imgproc_sobel3, "sobel3", gt2, lt2, args, -1, -1, option.c_str() ); openCLExecuteKernel(src.clCxt, &imgproc_sobel3, "sobel3", gt2, lt2, args, -1, -1, option.c_str() );
......
...@@ -64,7 +64,7 @@ namespace cv ...@@ -64,7 +64,7 @@ namespace cv
idxStr << "_C" << channels; idxStr << "_C" << channels;
if(depth != -1) if(depth != -1)
idxStr << "_D" << depth; idxStr << "_D" << depth;
kernelName = kernelName + idxStr.str().c_str(); kernelName += idxStr.str().c_str();
cl_kernel kernel; cl_kernel kernel;
kernel = openCLGetKernelFromSource(clCxt, source, kernelName, build_options); kernel = openCLGetKernelFromSource(clCxt, source, kernelName, build_options);
......
...@@ -234,13 +234,13 @@ namespace cv ...@@ -234,13 +234,13 @@ namespace cv
(int)VEC_SIZE, depth, channels); (int)VEC_SIZE, depth, channels);
if (dst0Aligned) if (dst0Aligned)
build_options = build_options + " -D DST0_ALIGNED"; build_options += " -D DST0_ALIGNED";
if (dst1Aligned) if (dst1Aligned)
build_options = build_options + " -D DST1_ALIGNED"; build_options += " -D DST1_ALIGNED";
if (dst2Aligned) if (dst2Aligned)
build_options = build_options + " -D DST2_ALIGNED"; build_options += " -D DST2_ALIGNED";
if (dst3Aligned) if (dst3Aligned)
build_options = build_options + " -D DST3_ALIGNED"; build_options += " -D DST3_ALIGNED";
const DeviceInfo& devInfo = clCtx->getDeviceInfo(); const DeviceInfo& devInfo = clCtx->getDeviceInfo();
...@@ -251,7 +251,7 @@ namespace cv ...@@ -251,7 +251,7 @@ namespace cv
&& (devInfo.deviceVersion.find("Build 56860") != std::string::npos && (devInfo.deviceVersion.find("Build 56860") != std::string::npos
|| devInfo.deviceVersion.find("Build 76921") != std::string::npos || devInfo.deviceVersion.find("Build 76921") != std::string::npos
|| devInfo.deviceVersion.find("Build 78712") != std::string::npos)) || devInfo.deviceVersion.find("Build 78712") != std::string::npos))
build_options = build_options + " -D BYPASS_VSTORE=true"; build_options += " -D BYPASS_VSTORE=true";
size_t globalThreads[3] = { divUp(src.cols, VEC_SIZE), src.rows, 1 }; size_t globalThreads[3] = { divUp(src.cols, VEC_SIZE), src.rows, 1 };
openCLExecuteKernel(clCtx, &split_mat, kernelName, globalThreads, NULL, args, -1, -1, build_options.c_str()); openCLExecuteKernel(clCtx, &split_mat, kernelName, globalThreads, NULL, args, -1, -1, build_options.c_str());
......
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