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