summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas J. Kain <nicholas@kain.us>2017-03-03 23:35:22 -0500
committerRostislav Pehlivanov <atomnuker@gmail.com>2017-03-06 03:31:35 +0000
commit69cc9f2a2c970610df0ea961998d494f69ef73c0 (patch)
tree930afe718e043bf806663f1cd63f3bc05ef6baaf
parent85c8556eef9ccdb6b172f64a0016bc16f8a092fb (diff)
downloadmpv-69cc9f2a2c970610df0ea961998d494f69ef73c0.tar.bz2
mpv-69cc9f2a2c970610df0ea961998d494f69ef73c0.tar.xz
filter_kernels: Apply blur/taper before culling radius.
Modifications to the input coordinates should all be performed before the final range check against the filter boundaries. However, in the existing code, the blur/taper is applied after the filter radius check is performed. Thus, effectively the filter radius cutoff is applied to only-downscaling-metric-modified coordinates, not the final coordinates. Correct this issue and restructure the returns a bit to make it more obvious what is being done.
-rw-r--r--video/out/filter_kernels.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/video/out/filter_kernels.c b/video/out/filter_kernels.c
index c5a12295f7..68f03ac2e3 100644
--- a/video/out/filter_kernels.c
+++ b/video/out/filter_kernels.c
@@ -100,14 +100,14 @@ static double sample_window(struct filter_window *kernel, double x)
// All windows are symmetric, this makes life easier
x = fabs(x);
- if (x >= kernel->radius)
- return 0.0;
// Stretch and taper the window size as needed
x = kernel->blur > 0.0 ? x / kernel->blur : x;
x = x <= kernel->taper ? 0.0 : (x - kernel->taper) / (1 - kernel->taper);
- return kernel->weight(kernel, x);
+ if (x < kernel->radius)
+ return kernel->weight(kernel, x);
+ return 0.0;
}
// Evaluate a filter's kernel and window at a given absolute position