From a1414f249fc6f4f8efe7b48b3e1df4ac2ff015d4 Mon Sep 17 00:00:00 2001 From: Zakk Date: Sun, 1 Mar 2020 23:16:27 -0500 Subject: [PATCH] Downmixer no longer does audio unit uniit/reinit on input format change; base node class handles that now. When a PCMPlayer input is disconnected, stop the pending buffer timer from firing and drain the pending queue. --- CocoaSplit/CAMultiAudio/CAMultiAudioDownmixer.m | 4 ---- CocoaSplit/CAMultiAudio/CAMultiAudioNode.m | 4 ++-- CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioDownmixer.m b/CocoaSplit/CAMultiAudio/CAMultiAudioDownmixer.m index 8c63c8a9..a6250494 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioDownmixer.m +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioDownmixer.m @@ -193,11 +193,7 @@ { bool retVal; NSDictionary *saveData = [self saveDataForPrivateRestore]; - AudioUnitUninitialize(self.audioUnit); retVal = [super setInputStreamFormat:format bus:bus]; - [self willInitializeNode]; - AudioUnitInitialize(self.audioUnit); - [self didInitializeNode]; [self restoreDataFromPrivateRestore:saveData]; return retVal; } diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioNode.m b/CocoaSplit/CAMultiAudio/CAMultiAudioNode.m index 377d745e..5520fda6 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioNode.m +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioNode.m @@ -304,7 +304,7 @@ UInt32 inNumberFrames, -(bool)setInputStreamFormat:(AVAudioFormat *)format bus:(UInt32)bus { - AudioUnitUninitialize(self.audioUnit); + //AudioUnitUninitialize(self.audioUnit); OSStatus err = AudioUnitSetProperty(self.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, bus, format.streamDescription, sizeof(AudioStreamBasicDescription)); @@ -324,7 +324,7 @@ UInt32 inNumberFrames, -(bool)setOutputStreamFormat:(AVAudioFormat *)format bus:(UInt32)bus { - AudioUnitUninitialize(self.audioUnit); + //AudioUnitUninitialize(self.audioUnit); OSStatus err = AudioUnitSetProperty(self.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, bus, format.streamDescription, sizeof(AudioStreamBasicDescription)); diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m b/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m index b8defafe..b47c01d8 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m @@ -207,6 +207,21 @@ [self.pauseBuffer removeAllObjects]; } +-(void)drainPendingBuffers +{ + @synchronized (self) { + [_pendingBuffers removeAllObjects]; + } +} +-(void)didRemoveInput +{ + if (_pendingTimer) + { + dispatch_source_cancel(_pendingTimer); + } + [self drainPendingBuffers]; +} + -(void)dealloc {