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 mengarah ke arah yang sama. Perangkat kamera logis diekspos sebagai satu CameraDevice/CaptureSession ke aplikasi yang memungkinkan interaksi dengan fitur multi-kamera terintegrasi HAL. Aplikasi secara opsional 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 mengalirkan 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 logis kemampuan multi-kamera .

Klien kamera dapat query ID kamera dari perangkat fisik kamera logis tertentu terbuat dari dengan memanggil getPhysicalCameraIds() . ID dikembalikan sebagai bagian dari hasilnya kemudian digunakan untuk mengontrol perangkat fisik secara individu melalui setPhysicalCameraId() . Hasil dari permintaan individu tersebut dapat dilihat dari hasil lengkap dengan menerapkan getPhysicalCameraResults() .

Permintaan kamera fisik individual mungkin hanya mendukung subset parameter yang terbatas. Untuk menerima daftar parameter yang didukung, pengembang dapat memanggil 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 di mana kamera HAL perangkat versi 3.5 atau lebih tinggi, perangkat kamera harus mendukung isStreamCombinationSupported untuk aplikasi untuk permintaan apakah kombinasi aliran tertentu yang mengandung aliran fisik didukung.

Peta konfigurasi aliran

Untuk kamera logis, kombinasi aliran wajib untuk perangkat kamera tingkat hardware tertentu adalah sama dengan apa yang diminta di CameraDevice.createCaptureSession . Semua aliran di peta konfigurasi aliran harus 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 yang berbeda. Ini memastikan bahwa aplikasi pengambilan RAW yang ada tidak rusak.

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

Kombinasi aliran dijamin

Kedua kamera logis dan mendasari kamera fisik harus menjamin kombinasi aliran wajib diperlukan untuk tingkat perangkat mereka.

Perangkat kamera logis harus beroperasi dengan cara yang sama seperti perangkat kamera fisik berdasarkan tingkat dan kemampuan perangkat kerasnya. Direkomendasikan bahwa set fiturnya adalah superset dari kamera fisik individu.

Pada perangkat yang menjalankan Android 9, untuk setiap kombinasi streaming yang dijamin, 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 mengiklankan 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 kecepatan bingkai pengambilan ketika durasi bingkai minimum dari aliran fisik dan logis adalah sama.

Pertimbangan kinerja dan daya

  • Pertunjukan:

    • Mengonfigurasi dan mengalirkan aliran fisik dapat memperlambat kecepatan pengambilan kamera logis karena keterbatasan sumber daya.
    • Menerapkan pengaturan kamera fisik dapat memperlambat kecepatan pengambilan jika kamera yang mendasarinya dimasukkan ke dalam kecepatan bingkai yang berbeda.
  • Kekuasaan:

    • Optimalisasi 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.

  • Output yang menyatu dari perangkat kamera logis bergantung sepenuhnya pada implementasi HAL. Keputusan tentang bagaimana aliran logis yang menyatu berasal dari kamera fisik transparan untuk aplikasi dan kerangka kerja kamera Android.
  • Permintaan fisik individu dan hasil 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_IDs di getCameraIdList . Memanggil getPhysicalCameraCharacteristics maka harus mengembalikan karakteristik fisik kamera.

Validasi

Perangkat multi-kamera logis harus lulus CTS kamera seperti kamera biasa lainnya. Uji kasus yang menargetkan jenis perangkat dapat ditemukan di LogicalCameraDeviceTest modul.

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

Adegan 1 dan adegan 4 tes berjalan dengan ITS-in-a-box tes rig. The test_multi_camera_match uji menegaskan bahwa kecerahan pusat gambar sesuai ketika dua kamera keduanya diaktifkan. The test_multi_camera_alignment uji menegaskan bahwa jarak 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 rig tes kedua yang memungkinkan diulang, gerak telepon yang ditentukan dan menegaskan bahwa cap waktu giroskop dan sensor gambar cocok dan bahwa frame multi-kamera yang sinkron.

Semua kotak yang tersedia melalui AcuSpec, Inc ( www.acuspecinc.com , fred@acuspecinc.com) dan MYWAY Manufacturing ( www.myway.tw , sales@myway.tw). Selain itu, Rev 1 kotak ITS dapat dibeli melalui Barat-Mark ( www.west-mark.com , dgoodman@west-mark.com).

Praktik terbaik

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

  • (Android 10 atau lebih tinggi) Sembunyikan fisik sub-kamera dari getCameraIdList . Ini mengurangi jumlah kamera yang dapat langsung dibuka oleh aplikasi, menghilangkan kebutuhan aplikasi untuk memiliki logika pemilihan kamera yang rumit.
  • (Android 11 atau lebih tinggi) Untuk perangkat multi-kamera logis mendukung optical zoom, melaksanakan ANDROID_CONTROL_ZOOM_RATIO API, dan penggunaan ANDROID_SCALER_CROP_REGION untuk aspek rasio tanam saja. ANDROID_CONTROL_ZOOM_RATIO memungkinkan perangkat untuk 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 mengobati bidang pasca-zoom pandang sebagai array aktif sensor. Untuk informasi lebih lanjut 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 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, wide, dan telefoto, lakukan hal berikut:
    • Jika ukuran array aktif dari kamera fisik yang berbeda, HAL kamera harus melakukan pemetaan dari array aktif kamera fisik ke kamera array yang aktif 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, tetapi kamera ultralebar adalah fokus tetap, pastikan kamera logis mengiklankan dukungan fokus otomatis. HAL harus mensimulasikan mesin status fokus otomatis untuk kamera ultrawide sehingga saat aplikasi memperbesar ke lensa ultrawide, fakta bahwa kamera fisik yang mendasarinya adalah fokus tetap transparan ke aplikasi, dan mesin status 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 mengiklankan 4k @ 60 fps di konfigurasi aliran yang didukungnya. Hal ini menjamin integritas kemampuan kamera logis, memastikan bahwa aplikasi tidak akan berjalan ke 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 aliran yang menyertakan aliran 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 gerak, 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, keterbatasan 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 deallocate buffer gratis (buffer yang dirilis oleh konsumen, namun belum dequeued oleh produser) jika aliran fisik diharapkan akan menganggur untuk jangka waktu waktu.
    • Jika aliran fisik dari kamera fisik yang berbeda tidak biasanya melekat pada permintaan yang sama, pastikan aplikasi menggunakan surface group sehingga satu penyangga antrian digunakan untuk mendukung dua permukaan aplikasi menghadap, mengurangi konsumsi memori.