#if defined(MAGICKCORE_OPENCL_SUPPORT)
extern MagickPrivate Image
- *AccelerateAddNoiseImage(const Image*,const NoiseType,ExceptionInfo *),
+ *AccelerateAddNoiseImage(const Image*,const NoiseType,const double attenuate,
+ ExceptionInfo *),
*AccelerateBlurImage(const Image *,const double,const double,ExceptionInfo *),
*AccelerateConvolveImage(const Image *,const KernelInfo *,ExceptionInfo *),
*AccelerateDespeckleImage(const Image *,ExceptionInfo *),
*/
static Image *ComputeAddNoiseImage(const Image *image,MagickCLEnv clEnv,
- const NoiseType noise_type,ExceptionInfo *exception)
+ const NoiseType noise_type,const double attenuate,ExceptionInfo *exception)
{
cl_command_queue
queue;
cl_float
- attenuate;
+ cl_attenuate;
cl_int
status;
seed1,
workItemCount;
- const char
- *option;
-
const unsigned long
*s;
number_channels=(cl_uint) image->number_channels;
bufferLength=(cl_uint) (image->columns*image->rows*image->number_channels);
- attenuate=1.0f;
- option=GetImageArtifact(image,"attenuate");
- if (option != (char *) NULL)
- attenuate=(float)StringToDouble(option,(char **) NULL);
+ cl_attenuate=(cl_float) attenuate;
i=0;
status =SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_mem),(void *)&imageBuffer);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_uint),(void *)&bufferLength);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_uint),(void *)&pixelsPerWorkitem);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(NoiseType),(void *)&noise_type);
- status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_float),(void *)&attenuate);
+ status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_float),(void *)&cl_attenuate);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_uint),(void *)&seed0);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_uint),(void *)&seed1);
status|=SetOpenCLKernelArg(addNoiseKernel,i++,sizeof(cl_uint),(void *)&numRandomNumberPerPixel);
}
MagickPrivate Image *AccelerateAddNoiseImage(const Image *image,
- const NoiseType noise_type,ExceptionInfo *exception)
+ const NoiseType noise_type,const double attenuate,ExceptionInfo *exception)
{
Image
*filteredImage;
if (clEnv == (MagickCLEnv) NULL)
return((Image *) NULL);
- filteredImage=ComputeAddNoiseImage(image,clEnv,noise_type,exception);
+ filteredImage=ComputeAddNoiseImage(image,clEnv,noise_type,attenuate,
+ exception);
return(filteredImage);
}
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickCoreSignature);
#if defined(MAGICKCORE_OPENCL_SUPPORT)
- noise_image=AccelerateAddNoiseImage(image,noise_type,exception);
+ noise_image=AccelerateAddNoiseImage(image,noise_type,attenuate,exception);
if (noise_image != (Image *) NULL)
return(noise_image);
#endif