diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/audio.c | 6 | ||||
-rw-r--r-- | player/loadfile.c | 3 |
2 files changed, 6 insertions, 3 deletions
diff --git a/player/audio.c b/player/audio.c index 67ac16a2be..23913b9b11 100644 --- a/player/audio.c +++ b/player/audio.c @@ -96,6 +96,8 @@ void reset_audio_state(struct MPContext *mpctx) { if (mpctx->d_audio) audio_reset_decoding(mpctx->d_audio); + if (mpctx->ao_buffer) + mp_audio_buffer_clear(mpctx->ao_buffer); mpctx->audio_status = mpctx->d_audio ? STATUS_SYNCING : STATUS_EOF; } @@ -120,15 +122,13 @@ void reinit_audio_chain(struct MPContext *mpctx) mpctx->d_audio->opts = opts; mpctx->d_audio->header = sh; mpctx->d_audio->replaygain_data = sh->audio->replaygain_data; + mpctx->ao_buffer = mp_audio_buffer_create(NULL); if (!audio_init_best_codec(mpctx->d_audio, opts->audio_decoders)) goto init_error; reset_audio_state(mpctx); } assert(mpctx->d_audio); - if (!mpctx->ao_buffer) - mpctx->ao_buffer = mp_audio_buffer_create(mpctx); - struct mp_audio in_format; mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &in_format); diff --git a/player/loadfile.c b/player/loadfile.c index 00a10aa34f..c136cc3a19 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -84,8 +84,11 @@ void uninit_player(struct MPContext *mpctx, unsigned int mask) mixer_uninit_audio(mpctx->mixer); audio_uninit(mpctx->d_audio); mpctx->d_audio = NULL; + talloc_free(mpctx->ao_buffer); mpctx->audio_status = STATUS_EOF; reselect_demux_streams(mpctx); + if (mpctx->ao_buffer) + mp_audio_buffer_clear(mpctx->ao_buffer); } if (mask & INITIALIZED_SUB) { |