[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