Caméra HAL

La couche d'abstraction matérielle de l'appareil photo (HAL) d'Android connecte les API de framework d'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 HAL de l'appareil photo 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 d'appareil photo pour Android 7.0 ou version antérieure, tenez compte des modifications importantes apportées au pipeline de l'appareil photo.

HAL de la caméra AIDL

Pour les appareils équipés d'Android 13 ou version ultérieure, le framework de l'appareil photo est compatible avec les HAL de l'appareil photo AIDL. Le framework de l'appareil photo est également compatible avec les HAL de l'appareil photo HIDL. Toutefois, les fonctionnalités de l'appareil photo ajoutées dans Android 13 ou version ultérieure ne sont disponibles que via les interfaces HAL de l'appareil photo AIDL. Pour implémenter de telles fonctionnalités sur les appareils qui passent à Android 13 ou version ultérieure, les fabricants d'appareils doivent migrer leur processus HAL de l'utilisation d'interfaces d'appareil photo HIDL vers des interfaces d'appareil photo AIDL.

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

Implémenter l'HAL de la caméra AIDL

Pour une implémentation de référence d'un HAL d'appareil photo AIDL, consultez hardware/google/camera/common/hal/aidl_service/.

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

Pour les appareils qui migrent vers AIDL, les fabricants d'appareils peuvent être amenés à modifier la Règle SELinux Android (sepolicy) et les fichiers RC en fonction de la structure de code.

Valider le HAL de l'appareil photo AIDL

Pour tester l'implémentation de votre HAL d'appareil photo AIDL, assurez-vous que l'appareil passe tous les tests CTS et VTS. Android 13 introduit le test VTS AIDL, VtsAidlHalCameraProvider_TargetTest.cpp.

Fonctionnalités 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 l'appareil photo 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 dans la mesure du possible pour maximiser la qualité et les performances.

La version 3 du sous-système de la caméra structure les modes de fonctionnement dans une seule vue unifiée, qui peut être utilisée pour implémenter n'importe lequel des modes précédents et plusieurs autres, tels que le mode rafale. Cela permet un meilleur contrôle de la mise au point et de l'exposition par l'utilisateur, ainsi qu'un post-traitement plus important, comme la réduction du bruit, le contraste et l'accentuation. De plus, cette vue simplifiée permet aux développeurs d'applications d'utiliser plus facilement les différentes fonctions de l'appareil photo.

L'API modélise le sous-système de l'appareil photo comme un pipeline qui convertit les requêtes entrantes de capture de frames en frames, sur une base individuelle. Les requêtes encapsulent toutes les informations de configuration sur la capture et le traitement d'un frame. Cela inclut la résolution et le format de pixel, 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 de couleurs et l'ombre 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 à sens unique de la version 1 de la caméra. Il convertit chaque requête de capture en une image capturée par le capteur, qui est traitée en:

  • 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'image d'une résolution fixe.
  • Vous ne pouvez configurer qu'un petit nombre de surfaces en tant que sorties à la fois (environ trois).

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 total configuré). Une requête peut être ponctuelle (avec capture()) ou répétée indéfiniment (avec setRepeatingRequest()). Les captures ont la priorité sur les requêtes répétées.

Modèle de données de l'appareil photo

Figure 1 : Modèle de fonctionnement de base de l'appareil photo

Présentation 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
  • 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.

Schéma fonctionnel de la caméra

Figure 2. Composants de l'appareil photo

Android 7.0 continue de prendre en charge HAL1 de l'appareil photo, car de nombreux appareils en dépendent toujours. De plus, le service d'appareil photo Android permet d'implémenter les deux HAL (1 et 3), ce qui est utile lorsque vous souhaitez prendre en charge une caméra avant 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 liste plusieurs appareils photo indépendants, chacun ayant son propre numéro de version. Le module d'appareil photo 2 ou version ultérieure est nécessaire pour prendre en charge les appareils 2 ou version ultérieure. Ces modules d'appareil photo peuvent combiner différentes versions d'appareils photo (c'est ce que nous entendons par "Android prend en charge l'implémentation des deux HAL").