summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_oss.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/out/ao_oss.c')
-rw-r--r--audio/out/ao_oss.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c
index a1bf0feefc..ca7539b590 100644
--- a/audio/out/ao_oss.c
+++ b/audio/out/ao_oss.c
@@ -427,24 +427,28 @@ ac3_retry:
}
// close audio device
-static void uninit(struct ao *ao, bool immed)
+static void uninit(struct ao *ao)
{
struct priv *p = ao->priv;
if (p->audio_fd == -1)
return;
-#ifdef SNDCTL_DSP_SYNC
- // to get the buffer played
- if (!immed)
- ioctl(p->audio_fd, SNDCTL_DSP_SYNC, NULL);
-#endif
#ifdef SNDCTL_DSP_RESET
- if (immed)
- ioctl(p->audio_fd, SNDCTL_DSP_RESET, NULL);
+ ioctl(p->audio_fd, SNDCTL_DSP_RESET, NULL);
#endif
close(p->audio_fd);
p->audio_fd = -1;
}
+static void drain(struct ao *ao)
+{
+#ifdef SNDCTL_DSP_SYNC
+ struct priv *p = ao->priv;
+ // to get the buffer played
+ if (p->audio_fd != -1)
+ ioctl(p->audio_fd, SNDCTL_DSP_SYNC, NULL);
+#endif
+}
+
#ifndef SNDCTL_DSP_RESET
static void close_device(struct ao *ao)
{
@@ -601,6 +605,7 @@ const struct ao_driver audio_out_oss = {
.pause = audio_pause,
.resume = audio_resume,
.reset = reset,
+ .drain = drain,
.priv_size = sizeof(struct priv),
.priv_defaults = &(const struct priv) {
.audio_fd = -1,