From 03cf150ff3516789d581214177f291d46310aaf4 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 22 Aug 2017 17:01:35 +0200 Subject: 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. --- video/out/vo_sdl.c | 85 ++---------------------------------------------------- 1 file changed, 3 insertions(+), 82 deletions(-) (limited to 'video/out/vo_sdl.c') 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; -- cgit v1.2.3