在ios中获取当前的自动对焦系统时崩溃

时间:2015-01-05 02:39:28

标签: ios ios8 avfoundation iphone-6

从iphone 6介绍中有两种类型的焦点检测, 1.对比度检测 2.相位检测

来自iphone 6.6+,它使用相位检测。

我正在尝试获取当前的焦点系统

self.format = [[AVCaptureDeviceFormat alloc] init];
[self.currentDevice setActiveFormat:self.format];

AVCaptureAutoFocusSystem currentSystem = [self.format autoFocusSystem];
if (currentSystem == AVCaptureAutoFocusSystemPhaseDetection)
{
     [self.currentDevice addObserver:self forKeyPath:@"lensPosition"    options:NSKeyValueObservingOptionNew context:nil];
}
else if(currentSystem == AVCaptureAutoFocusSystemContrastDetection)
{
  [self.currentDevice addObserver:self forKeyPath:@"adjustingFocus" options:NSKeyValueObservingOptionNew context:nil];
}
else{
    NSLog(@"No observers added");
}

但现在崩溃在以下一行

AVCaptureAutoFocusSystem currentSystem = [self.format autoFocusSystem];

我无法找到崩溃的正确描述。

1 个答案:

答案 0 :(得分:1)

您正在创建一些“AVCaptureDeviceFormat”,但默认情况下并未实际设置任何内容。它只是无法使用的垃圾(这就是你遇到崩溃的原因)。

每个捕获设备都有一种或两种可以使用的格式。

你可以通过以下方式看到它们:

for (AVCaptureDeviceFormat *format in [self.currentDevice formats]) {
       CFStringRef formatName = CMFormatDescriptionGetExtension([format formatDescription], kCMFormatDescriptionExtension_FormatName);
       NSLog(@"format name is %@", (NSString *)formatName);
}

> ,然后设置[self.currentDevice setActiveFormat:self.format]“。

WWDC 2013会议“Camera Capture中的新功能”视频提供了有关如何执行此操作的更多信息。