more uchar bilinear tweaks
This commit is contained in:
parent
e96440d49b
commit
8d559556c6
@ -7,7 +7,7 @@
|
|||||||
- updated README
|
- updated README
|
||||||
- don't use tables for bilinear on float data for a small speedup (thanks
|
- don't use tables for bilinear on float data for a small speedup (thanks
|
||||||
Nicolas Robidoux)
|
Nicolas Robidoux)
|
||||||
- no tables for uchar either, about a 15% speedup (thank Nicolas)
|
- no tables for uchar either, about a 15% speedup (thanks Nicolas)
|
||||||
|
|
||||||
30/11/10 started 7.24.0
|
30/11/10 started 7.24.0
|
||||||
- bump for new stable
|
- bump for new stable
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
* 7/1/11
|
* 7/1/11
|
||||||
* - don't use tables for bilinear on float data for a small speedup
|
* - don't use tables for bilinear on float data for a small speedup
|
||||||
* (thanks Nicolas)
|
* (thanks Nicolas)
|
||||||
|
* 12/1/11
|
||||||
|
* - faster, more accuarate uchar bilinear (thanks Nicolas)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -337,7 +339,7 @@ G_DEFINE_TYPE( VipsInterpolateBilinear, vips_interpolate_bilinear,
|
|||||||
TYPE *tq = (TYPE *) out; \
|
TYPE *tq = (TYPE *) out; \
|
||||||
\
|
\
|
||||||
const int X = (x - ix) * VIPS_INTERPOLATE_SCALE; \
|
const int X = (x - ix) * VIPS_INTERPOLATE_SCALE; \
|
||||||
const int Y = (y - iy) * VIPS_INTERPOLATE_SCALE; \
|
const int Y = (iy - y) * VIPS_INTERPOLATE_SCALE; \
|
||||||
\
|
\
|
||||||
const TYPE *tp1 = (TYPE *) p1; \
|
const TYPE *tp1 = (TYPE *) p1; \
|
||||||
const TYPE *tp2 = (TYPE *) p2; \
|
const TYPE *tp2 = (TYPE *) p2; \
|
||||||
@ -350,7 +352,7 @@ G_DEFINE_TYPE( VipsInterpolateBilinear, vips_interpolate_bilinear,
|
|||||||
const int bot = tp3[z] + \
|
const int bot = tp3[z] + \
|
||||||
((X * (tp4[z] - tp3[z])) >> VIPS_INTERPOLATE_SHIFT); \
|
((X * (tp4[z] - tp3[z])) >> VIPS_INTERPOLATE_SHIFT); \
|
||||||
\
|
\
|
||||||
tq[z] = top + ((Y * (bot - top)) >> VIPS_INTERPOLATE_SHIFT); \
|
tq[z] = top - ((Y * (bot - top)) >> VIPS_INTERPOLATE_SHIFT); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,6 +383,27 @@ G_DEFINE_TYPE( VipsInterpolateBilinear, vips_interpolate_bilinear,
|
|||||||
c3 * tp3[z] + c4 * tp4[z]; \
|
c3 * tp3[z] + c4 * tp4[z]; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Float arithmetic, used for int32 and float types, no tables.
|
||||||
|
*/
|
||||||
|
#define BILINEAR_FLOAT2( TYPE ) { \
|
||||||
|
TYPE *tq = (TYPE *) out; \
|
||||||
|
\
|
||||||
|
const double X = x - ix; \
|
||||||
|
const double Y = iy - y; \
|
||||||
|
\
|
||||||
|
const TYPE *tp1 = (TYPE *) p1; \
|
||||||
|
const TYPE *tp2 = (TYPE *) p2; \
|
||||||
|
const TYPE *tp3 = (TYPE *) p3; \
|
||||||
|
const TYPE *tp4 = (TYPE *) p4; \
|
||||||
|
\
|
||||||
|
for( z = 0; z < b; z++ ) { \
|
||||||
|
const double top = tp1[z] + X * (tp2[z] - tp1[z]); \
|
||||||
|
const double bot = tp3[z] + X * (tp4[z] - tp3[z]); \
|
||||||
|
\
|
||||||
|
tq[z] = top - Y * (bot - top); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
/* Expand for band types. with a fixed-point interpolator and a float
|
/* Expand for band types. with a fixed-point interpolator and a float
|
||||||
* interpolator.
|
* interpolator.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user