gpt4 book ai didi

ios - CIContext、iOS 9 和内存问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:49 24 4
gpt4 key购买 nike

所以我最近将 iOS 更新到了 9.0.2。我一直在使用 RosyWriter,Apple 的示例使用 CIFilter 和 CIContext 捕获和过滤视频帧。它在 iOS 7 和 8 中运行良好。这一切都在 iOS 9 中崩溃了。

现在 RosyWriter 和我的应用程序中的内存报告如下所示: enter image description here

最终应用程序崩溃了。

我调用 [_ciContext render: toCVPixelBuffer: bounds: colorSpace: ];imageWithCVPixelBuffer。当我调用这两个方法时,看起来 CIContext 有内部内存泄漏。

在花了大约 4 天后,我发现如果我每次要渲染缓冲区并在之后释放它时都创建一个新的 CIContext 实例 - 这会降低内存。但这不是解决方案,因为这样做成本太高。

还有人遇到过这个问题吗?有没有解决的办法?

谢谢。

最佳答案

我可以确认这个内存泄漏在 iOS 9.2 上仍然存在。 (我还在 Apple Developer Forum 上发帖。)

我在 iOS 9.2 上遇到了同样的内存泄漏。我测试过使用 MetalKit 和 MLKDevice 删除 EAGLContext。我已经使用不同的 CIContext 方法进行了测试,例如 drawImage、createCGImage 和 render,但似乎没有任何效果。

很明显,这是 iOS 9 的一个错误。从 Apple 下载示例应用程序(见下文),然后在装有 iOS 8.4 的设备上运行相同的项目,然后在设备上运行使用 iOS 9.2 并注意 Xcode 中的内存量表。

下载 https://developer.apple.com/library/ios/samplecode/AVBasicVideoOutput/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013109

将此添加到 APLEAGLView.h:20

 @property (strong, nonatomic) CIContext* ciContext;

用这个替换 APLEAGLView.m:118

[EAGLContext setCurrentContext:_context];
_ciContext = [CIContext contextWithEAGLContext:_context];

最后用这个替换 APLEAGLView.m:341-343

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);  

@autoreleasepool
{
CIImage* sourceImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:kCIInputImageKey, sourceImage, nil];
CIImage* filteredImage = filter.outputImage;

[_ciContext render:filteredImage toCVPixelBuffer:pixelBuffer];
}

glBindRenderbuffer(GL_RENDERBUFFER, _colorBufferHandle);

关于ios - CIContext、iOS 9 和内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com