Prise en charge des versions de caméra

Cette page détaille les différences de version dans les HAL de caméra, les API et les tests CTS (Compatibility Test Suite) associés. Il couvre également plusieurs modifications architecturales apportées pour renforcer et sécuriser le cadre de la caméra dans Android 7.0, le passage à Treble dans Android 8.0 et les mises à jour que les fournisseurs doivent effectuer pour prendre en charge ces modifications dans leurs implémentations de caméra.

Terminologie

Les termes suivants sont utilisés sur cette page :

API de caméra1
Le cadre de caméra au niveau de l'application sur les appareils Android 4.4 et versions antérieures, exposé via la classe android.hardware.Camera .
API2 de la caméra
Le cadre de caméra au niveau de l'application sur les appareils Android 5.0 et supérieurs, exposé via le package android.hardware.camera2 .
Caméra HAL
La couche de module de caméra implémentée par les fournisseurs de SoC. Les frameworks publics au niveau de l'application sont construits sur la caméra HAL.
Caméra HAL3.1
Version de l'appareil photo HAL publiée avec Android 4.4.
Caméra HAL3.2
Version de l'appareil photo HAL publiée avec Android 5.0.
Caméra API1 CTS
Ensemble de tests CTS de caméra exécutés sur Camera API1.
Caméra API2 CTS
Ensemble supplémentaire de tests CTS de caméra exécutés sur Camera API2.
Tripler
Sépare l'implémentation du fournisseur (logiciel de niveau inférieur spécifique à l'appareil écrit par les fabricants de silicium) du cadre du système d'exploitation Android via une nouvelle interface du fournisseur.
HIDL
Langage de définition d'interface HAL introduit avec Treble et utilisé pour spécifier l'interface entre un HAL et ses utilisateurs.
STM
Suite de tests du fournisseur introduite aux côtés de Treble.

API de caméra

Android inclut les API de caméra suivantes.

API de caméra1

Android 5.0 est obsolète Camera API1, qui continue d'être progressivement supprimée à mesure que le développement d'une nouvelle plate-forme se concentre sur Camera API2. Cependant, la période de suppression sera longue et les versions Android continueront à prendre en charge les applications Camera API1 pendant un certain temps. Plus précisément, le support continue pour :

  • Interfaces API1 de la caméra pour les applications. Les applications d'appareil photo construites sur Camera API1 devraient fonctionner comme elles le font sur les appareils exécutant des versions Android inférieures.
  • Versions caméra HAL. Inclut la prise en charge de la caméra HAL1.0.

API2 de la caméra

Le framework Camera API2 expose le contrôle de la caméra de niveau inférieur à l'application, y compris les flux efficaces de rafale/diffusion sans copie et les contrôles par image de l'exposition, du gain, des gains de balance des blancs, de la conversion des couleurs, du débruitage, de la netteté, etc. Pour plus de détails, regardez la vidéo de présentation de Google I/O .

Android 5.0 et versions ultérieures incluent Camera API2 ; cependant, les appareils exécutant Android 5.0 et versions ultérieures peuvent ne pas prendre en charge toutes les fonctionnalités de l'API2 de l'appareil photo. La propriété android.info.supportedHardwareLevel que les applications peuvent interroger via les interfaces Camera API2 signale l'un des niveaux de prise en charge suivants :

  • LEGACY : ces appareils exposent des fonctionnalités aux applications via les interfaces Camera API2 qui sont à peu près les mêmes capacités que celles exposées aux applications via les interfaces Camera API1. Le code des frameworks existants traduit conceptuellement les appels Camera API2 en appels Camera API1 ; Les appareils existants ne prennent pas en charge les fonctionnalités Camera API2 telles que les contrôles par image.
  • LIMITED : ces appareils prennent en charge certaines fonctionnalités de la caméra API2 (mais pas toutes) et doivent utiliser la caméra HAL 3.2 ou supérieure.
  • FULL : ces appareils prennent en charge toutes les principales fonctionnalités de Camera API2 et doivent utiliser Camera HAL 3.2 ou supérieur et Android 5.0 ou supérieur.
  • LEVEL_3 : ces appareils prennent en charge le retraitement YUV et la capture d'images RAW, ainsi que des configurations de flux de sortie supplémentaires.
  • EXTERNAL : Ces appareils sont similaires aux appareils LIMITED à quelques exceptions près ; par exemple, certaines informations relatives au capteur ou à l'objectif peuvent ne pas être signalées ou avoir des fréquences d'images moins stables. Ce niveau est utilisé pour les caméras externes telles que les webcams USB.

