gegl r2450 - in trunk: . gegl/buffer



Author: ok
Date: Sat Jun 14 16:27:58 2008
New Revision: 2450
URL: http://svn.gnome.org/viewvc/gegl?rev=2450&view=rev

Log:
Bug 360888 â Adapt cubic and lanczos samplers for new framework
This bug is fixed now, further improvements might be desirable for the
code but all the interpolation code is in a working state now.
* gegl/buffer/gegl-sampler.c: 
(gegl_sampler_type_from_interpolation): enable lanczos and cubic.
* gegl/buffer/gegl-sampler-cubic.c:
* gegl/buffer/gegl-sampler-lanczos.c:
* gegl/buffer/gegl-sampler-linear.c:


Modified:
   trunk/ChangeLog
   trunk/gegl/buffer/gegl-sampler-cubic.c
   trunk/gegl/buffer/gegl-sampler-lanczos.c
   trunk/gegl/buffer/gegl-sampler-linear.c
   trunk/gegl/buffer/gegl-sampler.c

Modified: trunk/gegl/buffer/gegl-sampler-cubic.c
==============================================================================
--- trunk/gegl/buffer/gegl-sampler-cubic.c	(original)
+++ trunk/gegl/buffer/gegl-sampler-cubic.c	Sat Jun 14 16:27:58 2008
@@ -93,10 +93,10 @@
 gegl_sampler_cubic_init (GeglSamplerCubic *self)
 {
  GEGL_SAMPLER (self)->context_rect= (GeglRectangle){-1,-1,4,4};
- self->b=1;
- self->c=0;
+ GEGL_SAMPLER (self)->interpolate_format = babl_format ("RaGaBaA float");
+ self->b=1.0;
+ self->c=0.0;
  self->type = g_strdup("cubic");
- return;
  if (strcmp (self->type, "cubic"))
     {
       /* cubic B-spline */
@@ -113,7 +113,6 @@
     {
       self->c = (1.0 - self->b) / 2.0;
     }
-  GEGL_SAMPLER (self)->interpolate_format = babl_format ("RaGaBaA float");
 }
 
 void
@@ -132,6 +131,7 @@
   gfloat            dst[4];
   gint              u,v;
   gint              dx,dy;
+  gint              i;
 
   context_rect = self->context_rect;
   dx = (gint) x;
@@ -163,11 +163,11 @@
       arecip = 1.0 / newval[3];
     }
 
-  /* FIXME: shouldn't clamp a computed value like this, it gets evaluated twice */
-  dst[0] = CLAMP (newval[0] * arecip, 0, G_MAXDOUBLE);
-  dst[1] = CLAMP (newval[1] * arecip, 0, G_MAXDOUBLE);
-  dst[2] = CLAMP (newval[2] * arecip, 0, G_MAXDOUBLE);
-  dst[3] = CLAMP (newval[3], 0, G_MAXDOUBLE);
+  for ( i=0 ;  i < 3 ; i++ )
+    newval[i] *= arecip;
+  for ( i=0 ;  i < 4 ; i++ )
+    dst[i] = CLAMP (newval[i], 0, G_MAXDOUBLE);
+
 
   babl_process (babl_fish (self->interpolate_format, self->format),
                 dst, output, 1);

Modified: trunk/gegl/buffer/gegl-sampler-lanczos.c
==============================================================================
--- trunk/gegl/buffer/gegl-sampler-lanczos.c	(original)
+++ trunk/gegl/buffer/gegl-sampler-lanczos.c	Sat Jun 14 16:27:58 2008
@@ -206,11 +206,10 @@
     {
       arecip = 1.0 / newval[3];
     }
-
-  dst[0] = CLAMP (newval[0] * arecip, 0, G_MAXDOUBLE);
-  dst[1] = CLAMP (newval[1] * arecip, 0, G_MAXDOUBLE);
-  dst[2] = CLAMP (newval[2] * arecip, 0, G_MAXDOUBLE);
-  dst[3] = CLAMP (newval[3], 0, G_MAXDOUBLE);
+  for ( i=0 ;  i < 3 ; i++ )
+    newval[i] *= arecip;
+  for ( i=0 ;  i < 4 ; i++ )
+    dst[i] = CLAMP (newval[i], 0, G_MAXDOUBLE);
 
   babl_process (babl_fish (self->interpolate_format, self->format),
                 dst, output, 1);

Modified: trunk/gegl/buffer/gegl-sampler-linear.c
==============================================================================
--- trunk/gegl/buffer/gegl-sampler-linear.c	(original)
+++ trunk/gegl/buffer/gegl-sampler-linear.c	Sat Jun 14 16:27:58 2008
@@ -120,10 +120,11 @@
     {
       arecip = 1.0 / newval[3];
     }
-  dst[0] = CLAMP (newval[0] * arecip, 0, G_MAXDOUBLE);
-  dst[1] = CLAMP (newval[1] * arecip, 0, G_MAXDOUBLE);
-  dst[2] = CLAMP (newval[2] * arecip, 0, G_MAXDOUBLE);
-  dst[3] = CLAMP (newval[3], 0, G_MAXDOUBLE);
+  for ( i=0 ;  i < 3 ; i++ )
+    newval[i] *= arecip;
+  for ( i=0 ;  i < 4 ; i++ )
+    dst[i] = CLAMP (newval[i], 0, G_MAXDOUBLE);
+
   babl_process (babl_fish (self->interpolate_format, self->format),
                 dst, output, 1);
 }

Modified: trunk/gegl/buffer/gegl-sampler.c
==============================================================================
--- trunk/gegl/buffer/gegl-sampler.c	(original)
+++ trunk/gegl/buffer/gegl-sampler.c	Sat Jun 14 16:27:58 2008
@@ -103,13 +103,14 @@
 
 void
 gegl_sampler_get (GeglSampler *self,
-                       gdouble           x,
-                       gdouble           y,
-                       void             *output)
+                  gdouble           x,
+                  gdouble           y,
+                  void             *output)
 {
   GeglSamplerClass *klass;
-
+#if 0  /* avoiding expensive typecheck here */
   g_return_if_fail (GEGL_IS_SAMPLER (self));
+#endif
 
   klass = GEGL_SAMPLER_GET_CLASS (self);
 
@@ -310,12 +311,10 @@
         return GEGL_TYPE_SAMPLER_NEAREST;
       case GEGL_INTERPOLATION_LINEAR:
         return GEGL_TYPE_SAMPLER_LINEAR;
-#if 0 /* disabled for now */
       case GEGL_INTERPOLATION_CUBIC:
         return GEGL_TYPE_SAMPLER_CUBIC;
       case GEGL_INTERPOLATION_LANCZOS:
         return GEGL_TYPE_SAMPLER_LANCZOS;
-#endif
       default:        
         return GEGL_TYPE_SAMPLER_LINEAR;
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]