我在我试图写的视频处理软件中遇到内存管理问题。 (视频捕捉+(几乎)实时处理+显示+记录)。
以下代码是AVCaptureVideoDataOutputSampleBufferDelegate的“..didOutputSampleBuffer ..”函数的一部分。
capturePreviewLayer是CALayer。 ctx是我重复使用的CIContext。 outImage是一个vImage_Buffer。
随着评论部分不断发表评论,内存使用情况稳定且可以接受,但如果我取消注释,内存不会停止增加。请注意,如果我留下过滤操作注释,并且只保留CIImage的创建和转换回CGImageRef,问题依然存在。 (我的意思是:我不认为这与过滤器本身有关)。
如果我运行XCode的分析,它会指出潜在的内存泄漏,如果这部分未注释,但没有评论。
有没有人有想法解释和解决这个问题? 非常感谢!
注意:我不喜欢使用AVCaptureVideoPreviewLayer及其过滤器属性。
CGImageRef convertedImage = vImageCreateCGImageFromBuffer(&outImage, &outputFormat, NULL, NULL, 0, &err);
//CIImage * img = [CIImage imageWithCGImage:convertedImage];
////[acc setValue:img forKey:@"inputImage"];
////img = [acc valueForKey:@"outputImage"];
//convertedImage = [self.ctx createCGImage:img fromRect:img.extent];
dispatch_sync(dispatch_get_main_queue(), ^{
self.capturePreviewLayer.contents = (__bridge id)(convertedImage);
});
CGImageRelease(convertedImage);
free(outImage.data);
实际上,我现在可以看到记忆在一段时间内增加和减少,全局保持在可接受的水平。谢谢你的帮助 ! – zan