summaryrefslogtreecommitdiffstats
path: root/video/out
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-12-06 23:57:50 +0100
committerwm4 <wm4@nowhere>2014-12-06 23:59:54 +0100
commit309c5fee59c0de544b5e00b16743894c1f0701e0 (patch)
treeb1dd08f2b0c70a279aba41e7934b3a77bb681912 /video/out
parent2833670b712776f4d257ac973e32d8c69c7dc740 (diff)
downloadmpv-309c5fee59c0de544b5e00b16743894c1f0701e0.tar.bz2
mpv-309c5fee59c0de544b5e00b16743894c1f0701e0.tar.xz
vo_opengl: clamp filters to their size
This gives better results with fancy-downscaling. The issue here is that fancy-downscalign "extends" the filter radius by some amount, which requires using a larger filter size and shader. Then most of the filter is "unused", but some filters still return non-0 coefficients, which create heavy artifacts. Just clamp them off. I'm not sure if this is the right solution, but at least it's better than before.
Diffstat (limited to 'video/out')
-rw-r--r--video/out/filter_kernels.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/video/out/filter_kernels.c b/video/out/filter_kernels.c
index 217bb25730..26f62ff567 100644
--- a/video/out/filter_kernels.c
+++ b/video/out/filter_kernels.c
@@ -91,7 +91,8 @@ void mp_compute_weights(struct filter_kernel *filter, double f, float *out_w)
double sum = 0;
for (int n = 0; n < filter->size; n++) {
double x = f - (n - filter->size / 2 + 1);
- double w = filter->weight(filter, fabs(x) / filter->inv_scale);
+ double c = fabs(x) / filter->inv_scale;
+ double w = c <= filter->radius ? filter->weight(filter, c) : 0;
out_w[n] = w;
sum += w;
}