gegl r2812 - in trunk: . bin operations/affine
- From: ok svn gnome org
- To: svn-commits-list gnome org
- Subject: gegl r2812 - in trunk: . bin operations/affine
- Date: Wed, 3 Dec 2008 01:31:35 +0000 (UTC)
Author: ok
Date: Wed Dec 3 01:31:35 2008
New Revision: 2812
URL: http://svn.gnome.org/viewvc/gegl?rev=2812&view=rev
Log:
* operations/affine/affine.c: (op_affine_class_init), (process): made
the affine op not cache it's results, also make it pass the data
through like nop if the transform is the identity transform and create
a shifted sub-buffer for integer translates and translates using the
"nearest" resampler.
* bin/editor.c: (gegl_node_get_translation), (move_rel):
s/gegl:shift/gegl:translate/
* bin/gegl.c: s/gegl:shift/gegl:translate/
The gegl:shift operation will be deprecated in the next GEGL release.
Modified:
trunk/ChangeLog
trunk/bin/editor.c
trunk/bin/gegl.c
trunk/operations/affine/affine.c
Modified: trunk/bin/editor.c
==============================================================================
--- trunk/bin/editor.c (original)
+++ trunk/bin/editor.c Wed Dec 3 01:31:35 2008
@@ -205,7 +205,7 @@
node = *consumers;
g_free (consumers);
opname = gegl_node_get_operation (node);
- if (g_str_equal (opname, "gegl:shift") ||
+ if (g_str_equal (opname, "gegl:translate") ||
g_str_equal (opname, "gegl:translate"))
{
gdouble tx, ty;
@@ -501,13 +501,13 @@
{
GeglNode *shift;
- for (shift = node; shift && !g_str_equal (gegl_node_get_operation (shift), "gegl:shift");shift=gegl_previous_sibling (shift))
+ for (shift = node; shift && !g_str_equal (gegl_node_get_operation (shift), "gegl:translate");shift=gegl_previous_sibling (shift))
{
}
if (!shift)
{
- shift = gegl_add_sibling ("gegl:shift");
+ shift = gegl_add_sibling ("gegl:translate");
{
select_node (node);
}
Modified: trunk/bin/gegl.c
==============================================================================
--- trunk/bin/gegl.c (original)
+++ trunk/bin/gegl.c Wed Dec 3 01:31:35 2008
@@ -49,7 +49,7 @@
#endif
#define DEFAULT_COMPOSITION \
-"<?xml version='1.0' encoding='UTF-8'?> <gegl> <node operation='gegl:crop'> <params> <param name='x'>0</param> <param name='y'>0</param> <param name='width'>690</param> <param name='height'>670</param> </params> </node> <node operation='gegl:over'> <node operation='gegl:shift'> <params> <param name='x'>14</param> <param name='y'>613</param> </params> </node> <node operation='gegl:opacity'> <params> <param name='value'>0.59999999999999998</param> </params> </node> <node name='text' operation='gegl:text'> <params> <param name='string'>2000-2008 ? Calvin Williamson, Caroline Dahloff, Manish Singh, Jay Cox, Daniel Rogers, Sven Neumann, Michael Natterer, ?yvind Kol?s, Philip Lafleur, Dominik Ernst, Richard Kralovic, Kevin Cozens, Victor Bogado, Martin Nordholts, Geert Jordaens, Michael Schumacher, John Marshall, ?tienne Bersac, Mark Probst, H?kon Hitland, Tor Lillqvist, Hans Breuer, Deji Akingunola, Bradley Broom, Hans Petter Jansson, Jan Heller, dmacks netspace org, Sven Anders
, Hubert Figui?re, Sam Hocevar, yahvuu at gmail.com, Nicolas Robidoux, Garry R. Osgood, Shlomi Fish, Jakub Steiner and Tonda Tavalec</param> <param name='font'>Sans</param> <param name='size'>8</param> <param name='color'>rgb(0.0000, 0.0000, 0.0000)</param> <param name='wrap'>628</param> <param name='alignment'>0</param> <param name='width'>622</param> <param name='height'>40</param> </params> </node> </node> <node operation='gegl:over'> <node operation='gegl:shift'> <params> <param name='x'>300</param> <param name='y'>500</param> </params> </node> <node operation='gegl:over'> <node operation='gegl:shift'> <params> <param name='x'>0</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <gegl:path d='M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 50,35 C42,35 35,42 35,
50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z' fill='white'/> </node> <node operation='gegl:over'> <node operation='gegl:shift'> <params> <param name='x'>88</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M50,0 C23,0 0,22 0,50 C0,77 22,100 50,100 C68,100 85,90 93,75 L40,75 C35,75 35,65 40,65 L98,65 C100,55 100,45 98,35 L40,35 C35,35 35,25 40,25 L93,25 C84,10 68,0 50,0 z</param> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:over'> <node operation='gegl:shift'> <params> <param name='x'>176</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <pa
rams> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z</param> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:shift'> <params> <param name='x'>264</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M30,4 C12,13 0,30 0,50 C0,78 23,100 50,100 C71,100 88,88 96,71 L56,71 C42,71 30,59 30,45 L30,4 z</pa
ram> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:rotate'> <params> <param name='origin-x'>0</param> <param name='origin-y'>0</param> <param name='filter'>linear</param> <param name='hard-edges'>false</param> <param name='lanczos-width'>3</param> <param name='degrees'>42</param> </params> </node> <node operation='gegl:checkerboard'> <params> <param name='x'>43</param> <param name='y'>44</param> <param name='x-offset'>0</param> <param name='y-offset'>0</param> <param name='color1'>rgb(0.7097, 0.7097, 0.7097)</param> <param name='color2'>rgb(0.7661, 0.7661, 0.7661)</param> </params> </node> </gegl>"
+"<?xml version='1.0' encoding='UTF-8'?> <gegl> <node operation='gegl:crop'> <params> <param name='x'>0</param> <param name='y'>0</param> <param name='width'>690</param> <param name='height'>670</param> </params> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>14</param> <param name='y'>613</param> </params> </node> <node operation='gegl:opacity'> <params> <param name='value'>0.59999999999999998</param> </params> </node> <node name='text' operation='gegl:text'> <params> <param name='string'>2000-2008 ? Calvin Williamson, Caroline Dahloff, Manish Singh, Jay Cox, Daniel Rogers, Sven Neumann, Michael Natterer, ?yvind Kol?s, Philip Lafleur, Dominik Ernst, Richard Kralovic, Kevin Cozens, Victor Bogado, Martin Nordholts, Geert Jordaens, Michael Schumacher, John Marshall, ?tienne Bersac, Mark Probst, H?kon Hitland, Tor Lillqvist, Hans Breuer, Deji Akingunola, Bradley Broom, Hans Petter Jansson, Jan Heller, dmacks netspace org, Sven An
ders, Hubert Figui?re, Sam Hocevar, yahvuu at gmail.com, Nicolas Robidoux, Garry R. Osgood, Shlomi Fish, Jakub Steiner and Tonda Tavalec</param> <param name='font'>Sans</param> <param name='size'>8</param> <param name='color'>rgb(0.0000, 0.0000, 0.0000)</param> <param name='wrap'>628</param> <param name='alignment'>0</param> <param name='width'>622</param> <param name='height'>40</param> </params> </node> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>300</param> <param name='y'>500</param> </params> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>0</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <gegl:path d='M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 50,35 C42,
35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z' fill='white'/> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>88</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M50,0 C23,0 0,22 0,50 C0,77 22,100 50,100 C68,100 85,90 93,75 L40,75 C35,75 35,65 40,65 L98,65 C100,55 100,45 98,35 L40,35 C35,35 35,25 40,25 L93,25 C84,10 68,0 50,0 z</param> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>176</param> <param name='y'>0</param> </params> </node> <node operation='g
egl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z</param> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:translate'> <params> <param name='x'>264</param> <param name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:path'> <params> <param name='d'>M30,4 C12,13 0,30 0,50 C0,78 23,100 50,100 C71,100 88,88 96,71 L56,71 C42,71
30,59 30,45 L30,4 z</param> <param name='fill'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:rotate'> <params> <param name='origin-x'>0</param> <param name='origin-y'>0</param> <param name='filter'>linear</param> <param name='hard-edges'>false</param> <param name='lanczos-width'>3</param> <param name='degrees'>42</param> </params> </node> <node operation='gegl:checkerboard'> <params> <param name='x'>43</param> <param name='y'>44</param> <param name='x-offset'>0</param> <param name='y-offset'>0</param> <param name='color1'>rgb(0.7097, 0.7097, 0.7097)</param> <param name='color2'>rgb(0.7661, 0.7661, 0.7661)</param> </params> </node> </gegl>"
static void
gegl_enable_fatal_warnings (void)
Modified: trunk/operations/affine/affine.c
==============================================================================
--- trunk/operations/affine/affine.c (original)
+++ trunk/operations/affine/affine.c Wed Dec 3 01:31:35 2008
@@ -72,10 +72,20 @@
const gchar *input_pad,
const GeglRectangle *region);
+#if 0
static gboolean process (GeglOperation *op,
GeglBuffer *input,
GeglBuffer *output,
const GeglRectangle *result);
+#endif
+
+
+static gboolean
+process (GeglOperation *operation,
+ GeglOperationContext *context,
+ const gchar *output_prop,
+ const GeglRectangle *result);
+
static GeglNode * detect (GeglOperation *operation,
gint x,
gint y);
@@ -193,7 +203,7 @@
op_affine_class_init (OpAffineClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GeglOperationFilterClass *filter_class = GEGL_OPERATION_FILTER_CLASS (klass);
+ /*GeglOperationFilterClass *filter_class = GEGL_OPERATION_FILTER_CLASS (klass);*/
GeglOperationClass *op_class = GEGL_OPERATION_CLASS (klass);
gobject_class->set_property = set_property;
@@ -206,9 +216,11 @@
op_class->detect = detect;
op_class->categories = "transform";
op_class->prepare = prepare;
+ op_class->no_cache = TRUE;
- filter_class->process = process;
+ /*filter_class->process = process;*/
+ op_class->process = process;
klass->create_matrix = NULL;
@@ -711,42 +723,65 @@
static gboolean
process (GeglOperation *operation,
- GeglBuffer *input,
- GeglBuffer *output,
+ GeglOperationContext *context,
+ const gchar *output_prop,
const GeglRectangle *result)
{
+ GeglBuffer *input;
+ GeglBuffer *output;
OpAffine *affine = (OpAffine *) operation;
if (is_intermediate_node (affine) ||
gegl_matrix3_is_identity (affine->matrix))
{
- /* XXX: make the copying smarter, by perhaps even COW sharing
- * of tiles (in the gegl_buffer_copy code)
- */
- gegl_buffer_copy (input, NULL, output, NULL);
- }
-#if 0 /* XXX: port to use newer APIs, perhaps not possible to achieve COW,
- but should still be faster than a full resampling when it
- is not needed */
+ /* passing straight through (like gegl:nop) */
+ input = gegl_operation_context_get_source (context, "input");
+ if (!input)
+ {
+ g_warning ("transform received NULL input");
+ return FALSE;
+ }
+
+ gegl_operation_context_set_object (context, "output", G_OBJECT (input));
+ }
else if (gegl_matrix3_is_translate (affine->matrix) &&
(! strcmp (affine->filter, "nearest") ||
(affine->matrix [0][2] == (gint) affine->matrix [0][2] &&
affine->matrix [1][2] == (gint) affine->matrix [1][2])))
{
+ /* doing a buffer shifting trick, (enhanced nop) */
GeglRectangle input_rectangle = *result;
- input_rectangle.x += (gint) affine->matrix [0][2];
- input_rectangle.y += (gint) affine->matrix [1][2];
- gegl_buffer_copy (input, NULL, output, &input_rectangle);
+ input = gegl_operation_context_get_source (context, "input");
+
+ output = g_object_new (GEGL_TYPE_BUFFER,
+ "source", input,
+ "shift-x", (int)-affine->matrix[0][2],
+ "shift-y", (int)-affine->matrix[1][2],
+ "abyss-width", -1, /* turn of abyss
+ (relying on abyss
+ of source) */
+ NULL);
+
+ gegl_operation_context_set_object (context, "output", G_OBJECT (output));
+
+ if (input != NULL)
+ g_object_unref (input);
}
-#endif
else
{
- /* XXX: add back more samplers */
+ /* for all other cases, do a proper resampling */
+
+ input = gegl_operation_context_get_source (context, "input");
+ output = gegl_operation_context_get_target (context, "output");
+
g_object_set(affine->sampler, "buffer", input, NULL);
gegl_sampler_prepare (affine->sampler);
affine_generic (output, input, affine->matrix, affine->sampler);
g_object_unref(affine->sampler->buffer);
affine->sampler->buffer = NULL;
+
+ if (input != NULL)
+ g_object_unref (input);
}
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]