From 5103b5dc2cfeb6bc980139444e0fd0110f8d4111 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 6 Jan 2018 17:19:11 +0100 Subject: player: handle audio playback restart in central playback start code No idea why this wasn't done earlier. This makes playback start in audio only tracks closer to video-only or video/audio restart. It has the consequence that --cache-pause-initial now works for audio-only streams too. --- player/audio.c | 6 ++---- player/playloop.c | 8 ++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'player') diff --git a/player/audio.c b/player/audio.c index 8422e109f1..598e145147 100644 --- a/player/audio.c +++ b/player/audio.c @@ -1225,10 +1225,8 @@ void fill_audio_out_buffers(struct MPContext *mpctx) // Even if we're done decoding and syncing, let video start first - this is // required, because sending audio to the AO already starts playback. if (mpctx->audio_status == STATUS_READY) { - if (mpctx->vo_chain && !mpctx->vo_chain->is_coverart && - mpctx->video_status <= STATUS_READY) - return; - MP_VERBOSE(mpctx, "starting audio playback\n"); + // Warning: relies on handle_playback_restart() being called afterwards. + return; } bool audio_eof = status == AD_EOF; diff --git a/player/playloop.c b/player/playloop.c index 2e714823f9..3db5818773 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -976,7 +976,15 @@ static void handle_playback_restart(struct MPContext *mpctx) return; } + // Video needed, but not started yet -> wait. + if (mpctx->vo_chain && !mpctx->vo_chain->is_coverart && + mpctx->video_status <= STATUS_READY) + return; + + MP_VERBOSE(mpctx, "starting audio playback\n"); + mpctx->audio_status = STATUS_PLAYING; fill_audio_out_buffers(mpctx); // actually play prepared buffer + mp_wakeup_core(mpctx); } if (!mpctx->restart_complete) { -- cgit v1.2.3