Les capacités individuelles sont exposées via la propriété android.request.availableCapabilities dans les interfaces Camera API2. Les appareils FULL nécessitent, entre autres, les capacités MANUAL_SENSOR et MANUAL_POST_PROCESSING . La capacité RAW est facultative même pour les appareils FULL . Les appareils LIMITED peuvent annoncer n’importe quel sous-ensemble de ces fonctionnalités, y compris aucun d’entre eux. Cependant, la capacité BACKWARD_COMPATIBLE doit toujours être définie.

Le niveau matériel pris en charge par l'appareil, ainsi que les fonctionnalités spécifiques de Camera API2 qu'il prend en charge, sont disponibles sous la forme d'indicateurs de fonctionnalité suivants pour permettre le filtrage Google Play des applications de caméra Camera API2.

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

Exigences CTS

Les appareils exécutant Android 5.0 et versions ultérieures doivent réussir les tests de caméra Camera API1 CTS, Camera API2 CTS et CTS Verifier.

Les appareils qui ne disposent pas d'une implémentation Camera HAL3.2 et ne sont pas capables de prendre en charge toutes les interfaces Camera API2 doivent quand même réussir les tests Camera API2 CTS. Cependant, l'appareil fonctionne en mode Camera API2 LEGACY (dans lequel les appels Camera API2 sont conceptuellement mappés aux appels Camera API1), de sorte que tous les tests CTS Camera API2 liés aux fonctionnalités ou capacités au-delà de Camera API1 sont automatiquement ignorés.

Sur les appareils existants, les tests Camera API2 CTS exécutés utilisent les interfaces et capacités publiques Camera API1 existantes sans nouvelles exigences. Les bogues qui sont exposés (et qui provoquent un échec de Camera API2 CTS) sont des bogues déjà présents dans le Camera HAL existant de l'appareil, et seraient donc trouvés par les applications Camera API1 existantes. Nous ne nous attendons pas à beaucoup de bugs de cette nature (cependant, tous ces bugs doivent être corrigés pour réussir les tests Camera API2 CTS).

Exigences VTS

Les appareils exécutant Android 8.0 et versions ultérieures avec des implémentations HAL binderisées doivent réussir les tests Camera VTS .

Durcissement du cadre de la caméra

Pour renforcer la sécurité du cadre des médias et des caméras, Android 7.0 déplace le service de caméra hors du serveur multimédia. À partir d'Android 8.0, chaque HAL de caméra binderisé s'exécute selon un processus distinct du service de caméra. Les fournisseurs devront peut-être apporter des modifications au HAL de la caméra en fonction de l'API et des versions de HAL utilisées. Les sections suivantes détaillent les modifications architecturales dans AP1 et AP2 pour HAL1 et HAL3, ainsi que les exigences générales.

Modifications architecturales pour API1

