我如何同步AVCaptureDevice setFocusModeLockedWithLensPosition调用

时间:2017-01-06 20:04:56

标签: swift avfoundation avcapturesession avcapturedevice

我想同步setFocusModeLockedWithLensPosition,setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains和setExposureModeCustomWithDuration调用。

是否有调用函数的逻辑顺序?

我想要做的是当我确定正确设置了对焦,平衡和曝光时开始运行会话(我想设置值,而不是自动设置)

我试图锁定配置,然后调用3个函数,然后解锁,然后在会话中启动。我把nil放在3个完成处理程序参数中。 我在这种情况下看到的是我的图像预览不漂亮(一种蓝色滤镜)。我必须等到具有良好的图像质量。我想要的只是在好的时候显示图像。我希望得到通知。

所以我试图用完成处理程序级联我的3个调用。在某些情况下,不会调用完成处理程序。我想这就是我想把我的镜头位置设为0.4并且当前镜头位置为0.4。

所以我不知道哪种方法最好。

由于

1 个答案:

答案 0 :(得分:1)

您可以像这样在完成处理程序中设置相机选项。它将等待焦点设置为设置曝光,相同的原理将适用于白平衡和曝光。您可以阅读有关相机设置here的更多信息。

var AVCGains:AVCaptureWhiteBalanceGains = AVCaptureWhiteBalanceGains()
AVCGains.redGain = 1.0;
AVCGains.greenGain = 1.0;
AVCGains.blueGain = 1.0;

self.camera?.focusMode = .locked
self.camera?.exposureMode = .locked
self.camera?.whiteBalanceMode = .locked

self.camera?.setFocusModeLockedWithLensPosition(focus_point, completionHandler: {(timestamp:CMTime) -> Void in   
        print("Focus applied")
        self.camera?.setExposureModeCustomWithDuration(CMTimeMake(1,10), iso: 100, completionHandler: {(timestamp:CMTime) -> Void in 
              print("Exposure applied")
              self.camera?.setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains(AVCGains, completionHandler: {(timestamp:CMTime) -> Void in
                      print("White Balance applied")
                      // All settings have been applied, start running session 
              })
        })
})