Android 15 では、Camera 2 と夜間モードのカメラ拡張機能の両方で使用できる新しい自動露出モードであるローライト ブースト自動露出(AE)モードが導入されています。ローライト ブースト AE モードは、暗い場所でプレビュー ストリームの明るさを自動調整するモードです。これは、夜間モードのカメラ拡張機能が静止画像を作成する方法とは異なります。夜間モードでは、連写した写真を組み合わせて 1 枚の画像を作成します。夜間モードは静止画像の作成に非常に適していますが、連続したフレームストリームを作成することはできません。一方、低照度ブースト AE モードは連続したフレームストリームを作成できます。ローライト ブースト AE モードでは、次のような新しいカメラ機能が有効になります。
- 画像プレビューが強化され、暗い場所でも写真の構図を決めやすくなりました。
- 暗い場所での QR コードのスキャン。
ローライト ブースト AE モードを有効にすると、暗い場所では自動的にオンになり、明るい場所ではオフになります。
プレビュー ストリームをオフにして動画を録画することで、暗い場所でも明るい動画を保存できます。
ローライト ブースト AE モードは、Camera2 またはカメラ拡張機能で使用できます。このドキュメントでは、Camera2 でローライト ブースト AE モードを使用する方法について説明します。デバイスでサポートされている場合は、夜間モードカメラ拡張機能でローライト ブースト AE モードを使用することもできます。
空き状況を確認する
ローライト ブースト AE モードを使用する前に、デバイスでサポートされていることを確認してください。利用可能な場合、ローライト ブースト AE モードは camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
に表示される露出モードの 1 つです。(他の自動露出設定は、ローライト ブースト AE モードで実行されるプレビューの明るさ調整に対応していないため、ローライト ブーストは独自の自動露出設定です)。
ローライト ブースト AE モードが利用可能かどうかを確認するには、CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
を呼び出して、返されたモードに ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
が含まれているかどうかを確認します。
Kotlin
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 }
Java
CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraId); int[] autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES); boolean 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 モードがオンになっていない場合は、カメラの設定を変更してからもう一度お試しください。
Kotlin
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 )
Java
CaptureRequest.Builder captureRequestBuilder = mCamera.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 mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // 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; } }, mCameraHandler );
ローライト ブースト AE モードをモニタリングする
Low Light Boost AE モードは、暗い場所でプレビュー ストリームを明るくします。環境がすでに通常の撮影に十分な明るさになっている場合は、効果がありません。ローライト ブースト AE モードが現在有効かどうかは、[CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
] フィールドを確認することで確認できます。ローライト ブースト AE モードがオンになっていて、現在アクティブな場合、このフィールドは CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
に設定されます。プレビューが明るくなっている場合は、月アイコンなどのインジケーターを表示します。
Kotlin
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 )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // 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 } } }, mCameraHandler );