Caméra HAL

La couche d'abstraction matérielle de la caméra (HAL) d'Android connecte les API du cadre de caméra de niveau supérieur dans android.hardware.camera2 au pilote et au matériel de votre caméra sous-jacents. À partir d'Android 13, le développement de l'interface HAL de la caméra utilise AIDL . Android 8.0 a introduit Treble , basculant l'API Camera HAL vers une interface stable définie par le langage de description d'interface HAL (HIDL). Si vous avez déjà développé un module et un pilote HAL de caméra pour Android 7.0 et versions antérieures, soyez conscient des changements importants dans le pipeline de caméra.

Caméra AIDL HAL

Pour les appareils exécutant Android 13 ou version ultérieure, le cadre de caméra inclut la prise en charge des HAL de caméra AIDL. Le cadre de caméra prend également en charge les HAL de caméra HIDL, mais les fonctionnalités de caméra ajoutées dans Android 13 ou version ultérieure ne sont disponibles que via les interfaces HAL de caméra AIDL. Pour implémenter de telles fonctionnalités sur les appareils mis à niveau vers Android 13 ou version ultérieure, les fabricants d'appareils doivent migrer leur processus HAL de l'utilisation des interfaces de caméra HIDL vers les interfaces de caméra AIDL.

Pour en savoir plus sur les avantages d'AIDL, consultez AIDL pour les HAL .

Implémenter la caméra AIDL HAL

Pour une implémentation de référence d'une caméra AIDL HAL, voir hardware/google/camera/common/hal/aidl_service/ .

Les spécifications HAL de la caméra AIDL se trouvent aux emplacements suivants :

Pour les appareils migrant vers AIDL, les fabricants d'appareils devront peut-être modifier la politique Android SELinux (sepolicy) et les fichiers RC en fonction de la structure du code.

Valider la caméra AIDL HAL

Pour tester la mise en œuvre de votre caméra AIDL HAL, assurez-vous que l'appareil réussit tous les tests CTS et VTS. Android 13 introduit le test AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp .

Caractéristiques de la caméra HAL3

L'objectif de la refonte de l'API Android Camera est d'augmenter considérablement la capacité des applications à contrôler le sous-système de caméra sur les appareils Android tout en réorganisant l'API pour la rendre plus efficace et plus facile à maintenir. Le contrôle supplémentaire facilite la création d'applications de caméra de haute qualité sur les appareils Android, capables de fonctionner de manière fiable sur plusieurs produits tout en continuant à utiliser des algorithmes spécifiques à l'appareil lorsque cela est possible pour maximiser la qualité et les performances.

La version 3 du sous-système de caméra structure les modes de fonctionnement en une seule vue unifiée, qui peut être utilisée pour mettre en œuvre l'un des modes précédents et plusieurs autres, comme le mode rafale. Cela se traduit par un meilleur contrôle de l'utilisateur pour la mise au point et l'exposition, ainsi que par davantage de post-traitements, tels que la réduction du bruit, le contraste et la netteté. De plus, cette vue simplifiée permet aux développeurs d'applications d'utiliser plus facilement les différentes fonctions de la caméra.

L'API modélise le sous-système de caméra comme un pipeline qui convertit les demandes entrantes de captures d'images en images, sur une base 1:1. Les requêtes encapsulent toutes les informations de configuration concernant la capture et le traitement d'une trame. Cela inclut la résolution et le format de pixel ; contrôle manuel du capteur, de l'objectif et du flash ; Modes de fonctionnement 3A ; Contrôle du traitement RAW->YUV ; génération de statistiques ; et ainsi de suite.

En termes simples, le cadre d'application demande une image au sous-système de caméra, et le sous-système de caméra renvoie les résultats dans un flux de sortie. De plus, des métadonnées contenant des informations telles que les espaces colorimétriques et l'ombrage de l'objectif sont générées pour chaque ensemble de résultats. Vous pouvez considérer la version 3 de la caméra comme un pipeline vers le flux unidirectionnel de la version 1 de la caméra. Il convertit chaque demande de capture en une image capturée par le capteur, qui est traitée en :

  • Un objet de résultat avec des métadonnées sur la capture.
  • Un à N tampons de données d'image, chacun dans sa propre surface de destination.

L'ensemble des surfaces de sortie possibles est préconfiguré :

  • Chaque surface est une destination pour un flux de tampons d'images d'une résolution fixe.
  • Seul un petit nombre de surfaces peut être configuré comme sorties à la fois (~3).

Une requête contient tous les paramètres de capture souhaités et la liste des surfaces de sortie dans lesquelles insérer les tampons d'image pour cette requête (parmi l'ensemble total configuré). Une requête peut être ponctuelle (avec capture() ), ou elle peut être répétée indéfiniment (avec setRepeatingRequest() ). Les captures ont la priorité sur les demandes répétées.

Modèle de données de la caméra

Figure 1. Modèle de fonctionnement principal de la caméra

Aperçu de la caméra HAL1

La version 1 du sous-système de caméra a été conçue comme une boîte noire avec des commandes de haut niveau et les trois modes de fonctionnement suivants :

  • Aperçu
  • Enregistrement vidéo
  • Capturez toujours

Chaque mode a des capacités légèrement différentes et qui se chevauchent. Cela a rendu difficile la mise en œuvre de nouvelles fonctionnalités telles que le mode rafale, qui se situe entre deux des modes de fonctionnement.

Schéma fonctionnel de la caméra

Figure 2. Composants de la caméra

Android 7.0 continue de prendre en charge la caméra HAL1, car de nombreux appareils en dépendent encore. De plus, le service de caméra Android prend en charge la mise en œuvre des deux HAL (1 et 3), ce qui est utile lorsque vous souhaitez prendre en charge une caméra frontale moins performante avec la caméra HAL1 et une caméra arrière plus avancée avec la caméra HAL3.

Il existe un seul module HAL de caméra (avec son propre numéro de version ), qui répertorie plusieurs caméras indépendantes ayant chacune leur propre numéro de version. Le module de caméra 2 ou plus récent est requis pour prendre en charge les appareils 2 ou plus récents, et ces modules de caméra peuvent avoir un mélange de versions de caméra (c'est ce que nous voulons dire lorsque nous disons qu'Android prend en charge la mise en œuvre des deux HAL).