diff options
-rw-r--r-- | mplayer.c | 3 | ||||
-rw-r--r-- | sub/sub.c | 9 | ||||
-rw-r--r-- | sub/sub.h | 1 |
3 files changed, 12 insertions, 1 deletions
@@ -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; @@ -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; @@ -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); |