summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/playloop.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/player/playloop.c b/player/playloop.c
index 942567b760..aceadd99e7 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -766,14 +766,20 @@ static void handle_chapter_change(struct MPContext *mpctx)
// no way to know if this has already been done or not).
int handle_force_window(struct MPContext *mpctx, bool force)
{
- // Don't interfere with real video playback
- if (mpctx->vo_chain)
- return 0;
-
// True if we're either in idle mode, or loading of the file has finished.
// It's also set via force in some stages during file loading.
bool act = !mpctx->playing || mpctx->playback_initialized || force;
+ // On the other hand, if a video track is selected, but no video is ever
+ // decoded on it, then create the window.
+ bool stalled_video = mpctx->playback_initialized && mpctx->restart_complete &&
+ mpctx->video_status == STATUS_EOF && mpctx->vo_chain &&
+ !vo_has_frame(mpctx->video_out);
+
+ // Don't interfere with real video playback
+ if (mpctx->vo_chain && !stalled_video)
+ return 0;
+
if (!mpctx->opts->force_vo) {
if (act)
uninit_video_out(mpctx);