diff options
-rw-r--r-- | mplayer.c | 21 | ||||
-rw-r--r-- | sub/sub.c | 16 | ||||
-rw-r--r-- | sub/sub.h | 4 |
3 files changed, 16 insertions, 25 deletions
@@ -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); @@ -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, @@ -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 { |