diff --git a/player/audio.c b/player/audio.c index 3a2c60b8ab..2ce1669366 100644 --- a/player/audio.c +++ b/player/audio.c @@ -886,13 +886,18 @@ void fill_audio_out_buffers(struct MPContext *mpctx) assert(mpctx->audio_status >= STATUS_FILLING); + // We already have as much data as the audio device wants, and can start + // writing it any time. + if (mpctx->audio_status == STATUS_FILLING) + mpctx->audio_status = STATUS_READY; + // 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_FILLING && mpctx->vo_chain && - !mpctx->vo_chain->is_coverart && mpctx->video_status <= STATUS_READY) - { - mpctx->audio_status = STATUS_READY; - return; + 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"); } bool audio_eof = status == AD_EOF;