gegl r2450 - in trunk: . gegl/buffer
- From: ok svn gnome org
- To: svn-commits-list gnome org
- Subject: gegl r2450 - in trunk: . gegl/buffer
- Date: Sat, 14 Jun 2008 16:27:58 +0000 (UTC)
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]