diff options
author | wm4 <wm4@nowhere> | 2014-12-06 23:57:50 +0100 |
---|---|---|
committer | Alessandro Ghedini <alessandro@ghedini.me> | 2014-12-19 19:23:07 +0100 |
commit | 73eaadf6c37157e09b210ad3bee1d52707f87691 (patch) | |
tree | 6895a729e844af1fc4389af883d0ff9f994cb2a1 | |
parent | 292f6f1904dfd1a637748ea86af0fd7a56136018 (diff) | |
download | mpv-73eaadf6c37157e09b210ad3bee1d52707f87691.tar.bz2 mpv-73eaadf6c37157e09b210ad3bee1d52707f87691.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.
-rw-r--r-- | video/out/filter_kernels.c | 3 |
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; } |