From 5c0a510848a8f2e3b2060a6624e1686b08925fb3 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Tue, 18 Jan 2022 16:43:58 -0800 Subject: [PATCH] Core Audio output: Add various minor changes --- Audio/Output/OutputCoreAudio.h | 1 + Audio/Output/OutputCoreAudio.m | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Audio/Output/OutputCoreAudio.h b/Audio/Output/OutputCoreAudio.h index 165c45d8d..c6e6603fd 100644 --- a/Audio/Output/OutputCoreAudio.h +++ b/Audio/Output/OutputCoreAudio.h @@ -27,6 +27,7 @@ Semaphore * writeSemaphore; Semaphore * readSemaphore; + BOOL stopInvoked; BOOL running; BOOL stopping; BOOL stopped; diff --git a/Audio/Output/OutputCoreAudio.m b/Audio/Output/OutputCoreAudio.m index e072148a4..a33e306ee 100644 --- a/Audio/Output/OutputCoreAudio.m +++ b/Audio/Output/OutputCoreAudio.m @@ -20,9 +20,9 @@ static void fillBuffers(AudioBufferList *ioData, float * inbuffer, size_t count, const size_t channels = ioData->mNumberBuffers; for (int i = 0; i < channels; ++i) { - size_t maxCount = (ioData->mBuffers[i].mDataByteSize / sizeof(float)) - offset; + const size_t maxCount = (ioData->mBuffers[i].mDataByteSize / sizeof(float)) - offset; float * output = ((float *)ioData->mBuffers[i].mData) + offset; - float * input = inbuffer + i; + const float * input = inbuffer + i; for (size_t j = 0, k = (count > maxCount) ? maxCount : count; j < k; ++j) { *output = *input; @@ -276,7 +276,8 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const [writeSemaphore timedWait:5000]; } stopped = YES; - [self stop]; + if (!stopInvoked) + [self stop]; } - (OSStatus)setOutputDeviceByID:(AudioDeviceID)deviceID @@ -532,6 +533,7 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const if (_au) [self stop]; + stopInvoked = NO; running = NO; stopping = NO; stopped = NO; @@ -620,8 +622,8 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const for (i = 0; i < channels; ++i) { float * outBuffer = ((float*)inputData->mBuffers[0].mData) + i; - float * inBuffer = ((float*)ioData->mBuffers[i].mData); - int frameCount = ioData->mBuffers[i].mDataByteSize / sizeof(float); + const float * inBuffer = ((float*)ioData->mBuffers[i].mData); + const int frameCount = ioData->mBuffers[i].mDataByteSize / sizeof(float); for (int j = 0; j < frameCount; ++j) { *outBuffer = *inBuffer; inBuffer++; @@ -692,6 +694,7 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const - (void)stop { + stopInvoked = YES; stopping = YES; paused = NO; [writeSemaphore signal];