【发布时间】:2014-02-16 08:56:53
【问题描述】:
只有某些类型的 applicationDidBecomeActive 和 DidEnterBackground 与 iOS OpenGL/GPUImage 预览屏幕发生崩溃。具体来说,只有在按下/释放电源按钮以使应用程序后台运行时才会发生这种情况。如果单击主页按钮并将应用程序发送到后台并重新激活,则不会发生这种情况。我们没有在后台调用任何 OpenGL [已阅读 Apple DO's 和 DONT's] - 应用程序在 BG 中没有做任何事情,并尝试在 DidResign 本身中停止。
只有当设备传感器有一个新的视频捕获帧时才会进行 GPU 调用,我认为 iOS 在进入后台时会暂停该帧。所以下面的堆栈跟踪只能在应用程序重新启动或正式暂停之前触发???
有没有人知道当应用程序进入 bg 并重新激活时需要遵循的任何 Apple 或其他 iOS/OpenGL 分配/发布协议?更重要的是,是否有一种干净的方法来清除/释放所有 OpenGL/GPUImage 帧缓冲区/纹理/上下文等并重新初始化所有内容?
堆栈跟踪的一部分如下所示,它与 EXC_BAD_ACCESS 一起崩溃:
#6 0x003635fe in -[GPUImageContext presentBufferForDisplay] at
#7 0x0035c416 in -[GPUImageView presentFramebuffer] at
#8 0x0035cb4a in __44-[GPUImageView newFrameReadyAtTime:atIndex:]_block_invoke at
#9 0x00363d9e in runSynchronouslyOnVideoProcessingQueue at
#10 0x0035c89e in -[GPUImageView newFrameReadyAtTime:atIndex:] at
#11 0x00357a12 in -[GPUImageFilter informTargetsAboutNewFrameAtTime:] at
【问题讨论】:
-
升级到更新的 gpuimage,因为这些东西已经改变了 sinde 0.1.10 (12) ...或者你可以修补它..如果你需要快速修复,不要让运行 [self processVideoSampleBuffer:样本缓冲区];在应用程序处于后台时在 GPUImageVideoCamera.m 中,处理队列是异步的,因此停止它们可能不是即时的,新版本的 GPUImage 再次帮助解决这些问题