summaryrefslogtreecommitdiffstats
path: root/player/audio.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-01-29 22:46:28 +0100
committerwm4 <wm4@nowhere>2016-01-29 22:46:28 +0100
commit526d578beee0fb6dc61e189bf2e185f688c9bef2 (patch)
tree5b30ef53077c400e141073f8a1cd77f82cd850a8 /player/audio.c
parentc00dc5c5c61ba185cc0e8698697cb9b365553a56 (diff)
downloadmpv-526d578beee0fb6dc61e189bf2e185f688c9bef2.tar.bz2
mpv-526d578beee0fb6dc61e189bf2e185f688c9bef2.tar.xz
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.
Diffstat (limited to 'player/audio.c')
-rw-r--r--player/audio.c15
1 files changed, 8 insertions, 7 deletions
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;