Hardware abstraction layer (HAL) kamera Android menghubungkan API framework kamera tingkat yang lebih tinggi di android.hardware.camera2 ke driver dan hardware kamera yang mendasarinya. Mulai Android 13, pengembangan antarmuka HAL kamera menggunakan AIDL. Android 8.0 memperkenalkan Treble, yang mengalihkan Camera HAL API ke antarmuka stabil yang ditentukan oleh HAL interface description language (HIDL). Jika Anda sebelumnya 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 tinggi, produsen perangkat harus memigrasikan proses HAL mereka dari penggunaan antarmuka kamera HIDL ke antarmuka kamera AIDL.
Untuk mempelajari keunggulan 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 file Android SELinux policy (sepolicy) dan RC, bergantung pada struktur kode.
Memvalidasi HAL kamera AIDL
Untuk menguji implementasi HAL kamera AIDL, pastikan perangkat lulus semua pengujian CTS dan VTS. Android 13 memperkenalkan pengujian VTS
AIDL,
VtsAidlHalCameraProvider_TargetTest.cpp.
Fitur Camera HAL3
Tujuan dari desain ulang Android Camera API adalah untuk meningkatkan kemampuan aplikasi dalam mengontrol subsistem kamera di perangkat Android secara substansial sekaligus mengatur ulang API agar lebih efisien dan dapat dipertahankan. Kontrol tambahan ini memudahkan pembuatan aplikasi kamera berkualitas tinggi di perangkat Android yang dapat beroperasi dengan andal di berbagai produk sekaligus tetap menggunakan algoritma khusus perangkat jika memungkinkan untuk memaksimalkan kualitas dan performa.
Subsistem kamera versi 3 menyusun mode operasi ke dalam satu tampilan terpadu, yang dapat digunakan untuk mengimplementasikan salah satu mode sebelumnya dan beberapa mode lainnya, seperti mode burst. Hal ini menghasilkan kontrol pengguna yang lebih baik untuk fokus dan eksposur serta pasca-pemrosesan yang lebih banyak, seperti pengurangan noise, kontras, dan penajaman. Selain itu, tampilan yang disederhanakan ini memudahkan developer aplikasi untuk menggunakan berbagai fungsi kamera.
Model API subsistem kamera sebagai pipeline yang mengonversi permintaan masuk untuk pengambilan frame menjadi frame, berdasarkan 1:1. Permintaan merangkum semua informasi konfigurasi tentang pengambilan dan pemrosesan frame. Hal ini mencakup resolusi dan format piksel; kontrol sensor, lensa, dan flash manual; mode operasi 3A; kontrol pemrosesan RAW->YUV; pembuatan statistik; dan sebagainya.
Secara sederhana, framework aplikasi meminta frame dari subsistem kamera, dan subsistem kamera menampilkan hasil ke aliran output. Selain itu, metadata yang berisi informasi seperti ruang warna dan shading lensa dibuat untuk setiap kumpulan hasil. Anda dapat menganggap kamera versi 3 sebagai pipeline ke aliran satu arah kamera versi 1. Kamera 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 tujuan sendiri.
Kumpulan platform output yang mungkin telah dikonfigurasi sebelumnya:
- Setiap platform adalah tujuan untuk aliran buffer gambar dengan resolusi tetap.
- Hanya sejumlah kecil platform yang dapat dikonfigurasi sebagai output sekaligus (~3).
Permintaan berisi semua setelan pengambilan yang diinginkan dan daftar platform output untuk mendorong buffer gambar ke dalam permintaan ini (dari total kumpulan yang dikonfigurasi). Permintaan dapat berupa satu kali (dengan capture()), atau dapat diulang tanpa batas (dengan setRepeatingRequest()). Pengambilan memiliki prioritas lebih tinggi daripada permintaan berulang.
Gambar 1. Model operasi inti kamera
Ringkasan Camera HAL1
Subsistem kamera versi 1 didesain sebagai kotak hitam dengan kontrol tingkat tinggi dan tiga mode operasi berikut:
- Pratinjau
- Rekaman Video
- Pengambilan Gambar Diam
Setiap mode memiliki kemampuan yang sedikit berbeda dan tumpang-tindih. Hal ini menyulitkan penerapan fitur baru seperti mode burst, yang berada di antara dua mode operasi.
Gambar 2. Komponen kamera
Android 7.0 terus mendukung camera HAL1 karena banyak perangkat masih mengandalkannya. Selain itu, layanan kamera Android mendukung implementasi kedua HAL (1 dan 3), yang berguna jika Anda ingin mendukung kamera depan yang kurang mumpuni dengan camera HAL1 dan kamera belakang yang lebih canggih dengan camera HAL3.
Ada satu modul HAL kamera (dengan nomor versinya sendiri), yang mencantumkan beberapa perangkat kamera independen yang masing-masing memiliki nomor versinya sendiri. Modul kamera 2 atau yang lebih baru diperlukan untuk mendukung perangkat 2 atau yang lebih baru, dan modul kamera tersebut dapat memiliki campuran versi perangkat kamera (inilah yang kami maksud saat kami mengatakan Android mendukung implementasi kedua HAL).