Peningkatan Cahaya Rendah

Android 15 memperkenalkan Low Light Boost, mode eksposur otomatis baru yang tersedia Kamera 2 dan ekstensi kamera mode malam. Booster Cahaya Rendah otomatis menyesuaikan kecerahan streaming Pratinjau dalam kondisi cahaya redup kondisi tertentu. Hal ini berbeda dengan yang dibuat oleh ekstensi kamera mode malam gambar diam, karena mode malam menggabungkan foto menghasilkan gambar yang lebih baik. Meskipun mode malam sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat streaming frame secara berkelanjutan, tetapi Peningkatan Cahaya Rendah dapat melakukannya. Dengan demikian, Mode Cahaya Rendah memungkinkan kemampuan kamera baru, seperti berikut:

  • Menyediakan pratinjau gambar yang ditingkatkan kualitasnya, sehingga pengguna dapat menyesuaikan frame gambar cahaya redup.
  • Memindai kode QR saat minim cahaya.

Jika Anda mengaktifkan Booster Cahaya Rendah, fitur ini akan otomatis aktif saat suhu rendah tingkat pencahayaan, dan mati saat ada lebih banyak cahaya.

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

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

Periksa ketersediaan

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

Jadi, untuk memeriksa apakah Low Light Boost 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 di sesi Camera2, setel CaptureRequest.CONTROL_AE_MODE ke ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Setelah melakukannya, Anda harus pastikan bahwa Peningkatan Cahaya Rendah diaktifkan; Anda dapat melakukannya dengan memeriksa Kolom CaptureResult.CONTROL_AE_MODE. Anda harus memeriksanya karena Cahaya Rendah Boost tidak kompatibel dengan semua konfigurasi kamera. Misalnya, kecepatan tinggi perekaman tidak mendukung Peningkatan Cahaya Rendah, karena pertimbangan FPS. Jika Booster Cahaya Rendah tidak diaktifkan, Anda mungkin perlu mengubah kamera konfigurasi lalu coba 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

Low Light Boost mencerahkan streaming pratinjau dalam kondisi cahaya redup, dan tidak berpengaruh jika lingkungan sudah cukup terang untuk normal rekam video. Anda dapat mengonfirmasi apakah Peningkatan Cahaya Rendah saat ini aktif dengan memeriksa kolom CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Jika Anda telah mengubah Booster Cahaya Rendah aktif dan saat ini sedang aktif, kolom ini disetel ke CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE Anda mungkin kemudian menunjukkan sebuah ikon bulan atau beberapa 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
);