Commit 84b9ef49 authored by Øyvind Kolås's avatar Øyvind Kolås

Adapted most operations to new reentrant API for passing buffers

around in the graph. (EXR load is amongst the ones that were not
cheched this time around.)
* operations/blur/box-blur.c: (process):
* operations/blur/gaussian-blur.c: (process):
* operations/color/stretch-contrast.c: (process):
* operations/core/buffer.c: (process):
* operations/core/clone.c: (process):
* operations/core/crop.c: (process):
* operations/core/nop.c: (process):
* operations/core/shift.c: (process):
* operations/display/display.c: (process):
* operations/file-io/jpg-load.c: (process):
* operations/file-io/load.c: (refresh_cache):
* operations/file-io/magick-load.c: (process):
* operations/file-io/pixbuf.c: (process):
* operations/file-io/png-load.c: (process):
* operations/file-io/png-save.c: (process):
* operations/file-io/raw-load.c: (process):
* operations/file-io/svg-load.c: (process):
* operations/meta/layer.c: (refresh_cache):
* operations/render/FractalExplorer.c: (process):
* operations/render/checkerboard.c: (process):
* operations/render/color.c: (process):
* operations/render/noise.c: (process):
* operations/render/text.c: (process):
* operations/transform/affine.c: (process):
* operations/workshop/demosaic-simple.c: (process):
* operations/workshop/gtk-display.c: (process):
* operations/workshop/mandelbrot.c: (process):
* operations/workshop/rawbayer-load.c: (process):
parent d74b60b9
2006-12-11 Øyvind Kolås <pippin@gimp.org>
Adapted most operations to new reentrant API for passing buffers
around in the graph. (EXR load is amongst the ones that were not
cheched this time around.)
* operations/blur/box-blur.c: (process):
* operations/blur/gaussian-blur.c: (process):
* operations/color/stretch-contrast.c: (process):
* operations/core/buffer.c: (process):
* operations/core/clone.c: (process):
* operations/core/crop.c: (process):
* operations/core/nop.c: (process):
* operations/core/shift.c: (process):
* operations/display/display.c: (process):
* operations/file-io/jpg-load.c: (process):
* operations/file-io/load.c: (refresh_cache):
* operations/file-io/magick-load.c: (process):
* operations/file-io/pixbuf.c: (process):
* operations/file-io/png-load.c: (process):
* operations/file-io/png-save.c: (process):
* operations/file-io/raw-load.c: (process):
* operations/file-io/svg-load.c: (process):
* operations/meta/layer.c: (refresh_cache):
* operations/render/FractalExplorer.c: (process):
* operations/render/checkerboard.c: (process):
* operations/render/color.c: (process):
* operations/render/noise.c: (process):
* operations/render/text.c: (process):
* operations/transform/affine.c: (process):
* operations/workshop/demosaic-simple.c: (process):
* operations/workshop/gtk-display.c: (process):
* operations/workshop/mandelbrot.c: (process):
* operations/workshop/rawbayer-load.c: (process):
2006-12-11 Øyvind Kolås <pippin@gimp.org>
Made graph evaluation reentrant.
......
......@@ -49,15 +49,12 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter;
GeglChantOperation *self;
GeglBuffer *input;
GeglBuffer *output;
filter = GEGL_OPERATION_FILTER (operation);
self = GEGL_CHANT_OPERATION (operation);
input = filter->input;
self = GEGL_CHANT_OPERATION (operation);
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
{
GeglRect *result = gegl_operation_result_rect (operation, dynamic_id);
......@@ -109,7 +106,7 @@ process (GeglOperation *operation,
"width", result->w,
"height", result->h,
NULL);
filter->output = cropped;
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (cropped));
g_object_unref (output);
}
}
......
......@@ -86,14 +86,12 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter;
GeglChantOperation *self;
GeglBuffer *input;
GeglBuffer *output;
filter = GEGL_OPERATION_FILTER (operation);
self = GEGL_CHANT_OPERATION (operation);
input = filter->input;
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
{
GeglRect *result = gegl_operation_result_rect (operation, dynamic_id);
......@@ -193,8 +191,8 @@ process (GeglOperation *operation,
"width", result->w,
"height", result->h,
NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (cropped));
g_object_unref (output);
filter->output = cropped;
}
}
......
......@@ -85,13 +85,13 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter = GEGL_OPERATION_FILTER (operation);
GeglRect *result;
GeglBuffer *input,
*output;
gdouble min, max;
input = filter->input;
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
result = gegl_operation_get_requested_region (operation, dynamic_id);
if (result->w==0 ||
......@@ -135,7 +135,7 @@ process (GeglOperation *operation,
g_free (buf);
}
filter->output = output;
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -48,11 +48,14 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
if (self->buffer)
op_source->output = GEGL_BUFFER (g_object_ref (self->buffer));
{
g_object_ref (self->buffer); /* Add an extra reference, since gegl_operation_set_data
is stealing one.
*/
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (self->buffer));
}
return TRUE;
}
......
......@@ -38,11 +38,15 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter = GEGL_OPERATION_FILTER(operation);
if (filter->input)
filter->output = g_object_ref (filter->input);
return TRUE;
gboolean success = FALSE;
GeglBuffer *buffer = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
if (buffer)
{
g_object_ref (buffer);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (buffer));
success = TRUE;
}
return success;
}
#endif
......@@ -49,24 +49,25 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter;
GeglBuffer *input;
GeglBuffer *output;
GeglChantOperation *crop;
crop = GEGL_CHANT_OPERATION (operation);
filter = GEGL_OPERATION_FILTER(operation);
input = filter->input;
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
g_assert (input);
g_assert (gegl_buffer_get_format (input));
filter->output = g_object_new (GEGL_TYPE_BUFFER,
"source", input,
"x", (int)crop->x,
"y", (int)crop->y,
"width", (int)crop->width,
"height", (int)crop->height,
NULL);
output = g_object_new (GEGL_TYPE_BUFFER,
"source", input,
"x", (int)crop->x,
"y", (int)crop->y,
"width", (int)crop->width,
"height", (int)crop->height,
NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -31,14 +31,14 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *op_filter = GEGL_OPERATION_FILTER (operation);
gboolean success = FALSE;
if (op_filter->input)
GeglBuffer *buffer = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
if (buffer)
{
op_filter->output=g_object_ref (op_filter->input);
return TRUE;
}
g_object_ref (buffer);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (buffer));
success = TRUE;
}
return success;
}
......
......@@ -45,21 +45,23 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationFilter *filter = GEGL_OPERATION_FILTER(operation);
GeglBuffer *input = filter->input;
GeglChantOperation *translate = (GeglChantOperation*)filter;
GeglBuffer *input;
GeglBuffer *output;
GeglChantOperation *translate = GEGL_CHANT_OPERATION (operation);
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
g_assert (input);
g_assert (gegl_buffer_get_format (input));
filter->output = g_object_new (GEGL_TYPE_BUFFER,
"source", input,
"shift-x", (int)-translate->x,
"shift-y", (int)-translate->y,
"abyss-width", -1, /* turn of abyss (relying
on abyss of source) */
NULL);
translate = NULL;
output = g_object_new (GEGL_TYPE_BUFFER,
"source", input,
"shift-x", (int)-translate->x,
"shift-y", (int)-translate->y,
"abyss-width", -1, /* turn of abyss (relying
on abyss of source) */
NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -83,13 +83,15 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSink *op_sink = GEGL_OPERATION_SINK (operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglBuffer *input;
GeglBuffer *source;
GeglRect *result = gegl_operation_result_rect (operation, dynamic_id);
SDL_Surface **sdl_outwin = NULL; //op_sym (op, "sdl_outwin");
g_assert (op_sink->input);
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
g_assert (input);
init_sdl ();
......@@ -137,7 +139,7 @@ process (GeglOperation *operation,
*
*/
source = g_object_new (GEGL_TYPE_BUFFER,
"source", op_sink->input,
"source", input,
"x", result->x,
"y", result->y,
"width", result->w,
......
......@@ -49,29 +49,31 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE (operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglBuffer *output;
gint width;
gint height;
gint result;
{
result = query_jpg (self->path, &width, &height);
if (result)
{
g_warning ("%s failed to open file %s for reading.",
G_OBJECT_TYPE_NAME (operation), self->path);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B' u8"),
"x", 0,
"y", 0,
"width", 10,
"height", 10,
NULL);
return TRUE;
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B' u8"),
"x", 0,
"y", 0,
......@@ -79,7 +81,8 @@ process (GeglOperation *operation,
"height", height,
NULL);
result = gegl_buffer_import_jpg (op_source->output, self->path, 0, 0);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
result = gegl_buffer_import_jpg (output, self->path, 0, 0);
if (result)
{
......
......@@ -202,13 +202,13 @@ refresh_cache (GeglChantOperation *self)
"cache", FALSE,
"path", self->path,
NULL);
gegl_node_apply (load, "output");
gegl_node_get (load, "output", &(priv->cached_buffer), NULL);
priv->cached_buffer = gegl_node_apply (load, "output");
/*gegl_node_get (load, "output", &(priv->cached_buffer), NULL);*/
/* we unref the buffer since we effectifly need to steal the
* contents XXX, only once here,. twice in node_blit..
*/
g_object_unref (priv->cached_buffer);
/*g_object_unref (priv->cached_buffer);*/
g_object_unref (gegl);
......
......@@ -63,12 +63,12 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
if (!self->priv)
return FALSE;
op_source->output= GEGL_BUFFER (self->priv);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (self->priv));
self->priv = NULL;
return TRUE;
......
......@@ -36,18 +36,20 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
if (self->pixbuf)
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format(gdk_pixbuf_get_has_alpha(self->pixbuf)?"R'G'B'A u8":"R'G'B' u8"),
"x", 0,
"y", 0,
"width", gdk_pixbuf_get_width (self->pixbuf),
"height", gdk_pixbuf_get_height (self->pixbuf),
NULL);
gegl_buffer_set (op_source->output, NULL, gdk_pixbuf_get_pixels (self->pixbuf), NULL);
{
GeglBuffer *output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format(gdk_pixbuf_get_has_alpha(self->pixbuf)?"R'G'B'A u8":"R'G'B' u8"),
"x", 0,
"y", 0,
"width", gdk_pixbuf_get_width (self->pixbuf),
"height", gdk_pixbuf_get_height (self->pixbuf),
NULL);
gegl_buffer_set (output, NULL, gdk_pixbuf_get_pixels (self->pixbuf), NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
}
return TRUE;
}
......
......@@ -55,7 +55,7 @@ process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglBuffer *output = NULL;
gint result;
gpointer format;
......@@ -69,47 +69,51 @@ process (GeglOperation *operation,
{
g_warning ("%s is %s really a PNG file?",
G_OBJECT_TYPE_NAME (operation), self->path);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B'A u8"),
"x", 0,
"y", 0,
"width", 10,
"height", 10,
NULL);
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B'A u8"),
"x", 0,
"y", 0,
"width", 10,
"height", 10,
NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
}
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format", format,
"x", 0,
"y", 0,
"width", width,
"height", height,
NULL);
output = g_object_new (GEGL_TYPE_BUFFER,
"format", format,
"x", 0,
"y", 0,
"width", width,
"height", height,
NULL);
result = gegl_buffer_import_png (op_source->output, self->path, 0, 0,
result = gegl_buffer_import_png (output, self->path, 0, 0,
&width, &height, format);
if (result)
{
g_warning ("%s failed to open file %s for reading.",
G_OBJECT_TYPE_NAME (operation), self->path);
if (op_source->output)
if (output)
{
g_object_unref (op_source->output);
g_object_unref (output);
}
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format", format,
"x", 0,
"y", 0,
"width", 10,
"height", 10,
NULL);
output = g_object_new (GEGL_TYPE_BUFFER,
"format", format,
"x", 0,
"y", 0,
"width", 10,
"height", 10,
NULL);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
}
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -47,18 +47,15 @@ process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglOperationSink *op_sink = GEGL_OPERATION_SINK (operation);
GeglBuffer *input = op_sink->input;
GeglBuffer *input;
GeglRect *result = gegl_operation_result_rect (operation, dynamic_id);
input = GEGL_BUFFER (gegl_operation_get_data (operation, dynamic_id, "input"));
g_assert (input);
gegl_buffer_export_png (input, self->path,
result->x, result->y,
result->w, result->h);
/*op_filter->output = g_object_ref (input);*/
return TRUE;
}
......
......@@ -45,11 +45,13 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglBuffer *output;
g_assert (self->priv);
op_source->output = GEGL_BUFFER (self->priv);
output = GEGL_BUFFER (self->priv);
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
self->priv = NULL;
return TRUE;
}
......
......@@ -68,8 +68,8 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglBuffer *output = NULL;
gint result;
{
......@@ -82,7 +82,7 @@ process (GeglOperation *operation,
{
g_warning ("%s failed to open file %s for reading.",
G_OBJECT_TYPE_NAME (operation), self->path);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B'A u8"),
"x", 0,
"y", 0,
......@@ -92,7 +92,7 @@ process (GeglOperation *operation,
return TRUE;
}
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B'A u8"),
"x", 0,
"y", 0,
......@@ -100,15 +100,16 @@ process (GeglOperation *operation,
"height", height,
NULL);
result = gegl_buffer_import_svg (op_source->output, self->path,
result = gegl_buffer_import_svg (output, self->path,
width, height, 0, 0, &width, &height);
if (result)
{
g_warning ("%s failed to open file %s for reading.",
G_OBJECT_TYPE_NAME (operation), self->path);
op_source->output = NULL;
return FALSE;
}
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
}
return TRUE;
......
......@@ -214,16 +214,17 @@ refresh_cache (GeglChantOperation *self)
"cache", FALSE,
"path", self->src,
NULL);
gegl_node_apply (load, "output");
gegl_node_get (load, "output", &(priv->cached_buffer), NULL);
priv->cached_buffer = gegl_node_apply (load, "output");
#if 0
/* we unref the buffer since we effectifly need to steal the
* contents XXX, only once here,. twice in node_blit.. since
* we do not have any more use for it there.
*/
g_object_unref (priv->cached_buffer);
#endif
g_object_unref (gegl);
priv->cached_path = g_strdup (self->src);
return TRUE;
}
......
......@@ -389,7 +389,7 @@ process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglRect *need;
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglBuffer *output = NULL;
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
need = gegl_operation_get_requested_region (operation, dynamic_id);
......@@ -400,15 +400,15 @@ process (GeglOperation *operation,
make_color_map (self, colormap);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B' u8"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
output = g_object_new (GEGL_TYPE_BUFFER,
"format", babl_format ("R'G'B' u8"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
buf = g_new (guchar, gegl_buffer_pixels (op_source->output) * 3);
buf = g_new (guchar, gegl_buffer_pixels (output) * 3);
{
guchar *dst=buf;
gint y;
......@@ -423,9 +423,10 @@ process (GeglOperation *operation,
}
}
gegl_buffer_set (op_source->output, NULL, buf, babl_format ("R'G'B' u8"));
gegl_buffer_set (output, NULL, buf, babl_format ("R'G'B' u8"));
g_free (buf);
}
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -41,8 +41,8 @@ process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglRect *need;
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
GeglBuffer *output = NULL;
need = gegl_operation_get_requested_region (operation, dynamic_id);
{
......@@ -63,15 +63,15 @@ process (GeglOperation *operation,
&color2[2],
&color2[3]);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format",
babl_format ("RGBA float"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
buf = g_malloc (gegl_buffer_pixels (op_source->output) * gegl_buffer_px_size (op_source->output));
output = g_object_new (GEGL_TYPE_BUFFER,
"format",
babl_format ("RGBA float"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
buf = g_malloc (gegl_buffer_pixels (output) * gegl_buffer_px_size (output));
{
gfloat *dst=buf;
gint y;
......@@ -93,9 +93,10 @@ process (GeglOperation *operation,
}
}
}
gegl_buffer_set (op_source->output, NULL, buf, NULL);
gegl_buffer_set (output, NULL, buf, NULL);
g_free (buf);
}
gegl_operation_set_data (operation, dynamic_id, "output", G_OBJECT (output));
return TRUE;
}
......
......@@ -34,8 +34,8 @@ static gboolean
process (GeglOperation *operation,
gpointer dynamic_id)
{
GeglRect *need;
GeglOperationSource *op_source = GEGL_OPERATION_SOURCE(operation);
GeglRect *need;
GeglBuffer *output = NULL;
GeglChantOperation *self = GEGL_CHANT_OPERATION (operation);
need = gegl_operation_get_requested_region (operation, dynamic_id);
......@@ -50,15 +50,15 @@ process (GeglOperation *operation,
&color[2],
&color[3]);
op_source->output = g_object_new (GEGL_TYPE_BUFFER,
"format",
babl_format ("RGBA float"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
buf = g_malloc (gegl_buffer_pixels (op_source->output) * gegl_buffer_px_size (op_source->output));
output = g_object_new (GEGL_TYPE_BUFFER,
"format",
babl_format ("RGBA float"),
"x", result->x,
"y", result->y,
"width", result->w,
"height", result->h,
NULL);
buf = g_malloc (gegl_buffer_pixels (output) * gegl_buffer_px_size (output));
{
gfloat *dst=buf;
gint i;
......@@ -68,9 +68,10 @@ process (GeglOperation *operation,
dst += 4;
}
}
gegl_buffer_set (op_source->output, NULL, buf, NULL);
gegl_buffer_set (output, NULL, buf, NULL);