summaryrefslogtreecommitdiffstats
path: root/video/out/vo_opengl.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-15 18:17:18 +0200
committerwm4 <wm4@nowhere>2013-05-26 16:44:18 +0200
commitbf10a4fdfa40cbe519e6ccb7fb895332da2021d1 (patch)
tree8ff3a3b2601c85291c5531e4d0dc88266a6b7ef6 /video/out/vo_opengl.c
parentc23bf5311fce3b59e9111e5de646ee57b48be27f (diff)
downloadmpv-bf10a4fdfa40cbe519e6ccb7fb895332da2021d1.tar.bz2
mpv-bf10a4fdfa40cbe519e6ccb7fb895332da2021d1.tar.xz
video/out: introduce vo_control for gl_common based VOs
Instead of having separate callbacks for each backend-handled feature (like MPGLContext.fullscreen, MPGLContext.border, etc.), pass the VOCTRL responsible for this directly to the backend. This allows removing a bunch of callbacks, that currently must be set even for optional/lesser features (like VOCTRL_BORDER). This requires changes to all VOs using gl_common, as well as all backends that support gl_common. Also introduce VOCTRL_CHECK_EVENTS. vo.check_events is now optional. VO backends can use VOCTRL_CHECK_EVENTS instead to implementing check_events. This has the advantage that the event handling code in VOs doesn't have to be duplicated if vo_control() is used.
Diffstat (limited to 'video/out/vo_opengl.c')
-rw-r--r--video/out/vo_opengl.c69
1 files changed, 11 insertions, 58 deletions
diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c
index b5cdca7a82..2bc71a30e4 100644
--- a/video/out/vo_opengl.c
+++ b/video/out/vo_opengl.c
@@ -192,19 +192,6 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
return 0;
}
-static void check_events(struct vo *vo)
-{
- struct gl_priv *p = vo->priv;
-
- mpgl_lock(p->glctx);
- int e = p->glctx->check_events(vo);
- if (e & VO_EVENT_RESIZE)
- resize(p);
- if (e & VO_EVENT_EXPOSE)
- vo->want_redraw = true;
- mpgl_unlock(p->glctx);
-}
-
static bool reparse_cmdline(struct gl_priv *p, char *args)
{
struct m_config *cfg = NULL;
@@ -239,41 +226,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
struct gl_priv *p = vo->priv;
switch (request) {
- case VOCTRL_ONTOP:
- if (!p->glctx->ontop)
- break;
- mpgl_lock(p->glctx);
- p->glctx->ontop(vo);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
- case VOCTRL_PAUSE:
- if (!p->glctx->pause)
- break;
- mpgl_lock(p->glctx);
- p->glctx->pause(vo);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
- case VOCTRL_RESUME:
- if (!p->glctx->resume)
- break;
- mpgl_lock(p->glctx);
- p->glctx->resume(vo);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
- case VOCTRL_FULLSCREEN:
- mpgl_lock(p->glctx);
- p->glctx->fullscreen(vo);
- resize(p);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
- case VOCTRL_BORDER:
- if (!p->glctx->border)
- break;
- mpgl_lock(p->glctx);
- p->glctx->border(vo);
- resize(p);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
case VOCTRL_GET_PANSCAN:
return VO_TRUE;
case VOCTRL_SET_PANSCAN:
@@ -310,13 +262,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
gl_video_get_csp_override(p->renderer, data);
mpgl_unlock(p->glctx);
return VO_TRUE;
- case VOCTRL_UPDATE_SCREENINFO:
- if (!p->glctx->update_xinerama_info)
- break;
- mpgl_lock(p->glctx);
- p->glctx->update_xinerama_info(vo);
- mpgl_unlock(p->glctx);
- return VO_TRUE;
case VOCTRL_SCREENSHOT: {
struct voctrl_screenshot_args *args = data;
mpgl_lock(p->glctx);
@@ -337,7 +282,17 @@ static int control(struct vo *vo, uint32_t request, void *data)
return reparse_cmdline(p, arg);
}
}
- return VO_NOTIMPL;
+
+ mpgl_lock(p->glctx);
+ int events = 0;
+ int r = p->glctx->vo_control(vo, &events, request, data);
+ if (events & VO_EVENT_RESIZE)
+ resize(p);
+ if (events & VO_EVENT_EXPOSE)
+ vo->want_redraw = true;
+ mpgl_unlock(p->glctx);
+
+ return r;
}
static void uninit(struct vo *vo)
@@ -428,7 +383,6 @@ const struct vo_driver video_out_opengl = {
.draw_image = draw_image,
.draw_osd = draw_osd,
.flip_page = flip_page,
- .check_events = check_events,
.uninit = uninit,
.priv_size = sizeof(struct gl_priv),
.options = options,
@@ -449,7 +403,6 @@ const struct vo_driver video_out_opengl_hq = {
.draw_image = draw_image,
.draw_osd = draw_osd,
.flip_page = flip_page,
- .check_events = check_events,
.uninit = uninit,
.priv_size = sizeof(struct gl_priv),
.options = options,