diff options
-rw-r--r-- | audio/out/ao_alsa.c | 2 | ||||
-rw-r--r-- | audio/out/ao_dsound.c | 2 | ||||
-rw-r--r-- | audio/out/ao_null.c | 3 | ||||
-rw-r--r-- | audio/out/ao_sndio.c | 3 |
4 files changed, 6 insertions, 4 deletions
diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c index 10580ffbff..6b0c34e320 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -675,7 +675,7 @@ static int get_space(struct ao *ao) unsigned space = snd_pcm_status_get_avail(status); if (space > p->buffersize) // Buffer underrun? space = p->buffersize; - return space; + return space / p->outburst * p->outburst; alsa_error: return 0; diff --git a/audio/out/ao_dsound.c b/audio/out/ao_dsound.c index 126989936e..da1742e077 100644 --- a/audio/out/ao_dsound.c +++ b/audio/out/ao_dsound.c @@ -585,7 +585,7 @@ static int get_space(struct ao *ao) int space = check_free_buffer_size(ao); if (space < p->min_free_space) return 0; - return (space - p->min_free_space) / ao->sstride; + return (space - p->min_free_space) / p->outburst * p->outburst / ao->sstride; } /** diff --git a/audio/out/ao_null.c b/audio/out/ao_null.c index 2c93cc273b..f12cbdede5 100644 --- a/audio/out/ao_null.c +++ b/audio/out/ao_null.c @@ -148,7 +148,8 @@ static int get_space(struct ao *ao) struct priv *priv = ao->priv; drain(ao); - return priv->buffersize - priv->latency - priv->buffered; + int samples = priv->buffersize - priv->latency - priv->buffered; + return samples / priv->outburst * priv->outburst; } static int play(struct ao *ao, void **data, int samples, int flags) diff --git a/audio/out/ao_sndio.c b/audio/out/ao_sndio.c index 457da588a1..c75027dffc 100644 --- a/audio/out/ao_sndio.c +++ b/audio/out/ao_sndio.c @@ -273,7 +273,8 @@ static int get_space(struct ao *ao) ; /* nothing */ sio_revents(p->hdl, p->pfd); - return (p->par.bufsz * p->par.pchan * p->par.bps - p->delay) / ao->sstride; + int samples = (p->par.bufsz * p->par.pchan * p->par.bps - p->delay) / ao->sstride; + return samples / p->par.round * p->par.round; } /* |