static gboolean process (GeglOperation *operation, GeglBuffer *input, GeglBuffer *output, const GeglRectangle *result, gint level) { GeglChantO *o = GEGL_CHANT_PROPERTIES (operation); GeglRectangle compute; if (o->blur_radius >= 1.0 && gegl_cl_is_accelerated ()) if (cl_process (operation, input, output, result)) return TRUE; compute = gegl_operation_get_required_for_output (operation, "input",result); if (o->blur_radius < 1.0) { gegl_buffer_copy (input, result, output, result); } else { bilateral_filter (input, &compute, output, result, o->blur_radius, o->edge_preservation); } return TRUE; }
static gboolean bilateral_process (GeglOperation *operation, GeglBuffer *input, GeglBuffer *output, const GeglRectangle *result, gint level) { GeglChantO *o = GEGL_CHANT_PROPERTIES (operation); if (gegl_operation_use_opencl (operation)) if (bilateral_cl_process (operation, input, output, result, o->s_sigma, o->r_sigma/100)) return TRUE; bilateral_filter (input, result, output, result, o->s_sigma, o->r_sigma/100); return TRUE; }