mirror of https://github.com/emgucv/emgucv.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
6.4 KiB
259 lines
6.4 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2004-2020 by EMGU Corporation. All rights reserved.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "ocl_c.h"
|
|
|
|
|
|
void oclGetPlatformsInfo(std::vector<cv::ocl::PlatformInfo>* oclPlatforms)
|
|
{
|
|
cv::ocl::getPlatfomsInfo(*oclPlatforms);
|
|
}
|
|
|
|
|
|
bool cveHaveOpenCL()
|
|
{
|
|
return cv::ocl::haveOpenCL();
|
|
}
|
|
bool cveUseOpenCL()
|
|
{
|
|
return cv::ocl::useOpenCL();
|
|
}
|
|
void cveSetUseOpenCL(bool flag)
|
|
{
|
|
return cv::ocl::setUseOpenCL(flag);
|
|
}
|
|
void cveOclFinish()
|
|
{
|
|
cv::ocl::finish();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclPlatformInfo
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void oclPlatformInfoGetVersion(cv::ocl::PlatformInfo* oclPlatformInfo, cv::String* platformVersion)
|
|
{
|
|
*platformVersion = oclPlatformInfo->version();
|
|
}
|
|
|
|
void oclPlatformInfoGetName(cv::ocl::PlatformInfo* oclPlatformInfo, cv::String* platformName)
|
|
{
|
|
*platformName = oclPlatformInfo->name();
|
|
}
|
|
|
|
void oclPlatformInfoGetVender(cv::ocl::PlatformInfo* oclPlatformInfo, cv::String* platformVender)
|
|
{
|
|
*platformVender = oclPlatformInfo->vendor();
|
|
}
|
|
|
|
int oclPlatformInfoDeviceNumber(cv::ocl::PlatformInfo* platformInfo)
|
|
{
|
|
return platformInfo->deviceNumber();
|
|
}
|
|
|
|
void oclPlatformInfoGetDevice(cv::ocl::PlatformInfo* platformInfo, cv::ocl::Device* device, int d)
|
|
{
|
|
platformInfo->getDevice(*device, d);
|
|
}
|
|
void oclPlatformInfoRelease(cv::ocl::PlatformInfo** platformInfo)
|
|
{
|
|
delete* platformInfo;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclDeviceInfo
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Device* oclDeviceCreate()
|
|
{
|
|
return new cv::ocl::Device();
|
|
}
|
|
void oclDeviceSet(cv::ocl::Device* device, void* p)
|
|
{
|
|
device->set(p);
|
|
}
|
|
const cv::ocl::Device* oclDeviceGetDefault()
|
|
{
|
|
return &cv::ocl::Device::getDefault();
|
|
}
|
|
void oclDeviceRelease(cv::ocl::Device** device)
|
|
{
|
|
delete* device;
|
|
*device = 0;
|
|
}
|
|
void* oclDeviceGetPtr(cv::ocl::Device* device)
|
|
{
|
|
return device->ptr();
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclContext
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Context* oclContextCreate()
|
|
{
|
|
return new cv::ocl::Context();
|
|
}
|
|
const cv::ocl::Context* oclContextGetDefault(bool initialize)
|
|
{
|
|
return &cv::ocl::Context::getDefault(initialize);
|
|
}
|
|
void oclContextRelease(cv::ocl::Context** context)
|
|
{
|
|
delete* context;
|
|
*context = 0;
|
|
}
|
|
const cv::ocl::Program* oclContextGetProg(
|
|
cv::ocl::Context* context,
|
|
cv::ocl::ProgramSource* prog,
|
|
cv::String* buildopt,
|
|
cv::String* errmsg)
|
|
{
|
|
cv::String tmp;
|
|
errmsg = errmsg ? errmsg : &tmp;
|
|
cv::ocl::Program program = context->getProg(*prog, *buildopt, *errmsg);
|
|
cv::ocl::Program* p = new cv::ocl::Program(program);
|
|
return p;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclProgram
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Program* oclProgramCreate()
|
|
{
|
|
return new cv::ocl::Program();
|
|
}
|
|
void oclProgramRelease(cv::ocl::Program** program)
|
|
{
|
|
delete* program;
|
|
*program = 0;
|
|
}
|
|
void oclProgramGetBinary(cv::ocl::Program* program, std::vector<char>* binary)
|
|
{
|
|
program->getBinary(*binary);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclProgramSource
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::ProgramSource* oclProgramSourceCreate(cv::String* source)
|
|
{
|
|
return new cv::ocl::ProgramSource(*source);
|
|
}
|
|
void oclProgramSourceRelease(cv::ocl::ProgramSource** programSource)
|
|
{
|
|
delete* programSource;
|
|
*programSource = 0;
|
|
}
|
|
const cv::String* oclProgramSourceGetSource(cv::ocl::ProgramSource* programSource)
|
|
{
|
|
return &programSource->source();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclKernel
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Kernel* oclKernelCreateDefault()
|
|
{
|
|
return new cv::ocl::Kernel();
|
|
}
|
|
bool oclKernelCreate(cv::ocl::Kernel* kernel, cv::String* kname, cv::ocl::ProgramSource* source, cv::String* buildOpts, cv::String* errmsg)
|
|
{
|
|
|
|
return kernel->create(kname->c_str(), *source, *buildOpts, errmsg);
|
|
}
|
|
void oclKernelRelease(cv::ocl::Kernel** kernel)
|
|
{
|
|
delete* kernel;
|
|
*kernel = 0;
|
|
}
|
|
int oclKernelSetImage2D(cv::ocl::Kernel* kernel, int i, cv::ocl::Image2D* image2D)
|
|
{
|
|
return kernel->set(i, *image2D);
|
|
}
|
|
int oclKernelSetUMat(cv::ocl::Kernel* kernel, int i, cv::UMat* umat)
|
|
{
|
|
return kernel->set(i, *umat);
|
|
}
|
|
int oclKernelSet(cv::ocl::Kernel* kernel, int i, void* value, int size)
|
|
{
|
|
return kernel->set(i, value, static_cast<size_t>(size));
|
|
}
|
|
int oclKernelSetKernelArg(cv::ocl::Kernel* kernel, int i, cv::ocl::KernelArg* kernelArg)
|
|
{
|
|
return kernel->set(i, *kernelArg);
|
|
}
|
|
bool oclKernelRun(cv::ocl::Kernel* kernel, int dims, size_t* globalsize, size_t* localsize, bool sync, cv::ocl::Queue* q)
|
|
{
|
|
return kernel->run(dims, globalsize, localsize, sync, q ? *q : cv::ocl::Queue());
|
|
}
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclImage2D
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Image2D* oclImage2DFromUMat(cv::UMat* src, bool norm, bool alias)
|
|
{
|
|
cv::ocl::Image2D* img2d = new cv::ocl::Image2D(*src, norm, alias);
|
|
return img2d;
|
|
}
|
|
void oclImage2DRelease(cv::ocl::Image2D** image2D)
|
|
{
|
|
delete* image2D;
|
|
*image2D = 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclKernelArg
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::KernelArg* oclKernelArgCreate(int flags, cv::UMat* m, int wscale, int iwscale, const void* obj, size_t sz)
|
|
{
|
|
return new cv::ocl::KernelArg(flags, m, wscale, iwscale, obj, sz);
|
|
}
|
|
void oclKernelArgRelease(cv::ocl::KernelArg** k)
|
|
{
|
|
delete* k;
|
|
*k = 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// OclQueue
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
cv::ocl::Queue* oclQueueCreate()
|
|
{
|
|
return new cv::ocl::Queue();
|
|
}
|
|
void oclQueueFinish(cv::ocl::Queue* queue)
|
|
{
|
|
queue->finish();
|
|
}
|
|
void oclQueueRelease(cv::ocl::Queue** queue)
|
|
{
|
|
delete* queue;
|
|
*queue = 0;
|
|
}
|
|
|
|
|
|
void oclTypeToString(int type, cv::String* str)
|
|
{
|
|
const char* s = cv::ocl::typeToStr(type);
|
|
*str = s;
|
|
}
|