summaryrefslogtreecommitdiffstats
path: root/player/audio.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-02-05 21:50:37 +0100
committerwm4 <wm4@nowhere>2016-02-05 23:17:27 +0100
commit8af70561a419c5a4a9926f9e60381dc4282a3fd9 (patch)
treecbf0fc3ef42ada34a744c95c94746786a5894cb8 /player/audio.c
parent242dbc6c2c985bfd4dd8df699c6df6c33f8889d1 (diff)
downloadmpv-8af70561a419c5a4a9926f9e60381dc4282a3fd9.tar.bz2
mpv-8af70561a419c5a4a9926f9e60381dc4282a3fd9.tar.xz
player: move audio and video decoder init to separate functions
Preparation.
Diffstat (limited to 'player/audio.c')
-rw-r--r--player/audio.c42
1 files changed, 31 insertions, 11 deletions
diff --git a/player/audio.c b/player/audio.c
index 1a67cdca63..5ecbab5ad1 100644
--- a/player/audio.c
+++ b/player/audio.c
@@ -358,6 +358,33 @@ init_error:
error_on_track(mpctx, track);
}
+int init_audio_decoder(struct MPContext *mpctx, struct track *track)
+{
+ assert(!track->d_audio);
+ if (!track->stream)
+ goto init_error;
+
+ track->d_audio = talloc_zero(NULL, struct dec_audio);
+ struct dec_audio *d_audio = track->d_audio;
+ d_audio->log = mp_log_new(d_audio, mpctx->log, "!ad");
+ d_audio->global = mpctx->global;
+ d_audio->opts = mpctx->opts;
+ d_audio->header = track->stream;
+
+ d_audio->try_spdif = true;
+
+ if (!audio_init_best_codec(d_audio))
+ goto init_error;
+
+ return 1;
+
+init_error:
+ audio_uninit(track->d_audio);
+ track->d_audio = NULL;
+ error_on_track(mpctx, track);
+ return 0;
+}
+
void reinit_audio_chain(struct MPContext *mpctx)
{
assert(!mpctx->ao_chain);
@@ -378,21 +405,14 @@ void reinit_audio_chain(struct MPContext *mpctx)
ao_c->af->replaygain_data = sh->codec->replaygain_data;
ao_c->spdif_passthrough = true;
ao_c->pts = MP_NOPTS_VALUE;
+ ao_c->ao_buffer = mp_audio_buffer_create(NULL);
ao_c->ao = mpctx->ao;
- struct dec_audio *d_audio = talloc_zero(NULL, struct dec_audio);
- d_audio->log = mp_log_new(d_audio, mpctx->log, "!ad");
- d_audio->global = mpctx->global;
- d_audio->opts = mpctx->opts;
- d_audio->header = sh;
+ if (!init_audio_decoder(mpctx, track))
+ goto init_error;
- track->d_audio = d_audio;
- ao_c->audio_src = d_audio;
+ ao_c->audio_src = track->d_audio;
- d_audio->try_spdif = ao_c->spdif_passthrough;
- ao_c->ao_buffer = mp_audio_buffer_create(NULL);
- if (!audio_init_best_codec(d_audio))
- goto init_error;
reset_audio_state(mpctx);
if (mpctx->ao) {