从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];
我无法找到崩溃的正确描述。
答案 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中的新功能”视频提供了有关如何执行此操作的更多信息。