Androidスマートフォンのフラッシュから被写体に可能な限り最大の光エネルギーを与えようとしているアプリケーションがあります。
複数の携帯電話を使用した実験室での測定では、自動露出写真を撮影している間のフラッシュの光出力が、定常状態の Torch On よりも大幅に高くなる可能性があることがわかりました (もちろん、これはデバイスによって異なります)。外部の照明条件に関係なく、より高い出力レベルでフラッシュをトリガーすることができれば、信頼できる十分に高い周波数 (5 Hz?) で、場合によっては、フラッシュライトを点灯したままにするよりも多くの光を出力することができます。州。
残念ながら、フラッシュのこのきめ細かい制御を実現することは不可能のようです。フラッシュの強度制御 (トーチ以外) は、非常に低いレベルで自動露出制御に関連付けられているためだと思います。
次の方法でプレビュー フレームをリクエストしているときに、フラッシュを発光させることができました。
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_OFF);
mPreviewRequestBuilder.set( CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_SINGLE );
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
CaptureRequest
.CONTROL_AE_PRECAPTURE_TRIGGER_START);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
// Finally, we start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
setState( STATE_PREVIEW );
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
キャプチャ結果が戻ってきたら、FLASH_STATE_FIRED
次のように単一の静止画像をキャプチャします。
final CaptureRequest.Builder captureBuilder =
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.addTarget(surface);
// Use the same AE and AF modes as the preview.
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
captureBuilder.set( CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF );
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
mCaptureSession.stopRepeating();
mCaptureSession.capture(captureBuilder.build(), mCaptureCallback, null);
フラッシュをリセットするために必要なようです。次に、上記のプレビュー コードに戻ってもう一度フラッシュしますが、フラッシュは非常に断続的に発生します。
単にトーチのオンとオフを切り替える以外に、Camera2 インターフェースで非常に一貫性のある高頻度の高出力フラッシュを生成するより良い方法はありますか?