summaryrefslogtreecommitdiffstats
path: root/player/audio.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-11-09 09:58:44 +0100
committerwm4 <wm4@nowhere>2014-11-09 09:58:44 +0100
commitb021d038c2217903e511ca3673d5f2f1b996c4d4 (patch)
treeadc8258d5f8d18f11aa85f72fb6bc34ff62fb33f /player/audio.c
parent7ee4e533693ee02e660ae0efb2e0e94db8c8c5af (diff)
downloadmpv-b021d038c2217903e511ca3673d5f2f1b996c4d4.tar.bz2
mpv-b021d038c2217903e511ca3673d5f2f1b996c4d4.tar.xz
audio/out: make ao_request_reload() idempotent
This is what you would expect. Before this commit, each ao_request_reload() call would just queue a reload command, and then recreate the AO for the number of times the function was called. Instead of sending a command, introduce some sort of event retrieval mechanism. At least for the reload case, use atomics, because we're too lazy to setup an extra mutex.
Diffstat (limited to 'player/audio.c')
-rw-r--r--player/audio.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/player/audio.c b/player/audio.c
index 8df6053da1..fb3f571cdf 100644
--- a/player/audio.c
+++ b/player/audio.c
@@ -434,6 +434,11 @@ static void do_fill_audio_out_buffers(struct MPContext *mpctx, double endpts)
struct MPOpts *opts = mpctx->opts;
struct dec_audio *d_audio = mpctx->d_audio;
+ if (mpctx->ao && ao_query_and_reset_events(mpctx->ao, AO_EVENT_RELOAD)) {
+ ao_reset(mpctx->ao);
+ uninit_audio_out(mpctx);
+ }
+
if (!d_audio)
return;