Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

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. Secara opsional, aplikasi dapat mengakses dan mengontrol aliran, metadata, dan kontrol kamera fisik 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. Anda juga dapat 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 meminta ID kamera dari 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 individu seperti itu dapat dikueri dari hasil lengkap dengan menjalankan getPhysicalCameraResults() .

Permintaan kamera fisik individu mungkin hanya mendukung subset parameter yang terbatas. Untuk menerima daftar parameter yang didukung, pengembang dapat memanggil getAvailablePhysicalCameraRequestKeys() .

Streaming kamera fisik hanya didukung untuk permintaan yang tidak diproses 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 berukuran 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 menanyakan apakah kombinasi aliran tertentu yang berisi aliran fisik didukung.

Peta konfigurasi streaming

Untuk kamera logis, kombinasi streaming wajib untuk perangkat kamera pada tingkat perangkat keras tertentu sama dengan yang diperlukan di CameraDevice.createCaptureSession . Semua aliran di peta konfigurasi aliran harus merupakan aliran logis.

Untuk perangkat kamera logis yang mendukung kemampuan RAW dengan sub-kamera fisik dengan ukuran berbeda, jika aplikasi mengonfigurasi aliran RAW logis, perangkat kamera logis tidak boleh beralih ke sub-kamera fisik dengan ukuran sensor berbeda. Ini memastikan bahwa aplikasi pengambilan RAW yang ada tidak rusak.

Untuk memanfaatkan zoom optik yang diimplementasikan HAL dengan beralih di antara sub-kamera fisik selama pengambilan RAW, aplikasi harus mengonfigurasi aliran sub-kamera fisik alih-alih aliran RAW yang logis.

Kombinasi aliran terjamin

Baik kamera logis dan kamera fisik yang mendasarinya harus menjamin kombinasi streaming wajib yang diperlukan untuk level perangkat mereka.

Perangkat kamera logis harus beroperasi dengan cara yang sama seperti perangkat kamera fisik berdasarkan tingkat dan kemampuannya perangkat keras. Direkomendasikan agar set fiturnya adalah superset dari masing-masing kamera fisik.

Di perangkat yang menjalankan Android 9, untuk setiap kombinasi streaming terjamin, kamera logis harus mendukung:

  • Mengganti satu YUV_420_888 logis atau aliran mentah dengan dua aliran fisik dengan ukuran dan format yang sama, masing-masing dari kamera fisik terpisah, mengingat ukuran dan format didukung oleh kamera fisik.

  • Menambahkan dua aliran mentah, satu dari setiap kamera fisik, jika kamera logis tidak menunjukkan kemampuan RAW, tetapi kamera fisik yang mendasarinya melakukannya. Ini biasanya terjadi ketika kamera fisik memiliki ukuran sensor yang berbeda.

  • Menggunakan aliran fisik sebagai pengganti aliran logis dengan ukuran dan format yang sama. Ini tidak boleh memperlambat laju bingkai pengambilan jika durasi bingkai minimum dari aliran fisik dan logis sama.

Pertimbangan kinerja dan daya

  • Performa:

    • Mengonfigurasi dan mengalirkan aliran fisik dapat memperlambat laju pengambilan kamera logis karena kendala sumber daya.
    • Menerapkan pengaturan kamera fisik dapat memperlambat laju pengambilan jika kamera yang mendasarinya dimasukkan ke dalam frekuensi gambar yang berbeda.
  • Kekuasaan:

    • Pengoptimalan daya HAL terus bekerja dalam kasus default.
    • Mengonfigurasi atau meminta aliran fisik dapat mengesampingkan pengoptimalan daya internal HAL dan menimbulkan lebih banyak penggunaan daya.

Kustomisasi

Anda dapat menyesuaikan implementasi perangkat Anda dengan cara berikut.

  • Keluaran gabungan dari perangkat kamera logis bergantung sepenuhnya pada implementasi HAL. Keputusan tentang bagaimana aliran logis yang menyatu berasal dari kamera fisik bersifat transparan bagi aplikasi dan kerangka kerja kamera Android.
  • Permintaan dan hasil fisik individu dapat didukung secara opsional. Kumpulan parameter yang tersedia dalam permintaan tersebut juga sepenuhnya bergantung pada implementasi HAL tertentu.
  • Dari Android 10, HAL dapat mengurangi jumlah kamera yang dapat 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 lulus CTS kamera seperti kamera biasa lainnya. Kasus uji yang menargetkan perangkat jenis ini dapat ditemukan di modul LogicalCameraDeviceTest .

