Halaman ini merinci perbedaan versi di Camera HALs, API, dan pengujian Compatibility Test Suite (CTS) terkait. Ini juga mencakup beberapa perubahan arsitektur yang dibuat untuk memperkuat dan mengamankan kerangka kerja kamera di Android 7.0, peralihan ke Treble di Android 8.0, dan pembaruan yang harus dilakukan vendor untuk mendukung perubahan ini dalam implementasi kamera mereka.
Terminologi
Istilah berikut digunakan di halaman ini:
- Kamera API1
- Kerangka kerja kamera tingkat aplikasi pada Android 4.4 dan perangkat yang lebih rendah, diekspos melalui kelas
android.hardware.Camera
. - Kamera API2
- Kerangka kerja kamera tingkat aplikasi pada perangkat Android 5.0 dan yang lebih tinggi, diekspos melalui paket
android.hardware.camera2
. - Kamera HAL
- Lapisan modul kamera diimplementasikan oleh vendor SoC. Kerangka kerja publik tingkat aplikasi dibangun di atas kamera HAL.
- Kamera HAL3.1
- Versi perangkat kamera HAL dirilis dengan Android 4.4.
- Kamera HAL3.2
- Versi perangkat kamera HAL dirilis dengan Android 5.0.
- Kamera API1 CTS
- Kumpulan tes CTS kamera yang dijalankan di atas Camera API1.
- Kamera API2 CTS
- Kumpulan tes CTS kamera tambahan yang berjalan di atas Camera API2.
- Tiga kali lipat
- Memisahkan implementasi vendor (khusus perangkat, perangkat lunak tingkat rendah yang ditulis oleh produsen silikon) dari kerangka kerja OS Android melalui antarmuka vendor baru.
- HIDL
- Bahasa definisi antarmuka HAL diperkenalkan dengan Treble dan digunakan untuk menentukan antarmuka antara HAL dan penggunanya.
- VTS
- Suite uji vendor diperkenalkan bersama Treble.
API Kamera
Android menyertakan API kamera berikut.
Kamera API1
Camera API1 yang tidak digunakan lagi Android 5.0, yang terus dihentikan karena pengembangan platform baru berfokus pada Camera API2. Namun, periode penghentian akan memakan waktu lama, dan rilis Android akan terus mendukung aplikasi Camera API1 untuk beberapa waktu. Secara khusus, dukungan berlanjut untuk:
- Antarmuka Kamera API1 untuk aplikasi. Aplikasi kamera yang dibuat di atas Camera API1 akan berfungsi seperti pada perangkat yang menjalankan versi rilis Android yang lebih rendah.
- Kamera versi HAL. Termasuk dukungan untuk Kamera HAL1.0.
Kamera API2
Kerangka kerja Camera API2 memaparkan kontrol kamera tingkat rendah ke aplikasi, termasuk aliran burst/streaming nol-salinan yang efisien dan kontrol per-bingkai dari eksposur, penguatan, peningkatan keseimbangan putih, konversi warna, denoising, penajaman, dan banyak lagi. Untuk detailnya, tonton ikhtisar video Google I/O .
Android 5.0 dan lebih tinggi termasuk Camera API2; namun, perangkat yang menjalankan Android 5.0 dan lebih tinggi mungkin tidak mendukung semua fitur Camera API2. Properti android.info.supportedHardwareLevel
yang dapat dikueri oleh aplikasi melalui antarmuka Camera API2 melaporkan salah satu level dukungan berikut:
-
LEGACY
: Perangkat ini mengekspos kemampuan ke aplikasi melalui antarmuka Camera API2 yang kira-kira memiliki kemampuan yang sama dengan yang diekspos ke aplikasi melalui antarmuka Camera API1. Kode kerangka kerja lama secara konseptual menerjemahkan panggilan Camera API2 menjadi panggilan Camera API1; perangkat lawas tidak mendukung fitur Camera API2 seperti kontrol per-bingkai. -
LIMITED
: Perangkat ini mendukung beberapa kemampuan Camera API2 (tetapi tidak semua) dan harus menggunakan Camera HAL 3.2 atau lebih tinggi. -
FULL
: Perangkat ini mendukung semua kemampuan utama Camera API2 dan harus menggunakan Camera HAL 3.2 atau lebih tinggi dan Android 5.0 atau lebih tinggi. -
LEVEL_3
: Perangkat ini mendukung pemrosesan ulang YUV dan pengambilan gambar RAW, bersama dengan konfigurasi aliran keluaran tambahan. -
EXTERNAL
: Perangkat ini mirip dengan perangkatLIMITED
dengan beberapa pengecualian; misalnya, beberapa informasi sensor atau lensa mungkin tidak dilaporkan atau memiliki kecepatan bingkai yang kurang stabil. Level ini digunakan untuk kamera eksternal seperti webcam USB.
Kemampuan individu diekspos melalui properti android.request.availableCapabilities
di antarmuka Camera API2. Perangkat FULL
memerlukan kemampuan MANUAL_SENSOR
dan MANUAL_POST_PROCESSING
, antara lain. Kemampuan RAW
adalah opsional bahkan untuk perangkat FULL
. Perangkat LIMITED
dapat mengiklankan subset dari kemampuan ini, termasuk tidak satupun dari mereka. Namun, kemampuan BACKWARD_COMPATIBLE
harus selalu ditentukan.
Tingkat perangkat keras yang didukung dari perangkat, serta kemampuan khusus Camera API2 yang didukungnya, tersedia sebagai tanda fitur berikut untuk memungkinkan pemfilteran Google Play dari aplikasi kamera Camera API2.
-
android.hardware.camera.hardware_level.full
-
android.hardware.camera.capability.raw
-
android.hardware.camera.capability.manual_sensor
-
android.hardware.camera.capability.manual_post_processing
Persyaratan CTS
Perangkat yang menjalankan Android 5.0 dan lebih tinggi harus lulus uji kamera Camera API1 CTS, Camera API2 CTS, dan CTS Verifier.
Perangkat yang tidak menampilkan implementasi Camera HAL3.2 dan tidak mampu mendukung antarmuka penuh Camera API2 masih harus lulus pengujian Camera API2 CTS. Namun, perangkat berjalan dalam mode Camera API2 LEGACY
(di mana panggilan Camera API2 secara konseptual dipetakan ke panggilan Camera API1) sehingga setiap pengujian Camera API2 CTS yang terkait dengan fitur atau kemampuan di luar Camera API1 secara otomatis dilewati.
Pada perangkat lawas, pengujian Camera API2 CTS yang dijalankan menggunakan antarmuka dan kemampuan Camera API1 publik yang ada tanpa persyaratan baru. Bug yang terpapar (dan yang menyebabkan kegagalan Camera API2 CTS) adalah bug yang sudah ada di HAL Kamera yang ada di perangkat, dan dengan demikian akan ditemukan oleh aplikasi Camera API1 yang ada. Kami tidak mengharapkan banyak bug seperti ini (namun, bug seperti itu harus diperbaiki untuk lulus tes Camera API2 CTS).
Persyaratan VTS
Perangkat yang menjalankan Android 8.0 dan lebih tinggi dengan implementasi HAL yang di-binder harus lulus uji VTS Kamera .
Pengerasan kerangka kamera
Untuk memperkuat keamanan kerangka kerja media dan kamera, Android 7.0 memindahkan layanan kamera dari server media. Dimulai dengan Android 8.0, setiap HAL Kamera yang di-binder berjalan dalam proses yang terpisah dari layanan kamera. Vendor mungkin perlu melakukan perubahan pada HAL kamera tergantung pada API dan versi HAL yang digunakan. Bagian berikut merinci perubahan arsitektur di AP1 dan AP2 untuk HAL1 dan HAL3, serta persyaratan umum.
Perubahan arsitektur untuk API1
Perekaman video API1 dapat mengasumsikan kamera dan pembuat enkode video langsung dalam proses yang sama. Saat menggunakan API1 pada:
- HAL3, di mana layanan kamera menggunakan BufferQueue untuk melewatkan buffer di antara proses, tidak diperlukan pembaruan vendor .
- HAL1, yang mendukung penerusan metadata dalam buffer video, vendor harus memperbarui HAL untuk menggunakan
kMetadataBufferTypeNativeHandleSource
. (kMetadataBufferTypeCameraSource
tidak lagi didukung di Android 7.0.)
Perubahan arsitektur untuk API2
Untuk API2 pada HAL1 atau HAL3, BufferQueue melewati buffer sehingga jalur tersebut terus bekerja. Arsitektur Android 7.0 untuk API2 pada:
- HAL1 tidak terpengaruh oleh pemindahan layanan kamera, dan tidak diperlukan pembaruan vendor .
- HAL3 terpengaruh, tetapi pembaruan vendor tidak diperlukan:
Persyaratan tambahan
Perubahan arsitektur yang dibuat untuk pengerasan media dan keamanan kerangka kamera mencakup persyaratan perangkat tambahan berikut.
- Umum. Perangkat memerlukan bandwidth tambahan karena IPC, yang dapat memengaruhi kasus penggunaan kamera yang sensitif terhadap waktu seperti perekaman video kecepatan tinggi. Vendor dapat mengukur dampak aktual dengan menjalankan
android.hardware.camera2.cts.PerformanceTest
dan aplikasi Google Kamera untuk perekaman video berkecepatan tinggi 120/240 FPS. Perangkat juga memerlukan sedikit RAM tambahan untuk membuat proses baru. - Lewati metadata dalam buffer video ( hanya HAL1 ). Jika HAL1 menyimpan metadata alih-alih data bingkai YUV nyata dalam buffer video, HAL harus menggunakan
kMetadataBufferTypeNativeHandleSource
sebagai jenis buffer metadata dan meneruskanVideoNativeHandleMetadata
dalam buffer video. (kMetadataBufferTypeCameraSource
tidak lagi didukung di Android 7.0.) DenganVideoNativeHandleMetadata
, kerangka kerja kamera dan media dapat meneruskan buffer video di antara proses dengan membuat serial dan deserializing handle asli dengan benar. - Alamat pegangan buffer tidak selalu menyimpan buffer yang sama ( hanya HAL3 ). Untuk setiap permintaan pengambilan, HAL3 mendapatkan alamat pegangan buffer. HAL tidak dapat menggunakan alamat untuk mengidentifikasi buffer karena alamat dapat menyimpan pegangan buffer lain setelah HAL mengembalikan buffer. Anda harus memperbarui HAL untuk menggunakan pegangan buffer untuk mengidentifikasi buffer. Misalnya, HAL menerima alamat pegangan buffer A, yang menyimpan pegangan buffer A. Setelah HAL mengembalikan pegangan buffer A, alamat pegangan buffer A dapat menyimpan pegangan buffer B saat berikutnya HAL menerimanya.
- Perbarui kebijakan SELinux untuk server kamera. Jika kebijakan SELinux khusus perangkat memberikan izin server media untuk menjalankan kamera, Anda harus memperbarui kebijakan SELinux untuk memberikan izin yang tepat kepada server kamera. Kami tidak menyarankan mereplikasi kebijakan SELinux server media untuk server kamera (karena server media dan server kamera umumnya memerlukan sumber daya yang berbeda dalam sistem). Cameraserver seharusnya hanya memiliki izin yang diperlukan untuk menjalankan fungsi kamera dan izin terkait kamera yang tidak perlu di server media harus dihapus.
- Pemisahan antara Camera HAL dan cameraserver. Android 8.0 dan lebih tinggi juga memisahkan Camera HAL yang di-binder dalam proses yang berbeda dari cameraserver. IPC melewati antarmuka yang ditentukan HIDL .
Validasi
Untuk semua perangkat yang menyertakan kamera dan menjalankan Android 7.0, verifikasi penerapannya dengan menjalankan Android 7.0 CTS. Meskipun Android 7.0 tidak menyertakan pengujian CTS baru yang memverifikasi perubahan layanan kamera, pengujian CTS yang ada akan gagal jika Anda tidak melakukan pembaruan yang ditunjukkan di atas.
Untuk semua perangkat yang menyertakan kamera dan menjalankan Android 8.0 dan lebih tinggi, verifikasi implementasi vendor dengan menjalankan VTS.
Riwayat versi kamera HAL
Untuk daftar pengujian yang tersedia untuk mengevaluasi HAL Kamera Android, lihat Daftar Periksa Pengujian HAL Kamera .
Android 10
Android 10 memperkenalkan pembaruan berikut.
API Kamera
- Peningkatan multi-kamera yang memungkinkan kamera fisik digunakan secara individual atau melalui kamera logis yang sesuai dengan menyembunyikan ID kamera fisik. Lihat Dukungan Multi-Kamera .
- Kemampuan untuk memeriksa apakah konfigurasi sesi tertentu didukung tanpa overhead kinerja untuk membuat sesi baru. Lihat
CameraDevice
. - Kemampuan untuk mengambil konfigurasi aliran yang direkomendasikan untuk kasus penggunaan tertentu untuk membuat klien lebih hemat daya dan berperforma. Lihat
getRecommendedStreamConfigurationMap
. - Dukungan untuk format gambar JPEG kedalaman . Untuk detail lebih lanjut, lihat spesifikasi Dynamic Depth .
- Dukungan untuk format Gambar HEIC . Lihat Pencitraan HEIF .
- Peningkatan privasi. Kunci tertentu diperlukan agar klien memiliki izin
CAMERA
sebelum dapat diambil dariCameraCharacteristics
. LihatgetKeysNeedingPermission
.
Kamera HAL
Versi Kamera HAL berikut diperbarui di Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Informasi kamera statis untuk ID kamera fisik yang mendukung perangkat kamera logis. Lihat Dukungan Multi-Kamera . -
isStreamCombinationSupported
: Metode ini mendukung API publik yang membantu permintaan klien jika konfigurasi sesi didukung. Lihat API untuk mengkueri kombinasi aliran .
ICameraDeviceSession
-
isReconfigurationNeeded
: Metode yang memberi tahu kerangka kerja kamera apakah konfigurasi ulang aliran lengkap diperlukan untuk kemungkinan nilai parameter sesi baru. Ini membantu menghindari penundaan konfigurasi ulang kamera yang tidak perlu. Lihat Kueri konfigurasi ulang sesi . - API manajemen buffer HAL : API ini memungkinkan HAL kamera untuk meminta buffer dari kerangka kamera hanya jika diperlukan, bukan menggabungkan setiap permintaan pengambilan dengan buffer terkait di seluruh pipeline kamera, sehingga berpotensi menghemat memori yang signifikan.
-
signalStreamFlush
: Memberi sinyal ke HAL bahwa layanan kamera akan melakukanconfigureStreams_3_5
dan bahwa HAL harus mengembalikan semua buffer stream yang ditentukan. -
configureStreams_3_5
: Mirip denganICameraDevice3.4.configureStreams
, tetapi sebagai tambahan, penghitungstreamConfigCounter
disediakan untuk memeriksa kondisi balapan antara panggilanconfigureStreams_3_5
dansignalStreamFlush
.
-
Pembaruan untuk ICameraDeviceCallback
:
-
requestStreamBuffers
: Panggilan balik sinkron yang dipanggil oleh kamera HAL untuk meminta buffer pada server kamera. LihatrequestStreamBuffers
. -
returnStreamBuffers
: Panggilan balik sinkron untuk kamera HAL untuk mengembalikan buffer output ke server kamera. LihatreturnStreamBuffers
.
3.4
Kunci berikut ditambahkan ke metadata kamera di Android 10.
- Format gambar
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
-
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
-
- Tag metadata kamera
-
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
-
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
-
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
-
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
-
ANDROID_HEIC_INFO_SUPPORTED
-
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
-
- Kemampuan
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Nilai untuk kunci
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
-
- Konfigurasi aliran kedalaman dinamis yang tersedia
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
-
- Konfigurasi aliran HEIC yang tersedia
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
modul kamera
Versi modul kamera berikut diperbarui di Android 10.
2.5
- Menambahkan metode
notifyDeviceStateChange
untuk perangkat agar memberi tahu kamera HAL saat perubahan fisik, seperti melipat, memengaruhi kamera, dan perutean.
2.4
- Perangkat yang diluncurkan dengan API level 29 atau lebih tinggi HARUS melaporkan
true
untukisTorchModeSupported
.
Android 9
Rilis Android 9 memperkenalkan pembaruan berikut untuk antarmuka API2 dan HAL kamera.
API Kamera
- Memperkenalkan API multi-kamera untuk mendukung perangkat dengan lebih baik dengan beberapa kamera menghadap ke arah yang sama, memungkinkan fitur seperti bokeh dan zoom tanpa batas. Ini memungkinkan aplikasi untuk melihat beberapa kamera pada perangkat sebagai satu unit logis (kamera logis). Permintaan pengambilan juga dapat dikirim ke perangkat kamera individual yang dicakup oleh satu kamera logis. Lihat Dukungan Multi-Kamera .
- Memperkenalkan parameter sesi. Parameter sesi adalah bagian dari parameter pengambilan yang tersedia yang dapat menyebabkan penundaan pemrosesan yang parah saat dimodifikasi. Biaya ini dapat dikurangi jika klien melewati nilai awal mereka selama inisialisasi sesi pengambilan. Lihat Parameter Sesi .
- Menambahkan kunci data optical stabilization (OIS) untuk stabilisasi dan efek tingkat aplikasi. Lihat
STATISTICS_OIS_SAMPLES
. - Menambahkan dukungan flash eksternal. Lihat
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Menambahkan maksud pelacakan gerakan di
CAPTURE_INTENT
. LihatCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. -
LENS_RADIAL_DISTORTION
dan menambahkanLENS_DISTORTION
sebagai gantinya. - Menambahkan mode koreksi distorsi di
CaptureRequest
. LihatDISTORTION_CORRECTION_MODE
. - Menambahkan dukungan untuk kamera USB/UVC eksternal pada perangkat yang didukung. Lihat
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Kamera HAL
3.4
Pembaruan untuk ICameraDeviceSession
-
configureStreams_3_4
: Menambahkan dukungan untuksessionParameters
dan kamera logis. -
processCaptureRequest_3_4
: Menambahkan dukungan untuk menyertakan ID kamera fisik dalam struktur aliran.
Pembaruan untuk ICameraDeviceCallback
-
processCaptureResult_3_4
: Menambahkan metadata kamera fisik dalam hasil pengambilan.
3.3
Kunci berikut ditambahkan ke metadata kamera di Android 9.
- Kemampuan
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
-
- Tag metadata kamera
-
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
-
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
-
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
-
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
-
ANDROID_STATISTICS_OIS_DATA_MODE
-
ANDROID_STATISTICS_OIS_TIMESTAMPS
-
ANDROID_STATISTICS_OIS_X_SHIFTS
-
ANDROID_STATISTICS_OIS_Y_SHIFTS
-
Android 8.0
Rilis Android 8.0 memperkenalkan Treble. Dengan Treble, implementasi Camera HAL vendor harus di- binder . Android 8.0 juga berisi peningkatan utama ini untuk layanan Kamera:
- Permukaan bersama: Aktifkan beberapa permukaan yang berbagi
OutputConfiguration
yang sama - API Sistem untuk mode kamera khusus
-
onCaptureQueueEmpty
Lihat bagian di bawah untuk informasi lebih lanjut tentang fitur ini.
Permukaan bersama
Fitur ini memungkinkan hanya satu set buffer untuk menggerakkan dua output, seperti pratinjau dan encoding video, yang menurunkan konsumsi daya dan memori. Untuk mendukung fitur ini, produsen perangkat perlu memastikan implementasi HAL kamera dan gralloc HAL mereka dapat membuat buffer gralloc yang digunakan oleh beberapa konsumen yang berbeda (seperti komposer perangkat keras/GPU dan encoder video), bukan hanya satu konsumen. Layanan kamera meneruskan flag penggunaan konsumen ke kamera HAL dan gralloc HAL; mereka perlu mengalokasikan jenis buffer yang tepat, atau kamera HAL perlu mengembalikan kesalahan bahwa kombinasi konsumen ini tidak didukung.
Lihat dokumentasi pengembang enableSurfaceSharing
untuk detail tambahan.
API Sistem untuk mode kamera khusus
API kamera publik mendefinisikan dua mode operasi: perekaman kecepatan tinggi normal dan terbatas. Mereka memiliki semantik yang cukup berbeda; misalnya, mode kecepatan tinggi terbatas pada paling banyak dua keluaran tertentu sekaligus. Berbagai OEM telah menyatakan minatnya untuk mendefinisikan mode kustom lainnya untuk kemampuan khusus perangkat keras. Di bawah tenda, mode hanyalah bilangan bulat yang diteruskan ke configure_streams
. Lihat: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Fitur ini mencakup panggilan API sistem yang dapat digunakan aplikasi kamera OEM untuk mengaktifkan mode kustom. Mode ini harus dimulai pada nilai integer 0x8000 untuk menghindari konflik dengan mode mendatang yang ditambahkan ke API publik.
Untuk mendukung fitur ini, OEM hanya perlu menambahkan mode baru ke HAL mereka, dipicu oleh bilangan bulat yang diteruskan ke HAL pada configure_streams, dan kemudian aplikasi kamera kustom mereka menggunakan API sistem.
Nama metodenya adalah android.hardware.camera2.CameraDevice#createCustomCaptureSession
. Lihat: frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
diCaptureQueueEmpty
Tujuan dari API ini adalah untuk mengurangi latensi perubahan kontrol seperti zoom dengan menjaga antrian permintaan sekosong mungkin. onCaptureQueueEmpty
tidak memerlukan pekerjaan HAL; itu murni tambahan sisi kerangka kerja. Aplikasi yang ingin memanfaatkannya perlu menambahkan pendengar ke panggilan balik itu dan merespons dengan tepat. Umumnya itu dengan mengirimkan permintaan capture lain ke perangkat kamera.
Antarmuka kamera HIDL
Antarmuka Kamera HIDL adalah perombakan total antarmuka Kamera HAL yang menggunakan API yang ditentukan HIDL stabil. Semua fitur dan kemampuan kamera yang diperkenalkan dalam versi lawas terbaru 3.4 dan 2.4 (untuk modul kamera) juga merupakan bagian dari definisi HIDL.
3.4
Penambahan kecil pada metadata yang didukung dan perubahan pada dukungan data_space:
- Tambahkan
ANDROID_SENSOR_OPAQUE_RAW_SIZE
metadata statis sebagai wajib jika formatRAW_OPAQUE
didukung. - Tambahkan
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
metadata statis sebagai wajib jika ada format RAW yang didukung. - Alihkan bidang
camera3_stream_t data_space
ke definisi yang lebih fleksibel, menggunakan definisi pengkodean ruang data versi 0. - Penambahan metadata umum yang tersedia untuk digunakan untuk HALv3.2 atau yang lebih baru:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
-
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
-
ANDROID_SENSOR_OPAQUE_RAW_SIZE
-
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Revisi kecil dari HAL dengan kemampuan yang diperluas:
- Pembaruan API pemrosesan ulang OPAQUE dan YUV.
- Dukungan dasar untuk buffer keluaran kedalaman.
- Penambahan bidang
data_space
kecamera3_stream_t
. - Penambahan bidang rotasi ke
camera3_stream_t
. - Penambahan mode operasi konfigurasi aliran camera3 ke
camera3_stream_configuration_t
.
3.2
Revisi kecil dari HAL dengan kemampuan yang diperluas:
-
get_metadata_vendor_tag_ops
. Gunakanget_vendor_tag_ops
dicamera_common.h
sebagai gantinya. - Menghentikan
register_stream_buffers
. Semua buffer gralloc yang disediakan oleh framework ke HAL diprocess_capture_request
mungkin baru setiap saat. - Tambahkan dukungan hasil parsial.
process_capture_result
dapat dipanggil beberapa kali dengan subset dari hasil yang tersedia sebelum hasil lengkap tersedia. - Tambahkan templat manual ke
camera3_request_template
. Aplikasi dapat menggunakan template ini untuk mengontrol pengaturan pengambilan secara langsung. - Kerjakan ulang spesifikasi aliran dua arah dan input.
- Ubah jalur pengembalian buffer input. Buffer dikembalikan dalam
process_capture_result
alih-alihprocess_capture_request
.
3.1
Revisi kecil dari HAL dengan kemampuan yang diperluas:
-
configure_streams
meneruskan flag penggunaan konsumen ke HAL. - panggilan flush untuk membatalkan semua permintaan/buffer dalam penerbangan secepat mungkin.
3.0
Revisi pertama dari HAL dengan kemampuan yang diperluas:
- Perubahan versi utama sejak ABI benar-benar berbeda. Tidak ada perubahan pada kemampuan perangkat keras yang diperlukan atau model operasional dari 2.0.
- Permintaan input yang dikerjakan ulang dan antarmuka antrian streaming: Panggilan kerangka kerja ke HAL dengan permintaan berikutnya dan buffer aliran sudah di-dequeued. Dukungan kerangka kerja sinkronisasi disertakan, yang diperlukan untuk implementasi yang efisien.
- Memindahkan pemicu ke permintaan, sebagian besar notifikasi ke hasil.
- Menggabungkan semua panggilan balik ke dalam kerangka kerja menjadi satu struktur, dan semua metode penyiapan menjadi satu panggilan
initialize()
. - Membuat konfigurasi streaming menjadi satu panggilan untuk menyederhanakan manajemen streaming. Aliran dua arah menggantikan konstruksi
STREAM_FROM_STREAM
. - Semantik mode terbatas untuk perangkat keras lama/terbatas.
2.0
Rilis awal HAL dengan kemampuan yang diperluas (Android 4.2) [camera2.h]:
- Cukup untuk mengimplementasikan
android.hardware.Camera
API yang ada. - Memungkinkan antrian ZSL di lapisan layanan kamera.
- Tidak diuji untuk fitur baru apa pun seperti kontrol pengambilan manual, pengambilan Bayer RAW, pemrosesan ulang data RAW, dll.
1.0
Kamera Android awal HAL (Android 4.0) [camera.h]:
- Dikonversi dari lapisan abstraksi C++ CameraHardwareInterface.
- Mendukung
android.hardware.Camera
API.
Riwayat versi modul kamera
Bagian ini berisi informasi versi modul untuk modul perangkat keras Kamera, berdasarkan camera_module_t.common.module_api_version
. Dua digit heksagonal paling signifikan mewakili versi mayor, dan dua digit paling signifikan mewakili versi minor.
2.4
Versi modul kamera ini menambahkan perubahan API berikut:
- Dukungan mode obor. Kerangka kerja dapat mengaktifkan mode obor untuk perangkat kamera apa pun yang memiliki unit lampu kilat, tanpa membuka perangkat kamera. Perangkat kamera memiliki prioritas yang lebih tinggi untuk mengakses unit lampu kilat daripada modul kamera; membuka perangkat kamera mematikan obor jika telah diaktifkan melalui antarmuka modul. Ketika ada konflik sumber daya, seperti
open()
dipanggil untuk membuka perangkat kamera, modul HAL kamera harus memberi tahu kerangka kerja melalui panggilan balik status mode obor bahwa mode obor telah dimatikan. - Dukungan kamera eksternal (misalnya, kamera hot-plug USB). Pembaruan API menentukan bahwa info statis kamera hanya tersedia saat kamera terhubung dan siap digunakan untuk kamera hot-plug eksternal. Panggilan untuk mendapatkan info statis adalah panggilan yang tidak valid jika status kamera bukan
CAMERA_DEVICE_STATUS_PRESENT
. Kerangka kerja hanya mengandalkan panggilan balik perubahan status perangkat untuk mengelola daftar kamera eksternal yang tersedia. - Petunjuk arbitrase kamera. Menambahkan dukungan untuk secara eksplisit menunjukkan jumlah perangkat kamera yang dapat dibuka dan digunakan secara bersamaan. Untuk menentukan kombinasi perangkat yang valid, bidang
resource_cost
danconflicting_devices
harus selalu disetel dalam strukturcamera_info
yang dikembalikan oleh panggilanget_camera_info
. - Metode inisialisasi modul. Dipanggil oleh layanan kamera setelah modul HAL dimuat untuk memungkinkan inisialisasi HAL satu kali. Itu dipanggil sebelum metode modul lain dipanggil.
2.3
Versi modul kamera ini menambahkan dukungan perangkat HAL kamera warisan terbuka. Kerangka kerja dapat menggunakannya untuk membuka perangkat kamera sebagai perangkat HAL versi perangkat HAL yang lebih rendah jika perangkat yang sama dapat mendukung beberapa versi API perangkat. Panggilan terbuka modul perangkat keras standar ( common.methods->open
) terus membuka perangkat kamera dengan versi terbaru yang didukung, yang juga merupakan versi yang tercantum di camera_info_t.device_version
.
2.2
Versi modul kamera ini menambahkan dukungan tag vendor dari modul, dan menghentikan vendor_tag_query_ops
lama yang sebelumnya hanya dapat diakses dengan perangkat terbuka.
2.1
Versi modul kamera ini menambahkan dukungan untuk panggilan balik asinkron ke kerangka kerja dari modul HAL kamera, yang digunakan untuk memberi tahu kerangka kerja tentang perubahan status modul kamera. Modul yang menyediakan metode set_callbacks()
yang valid harus melaporkan setidaknya nomor versi ini.
2.0
Modul kamera yang melaporkan nomor versi ini mengimplementasikan versi kedua dari antarmuka HAL modul kamera. Perangkat kamera yang dapat dibuka melalui modul ini dapat mendukung versi 1.0 atau versi 2.0 dari antarmuka HAL perangkat kamera. Bidang device_version
dari camera_info selalu valid; bidang static_camera_characteristics
dari camera_info
valid jika bidang device_version
2.0 atau lebih tinggi.
1.0
Modul kamera yang melaporkan nomor versi ini mengimplementasikan antarmuka HAL modul kamera awal. Semua perangkat kamera yang dapat dibuka melalui modul ini hanya mendukung versi 1 perangkat kamera HAL. Bidang device_version
dan static_camera_characteristics
dari camera_info
tidak valid. Hanya android.hardware.Camera
API yang dapat didukung oleh modul ini dan perangkatnya.