Android 15 では、ローライト ブースト自動露出(AE)モードが導入されています。これは、Camera 2 と夜間モードカメラ拡張機能の両方で使用できる新しい自動露出モードです。ローライト ブースト AE モードは、暗い場所でプレビュー ストリームの明るさを自動調整するモードです。これは、夜間モードのカメラ拡張機能が静止画像を作成する方法とは異なります。夜間モードでは、複数の写真を組み合わせて 1 つの補正画像を作成します。夜間モードは静止画像の作成には非常に適していますが、連続したフレームを作成することはできません。一方、低照度ブースト AE モードではそれが可能です。そのため、ローライト ブースト AE モードでは、次のような新しいカメラ機能が有効になります。
- 画像プレビューが強化され、暗い場所でも写真の構図を確認しやすくなります。
- 暗い場所での QR コードのスキャン。
ローライト ブースト AE モードを有効にすると、光量が少ないときに自動的にオンになり、光量が多いときにオフになります。
アプリは、暗い場所でプレビュー ストリームをオフにして動画を録画することで、明るい動画を保存できます。
ローライト ブースト AE モードは、Camera2 またはカメラ拡張機能で使用できます。このドキュメントでは、Camera2 でローライト ブースト AE モードを使用する方法について説明します。デバイスでサポートされている場合は、夜間モードカメラ拡張機能でローライト ブースト AE モードを使用することもできます。
利用できる地域を確認
ローライト ブースト AE モードを使用する前に、デバイスでサポートされていることを確認します。利用可能な場合、ローライト ブースト AE モードは camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES にリストされている露出モードの 1 つです。(Low Light Boost は独自の自動露出設定です。他の自動露出設定は、Low Light Boost AE モードで実行されるプレビューの明るさ調整に対応していないためです)。
ローライト ブースト AE モードが利用可能かどうかを確認するには、CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) を呼び出し、返されたモードに ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY が含まれているかどうかを確認します。
val characteristics = cameraManager.getCameraCharacteristics(cameraId) val autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!! val lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY ) if (lowLightBoostSupported) { // Enable Low Light Boost AE Mode (next section). } else { // Proceed without Low Light Boost AE Mode. }
ローライト ブースト AE モードを有効にする
Camera2 セッションでローライト ブースト AE モードを有効にするには、CaptureRequest.CONTROL_AE_MODE を ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY に設定します。その後、ローライト ブースト AE モードがオンになっていることを確認する必要があります。これは、CaptureResult.CONTROL_AE_MODE フィールドをチェックすることで確認できます。Low Light Boost はすべてのカメラ構成に対応しているわけではないため、確認する必要があります。たとえば、高速録画は、FPS の考慮事項により、ローライト ブースト AE モードをサポートしていません。ローライト ブースト AE モードがオンになっていない場合は、カメラの設定を変更して、もう一度お試しください。
val captureRequestBuilder = camera.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW ) if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY ) } // other capture request params. session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { override fun onCaptureCompleted( session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult ) { // verify Low Light Boost AE Mode AE mode set successfully. result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY } }, cameraHandler )
ローライト ブースト AE モードをモニタリングする
ローライト ブースト AE モードは、暗い場所でプレビュー ストリームを明るくするモードです。通常の撮影に十分な明るさがある環境では、このモードは効果を発揮しません。ローライト ブースト AE モードが現在有効かどうかは、CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE フィールドで確認できます。ローライト ブースト AE モードをオンにして、現在有効になっている場合、このフィールドは CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE に設定されます。その場合、月のアイコンや、プレビューが明るくなっていることを示すその他の表示を表示できます。
session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { override fun onCaptureCompleted( session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult ) { // check if Low Light Boost AE Mode is active or inactive. if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE ) { // Low Light Boost AE Mode state is active. // Show Moon Icon. } else { // Low Light Boost AE Mode state is inactive or AE mode is not set // to Low Light Boost AE Mode. // Hide Moon Icon. } } }, cameraHandler )