Cette page décrit en détail les différences de version dans les HAL, les API et les tests Compatibility Test Suite (CTS) associés de l'appareil photo. Il couvre également plusieurs modifications architecturales apportées pour renforcer et sécuriser le framework de l'appareil photo 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 l'appareil photo.
Terminologie
Les termes suivants sont utilisés sur cette page :
- API Camera1
- Framework de l'appareil photo au niveau de l'application sur les appareils Android 4.4 et versions antérieures, exposé via la classe
android.hardware.Camera
. - API Camera2
- Framework d'appareil photo au niveau de l'application sur les appareils équipés d'Android 5.0 ou version ultérieure, exposé via le package
android.hardware.camera2
. - HAL de l'appareil photo
- Couche du module de caméras implémentée par les fournisseurs de SoC. Les frameworks publics au niveau de l'application sont basés sur le HAL de la caméra.
- Camera HAL3.1
- Version du HAL de l'appareil photo publiée avec Android 4.4.
- Camera HAL3.2
- Version de la HAL de l'appareil photo publiée avec Android 5.0.
- CTS de l'API Camera1
- Ensemble de tests CTS de l'appareil photo qui s'exécutent sur l'API 1 de l'appareil photo.
- CTS de l'API Camera2
- Ensemble supplémentaire de tests CTS de l'appareil photo qui s'exécutent au-dessus de l'API Camera2.
- Aigus
- Sépare l'implémentation du fournisseur (logiciel de bas niveau spécifique à l'appareil écrit par les fabricants de semi-conducteurs) du framework de l'OS Android via une nouvelle interface fournisseur.
- HIDL
- Langage de définition d'interface HAL introduit avec Treble et utilisé pour spécifier l'interface entre une HAL et ses utilisateurs.
- VTS La
- suite de tests du fournisseur a été introduite en même temps que Treble.
API de l'appareil photo
Android inclut les API de caméras suivantes.
API Camera1
Android 5.0 a rendu obsolète l'API Camera1, qui continue d'être abandonnée à mesure que le développement de la nouvelle plate-forme se concentre sur l'API Camera2. Toutefois, la période de transition sera longue et les versions d'Android continueront de prendre en charge les applications Camera API1 pendant un certain temps. Plus précisément, l'assistance continue d'être disponible pour :
- Interfaces de l'API Camera1 pour les applications. Les applications d'appareil photo basées sur l'API Camera1 devraient fonctionner comme sur les appareils exécutant des versions d'Android antérieures.
- Versions de l'HAL de la caméra Inclut la compatibilité avec Camera HAL1.0.
API Camera2
Le framework Camera API2 expose un contrôle de l'appareil photo de niveau inférieur à l'application, y compris des flux de rafale/streaming efficaces sans copie et des contrôles par frame de l'exposition, du gain, des gains de balance des blancs, de la conversion des couleurs, de la réduction du bruit, de l'amélioration de la netteté et plus encore. Pour en savoir plus, regardez la présentation vidéo Google I/O.
Android 5.0 et versions ultérieures incluent l'API Camera2. Toutefois, les appareils équipés d'Android 5.0 et versions ultérieures ne sont pas forcément compatibles avec toutes les fonctionnalités de l'API Camera2. La propriété android.info.supportedHardwareLevel
que les applications peuvent interroger via les interfaces de l'API Camera2 indique l'un des niveaux de compatibilité suivants :
LEGACY
: ces appareils exposent des fonctionnalités aux applications via les interfaces Camera API2, qui sont à peu près les mêmes que celles exposées aux applications via les interfaces Camera API1. Le concept de code des anciens frameworks traduit conceptuellement les appels de l'API Camera2 en appels de l'API Camera1. Les anciens appareils ne sont pas compatibles avec les fonctionnalités de l'API Camera2, telles que les commandes par frame.LIMITED
: ces appareils sont compatibles avec certaines fonctionnalités de l'API Camera2 (mais pas toutes) et doivent utiliser Camera HAL 3.2 ou version ultérieure.FULL
: ces appareils sont compatibles avec toutes les fonctionnalités principales de l'API Camera2 et doivent utiliser Camera HAL 3.2 ou version ultérieure et Android 5.0 ou version ultérieure.LEVEL_3
: ces appareils sont compatibles avec le retraitement YUV et la capture d'images RAW, ainsi qu'avec des configurations de flux de sortie supplémentaires.EXTERNAL
: ces appareils sont semblables aux appareilsLIMITED
, à quelques exceptions près. Par exemple, certaines informations sur les capteurs ou les objectifs 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 fonctionnalité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 fonctionnalités MANUAL_SENSOR
et MANUAL_POST_PROCESSING
. La fonctionnalité 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 aucune. Toutefois, la fonctionnalité BACKWARD_COMPATIBLE
doit toujours être définie.
Le niveau de matériel compatible de l'appareil, ainsi que les fonctionnalités spécifiques de l'API Camera2 qu'il prend en charge, sont disponibles sous forme d'indicateurs de fonctionnalité suivants pour permettre le filtrage des applications d'appareil photo API2 sur Google Play.
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 équipés d'Android 5.0 ou version ultérieure doivent réussir les tests CTS de l'API 1 de l'appareil photo, de l'API 2 de l'appareil photo et de l'appareil photo CTS Verifier.
Les appareils qui ne disposent pas d'une implémentation Camera HAL3.2 et qui ne sont pas capables de prendre en charge les interfaces complètes de l'API Camera2 doivent quand même réussir les tests CTS de l'API Camera2. Toutefois, l'appareil s'exécute en mode LEGACY
de l'API Camera2 (dans lequel les appels de l'API Camera2 sont conceptuellement mappés sur les appels de l'API Camera1). Par conséquent, tous les tests CTS de l'API Camera2 liés aux fonctionnalités ou aux capacités au-delà de l'API Camera1 sont automatiquement ignorés.
Sur les anciens appareils, les tests CTS de l'API Camera2 qui sont exécutés utilisent les interfaces et les fonctionnalités publiques existantes de l'API Camera1, sans aucune nouvelle exigence. Les bugs qui sont exposés (et qui entraînent un échec du CTS de l'API Camera2) sont des bugs déjà présents dans le HAL de l'appareil photo existant de l'appareil et seraient donc détectés par les applications API1 de l'appareil photo existantes. Nous ne nous attendons pas à ce qu'il y ait beaucoup de bugs de ce type (toutefois, tous les bugs de ce type doivent être corrigés pour réussir les tests CTS de l'API Camera2).
Exigences concernant VTS
Les appareils équipés d'Android 8.0 ou version ultérieure avec des implémentations HAL binderisées doivent réussir les tests VTS de l'appareil photo.
Renforcement du framework de la caméra
Pour renforcer la sécurité du framework multimédia et de la caméra, 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 dans un processus distinct du service de caméra. Les fournisseurs devront peut-être apporter des modifications au HAL de l'appareil photo en fonction des versions de l'API et du HAL utilisées. Les sections suivantes décrivent en détail les modifications architecturales apportées aux AP1 et AP2 pour HAL1 et HAL3, ainsi que les exigences générales.
Modifications architecturales pour l'API1
L'enregistrement vidéo API1 peut supposer que la caméra et l'encodeur vidéo se trouvent dans le même processus. Lorsque vous utilisez l'API 1 sur :
- HAL3, où le service de caméras utilise BufferQueue pour transmettre des tampons entre les processus, aucune mise à jour du fournisseur n'est nécessaire.
Figure 1. Pile multimédia et de l'appareil photo Android 7.0 dans API1 sur HAL3
- HAL1, qui permet de transmettre des métadonnées dans les tampons vidéo, les fournisseurs doivent mettre à jour le HAL pour utiliser
kMetadataBufferTypeNativeHandleSource
. (kMetadataBufferTypeCameraSource
n'est plus compatible avec Android 7.0.)Figure 2 Pile multimédia et de l'appareil photo 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. 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 concerné, mais aucune mise à jour du fournisseur n'est nécessaire :
Figure 3. Pile de l'appareil photo et du contenu multimédia Android 7.0 dans API2 sur HAL3
Exigences supplémentaires
Les modifications architecturales apportées pour renforcer la sécurité du framework multimédia et de l'appareil photo incluent les exigences supplémentaires suivantes concernant les appareils.
- Généralités Les appareils nécessitent une bande passante supplémentaire en raison de l'IPC, ce qui peut affecter les cas d'utilisation de la 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 l'enregistrement vidéo haute vitesse à 120/240 FPS. Les appareils ont également besoin d'une petite quantité de RAM supplémentaire pour créer le nouveau processus. - Transmettre les métadonnées dans les tampons vidéo (HAL1 uniquement). Si HAL1 stocke des métadonnées au lieu de données de frame YUV réelles dans les tampons vidéo, le HAL doit utiliser
kMetadataBufferTypeNativeHandleSource
comme type de tampon de métadonnées et transmettreVideoNativeHandleMetadata
dans les tampons vidéo. (kMetadataBufferTypeCameraSource
n'est plus compatible avec Android 7.0.) AvecVideoNativeHandleMetadata
, les frameworks de caméras et multimédias peuvent transmettre les tampons vidéo entre les processus en sérialisant et 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 requête de capture, HAL3 obtient les adresses des handles 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 a renvoyé le tampon. Vous devez mettre à jour la HAL pour utiliser des handles de tampon afin d'identifier les tampons. Par exemple, HAL reçoit une adresse de gestionnaire de tampon A, qui stocke le gestionnaire de tampon A. Une fois que HAL renvoie le handle de tampon A, l'adresse du handle de tampon A peut stocker le handle de tampon B la prochaine fois que HAL le reçoit.
- Mettez à jour les règles SELinux pour cameraserver. Si les règles SELinux spécifiques à l'appareil accordent au serveur multimédia les autorisations nécessaires pour exécuter l'appareil photo, vous devez mettre à jour les règles SELinux pour accorder au serveur de l'appareil photo les autorisations appropriées. Nous vous déconseillons de répliquer les règles SELinux du serveur multimédia pour le serveur de caméras (car le serveur multimédia et le serveur de caméras nécessitent généralement des ressources différentes dans le système). Cameraserver ne doit disposer que des autorisations nécessaires pour effectuer les fonctionnalités de l'appareil photo, et toutes les autorisations inutiles liées à l'appareil photo dans mediaserver doivent être supprimées.
- Séparation entre le HAL de la caméra et le serveur de caméras. Android 8.0 et versions ultérieures séparent également la HAL de l'appareil photo binderisée dans un processus différent de cameraserver. L'IPC passe par des interfaces définies par HIDL.
Validation
Pour tous les appareils équipés d'une caméra et fonctionnant sous Android 7.0, vérifiez l'implémentation en exécutant le CTS Android 7.0. Bien qu'Android 7.0 n'inclue pas de nouveaux tests CTS permettant de vérifier les modifications apportées au service de l'appareil photo, les tests CTS existants échouent si vous n'avez pas effectué les mises à jour indiquées ci-dessus.
Pour tous les appareils équipés d'une caméra et exécutant Android 8.0 ou version ultérieure, validez l'implémentation du fournisseur en exécutant VTS.
Historique des versions de l'HAL de la caméra
Pour obtenir la liste des tests disponibles pour évaluer le HAL de l'appareil photo Android, consultez la liste de contrôle des tests HAL de l'appareil photo.
Android 10
Android 10 introduit les mises à jour suivantes.
API Camera
- Améliorations apportées au multicaméra, qui permettent d'utiliser les caméras physiques individuellement ou via les caméras logiques correspondantes en masquant les ID des caméras physiques. Consultez Compatibilité avec plusieurs caméras.
- Possibilité de vérifier si une configuration de session particulière est prise en charge sans la surcharge de performances liée à la création d'une nouvelle session.
Consultez
CameraDevice
. - Possibilité de récupérer les configurations de flux recommandées pour un cas d'utilisation donné afin de rendre le client plus économe en énergie et plus performant. Consultez
getRecommendedStreamConfigurationMap
. - Prise en charge du format d'image JPEG de profondeur. Pour en savoir plus, consultez les spécifications concernant la profondeur dynamique.
- Prise en charge du format d'image HEIC. Consultez Imagerie HEIF.
- Améliorations de la confidentialité. Certaines clés sont requises pour que le client dispose des autorisations
CAMERA
avant de pouvoir les récupérer à partir deCameraCharacteristics
. VoirgetKeysNeedingPermission
.
HAL de l'appareil photo
Les versions suivantes de la HAL de l'appareil photo sont mises à jour dans Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: informations statiques sur la caméra pour un ID de caméra physique servant de base à un appareil photo logique. Consultez Compatibilité avec plusieurs caméras. isStreamCombinationSupported
: cette méthode est compatible avec une API publique qui aide les clients à déterminer si une configuration de session est acceptée. Consultez API pour interroger les combinaisons de flux.
ICameraDeviceSession
-
isReconfigurationNeeded
: Méthode qui indique au framework de l'appareil photo si une reconfiguration complète du flux est requise pour les nouvelles valeurs possibles des paramètres de session. Cela permet d'éviter les délais de reconfiguration inutiles de la caméra. Consultez Requête de reconfiguration de session. - API de gestion des tampons HAL : ces API permettent au HAL de l'appareil photo de demander des tampons au framework de l'appareil photo 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 l'appareil photo, ce qui permet de réaliser des économies de mémoire potentiellement importantes.
-
signalStreamFlush
: signale au HAL que le service de caméras est sur le point d'effectuerconfigureStreams_3_5
et que le HAL doit renvoyer tous les tampons des flux désignés. -
configureStreams_3_5
: semblable àICameraDevice3.4.configureStreams
, mais en plus, le compteurstreamConfigCounter
est fourni pour vérifier une condition de concurrence entre les appelsconfigureStreams_3_5
etsignalStreamFlush
.
-
Mises à jour de l'outil ICameraDeviceCallback
:
-
requestStreamBuffers
: Rappel synchrone que le HAL de l'appareil photo appelle pour demander des tampons au serveur de l'appareil photo. VoirrequestStreamBuffers
. -
returnStreamBuffers
: rappel synchrone pour que le HAL de l'appareil photo renvoie les tampons de sortie au serveur de l'appareil photo. VoirreturnStreamBuffers
.
3.4
Les clés suivantes sont ajoutées aux métadonnées de l'appareil photo dans Android 10.
- Formats d'image
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- Tags 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
- Fonctionnalité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 de caméras
Les versions suivantes du module de caméras sont mises à jour dans Android 10.
2.5
- Ajoute la méthode
notifyDeviceStateChange
pour que les appareils notifient le HAL de l'appareil photo lorsque des changements physiques, tels que le pliage, affectent l'appareil photo et le routage.
2.4
- Les appareils lancés avec le niveau d'API 29 ou supérieur DOIVENT signaler
true
pourisTorchModeSupported
.
Android 9
La version Android 9 introduit les mises à jour suivantes de l'interface HAL et de l'API Camera2.
API Camera
- Présentation de l'API multi-caméra pour mieux prendre en charge les appareils équipés de plusieurs caméras orientées dans la même direction, ce qui permet d'activer des fonctionnalités telles que l'effet bokeh et le zoom fluide. Cela permet aux applications d'afficher plusieurs caméras sur un appareil comme une seule unité logique (caméra logique). Les requêtes de capture peuvent également être envoyées à des caméras individuelles incluses dans une caméra logique. Consultez Compatibilité avec plusieurs caméras.
- Présentation des 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. Consultez 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
. - Ajout de la prise en charge du flash externe. Voir
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Ajoute un intent de suivi du mouvement dans
CAPTURE_INTENT
. VoirCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Abandonne
LENS_RADIAL_DISTORTION
et ajouteLENS_DISTORTION
à la place. - Ajout de modes de correction de la distorsion dans
CaptureRequest
. VoirDISTORTION_CORRECTION_MODE
. - Ajout de la compatibilité avec les caméras USB/UVC externes sur les appareils compatibles. Voir
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
HAL de l'appareil photo
3.4
Modifications apportées à ICameraDeviceSession
-
configureStreams_3_4
: Ajoute la compatibilité avecsessionParameters
et les caméras logiques. -
processCaptureRequest_3_4
: Ajoute la prise en charge de l'inclusion des ID de caméras physiques dans la structure du flux.
Modifications apportées à ICameraDeviceCallback
-
processCaptureResult_3_4
: Ajoute des métadonnées de caméra physique aux résultats de capture.
3.3
Les clés suivantes sont ajoutées aux métadonnées de l'appareil photo dans Android 9.
- Fonctionnalités
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- Tags 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 HAL de l'appareil photo du fournisseur doivent être binderisées. Android 8.0 contient également les améliorations clés suivantes apportées au service de l'appareil photo :
- Surfaces partagées : activez plusieurs surfaces partageant le même
OutputConfiguration
. - API système pour les modes caméra personnalisés
onCaptureQueueEmpty
Pour en savoir plus sur ces fonctionnalités, consultez les sections ci-dessous.
Surfaces partagées
Cette fonctionnalité permet à un seul ensemble de tampons de générer 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 HAL de l'appareil photo et de gralloc peuvent créer des tampons gralloc 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éras transmet les indicateurs d'utilisation du consommateur à la HAL de la caméra et à la HAL gralloc. Ces dernières doivent allouer les bons types de tampons ou la HAL de la caméra doit renvoyer une erreur indiquant que cette combinaison de consommateurs n'est pas prise en charge.
Pour en savoir plus, consultez la documentation pour les développeurs
enableSurfaceSharing
.
API système pour les modes caméra personnalisés
L'API Appareil photo publique définit deux modes de fonctionnement : l'enregistrement normal et l'enregistrement haute vitesse limité. Leur sémantique est assez différente. Par exemple, le mode haute vitesse est limité à deux sorties spécifiques à la fois au maximum. Plusieurs OEM ont exprimé leur intérêt pour la définition d'autres modes personnalisés pour les fonctionnalités spécifiques au matériel. En interne, le mode n'est qu'un entier transmis à configure_streams
. Consultez :
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Cette fonctionnalité inclut un appel d'API système que les applications d'appareil photo OEM peuvent utiliser pour activer un mode personnalisé. Ces modes doivent commencer par 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 n'ont qu'à ajouter le nouveau mode à leur HAL, déclenché par cet entier transmis au HAL sur configure_streams, puis à faire en sorte que leur application de caméras personnalisée utilise l'API système.
Le nom de la méthode est
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Consultez :
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
L'objectif de cette API est de réduire la latence des modifications de contrôle telles que le zoom en gardant la file d'attente des requêtes aussi vide que possible. onCaptureQueueEmpty
ne nécessite aucun travail HAL. Il s'agit d'un ajout purement côté framework. Les applications qui souhaitent en profiter doivent ajouter un écouteur à ce rappel et répondre de manière appropriée. En général, cela se fait en envoyant une autre requête de capture à l'appareil photo.
Interface HIDL de l'appareil photo
L'interface HIDL de l'appareil photo est une refonte complète de l'interface HAL de l'appareil photo qui utilise des API stables définies par HIDL. Toutes les fonctionnalités et capacités de l'appareil photo introduites dans les dernières versions 3.4 et 2.4 (pour le module de l'appareil photo) sont également incluses dans les définitions HIDL.
3.4
Ajouts mineurs aux métadonnées compatibles et modifications apportées à la compatibilité avec data_space :
- Ajoutez les métadonnées statiques
ANDROID_SENSOR_OPAQUE_RAW_SIZE
comme obligatoires si le formatRAW_OPAQUE
est pris en charge. - Ajoutez des métadonnées statiques
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
comme obligatoires si un format RAW est accepté. - Passez du champ
camera3_stream_t data_space
à une définition plus flexible, en utilisant la définition de l'encodage de l'espace de données de la version 0. - 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 de la HAL à capacité étendue :
- Mises à jour des API de retraitement OPAQUE et YUV.
- Compatibilité de base avec les 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 la configuration du flux camera3 à
camera3_stream_configuration_t
.
3.2
Révision mineure de la HAL à capacité étendue :
- Abandonne
get_metadata_vendor_tag_ops
. Utilisez plutôtget_vendor_tag_ops
danscamera_common.h
. - Abandonne
register_stream_buffers
. Tous les tampons gralloc fournis par le framework au HAL dansprocess_capture_request
peuvent être nouveaux à tout moment. - Ajout de la prise en charge des résultats partiels.
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. - Retravaillez les spécifications des flux bidirectionnels et d'entrée.
- Modifiez le chemin de retour du tampon d'entrée. Le tampon est renvoyé dans
process_capture_result
au lieu deprocess_capture_request
.
3.1
Révision mineure de la HAL à capacité étendue :
configure_streams
transmet les indicateurs d'utilisation par le consommateur au HAL.- Appel de vidage pour supprimer toutes les requêtes/tampers en cours aussi rapidement que possible.
3,0
Première révision du HAL à capacité étendue :
- Changement de version majeure, car l'ABI est complètement différent. Aucune modification des capacités matérielles requises ni du modèle opérationnel par rapport à la version 2.0.
- Interfaces de file d'attente de flux et de requête d'entrée retravaillées : le framework appelle HAL avec les prochains tampons de requête et de flux déjà retirés de la file d'attente. La compatibilité avec le framework de synchronisation est incluse, ce qui est nécessaire pour des implémentations efficaces.
- Les déclencheurs ont été déplacés dans les requêtes et la plupart des notifications dans les résultats.
- Consolidation de tous les rappels dans le framework en une seule structure, et de toutes les méthodes de configuration en un seul appel
initialize()
. - La configuration des flux est désormais effectuée en un seul appel pour simplifier leur gestion.
Les flux bidirectionnels remplacent la construction
STREAM_FROM_STREAM
. - Sémantique du mode limité pour les appareils anciens/limités.
2,0
Version initiale de la HAL à capacité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 l'appareil photo.
- 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
HAL de l'appareil photo Android initial (Android 4.0) [camera.h]:
- Converti à partir de la couche d'abstraction C++ CameraHardwareInterface.
- Compatible avec l'API
android.hardware.Camera
.
Historique des versions du module de caméras
Cette section contient des informations sur le versionnage du module matériel de l'appareil photo, basé sur camera_module_t.common.module_api_version
. Les deux chiffres hexadécimaux les plus significatifs représentent la version majeure, et les deux moins significatifs représentent la version mineure.
2.4
Cette version du module de caméras ajoute les modifications d'API suivantes :
- Prise en charge du mode Torche. Le framework peut activer le mode lampe torche pour tout appareil photo équipé d'un flash, sans ouvrir l'appareil photo. L'appareil photo a une priorité plus élevée pour accéder au flash que le module de caméras. L'ouverture d'un appareil photo désactive la lampe torche si elle avait été activée via l'interface du module. En cas de conflit de ressources, par exemple lorsque
open()
est appelé pour ouvrir un périphérique de caméras, le module HAL de la caméra doit avertir le framework via le rappel d'état du mode lampe torche que ce mode a été désactivé. - Compatibilité avec les caméras externes (par exemple, les caméras USB à brancher à chaud). Les mises à jour de l'API précisent que les informations statiques de la caméra ne sont disponibles que lorsque la caméra est connectée et prête à être utilisée pour les caméras externes à brancher à chaud. Les appels pour obtenir des informations statiques ne sont pas valides lorsque l'état de la caméra n'est pas
CAMERA_DEVICE_STATUS_PRESENT
. Le framework s'appuie uniquement sur les rappels de modification de l'état de l'appareil pour gérer la liste des caméras externes disponibles. - Conseils pour l'arbitrage de la 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 d'appareils, les champs
resource_cost
etconflicting_devices
doivent toujours être définis dans la structurecamera_info
renvoyée par l'appelget_camera_info
. - Méthode d'initialisation du module. Appelé par le service de caméras après le chargement du module HAL pour permettre l'initialisation unique du HAL. Elle est appelée avant l'invocation de toute autre méthode de module.
2.3
Cette version du module de caméras ajoute la prise en charge des anciens appareils HAL de caméras ouverts.
Le framework peut l'utiliser pour ouvrir l'appareil photo en tant que version HAL inférieure si le même appareil peut prendre en charge plusieurs versions de l'API de l'appareil.
L'appel ouvert du module matériel standard (common.methods->open
) continue d'ouvrir le périphérique de caméras avec la dernière version compatible, qui est également celle listée dans camera_info_t.device_version
.
2.2
Cette version du module de caméras ajoute la prise en charge des tags de fournisseur à partir du module et abandonne les anciens vendor_tag_query_ops
qui n'étaient auparavant accessibles qu'avec un appareil ouvert.
2.1
Cette version du module de caméras 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éras. Les modules qui fournissent une méthode set_callbacks()
valide doivent indiquer au moins ce numéro de version.
2,0
Les modules de caméras qui signalent ce numéro de version implémentent la deuxième version de l'interface HAL du module de caméras. Les caméras pouvant être ouvertes via ce module peuvent être compatibles avec 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 défini sur 2.0 ou une valeur supérieure.
1.0
Les modules de caméras qui signalent ces numéros de version implémentent l'interface HAL du module de caméras initial. Tous les appareils photo pouvant être ouverts via ce module ne sont compatibles qu'avec la version 1 de la couche HAL de l'appareil photo. 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.