2017-01-06 21 views
0

我想同步setFocusModeLockedWithLensPosition,setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains和setExposureModeCustomWithDuration調用。我如何同步AVCaptureDevice setFocusModeLockedWithLensPosition調用

是否有邏輯順序來調用thoses函數?

我想要做的就是開始運行會話時,我確信,對焦,白平衡和曝光設置正確(我想設置的值,而不是自動)

我試圖鎖定配置,然後調用3個函數,然後解鎖,然後開始運行會話。我把nil放在3個完成處理器參數中。 我在這種情況下看到的是我的圖像預覽不漂亮(藍色濾鏡)。在獲得良好的圖像質量之前,我必須等待。我想要的只是當它是好的時候才顯示圖像。我想要通知你。

所以我試圖用完成處理程序級聯我的3個調用。在某些情況下,完成處理程序不會被調用。我想這是當我想把我的鏡頭位置爲0.4,當前鏡頭位置爲0.4。

所以我不知道哪個是最好的方法。

謝謝

回答

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 
       }) 
     }) 
}) 
+0

這正是我所嘗試的。但在某些情況下,完成處理程序不會被調用。在其他情況下,我必須在開始運行會話後等待幾秒鐘,因爲看起來參數在會話運行時確實應用了 – Bob5421

+0

完成處理程序總是要被調用(當應用設置時),請確保已鎖定焦點,曝光和白平衡,否則完成處理程序[不會](https://developer.apple.com/reference/avfoundation/avcapturedevice/1624568-setwhitebalancemodelockedwithdev#parameters)被調用。如果這段代碼不起作用,那麼其他事情正在進行,因爲我測試了它並且它可以正常工作。 – Tuc3k