GPUImage stillCamera崩溃iPhone 4s

时间:2015-10-19 13:41:40

标签: ios iphone gpuimage

您好我正在使用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的内存使用或任何周围的工作将非常感激。

(如果我不清楚英语不是我的母语,我道歉)

0 个答案:

没有答案