Compatibilité avec plusieurs caméras

Android 9 est compatible avec les API multi-caméras. via un nouvel appareil photo logique composé d'au moins deux appareils caméras orientées dans la même direction. L'appareil photo logique est exposés sous la forme d'une seule CameraDevice/CaptureSession à une application, ce qui permet avec des fonctionnalités multicaméras intégrées à HAL. Les applications peuvent éventuellement accéder aux flux, aux métadonnées et aux commandes des caméras physiques sous-jacentes, et les contrôler.

Compatibilité avec plusieurs caméras

Figure 1 : Compatibilité avec plusieurs caméras

Dans ce schéma, les différents ID de caméra sont associés à un code couleur. L'application peut diffuser des tampons bruts en streaming depuis chaque caméra physique en même temps. Il est également vous pouvez définir des commandes distinctes et recevoir des métadonnées appareils photo physiques.

Exemples et sources

La promotion des appareils multicaméras doit être associée au fonctionnalité logique multicaméra.

Les clients de l'appareil photo peuvent interroger l'ID de l'appareil photo d'un appareil la caméra logique est constituée en appelant getPhysicalCameraIds() Les ID renvoyés dans le résultat sont ensuite utilisés pour contrôler les appareils physiques. individuellement via setPhysicalCameraId() Les résultats de ces requêtes individuelles peuvent être interrogés à partir du en appelant cette méthode : getPhysicalCameraResults()

Les requêtes individuelles pour les caméras physiques ne peuvent prendre en charge qu'un sous-ensemble limité paramètres. Pour recevoir la liste des paramètres acceptés, les développeurs peuvent appeler getAvailablePhysicalCameraRequestKeys()

Les flux de caméra physique ne sont compatibles qu'avec les requêtes sans retraitement. uniquement pour les capteurs monochromes et Bayer.

Implémentation

Checklist d'assistance

Pour ajouter des appareils logiques multi-caméras côté HAL:

Pour les appareils équipés d'Android 9, les appareils photo doivent permettent de remplacer un flux logique YUV/RAW par des flux physiques du même taille (ne s'applique pas aux flux RAW) et au même format à partir de deux fichiers caméras. Cela ne s'applique pas aux appareils équipés d'Android 10.

Pour les appareils équipés d'Android 10, La version de la caméra HAL de l'appareil est 3,5 ou supérieure, l'appareil photo doit être compatible isStreamCombinationSupported aux applications de demander si une combinaison de flux spécifique contenant et des flux physiques sont pris en charge.

Mappage de configuration de flux

Pour une caméra logique, les combinaisons de flux obligatoires pour l'appareil photo de un certain niveau de matériel est le même que ce qui est requis dans CameraDevice.createCaptureSession Tous les flux du mappage de configuration de flux doivent être des flux logiques.

Pour un appareil photo logique compatible avec le format RAW et des sous-caméras physiques de tailles différentes, si une application configure un flux RAW logique, la caméra logique ne doit pas basculer vers des sous-caméras physiques ayant la taille des capteurs. Cela garantit que les applications de capture RAW existantes continuent de fonctionner.

Pour profiter du zoom optique intégré au système HAL en basculant entre des sous-appareils photo physiques pendant la capture RAW, les applications doivent configurer des flux de sous-caméras physiques au lieu d'un flux RAW logique.

Combinaison de flux garanti

La caméra logique et les caméras physiques sous-jacentes doivent garantir la combinaisons de flux obligatoires requises pour leurs niveaux d'appareil.

Un appareil photo logique doit fonctionner de la même manière qu'un appareil photo physique. en fonction de son niveau de matériel et de ses capacités. Nous vous recommandons d'utiliser est un sur-ensemble de celui des caméras physiques individuelles.

