Android 9 memperkenalkan dukungan API untuk perangkat multi-kamera melalui perangkat kamera logis baru yang terdiri dari dua atau lebih perangkat kamera fisik yang menunjuk ke arah yang sama. Perangkat kamera logis diekspos sebagai CameraDevice/CaptureSession tunggal ke aplikasi yang memungkinkan interaksi dengan fitur multi-kamera terintegrasi HAL. Aplikasi secara opsional dapat mengakses dan mengontrol aliran kamera fisik, metadata, dan kontrol yang mendasarinya.
Gambar 1 . Dukungan multi-kamera
Dalam diagram ini, ID kamera yang berbeda diberi kode warna. Aplikasi ini dapat melakukan streaming buffer mentah dari setiap kamera fisik secara bersamaan. Dimungkinkan juga untuk mengatur kontrol terpisah dan menerima metadata terpisah dari kamera fisik yang berbeda.
Contoh dan sumber
Perangkat multi-kamera harus diiklankan dengan kemampuan multi-kamera yang logis .
Klien kamera dapat menanyakan ID kamera perangkat fisik tempat kamera logis tertentu dibuat dengan memanggil getPhysicalCameraIds()
. ID yang dikembalikan sebagai bagian dari hasil kemudian digunakan untuk mengontrol perangkat fisik satu per satu melalui setPhysicalCameraId()
. Hasil dari permintaan individual tersebut dapat ditanyakan dari hasil lengkap dengan memanggil getPhysicalCameraResults()
.
Permintaan kamera fisik individual mungkin hanya mendukung sebagian parameter terbatas. Untuk menerima daftar parameter yang didukung, pengembang dapat menghubungi getAvailablePhysicalCameraRequestKeys()
.
Aliran kamera fisik hanya didukung untuk permintaan non-pemrosesan ulang dan hanya untuk sensor monokrom dan bayer.
Penerapan
Daftar periksa dukungan
Untuk menambahkan perangkat multi-kamera logis di sisi HAL:
- Tambahkan kemampuan
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
untuk perangkat kamera logis apa pun yang didukung oleh dua atau lebih kamera fisik yang juga terpapar ke suatu aplikasi. - Isi bidang metadata
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
statis dengan daftar ID kamera fisik. - Isi metadata statis terkait kedalaman yang diperlukan untuk mengkorelasikan piksel aliran kamera fisik:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
,ANDROID_LENS_POSE_REFERENCE
. Setel bidang metadata
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
statis ke:-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Untuk sensor dalam mode utama-utama, tidak ada sinkronisasi rana/pencahayaan perangkat keras. -
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Untuk sensor dalam mode utama-sekunder, sinkronisasi rana/pencahayaan perangkat keras.
-
Isi
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
dengan daftar parameter yang didukung untuk masing-masing kamera fisik. Daftar ini bisa kosong jika perangkat logis tidak mendukung permintaan individual.Jika permintaan individual didukung, proses dan terapkan masing-masing
physicalCameraSettings
yang dapat diterima sebagai bagian dari permintaan pengambilan dan tambahkan masing-masingphysicalCameraMetadata
yang sesuai.Untuk perangkat Kamera HAL versi 3.5 (diperkenalkan di Android 10) atau lebih tinggi, isi kunci hasil
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
menggunakan ID kamera fisik aktif saat ini yang mendukung kamera logis.
Untuk perangkat yang menjalankan Android 9, perangkat kamera harus mendukung penggantian satu aliran YUV/RAW logis dengan aliran fisik dengan ukuran yang sama (tidak berlaku untuk aliran RAW) dan format yang sama dari dua kamera fisik. Ini tidak berlaku untuk perangkat yang menjalankan Android 10.
Untuk perangkat yang menjalankan Android 10 dengan versi perangkat HAL kamera 3.5 atau lebih tinggi, perangkat kamera harus mendukung isStreamCombinationSupported
agar aplikasi dapat menanyakan apakah kombinasi aliran tertentu yang berisi aliran fisik didukung.
Peta konfigurasi aliran
Untuk kamera logis, kombinasi aliran wajib untuk perangkat kamera pada tingkat perangkat keras tertentu sama dengan yang diperlukan di CameraDevice.createCaptureSession
. Semua aliran di peta konfigurasi aliran harus berupa aliran logis.
Untuk perangkat kamera logis yang mendukung kemampuan RAW dengan subkamera fisik dengan ukuran berbeda, jika aplikasi mengonfigurasi aliran RAW logis, perangkat kamera logis tidak boleh beralih ke subkamera fisik dengan ukuran sensor berbeda. Hal ini memastikan aplikasi pengambilan RAW yang ada tidak rusak.
Untuk memanfaatkan zoom optik yang diterapkan HAL dengan beralih antar subkamera fisik selama pengambilan RAW, aplikasi harus mengonfigurasi aliran subkamera fisik, bukan aliran RAW logis.
Kombinasi aliran terjamin
Baik kamera logis maupun kamera fisik yang mendasarinya harus menjamin kombinasi aliran wajib yang diperlukan untuk level perangkatnya.
Perangkat kamera logis harus beroperasi dengan cara yang sama seperti perangkat kamera fisik berdasarkan tingkat perangkat keras dan kemampuannya. Disarankan agar rangkaian fiturnya merupakan superset dari masing-masing kamera fisik.
Pada perangkat yang menjalankan Android 9, untuk setiap kombinasi streaming yang dijamin, kamera logis harus mendukung:
Mengganti satu aliran logis YUV_420_888 atau aliran mentah dengan dua aliran fisik dengan ukuran dan format yang sama, masing-masing dari kamera fisik terpisah, mengingat ukuran dan format tersebut didukung oleh kamera fisik.
Menambahkan dua aliran mentah, satu dari masing-masing kamera fisik, jika kamera logis tidak mengiklankan kemampuan RAW, namun kamera fisik yang mendasarinya mengiklankan. Hal ini biasanya terjadi ketika kamera fisik memiliki ukuran sensor yang berbeda.
Menggunakan aliran fisik sebagai pengganti aliran logis dengan ukuran dan format yang sama. Hal ini tidak boleh memperlambat kecepatan frame pengambilan ketika durasi frame minimum dari aliran fisik dan logis sama.
Pertimbangan kinerja dan daya
Pertunjukan:
- Mengonfigurasi dan melakukan streaming aliran fisik dapat memperlambat laju pengambilan kamera logis karena keterbatasan sumber daya.
- Menerapkan pengaturan kamera fisik dapat memperlambat kecepatan pengambilan jika kamera yang mendasarinya ditempatkan pada kecepatan bingkai yang berbeda.
Kekuatan:
- Pengoptimalan daya HAL terus berfungsi dalam kasus default.
- Mengonfigurasi atau meminta aliran fisik dapat mengesampingkan optimalisasi daya internal HAL dan menimbulkan lebih banyak penggunaan daya.
Kustomisasi
Anda dapat menyesuaikan penerapan perangkat Anda dengan cara berikut.
- Output gabungan dari perangkat kamera logis bergantung sepenuhnya pada implementasi HAL. Keputusan tentang bagaimana aliran logika gabungan diperoleh dari kamera fisik bersifat transparan bagi aplikasi dan framework kamera Android.
- Permintaan dan hasil fisik individual dapat didukung secara opsional. Kumpulan parameter yang tersedia dalam permintaan tersebut juga sepenuhnya bergantung pada implementasi HAL tertentu.
- Mulai Android 10, HAL dapat mengurangi jumlah kamera yang bisa langsung dibuka oleh aplikasi dengan memilih untuk tidak mengiklankan beberapa atau semua PHYSICAL_ID di
getCameraIdList
. MemanggilgetPhysicalCameraCharacteristics
kemudian harus mengembalikan karakteristik kamera fisik.
Validasi
Perangkat multi-kamera logis harus melewati CTS kamera seperti kamera biasa lainnya. Kasus pengujian yang menargetkan perangkat jenis ini dapat ditemukan di modul LogicalCameraDeviceTest
.
Ketiga pengujian ITS ini menargetkan sistem multi-kamera untuk memfasilitasi penggabungan gambar yang tepat:
-
scene1/test_multi_camera_match.py
-
scene4/test_multi_camera_alignment.py
-
sensor_fusion/test_multi_camera_frame_sync.py
Pengujian adegan 1 dan adegan 4 dijalankan dengan alat pengujian ITS-in-a-box . Tes test_multi_camera_match
menegaskan bahwa kecerahan bagian tengah gambar cocok ketika kedua kamera diaktifkan. Tes test_multi_camera_alignment
menegaskan bahwa jarak kamera, orientasi, dan parameter distorsi dimuat dengan benar. Jika sistem multi-kamera menyertakan kamera Wide FoV (>90o), kotak ITS versi rev2 diperlukan.
Sensor_fusion
adalah alat pengujian kedua yang memungkinkan gerakan telepon berulang dan ditentukan serta menyatakan bahwa stempel waktu giroskop dan sensor gambar cocok dan bingkai multi-kamera sinkron.
Semua kotak tersedia melalui AcuSpec, Inc. ( www.acuspecinc.com , fred@acuspecinc.com) dan MYWAY Manufacturing ( www.myway.tw , sales@myway.tw). Selain itu, kotak ITS rev1 dapat dibeli melalui West-Mark ( www.west-mark.com , dgoodman@west-mark.com).
Praktik terbaik
Untuk sepenuhnya memanfaatkan fitur yang diaktifkan oleh multi-kamera sambil menjaga kompatibilitas aplikasi, ikuti praktik terbaik berikut saat menerapkan perangkat multi-kamera yang logis:
- (Android 10 atau lebih tinggi) Sembunyikan subkamera fisik dari
getCameraIdList
. Hal ini mengurangi jumlah kamera yang dapat langsung dibuka oleh aplikasi, sehingga menghilangkan kebutuhan aplikasi untuk memiliki logika pemilihan kamera yang rumit. - (Android 11 atau lebih tinggi) Untuk perangkat multi-kamera logis yang mendukung zoom optik, terapkan API
ANDROID_CONTROL_ZOOM_RATIO
, dan gunakanANDROID_SCALER_CROP_REGION
hanya untuk pemotongan rasio aspek.ANDROID_CONTROL_ZOOM_RATIO
memungkinkan perangkat memperkecil dan mempertahankan presisi yang lebih baik. Dalam hal ini, HAL harus menyesuaikan sistem koordinatANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
, danANDROID_STATISTICS_FACE_LANDMARKS
untuk menangani bidang pasca-zoom pandangan sebagai array aktif sensor. Untuk informasi selengkapnya tentang caraANDROID_SCALER_CROP_REGION
bekerja sama denganANDROID_CONTROL_ZOOM_RATIO
, lihatcamera3_crop_reprocess#cropping
. - Untuk perangkat multi-kamera dengan kamera fisik yang memiliki kemampuan berbeda, pastikan perangkat tersebut mengiklankan dukungan untuk nilai atau rentang tertentu untuk suatu kontrol hanya jika seluruh rentang zoom mendukung nilai atau rentang tersebut. Misalnya, jika kamera logis terdiri dari kamera ultrawide, lebar, dan telefoto, lakukan hal berikut:
- Jika ukuran larik aktif kamera fisik berbeda, HAL kamera harus melakukan pemetaan dari larik aktif kamera fisik ke larik aktif kamera logis untuk
ANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
, danANDROID_STATISTICS_FACE_LANDMARKS
sehingga dari aplikasi perspektif, sistem koordinat adalah ukuran array aktif kamera logis. - Jika kamera lebar dan telefoto mendukung fokus otomatis, namun kamera ultrawide memiliki fokus tetap, pastikan kamera logis mengumumkan dukungan fokus otomatis. HAL harus mensimulasikan mesin status fokus otomatis untuk kamera ultrawide sehingga ketika aplikasi memperbesar ke lensa ultrawide, fakta bahwa kamera fisik yang mendasarinya adalah fokus tetap akan terlihat jelas bagi aplikasi, dan mesin status fokus otomatis untuk mode AF yang didukung bekerja sesuai harapan.
- Jika kamera lebar dan telefoto mendukung 4K @ 60 fps, dan kamera ultrawide hanya mendukung 4K @ 30 fps, atau 1080p @ 60 fps, namun tidak mendukung 4K @ 60 fps, pastikan kamera logis tidak menampilkan 4k @ 60 fps di konfigurasi aliran yang didukungnya. Hal ini menjamin integritas kemampuan kamera logis, memastikan bahwa aplikasi tidak akan mengalami masalah tidak mencapai 4k @ 60 fps pada nilai
ANDROID_CONTROL_ZOOM_RATIO
kurang dari 1.
- Jika ukuran larik aktif kamera fisik berbeda, HAL kamera harus melakukan pemetaan dari larik aktif kamera fisik ke larik aktif kamera logis untuk
- Mulai dari Android 10, multi-kamera logis tidak diperlukan untuk mendukung kombinasi streaming yang menyertakan streaming fisik. Jika HAL mendukung kombinasi dengan aliran fisik:
- (Android 11 atau lebih tinggi) Untuk menangani kasus penggunaan seperti kedalaman dari stereo dan pelacakan gerakan dengan lebih baik, buat bidang pandang keluaran aliran fisik sebesar yang dapat dicapai oleh perangkat keras. Namun, jika aliran fisik dan aliran logis berasal dari kamera fisik yang sama, keterbatasan perangkat keras mungkin memaksa bidang pandang aliran fisik sama dengan aliran logis.
- Untuk mengatasi tekanan memori yang disebabkan oleh beberapa aliran fisik, pastikan aplikasi menggunakan
discardFreeBuffers
untuk membatalkan alokasi buffer gratis (buffer yang dirilis oleh konsumen, namun belum dikeluarkan dari antrean oleh produsen) jika aliran fisik diperkirakan tidak aktif selama jangka waktu tertentu waktu. - Jika aliran fisik dari kamera fisik yang berbeda biasanya tidak dilampirkan ke permintaan yang sama, pastikan aplikasi menggunakan
surface group
sehingga satu antrean buffer digunakan untuk mendukung dua permukaan yang menghadap aplikasi, sehingga mengurangi konsumsi memori.