From 2716ca41b06004b8c7b70c54933fad3db521ecf6 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Mon, 20 Jun 2022 22:26:35 -0700 Subject: [PATCH] [Core Audio Output] Refine output function a bit Refine the output function a bit, including adding some minor safety checks, in case the caller requests zero samples, or requests a format with zero channels. Signed-off-by: Christopher Snowhill --- Audio/Output/OutputCoreAudio.m | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Audio/Output/OutputCoreAudio.m b/Audio/Output/OutputCoreAudio.m index 3b2a0f19e..04e2806d0 100644 --- a/Audio/Output/OutputCoreAudio.m +++ b/Audio/Output/OutputCoreAudio.m @@ -679,12 +679,16 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons _au.outputProvider = ^AUAudioUnitStatus(AudioUnitRenderActionFlags *_Nonnull actionFlags, const AudioTimeStamp *_Nonnull timestamp, AUAudioFrameCount frameCount, NSInteger inputBusNumber, AudioBufferList *_Nonnull inputData) { // This expects multiple buffers, so: + if(!frameCount) return 0; + int i; const int channels = format->mChannelsPerFrame; + if(!channels) return 0; + const int channelsminusone = channels - 1; - float buffers[frameCount * format->mChannelsPerFrame]; + float buffers[frameCount * channels]; uint8_t bufferlistbuffer[sizeof(AudioBufferList) + sizeof(AudioBuffer) * channelsminusone]; - AudioBufferList *ioData = (AudioBufferList *)(bufferlistbuffer); + AudioBufferList *ioData = (AudioBufferList *)(&bufferlistbuffer[0]); ioData->mNumberBuffers = channels;