【发布时间】:2015-08-08 12:41:14
【问题描述】:
早上好,
我在尝试编写的视频处理软件中遇到内存管理问题。 (视频捕获+(几乎)实时处理+显示+录制)。
以下代码是 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);
【问题讨论】:
标签: objective-c core-graphics core-image