Ketiga tes ITS ini menargetkan sistem multi-kamera untuk memfasilitasi penggabungan gambar yang tepat:

Pengujian adegan 1 dan adegan 4 dijalankan dengan rig 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 spasi kamera, orientasi, dan parameter distorsi dimuat dengan benar. Jika sistem multi-kamera menyertakan kamera Wide FoV (> 90o), versi rev2 dari kotak ITS diperlukan.

Sensor_fusion adalah alat uji kedua yang memungkinkan gerakan telepon berulang dan ditentukan serta menegaskan bahwa giroskop dan stempel waktu sensor gambar cocok dan bingkai multi-kamera selaras.

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 mempertahankan kompatibilitas aplikasi, ikuti praktik terbaik berikut saat mengimplementasikan perangkat multi-kamera yang logis:

  • (Android 10 atau lebih tinggi) Sembunyikan sub-kamera fisik dari getCameraIdList . Ini mengurangi jumlah kamera yang bisa langsung dibuka oleh aplikasi, menghilangkan kebutuhan aplikasi untuk memiliki logika pemilihan kamera yang kompleks.
  • (Android 11 atau lebih tinggi) Untuk perangkat multi-kamera logis yang mendukung zoom optik, terapkan ANDROID_CONTROL_ZOOM_RATIO API, dan gunakan ANDROID_SCALER_CROP_REGION untuk pemangkasan rasio aspek saja. ANDROID_CONTROL_ZOOM_RATIO memungkinkan perangkat untuk memperkecil dan menjaga presisi yang lebih baik. Dalam kasus 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 bidang ANDROID_STATISTICS_FACE_LANDMARKS tampilan sebagai sensor pasca-pembesaran untuk melihat sensor pasca-zoom. Untuk informasi selengkapnya tentang cara ANDROID_SCALER_CROP_REGION bekerja bersama dengan ANDROID_CONTROL_ZOOM_RATIO , lihat camera3_crop_reprocess#cropping .
  • Untuk perangkat multi-kamera dengan kamera fisik yang memiliki kemampuan berbeda, pastikan perangkat mengiklankan dukungan untuk nilai atau rentang tertentu untuk 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 , ANDROID_STATISTICS_FACE_LANDMARKS dari aplikasi ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES Perspektif, sistem koordinat adalah ukuran array aktif kamera logis.
    • Jika kamera lebar dan telefoto mendukung fokus otomatis, tetapi kamera ultrawide adalah fokus tetap, pastikan kamera logis mengiklankan dukungan fokus otomatis. HAL harus mensimulasikan mesin keadaan fokus otomatis untuk kamera ultrawide sehingga ketika aplikasi memperbesar lensa ultrawide, fakta bahwa kamera fisik yang mendasari adalah fokus tetap transparan untuk aplikasi, dan mesin keadaan fokus otomatis untuk mode AF yang didukung bekerja seperti yang diharapkan.
    • Jika kamera lebar dan telefoto mendukung 4K @ 60 fps, dan kamera ultrawide hanya mendukung 4K @ 30 fps, atau 1080p @ 60 fps, tetapi tidak 4K @ 60 fps, pastikan kamera logis tidak menampilkan 4k @ 60 fps dalam konfigurasi aliran yang didukungnya. 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.
  • Dilihat dari Android 10, multi-kamera logis tidak diperlukan untuk mendukung kombinasi streaming yang mencakup streaming fisik. Jika HAL mendukung kombinasi dengan aliran fisik:
    • (Android 11 atau lebih tinggi) Untuk menangani kasus penggunaan dengan lebih baik seperti kedalaman dari stereo dan pelacakan gerakan, buat bidang pandang output aliran fisik sebesar yang dapat dicapai oleh perangkat keras. Namun, jika aliran fisik dan aliran logis berasal dari kamera fisik yang sama, batasan perangkat keras mungkin memaksa bidang pandang aliran fisik menjadi sama dengan aliran logis.
    • Untuk mengatasi tekanan memori yang disebabkan oleh beberapa aliran fisik, pastikan aplikasi menggunakan discardFreeBuffers untuk discardFreeBuffers buffer gratis (buffer yang dirilis oleh konsumen, tetapi belum diantrekan oleh produsen) jika streaming fisik diperkirakan akan menganggur selama beberapa waktu waktu.
    • Jika streaming 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.