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 ces fonctionnalités sur les appareils passant à Android 13 ou version ultérieure, les fabricants d'appareils doivent migrer son processus HAL de l'utilisation des interfaces de caméra HIDL vers la caméra AIDL de commande.
Pour en savoir plus sur les avantages d'AIDL, consultez la section AIDL pour les HAL.
Implémenter le HAL de la caméra AIDL
Pour obtenir une implémentation de référence d'une couche HAL de caméra AIDL, consultez
<ph type="x-smartling-placeholder"></ph>
hardware/google/camera/common/hal/aidl_service/
.
Les spécifications HAL de la caméra AIDL se trouvent aux emplacements suivants :
- Fournisseur de l'appareil photo:
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 être amenés à modifier la Règle SELinux Android (sepolicy) et les fichiers RC en fonction de la structure de code.
Valider l'HAL de la caméra 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 possibilité pour les applications de contrôler le sous-système de l'appareil photo sur les appareils Android tout en réorganiser 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 d'appareil photo structure les modes de fonctionnement vue unifiée unique, qui peut être utilisée pour implémenter l'un des modes précédents et plusieurs autres, comme le mode rafale. L'utilisateur peut ainsi mieux contrôler mise au point et exposition, et autres fonctionnalités de post-traitement, telles que la réduction du bruit, le contraste et d'amélioration de la netteté. De plus, cette vue simplifiée permet d'appliquer plus facilement aux développeurs d'utiliser les différentes fonctions de la caméra.
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 demandes toutes les informations de configuration relatives à la capture et au traitement cadre. Cela inclut la résolution et le format de pixel, capteur manuel, objectif et flash le contrôle ; Modes de fonctionnement 3A RAW -> Contrôle du traitement YUV la génération de statistiques ; et ainsi de suite.
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. La version 3 de l'appareil photo en tant que pipeline vers le flux unidirectionnel de la caméra version 1. 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 concernant 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 la destination d'un flux de tampons d'image d'une la résolution de problèmes.
- Seul un petit nombre de surfaces peuvent être configurées en tant que 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 (sur l'ensemble total configuré). Il peut s'agir d'une requête one-shot (avec capture()
) ou
peut être répété indéfiniment (avec setRepeatingRequest()
). Captures
ont priorité sur les requêtes répétées.
Présentation de la couche HAL1 de la caméra
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.
Android 7.0 continue de prendre en charge HAL1 de l'appareil photo, car de nombreux appareils en dépendent toujours. En outre, le service d'appareil photo Android prend en charge l'implémentation des deux HAL (1 et 3), ce qui est utile lorsque vous souhaitez prendre en charge caméra dotée d'une caméra HAL1 et d'une caméra arrière plus avancée avec caméra CARL 3.
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 requis pour prendre en charge appareils 2 ou ultérieurs. Ces modules peuvent être associés (c'est ce que nous entendons par "Android prend en charge l'implémentation à la fois HAL).