Dukungan multi-kamera

Android 9 memperkenalkan dukungan API untuk multi-kamera melalui perangkat kamera logis baru yang terdiri dari dua atau lebih perangkat kamera yang menunjuk ke arah yang sama. Perangkat kamera logis adalah diekspos sebagai satu CameraDevice/CaptureSession ke aplikasi yang memungkinkan dengan fitur multi-kamera yang terintegrasi dengan HAL. Aplikasi dapat secara opsional mengakses dan mengontrol streaming, 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 tersebut dapat melakukan streaming buffer mentah dari setiap kamera fisik secara bersamaan. Ini juga memungkinkan untuk mengatur kontrol terpisah dan menerima metadata yang terpisah dari kamera fisik.

Contoh dan sumber

Perangkat multi-kamera harus diiklankan dengan kemampuan multi-kamera logis.

Klien kamera dapat melakukan kueri ID kamera dari perangkat fisik kamera logis dengan memanggil getPhysicalCameraIds() ID yang ditampilkan sebagai bagian dari hasil kemudian digunakan untuk mengontrol perangkat fisik satu per satu melalui setPhysicalCameraId() Hasil dari permintaan individual tersebut dapat dikueri dari hasil dengan memanggil getPhysicalCameraResults()

Masing-masing permintaan kamera fisik mungkin hanya mendukung subset terbatas dari parameter. Untuk menerima daftar parameter yang didukung, developer dapat memanggil getAvailablePhysicalCameraRequestKeys()

Streaming kamera fisik hanya didukung untuk permintaan non-pemrosesan ulang dan hanya untuk sensor monokrom dan bayer.

Implementasi

Checklist 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 streaming RAW) dan format yang sama dari dua kamera. Hal ini tidak berlaku untuk perangkat yang menjalankan Android 10.

Untuk perangkat yang menjalankan Android 10 dengan versi perangkat HAL kamera adalah 3,5 atau lebih tinggi, perangkat kamera harus mendukung isStreamCombinationSupported aplikasi untuk mengkueri apakah kombinasi streaming tertentu yang berisi mendukung streaming fisik.

Peta konfigurasi streaming

Untuk kamera logis, kombinasi streaming wajib untuk perangkat kamera tingkat perangkat keras tertentu sama dengan yang dibutuhkan dalam CameraDevice.createCaptureSession Semua aliran data di peta konfigurasi aliran data harus berupa aliran yang logis.

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

Untuk memanfaatkan zoom optik yang diterapkan HAL dengan beralih antara sub-kamera fisik selama pengambilan gambar RAW, aplikasi harus mengonfigurasi streaming sub-kamera fisik, bukan streaming RAW yang logis.

Kombinasi streaming terjamin

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

Perangkat kamera logis harus beroperasi dengan cara yang sama seperti kamera fisik perangkat keras berdasarkan tingkat dan kemampuan perangkat kerasnya. Disarankan bahwa set fitur adalah superset dari setiap kamera fisik.

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

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

  • Menambahkan dua streaming mentah, satu dari setiap kamera fisik, jika kamera logis tidak mengiklankan kemampuan RAW, tetapi kamera fisik yang mendasarinya melakukannya. Hal ini biasanya terjadi ketika kamera fisik memiliki ukuran sensor yang berbeda.

  • Menggunakan aliran fisik sebagai pengganti aliran logis dengan ukuran dan format font. Tindakan ini tidak boleh memperlambat kecepatan frame penangkapan durasi {i>frame<i} minimum dari aliran fisik dan logis adalah sama.

Pertimbangan performa dan daya

  • Performa

    • Mengonfigurasi dan melakukan streaming aliran fisik dapat memperlambat kecepatan pengambilan gambar kamera logis karena batasan sumber daya.
    • Menerapkan setelan kamera fisik dapat memperlambat laju tangkapan jika kamera yang mendasarinya ditempatkan ke dalam kecepatan {i>frame<i} yang berbeda.
  • Daya:

    • Pengoptimalan daya HAL terus berfungsi dalam kasus default.
    • Mengonfigurasi atau meminta streaming fisik dapat menggantikan peran internal HAL pengoptimalan daya dan meningkatkan penggunaan daya.

Penyesuaian

Anda dapat menyesuaikan implementasi perangkat dengan cara berikut.

  • Output gabungan dari perangkat kamera logis bergantung sepenuhnya pada HAL terlepas dari implementasi layanan. Keputusan tentang bagaimana aliran logika yang menyatu berasal dari kamera fisik transparan ke aplikasi dan kamera Android Google Workspace for Education.
  • Setiap permintaan dan hasil fisik dapat didukung secara opsional. Tujuan kumpulan parameter yang tersedia dalam permintaan tersebut juga sepenuhnya bergantung pada implementasi HAL spesifik.
  • Mulai 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 Menelepon getPhysicalCameraCharacteristics kemudian harus menampilkan karakteristik kamera fisik.

Validasi

Perangkat multi-kamera logis harus lulus CTS seperti kamera biasa lainnya. Kasus pengujian yang menargetkan jenis perangkat ini dapat ditemukan di LogicalCameraDeviceTest ruang lingkup modul ini.

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

