From 8336563d237a2fe78bafda9e8690e812f28fa5aa Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 12 Jan 2015 13:04:21 +0100 Subject: [PATCH] player: check sufficient track selection before destroying VO mpv needs at least an audio or video track to play something. If the track selection is basically insufficient, the player will immediately skip to the next file (or quit). One slightly annoying thing might be that trying to play a subtitle file will close the VO window, and then go to the next file immediately (so "mpv 1.mkv 2.srt 3.mkv" would flash the video window when 2.srt is skipped). Move the check to before the video window is possibly closed. This is a minor cosmetic issue; one can use --force-window to avoid closing the video window at all. Fixes #1459. --- player/loadfile.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/player/loadfile.c b/player/loadfile.c index bd46983837..e3e1b4fa30 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -1137,16 +1137,11 @@ goto_reopen_demuxer: ; } #endif - reinit_video_chain(mpctx); - reinit_audio_chain(mpctx); - reinit_subs(mpctx, 0); - reinit_subs(mpctx, 1); - - //==================== START PLAYING ======================= - - if (!mpctx->d_video && !mpctx->d_audio) { - struct demuxer *d = mpctx->demuxer; + if (!mpctx->current_track[0][STREAM_VIDEO] && + !mpctx->current_track[0][STREAM_AUDIO]) + { MP_FATAL(mpctx, "No video or audio streams selected.\n"); + struct demuxer *d = mpctx->demuxer; if (d->stream->uncached_type == STREAMTYPE_DVB) { int dir = mpctx->last_dvb_step; if (demux_stream_control(d, STREAM_CTRL_DVB_STEP_CHANNEL, &dir) > 0) @@ -1156,6 +1151,11 @@ goto_reopen_demuxer: ; goto terminate_playback; } + reinit_video_chain(mpctx); + reinit_audio_chain(mpctx); + reinit_subs(mpctx, 0); + reinit_subs(mpctx, 1); + MP_VERBOSE(mpctx, "Starting playback...\n"); if (mpctx->max_frames == 0) {