Fitur abstraksi hardware kamera (HAL) kamera Android menghubungkan level yang lebih tinggi Camera API framework di android.hardware.camera2 ke {i>driver<i} kamera dan perangkat keras yang mendasarinya. Mulai Android 13, antarmuka HAL kamera pengembangan aplikasi menggunakan AIDL. Android 8.0 diperkenalkan Treble, mengalihkan Camera HAL API ke antarmuka stabil yang didefinisikan oleh bahasa deskripsi antarmuka HAL (HIDL). Jika sebelumnya Anda telah mengembangkan modul dan driver HAL kamera untuk Android 7.0 dan yang lebih rendah, perhatikan perubahan signifikan dalam pipeline kamera.
HAL kamera AIDL
Untuk perangkat yang menjalankan Android 13 atau yang lebih tinggi, framework kamera menyertakan dukungan untuk HAL kamera AIDL. Framework kamera juga mendukung HAL kamera HIDL, tetapi fitur kamera yang ditambahkan di Android 13 atau yang lebih tinggi hanya tersedia melalui antarmuka HAL kamera AIDL. Untuk menerapkan fitur tersebut pada perangkat yang diupgrade ke Android 13 atau yang lebih baru, produsen perangkat harus memigrasikan proses HAL mereka dari penggunaan antarmuka kamera HIDL ke kamera AIDL antarmuka.
Untuk mempelajari manfaat AIDL, lihat AIDL untuk HAL.
Mengimplementasikan HAL kamera AIDL
Untuk implementasi referensi HAL kamera AIDL, lihat
hardware/google/camera/common/hal/aidl_service/
.
Spesifikasi HAL kamera AIDL berada di lokasi berikut:
- Penyedia kamera:
hardware/interfaces/camera/provider/aidl/
- Perangkat kamera:
hardware/interfaces/camera/device/aidl/
- Metadata kamera:
hardware/interfaces/camera/metadata/aidl/
- Jenis data umum:
hardware/interfaces/camera/common/aidl/
Untuk perangkat yang bermigrasi ke AIDL, produsen perangkat mungkin perlu mengubah kebijakan SELinux Android (sepolicy) dan file RC bergantung pada struktur kode.
Validasi HAL kamera AIDL
Untuk menguji penerapan HAL kamera AIDL, pastikan perangkat lulus semua
pengujian CTS dan VTS. Android 13 memperkenalkan pengujian
VTS AIDL,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Fitur Kamera HAL3
Tujuan desain ulang Android Camera API adalah untuk meningkatkan kemampuan aplikasi secara substansial untuk mengontrol subsistem kamera di perangkat Android sekaligus mengatur ulang API agar lebih efisien dan dapat dikelola. Kontrol tambahan ini mempermudah pembuatan aplikasi kamera berkualitas tinggi di perangkat Android yang dapat beroperasi dengan andal di beberapa produk sekaligus tetap menggunakan algoritma khusus perangkat jika memungkinkan untuk memaksimalkan kualitas dan performa.
Versi 3 subsistem kamera menyusun mode operasi menjadi tampilan terpadu tunggal, yang dapat digunakan untuk menerapkan mode sebelumnya dan beberapa hal lainnya, seperti mode burst. Ini menghasilkan kontrol pengguna yang lebih baik untuk fokus, eksposur, dan lainnya pascapemrosesan, seperti pengurangan derau, kontras dan mempertajam. Selain itu, tampilan yang disederhanakan ini memudahkan developer aplikasi untuk menggunakan berbagai fungsi kamera.
API membuat model subsistem kamera sebagai pipeline yang mengonversi permintaan yang masuk untuk pengambilan frame menjadi frame, berdasarkan rasio 1:1. Permintaan mengenkapsulasi semua informasi konfigurasi tentang penangkapan dan pemrosesan sebuah {i>frame<i}. Ini termasuk resolusi dan format {i>pixel<i}; sensor manual, lensa, dan flash kontrol; Mode operasi 3A; Kontrol pemrosesan RAW->YUV; pembuatan statistik; dan seterusnya.
Secara sederhana, framework aplikasi meminta bingkai dari kamera subsistem, dan subsistem kamera mengembalikan hasil ke aliran output. Di beberapa Selain itu, {i>metadata<i} yang berisi informasi seperti ruang warna dan lensa {i>shading<i} akan dibuat untuk setiap set hasil. Anda dapat menganggap kamera versi 3 sebagai pipeline ke streaming satu arah kamera versi 1. Fungsi ini mengonversi setiap permintaan pengambilan menjadi satu gambar yang diambil oleh sensor, yang diproses menjadi:
- Objek hasil dengan metadata tentang pengambilan.
- Satu hingga N buffer data gambar, masing-masing ke platform tujuannya sendiri.
Kumpulan kemungkinan platform output sudah dikonfigurasi sebelumnya:
- Setiap platform adalah tujuan untuk aliran buffer gambar dari resolusi.
- Hanya sejumlah kecil platform yang dapat dikonfigurasi sebagai output sekaligus (~3).
Permintaan berisi semua setelan pengambilan yang diinginkan dan daftar platform
output untuk mendorong buffering gambar untuk permintaan ini (dari total
kumpulan yang dikonfigurasi). Permintaan dapat bersifat satu kali (dengan capture()
), atau permintaan
dapat diulang tanpa batas waktu (dengan setRepeatingRequest()
). Tangkapan
memiliki prioritas daripada permintaan berulang.
Ringkasan Kamera HAL1
Versi 1 dari subsistem kamera ini dirancang sebagai kotak hitam dengan tingkat berikut ini dan tiga mode operasi berikut:
- Pratinjau
- Perekaman Video
- Perekaman Gambar Diam
Setiap mode memiliki kemampuan yang sedikit berbeda dan tumpang-tindih. Hal ini membuat sulit untuk menerapkan fitur baru seperti mode burst, yang berada di antara dua mode operasi.
Android 7.0 terus mendukung kamera HAL1 karena banyak perangkat masih mengandalkan anotasi. Selain itu, layanan kamera Android mendukung penerapan kedua HAL (1 dan 3), yang berguna saat Anda ingin mendukung kamera depan yang kurang canggih dengan HAL1 kamera dan kamera belakang yang lebih canggih dengan HAL3 kamera.
Ada satu modul HAL kamera (dengan nomor versi-nya sendiri), yang mencantumkan beberapa perangkat kamera independen yang masing-masing memiliki nomor versinya sendiri. Diperlukan modul kamera 2 atau yang lebih baru untuk mendukung perangkat 2 atau yang lebih baru, dan modul kamera tersebut dapat memiliki campuran perangkat kamera (ini adalah yang kami maksud ketika kami mengatakan Android mendukung penerapan HAL).