您好我正在使用GPUImage制作相机,我只在iPhone 4s上发生了一个奇怪的错误:每当我尝试使用capturePhotoAsImageProcessedUpToFilter捕获图像时:它会在没有任何错误的情况下崩溃应用程序。 在调用之前和之后使用sleep或animateWithDuration使其在5个中有1个尝试或多或少。
使用像UseNextFrameForImageCapture和imageFromCurrentFrameBuffer这样的GPUImage过滤器功能,应用程序不会再崩溃,但我不会每次都获得该图像。
已经过了几天,我很困难,所以欢迎任何答案。
编辑:
更准确地说,我正在iPhone 4,4和5上测试我的代码。 在4和5上,此代码没有问题:
- (void) takePicture
{
if (self.occupied)
return;
self.occupied = true;
self.focus.isFocusing = true;
[self setPreviewOrientation];
[[GPUImageContext sharedFramebufferCache] purgeAllUnassignedFramebuffers];
@autoreleasepool {
[stillCamera capturePhotoAsJPEGProcessedUpToFilter:filter.currentFilter withCompletionHandler:^(NSData *processedImage, NSError *error) {
UIImage *img = [[UIImage alloc] initWithData:processedImage];
[self.delegate finishedCapturingImage:img];
self.occupied = false;
}];
}
}
但是在4s应用程序崩溃,我设法将它缩小到GPUImageStillCamera.m中的这个特定代码块:
AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position];
if ( (currentCameraPosition != AVCaptureDevicePositionFront) || (![GPUImageContext supportsFastTextureUpload]) || !requiresFrontCameraTextureCacheCorruptionWorkaround)
{
dispatch_semaphore_signal(frameRenderingSemaphore);
[finalFilterInChain useNextFrameForImageCapture];
[self captureOutput:photoOutput didOutputSampleBuffer:imageSampleBuffer fromConnection:[[photoOutput connections] objectAtIndex:0]];
dispatch_semaphore_wait(frameRenderingSemaphore, DISPATCH_TIME_FOREVER);
}
正如我所说使用imageFromCurrentFrameBuffer不会使应用程序崩溃并且每次都在4s(但不是4和5)上获取图像,但它不是我想要获得的全分辨率图像。
崩溃日志显示我几乎使用了设备的所有内存。 如果有任何人有最轻微的线索来优化GPUImage的内存使用或任何周围的工作将非常感激。
(如果我不清楚英语不是我的母语,我道歉)