diff --git a/player/audio.c b/player/audio.c index 5078e04dee..6774d415c3 100644 --- a/player/audio.c +++ b/player/audio.c @@ -285,11 +285,8 @@ init_error: uninit_audio_chain(mpctx); uninit_audio_out(mpctx); no_audio: - mp_deselect_track(mpctx, track); if (track) - MP_INFO(mpctx, "Audio: no audio\n"); - if (!mpctx->current_track[STREAM_VIDEO]) - mpctx->stop_play = PT_NEXT_ENTRY; + error_on_track(mpctx, track); } // Return pts value corresponding to the end point of audio written to the diff --git a/player/core.h b/player/core.h index f883ae2882..1013fabac1 100644 --- a/player/core.h +++ b/player/core.h @@ -419,6 +419,7 @@ void merge_playlist_files(struct playlist *pl); float mp_get_cache_percent(struct MPContext *mpctx); bool mp_get_cache_idle(struct MPContext *mpctx); void update_window_title(struct MPContext *mpctx, bool force); +void error_on_track(struct MPContext *mpctx, struct track *track); void stream_dump(struct MPContext *mpctx); int mpctx_run_non_blocking(struct MPContext *mpctx, void (*thread_fn)(void *arg), void *thread_arg); diff --git a/player/misc.c b/player/misc.c index 81b80a1948..5355e23f41 100644 --- a/player/misc.c +++ b/player/misc.c @@ -179,6 +179,24 @@ void update_window_title(struct MPContext *mpctx, bool force) } } +void error_on_track(struct MPContext *mpctx, struct track *track) +{ + if (!track) + return; + mp_deselect_track(mpctx, track); + if (track) { + if (track->type == STREAM_AUDIO) + MP_INFO(mpctx, "Audio: no audio\n"); + if (track->type == STREAM_VIDEO) + MP_INFO(mpctx, "Video: no video\n"); + if (!mpctx->current_track[0][STREAM_AUDIO] && + !mpctx->current_track[0][STREAM_VIDEO]) + mpctx->stop_play = PT_NEXT_ENTRY; + mpctx->error_playing = true; + mpctx->sleeptime = 0; + } +} + void stream_dump(struct MPContext *mpctx) { struct MPOpts *opts = mpctx->opts; diff --git a/player/video.c b/player/video.c index 77b6fb9a6d..62d0f486b7 100644 --- a/player/video.c +++ b/player/video.c @@ -327,7 +327,7 @@ err_out: no_video: uninit_video_chain(mpctx); if (track) - mp_deselect_track(mpctx, track); + error_on_track(mpctx, track); handle_force_window(mpctx, true); return 0; } @@ -836,9 +836,7 @@ void write_video(struct MPContext *mpctx, double endpts) error: MP_FATAL(mpctx, "Could not initialize video chain.\n"); uninit_video_chain(mpctx); - if (!mpctx->current_track[STREAM_AUDIO]) - mpctx->stop_play = PT_NEXT_ENTRY; - mpctx->error_playing = true; + error_on_track(mpctx, mpctx->current_track[STREAM_VIDEO][0]); handle_force_window(mpctx, true); mpctx->sleeptime = 0; }