summaryrefslogtreecommitdiffstats
path: root/video/out/vo_sdl.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-08-22 17:01:35 +0200
committerwm4 <wm4@nowhere>2017-08-22 17:01:35 +0200
commit03cf150ff3516789d581214177f291d46310aaf4 (patch)
tree2f352bf9c6d36e10001accdb72cef2d7683ab04a /video/out/vo_sdl.c
parentd67aa6da6bbd3cba9eabd12cda4703821fecc7a1 (diff)
downloadmpv-03cf150ff3516789d581214177f291d46310aaf4.tar.bz2
mpv-03cf150ff3516789d581214177f291d46310aaf4.tar.xz
video: redo video equalizer option handling
I really wouldn't care much about this, but some parts of the core code are under HAVE_GPL, so there's some need to get rid of it. Simply turn the video equalizer from its current fine-grained handling with vf/vo fallbacks into global options. This makes updating them much simpler. This removes any possibility of applying video equalizers in filters, which affects vf_scale, and the previously removed vf_eq. Not a big loss, since the preferred VOs have this builtin. Remove video equalizer handling from vo_direct3d, vo_sdl, vo_vaapi, and vo_xv. I'm not going to waste my time on these legacy VOs. vo.eq_opts_cache exists _only_ to send a VOCTRL_SET_EQUALIZER, which exists _only_ to trigger a redraw. This seems silly, but for now I feel like this is less of a pain. The rest of the equalizer using code is self-updating. See commit 96b906a51d5 for how some video equalizer code was GPL only. Some command line option names and ranges can probably be traced back to a GPL only committer, but we don't consider these copyrightable.
Diffstat (limited to 'video/out/vo_sdl.c')
-rw-r--r--video/out/vo_sdl.c85
1 files changed, 3 insertions, 82 deletions
diff --git a/video/out/vo_sdl.c b/video/out/vo_sdl.c
index a1d0b248eb..d902c09cad 100644
--- a/video/out/vo_sdl.c
+++ b/video/out/vo_sdl.c
@@ -844,44 +844,11 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
{
struct priv *vc = vo->priv;
- // decode brightness/contrast
- int color_add = 0;
- int color_mod = 255;
- int brightness = vc->brightness;
- int contrast = vc->contrast;
-
- // only in this range it is possible to do brightness/contrast control
- // properly, using just additive render operations and color modding
- // (SDL2 provides no subtractive rendering, sorry)
- if (2 * brightness < contrast) {
- //brightness = (brightness + 2 * contrast) / 5; // closest point
- brightness = (brightness + contrast) / 3; // equal adjustment
- contrast = 2 * brightness;
- }
-
- // convert to values SDL2 likes
- color_mod = ((contrast + 100) * 255 + 50) / 100;
- color_add = ((2 * brightness - contrast) * 255 + 100) / 200;
-
- // clamp
- if (color_mod < 0)
- color_mod = 0;
- if (color_mod > 255)
- color_mod = 255;
- // color_add can't be < 0
- if (color_add > 255)
- color_add = 255;
-
// typically this runs in parallel with the following mp_image_copy call
- SDL_SetRenderDrawColor(vc->renderer, color_add, color_add, color_add, 255);
+ SDL_SetRenderDrawColor(vc->renderer, 0, 0, 0, 255);
SDL_RenderClear(vc->renderer);
- // use additive blending for the video texture only if the clear color is
- // not black (faster especially for the software renderer)
- if (color_add)
- SDL_SetTextureBlendMode(vc->tex, SDL_BLENDMODE_ADD);
- else
- SDL_SetTextureBlendMode(vc->tex, SDL_BLENDMODE_NONE);
+ SDL_SetTextureBlendMode(vc->tex, SDL_BLENDMODE_NONE);
if (mpi) {
vc->osd_pts = mpi->pts;
@@ -909,15 +876,7 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
dst.w = vc->dst_rect.x1 - vc->dst_rect.x0;
dst.h = vc->dst_rect.y1 - vc->dst_rect.y0;
- // typically this runs in parallel with the following mp_image_copy call
- if (color_mod > 255) {
- SDL_SetTextureColorMod(vc->tex, color_mod / 2, color_mod / 2, color_mod / 2);
- SDL_RenderCopy(vc->renderer, vc->tex, &src, &dst);
- SDL_RenderCopy(vc->renderer, vc->tex, &src, &dst);
- } else {
- SDL_SetTextureColorMod(vc->tex, color_mod, color_mod, color_mod);
- SDL_RenderCopy(vc->renderer, vc->tex, &src, &dst);
- }
+ SDL_RenderCopy(vc->renderer, vc->tex, &src, &dst);
draw_osd(vo);
}
@@ -938,36 +897,6 @@ static struct mp_image *get_window_screenshot(struct vo *vo)
return image;
}
-static int set_eq(struct vo *vo, const char *name, int value)
-{
- struct priv *vc = vo->priv;
-
- if (!strcmp(name, "brightness"))
- vc->brightness = value;
- else if (!strcmp(name, "contrast"))
- vc->contrast = value;
- else
- return VO_NOTIMPL;
-
- vo->want_redraw = true;
-
- return VO_TRUE;
-}
-
-static int get_eq(struct vo *vo, const char *name, int *value)
-{
- struct priv *vc = vo->priv;
-
- if (!strcmp(name, "brightness"))
- *value = vc->brightness;
- else if (!strcmp(name, "contrast"))
- *value = vc->contrast;
- else
- return VO_NOTIMPL;
-
- return VO_TRUE;
-}
-
static int control(struct vo *vo, uint32_t request, void *data)
{
struct priv *vc = vo->priv;
@@ -982,14 +911,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
case VOCTRL_SET_PANSCAN:
force_resize(vo);
return VO_TRUE;
- case VOCTRL_SET_EQUALIZER: {
- struct voctrl_set_equalizer_args *args = data;
- return set_eq(vo, args->name, args->value);
- }
- case VOCTRL_GET_EQUALIZER: {
- struct voctrl_get_equalizer_args *args = data;
- return get_eq(vo, args->name, args->valueptr);
- }
case VOCTRL_SCREENSHOT_WIN:
*(struct mp_image **)data = get_window_screenshot(vo);
return true;