Catatan: Halaman ini merujuk ke paket Camera2. Kecuali jika aplikasi Anda memerlukan fitur level rendah tertentu dari Camera2, sebaiknya gunakan CameraX. CameraX dan Camera2 mendukung Android 5.0 (level API 21) dan versi yang lebih baru.
Camera2 menyediakan Extensions API untuk mengakses ekstensi yang telah diterapkan oleh produsen perangkat di berbagai perangkat Android. Untuk daftar mode ekstensi yang didukung, lihat Ekstensi kamera.
Untuk mengetahui daftar perangkat yang mendukung ekstensi, lihat Perangkat yang didukung.
Arsitektur ekstensi
Gambar berikut menampilkan arsitektur ekstensi kamera.
Aplikasi Camera2 dapat menggunakan ekstensi melalui Camera2 API. Camera2 API menyediakan cara untuk membuat kueri ekstensi yang tersedia, mengonfigurasi sesi kamera ekstensi, dan berkomunikasi dengan library OEM Camera Extensions. Hal ini memungkinkan aplikasi Anda menggunakan ekstensi seperti Mode Malam, HDR, Otomatis, Bokeh, atau Retouch Wajah.
Menguji kompatibilitas perangkat kamera untuk Camera2 Extensions API
Cuplikan kode berikut memeriksa apakah perangkat mendukung Camera2 Extensions API. Ekstensi tidak didukung oleh semua perangkat atau perangkat mungkin mendukung sebagian ekstensi. Cuplikan ini menampilkan daftar ID kamera yang kompatibel dan mendukung ekstensi kamera.
private fun getExtensionCameraIds(cameraManager: CameraManager): List<String> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { cameraManager.cameraIdList.filter { cameraId -> val characteristics = cameraManager.getCameraCharacteristics(cameraId) val extensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId) val capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES) extensionCharacteristics.supportedExtensions.isNotEmpty() && capabilities?.contains( CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE ) ?: false } } else emptyList()
Membuat CameraExtensionSession dengan Camera2 Extensions API
Camera2 Extensions API, jika digunakan dengan perangkat yang kompatibel, memungkinkan Anda mengakses
ekstensi kamera tertentu. Cuplikan kode berikut menampilkan contoh
cara membuat CameraExtensionSession
untuk menggunakan mode pengambilan gambar malam hari untuk aplikasi Camera2 yang ada.
private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() { // Implement Capture Callbacks. } private val extensionSessionStateCallback = object : CameraExtensionSession.StateCallback() { override fun onConfigured(session: CameraExtensionSession) { cameraExtensionSession = session try { val captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply { addTarget(previewSurface) }.build() session.setRepeatingRequest( captureRequest, Dispatchers.IO.asExecutor(), captureCallbacks ) } catch (e: CameraAccessException) { Snackbar.make( previewView, "Failed to preview capture request", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } override fun onClosed(session: CameraExtensionSession) { super.onClosed(session) cameraDevice.close() } override fun onConfigureFailed(session: CameraExtensionSession) { Snackbar.make( previewView, "Failed to start camera extension preview", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } private fun startExtensionSession() { val outputConfig = arrayListOf( OutputConfiguration(stillImageReader.surface), OutputConfiguration(previewSurface) ) val extensionConfiguration = ExtensionSessionConfiguration( CameraExtensionCharacteristics.EXTENSION_NIGHT, outputConfig, Dispatchers.IO.asExecutor(), extensionSessionStateCallback ) cameraDevice.createExtensionSession(extensionConfiguration) }
Referensi lainnya
Untuk informasi selengkapnya, lihat
CameraExtensionCharacteristics
dan lihat contoh Camera2 Extensions API publik
untuk mengetahui informasi selengkapnya.