From 526d578beee0fb6dc61e189bf2e185f688c9bef2 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 29 Jan 2016 22:46:28 +0100 Subject: player: refactor: some more minor decoder/output decoupling These changes don't make too much sense without context, but are preparation for later. Then the audio_src/video_src fields will be actually be NULL under circumstances. --- player/audio.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'player/audio.c') diff --git a/player/audio.c b/player/audio.c index 7e1137590e..d6cfd4fb61 100644 --- a/player/audio.c +++ b/player/audio.c @@ -171,14 +171,15 @@ static void ao_chain_reset_state(struct ao_chain *ao_c) ao_c->input_frame = NULL; af_seek_reset(ao_c->af); mp_audio_buffer_clear(ao_c->ao_buffer); + + if (ao_c->audio_src) + audio_reset_decoding(ao_c->audio_src); } void reset_audio_state(struct MPContext *mpctx) { - if (mpctx->ao_chain) { - audio_reset_decoding(mpctx->ao_chain->audio_src); + if (mpctx->ao_chain) ao_chain_reset_state(mpctx->ao_chain); - } mpctx->audio_status = mpctx->ao_chain ? STATUS_SYNCING : STATUS_EOF; mpctx->delay = 0; mpctx->audio_drop_throttle = 0; @@ -238,6 +239,9 @@ static void reinit_audio_filters_and_output(struct MPContext *mpctx) assert(ao_c); struct af_stream *afs = ao_c->af; + if (ao_c->input_frame) + mp_audio_copy_config(&ao_c->input_format, ao_c->input_frame); + struct mp_audio in_format = ao_c->input_format; if (!mp_audio_config_valid(&in_format)) { @@ -307,7 +311,7 @@ static void reinit_audio_filters_and_output(struct MPContext *mpctx) if (!mpctx->ao) { // If spdif was used, try to fallback to PCM. - if (spdif_fallback) { + if (spdif_fallback && ao_c->audio_src) { MP_VERBOSE(mpctx, "Falling back to PCM output.\n"); ao_c->spdif_passthrough = false; ao_c->spdif_failed = true; @@ -579,9 +583,6 @@ static int decode_new_frame(struct ao_chain *ao_c) res = audio_get_frame(ao_c->audio_src, &ao_c->input_frame); } - if (ao_c->input_frame) - mp_audio_copy_config(&ao_c->input_format, ao_c->input_frame); - switch (res) { case AUDIO_OK: return AD_OK; case AUDIO_WAIT: return AD_WAIT; -- cgit v1.2.3