Mode Eksposur Otomatis Peningkatan Cahaya Redup

Android 15 memperkenalkan Mode Eksposur Otomatis (AE) Peningkatan Cahaya Rendah, mode eksposur otomatis baru yang tersedia untuk Camera 2 dan ekstensi kamera mode malam. Mode AE Peningkatan Cahaya Redup secara otomatis menyesuaikan kecerahan streaming Pratinjau dalam kondisi cahaya redup. Hal ini berbeda dengan cara ekstensi kamera mode malam membuat gambar diam, karena mode malam menggabungkan serangkaian foto untuk membuat satu gambar yang ditingkatkan. Meskipun mode malam berfungsi sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat aliran frame yang berkelanjutan, tetapi Mode AE Pengoptimalan Cahaya Redup dapat melakukannya. Dengan demikian, Mode AE Low Light Boost memungkinkan kemampuan kamera baru, seperti berikut:

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

Jika Anda mengaktifkan Mode AE Peningkatan Cahaya Redup, mode ini akan otomatis aktif saat ada tingkat cahaya rendah, dan nonaktif saat ada lebih banyak cahaya.

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

Anda dapat menggunakan Mode AE Peningkatan Cahaya Redup di Camera2 atau melalui ekstensi kamera. Dokumen ini membahas cara menggunakan Mode AE Pengoptimalan Cahaya Redup dengan Camera2. Anda juga dapat menggunakan Mode AE Peningkatan Cahaya Redup dengan ekstensi kamera Mode Malam jika didukung oleh perangkat.

Memeriksa ketersediaan

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

Jadi, untuk memeriksa apakah Mode AE 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 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
}

Mengaktifkan Mode AE Boost Cahaya Rendah

Untuk mengaktifkan Mode AE Low Light Boost dalam sesi Camera2, tetapkan CaptureRequest.CONTROL_AE_MODE ke ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Setelah melakukannya, Anda harus mengonfirmasi bahwa Mode AE Low Light Boost telah diaktifkan; Anda dapat melakukannya dengan mencentang kolom CaptureResult.CONTROL_AE_MODE. Anda perlu memeriksanya karena Low Light Boost tidak kompatibel dengan semua konfigurasi kamera. Misalnya, perekaman kecepatan tinggi tidak mendukung Mode AE Low Light Boost, karena pertimbangan FPS. Jika Mode AE Low Light Boost 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 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
);

Memantau Mode AE Peningkatan Cahaya Redup

Mode AE Peningkatan Cahaya Rendah mencerahkan streaming pratinjau dalam kondisi cahaya redup, dan tidak berpengaruh jika lingkungan sudah cukup terang untuk perekaman normal. Anda dapat mengonfirmasi apakah Mode AE Low Light Boost saat ini aktif dengan memeriksa kolom CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Jika Anda telah mengaktifkan Mode AE Peningkatan Cahaya Redup dan saat ini aktif, kolom akan ditetapkan ke CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Kemudian, Anda dapat menampilkan ikon bulan atau beberapa indikasi lain bahwa pratinjau telah diperjelas.

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