Peningkatan Cahaya Rendah

Android 15 memperkenalkan Low Light Boost, mode eksposur otomatis baru yang tersedia untuk Kamera 2 dan ekstensi kamera mode malam. Boost Cahaya Rendah otomatis menyesuaikan kecerahan streaming Pratinjau dalam kondisi cahaya rendah. Hal ini berbeda dengan cara ekstensi kamera mode malam membuat gambar diam, karena mode malam menggabungkan burst foto untuk membuat satu gambar yang disempurnakan. Meskipun mode malam berfungsi sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat aliran frame berkelanjutan, tetapi Peningkatan Cahaya Rendah dapat melakukannya. Dengan demikian, Boost Cahaya Rendah memungkinkan kemampuan kamera baru, seperti berikut:

  • Memberikan pratinjau gambar yang disempurnakan, sehingga pengguna lebih dapat membingkai gambar dengan cahaya redup.
  • Memindai kode QR dalam kondisi cahaya redup.

Jika Anda mengaktifkan Peningkatan Cahaya Rendah, fitur akan otomatis menyala saat level cahaya rendah, dan dinonaktifkan saat ada lebih banyak cahaya.

Aplikasi dapat merekam streaming Pratinjau dalam kondisi cahaya redup untuk menyimpan video yang terang.

Anda dapat menggunakan Boost Cahaya Rendah di Camera2 atau melalui ekstensi kamera. Dokumen ini membahas cara menggunakan Boost Cahaya Rendah dengan Camera2. Anda juga dapat menggunakan Boost Cahaya Rendah dengan ekstensi kamera Mode Malam jika didukung oleh perangkat.

Periksa ketersediaan

Sebelum menggunakan Peningkatan Cahaya Rendah, periksa apakah fitur tersebut didukung di perangkat. Jika tersedia, Boost Cahaya Rendah adalah salah satu mode eksposur yang tercantum di camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Peningkatan Cahaya Rendah adalah setelan eksposur otomatisnya sendiri, karena setelan eksposur otomatis lainnya tidak kompatibel dengan kecerahan pratinjau yang dilakukan oleh Peningkatan Cahaya Rendah.)

Jadi, untuk memeriksa apakah Peningkatan Cahaya Rendah tersedia, panggil CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) dan periksa apakah mode yang ditampilkan menyertakan 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
}

Aktifkan Peningkatan Cahaya Rendah

Untuk mengaktifkan Peningkatan Cahaya Rendah dalam sesi Camera2, tetapkan CaptureRequest.CONTROL_AE_MODE ke ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Setelah melakukannya, Anda harus mengonfirmasi bahwa Peningkatan Cahaya Rendah telah diaktifkan; Anda dapat melakukannya dengan memeriksa kolom CaptureResult.CONTROL_AE_MODE. Anda harus memeriksanya karena Peningkatan Cahaya Rendah tidak kompatibel dengan semua konfigurasi kamera. Misalnya, perekaman kecepatan tinggi tidak mendukung Peningkatan Cahaya Rendah, karena pertimbangan FPS. Jika Peningkatan Cahaya Rendah tidak diaktifkan, Anda mungkin perlu mengubah konfigurasi kamera dan mencoba lagi.

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

Pantau Peningkatan Cahaya Rendah

Peningkatan Cahaya Rendah mencerahkan streaming pratinjau dalam kondisi cahaya redup, dan tidak berpengaruh jika lingkungan sudah cukup terang untuk pengambilan gambar normal. Anda dapat mengonfirmasi apakah Peningkatan Cahaya Rendah saat ini aktif dengan memeriksa kolom CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Jika Anda telah mengaktifkan Boost Cahaya Rendah dan saat ini aktif, kolom ini akan ditetapkan ke CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Kemudian Anda mungkin menampilkan ikon bulan atau indikasi lain bahwa pratinjau sedang cerah.

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