CMSampleBufferRef memory leak

So I had a problem converting some audio. When converting, I get a huge memory leak, and it comes from these lines of code.

dispatch_queue_t mediaInputQueue = dispatch_queue_create("mediaInputQueue", NULL); [assetWriterInput requestMediaDataWhenReadyOnQueue:mediaInputQueue usingBlock: ^ { while (assetWriterInput.readyForMoreMediaData) { CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer]; if (nextBuffer) { [assetWriterInput appendSampleBuffer: nextBuffer]; nextBuffer = NULL; } else { // done! [assetWriterInput markAsFinished]; [assetWriter finishWriting]; [assetReader cancelReading]; NSDictionary *outputFileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:exportPath error:nil]; NSNumber *doneFileSize = [NSNumber numberWithLong:[outputFileAttributes fileSize]]; [self performSelectorOnMainThread:@selector(updateCompletedSizeLabel:) withObject:doneFileSize waitUntilDone:NO]; // release a lot of stuff [assetReader release]; [assetReaderOutput release]; [assetWriter release]; [assetWriterInput release]; [exportPath release]; break; } } }]; 

The line that appears to be causing the leak: CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];

I got lost on this, any help would be greatly appreciated.

ANSWER: Fixed. Just add these lines at the end of the if / else statement.

 CMSampleBufferInvalidate(nextBuffer); CFRelease(nextBuffer); nextBuffer = nil; // NULL? 
+7
source share
1 answer

ANSWER: Fixed. Just add these lines at the end of the if / else statement.

 CMSampleBufferInvalidate(nextBuffer); CFRelease(nextBuffer); nextBuffer = NULL; 
+12
source

All Articles