diff --git a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegCapture.m b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegCapture.m index b16434a1..ceab8d23 100644 --- a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegCapture.m +++ b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegCapture.m @@ -483,7 +483,6 @@ { self.player.asbd = &_asbd; self.player.pcmPlayer = self.pcmPlayer; - if (self.player.currentlyPlaying) { self.pcmPlayer.name = self.player.currentlyPlaying.shortName; diff --git a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegInput.m b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegInput.m index 70420150..49cf6c27 100644 --- a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegInput.m +++ b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegInput.m @@ -729,13 +729,18 @@ if (_video_codec_ctx) { + avcodec_close(_video_codec_ctx); + avcodec_free_context(&_video_codec_ctx); + } if (_audio_codec_ctx) { avcodec_close(_audio_codec_ctx); + avcodec_free_context(&_audio_codec_ctx); + } diff --git a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegPlayer.m b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegPlayer.m index 8f8e6bff..b6f2bd64 100644 --- a/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegPlayer.m +++ b/CSFFMpegCapturePlugin/CSFFMpegCapturePlugin/CSFFMpegPlayer.m @@ -376,7 +376,7 @@ @autoreleasepool { if (self.paused) { - [self.pcmPlayer pause]; + //[self.pcmPlayer pause]; return; } @@ -740,7 +740,6 @@ -(void)dealloc { - NSLog(@"DEALLOC PLAYER %@", self.currentlyPlaying); if (self.currentlyPlaying) { @@ -749,7 +748,6 @@ for (CSFFMpegInput *item in self.inputQueue) { - NSLog(@"ITEM %@", item); [item closeMedia]; } diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioEngine.m b/CocoaSplit/CAMultiAudio/CAMultiAudioEngine.m index 9d2ecb45..bb41248b 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioEngine.m +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioEngine.m @@ -918,6 +918,9 @@ OSStatus encoderRenderCallback( void *inRefCon, AudioUnitRenderActionFlags *ioAc [self removeObjectFromAudioInputsAtIndex:index]; }); + + [toRemove didRemoveInput]; + } diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioInput.h b/CocoaSplit/CAMultiAudio/CAMultiAudioInput.h index 3d99af95..c5f9c1fd 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioInput.h +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioInput.h @@ -3,7 +3,6 @@ // CocoaSplit // // Created by Zakk on 7/30/17. -// Copyright © 2017 Zakk. All rights reserved. // #import "CAMultiAudioNode.h" @@ -24,6 +23,7 @@ -(void)openMixerWindow:(id)sender; + @end @@ -39,5 +39,6 @@ @property (assign) bool noSettings; @property (assign) bool systemDevice; +-(void)didRemoveInput; @end diff --git a/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m b/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m index 9187dc41..32a93c6a 100644 --- a/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m +++ b/CocoaSplit/CAMultiAudio/CAMultiAudioPCMPlayer.m @@ -78,42 +78,56 @@ void BufferCompletedPlaying(void *userData, ScheduledAudioSlice *bufferList); { @autoreleasepool { - int32_t availBytes; - void *pcmPtr = NULL; - while ((pcmPtr = TPCircularBufferTail(&(self->_completedBuffer), &availBytes))) - { - struct cspcm_buffer_msg *cMsg = pcmPtr; - - CAMultiAudioPCM *pcmObj = (__bridge CAMultiAudioPCM *)(cMsg->pcmObj); - if (cMsg->msgPtr) + int32_t availBytes; + void *pcmPtr = NULL; + while ((pcmPtr = TPCircularBufferTail(&(self->_completedBuffer), &availBytes))) { - free(cMsg->msgPtr); + struct cspcm_buffer_msg *cMsg = pcmPtr; + + CAMultiAudioPCM *pcmObj = (__bridge CAMultiAudioPCM *)(cMsg->pcmObj); + if (cMsg->msgPtr) + { + free(cMsg->msgPtr); + } + + if (self.completedBlock) + { + self.completedBlock(pcmObj); + } + + if (self.save_buffer) + { + [self.pauseBuffer addObject:pcmObj]; + } else { + [self releasePCM:pcmObj]; + } + TPCircularBufferConsume(&(self->_completedBuffer), sizeof(struct cspcm_buffer_msg)); + } - - if (self.completedBlock) - { - self.completedBlock(pcmObj); - } - - if (self.save_buffer) - { - [self.pauseBuffer addObject:pcmObj]; - } else { - [self releasePCM:pcmObj]; - } - TPCircularBufferConsume(&(self->_completedBuffer), sizeof(struct cspcm_buffer_msg)); - - } } - if (self->_exitPending) + @synchronized(self) { - return; + if (self->_exitPending) + { + return; + } } usleep(20); } }); } + + +-(void)didRemoveInput +{ + @synchronized(self) + { + _exitPending = YES; + } +} + + -(bool)playPcmBuffer:(CAMultiAudioPCM *)pcmBuffer { @@ -367,12 +381,16 @@ void BufferCompletedPlaying(void *userData, ScheduledAudioSlice *bufferList); -(void)dealloc { + + NSLog(@"DEALLOC PCM PLAYER"); [self flush]; _pendingBuffers = nil; if (_inputFormat) { free(_inputFormat); } + + TPCircularBufferCleanup(&_completedBuffer); }