Pengujian scene 1 dan scene 4 dijalankan dengan Pengujian ITS-in-a-box perangkat. Pengujian test_multi_camera_match menegaskan bahwa kecerahan bagian tengah gambar akan cocok ketika kedua kamera diaktifkan. Tujuan Pengujian test_multi_camera_alignment menegaskan bahwa jarak kamera, orientasi, dan parameter distorsi dimuat dengan benar. Jika sistem multi-kamera termasuk kamera FoV Lebar (>90o), versi rev2 dari kotak ITS diperlukan.

Sensor_fusion adalah rig pengujian kedua yang memungkinkan ponsel berulang yang diberi resep dan menyatakan bahwa stempel waktu giroskop dan sensor gambar cocok dan bahwa frame multi-kamera sinkron.

Semua kotak tersedia melalui AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) dan MYWAY Manufaktur (www.myway.tw, sales@myway.tw). Selain itu, boks ITS rev1 dapat dibeli melalui West-Mark (www.west-mark.com, dgoodman@west-mark.com).

Praktik terbaik

Untuk memanfaatkan sepenuhnya fitur yang diaktifkan oleh multi-kamera sekaligus mempertahankan kompatibilitas aplikasi, ikuti praktik terbaik ini saat mengimplementasikan perangkat multi-kamera:

  • (Android 10 atau yang lebih tinggi) Sembunyikan sub-kamera fisik dari getCameraIdList Hal ini mengurangi jumlah kamera yang dapat langsung dibuka oleh aplikasi, sehingga aplikasi tidak perlu memiliki logika pemilihan kamera yang kompleks.
  • (Android 11 atau yang lebih tinggi) Untuk multi-kamera yang logis perangkat yang mendukung zoom optik, implementasikan ANDROID_CONTROL_ZOOM_RATIO API, dan gunakan ANDROID_SCALER_CROP_REGION hanya untuk pemangkasan rasio aspek. ANDROID_CONTROL_ZOOM_RATIO memungkinkan perangkat untuk memperkecil dan mempertahankan 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 ANDROID_STATISTICS_FACE_LANDMARKS untuk mengubah ukuran pasca-zoom ruang pandang sebagai array aktif sensor. Untuk informasi selengkapnya tentang cara ANDROID_SCALER_CROP_REGION berfungsi bersama dengan ANDROID_CONTROL_ZOOM_RATIO, lihat camera3_crop_reprocess#cropping.
  • Untuk perangkat multi-kamera dengan kamera fisik yang memiliki kemampuannya, pastikan perangkat memberitahukan dukungan untuk nilai tertentu atau rentang untuk kontrol hanya jika seluruh rentang zoom mendukung nilai atau rentang sel. Misalnya, jika kamera logis terdiri dari ultrawide, kamera lebar, dan kamera telefoto, lakukan hal berikut:
    • Jika ukuran array aktif dari kamera fisik berbeda, HAL kamera harus melakukan pemetaan dari array aktif kamera fisik untuk array 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 perspektif aplikasi, sistem koordinat ini adalah ukuran array aktif kamera logis.
    • Jika kamera lebar dan telefoto mendukung fokus otomatis, tetapi kamera ultrawide kamera memiliki fokus tetap, pastikan kamera logis mengiklankan fokus otomatis dukungan teknis IT. HAL harus menyimulasikan mesin status fokus otomatis untuk ultrawide kamera sehingga ketika aplikasi diperkecil ke lensa ultrawide, fakta bahwa kamera fisik yang mendasarinya adalah fokus tetap transparan untuk aplikasi, dan mesin status fokus otomatis untuk mode AF yang didukung berfungsi yang diharapkan.
    • Jika kamera lebar dan telefoto mendukung 4K @ 60 fps, dan kamera ultrawide hanya mendukung 4K @ 30 fps, atau 1080p @ 60 fps, tetapi bukan 4K @ 60 fps, pastikan kamera yang logis tidak memperlihatkan 4k @ 60 fps dalam konfigurasi streaming yang didukung. Hal ini menjamin integritas kemampuan kamera logis, memastikan bahwa aplikasi tidak akan mengalami masalah tidak mencapai 4K @ 60 fps pada ANDROID_CONTROL_ZOOM_RATIO nilai 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 stream fisik:
    • (Android 11 atau yang lebih baru) Untuk menangani penggunaan dengan lebih baik kasus seperti kedalaman dari pelacakan stereo dan gerakan, menjadikan ruang pandang output aliran fisik sebesar yang dapat dicapai oleh perangkat keras. Namun, jika streaming fisik dan streaming logis berasal dari kamera fisik, keterbatasan perangkat keras mungkin memaksa ruang pandang perangkat aliran fisik sama dengan aliran logis.
    • Untuk mengatasi tekanan memori yang disebabkan oleh beberapa aliran fisik, memastikan aplikasi menggunakan discardFreeBuffers untuk menghapus alokasi buffer gratis (buffering yang dilepaskan oleh konsumen, tetapi belum dikeluarkan oleh produser) jika aliran fisik diharapkan tidak ada aktivitas selama periode waktu tertentu.
    • 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, mengurangi konsumsi memori.