From 6cfe0ea77cbac39ebb400510bc4da74dfb92c4c6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 14 Jan 2020 20:20:54 +0100 Subject: [PATCH] (Audio) Update --- audio/drivers/coreaudio.c | 75 ++++++++++++-------------------------- audio/drivers/coreaudio3.m | 39 ++++++-------------- 2 files changed, 36 insertions(+), 78 deletions(-) diff --git a/audio/drivers/coreaudio.c b/audio/drivers/coreaudio.c index 735089a226..0a8ca82971 100644 --- a/audio/drivers/coreaudio.c +++ b/audio/drivers/coreaudio.c @@ -52,9 +52,7 @@ typedef struct coreaudio size_t buffer_size; } coreaudio_t; -#if TARGET_OS_IOS -static bool g_interrupted = false; -#endif +static bool g_interrupted; static void coreaudio_free(void *data) { @@ -245,7 +243,7 @@ static void *coreaudio_init(const char *device, #else comp = AudioComponentFindNext(NULL, &desc); #endif - if (!comp) + if (comp == NULL) goto error; #if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) @@ -346,61 +344,36 @@ static ssize_t coreaudio_write(void *data, const void *buf_, size_t size) const uint8_t *buf = (const uint8_t*)buf_; size_t written = 0; - if (dev->nonblock) + while (!g_interrupted && size > 0) { - bool cond = size > 0; -#if TARGET_OS_IOS - cond = cond && !g_interrupted; -#endif - if (cond) + size_t write_avail; + + slock_lock(dev->lock); + + write_avail = fifo_write_avail(dev->buffer); + if (write_avail > size) + write_avail = size; + + fifo_write(dev->buffer, buf, write_avail); + buf += write_avail; + written += write_avail; + size -= write_avail; + + if (dev->nonblock) { - size_t write_avail; - - slock_lock(dev->lock); - - write_avail = fifo_write_avail(dev->buffer); - if (write_avail > size) - write_avail = size; - - fifo_write(dev->buffer, buf, write_avail); - buf += write_avail; - written += write_avail; - size -= write_avail; - slock_unlock(dev->lock); + break; } - } - else - { -#if TARGET_OS_IOS - while (!g_interrupted && size > 0) -#else - while (size > 0) -#endif - { - size_t write_avail; - - slock_lock(dev->lock); - - write_avail = fifo_write_avail(dev->buffer); - if (write_avail > size) - write_avail = size; - - fifo_write(dev->buffer, buf, write_avail); - buf += write_avail; - written += write_avail; - size -= write_avail; #if TARGET_OS_IPHONE - if (write_avail == 0 && !scond_wait_timeout( - dev->cond, dev->lock, 3000000)) - g_interrupted = true; + if (write_avail == 0 && !scond_wait_timeout( + dev->cond, dev->lock, 3000000)) + g_interrupted = true; #else - if (write_avail == 0) - scond_wait(dev->cond, dev->lock); + if (write_avail == 0) + scond_wait(dev->cond, dev->lock); #endif - slock_unlock(dev->lock); - } + slock_unlock(dev->lock); } return written; diff --git a/audio/drivers/coreaudio3.m b/audio/drivers/coreaudio3.m index 511338f8d4..0849233353 100644 --- a/audio/drivers/coreaudio3.m +++ b/audio/drivers/coreaudio3.m @@ -260,37 +260,22 @@ static bool g_interrupted; - (ssize_t)writeFloat:(const float *)data samples:(size_t)samples { size_t written = 0; - - if (_nonBlock) + while (!g_interrupted && samples > 0) { - if (!g_interrupted && samples > 0) - { - size_t write_avail = rb_avail(&_rb); - if (write_avail > samples) - write_avail = samples; + size_t write_avail = rb_avail(&_rb); + if (write_avail > samples) + write_avail = samples; - rb_write_data(&_rb, data, write_avail); - data += write_avail; - written += write_avail; - samples -= write_avail; - } - } - else - { - while (!g_interrupted && samples > 0) - { - size_t write_avail = rb_avail(&_rb); - if (write_avail > samples) - write_avail = samples; + rb_write_data(&_rb, data, write_avail); + data += write_avail; + written += write_avail; + samples -= write_avail; - rb_write_data(&_rb, data, write_avail); - data += write_avail; - written += write_avail; - samples -= write_avail; + if (_nonBlock) + break; - if (write_avail == 0) - dispatch_semaphore_wait(_sema, DISPATCH_TIME_FOREVER); - } + if (write_avail == 0) + dispatch_semaphore_wait(_sema, DISPATCH_TIME_FOREVER); } return written;