Android 15 では、新しい自動露出モードであるローライト ブーストが導入されています。 カメラ 2 と夜間モードのカメラ拡張機能の両方。ローライト ブースト 暗い場所でプレビュー ストリームの明るさを自動的に調整します あります。これは、夜間モードのカメラ拡張機能が作成する 静止画像を撮影できます。夜間モードでは、バースト写真を合成して 1 枚の 補正された画像です。夜間モードは静止画像の作成に適していますが、 連続したフレーム ストリームは作成できませんが、ローライト ブーストでは作成できます。したがって、次のようになります。 ローライト ブーストを使用すると、次のような新しいカメラ機能を利用できます。
- 強化された画像プレビューにより、ユーザーがより適切にフレームを 低光量で撮影できます。
- 暗い場所で QR コードをスキャンしています。
ローライト ブーストを有効にすると、バッテリー残量が少なくなったときに自動的にオンになります。 明るさが増し、明るくなるとオフになります。
アプリは暗い場所でプレビュー ストリームから録画し、 明るくなります。
ローライト ブーストは、Camera2 または カメラ拡張機能 このドキュメントでは、Camera2 でローライト ブーストを使用する方法について説明します。また、 夜間モードのカメラ拡張機能によるローライト ブースト(サポートされている場合) ダウンロードします
空室状況を確認
ローライト ブーストを使用する前に、お使いのデバイスがこの機能に対応しているかどうかをご確認ください。もし
ローライト ブーストは、
camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
。(暗い
他の自動露出設定であるため、ブーストは独自の自動露出設定です。
ローライト ブーストで実施されるプレビュー版の明るさ補正には対応していません)。
ローライト ブーストが利用できるかどうかを確認するには、
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 (next section) } else { // Proceed without Low Light Boost }
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 (next section) } else { // Proceed without Low Light Boost }
ローライト ブーストを有効にする
Camera2 セッションでローライト ブーストを有効にするには、以下を設定します。
CaptureRequest.CONTROL_AE_MODE
~
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
。その後、次の操作を行う必要があります。
[ローライト ブースト] がオンになっていることを確認します。これを行うには、
CaptureResult.CONTROL_AE_MODE
フィールド。要確認: 暗い場所では
ブーストは、すべてのカメラ設定に対応しているわけではありません。たとえば
FPS を考慮するため、録画はローライト ブーストに対応していません。条件
ローライト ブーストが ON になっていません。カメラの変更が必要になる場合があります
もう一度お試しください。
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 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 set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
ローライト ブーストの監視
ローライト ブーストは、暗い場所でプレビュー ストリームを明るくします。
明るさが十分でなければ何も影響しない
作成します。ローライト ブーストが現在アクティブかどうかを確認するには、
CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
フィールド有効にしている場合
ローライト ブーストがオンになっていて、かつ現在アクティブの場合、フィールドは次のように設定されています。
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 is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost state is active // Show Moon Icon } else { // Low Light Boost state is inactive or AE mode is not set // to Low Light Boost // 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 is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost state is active // Show Moon Icon } else { // Low Light Boost state is inactive or AE mode is not set // to Low Light Boost // Hide Moon Icon } } }, mCameraHandler );