bool useOpenCL()
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
if( data->useOpenCL < 0 )
{
try
{
if( haveOpenCL() )
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
data->useOpenCL = (flag && Device::getDefault().ptr() != NULL) ? 1 : 0;
}
}
const Device& Device::getDefault()
{
const Context& ctx = Context::getDefault();
- int idx = coreTlsData.get()->device;
+ int idx = getCoreTlsData().get()->device;
const Device& device = ctx.device(idx);
return device;
}
Queue& Queue::getDefault()
{
- Queue& q = coreTlsData.get()->oclQueue;
+ Queue& q = getCoreTlsData().get()->oclQueue;
if( !q.p && haveOpenCL() )
q.create(Context::getDefault());
return q;
tlsData_.clear();
}
-TLSData<CoreTLSData> coreTlsData;
+
+
+TLSData<CoreTLSData>& getCoreTlsData()
+{
+ static TLSData<CoreTLSData> *value = new TLSData<CoreTLSData>();
+ return *value;
+}
+
+
#ifdef CV_COLLECT_IMPL_DATA
void setImpl(int flags)
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
data->implFlags = flags;
data->implCode.clear();
data->implFun.clear();
void addImpl(int flag, const char* func)
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
data->implFlags |= flag;
if(func) // use lazy collection if name was not specified
{
int getImpl(std::vector<int> &impl, std::vector<String> &funName)
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
impl = data->implCode;
funName = data->implFun;
return data->implFlags; // return actual flags for lazy collection
bool useCollection()
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
return data->useCollection;
}
void setUseCollection(bool flag)
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
data->useCollection = flag;
}
#endif
bool useIPP()
{
#ifdef HAVE_IPP
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
if(data->useIPP < 0)
{
const char* pIppEnv = getenv("OPENCV_IPP");
void setUseIPP(bool flag)
{
- CoreTLSData* data = coreTlsData.get();
+ CoreTLSData* data = getCoreTlsData().get();
#ifdef HAVE_IPP
data->useIPP = flag;
#else