Sur les appareils équipés d'Android 9, pour chaque combinaison de flux, la caméra logique doit prendre en charge:

  • Remplacer un flux logique YUV_420_888 ou un flux brut par deux flux physiques de de taille et de format identiques, chacun provenant d'un appareil photo physique distinct, étant donné que la taille et le format sont pris en charge par les appareils photo physiques.

  • Ajouter deux flux bruts, un provenant de chaque caméra physique, si l'appareil photo logique n’annonce pas la capacité RAW, contrairement aux appareils photo physiques sous-jacents. Cela se produit généralement lorsque les caméras physiques ont des tailles de capteur différentes.

  • L'utilisation de flux physiques à la place d'un flux logique de même taille et . Cela ne doit pas ralentir la fréquence d'images de la capture la durée minimale de la trame des flux physiques et logiques sont identiques.

Considérations sur les performances et la puissance

  • Performances :

    • La configuration et la diffusion en continu de flux physiques peuvent ralentir le taux de capture de la caméra logique en raison de contraintes liées aux ressources.
    • L'application de paramètres d'appareil photo physique peut ralentir le taux de capture si le les caméras sous-jacentes sont mis dans différentes fréquences d’images.
  • Alimentation :

    • L'optimisation de l'alimentation de HAL continue de fonctionner dans le cas par défaut.
    • La configuration ou la requête de flux physiques peut remplacer la configuration et d'augmenter la consommation d'énergie.

Personnalisation

Vous pouvez personnaliser l'implémentation de votre appareil de différentes manières.

  • La sortie fusionnée de l'appareil photo logique dépend entièrement du HAL la mise en œuvre. La décision sur la manière dont les flux logiques fusionnés sont dérivés de les appareils photo physiques sont transparents pour l'application et l'appareil photo Android. d'infrastructure.
  • Des requêtes physiques et des résultats individuels peuvent éventuellement être pris en charge. La de paramètres disponibles dans de telles requêtes dépend aussi entièrement l'implémentation HAL spécifique.
  • À partir d'Android 10, le HAL peut réduire le nombre qui peuvent être ouverts directement par une application en choisissant de ne pas promouvoir une partie ou la totalité des PHYSICAL_ID dans getCameraIdList Vous appelez getPhysicalCameraCharacteristics doit ensuite renvoyer les caractéristiques de l'appareil photo physique.

Validation

Les appareils multicaméra logiques doivent réussir le test CTS de la caméra comme n'importe quelle autre caméra standard. Les scénarios de test qui ciblent ce type d'appareil sont disponibles dans le LogicalCameraDeviceTest de ce module.

Ces trois tests ITS ciblent les systèmes multicaméras fusion d'images:

Les tests des scènes 1 et 4 sont exécutés avec Test ITS-in-a-box support. Le test test_multi_camera_match affirme que la luminosité du centre des images correspond lorsque les deux caméras sont activées. La Le test test_multi_camera_alignment affirme que les espacements, orientations, et les paramètres de distorsion sont correctement chargés. Si le système multicaméra inclut un champ de vision grand angle (> 90o), la version rev2 de la boîte ITS est requise.

Sensor_fusion est un deuxième support d'évaluation qui permet d'utiliser des numéros de téléphone et affirme que les codes temporels du gyroscope et du capteur d'image correspondent les images de plusieurs caméras sont synchronisées.

Tous les boîtiers sont disponibles auprès d'AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) et MYWAY Industrie (www.myway.tw, sales@myway.tw) De plus, la boîte rev1 ITS peut être achetée auprès de West-Mark. (www.west-mark.com, dgoodman@west-mark.com).

Bonnes pratiques

