diff options
author | Niklas Haas <git@haasn.xyz> | 2017-07-07 11:26:30 +0200 |
---|---|---|
committer | Niklas Haas <git@haasn.xyz> | 2017-07-07 11:26:30 +0200 |
commit | 9c9d3e7b25c85368f9e8f24d6f5f7f5cc49510e3 (patch) | |
tree | f43edda6cc41a905be9681f116b91fbedfb6580f /video/out | |
parent | 6a59d7342fcce9102da8138e2356cd1f65a9b297 (diff) | |
download | mpv-9c9d3e7b25c85368f9e8f24d6f5f7f5cc49510e3.tar.bz2 mpv-9c9d3e7b25c85368f9e8f24d6f5f7f5cc49510e3.tar.xz |
vo_opengl: prevent desat from blowing up for negative
The current algorithm blew up when the color was negative, such as the
case when downscaling with dscale=mitchell or other algorithms that
introduce negative ringing. The simplest solution is to just slightly
change the calculation to force both parameters to be in-range.
Diffstat (limited to 'video/out')
-rw-r--r-- | video/out/opengl/video_shaders.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/video/out/opengl/video_shaders.c b/video/out/opengl/video_shaders.c index 38d7939f96..5795a36985 100644 --- a/video/out/opengl/video_shaders.c +++ b/video/out/opengl/video_shaders.c @@ -532,7 +532,7 @@ static void pass_tone_map(struct gl_shader_cache *sc, float ref_peak, // Desaturate the color using a coefficient dependent on the brightness if (desat > 0 && ref_peak > desat) { - GLSLF("float overbright = max(0.0, (luma - %f) / (luma + 1e-6));\n", desat); + GLSLF("float overbright = max(luma - %f, 1e-6) / max(luma, 1e-6);\n", desat); GLSL(color.rgb = mix(color.rgb, vec3(luma), overbright);) } |