2017-01-06 10 views
0

を同期させることができます。は、どのように私はsetFocusModeLockedWithLensPosition、setWhiteBalanceModeLockedWithDeviceWhiteBalanceGainsとsetExposureModeCustomWithDuration呼び出しを同期するAVCaptureDeviceのsetFocusModeLockedWithLensPositionコール

機能を呼び出すロジックがありますか?私は何をしたいか

は私が焦点、バランスと露出が正しく設定されていることを確信しているときに、セッションの実行を開始することです(私はありません自動で、値を設定したい)

私は、設定をロックしようとしています次に、3つの関数を呼び出し、ロックを解除して、セッションで開始する。私は3補完ハンドラのパラメータにnilを入れます。 この場合、私の画像のプレビューはきれいではありません(ブルーフィルターのようなものです)。私は良い画質を得る前に待たなければなりません。私が望むのは、それが良い時にのみイメージを表示することです。私は通知されたい。

私は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

関連する問題