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; diff --git a/sub/sub.c b/sub/sub.c index 731bec3565..f88e9869ee 100644 --- a/sub/sub.c +++ b/sub/sub.c @@ -393,6 +393,15 @@ void vo_osd_changed(int new_value) } } +void vo_osd_reset_changed(void) +{ + mp_osd_obj_t* obj = vo_osd_list; + while (obj) { + obj->flags = obj->flags & ~OSDFLAG_FORCE_UPDATE; + obj = obj->next; + } +} + bool vo_osd_has_changed(struct osd_state *osd) { mp_osd_obj_t* obj = vo_osd_list; diff --git a/sub/sub.h b/sub/sub.h index de8fbc6487..eabf6561d1 100644 --- a/sub/sub.h +++ b/sub/sub.h @@ -165,6 +165,7 @@ struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib); void osd_set_text(struct osd_state *osd, const char *text); int osd_update(struct osd_state *osd, int dxs, int dys); void vo_osd_changed(int new_value); +void vo_osd_reset_changed(void); bool vo_osd_has_changed(struct osd_state *osd); void vo_osd_resized(void); int vo_osd_check_range_update(int,int,int,int);