From 3f6424fb1e9b56607e5c7e6bc0842a3d02f1e91c Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 22 Jul 2009 12:09:34 +0000 Subject: [PATCH] Improve the median filter performance. git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@3563 92316355-f0b4-4df1-b90c-862c8a59935f --- pipi/filter/median.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pipi/filter/median.c b/pipi/filter/median.c index 200a435..14f4c5f 100644 --- a/pipi/filter/median.c +++ b/pipi/filter/median.c @@ -28,7 +28,13 @@ static int cmpint(void const *i1, void const *i2) { - return *(double const *)i1 < *(double const *)i2; + /* On Linux amd64, this is 20 to 30 % faster than using a real + * comparison (which wouldn't work on Windows since it expects both + * negative and positive values), a ternary operator, or floats instead + * of doubles. */ + union { int32_t i; double d; } u; + u.d = *(double const *)i1 - *(double const *)i2; + return u.i; } pipi_image_t *pipi_median(pipi_image_t *src, int radius)