CV_Assert(groupnum != 0);
int vlen = src.oclchannels() == 3 ? 12 : 8, dbsize = groupnum * vlen;
Context *clCxt = src.clCxt;
- T *p = new T[dbsize];
+
+ AutoBuffer<T> _buf(dbsize);
+ T *p = (T*)_buf;
cl_mem dstBuffer = openCLCreateBuffer(clCxt, CL_MEM_WRITE_ONLY, dbsize * sizeof(T));
- Scalar s;
- s.val[0] = 0.0;
- s.val[1] = 0.0;
- s.val[2] = 0.0;
- s.val[3] = 0.0;
+ Scalar s = Scalar::all(0.0);
arithmetic_sum_buffer_run(src, dstBuffer, vlen, groupnum, type);
memset(p, 0, dbsize * sizeof(T));
for (int j = 0; j < src.oclchannels(); j++, i++)
s.val[j] += p[i];
}
- delete[] p;
+
openCLFree(dstBuffer);
return s;
}
else
arithmetic_minMaxLoc_mask_run(src, mask, dstBuffer, vlen, groupnum);
- T *p = new T[groupnum * vlen * 4];
+ AutoBuffer<T> _buf(groupnum * vlen * 4);
+ T *p = (T*)_buf;
memset(p, 0, dbsize);
+
openCLReadBuffer(clCxt, dstBuffer, (void *)p, dbsize);
for (int i = 0; i < vlen * (int)groupnum; i++)
{
else
maxLoc->x = maxLoc->y = -1;
}
- delete[] p;
openCLSafeCall(clReleaseMemObject(dstBuffer));
}
int vlen = 8 , dbsize = groupnum * vlen;
Context *clCxt = src.clCxt;
string kernelName = "arithm_op_nonzero";
- int *p = new int[dbsize], nonzero = 0;
+
+ AutoBuffer<int> _buf(dbsize);
+ int *p = (int*)_buf, nonzero = 0;
cl_mem dstBuffer = openCLCreateBuffer(clCxt, CL_MEM_WRITE_ONLY, dbsize * sizeof(int));
arithmetic_countNonZero_run(src, dstBuffer, vlen, groupnum, kernelName);
for (int i = 0; i < dbsize; i++)
nonzero += p[i];
- delete[] p;
openCLSafeCall(clReleaseMemObject(dstBuffer));
return nonzero;
}