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