Low Light Boost オート露出モード

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
)