#include "model/processor/strategies/GrayMap.h" #include "model/processor/BIP.h" #include <QPixmap> #include <QImage> GrayMap::GrayMap(const Context context, const QString kernelPath, const QObject *parent = Q_NULLPTR) : IProcessStrategy(context, kernelPath, "GrayMap", parent), _kernelFunctor(KernelFunctor<Image2D, Image2D, GrayMap_t>(_kernel)) { memset(&_kernelParameters, 0, sizeof (GrayMap_t)); } void GrayMap::cpuProcess(Input_t parameters) { _kernelParameters.grayMapSelector = parameters.grayMapSelector; } void GrayMap::finalize() { } Image* GrayMap::processKernel(Image *frames, Buffer* scratchPad) { auto width = frames->getImageInfo<CL_IMAGE_WIDTH>(); auto height = frames->getImageInfo<CL_IMAGE_HEIGHT>(); ImageFormat format; format.image_channel_order = CL_RGBA; format.image_channel_data_type = CL_UNSIGNED_INT8; auto imageOutput = new Image2D(_CLContext, CL_MEM_READ_WRITE, format, width, height); //width should be lass than CL_DEVICE_MAX_WORK_GROUP_SIZE(1024 for current machine) or this will break cl::EnqueueArgs eargs(BIP::getInstance()->CLQueue, cl::NDRange(width, height)); _openCLHelper.runKernelFunctor<Image2D, Image2D, GrayMap_t>(_kernelFunctor, eargs, *static_cast<Image2D*>(frames), *imageOutput, _kernelParameters); delete frames; return imageOutput; }