summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_openal.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/out/ao_openal.c')
-rw-r--r--audio/out/ao_openal.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/audio/out/ao_openal.c b/audio/out/ao_openal.c
index 8cc29db689..f2cbe78e94 100644
--- a/audio/out/ao_openal.c
+++ b/audio/out/ao_openal.c
@@ -178,18 +178,10 @@ err_out:
}
// close audio device
-static void uninit(struct ao *ao, bool immed)
+static void uninit(struct ao *ao)
{
ALCcontext *ctx = alcGetCurrentContext();
ALCdevice *dev = alcGetContextsDevice(ctx);
- if (!immed) {
- ALint state;
- alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
- while (state == AL_PLAYING) {
- mp_sleep_us(10000);
- alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
- }
- }
reset(ao);
alcMakeContextCurrent(NULL);
alcDestroyContext(ctx);
@@ -197,6 +189,16 @@ static void uninit(struct ao *ao, bool immed)
ao_data = NULL;
}
+static void drain(struct ao *ao)
+{
+ ALint state;
+ alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
+ while (state == AL_PLAYING) {
+ mp_sleep_us(10000);
+ alGetSourcei(sources[0], AL_SOURCE_STATE, &state);
+ }
+}
+
static void unqueue_buffers(void)
{
ALint p;
@@ -298,6 +300,7 @@ const struct ao_driver audio_out_openal = {
.pause = audio_pause,
.resume = audio_resume,
.reset = reset,
+ .drain = drain,
.priv_size = sizeof(struct priv),
.options = (const struct m_option[]) {
OPT_STRING_VALIDATE("device", cfg_device, 0, validate_device_opt),