Dukungan Multi-Kamera

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.

Dukungan multi-kamera

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:

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 . Memanggil getPhysicalCameraCharacteristics 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:

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 gunakan ANDROID_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 koordinat ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES , dan ANDROID_STATISTICS_FACE_LANDMARKS untuk menangani bidang pasca-zoom pandangan sebagai array aktif sensor. Untuk informasi selengkapnya tentang cara ANDROID_SCALER_CROP_REGION bekerja sama dengan ANDROID_CONTROL_ZOOM_RATIO , lihat camera3_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 , dan ANDROID_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.
  • 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.