Low Light Boost オート露出モード

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_MODEON_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
);