summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/audio.c6
-rw-r--r--player/loadfile.c3
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) {