Open
Description
Hi,
I am using this project in my app to record videos and save them to the camera roll. However, I am facing an issue. When the app moves to the background, it crashes and gives "gpus_ReturnNotPermittedKillClient" error which I think comes due to OpenGL calls. I searched on the internet for a solution and found a solution here: http://www.cocos2d-iphone.org/forum/topic/30419
I am unable to understand how to implement that solution since GPU Image project doesn't have an app delegate class. Can you please help me out in this?
Thanks
Activity
BradLarson commentedon Jun 17, 2012
Any use of OpenGL ES when the application is in the background will cause the application to be killed. What are you trying to do in GPUImage when your application is going to the background and getting killed?
iamcam commentedon Aug 3, 2012
I noticed this happens when the camera preview is active when the home or lock buttons are pressed.
ordinary commentedon Oct 9, 2012
Can you solve it ? I meet it too, can you help me?
cgdi commentedon Oct 11, 2012
I have this problem too. I tried to register for a notification to run "stopCameraCapture" when applicationWillResignActive gets called in the appDelegate, but the crash still occurs. Stopping the camera via a button action before moving the app into the background works though, however it requires the user to stop the camera himself.
update*
it doesn't crash anymore when I run "pauseCameraCapture" when applicationWillResignActive gets called. Similarly, run "resumeCameraCapture" when your app enters foreground to use the camera again.
joncampbell commentedon Oct 23, 2012
I'm having the same crash issue. Pausing the capture when we applicationWillResignActive works if the user pressed the home button, but not the power button. It also doesn't crash if I place a breakpoint on applicationWillResignActive.
rizzow commentedon Oct 24, 2012
Calling [pauseCameraCapture] seems to resolve the issue for me.
K4stor commentedon Nov 6, 2012
Well the problem is that if I call stopCaptureStream I get an exception.
The problem is that the willResign method ends BEFORE the stream has stoped,
this also may cause the GL-thread to get a frame and process it...
thats why its all good when u use the debugger.
My fix:
U need to add an observer for AVCaptureSessionDidStopRunningNotification.
Instead of calling pause, we stop the capture
and wait in willResign until the onStop event has been fired.
then we call glfinish()!
Thats what the apple docu says. It wait until every GL thing is done so far
smth like this
....
I hope this helps
iamcam commentedon Nov 7, 2012
@j455 Interesting. That seems like a sound idea. I take it that this seems to fix the problem reliably, or are you still evaluating?
K4stor commentedon Nov 7, 2012
Tomorrow I will evaluate it depply...but atm I must say it fixes it for me...
Pls note that I kill the stillcam as well.
I only keep my texutres, that what the apple docu surgests
If it works... one can simply add a method into the Framework to wait for that thing to happend
From: Cameron Perry
Sent: Wednesday, November 07, 2012 5:51 PM
To: BradLarson/GPUImage
Cc: J455
Subject: Re: [GPUImage] Crash when app goes in background. (#197)
@j455 Interesting. That seems like a sound idea. I take it that this seems to fix the problem reliably, or are you still evaluating?
—
Reply to this email directly or view it on GitHub.
K4stor commentedon Nov 9, 2012
Nvm... doenst work neither
The only thing that really makes this "stable" is to add these two lines at the end of the will resign
sleep(2);
glFinish();
I think the problem is that
[videoOutput setSampleBufferDelegate:nil queue:dispatch_get_main_queue()];
[audioOutput setSampleBufferDelegate:nil queue:dispatch_get_main_queue()];
Use the main queue but it gets no time to complete during the resign method or smth...
fact is if I dont add the sleep
the destructor seems to be executed AFTER the will resign method was left.
And that (ofc) leads to an error...
As I just started with iOS I am not cool enough to fix that :(
but one of you nerdy hackers sure will be:D
bengotow commentedon Aug 1, 2013
Hi folks, just to summarize the findings here:
K4stor commentedon Aug 1, 2013
Hi
Ye that sounds reasonable. one more thing is, when u pull down the status thing. The OS overall thing that shows the weather and latest feeds, Does your fix do the trick for that too ?
-Cheers,
Kastor
kolyuchiy commentedon Nov 13, 2013
Why "resign active" and not "did enter background"?
jessecurry commentedon Apr 4, 2014
didEnterBackground
would be called after the app is in the background,willResignActive
is called while the app is in the foreground, but will enter the background.emmasteimann commentedon May 29, 2014
I know it's been a couple years since this is was first filed, but I'm still experiencing this exact problem.
I followed the advice and I'm running the following:
Anyone have any thoughts?
henryl commentedon Jun 26, 2014
I am having the same issue as emmasteimann. This is happening for me on GPUImage 0.1.4 even with the proposed fix.
simpleshadow commentedon Jul 27, 2014
I recommend adding an observer for
UIApplicationDidEnterBackgroundNotification
as this allows the camera to still operate when double tapping the home button so the smaller app preview still shows the camera feed then pauses when actually put in the background by swapping to a different app.henryl commentedon Jul 27, 2014
I was able to solve this:
emmasteimann commentedon Aug 26, 2014
Thanks @henryl that for sure fixed it. Much appreciated! :-)
crossle commentedon Apr 21, 2017
https://developer.apple.com/library/content/qa/qa1766/_index.html
MrHu4127 commentedon Jul 17, 2019
I do like this,but it also crash sometimes when app enterbackground in older iOS devices. self.movie is a instance of GPUImageMovie.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActive) name:UIApplicationWillResignActiveNotification object:nil];
[self.movie cancelProcessing];
}