summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-01-06 17:19:11 +0100
committerKevin Mitchell <kevmitch@gmail.com>2018-01-07 05:03:15 -0800
commit5103b5dc2cfeb6bc980139444e0fd0110f8d4111 (patch)
treef8fcc2c75cff69e2f46a4f56f313c4fd59768756 /player
parentb71c8251b06bab3014de4aa56b50345de4f7f067 (diff)
downloadmpv-5103b5dc2cfeb6bc980139444e0fd0110f8d4111.tar.bz2
mpv-5103b5dc2cfeb6bc980139444e0fd0110f8d4111.tar.xz
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.
Diffstat (limited to 'player')
-rw-r--r--player/audio.c6
-rw-r--r--player/playloop.c8
2 files changed, 10 insertions, 4 deletions
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) {