[Pixman] [PATCH v14 16/22] pixman-filter: distribute normalization error over filter

spitzak at gmail.com spitzak at gmail.com
Mon Mar 7 01:06:51 UTC 2016


From: Bill Spitzak <spitzak at gmail.com>

This removes a high-frequency spike in the middle of some filters that is
caused by math errors all being in the same direction.

Signed-off-by: Bill Spitzak <spitzak at gmail.com>
---
 pixman/pixman-filter.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c
index 36dd811..ab62e0a 100644
--- a/pixman/pixman-filter.c
+++ b/pixman/pixman-filter.c
@@ -282,8 +282,18 @@ create_1d_filter (int              width,
 	    p[x] = t;
 	}
 
+	/* Distribute any remaining error over all samples */
 	if (new_total != pixman_fixed_1)
-	    p[width / 2] += (pixman_fixed_1 - new_total);
+	{
+	    pixman_fixed_t delta = new_total - pixman_fixed_1;
+	    pixman_fixed_t t = 0;
+	    for (x = 0; x < width; ++x)
+	    {
+		pixman_fixed_t new_t = delta * (x + 1) / width;
+		p[x] += new_t - t;
+		t = new_t;
+	    }
+	}
 
 	p += width;
     }
-- 
1.9.1



More information about the Pixman mailing list