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.
This commit is contained in:
wm4 2015-01-12 13:04:21 +01:00
parent 3459130e5c
commit 8336563d23
1 changed files with 9 additions and 9 deletions

View File

@ -1137,16 +1137,11 @@ goto_reopen_demuxer: ;
} }
#endif #endif
reinit_video_chain(mpctx); if (!mpctx->current_track[0][STREAM_VIDEO] &&
reinit_audio_chain(mpctx); !mpctx->current_track[0][STREAM_AUDIO])
reinit_subs(mpctx, 0); {
reinit_subs(mpctx, 1);
//==================== START PLAYING =======================
if (!mpctx->d_video && !mpctx->d_audio) {
struct demuxer *d = mpctx->demuxer;
MP_FATAL(mpctx, "No video or audio streams selected.\n"); MP_FATAL(mpctx, "No video or audio streams selected.\n");
struct demuxer *d = mpctx->demuxer;
if (d->stream->uncached_type == STREAMTYPE_DVB) { if (d->stream->uncached_type == STREAMTYPE_DVB) {
int dir = mpctx->last_dvb_step; int dir = mpctx->last_dvb_step;
if (demux_stream_control(d, STREAM_CTRL_DVB_STEP_CHANNEL, &dir) > 0) if (demux_stream_control(d, STREAM_CTRL_DVB_STEP_CHANNEL, &dir) > 0)
@ -1156,6 +1151,11 @@ goto_reopen_demuxer: ;
goto terminate_playback; 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"); MP_VERBOSE(mpctx, "Starting playback...\n");
if (mpctx->max_frames == 0) { if (mpctx->max_frames == 0) {