From 0268b1a44562ea5310491fbcbb987d5462f42ca5 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 7 Aug 2012 01:58:43 +0200 Subject: osd: reset OSD change state even if VO doesn't draw OSD Commit 168293e0ae6f08 assumed the OSD drawing routines (which have the functions osd_draw_text/_ext as entrypoint) would always be called, and relied on that to reset the change flag. Some VOs, such as vo_null, didn't do this. Pausing could turn into endless framestepping in some cases. Restore the part of the OSD drawing logic that dealt with this. (Alternatively, the VOs could be obliged to always call the OSD drawing routines, even if the VO doesn't actually draw the OSD. But it seems even more messy to rely on that.) --- mplayer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mplayer.c') diff --git a/mplayer.c b/mplayer.c index 25fafa1b72..f99b645494 100644 --- a/mplayer.c +++ b/mplayer.c @@ -2584,6 +2584,7 @@ static int redraw_osd(struct MPContext *mpctx) if (!(sh_video->output_flags & VFCAP_EOSD_FILTER)) vf->control(vf, VFCTRL_DRAW_EOSD, mpctx->osd); vf->control(vf, VFCTRL_DRAW_OSD, mpctx->osd); + vo_osd_reset_changed(); vo_flip_page(mpctx->video_out, 0, -1); return 0; } @@ -3131,7 +3132,7 @@ static void run_playloop(struct MPContext *mpctx) mpctx->osd->pts = mpctx->video_pts - mpctx->osd->sub_offset; vf->control(vf, VFCTRL_DRAW_EOSD, mpctx->osd); vf->control(vf, VFCTRL_DRAW_OSD, mpctx->osd); - vo_osd_changed(0); + vo_osd_reset_changed(); mpctx->time_frame -= get_relative_time(mpctx); mpctx->time_frame -= vo->flip_queue_offset; -- cgit v1.2.3