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.
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:
- Ajoutez un
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
pour tout appareil photo logique reposant sur au moins deux caméras qui sont également exposées à une application. - Insérer des valeurs statiques
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
de métadonnées avec une liste d'ID de caméras physiques. - Renseignez les métadonnées statiques liées à la profondeur requises pour établir une corrélation entre
flux de caméras physiques pixels:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
ANDROID_LENS_POSE_REFERENCE
Définir la valeur
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
de métadonnées par:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Pour les capteurs en mode principal/principal, pas de synchronisation matérielle entre l'obturateur et l'exposition.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Pour les capteurs en mode secondaire principal, l'obturateur matériel et l'exposition se synchronisent.
Renseigner
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
avec une liste de paramètres pris en charge par chaque caméra physique. La peut être vide si le périphérique logique n'accepte pas les requêtes individuelles.Si des demandes individuelles sont acceptées, traitez-les et appliquez-les
physicalCameraSettings
pouvant arriver dans le cadre de demandes de capture et ajouterphysicalCameraMetadata
en conséquence.Pour les versions 3.5 d'un appareil HAL de la caméra (introduit dans Android 10) ou version ultérieure, remplissez la
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
clé de résultat à l'aide de l'ID de l'appareil photo physique actif en cours de sauvegarde d'un appareil photo logique.
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 appelezgetPhysicalCameraCharacteristics
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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 utiliserANDROID_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 deANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
ANDROID_STATISTICS_FACE_RECTANGLES
etANDROID_STATISTICS_FACE_LANDMARKS
pour traiter le post-zoom le champ de vision du capteur actif. Pour en savoir plus sur la façon dontANDROID_SCALER_CROP_REGION
fonctionne avecANDROID_CONTROL_ZOOM_RATIO
, consultezcamera3_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
etANDROID_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.
- 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 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.