L'enregistrement vidéo API1 peut supposer que la caméra et l'encodeur vidéo vivent dans le même processus. Lors de l'utilisation de l'API1 sur :

  • HAL3, où le service de caméra utilise BufferQueue pour transmettre des tampons entre les processus, aucune mise à jour du fournisseur n'est nécessaire.

    Caméra et pile multimédia Android 7.0 dans API1 sur HAL3

    Figure 1. Caméra et pile multimédia Android 7.0 dans API1 sur HAL3

  • HAL1, qui prend en charge la transmission des métadonnées dans les tampons vidéo, les fournisseurs doivent mettre à jour le HAL pour utiliser kMetadataBufferTypeNativeHandleSource . ( kMetadataBufferTypeCameraSource n'est plus pris en charge dans Android 7.0.)

    Caméra et pile multimédia Android 7.0 dans API1 sur HAL1

    Figure 2. Caméra et pile multimédia Android 7.0 dans API1 sur HAL1

Modifications architecturales pour API2

Pour API2 sur HAL1 ou HAL3, BufferQueue transmet les tampons afin que ces chemins continuent de fonctionner. L'architecture Android 7.0 pour API2 sur :

  • HAL1 n'est pas affecté par le déplacement de cameraservice et aucune mise à jour du fournisseur n'est nécessaire.
  • HAL3 est affecté, mais aucune mise à jour du fournisseur n'est nécessaire :

    Caméra et pile multimédia Android 7.0 dans API2 sur HAL3

    Figure 3. Caméra et pile multimédia Android 7.0 dans API2 sur HAL3

Exigences supplémentaires

Les modifications architecturales apportées pour renforcer la sécurité du cadre des médias et des caméras incluent les exigences supplémentaires suivantes en matière de périphériques.

  • Général. Les appareils nécessitent une bande passante supplémentaire en raison de l'IPC, ce qui peut affecter les cas d'utilisation de caméra sensibles au temps, tels que l'enregistrement vidéo à haute vitesse. Les fournisseurs peuvent mesurer l'impact réel en exécutant android.hardware.camera2.cts.PerformanceTest et l'application Google Camera pour un enregistrement vidéo haute vitesse à 120/240 FPS. Les appareils nécessitent également une petite quantité de RAM supplémentaire pour créer le nouveau processus.
  • Transmettez les métadonnées dans les tampons vidéo ( HAL1 uniquement ). Si HAL1 stocke des métadonnées au lieu de données de trame YUV réelles dans des tampons vidéo, le HAL doit utiliser kMetadataBufferTypeNativeHandleSource comme type de tampon de métadonnées et transmettre VideoNativeHandleMetadata dans les tampons vidéo. ( kMetadataBufferTypeCameraSource n'est plus pris en charge sur Android 7.0.) Avec VideoNativeHandleMetadata , les frameworks de caméras et de médias sont capables de transmettre les tampons vidéo entre les processus en sérialisant et en désérialisant correctement les handles natifs.
  • L’adresse du handle du tampon ne stocke pas toujours le même tampon ( HAL3 uniquement ). Pour chaque demande de capture, HAL3 obtient les adresses des descripteurs de tampon. HAL ne peut pas utiliser les adresses pour identifier les tampons, car les adresses peuvent stocker un autre handle de tampon après que HAL ait renvoyé le tampon. Vous devez mettre à jour le HAL pour utiliser des descripteurs de tampon pour identifier les tampons. Par exemple, HAL reçoit une adresse de handle de tampon A, qui stocke le handle de tampon A. Une fois que HAL a renvoyé le handle de tampon A, l’adresse de handle de tampon A peut stocker le handle de tampon B la prochaine fois que HAL la recevra.
  • Mettez à jour les politiques SELinux pour le serveur de caméras. Si les politiques SELinux spécifiques à l'appareil accordent au serveur multimédia les autorisations nécessaires pour exécuter la caméra, vous devez mettre à jour les politiques SELinux pour accorder les autorisations appropriées au serveur de caméra. Nous déconseillons la réplication des politiques SELinux du serveur multimédia pour le serveur de caméra (car le serveur multimédia et le serveur de caméra nécessitent généralement des ressources différentes dans le système). Cameraserver ne doit disposer que des autorisations nécessaires pour exécuter les fonctionnalités de la caméra et toutes les autorisations inutiles liées à la caméra dans MediaServer doivent être supprimées.
  • Séparation entre la caméra HAL et le serveur de caméra. Android 8.0 et versions ultérieures séparent en outre le HAL de la caméra binderisé dans un processus différent du serveur de caméra. IPC passe par des interfaces définies par HIDL .

Validation

Pour tous les appareils dotés d'une caméra et exécutant Android 7.0, vérifiez la mise en œuvre en exécutant Android 7.0 CTS. Bien qu'Android 7.0 n'inclut pas de nouveaux tests CTS vérifiant les modifications du service de caméra, les tests CTS existants échouent si vous n'avez pas effectué les mises à jour indiquées ci-dessus.

Pour tous les appareils dotés d'une caméra et exécutant Android 8.0 ou version ultérieure, vérifiez l'implémentation du fournisseur en exécutant VTS.

Historique des versions de la caméra HAL

Pour obtenir la liste des tests disponibles pour évaluer le HAL de la caméra Android, consultez la liste de contrôle des tests HAL de la caméra .

Android 10

Android 10 introduit les mises à jour suivantes.

API de caméra

Caméra HAL

Les versions suivantes de Camera HAL sont mises à jour dans Android 10.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : informations de caméra statiques pour un ID de caméra physique supportant un périphérique de caméra logique. Voir Prise en charge multi-caméras .
  • isStreamCombinationSupported : cette méthode prend en charge une API publique qui aide les clients à demander si une configuration de session est prise en charge. Voir API pour interroger les combinaisons de flux .

ICameraDeviceSession

  • isReconfigurationNeeded : méthode qui indique à la structure de la caméra si une reconfiguration complète du flux est requise pour d'éventuelles nouvelles valeurs de paramètres de session. Cela permet d’éviter des retards inutiles dans la reconfiguration de la caméra. Voir Requête de reconfiguration de session .
  • API de gestion des tampons HAL : ces API permettent à la caméra HAL de demander des tampons au cadre de la caméra uniquement lorsque cela est nécessaire au lieu de coupler chaque demande de capture avec ses tampons associés tout au long du pipeline de la caméra, ce qui entraîne des économies de mémoire potentiellement importantes.
    • signalStreamFlush : signale au HAL que le service de caméra est sur le point d'exécuter configureStreams_3_5 et que le HAL doit renvoyer tous les tampons des flux désignés.
    • configureStreams_3_5 : similaire à ICameraDevice3.4.configureStreams , mais en plus, le compteur streamConfigCounter est fourni pour vérifier une condition de concurrence entre les appels configureStreams_3_5 et signalStreamFlush .

Mises à jour de ICameraDeviceCallback :

  • requestStreamBuffers : rappel synchrone que la caméra HAL appelle pour demander des tampons au serveur de la caméra. Voir requestStreamBuffers .
  • returnStreamBuffers : rappel synchrone pour la caméra HAL pour renvoyer les tampons de sortie au serveur de caméra. Voir returnStreamBuffers .

3.4

Les clés suivantes sont ajoutées aux métadonnées de la caméra dans Android 10.

  • Formats d'images
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Balises de métadonnées de la caméra
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Capacités
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • Valeurs de la clé ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Configurations de flux de profondeur dynamique disponibles
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Configurations de flux HEIC disponibles
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

Module caméra

Les versions suivantes du module de caméra sont mises à jour dans Android 10.

2.5

  • Ajoute la méthode notifyDeviceStateChange permettant aux appareils d'avertir la caméra HAL lorsque des modifications physiques, telles que le pliage, affectent la caméra et le routage.

2.4

  • Les appareils lancés avec le niveau d'API 29 ou supérieur DOIVENT signaler true pour isTorchModeSupported .

Android 9

La version Android 9 introduit les mises à jour suivantes de l'API2 de la caméra et de l'interface HAL.

API de caméra

  • Présente l'API multi-caméras pour mieux prendre en charge les appareils dotés de plusieurs caméras orientées dans la même direction, permettant des fonctionnalités telles que le bokeh et le zoom transparent. Cela permet aux applications d'afficher plusieurs caméras sur un appareil comme une seule unité logique (caméra logique). Les demandes de capture peuvent également être envoyées à des caméras individuelles englobées par une caméra logique. Voir Prise en charge multi-caméras .
  • Introduit les paramètres de session. Les paramètres de session sont un sous-ensemble des paramètres de capture disponibles qui peuvent entraîner de graves retards de traitement lorsqu'ils sont modifiés. Ces coûts peuvent être atténués si les clients transmettent leurs valeurs initiales lors de l'initialisation de la session de capture. Voir Paramètres de session .
  • Ajoute des clés de données de stabilisation optique (OIS) pour la stabilisation et les effets au niveau de l'application. Voir STATISTICS_OIS_SAMPLES .
  • Ajoute la prise en charge du flash externe. Voir CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • Ajoute une intention de suivi de mouvement dans CAPTURE_INTENT . Voir CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • Déprécie LENS_RADIAL_DISTORTION et ajoute LENS_DISTORTION à sa place.
  • Ajoute des modes de correction de distorsion dans CaptureRequest . Voir DISTORTION_CORRECTION_MODE .
  • Ajoute la prise en charge des caméras USB/UVC externes sur les appareils pris en charge. Voir INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL .

Caméra HAL

3.4

Mises à jour de ICameraDeviceSession

Mises à jour de ICameraDeviceCallback

3.3

Les clés suivantes sont ajoutées aux métadonnées de la caméra dans Android 9.

  • Capacités
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • Balises de métadonnées de la caméra
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

Android 8.0

La version Android 8.0 introduit Treble. Avec Treble, les implémentations Camera HAL des fournisseurs doivent être liées . Android 8.0 contient également ces améliorations clés du service Appareil photo :

  • Surfaces partagées : activez plusieurs surfaces partageant la même OutputConfiguration
  • API système pour les modes de caméra personnalisés
  • onCaptureQueueEmpty

Consultez les sections ci-dessous pour plus d’informations sur ces fonctionnalités.

Surfaces partagées

Cette fonctionnalité permet à un seul ensemble de tampons de piloter deux sorties, telles que l'aperçu et l'encodage vidéo, ce qui réduit la consommation d'énergie et de mémoire. Pour prendre en charge cette fonctionnalité, les fabricants d'appareils doivent s'assurer que leurs implémentations de caméra HAL et gralloc HAL peuvent créer des tampons gralloc qui sont utilisés par plusieurs consommateurs différents (tels que le compositeur matériel/GPU et l'encodeur vidéo), au lieu d'un seul consommateur. Le service de caméra transmet les indicateurs d'utilisation du consommateur à la caméra HAL et au gralloc HAL ; ils doivent soit allouer les bons types de tampons, soit la caméra HAL doit renvoyer une erreur indiquant que cette combinaison de consommateurs n'est pas prise en charge.

Consultez la documentation du développeur enableSurfaceSharing pour plus de détails.

API système pour les modes de caméra personnalisés

L'API de la caméra publique définit deux modes de fonctionnement : l'enregistrement à haute vitesse normal et contraint. Ils ont une sémantique assez différente ; par exemple, le mode haute vitesse est limité à au plus deux sorties spécifiques à la fois. Divers constructeurs OEM ont exprimé leur intérêt pour la définition d'autres modes personnalisés pour les capacités spécifiques au matériel. Sous le capot, le mode est juste un entier passé à configure_streams . Voir : hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

Cette fonctionnalité inclut un appel API système que les applications de caméra OEM peuvent utiliser pour activer un mode personnalisé. Ces modes doivent démarrer à la valeur entière 0x8000 pour éviter tout conflit avec les futurs modes ajoutés à l'API publique.

Pour prendre en charge cette fonctionnalité, les OEM doivent simplement ajouter le nouveau mode à leur HAL, déclenché par cet entier transmis au HAL sur configure_streams, puis demander à leur application de caméra personnalisée d'utiliser l'API système.

Le nom de la méthode est android.hardware.camera2.CameraDevice#createCustomCaptureSession . Voir : frameworks/base/core/java/android/hardware/camera2/CameraDevice .

onCaptureQueueEmpty

Le but de cette API est de réduire la latence des changements de contrôle comme le zoom en gardant la file d'attente des requêtes aussi vide que possible. onCaptureQueueEmpty ne nécessite aucun travail HAL ; c'était purement un ajout côté cadre. Les applications qui souhaitent en profiter doivent ajouter un écouteur à ce rappel et répondre de manière appropriée. Généralement, cela se fait en envoyant une autre demande de capture à l'appareil photo.

Interface caméra HIDL

L'interface Camera HIDL est une refonte complète de l'interface Camera HAL qui utilise des API stables définies par HIDL. Toutes les fonctionnalités et capacités de la caméra introduites dans les versions héritées les plus récentes 3.4 et 2.4 (pour le module caméra) font également partie des définitions HIDL.

3.4

Ajouts mineurs aux métadonnées prises en charge et modifications apportées à la prise en charge de data_space :

  • Ajoutez les métadonnées statiques ANDROID_SENSOR_OPAQUE_RAW_SIZE comme obligatoire si le format RAW_OPAQUE est pris en charge.
  • Ajoutez les métadonnées statiques ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE comme obligatoire si un format RAW est pris en charge.
  • Basculez le champ camera3_stream_t data_space vers une définition plus flexible, en utilisant la définition version 0 du codage de l'espace de données.
  • Ajouts de métadonnées générales disponibles pour HALv3.2 ou version ultérieure :
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Révision mineure du HAL à capacité étendue :

  • Mises à jour des API de retraitement OPAQUE et YUV.
  • Prise en charge de base des tampons de sortie de profondeur.
  • Ajout du champ data_space à camera3_stream_t .
  • Ajout du champ de rotation à camera3_stream_t .
  • Ajout du mode de fonctionnement de configuration du flux camera3 à camera3_stream_configuration_t .

3.2

Révision mineure du HAL à capacité étendue :

  • Obsolète get_metadata_vendor_tag_ops . Utilisez plutôt get_vendor_tag_ops dans camera_common.h .
  • Déprécie register_stream_buffers . Tous les tampons gralloc fournis par framework à HAL dans process_capture_request peuvent être nouveaux à tout moment.
  • Ajoutez une prise en charge partielle des résultats. process_capture_result peut être appelé plusieurs fois avec un sous-ensemble des résultats disponibles avant que le résultat complet ne soit disponible.
  • Ajoutez un modèle manuel à camera3_request_template . Les applications peuvent utiliser ce modèle pour contrôler directement les paramètres de capture.
  • Retravailler les spécifications bidirectionnelles et du flux d'entrée.
  • Modifiez le chemin de retour du tampon d’entrée. Le tampon est renvoyé dans process_capture_result au lieu de process_capture_request .

3.1

Révision mineure du HAL à capacité étendue :

  • configure_streams transmet les indicateurs d'utilisation du consommateur au HAL.
  • appel flush pour supprimer toutes les demandes/tampons en vol aussi rapidement que possible.

3.0

Première révision de HAL à capacités étendues :

  • Changement de version majeur puisque l'ABI est complètement différent. Aucun changement dans les capacités matérielles requises ou le modèle opérationnel par rapport à la version 2.0.
  • Interfaces de requête d'entrée et de file d'attente de flux retravaillées : le framework appelle HAL avec les tampons de requête et de flux suivants déjà retirés de la file d'attente. La prise en charge du framework de synchronisation est incluse, nécessaire pour des implémentations efficaces.
  • Déplacement des déclencheurs vers les requêtes, la plupart des notifications vers les résultats.
  • Consolidation de tous les rappels du framework en une seule structure et de toutes les méthodes de configuration en un seul appel initialize() .
  • Configuration du flux en un seul appel pour simplifier la gestion des flux. Les flux bidirectionnels remplacent la construction STREAM_FROM_STREAM .
  • Sémantique en mode limité pour les périphériques matériels plus anciens/limités.

2.0

Version initiale de HAL à fonctionnalités étendues (Android 4.2) [camera2.h] :

  • Suffisant pour implémenter l’API android.hardware.Camera existante.
  • Permet la file d'attente ZSL dans la couche de service de caméra.
  • Non testé pour les nouvelles fonctionnalités telles que le contrôle manuel de la capture, la capture Bayer RAW, le retraitement des données RAW, etc.

1.0

Caméra Android initiale HAL (Android 4.0) [camera.h] :

  • Converti à partir de la couche d'abstraction C++ CameraHardwareInterface.
  • Prend en charge l'API android.hardware.Camera .

Historique des versions du module caméra

Cette section contient des informations de version du module pour le module matériel Caméra, basées sur camera_module_t.common.module_api_version . Les deux chiffres hexadécimaux les plus significatifs représentent la version majeure et les deux chiffres les moins significatifs représentent la version mineure.

2.4

Cette version du module de caméra ajoute les modifications d'API suivantes :

  1. Prise en charge du mode torche. Le framework peut activer le mode torche pour tout appareil photo doté d'un flash, sans ouvrir un appareil photo. L'appareil photo a une priorité plus élevée pour accéder au flash que le module caméra ; l'ouverture d'un appareil photo éteint la torche si elle avait été activée via l'interface du module. En cas de conflits de ressources, tels que open() est appelé pour ouvrir un périphérique de caméra, le module HAL de la caméra doit informer le framework via le rappel d'état du mode torche que le mode torche a été désactivé.
  2. Prise en charge des caméras externes (par exemple, caméra USB hot-plug). Les mises à jour de l'API spécifient que les informations statiques de la caméra sont disponibles uniquement lorsque la caméra est connectée et prête à être utilisée pour les caméras externes hot-plug. Les appels visant à obtenir des informations statiques sont des appels non valides lorsque l'état de la caméra n'est pas CAMERA_DEVICE_STATUS_PRESENT . Le framework s'appuie uniquement sur les rappels de changement d'état de l'appareil pour gérer la liste des caméras externes disponibles.
  3. Conseils d'arbitrage de caméra. Ajoute la prise en charge de l'indication explicite du nombre de caméras pouvant être ouvertes et utilisées simultanément. Pour spécifier des combinaisons valides de périphériques, les champs resource_cost et conflicting_devices doivent toujours être définis dans la structure camera_info renvoyée par l'appel get_camera_info .
  4. Méthode d'initialisation du module. Appelé par le service de caméra après le chargement du module HAL pour permettre une initialisation unique de HAL. Il est appelé avant que toute autre méthode de module ne soit invoquée.

2.3

Cette version du module de caméra ajoute la prise en charge des appareils HAL de caméra hérités ouverts. Le framework peut l'utiliser pour ouvrir le périphérique de caméra en tant que périphérique HAL de version inférieure si le même périphérique peut prendre en charge plusieurs versions d'API de périphérique. L'appel d'ouverture du module matériel standard ( common.methods->open ) continue d'ouvrir le périphérique caméra avec la dernière version prise en charge, qui est également la version répertoriée dans camera_info_t.device_version .

2.2

Cette version du module de caméra ajoute la prise en charge des balises de fournisseur à partir du module et rend obsolète l'ancien vendor_tag_query_ops qui n'était auparavant accessible qu'avec un périphérique ouvert.

2.1

Cette version du module de caméra ajoute la prise en charge des rappels asynchrones au framework à partir du module HAL de la caméra, qui est utilisé pour informer le framework des modifications apportées à l'état du module de caméra. Les modules qui fournissent une méthode set_callbacks() valide doivent signaler au moins ce numéro de version.

2.0

Les modules de caméra qui signalent ce numéro de version implémentent la deuxième version de l'interface HAL du module de caméra. Les caméras ouvrant via ce module peuvent prendre en charge la version 1.0 ou la version 2.0 de l'interface HAL de la caméra. Le champ device_version de camera_info est toujours valide ; le champ static_camera_characteristics de camera_info est valide si le champ device_version est 2.0 ou supérieur.

1.0

Les modules de caméra qui signalent ces numéros de version implémentent l'interface HAL initiale du module de caméra. Tous les appareils photo pouvant être ouverts via ce module prennent en charge uniquement la version 1 du périphérique caméra HAL. Les champs device_version et static_camera_characteristics de camera_info ne sont pas valides. Seule l'API android.hardware.Camera peut être prise en charge par ce module et ses appareils.