Pour tirer pleinement parti des fonctionnalités offertes par le multi-caméra tout en maintenant de compatibilité de votre application, suivez ces bonnes pratiques pour implémenter multi-caméra:

  • (Android 10 ou version ultérieure) Masquer les sous-caméras physiques getCameraIdList Cela réduit le nombre de caméras pouvant être ouvertes directement applications, ce qui élimine la nécessité pour les applications d'avoir une logique de sélection d'appareil photo complexe.
  • (Android 11 ou version ultérieure) Pour un système logique à plusieurs caméras compatible avec le zoom optique, implémentez ANDROID_CONTROL_ZOOM_RATIO et utiliser ANDROID_SCALER_CROP_REGION pour le recadrage uniquement. ANDROID_CONTROL_ZOOM_RATIO permet à l'appareil d'effectuer un zoom arrière et de préserver la précision. Dans ce cas, le HAL doit ajuster le système de coordonnées de ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES et ANDROID_STATISTICS_FACE_LANDMARKS pour traiter le post-zoom le champ de vision du capteur actif. Pour en savoir plus sur la façon dont ANDROID_SCALER_CROP_REGION fonctionne avec ANDROID_CONTROL_ZOOM_RATIO, consultez camera3_crop_reprocess#cropping.
  • Pour les appareils multicaméras dotés de caméras physiques ayant des s'assurer que l'appareil fait la promotion d'une compatibilité d'une certaine valeur ou une plage pour une commande uniquement si toute la plage de zoom prend en charge la valeur ou une plage d'adresses IP. Par exemple, si l'appareil photo logique est composé d'un ultra grand angle, un appareil photo grand angle et un appareil à téléobjectif, procédez comme suit: <ph type="x-smartling-placeholder">
      </ph>
    • Si les tailles de tableau actives des caméras physiques sont différentes, La couche d'abstraction de la caméra doit effectuer le mappage entre les matrices actives des caméras physiques le tableau logique actif de l'appareil photo pour ANDROID_SCALER_CROP_REGION ; ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES et ANDROID_STATISTICS_FACE_LANDMARKS afin que, du point de vue de l'application, le système de coordonnées correspond à la taille du tableau actif de la caméra logique.
    • Si les appareils photo grand angle et à téléobjectif sont compatibles avec l'autofocus, mais que l'objectif ultra grand angle L'appareil photo possède une mise au point fixe, assurez-vous que l'appareil photo logique annonce l'autofocus. de l'assistance. Le HAL doit simuler une machine à mise au point automatique pour l'objectif ultra grand angle de sorte que lorsque l'application effectue un zoom arrière sur l'objectif ultra grand angle, le fait que La mise au point fixe de la caméra physique sous-jacente est transparente pour l'application, et les machines d'état à autofocus pour les modes de mise au point automatique comme prévu.
    • Si les appareils photo grand angle et à téléobjectif sont compatibles avec la résolution 4K à 60 images par seconde, La caméra ultra grand angle n'est compatible qu'avec les résolutions 4K à 30 FPS ou 1080p à 60 FPS. et non en 4K à 60 FPS, assurez-vous que l'appareil photo logique n'annonce pas une résolution 4K. 60 FPS dans les configurations de streaming compatibles Cela garantit que l'intégrité logique de l'appareil photo, ce qui permet de s'assurer que l'application vous n'atteignez pas la 4K à 60 FPS ANDROID_CONTROL_ZOOM_RATIO est inférieure à 1.
  • Android 10, un système logique multi-caméra n'est pas obligatoire pour accepter les combinaisons de flux qui incluent des flux physiques. Si la HAL est compatible avec une combinaison de flux physiques: <ph type="x-smartling-placeholder">
      </ph>
    • (Android 11 ou version ultérieure) Pour une meilleure gestion de l'utilisation comme la profondeur avec le son stéréo et le suivi du mouvement, rendent le champ de vision des sorties du flux physique aussi que possible par le matériel. Toutefois, si un flux physique et un flux logique proviennent du même caméra physique, des limitations matérielles peuvent forcer le champ de vision flux physique identique au flux logique.
    • Pour remédier à la pression sur la mémoire provoquée par plusieurs flux physiques, Assurez-vous que les applications utilisent discardFreeBuffers pour désallouer les tampons libres (tampons libérés par le consommateur, mais qu'il n'a pas encore retirés de la file d'attente par le producteur) si un flux physique doit être inactif pendant un certain temps.
    • Si les flux physiques de différentes caméras physiques ne sont généralement pas à la même demande, assurez-vous que les applications utilisent surface group afin qu'une file d'attente de tampon soit utilisée pour sauvegarder deux surfaces visibles par l'application, ce qui réduit la consommation de mémoire.