3

我试图通过改变所提到的兴趣点来改变焦点。

该函数始终返回 YES,当我使用 getter 读取新的兴趣点时,它已更改但 isFocusAdjusting = NO

供参考:

 focusMode: AVCaptureFocusModeContinuousAutoFocus

 newFocusPointOfInterest: Normalized CGPoint

焦点似乎锁定在 (0.5f, 0.5f) 或基本上是 AutoFocus

此代码适用于除 iPhone 6 和 iPhone 6+ 之外的所有设备。有什么我做错了吗?是否有任何 API 调用更改?

请帮忙

- (BOOL)changeDeviceFocusPointOfInterest:(CGPoint)newFocusPointOfInterest
                               focusMode:(AVCaptureFocusMode)focusMode
{
    NSError *error;
    BOOL ret = NO;
    
    if([device lockForConfiguration:&error] )
    {
        if ([device isFocusModeSupported:focusMode] && [device isFocusPointOfInterestSupported])
        {
            [device setFocusPointOfInterest:newFocusPointOfInterest];
            [device setFocusMode:focusMode];
            
            ret = YES;
        }
        else
        {
            NSLog(@"focus point setting not supported:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
            ret = NO;
        }
        [device unlockForConfiguration];
    }
    else
    {
        NSLog(@"cant lock hardware settings for changing focus point:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
        ret = NO;
    }
    return ret;
}

**编辑:附加意见:**

我检查了 Apple AVCam 和 AVCamManual 提供的示例应用程序 - 点击以聚焦适用于 AVCam 但不是 AVCamManual相同的设备 我尝试在示例工作区中删除与手动控制相关的代码,但它没有产生任何结果。

  • 键值观察表明 lensPosition 或 focusAdjusting 属性没有变化

  • 我只发现一个关于这个问题的论坛帖子,但建议的解决方法似乎都没有工作https://devforums.apple.com/message/1073042#1073042

  • 我尝试将焦点设置为自定义值、极端值,然后将模式设置为具有所需 focusPointOfInterest 的 ContinousAuto。这会触发焦点更改,但不会集中在所需的兴趣点

4

1 回答 1

1

这与其说是一种解决方法,不如说是一种解决方法。

从观察来看,当处于 AVCaptureFocusModeAutoFocus 模式时,焦点会触发扫描并聚焦在所需的兴趣点上,然后锁定焦点(AVCaptureFocusModeLocked)。

如果您将模式更改为 AVCaptureFocusModeContinuousAutoFocus,而不更改兴趣点,相机将执行全帧对焦,因此兴趣点将变得无用。(根据测试确定)

为了模仿连续的自动对焦行为,我使用 AVCaptureDeviceSubjectAreaDidChangeNotification 通过将对焦模式更改为 AVCaptureFocusModeAutoFocus 来手动监控它。

但是,这不如 AVCaptureFocusModeContinuousAutoFocus 快,我观察到连续通知之间的时间间隔约为 2-3 秒。

如果有人找到更好的解决方案,请在此处分享。

注意:Apple 的默认相机也有类似的行为。不同之处在于,当相机在 iPhone 的默认相机应用程序中移动时,焦点设置为 AVCaptureFocusModeContinuousAutoFocus,以 (0.5, 0.5) 作为关注焦点。

于 2015-04-26T06:35:00.650 回答