Kamera HAL

Lapisan abstraksi perangkat keras kamera (HAL) Android menghubungkan API framework kamera tingkat yang lebih tinggi di android.hardware.camera2 ke driver dan perangkat keras kamera yang mendasarinya. Dimulai dengan Android 13, pengembangan antarmuka HAL kamera menggunakan AIDL . Android 8.0 memperkenalkan Treble , mengalihkan Camera HAL API ke antarmuka stabil yang ditentukan oleh bahasa deskripsi antarmuka HAL (HIDL). Jika sebelumnya Anda telah mengembangkan modul dan driver kamera HAL untuk Android 7.0 dan yang lebih rendah, waspadai perubahan signifikan pada pipeline kamera.

kamera AIDL HAL

Untuk perangkat yang menjalankan Android 13 atau lebih tinggi, framework kamera menyertakan dukungan untuk HAL kamera AIDL. Framework kamera juga mendukung HAL kamera HIDL, namun fitur kamera yang ditambahkan di Android 13 atau lebih tinggi hanya tersedia melalui antarmuka HAL kamera AIDL. Untuk mengimplementasikan fitur tersebut pada perangkat yang diupgrade ke Android 13 atau 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 .

Menerapkan kamera AIDL HAL

Untuk implementasi referensi HAL kamera AIDL, lihat hardware/google/camera/common/hal/aidl_service/ .

Spesifikasi HAL kamera AIDL ada di lokasi berikut:

Untuk perangkat yang bermigrasi ke AIDL, produsen perangkat mungkin perlu mengubah kebijakan SELinux Android (sepolicy) dan file RC bergantung pada struktur kode.

Validasi kamera AIDL HAL

Untuk menguji penerapan HAL kamera AIDL Anda, pastikan perangkat lulus semua pengujian CTS dan VTS. Android 13 memperkenalkan pengujian AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp .

Fitur kamera HAL3

Tujuan dari desain ulang API Kamera Android adalah untuk secara signifikan meningkatkan kemampuan aplikasi dalam mengontrol subsistem kamera pada perangkat Android sekaligus mengatur ulang API agar lebih efisien dan mudah dikelola. Kontrol tambahan memudahkan pembuatan aplikasi kamera berkualitas tinggi di perangkat Android yang dapat beroperasi dengan andal di berbagai produk sambil tetap menggunakan algoritme khusus perangkat bila memungkinkan untuk memaksimalkan kualitas dan kinerja.

Subsistem kamera versi 3 menyusun mode operasi menjadi 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 lebih banyak pasca-pemrosesan, seperti pengurangan noise, kontras, dan penajaman. Lebih jauh lagi, tampilan yang disederhanakan ini memudahkan pengembang aplikasi untuk menggunakan berbagai fungsi kamera.

API memodelkan subsistem kamera sebagai saluran yang mengubah permintaan masuk untuk pengambilan bingkai menjadi bingkai, dengan basis 1:1. Permintaan merangkum semua informasi konfigurasi tentang pengambilan dan pemrosesan bingkai. Ini termasuk resolusi dan format piksel; sensor manual, lensa dan kontrol lampu kilat; mode operasi 3A; MENTAH->Kontrol pemrosesan YUV; pembuatan statistik; dan seterusnya.

Secara sederhana, kerangka aplikasi meminta bingkai dari subsistem kamera, dan subsistem kamera mengembalikan hasilnya ke aliran keluaran. Selain itu, metadata yang berisi informasi seperti ruang warna dan bayangan lensa dihasilkan untuk setiap rangkaian hasil. Anda dapat menganggap kamera versi 3 sebagai saluran ke aliran satu arah kamera versi 1. Ini mengubah setiap permintaan pengambilan menjadi satu gambar yang ditangkap oleh sensor, yang diproses menjadi:

  • Objek hasil dengan metadata tentang penangkapan.
  • Satu hingga N buffer data gambar, masing-masing ke permukaan tujuannya sendiri.

Kumpulan kemungkinan permukaan keluaran telah dikonfigurasi sebelumnya:

  • Setiap permukaan adalah tujuan aliran buffer gambar dengan resolusi tetap.
  • Hanya sejumlah kecil permukaan yang dapat dikonfigurasi sebagai output sekaligus (~3).

Permintaan berisi semua pengaturan pengambilan yang diinginkan dan daftar permukaan keluaran untuk memasukkan buffer gambar untuk permintaan ini (dari total kumpulan yang dikonfigurasi). Permintaan dapat dilakukan sekali saja (dengan capture() ), atau dapat diulang tanpa batas waktu (dengan setRepeatingRequest() ). Pengambilan gambar memiliki prioritas dibandingkan permintaan berulang.

Model data kamera

Gambar 1. Model operasi inti kamera

Ikhtisar kamera HAL1

Subsistem kamera versi 1 dirancang sebagai kotak hitam dengan kontrol tingkat tinggi dan tiga mode pengoperasian berikut:

  • Pratinjau
  • Rekaman video
  • Masih Menangkap

Setiap mode memiliki kemampuan yang sedikit berbeda dan tumpang tindih. Hal ini mempersulit penerapan fitur baru seperti mode burst, yang berada di antara dua mode pengoperasian.

Diagram blok kamera

Gambar 2. Komponen kamera

Android 7.0 tetap mendukung kamera HAL1 karena banyak perangkat yang masih mengandalkannya. Selain itu, layanan kamera Android mendukung penerapan HAL (1 dan 3), yang berguna ketika Anda ingin mendukung kamera depan yang kurang mampu dengan kamera HAL1 dan kamera belakang yang lebih canggih dengan kamera HAL3.

Terdapat modul HAL kamera tunggal (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 gabungan versi perangkat kamera (inilah yang kami maksud ketika kami mengatakan Android mendukung penerapan kedua HAL).