st: Fix Gaussian kernel calculation

The result of subtracting unsigned operands is unsigned, which throws
off our calculation in case it should be negative.

This partly reverts 18b6f13395.

https://bugzilla.gnome.org/show_bug.cgi?id=757779
This commit is contained in:
Florian Müllner 2015-11-12 00:42:36 +01:00
parent 18f7d20006
commit 9a7b47c23f

View File

@ -211,7 +211,7 @@ calculate_gaussian_kernel (gdouble sigma,
{ {
gdouble *ret, sum; gdouble *ret, sum;
gdouble exp_divisor; gdouble exp_divisor;
guint half, i; int half, i;
g_return_val_if_fail (sigma > 0, NULL); g_return_val_if_fail (sigma > 0, NULL);
@ -223,14 +223,14 @@ calculate_gaussian_kernel (gdouble sigma,
exp_divisor = 2 * sigma * sigma; exp_divisor = 2 * sigma * sigma;
/* n_values of 1D Gauss function */ /* n_values of 1D Gauss function */
for (i = 0; i < n_values; i++) for (i = 0; i < (int)n_values; i++)
{ {
ret[i] = exp (-(i - half) * (i - half) / exp_divisor); ret[i] = exp (-(i - half) * (i - half) / exp_divisor);
sum += ret[i]; sum += ret[i];
} }
/* normalize */ /* normalize */
for (i = 0; i < n_values; i++) for (i = 0; i < (int)n_values; i++)
ret[i] /= sum; ret[i] /= sum;
return ret; return ret;