summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/mplayer.c b/mplayer.c
index 79407e85a3..f93fb38460 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3087,11 +3087,10 @@ static void pause_loop(struct MPContext *mpctx)
}
if (mpctx->sh_video && mpctx->video_out)
vo_check_events(mpctx->video_out);
- usec_sleep(20000);
update_osd_msg(mpctx);
int hack = vo_osd_changed(0);
vo_osd_changed(hack);
- if (hack)
+ if (hack || mpctx->sh_video && mpctx->video_out->want_redraw)
break;
#ifdef CONFIG_STREAM_CACHE
if (!opts->quiet && stream_cache_size > 0) {
@@ -3829,21 +3828,25 @@ static void run_playloop(struct MPContext *mpctx)
if (mpctx->stop_play)
break;
}
- if (!mpctx->paused || mpctx->stop_play || mpctx->seek.type
- || mpctx->restart_playback)
+ bool slow_video = mpctx->sh_video && mpctx->video_out->frame_loaded;
+ if (!(mpctx->paused || slow_video) || mpctx->stop_play
+ || mpctx->seek.type || mpctx->restart_playback)
break;
if (mpctx->sh_video) {
update_osd_msg(mpctx);
int hack = vo_osd_changed(0);
vo_osd_changed(hack);
- if (hack) {
+ if (hack || mpctx->video_out->want_redraw) {
if (redraw_osd(mpctx) < 0) {
- add_step_frame(mpctx);
+ if (mpctx->paused)
+ add_step_frame(mpctx);
break;
} else
vo_osd_changed(0);
}
}
+ if (!mpctx->paused)
+ break;
pause_loop(mpctx);
}