summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mplayer.c21
-rw-r--r--sub/sub.c16
-rw-r--r--sub/sub.h4
3 files changed, 16 insertions, 25 deletions
diff --git a/mplayer.c b/mplayer.c
index 0edd8bfc1c..f9b6f687c1 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2544,15 +2544,22 @@ void unpause_player(struct MPContext *mpctx)
(void)get_relative_time(mpctx); // ignore time that passed during pause
}
+static void draw_osd(struct MPContext *mpctx)
+{
+ struct vo *vo = mpctx->video_out;
+
+ mpctx->osd->vo_pts = mpctx->video_pts;
+ vo_draw_osd(vo, mpctx->osd);
+ mpctx->osd->want_redraw = false;
+}
+
static int redraw_osd(struct MPContext *mpctx)
{
struct vo *vo = mpctx->video_out;
if (vo_redraw_frame(vo) < 0)
return -1;
- mpctx->osd->vo_pts = mpctx->video_pts;
- vo_draw_osd(vo, mpctx->osd);
- osd_reset_changed(mpctx->osd);
+ draw_osd(mpctx);
vo_flip_page(vo, 0, -1);
return 0;
@@ -3158,10 +3165,7 @@ static void run_playloop(struct MPContext *mpctx)
mpctx->video_pts = sh_video->pts;
update_subtitles(mpctx, sh_video->pts);
update_osd_msg(mpctx);
-
- mpctx->osd->vo_pts = mpctx->video_pts;
- vo_draw_osd(vo, mpctx->osd);
- osd_reset_changed(mpctx->osd);
+ draw_osd(mpctx);
mpctx->time_frame -= get_relative_time(mpctx);
mpctx->time_frame -= vo->flip_queue_offset;
@@ -3303,7 +3307,8 @@ static void run_playloop(struct MPContext *mpctx)
if (sleeptime > 0) {
if (!mpctx->sh_video)
goto novideo;
- if (osd_has_changed(mpctx->osd) || mpctx->video_out->want_redraw) {
+ if (mpctx->osd->want_redraw || mpctx->video_out->want_redraw) {
+ mpctx->osd->want_redraw = false;
if (redraw_osd(mpctx) < 0) {
if (mpctx->paused && video_left)
add_step_frame(mpctx);
diff --git a/sub/sub.c b/sub/sub.c
index 5a39fbdf60..8281081334 100644
--- a/sub/sub.c
+++ b/sub/sub.c
@@ -280,21 +280,7 @@ void vo_osd_changed(int new_value)
if (osd->objs[n]->type == new_value)
osd->objs[n]->force_redraw = true;
}
-}
-
-bool osd_has_changed(struct osd_state *osd)
-{
- for (int n = 0; n < MAX_OSD_PARTS; n++) {
- if (osd->objs[n]->force_redraw)
- return true;
- }
- return false;
-}
-
-void osd_reset_changed(struct osd_state *osd)
-{
- for (int n = 0; n < MAX_OSD_PARTS; n++)
- osd->objs[n]->force_redraw = false;
+ osd->want_redraw = true;
}
bool sub_bitmaps_bb(struct sub_bitmaps *imgs, int *x1, int *y1,
diff --git a/sub/sub.h b/sub/sub.h
index 3ac160a323..88a49a2906 100644
--- a/sub/sub.h
+++ b/sub/sub.h
@@ -126,6 +126,8 @@ struct osd_state {
bool render_subs_in_filter;
+ bool want_redraw;
+
char *osd_text; // OSDTYPE_OSD
int progbar_type, progbar_value; // OSDTYPE_PROGBAR
@@ -203,8 +205,6 @@ extern int sub_justify;
struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib);
void osd_set_text(struct osd_state *osd, const char *text);
void vo_osd_changed(int new_value);
-void osd_reset_changed(struct osd_state *osd);
-bool osd_has_changed(struct osd_state *osd);
void osd_free(struct osd_state *osd);
enum mp_osd_draw_flags {