La couche d'abstraction matérielle (HAL) de l'appareil photo d'Android connecte les API du framework de l'appareil photo de niveau supérieur dans android.hardware.camera2 à votre pilote et matériel d'appareil photo sous-jacents. À partir d'Android 13, le développement de l'interface HAL de l'appareil photo utilise AIDL. Android 8.0 a introduit Treble, qui a remplacé l'API Camera HAL par 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 ou version antérieure, sachez que le pipeline de caméra a subi des modifications importantes.
HAL de l'appareil photo AIDL
Pour les appareils équipés d'Android 13 ou version ultérieure, le framework de l'appareil photo est compatible avec les HAL d'appareil photo AIDL. Le framework de l'appareil photo est également compatible avec les HAL d'appareil photo HIDL. Toutefois, les fonctionnalités d'appareil photo ajoutées dans Android 13 ou version ultérieure ne sont disponibles que via les interfaces HAL d'appareil photo AIDL. Pour implémenter de telles fonctionnalités sur les appareils passant à Android 13 ou version ultérieure, les fabricants d'appareils doivent migrer leur processus HAL de l'utilisation d'interfaces de caméra HIDL vers des interfaces de caméra AIDL.
Pour en savoir plus sur les avantages d'AIDL, consultez AIDL pour les HAL.
Implémenter le HAL de l'appareil photo AIDL
Pour obtenir une implémentation de référence d'une HAL de caméra AIDL, consultez
hardware/google/camera/common/hal/aidl_service/
.
Les spécifications du HAL de l'appareil photo AIDL se trouvent aux emplacements suivants :
- Fournisseur de caméras :
hardware/interfaces/camera/provider/aidl/
- Appareil photo :
hardware/interfaces/camera/device/aidl/
- Métadonnées de la caméra :
hardware/interfaces/camera/metadata/aidl/
- Types de données courants :
hardware/interfaces/camera/common/aidl/
Pour les appareils qui migrent vers AIDL, les fabricants d'appareils peuvent avoir besoin de modifier la stratégie SELinux Android (sepolicy) et les fichiers RC en fonction de la structure du code.
Valider le HAL de l'appareil photo AIDL
Pour tester votre implémentation AIDL de la couche HAL de l'appareil photo, assurez-vous que l'appareil réussit tous les tests CTS et VTS. Android 13 introduit le test AIDL VTS,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Fonctionnalités de la caméra HAL3
L'objectif de la refonte de l'API Android Camera est d'accroître considérablement la capacité des applications à contrôler le sous-système de caméras sur les appareils Android, tout en réorganisant l'API pour la rendre plus efficace et plus facile à gérer. Ce contrôle supplémentaire permet de créer plus facilement des applications d'appareil photo de haute qualité sur les appareils Android, qui peuvent fonctionner de manière fiable sur plusieurs produits tout en utilisant des algorithmes spécifiques à l'appareil chaque fois que possible pour maximiser la qualité et les performances.
La version 3 du sous-système de caméras structure les modes de fonctionnement dans une vue unifiée unique, qui peut être utilisée pour implémenter l'un des modes précédents et plusieurs autres, tels que le mode rafale. Cela permet à l'utilisateur de mieux contrôler la mise au point et l'exposition, et d'effectuer davantage de post-traitement, comme la réduction du bruit, le contraste et l'amélioration de 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éras sous la forme d'un pipeline qui convertit les demandes de capture de frames entrantes en frames, sur une base 1:1. Les requêtes contiennent toutes les informations de configuration concernant la capture et le traitement d'un frame. Cela inclut la résolution et le format des pixels, le contrôle manuel du capteur, de l'objectif et du flash, les modes de fonctionnement 3A, le contrôle du traitement RAW->YUV, la génération de statistiques, etc.
En termes simples, le framework d'application demande un frame au sous-système de l'appareil photo, et le sous-système de l'appareil photo renvoie les résultats à 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. Il convertit chaque requête de capture en une image capturée par le capteur, qui est traitée pour devenir :
- Objet de résultat contenant 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'image de résolution fixe.
- Seul un petit nombre de surfaces peuvent être configurées comme sorties à la fois (environ 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 (sur l'ensemble configuré). Une requête peut être ponctuelle (avec capture()
) ou répétée indéfiniment (avec setRepeatingRequest()
). Les captures sont prioritaires sur les requêtes répétées.

Figure 1 : Modèle de fonctionnement du cœur de la caméra
Présentation de la HAL1 de l'appareil photo
La version 1 du sous-système de caméras 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
- Capture d'image fixe
Chaque mode présente des fonctionnalités légèrement différentes et qui se chevauchent. Il était donc difficile d'implémenter de nouvelles fonctionnalités telles que le mode rafale, qui se situe entre deux des modes de fonctionnement.

Figure 2. Composants de la caméra
Android 7.0 continue de prendre en charge la HAL1 de l'appareil photo, car de nombreux appareils en dépendent encore. De plus, le service de caméra Android est compatible avec l'implémentation des 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 l'appareil photo (avec son propre numéro de version), qui liste plusieurs appareils photo indépendants ayant chacun leur propre numéro de version. Le module de caméras 2 ou version ultérieure est requis pour prendre en charge les appareils 2 ou version ultérieure. Ces modules de caméras peuvent comporter différentes versions de caméras (c'est ce que nous entendons par "Android permet d'implémenter les deux HAL").