aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
Diffstat (limited to 'Alc')
-rw-r--r--Alc/backends/pulseaudio.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c
index 96794e20..be785707 100644
--- a/Alc/backends/pulseaudio.c
+++ b/Alc/backends/pulseaudio.c
@@ -833,6 +833,9 @@ static int ALCpulsePlayback_mixerProc(void *ptr)
while(!ATOMIC_LOAD(&self->killNow, almemory_order_acquire) &&
ATOMIC_LOAD(&device->Connected, almemory_order_acquire))
{
+ void *buf;
+ int ret;
+
len = pa_stream_writable_size(self->stream);
if(len < 0)
{
@@ -863,33 +866,16 @@ static int ALCpulsePlayback_mixerProc(void *ptr)
pa_threaded_mainloop_wait(self->loop);
continue;
}
- len -= len%self->attr.minreq;
- while(len > 0)
- {
- size_t newlen = len;
- int ret;
- void *buf;
- pa_free_cb_t free_func = NULL;
+ len -= len%self->attr.minreq;
+ len -= len%frame_size;
- if(pa_stream_begin_write(self->stream, &buf, &newlen) < 0)
- {
- buf = pa_xmalloc(newlen);
- free_func = pa_xfree;
- }
+ buf = pa_xmalloc(len);
- newlen /= frame_size;
- aluMixData(device, buf, newlen);
+ aluMixData(device, buf, len/frame_size);
- newlen *= frame_size;
- ret = pa_stream_write(self->stream, buf, newlen, free_func, 0, PA_SEEK_RELATIVE);
- if(ret != PA_OK)
- {
- ERR("Failed to write to stream: %d, %s\n", ret, pa_strerror(ret));
- break;
- }
- len -= newlen;
- }
+ ret = pa_stream_write(self->stream, buf, len, pa_xfree, 0, PA_SEEK_RELATIVE);
+ if(ret != PA_OK) ERR("Failed to write to stream: %d, %s\n", ret, pa_strerror(ret));
}
pa_threaded_mainloop_unlock(self->loop);