summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mplayer.c3
-rw-r--r--sub/sub.c9
-rw-r--r--sub/sub.h1
3 files changed, 12 insertions, 1 deletions
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);